<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.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:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-13321238</id><updated>2009-10-31T19:04:36.876+11:00</updated><title type="text">Richard's Braindump - Agile and .NET Team Development</title><subtitle type="html">Software Development &amp;amp; Design, Agile Management (and whatever else gets from my head to the screen)</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/full" /><link rel="alternate" type="text/html" href="http://richardsbraindump.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/full?start-index=26&amp;max-results=25" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>451</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/RichardsBraindump" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-13321238.post-2596023957522156978</id><published>2009-10-31T18:56:00.000+11:00</published><updated>2009-10-31T18:56:10.593+11:00</updated><title type="text">Test the Right Thing</title><content type="html">I was helping a customer recently to improve the way they do testing and I looked at one of their tests as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;[TestMethod]&lt;br /&gt;public void FeedFileProcessorResolvesLoadDirectoryViaFeedType()&lt;br /&gt;{&lt;br /&gt;  MockRepository mocks = new MockRepository();&lt;br /&gt;  using (MockServices services = new MockServices(mocks))&lt;br /&gt;  {&lt;br /&gt;    FeedType feedType = MockServices.CreateStubFeedType(1001, null, null, @"z:\PickUpDirectory");&lt;br /&gt;    Expect.Call(services.FeedTypeProvider.GetByFeedTypeID(feedType.FeedTypeID))&lt;br /&gt;      .Return(feedType);&lt;br /&gt;    mocks.ReplayAll();&lt;br /&gt;&lt;br /&gt;    MockFeedFileProcessor.DefaultFeedTypeId = 1001;&lt;br /&gt;    FeedFileProcessor processor = new MockFeedFileProcessor();&lt;br /&gt;    string loadFilesFrom = processor.DirectoryToLoadFilesFrom.FullName;&lt;br /&gt;&lt;br /&gt;    mocks.VerifyAll();&lt;br /&gt;&lt;br /&gt;    Assert.AreEqual(@"z:\PickUpDirectory", loadFilesFrom);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;On first glance it seems reasonable.&amp;nbsp; The test is named so that it describes what it does and seems to work through checking that the object behaves as it should. Sure the Rhino Mocks syntax could be updated to use AAA syntax, and the using section doesn't really indicate what's going on under the hood there but apart from that it doesn’t look too bad.&lt;br /&gt;&lt;br /&gt;Look a little closer though and check out the class under test and you may see a small problem.&amp;nbsp; That’s right, the only class being tested here is the mock itself.&amp;nbsp; Not something that you really want to do.&lt;br /&gt;&lt;br /&gt;By not actually testing a class from our production code we’ve made the test have zero value for the system itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-2596023957522156978?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IOhn_vp55lygK8RtxroXj0WuCjM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IOhn_vp55lygK8RtxroXj0WuCjM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IOhn_vp55lygK8RtxroXj0WuCjM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IOhn_vp55lygK8RtxroXj0WuCjM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=teN3d7V26Ks:ptHvACD-pnk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=teN3d7V26Ks:ptHvACD-pnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=teN3d7V26Ks:ptHvACD-pnk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/teN3d7V26Ks" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/2596023957522156978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/10/test-right-thing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/2596023957522156978" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/2596023957522156978" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/teN3d7V26Ks/test-right-thing.html" title="Test the Right Thing" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/10/test-right-thing.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-5235511815959305451</id><published>2009-10-23T08:31:00.001+11:00</published><updated>2009-10-23T08:31:40.709+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title type="text">Architecture in the Small Presentation</title><content type="html">&lt;p&gt;Last night I was privileged to be the first speaker at the newly formed Sydney Architecture User Group put together by &lt;a href="http://weblogs.asp.net/pglavich/default.aspx" target="_blank"&gt;Paul Glavich&lt;/a&gt; (&lt;a href="http://twitter.com/glav" target="_blank"&gt;@glav&lt;/a&gt;) and &lt;a href="http://omarbesiso.typepad.com/" target="_blank"&gt;Omar Besiso&lt;/a&gt; (&lt;a href="http://twitter.com/omarbesiso" target="_blank"&gt;@omarbesiso&lt;/a&gt;) and sponsored by Datacom.&lt;/p&gt;  &lt;p&gt;There was a strong turnout and plenty of people in the audience willing to ask questions.&amp;#160; I’ve uploaded &lt;a href="http://www.slideshare.net/rbanks54/architecture-in-the-small" target="_blank"&gt;my slide deck from last night&lt;/a&gt; to Slideshare in case you weren’t able to make it there in person or you just wanted to go back over it for yourself.&lt;/p&gt;  &lt;div style="text-align: left; width: 425px" id="__ss_2323420"&gt;&lt;a style="margin: 12px 0px 3px; display: block; font: 14px helvetica,arial,sans-serif; text-decoration: underline" title="Architecture In The Small" href="http://www.slideshare.net/rbanks54/architecture-in-the-small"&gt;Architecture In The Small&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=architectureinthesmall-091022161151-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=architecture-in-the-small" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=architectureinthesmall-091022161151-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=architecture-in-the-small" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div style="font-family: tahoma,arial; height: 26px; font-size: 11px; padding-top: 2px"&gt;View more &lt;a style="text-decoration: underline" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline" href="http://www.slideshare.net/rbanks54"&gt;Richard Banks&lt;/a&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/13321238-5235511815959305451?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mRzi_Gt63Jw7hJbpADhm1d3Cnx0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mRzi_Gt63Jw7hJbpADhm1d3Cnx0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mRzi_Gt63Jw7hJbpADhm1d3Cnx0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mRzi_Gt63Jw7hJbpADhm1d3Cnx0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=II1W_R7X-wE:jjkRD1DXUl0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=II1W_R7X-wE:jjkRD1DXUl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=II1W_R7X-wE:jjkRD1DXUl0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/II1W_R7X-wE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/5235511815959305451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/10/architecture-in-small-presentation.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/5235511815959305451" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/5235511815959305451" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/II1W_R7X-wE/architecture-in-small-presentation.html" title="Architecture in the Small Presentation" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/10/architecture-in-small-presentation.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-3160508735452314596</id><published>2009-10-16T10:24:00.004+11:00</published><updated>2009-10-16T10:27:59.706+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="nhibernate" /><title type="text">How to Make Linq to NHibernate’s Expand() Type Safe</title><content type="html">Linq to NHibernate is great.&amp;nbsp; It makes your queries so much easier to understand since it expresses the intent of what you are doing better than the CreateCriteria API does.&lt;br /&gt;&lt;br /&gt;For example compare this statement:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;var query = session.CreateCriteria&amp;lt;UserProfile&amp;gt;()&lt;br /&gt;  .Add(Restrictions.Eq("Id", identifier))&lt;br /&gt;  .SetFetchMode("Sites"), FetchMode.Join);&lt;br /&gt;var result = query.UniqueResult&amp;lt;userprofile&amp;gt;();&lt;/pre&gt;&lt;br /&gt;with this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;var query = from p in session.Linq&amp;lt;UserProfile&amp;gt;().Expand("Sites")&lt;br /&gt;  where p.Identifier.Equals(identifier)&lt;br /&gt;  select p;&lt;br /&gt;var result = query.SingleOrDefault();&lt;/pre&gt;&lt;br /&gt;To me, the second is much easier to read, especially if you have people who aren’t familiar with NHibernate trying to read your code.&amp;nbsp; The only problem with both of these queries is the use of those nasty magic strings.&amp;nbsp; What happens if I refactor my UserProfile class and rename the Sites collection to something like PublicSites?&amp;nbsp; Obviously my query will no longer work as expected but I’d only find that out when I ran my integration tests (or at run time if I happened to be lazy and don’t write tests).&lt;br /&gt;&lt;br /&gt;I want to avoid all that magic string nastiness and lean on the compiler to help me out, so I planned to write some extension methods to improve the situation, but do that and reinvent the wheel? After all, &lt;a href="http://marcinbudny.blogspot.com/" target="_blank"&gt;Marcin Budny&lt;/a&gt; has done all that wheel-inventing already and made the &lt;a href="http://marcinbudny.blogspot.com/2009/10/typed-expand-for-linq-to-nhiberante.html" target="_blank"&gt;extension methods available from his blog&lt;/a&gt;.&amp;nbsp; Sweet!&lt;br /&gt;&lt;br /&gt;Now I can get rid of that “Sites” magic string and write strongly typed code that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;var query = from p in session.Linq&amp;lt;UserProfile&amp;gt;().Expand(u =&amp;gt; u.Sites)&lt;br /&gt;  where p.Identifier.Equals(identifier)&lt;br /&gt;  select p;&lt;br /&gt;var result = query.FirstOrDefault();&lt;/pre&gt;&lt;br /&gt;Isn’t that so much nicer :-)&amp;nbsp; Thanks Marcin for making your code available!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-3160508735452314596?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LzsRkU8EMLbOGyqnGyGwtjU1WZI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LzsRkU8EMLbOGyqnGyGwtjU1WZI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LzsRkU8EMLbOGyqnGyGwtjU1WZI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LzsRkU8EMLbOGyqnGyGwtjU1WZI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=jXuOBov3t3w:6nDI7tv5Uoo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=jXuOBov3t3w:6nDI7tv5Uoo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=jXuOBov3t3w:6nDI7tv5Uoo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/jXuOBov3t3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/3160508735452314596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/10/how-to-make-linq-to-nhibernates-expand.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/3160508735452314596" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/3160508735452314596" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/jXuOBov3t3w/how-to-make-linq-to-nhibernates-expand.html" title="How to Make Linq to NHibernate’s Expand() Type Safe" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/10/how-to-make-linq-to-nhibernates-expand.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6941491536938410212</id><published>2009-10-16T07:14:00.001+11:00</published><updated>2009-10-16T07:14:32.225+11:00</updated><title type="text">Sydney Architecture User Group, Oct 22nd</title><content type="html">&lt;p&gt;Just thought I’d let you all know that I’ll be speaking at the first meeting of the Sydney Architecture User Group next week (you’ll find the group &lt;a href="http://www.facebook.com/home.php#/group.php?gid=161478795632" target="_blank"&gt;on Facebook&lt;/a&gt;).&amp;#160; So, if you’re in Sydney on Thursday Oct 22nd then head on over the the Grace Hotel, 77 York St, at 6pm and I’ll see you there.&amp;#160; We’ll be in one of the function rooms – just check the board as you enter the hotel to see which one.&lt;/p&gt;  &lt;p&gt;For those of you who want to know what I’m talking about – it’s Architecture in the Small and this is the abstract: &lt;em&gt;No matter how good your design or how well the big pieces of your architecture fit together it's the little things that really count. The little things are the things that can take your vision of beauty and either make it a reality or turn it into a thing of nightmares. Richard will talk about what these little things are, the impact they have and, most importantly, what to do about them.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6941491536938410212?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KgT6A8zisa-awfY2iDVSbJr8lTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KgT6A8zisa-awfY2iDVSbJr8lTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KgT6A8zisa-awfY2iDVSbJr8lTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KgT6A8zisa-awfY2iDVSbJr8lTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=60O6eBLfXLU:gfG0irlF9IQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=60O6eBLfXLU:gfG0irlF9IQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=60O6eBLfXLU:gfG0irlF9IQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/60O6eBLfXLU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6941491536938410212/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/10/sydney-architecture-user-group-oct-22nd.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6941491536938410212" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6941491536938410212" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/60O6eBLfXLU/sydney-architecture-user-group-oct-22nd.html" title="Sydney Architecture User Group, Oct 22nd" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/10/sydney-architecture-user-group-oct-22nd.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6240725441082495256</id><published>2009-09-24T12:01:00.001+10:00</published><updated>2009-09-24T12:01:05.015+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title type="text">How I Learnt To Love A Password Manager</title><content type="html">&lt;p&gt;For the longest time (i.e. since I first used a password) I’ve always kept passwords in my head.&amp;#160; In the early days it was easy since systems were isolated and pesky password policies hadn’t yet become the norm.&amp;#160; It was usually easy to remember, because the number of unique passwords I had was, um, just one.&lt;/p&gt;  &lt;p&gt;Then over time those password policies started to appear and I had to start thinking of new passwords for more places that wanted more security, typically by varying my single core password.&amp;#160; Then they introduced password history, and dictionary checks and all sorts of things which now meant I had to remember what all the various incarnations were.&amp;#160; My capacity for password rememberising was fast reaching full.&lt;/p&gt;  &lt;p&gt;What made it harder is that with more and more things being on the internet I was also getting an account explosion and starting to forgetting what login id I was using, especially when it was for a site I hardly used, so I’d often find myself doing the ol’ “forgotten password” thing.&amp;#160; Side note: It’s a scary experience when the forgotten password thing results in you being emailed your current password.&amp;#160; Yikes!&lt;/p&gt;  &lt;p&gt;Anyway, I knew this wasn’t best practice,and there were plenty of people saying “use a password manager” but the conceived hassle for me of trying to keep passwords in sync between different machines was a massive turn off.&lt;/p&gt;  &lt;p&gt;Anyway, after reading Jeff Atwood’s little &lt;a href="http://www.codinghorror.com/blog/archives/001262.html" target="_blank"&gt;cautionary tale&lt;/a&gt; and his &lt;a href="http://www.codinghorror.com/blog/archives/001263.html" target="_blank"&gt;follow up&lt;/a&gt; about how his own password got hax0red I decide enough was enough, time to man up and get over my anti-password-manager mentality.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/SrrS05Pt38I/AAAAAAAAArs/MlrZOm-e69k/s1600-h/main_big%5B1%5D%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="KeePass screenshot" border="0" alt="KeePass screenshot" align="left" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SrrS16A8VKI/AAAAAAAAArw/lNTt2gbT8aQ/main_big%5B1%5D_thumb%5B3%5D.png?imgmax=800" width="244" height="187" /&gt;&lt;/a&gt; So first things first, I did some poking around the googleweb and found &lt;a href="http://keepass.info/" target="_blank"&gt;KeePass&lt;/a&gt; and decided to give it a try.&lt;/p&gt;  &lt;p&gt;Why this one and not others? Well, first – it’s free! :-) But mainly it’s because    &lt;p&gt;it’s portable and because it has a really cool AutoType feature where with a single key combo (ctrl_alt_a) I can get my passwords autotyped into whatever app I happen to be using.&amp;#160; So it’s now not only is it remembering my passwords for me, but it’s also saving me keystrokes.&amp;#160; Heaven!&amp;#160; There’s a slew of other things it does as well which I really like, but you can go check those out for yourself.&lt;/p&gt;    &lt;p&gt;Anyways, I used it for a while to see if it worked for me and got to enjoy and appreciate what it did.&amp;#160; But it still didn’t solve my problem of wanting to maintain my passwords only once but have them available on any of the machines I have, even when I don’t have an internet connection.&amp;#160; This is where the portability factor becomes valuable.&amp;#160; You can take the app, copy it to a USB stick and just plug it into whatever computer you happen to be using and it’ll work.&amp;#160; However the idea of chewing up a USB slot just for the password manager didn’t appeal to me.&amp;#160; It’s too clumsy to keep plugging the thing in all the time and there’s a good chance I’d do something stupid and lose the USB drive.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SrrS2kk3CPI/AAAAAAAAAr0/63iSP-873eQ/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SrrS3_675WI/AAAAAAAAAr4/guCo-gilKag/image_thumb%5B5%5D.png?imgmax=800" width="244" height="195" /&gt;&lt;/a&gt;Enter Live Mesh.&amp;#160; To get the “on every machine” thing working I just created a live mesh folder and synchronised the KeePass folder with my mesh.&amp;#160; Now whenever I update my passwords all I have to do on the other machines is make sure Mesh had synced and do a quick restart of KeePass to pick up my new changes and I’m all set.&amp;#160; Everything just works beautifully&lt;/p&gt;    &lt;p&gt;I’ve been doing this now for about 3 months and I’m loving it!&amp;#160; I’m gradually replacing all my crappy passwords with stringer ones generated by the tool and feeling a lot more secure about my online identity.&lt;/p&gt;    &lt;p&gt;As a note, I probably won’t change my twitter password as I use twitter from web kiosks, my windows mobile phone (though there is an unofficial KeePass port for the mobile) and other places where I don’t have access to my mesh folder.&lt;/p&gt;    &lt;p&gt;If you’re in the same situation i was in before, then maybe it’s time you started looking at how you too can get to love a password manager :-)&lt;/p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6240725441082495256?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0ERqIZRpaMdepCLkducPHZK5mVQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ERqIZRpaMdepCLkducPHZK5mVQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0ERqIZRpaMdepCLkducPHZK5mVQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ERqIZRpaMdepCLkducPHZK5mVQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=0M_4orCjgj4:rvuobzBI1F8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=0M_4orCjgj4:rvuobzBI1F8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=0M_4orCjgj4:rvuobzBI1F8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/0M_4orCjgj4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6240725441082495256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/how-i-learnt-to-love-password-manager.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6240725441082495256" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6240725441082495256" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/0M_4orCjgj4/how-i-learnt-to-love-password-manager.html" title="How I Learnt To Love A Password Manager" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/how-i-learnt-to-love-password-manager.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-8209164452240582193</id><published>2009-09-22T20:01:00.001+10:00</published><updated>2009-09-22T20:01:58.407+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="general" /><title type="text">Solved: Connection Issues with Communicator 2007</title><content type="html">&lt;p&gt;At &lt;a href="http://www.readify.net" target="_blank"&gt;Readify&lt;/a&gt; we use Microsoft Office Communicator 2007 R2 as the internal IM and presence tool, with the added bonus that since we are federated with Microsoft we are also able contact the people we know in Microsoft through the same tool.&lt;/p&gt;  &lt;p&gt;Unfortunately I’ve had a recurring problem where communicator wouldn’t connect when I was plugged in at home.&amp;#160; I had just assumed it was an ISP issue and since it was only a minor annoyance I never really bothered to do much about it.&lt;/p&gt;  &lt;p&gt;That was until today. Today I finally pulled my finger out and decided to see what the problem was.&lt;/p&gt;  &lt;p&gt;Firstly, I turned on event log error logging in Communicator via the Options…-&amp;gt; General settings area.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SriggrxxBXI/AAAAAAAAArM/csXjzxF-5rI/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_5dD_rBQSs2o/SrighU8NPAI/AAAAAAAAArQ/rCFX5eFwiIo/image_thumb%5B1%5D.png?imgmax=800" width="393" height="104" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next I looked at the event log itself and saw this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Communicator was unable to locate the login server.&amp;#160; No DNS SRV records exist for domain readify.net, so Communicator was unable to login.       &lt;br /&gt;&amp;#160;&lt;strong&gt;Resolution:&lt;/strong&gt;        &lt;br /&gt; Please double-check the server name to make sure that it is typed correctly.&amp;#160; If it is correct, the network administrator will either need to use manual configuration to specify the login server's fully-qualified domain name (FQDN), or add DNS SRV records for the readify.net domain in order to allow automatic client configuration.&amp;#160; The DNS SRV records _sipinternaltls._tcp.readify.net, _sipinternal._tcp.readify.net and/or _sip._tls.readify.net may need to be configured if automatic configuration is desired.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;No SRV records? Really, so how does it connect on other networks? Hmm, I sense something fishy.&lt;/p&gt;  &lt;p&gt;So I then ran an nslookup from the command prompt and got this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/Srigh1MD9UI/AAAAAAAAArU/gYAyiPMJgNQ/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/Srigi872fnI/AAAAAAAAArY/k2yhs3xf63g/image_thumb%5B5%5D.png?imgmax=800" width="305" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;That 10.1.1.1 address is the internal address of my DLink DSL-G604T router that I’ve had for years.&lt;/p&gt;  &lt;p&gt;At this point I decided to check the DNS server that my router talks to:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SrigjWzOxhI/AAAAAAAAArc/Ho4jADOWHDY/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SrigkC1MDNI/AAAAAAAAArg/4tWTmhofJ_Y/image_thumb%5B7%5D.png?imgmax=800" width="406" height="308" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Oh, so that works! OK. So it rules out my ISP as the problem (sorry for assuming it was you IINet).&amp;#160; So then why doesn’t my router pass through the information it needs?&lt;/p&gt;  &lt;p&gt;Turns out that &lt;a href="http://en.wikipedia.org/wiki/SRV_record" target="_blank"&gt;SRV records&lt;/a&gt; are relatively new to the DNS scene and my old faithful router that has served me well for many years now doesn’t have a clue about what they are or what they should do and so simply ignores any request to resolve them.&amp;#160; Even better, none of the firmware updates add any support for them either.&lt;/p&gt;  &lt;p&gt;So I decided to switch my laptop’s DNS settings to the ISP’s DNS server directly, and try again.&amp;#160; Whalla! That works!&amp;#160; Cool.&lt;/p&gt;  &lt;p&gt;Now the only problem I have is that I can’t use those settings permanently as the ISP won’t respond to DNS requests made from outside it’s own network, meaning it won’t work for me when I’m on the road.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/SrigkjMww3I/AAAAAAAAArk/i0WJuiTh0zo/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SriglSEk_AI/AAAAAAAAAro/Kd6GPjd8tic/image_thumb%5B9%5D.png?imgmax=800" width="163" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To solve this I wanted to use a DNS available from anywhere – and so I decided to give &lt;a href="http://www.opendns.com/" target="_blank"&gt;OpenDNS&lt;/a&gt; a try..&amp;#160; Talk about easy.&amp;#160; Just point my IPv4 settings to the OpenDNS name servers and try it again.&lt;/p&gt;  &lt;p&gt;It all worked beautifully, and best of all I’m now network independent and able to use the same DNS server settings everywhere I go.&amp;#160; Problem solved.&amp;#160;&amp;#160; All connected.&amp;#160; Happy me.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-8209164452240582193?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d9Cx9LjhhfdQwushXN2jxZ-hn8c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d9Cx9LjhhfdQwushXN2jxZ-hn8c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/d9Cx9LjhhfdQwushXN2jxZ-hn8c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d9Cx9LjhhfdQwushXN2jxZ-hn8c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=JQIQPCJ_bqY:vhGKu8aX3zY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=JQIQPCJ_bqY:vhGKu8aX3zY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=JQIQPCJ_bqY:vhGKu8aX3zY:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/JQIQPCJ_bqY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/8209164452240582193/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/solved-connection-issues-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/8209164452240582193" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/8209164452240582193" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/JQIQPCJ_bqY/solved-connection-issues-with.html" title="Solved: Connection Issues with Communicator 2007" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/solved-connection-issues-with.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-4432770712764246769</id><published>2009-09-22T10:58:00.001+10:00</published><updated>2009-09-22T10:58:52.896+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="readify" /><title type="text">Missed TechEd Australia? Get the content anyway</title><content type="html">&lt;p&gt;Close on the heels of TechEd Australia, &lt;a href="http://www.readify.net"&gt;Readify&lt;/a&gt; have announced the latest Dev Days events for both Sydney and Melbourne.&lt;/p&gt;  &lt;p&gt;When we last ran these we had multiple tracks which presented tough choices on what to see at times, so we’ve changed things around and will now run separate morning and afternoon tracks instead.&amp;#160; It means you can now get to everything, or just come for the half day session you are interested in and go to the beach for the other half of the day (or do some work if you must).&lt;/p&gt;  &lt;p&gt;I'll be presenting the morning session in Sydney, covering &lt;strong&gt;Software Quality and Application Lifecycle Management&lt;/strong&gt; split across two subjects:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Gathering Quality Requirements for Agile Development Teams, and an &lt;/li&gt;    &lt;li&gt;Introduction to Visual Studio Team System 2010.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In the afternoon, &lt;a href="http://blog.tatham.oddie.com.au/" target="_blank"&gt;Tatham Oddie (MVP)&lt;/a&gt; will be covering &lt;strong&gt;Building for the Web with .NET&lt;/strong&gt; through three different presentations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Building Fast, Standards Compliant ASP.NET Websites, &lt;/li&gt;    &lt;li&gt;ASP.NET MVC: Building for the web, and an &lt;/li&gt;    &lt;li&gt;Introduction to the ASP.NET Web Forms Model-View-Presenter framework. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To find out more or to book just point your browser to &lt;a href="http://readify.net/training-and-events/rdn-dev-days/"&gt;http://readify.net/training-and-events/rdn-dev-days/&lt;/a&gt;.&amp;#160; 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/13321238-4432770712764246769?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dOC62rbv829ofhktg6_lyIlckYM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dOC62rbv829ofhktg6_lyIlckYM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dOC62rbv829ofhktg6_lyIlckYM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dOC62rbv829ofhktg6_lyIlckYM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ngHbxp_ikiY:Aq8HqRXDuaM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ngHbxp_ikiY:Aq8HqRXDuaM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ngHbxp_ikiY:Aq8HqRXDuaM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/ngHbxp_ikiY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/4432770712764246769/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/missed-teched-australia-get-content.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/4432770712764246769" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/4432770712764246769" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/ngHbxp_ikiY/missed-teched-australia-get-content.html" title="Missed TechEd Australia? Get the content anyway" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/missed-teched-australia-get-content.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6986504955289473634</id><published>2009-09-22T08:20:00.001+10:00</published><updated>2009-09-22T08:20:22.985+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><title type="text">Australian Virtual Alt.Net – Influence Strategies</title><content type="html">&lt;p&gt;I attended the &lt;a href="http://qconlondon.com/london-2009/" target="_blank"&gt;QCon conference&lt;/a&gt; in London earlier this year and during it I was lucky enough to attend one of &lt;a href="http://www.lindarising.org/" target="_blank"&gt;Linda Rising&lt;/a&gt;’s workshops on Influence Strategies.&amp;#160; Recently I presented my own take on her content at the Oz Virtual Alt.Net group, and here it is for your enjoyment.&lt;/p&gt;  &lt;p&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_d1a7ac98"&gt;&lt;param name="movie" value="http://www.viddler.com/player/d1a7ac98/" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed src="http://www.viddler.com/player/d1a7ac98/" width="437" height="370" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_d1a7ac98"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;p&gt;P.S. The credit for the good content goes to &lt;a href="http://www.lindarising.org/" target="_blank"&gt;Linda&lt;/a&gt;, anything dodgy in there is all me.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6986504955289473634?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gGoz30LKbBr_umHyop0xdHwX-kI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gGoz30LKbBr_umHyop0xdHwX-kI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gGoz30LKbBr_umHyop0xdHwX-kI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gGoz30LKbBr_umHyop0xdHwX-kI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=lCSEA39Y_Jc:xoqIi38CKfQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=lCSEA39Y_Jc:xoqIi38CKfQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=lCSEA39Y_Jc:xoqIi38CKfQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/lCSEA39Y_Jc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6986504955289473634/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/australian-virtual-altnet-influence.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6986504955289473634" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6986504955289473634" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/lCSEA39Y_Jc/australian-virtual-altnet-influence.html" title="Australian Virtual Alt.Net – Influence Strategies" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/australian-virtual-altnet-influence.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6932733755865760063</id><published>2009-09-18T18:52:00.001+10:00</published><updated>2009-09-18T18:52:23.036+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title type="text">Using P4Merge with Visual Studio 2008 and TFS</title><content type="html">&lt;p&gt;The merge and diff utility included with Visual Studio 2008 is, let’s face it, not the best tool on the market.&amp;#160; Sure, it does the job, but it could be so much better.&amp;#160; Thankfully, Visual Studio gives you a way to customise the tool that is used for merging.&lt;/p&gt;  &lt;p&gt;Now, in the past, I’ve usually gone for &lt;a href="http://winmerge.org/" target="_blank"&gt;WinMerge&lt;/a&gt; as my tool of choice to replace the out of the box offering, but WinMerge is starting to show it’s age and whilst it does a great job at comapres it doesn’t do 3-way merges, so I’d rather use something else.&amp;#160; By the way, I keep WinMerge installed because of it’s great directory comparison feature.&amp;#160; Oh, for those who don’t know, a 3-way merge is a merge that shows both your current version of the file, the file you’re merging with, and the root file from which the two other files are derived (i.e. the original).&lt;/p&gt;  &lt;p&gt;Many people talk about how great the &lt;a href="http://www.scootersoftware.com/" target="_blank"&gt;BeyondCompare&lt;/a&gt; product is, but for the sake of my wallet I’d rather use a tool that was free.&amp;#160; Enter Perforce’s &lt;a href="http://www.perforce.com/perforce/products/merge.html" target="_blank"&gt;P4Merge&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The only hassle with using this tool is that it doesn’t integrate that easily into Visual Studio as a merrge tool – you can’t just call the executable and supply arguments, you have to work around it a little.&amp;#160; Here’s how:&lt;/p&gt;  &lt;h4&gt;As a Comparison Tool&lt;/h4&gt;  &lt;p&gt;Setting P4Merge up as your comparison tool is simple enough.&amp;#160; Go to Tools-&amp;gt;Options and navigate to Source Control and Visual Studio Team Foundation Server.&amp;#160; Select the Configure User Tools… option.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/SrNKJVViWJI/AAAAAAAAAqk/lTUPn7zxg2Y/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SrNKKZZFDSI/AAAAAAAAAqo/OZPQOlbKsWQ/image_thumb%5B1%5D.png?imgmax=800" width="504" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then choose Add and set the options as shown:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SrNKLDGFR_I/AAAAAAAAAqs/YorLmdvp5Fw/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SrNKLz5G8cI/AAAAAAAAAqw/t9HFqAG5KrI/image_thumb%5B3%5D.png?imgmax=800" width="421" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hit OK, and that one’s done.&amp;#160; Note you may have to supply a different path to the P4Merge program if you installed it in a different location.&lt;/p&gt;  &lt;h4&gt;Merge Tool&lt;/h4&gt;  &lt;p&gt;For merging things get a little tricker because P4Merge wants the output file for the merge operation to exist before you actually do the merge.&amp;#160; This is where the VS integration presents a small problem, since VS doesn’t create the result file before calling the tool.&amp;#160; It expects the tool to create it instead.&lt;/p&gt;  &lt;p&gt;To work around this we need to create a simple batch file that we will get Visual Studio to call.&amp;#160; For the sake of sharing across multiple users on my machine, I’m placing the file in C:\Users\Public\Documents\p4merge.bat.&lt;/p&gt;  &lt;p&gt;The contents of the file should be:&lt;/p&gt;  &lt;p&gt;@ECHO OFF   &lt;br /&gt;COPY /Y NUL %4    &lt;br /&gt;START /WAIT /D &amp;quot;C:\Program Files\Perforce&amp;quot; p4merge.exe %1 %2 %3 %4&lt;/p&gt;  &lt;p&gt;Once you’ve created that file, go through the same steps as above for Compare, but this time select the Merge operation and point to the batch file instead of the P4Merge program.&amp;#160; The end result should be something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SrNKMsR75II/AAAAAAAAAq0/HW4Qtvt2dDg/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_5dD_rBQSs2o/SrNKNbpPcuI/AAAAAAAAAq4/BF00QL6a_JQ/image_thumb%5B6%5D.png?imgmax=800" width="421" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note that the arguments are passed in a non-standard order. It’s %3 %1 %2 %4&lt;/p&gt;  &lt;p&gt;Once this is done, get out of the options and try it out.&amp;#160; Here’s the tool in action&lt;/p&gt;  &lt;p&gt;Comparison:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SrNKOdPE9ZI/AAAAAAAAAq8/1o7JNdbz8mg/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SrNKPae1TMI/AAAAAAAAArA/IFrTleUkkyo/image_thumb%5B8%5D.png?imgmax=800" width="504" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Merging:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/SrNKQOM3DwI/AAAAAAAAArE/r0aS1XLNt9Y/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SrNKRaopa4I/AAAAAAAAArI/vewNEzqYnfo/image_thumb%5B10%5D.png?imgmax=800" width="504" height="406" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6932733755865760063?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zOWPHGYCfAPbXU4G6syz1V2d11w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zOWPHGYCfAPbXU4G6syz1V2d11w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zOWPHGYCfAPbXU4G6syz1V2d11w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zOWPHGYCfAPbXU4G6syz1V2d11w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=zTo8QZBS_EM:zQQL0K65VF8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=zTo8QZBS_EM:zQQL0K65VF8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=zTo8QZBS_EM:zQQL0K65VF8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/zTo8QZBS_EM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6932733755865760063/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/using-p4merge-with-visual-studio-2008.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6932733755865760063" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6932733755865760063" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/zTo8QZBS_EM/using-p4merge-with-visual-studio-2008.html" title="Using P4Merge with Visual Studio 2008 and TFS" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/using-p4merge-with-visual-studio-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-2772836046326642485</id><published>2009-09-17T16:57:00.002+10:00</published><updated>2009-09-17T17:00:00.354+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title type="text">A Simple SQL Performance Tip</title><content type="html">&lt;p&gt;For those who don’t &lt;a href="http://twitter.com/rbanks54" target="_blank"&gt;follow me on twitter&lt;/a&gt; (and why not!) you might have missed me having a whinge about a SQL database I was looking at recently from a performance perspective.&lt;/p&gt;  &lt;p&gt;Anyway, I found this little INSERT INTO statement in one of the extremelyy slow stored procedures they were having problems with (table names changed to protect the innocent)&lt;/p&gt;  &lt;pre class="brush:sql"&gt;INSERT INTO #TEMPTable&lt;br /&gt;SELECT p.PID,EH.EID, SUM(EH.Amount)&lt;br /&gt;FROM ps INNER JOIN&lt;br /&gt;xx ON ps.xxID = xx.xxID INNER JOIN&lt;br /&gt;p ON xx.PID = p.PID INNER JOIN&lt;br /&gt;EH ON ps.psID = EH.psID&lt;br /&gt;WHERE p.EID = @ParamID AND (p.Processedflag = 1)&lt;br /&gt;GROUP BY EH.EID, p.PID&lt;/pre&gt;&lt;p&gt;It executed in about 25 seconds. After a look at the indexing I decided to help SQL out a little by making the join to EH a little more selective, as follows:&lt;/p&gt;&lt;pre class="brush:sql"&gt;INSERT INTO #TEMPTable&lt;br /&gt;SELECT p.PID,EH.EID, SUM(EH.Amount)&lt;br /&gt;FROM ps INNER JOIN&lt;br /&gt;xx ON ps.xxID = xx.xxID INNER JOIN&lt;br /&gt;p ON xx.PID = p.PID INNER JOIN&lt;br /&gt;&lt;i&gt;E1 on E1.EID = p.EID INNER JOIN&lt;/i&gt;&lt;br /&gt;&lt;i&gt;E2 on E2.EID = E1.EID INNER JOIN&lt;/i&gt;&lt;br /&gt;EH ON ps.psID = EH.psID&lt;br /&gt; &lt;i&gt;and EH.EID = E2.EID&lt;/i&gt;&lt;br /&gt;WHERE p.EID = @ParamID AND (p.Processedflag = 1)&lt;br /&gt;GROUP BY EH.EID, p.PID&lt;/pre&gt;&lt;p&gt;That little change reduced the query to under a second, even though I’m now joining to two extra tables.&lt;/p&gt;&lt;p&gt;If only all performance improvements were as simple. And if looking like a hero was always so easy! :-)  And the lesson for you? Remember to keep your joins as selective as possible, even if it means taking the long way round on joins at times.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-2772836046326642485?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CxrFyHXurr9rdFySFNrytZtQvbQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CxrFyHXurr9rdFySFNrytZtQvbQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CxrFyHXurr9rdFySFNrytZtQvbQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CxrFyHXurr9rdFySFNrytZtQvbQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ttF5x26T-qY:8MzTJLZ5nUs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ttF5x26T-qY:8MzTJLZ5nUs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ttF5x26T-qY:8MzTJLZ5nUs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/ttF5x26T-qY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/2772836046326642485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/simple-sql-performance-tip.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/2772836046326642485" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/2772836046326642485" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/ttF5x26T-qY/simple-sql-performance-tip.html" title="A Simple SQL Performance Tip" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/simple-sql-performance-tip.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-8674614799217553054</id><published>2009-09-09T17:58:00.001+10:00</published><updated>2009-09-09T17:58:30.589+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tech.ed" /><title type="text">How to Build a Small Software Enterprise From Zero</title><content type="html">&lt;p&gt;At the moment, I’m at Tech.Ed Australia and have just been in &lt;a href="http://www.albahari.com/" target="_blank"&gt;Joseph Albahari&lt;/a&gt;’s session on building micro-ISV’s.&amp;#160; For those who don’t know Joseph Albahari is the author of an number of .NET books and also of the handy &lt;a href="http://www.linqpad.net/" target="_blank"&gt;LinqPad&lt;/a&gt; utility.&lt;/p&gt;  &lt;p&gt;Here’s a run down of his talk.&amp;#160; Obviously I didn’t capture everything said during the talk, so the following is based on the things I picked up from the session.&lt;/p&gt;  &lt;p&gt;First up – this is all about building a business, either as a side business or a full time venture.&amp;#160; The main focus though was on building things up as a side venture with the intent of generating a &lt;a href="http://en.wikipedia.org/wiki/Passive_income" target="_blank"&gt;passive income&lt;/a&gt; for you.&lt;/p&gt;  &lt;p&gt;Firstly, Joseph talk is based on his experiences with LinqPad.&amp;#160; LinqPad is offered in two versions – a free version and paid version that has premium features such as Intellisense.&amp;#160; In terms of some stats, the product was written in 2 months, has been around for about 2 years and has had over 130,000 downloads and over 2,000 sales.&amp;#160; That’s a nice little earner for a product that requires only minimal effort to keep it up to date.&lt;/p&gt;  &lt;p&gt;Based on the lessons learned during this Joseph came up with the following 3 phases for launching a Micro-ISV.&lt;/p&gt;  &lt;h4&gt;Phase 1 - Preparation&lt;/h4&gt;  &lt;p&gt;So, first up.&amp;#160; Ask yourself if you meet the pre-requisites for doing this?&amp;#160; Do you have strong technical skills because you’ll need them in order to create a product that does something useful.&amp;#160; And secondly, do you have broad skills?&amp;#160; Can you do a UI? And the back end? And the business rules? And the security? And integrate to other tools? And anything else you’ll need? Remember that as a Micro-ISV you’ll need to do it all, and to do it all well.&lt;/p&gt;  &lt;p&gt;Assuming that you have that, you then need to decide if you want to have a business that earns passive income or active income.&lt;/p&gt;  &lt;p&gt;If you want an active income then you’re looking at a business that is working in a vertical market with a potentially complex product, and is likely to expand and employ people over time (assuming you are successful).&amp;#160; You’re also going to be creating a business that is hard to sell and one that you will need a lot of commitment to make successful.&lt;/p&gt;  &lt;p&gt;For a passive income, you’re really looking at simple products that do one thing and do it well.&amp;#160; This is the domain of utilities &amp;amp; specialist web sites.&amp;#160; You want to create a product that requires minimal support, that enables you to still earn income whilst you do other things and in the end something that becomes a business that is easy to sell.&lt;/p&gt;  &lt;p&gt;By the way, there’s a risk of starting passive and becoming active by accident.&amp;#160; All you need to do is sell features that don’t yet exist, write support intensive features or write components that require a lot of integration effort such as developer components for WPF.&lt;/p&gt;  &lt;p&gt;As for what your product should do?&amp;#160; Well, obviously you’ll need an idea.&amp;#160; The good news is that “Pain is the source of ideas” so find something that bugs you or hurts and use that as the basis for doing something better. Keep a constant watch for pain points, pain experienced by yourself or, more importantly, by others.&amp;#160; In fact it’s OK as a Micro-ISV to have multiple projects on the go all trying to deal with different pain points.&amp;#160; One word or warning though - watch out for good but unmarketable ideas. They’ll kill your time and will have very little return, if any.&lt;/p&gt;  &lt;p&gt;So once you’ve got your idea, you’ll need to think about marketing.&amp;#160; This is _before_ you write your software.&amp;#160; At this point you may have an idea that someone else has done, especially a big company, and you may ask “How do I compete with those big companies? Big companies have big resources”.&amp;#160; Yes, but they also have&amp;#160; big overheads.&amp;#160; And they are slow to innovate.&amp;#160; And they need a large market share.&lt;/p&gt;  &lt;p&gt;Micro-ISVs follow different rules to big companies – they have no rules.&amp;#160; You can innovate any time you like, you don’t need a huge market share and you can be much more profitable than a large company with it’s large overheads.&amp;#160;&amp;#160; Don’t be afraid of the size of the elephant, there’s still a market there.&lt;/p&gt;  &lt;p&gt;And here’s the most important part of marketing.&amp;#160; You don’t have to write the best product.&amp;#160; You can still do well with a technically inferior product as long as your marketing is good enough. &lt;/p&gt;  &lt;p&gt;Finally, consider how you’re going to make money and how that affects marketing.&amp;#160; Will you offer a free and premium product mix or will you use a timed trial.&amp;#160; It appears that the first option is better, as the free version helps drive people towards the premium one, whilst the timed version drives people towards free alternatives after the product has expired.&lt;/p&gt;  &lt;p&gt;Oh, one other thing, make sure you get involved with your target community.&amp;#160; Before you launch your product.&amp;#160; Be helpful and harmless, establish your reputation.&amp;#160; Don’t be see through by being involved at the same time you launch your product.&amp;#160; People will see through it.&lt;/p&gt;  &lt;p&gt;Other marketing ideas include all the usual things – building business relationships, giving freebies to early adopters, etc.&amp;#160; Basically try lots of things and test the results, don’t just speculate.&lt;/p&gt;  &lt;h4&gt;Phase 2 – Building Market Share&lt;/h4&gt;  &lt;p&gt;Release Version 1.0 quickly.&amp;#160; Don’t aim for perfection.&amp;#160; Just write whatever works and once it’s out there and earning some income, then you can start cleaning it up.&amp;#160; Also, if it’s out there and getting no response, you haven’t wasted too much effort on something that needs to be killed.&lt;/p&gt;  &lt;p&gt;Whatever you do, follow the agile principles. Don’t over engineer your product.&amp;#160; Avoid wasting time on features you don’t absolutely need for a first release.&amp;#160; Just get the big picture items done.&amp;#160; On the other hand don’t under engineer things either.&amp;#160; That path leads to crippling technical debt and a millstone around your neck.&amp;#160; Basically, keep your code clean and your features lean.&lt;/p&gt;  &lt;p&gt;What about the UI and design of your product?&amp;#160; Keep the design simple and clean.&amp;#160; Focus the UI on the main use cases and ensure the program is self-updating from day 1.&lt;/p&gt;  &lt;p&gt;In terms of deployments, offer both a standalone executable and a setup.exe.&amp;#160; Standalone executables are favoured for downloads by a 2:1 ratio so it’s important to have them, but it’s also important to offer people the ability to click through via an installer.&amp;#160; To add a sense of safety, offer setup.exes for download on sites like download.com that guarantee things are virus free and won’t screw over your machine when you install them.&lt;/p&gt;  &lt;p&gt;Keep your product’s web site clean.&amp;#160; Don’t get hung up on fancy graphics and remember that if you are offering downloads to make sure you have plenty of bandwidth for updates and new installs.&lt;/p&gt;  &lt;p&gt;As for how to get people to the site? It’s the same old rules – have useful, original content and let the search engines do the rest.&lt;/p&gt;  &lt;p&gt;Once the initial version is out there, make sure you get feedback.&amp;#160; Solicit feedback via the app. Do it via the web site.&amp;#160; Do it via &lt;a href="https://uservoice.com/" target="_blank"&gt;UserVoice.com&lt;/a&gt;.&amp;#160; Just don’t forget to ask for an email address so you can talk to them about their feedback once you receive it.&lt;/p&gt;  &lt;p&gt;Also, once you have that feedback make sure you improve the product and establish relationships with the early adopters.&amp;#160; They’ll have great ideas that you won’t have thought of.&amp;#160; Just remember that it’s also OK to say No to feature requests.&amp;#160; it’s still your product after all.&lt;/p&gt;  &lt;p&gt;Finally, ensure users can auto submit errors to your web server so you can look for problems in the app that wouldn’t otherwise be reported.&lt;/p&gt;  &lt;h4&gt;Phase 3 – Getting Paid&lt;/h4&gt;  &lt;p&gt;If you offer a premium version choose wether to offer a single exe or a different exe for the paid version.&amp;#160; Just consider what happens with updates if you offer different exes. A single exe is probably the easiest to manage in most cases.&lt;/p&gt;  &lt;p&gt;As a tip, obfuscate the code for premium features, but be aware that if will affect stack traces for auto-reported bugs.&amp;#160; Obfuscation helps protect your code, but it doesn’t prevent hacking.&lt;/p&gt;  &lt;p&gt;It might be obvious, but you need to make sure the upgrade option from the free version to the paid is obvious but not intrusive.&lt;/p&gt;  &lt;p&gt;On licensing – your licensing model needs to suit the application and it needs to be strong, but don’t make it draconian otherwise you’ll prevent honest people paying for it.&amp;#160; Vertical products can be licensed per-seat. Components can be licensed via serial numbers. Utilities are probably best licensed via activation. Just provide plenty of licensing options – single user, multi-user, teams, educational licenses, etc.&amp;#160; Think about how people might want to buy your app and help make that process easy for them.&lt;/p&gt;  &lt;p&gt;One note – utilities are the most targeted apps for cracking.&amp;#160; You won’t be able to prevent it, but you can definitely make it harder than it is to just pay your license fee.&amp;#160; As a note, being a Micro-ISV probably means you’ll fly under the radar for quite a while, though this doesn’t mean you shouldn’t lock the app down.&amp;#160; If you go for the activation licensing model, use the motherboard serial number and _full_ cpu description as a key for for locking licenses to physical hardware, then when you create the license file, you can make sure the license is not only encrypted with that hardware ID, but that it’s signed as well. You can also include strings required by the premium features in the license to make it harder to crack, and that the premium features are hard to understand without those strings.&amp;#160; You could also include some red-herring code for fooling crackers but realise that it’s only a deterrent and it will be all but impossible to create an app that is uncrackable.&lt;/p&gt;  &lt;p&gt;A note on credit cards, especially in non-US countries – hand off the processing to another provider.&amp;#160; Most sales will come from other countries, especially the US – so offer US pricing.&amp;#160; For Australia, PayPal is probably the best option as it supports payments in any currency and pays into Australian dollar bank accounts. Just be aware of the currency transfer fees are higher, though there’s no real alternate options at this point in time.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And that’s it.&amp;#160; Joseph’s talk was excellent.&amp;#160; Now it’s time to start thinking of some ideas!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-8674614799217553054?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TDEvR5k8p6Hp1auivtbwFPl0xA8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TDEvR5k8p6Hp1auivtbwFPl0xA8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TDEvR5k8p6Hp1auivtbwFPl0xA8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TDEvR5k8p6Hp1auivtbwFPl0xA8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=cTDxeKdlCG0:RFOsXvRqnBo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=cTDxeKdlCG0:RFOsXvRqnBo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cTDxeKdlCG0:RFOsXvRqnBo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/cTDxeKdlCG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/8674614799217553054/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/how-to-build-small-software-enterprise.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/8674614799217553054" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/8674614799217553054" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/cTDxeKdlCG0/how-to-build-small-software-enterprise.html" title="How to Build a Small Software Enterprise From Zero" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/how-to-build-small-software-enterprise.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-7258881278192767116</id><published>2009-09-01T19:31:00.001+10:00</published><updated>2009-09-01T19:31:21.066+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><title type="text">Are You a Victim of Analysis Paralysis</title><content type="html">&lt;p&gt;Maybe it’s just the teams I’m helping but there seems to be a spate of analysis paralysis occurring in the IT world.&amp;#160; Of course if I was a media outlet I be calling it an breakout, nay an epidemic! No! A pandemic!! Run for the hills people we might all be infected!!!&lt;/p&gt;  &lt;p&gt;If you are experiencing any of the following symptoms then see the guidelines below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Analysis has taken more than a month already and shows no sign of ending anytime soon&lt;/li&gt;    &lt;li&gt;The documentation you’ve written has fine grained details in a few areas and is completely lacking any information at all in others (especially the tricky bits)&lt;/li&gt;    &lt;li&gt;Your analysis efforts are going around in circles&lt;/li&gt;    &lt;li&gt;No one can decide what the “right” approach is to some of the problems&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Steps for curing this disease:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Stop analysing!! Right now!&lt;/li&gt;    &lt;li&gt;Write some code based on what you have done.&lt;/li&gt;    &lt;li&gt;When that code is working, go and analyse/design a little bit more.&lt;/li&gt;    &lt;li&gt;Go back to point 2&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Good luck with the cure and I hope your health improves!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-7258881278192767116?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rt024wlFCAxWRnEE5_YnzYCqMYI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rt024wlFCAxWRnEE5_YnzYCqMYI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rt024wlFCAxWRnEE5_YnzYCqMYI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rt024wlFCAxWRnEE5_YnzYCqMYI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=hKW0jZ5l6rc:vzdXBRZSRVw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=hKW0jZ5l6rc:vzdXBRZSRVw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=hKW0jZ5l6rc:vzdXBRZSRVw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/hKW0jZ5l6rc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/7258881278192767116/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/09/are-you-victim-of-analysis-paralysis.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/7258881278192767116" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/7258881278192767116" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/hKW0jZ5l6rc/are-you-victim-of-analysis-paralysis.html" title="Are You a Victim of Analysis Paralysis" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/09/are-you-victim-of-analysis-paralysis.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-4197397371440182031</id><published>2009-08-31T22:45:00.001+10:00</published><updated>2009-08-31T22:45:07.223+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="alt.net" /><category scheme="http://www.blogger.com/atom/ns#" term="tech.ed" /><title type="text">Alt.Net Lightning Talks at Tech.Ed Australia 09</title><content type="html">&lt;p&gt;This just in:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Your Birds of a Feather Session Proposal, BOF003 &amp;quot;Alt.Net Lightning Talks&amp;quot; has been approved and will run at lunchtime (1245-1345) on Thursday 10 September in Meeting Room 7&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;So, we’ve got an hour to fill with fun and giggles.&amp;#160; If we take a few minutes for setup and so forth we'll have enough time for 4 sessions and some Q&amp;amp;A.&lt;/p&gt;  &lt;p&gt;With that in mind, I’m looking for session proposals so either jump on to &lt;a href="http://groups.google.com.au/group/ozaltdotnet"&gt;the mailing list&lt;/a&gt; and post a proposal if you’re going and would like to do a talk, or just ping me &lt;a href="http://twitter.com/rbanks54" target="_blank"&gt;on twitter&lt;/a&gt; or send me an email. Remember, talks will be for 10 minutes MAX.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-4197397371440182031?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QQk0Xj-pJWDUSxYSQ9mVSHRVA3A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QQk0Xj-pJWDUSxYSQ9mVSHRVA3A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QQk0Xj-pJWDUSxYSQ9mVSHRVA3A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QQk0Xj-pJWDUSxYSQ9mVSHRVA3A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=cN4QLzOdwew:9g1wdNp1dDA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=cN4QLzOdwew:9g1wdNp1dDA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=cN4QLzOdwew:9g1wdNp1dDA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/cN4QLzOdwew" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/4197397371440182031/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/altnet-lightning-talks-at-teched.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/4197397371440182031" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/4197397371440182031" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/cN4QLzOdwew/altnet-lightning-talks-at-teched.html" title="Alt.Net Lightning Talks at Tech.Ed Australia 09" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/altnet-lightning-talks-at-teched.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-1462036331604249361</id><published>2009-08-25T22:30:00.001+10:00</published><updated>2009-08-25T22:30:00.103+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title type="text">Some “Developers” Just Can’t Develop</title><content type="html">&lt;p&gt;I’ve been interviewing candidates for developer positions for over a decade now.&amp;#160; In my early years I was very much hit and miss in terms of finding the right people and it wasn’t until a horror hire that I realised what I was doing wrong.&lt;/p&gt;  &lt;p&gt;Previously, and like so many other people I’ve seen, I would interview candidates by looking at their resumes, asking questions about their history and experience and basically trying to get a feel for the person and how they’d fit in the team assuming that if they could talk about programming reasonably well then they must be able to do it as well.&amp;#160; Then, assuming that conversation left me with a positive feeling, I would do the reference checks and make a go/no-go decision.&lt;/p&gt;  &lt;p&gt;This resulted in a success rate of maybe 60%, though I may be flattering myself here. But 60% isn’t great especially when you consider the costs of a bad hire.&amp;#160; Even so the bad hires I made I wouldn’t call shockingly bad, it’s just that they weren’t up to the standard I was aiming for.&amp;#160; At least that’s what I thought until I made a really, really bad hire.&lt;/p&gt;  &lt;p&gt;This guy was special.&amp;#160; He was listed as being a .NET team lead, he talked about his history and skills really well, he was engaging and confident, and his references came back glowing with praise so I decided to offer him the job.&amp;#160; This he duly accepted and started shortly thereafter.&amp;#160; Now one of the things I was doing with new hires at the time was getting them to work on bugs – it helped me knock down the backlog and gave them exposure to a variety of areas across the system.&amp;#160; I also gave them plenty of time early on to learn the ropes and get up to speed and it would typically take a few days to get through the first few bugs and start having some ah-ha! moments with the codebase.&lt;/p&gt;  &lt;p&gt;So anyway, this particular person starts and is given his first bug.&amp;#160; Quite a simple bug too and yet it took well over a week for him to get it done and even then he needed plenty of help and prodding along the way.&amp;#160; I was also getting complaints from the other developers that this guy was hopeless and a really bad developer which I couldn’t quite believe so I decided to take some time, sit down next to him and do some pairing.&lt;/p&gt;  &lt;p&gt;What a shock I got.&amp;#160; It soon became all to apparent that the guy couldn’t program to save himself.&amp;#160; He… literally… couldn’t… code.&amp;#160; At one point I was breaking down the task to fix the bug into very, very small steps and asked him to put in a simple for loop and he just stared at the screen completely blank.&amp;#160; So I asked him what the syntax was for the for loop thinking he was stuck thinking about the larger problem or that he was freaking out with me being next to him growing ever more frustrated.&amp;#160; He couldn’t do it.&amp;#160; He simply couldn’t tell me the syntax.&amp;#160; Not even when intellisense was doing it for him.&amp;#160; How about a while loop?&amp;#160; Nope.&amp;#160; An if statement?&amp;#160; Only just. It was absolutely frightening. How could I get it so wrong?!&amp;#160; I couldn’t believe I’d made such a monumental screw up as to hire this guy.&amp;#160; I also couldn’t believe that the references about him were so great.&lt;/p&gt;  &lt;p&gt;Then the slow realisation dawned on me that I’d been lied to. I know – I’m quick off the mark aren’t I? :-)&amp;#160; Imaging someone lying on their resume! The shock of it! Imaging someone getting their friends to pretend to be their former employer and giving them great references. Silly me.&lt;/p&gt;  &lt;p&gt;So what was I to do? I remember an article I read around that time from &lt;a href="http://www.joelonsoftware.com/articles/fog0000000073.html"&gt;Joel Spolsky&lt;/a&gt; that made me slap my forehead.&amp;#160; It basically says if you want to hire a developer, get them to do some code in the interview!&amp;#160; I couldn’t believe I’d been so short sighted as to not do this before.&amp;#160; Gah! Sure, people can lie on their resumes and get their friends to lie for them as well but when you see someone write code, there’s nowhere to hide.&amp;#160; You can either develop or you can’t.&lt;/p&gt;  &lt;p&gt;So from that point on I got people to do a debugging exercise.&amp;#160; I figured if the code was there, then all I’m really doing is getting them to read code, understand it and make a few changes.&amp;#160; Pretty much like normal development :-) So I got one of my team to devise a small program that had a number of bugs in it.&amp;#160; You would fix one, uncover another, that sort of thing until you got it working; and all in about 30 lines of code.&amp;#160; When I was given with the code I debugged it first time in a matter of minutes and then used the time it took as a guide to estimate the skill level of the people I was interviewing (with judgement applied based on how nervous they were).&amp;#160; I’ve been using this same test, with various amendments for language changes and so forth for quite a few years now and it’s been a fantastic aid at helping me weed out those who can code and those who can’t.&lt;/p&gt;  &lt;p&gt;So just recently I was asked to help another company vet some candidates for a role that didn’t need as high a calibre of person as I normally look for, just a competent one instead, so I figured my debug exercise might prove a little too challenging for the level I was looking for.&amp;#160; I figured that as a change I’d use something simpler try out a variation of &lt;a href="http://www.codinghorror.com/blog/archives/000781.html" target="_blank"&gt;Jeff Atwoods FizzBuzz test&lt;/a&gt;.&amp;#160; I figured that if the candidate got through that quickly enough then I could always whip out the debug exercise and see how they went with something a little tougher.&amp;#160; Unfortunately i never got past the FizzBuzz exercise since by the time they finished it they’d killed all the time I’d set aside for it (and maybe a little more).&amp;#160; Was I surprised at this? After all it is a pretty simple coding exercise. Well, as it turns out, No. Not really.&lt;/p&gt;  &lt;p&gt;If you have a look at Atwood’s post and even the earlier &lt;a href="http://weblog.raganwald.com/2007/01/dont-overthink-fizzbuzz.html" target="_blank"&gt;Reg Braithwaite&lt;/a&gt; post then in them you’ll see that they both quote this statement &lt;em&gt;“I’ve come to discover that people who struggle to code don’t just struggle on big problems, or even smallish problems (i.e. write a implementation of a linked list). They struggle with tiny problems.”.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;How very true.&lt;/p&gt;  &lt;p&gt;By doing the fizzbuzz exercise for real, I merely confirmed what I already knew from my experiences with the debugging exercise. So, what’s the lesson here? I think it’s simple. Get your candidates to write some code during the interview.&amp;#160; You don’t need any special tools to do it either – just use a whiteboard and pseudo code if you want to.&amp;#160; But whatever you do, make sure they prove to you that they can actually do the job, not just talk the job.&lt;/p&gt;  &lt;p&gt;Remember: There are plenty of developers that just simply can’t develop.&amp;#160; Avoid my mistakes and do what you can to avoid hiring the wrong people.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-1462036331604249361?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RtqWQEntkbYCpnHkFagwVDG1N5Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RtqWQEntkbYCpnHkFagwVDG1N5Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RtqWQEntkbYCpnHkFagwVDG1N5Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RtqWQEntkbYCpnHkFagwVDG1N5Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=M19LcVB_kqM:5oVCaH2k_fs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=M19LcVB_kqM:5oVCaH2k_fs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=M19LcVB_kqM:5oVCaH2k_fs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/M19LcVB_kqM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/1462036331604249361/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/some-developers-just-cant-develop.html#comment-form" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/1462036331604249361" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/1462036331604249361" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/M19LcVB_kqM/some-developers-just-cant-develop.html" title="Some “Developers” Just Can’t Develop" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">24</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/some-developers-just-cant-develop.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-7597370256214959357</id><published>2009-08-19T15:13:00.001+10:00</published><updated>2009-08-19T15:13:04.361+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title type="text">How to Install TFS 2008 on SQL 2008 SP1</title><content type="html">&lt;p&gt;As you may be aware, if you want to install TFS 2008 on SQL 2008 you have to slipstream the TFS install media with SP1 so that the installer will talk to the SQL database correctly. There’s info in &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=FF12844F-398C-4FE9-8B0D-9E84181D9923&amp;amp;displaylang=en" target="_blank"&gt;the install guide&lt;/a&gt; if you need instructions on how to do this.&lt;/p&gt; &lt;p&gt;The problem is that install instructions only work if you are using the SQL 2008 RTM version.&amp;nbsp; If you try following the instructions and then installing against an SP1 install then you will be informed by the installer that the database version is incorrect and things won’t work.&lt;/p&gt; &lt;p&gt;To fix it, you’ll need to do some manual editing of the hcpackage.xml file in the slipstreamed install folder.&amp;nbsp; See the &lt;a href="http://support.microsoft.com/kb/969985"&gt;Microsoft KB entry&lt;/a&gt; for all the ugly details and instructions.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-7597370256214959357?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9Hrp_l0yBOGg3Wg__eotEXDSF38/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Hrp_l0yBOGg3Wg__eotEXDSF38/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9Hrp_l0yBOGg3Wg__eotEXDSF38/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Hrp_l0yBOGg3Wg__eotEXDSF38/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=NN3i4fzEmuk:LCgp0xIEpbM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=NN3i4fzEmuk:LCgp0xIEpbM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=NN3i4fzEmuk:LCgp0xIEpbM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/NN3i4fzEmuk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/7597370256214959357/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/how-to-install-tfs-2008-on-sql-2008-sp1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/7597370256214959357" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/7597370256214959357" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/NN3i4fzEmuk/how-to-install-tfs-2008-on-sql-2008-sp1.html" title="How to Install TFS 2008 on SQL 2008 SP1" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/how-to-install-tfs-2008-on-sql-2008-sp1.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6194726468952540274</id><published>2009-08-12T10:03:00.001+10:00</published><updated>2009-08-12T10:03:01.367+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="alt.net" /><title type="text">Be The Change You Want To See</title><content type="html">&lt;p&gt;I get to work with a lot of developers as part of what I do, and in far too many cases I find myself asking questions when I look at their code and see how they develop.&amp;nbsp; That question is usually Why?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Why do you write code without any tests?&amp;nbsp; Why?!  &lt;li&gt;Why is there Hungarian notation for variable names?&amp;nbsp; Why?!!  &lt;li&gt;Why do you have source control with no shared checkouts (or no source control at all)? Why?!!!  &lt;li&gt;Why are you doing deployment from a developers machine?&amp;nbsp; Why?!!!!  &lt;li&gt;Why do you have comments in your code like: "DateUpdatedValue returns the date updated DateTime"? Why?!!!!!  &lt;li&gt;Why are there methods in classes which have more than 200 lines?&amp;nbsp; WHY?!!!!!!  &lt;li&gt;Why for the love of all that is beautiful is there so much rubbish code here?! WHY?!!!!!!!!!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The thing that I really struggle with and that gets me really frustrated is that these developers will try and abdicate themselves of any personal responsibility for writing code the way they have.&amp;nbsp; The excuses are typically along these lines&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Everyone else writes it that way.  &lt;li&gt;The code was already a mess when I got here.  &lt;li&gt;I don’t get given time to write it properly  &lt;li&gt;The company doesn’t care about me so I don’t care about the code  &lt;li&gt;Management wants it that way  &lt;li&gt;It’s not part of my job description&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And my response to that?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;What… A… Load… Of… Rubbish!!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We’re developers aren’t we? And aren’t developers meant to be highly paid, intelligent and logical individuals who can think and act for themselves?&lt;/p&gt; &lt;p&gt;At the same time, many of the developers making these excuses have the same frustrations I do but just don’t know what to do about, so they sit there and try not to rock the boat, suffering in silence until they become numb to the pain and just accept things the way they are.&amp;nbsp; How sad.&lt;/p&gt; &lt;p&gt;So seriously, people!&amp;nbsp; Stop making excuses or accepting mediocrity and start making some changes to improve things!&lt;/p&gt; &lt;h3&gt;Do Something About It&lt;/h3&gt; &lt;p&gt;Now here’s some news for you - no one else is going to make the changes that are needed for your situation to improve.&amp;nbsp;&amp;nbsp; If they were then things wouldn’t be in the state they are now.&amp;nbsp; It’s time admit that you’ve spent long enough waiting for someone else to do it – it’s now time for you to be the change to want to see.&lt;/p&gt; &lt;p&gt;So here’s some things to consider if you’ve lived in frustration long enough and want to make improvements.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Change Starts With You&lt;/strong&gt;.&amp;nbsp; You have to start with yourself.&amp;nbsp; Check your attitudes. Take ownership and responsibility for what you do. Improve yourself until you can take pride in your work.&amp;nbsp; Start learning again.&amp;nbsp; Never stop learning once you do. Be committed to change.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Encourage Others To Change&lt;/strong&gt;.&amp;nbsp; I hate to sound cliché but I can’t express it any better.&amp;nbsp; Change is a journey.&amp;nbsp; There I said it.&amp;nbsp; Anyway, as you learn and improve in what you do you should try and encourage others to do the same and take that journey with you.&amp;nbsp; Show them what you learn and how you learned it.&amp;nbsp; If they follow and improve as well, then that’s a great thing. If they don’t then that’s OK, just don’t let that be an excuse for you to stop doing what needs to be done.&amp;nbsp; By the way, don’t be a pain in the butt when trying to get others to change – it’s much easier to get people to change through having a positive approach than it is by shouting and complaining and generally being a angry or sullen little developer.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Change Requires Courage&lt;/strong&gt;.&amp;nbsp; Have the courage to challenge the status quo. Courage to ask the questions about why things are done the way they are. Courage to suggest that things need improving and courage to suggest the changes that are needed.&amp;nbsp; Courage to pressure your management to improve and change.&amp;nbsp; Courage to be a visible agent of change.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Learn From People Outside Of Your Company&lt;/strong&gt;.&amp;nbsp; Most change in our lives comes from external sources (it’s an inertia thing) so if you haven’t talked with a developer outside of your company about how they develop then you should get yourself along to a user group or conference at some point.&amp;nbsp; If your time is precious don’t sweat it, there are a number of virtual user groups that are starting to spring up around the place that you can attend without leaving the comfort of your own home, and failing that you can just increase the number and variety of blogs you read.&amp;nbsp; Regardless of how, you need to talk to and learn from people outside of your day-to-day to get fresh ideas.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Change Your Company or Change Your Company&lt;/strong&gt;.&amp;nbsp; I can’t remember where I first heard this one, but it’s apt.&amp;nbsp; If you start to improve yourself and change how you do things then one of two things is going to happen.&amp;nbsp; You’ll either encourage others around you to change, thus improving and changing the company you work for or you’ll grow frustrated and annoyed with where you work.&amp;nbsp; If the second one should happen then you’ve got a choice to make – stay where you are and be confined and constricted, eventually growing to despise what you do, or you can take your newly improved self and find a new job and a more suitable team to work in.&amp;nbsp; Regardless of the economic climate, good people are ALWAYS in demand.&amp;nbsp; Have the courage to make that decision if that time comes.&lt;/p&gt; &lt;p&gt;You might also want to have a glance at this blog post on &lt;a href="http://www.positivepath.net/ideasMA11.asp"&gt;how to change the world&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;So, what are you waiting for?&amp;nbsp; Go start changing things, and start today. No more excuses.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6194726468952540274?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JdMwPxCs66nOONvaVJDtXpUW17Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JdMwPxCs66nOONvaVJDtXpUW17Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JdMwPxCs66nOONvaVJDtXpUW17Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JdMwPxCs66nOONvaVJDtXpUW17Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=aAhvmFPx1_k:Oe9Ct2A2UkI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=aAhvmFPx1_k:Oe9Ct2A2UkI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=aAhvmFPx1_k:Oe9Ct2A2UkI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/aAhvmFPx1_k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6194726468952540274/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/be-change-you-want-to-see.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6194726468952540274" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6194726468952540274" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/aAhvmFPx1_k/be-change-you-want-to-see.html" title="Be The Change You Want To See" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/be-change-you-want-to-see.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-4437335785227909563</id><published>2009-08-03T18:26:00.002+10:00</published><updated>2009-08-03T19:09:22.075+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title type="text">A Release Notes Report for TFS</title><content type="html">&lt;p&gt;One of the things people often ask me when talking about Team Foundation Server is how they can easily get a Release Notes report from it.  Unfortunately there isn’t anything out of the box that does it and various searches on the net haven’t returned anything useful.&lt;/p&gt; &lt;p&gt;So this report idea has been on my backlog of things to do for a while and &lt;a href="http://twitter.com/ragingit"&gt;Aaron&lt;/a&gt; prompted me about it the other day and even provided me a bit of SQL to help push me along :-)&lt;/p&gt; &lt;p&gt;Anyway here’s what the report looks like:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnafQv07WjI/AAAAAAAAAqQ/rZ7KErSV45Y/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SnafRziAypI/AAAAAAAAAqY/KzGJ7WnCfzA/image_thumb%5B1%5D.png?imgmax=800" width="504" border="0" height="500" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Nothing too fancy – it just prompts you for the date and then a path from which to pick up changes.&lt;/p&gt; &lt;p&gt;“Why the path?” I hear you ask.  Well, if you’re like most people you will have a source tree that is configured for branching your code and I assume you don’t really want a release notes report that shows changes in the other branches :-).  The report is set to only pick up changes made to files at or below the path specified so that you have a way to only report on changes relevant to you.&lt;/p&gt; &lt;h3&gt;Installation&lt;/h3&gt; &lt;p&gt;Installation is pretty simple:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Upload the report to SSRS &lt;/li&gt;&lt;li&gt;Change the Shared DataSource to point to your TFSReportDS  &lt;/li&gt;&lt;li&gt;Change the ExplicitReport parameter to not prompt for user input (as shown)  &lt;/li&gt;&lt;li&gt;View the report&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnafSa4cAtI/AAAAAAAAAqc/0AdAzaAgQZQ/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SnafTSex4fI/AAAAAAAAAqg/mrdCyORuveg/image_thumb%5B3%5D.png?imgmax=800" width="504" border="0" height="148" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you have any problems with the report feel free to drop me a line or leave a comment.&lt;/p&gt; &lt;p&gt;Feel free to take this report and customise and improve it as much as you like.  Of course I’d appreciate updates and patches for any bugs you find or improvements you make to it.&lt;/p&gt; &lt;p&gt;The SQL in the report itself is somewhat ugly as I had to work around some limitations in what is stored in the TFS data warehouse and some other strange behaviours, but it at least works.&lt;/p&gt; &lt;p&gt;I hope it helps!&lt;/p&gt; &lt;p&gt;Note: The report was built and tested against TFS2008 running on a SQL2005 database so it should be OK for both SQL2005 and SQL2008 users.&lt;/p&gt; &lt;p&gt;&lt;a href="http://groups.google.com.au/group/richardsbraindump/web/Release_Notes.rdl" rel="enclosure"&gt;Download the report definition here&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/13321238-4437335785227909563?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mUO2QQ4v-p1NrJHPKWIe36o5Lsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mUO2QQ4v-p1NrJHPKWIe36o5Lsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mUO2QQ4v-p1NrJHPKWIe36o5Lsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mUO2QQ4v-p1NrJHPKWIe36o5Lsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=TTwY9rrOVHQ:Vf0gmjJXRM4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=TTwY9rrOVHQ:Vf0gmjJXRM4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=TTwY9rrOVHQ:Vf0gmjJXRM4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/TTwY9rrOVHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/4437335785227909563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/release-notes-report-for-tfs.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/4437335785227909563" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/4437335785227909563" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/TTwY9rrOVHQ/release-notes-report-for-tfs.html" title="A Release Notes Report for TFS" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/release-notes-report-for-tfs.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-7139088698639297287</id><published>2009-08-03T11:33:00.001+10:00</published><updated>2009-08-03T11:33:43.975+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="how to" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title type="text">Windows 7 Virtual Machines and Host Networking</title><content type="html">&lt;p&gt;Let’s assume you’ve got a Windows 7 Virtual Machine and you want to do networking between the Host and the Guest operating systems with it.&lt;/p&gt; &lt;p&gt;I’m going to give you a run through of how I set this up on my laptop using the loopback adapter.&amp;nbsp; There may be other ways, but this works quite well for my needs.&lt;/p&gt; &lt;h3&gt;1. Install the Loopback Adapter&lt;/h3&gt; &lt;p&gt;Go to device manager (in Control Panel) and select the Add Legacy Hardware option&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-K9uLmGI/AAAAAAAAApA/fr1Y_ByZQjU/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-LsfAPKI/AAAAAAAAApE/Pgm1wobsJdc/image_thumb%5B7%5D.png?imgmax=800" width="307" height="218"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the ensuing wizard select: Install manually –&amp;gt; Network Adapters –&amp;gt; Microsoft Loopback Adapter&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-Mm8rybI/AAAAAAAAApI/0n7_KJ4mf74/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-N3PC6AI/AAAAAAAAApM/_wbSt6jbmxs/image_thumb%5B5%5D.png?imgmax=800" width="500" height="367"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h3&gt;2. Setup the Loopback Adapter&lt;/h3&gt; &lt;p&gt;Once the installation is complete we need to configure the loopback adapter.&amp;nbsp; My preference is to use fixed IP addresses for this so that I can use machine names to identify the VM easily, just make sure you pick an address range that isn’t used :-)&lt;/p&gt; &lt;p&gt;So go to the Networking and Sharing Center and select “Change Adapter Settings” on the left. You should see something like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-O5ZGvNI/AAAAAAAAApQ/1ZQ2AZbGseg/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_5dD_rBQSs2o/SnY-Pwq5qxI/AAAAAAAAApU/STkYYb9j720/image_thumb%5B8%5D.png?imgmax=800" width="322" height="308"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now go to the Loopback Adapters properties and then go to the properties of the IPv4 TCP/IP settings:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-Qn7gaRI/AAAAAAAAApY/KpAC7hBKY6Y/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-R6rjyTI/AAAAAAAAApc/7OWjvLut4AA/image_thumb%5B12%5D.png?imgmax=800" width="504" height="497"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Simply set the IP address you wish to use for communicating with the VM.&amp;nbsp; I normally use a 10.x.x.x address range with the Class C subnet to minimise conflicts with other networks I may be connected to.&lt;/p&gt; &lt;p&gt;Not that I normally disable the IPv6 settings on the loopback adapter to make the configuration simpler.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h3&gt;3. Configure the Virtual Machine Networking&lt;/h3&gt; &lt;p&gt;Assuming you already have a virtual machine configured you now need to go to your virtual machines settings and set up the networking as follows:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-SYm0chI/AAAAAAAAApg/5uHMONVw8H0/s1600-h/image%5B29%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_5dD_rBQSs2o/SnY-TREbeZI/AAAAAAAAApk/lWG54yaPqgM/image_thumb%5B17%5D.png?imgmax=800" width="504" height="339"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Set adapter 1 to be the loopback adapter and adapter 2 to be your physical network adapter so that I can access the internet and other networks from the VM should I need to.&lt;/p&gt; &lt;h3&gt;4. Configure the VM’s Operating System&lt;/h3&gt; &lt;p&gt;Now we need to start the VM and change some settings in the networking to use the fixed IP for the loopback adapter in much the same way as we did for the Host Operating System.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_5dD_rBQSs2o/SnY-UhqBqqI/AAAAAAAAApo/eyjyIrFzt5o/s1600-h/image%5B28%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SnY-WCKz-6I/AAAAAAAAAps/Hf1vrrmk0R0/image_thumb%5B16%5D.png?imgmax=800" width="504" height="524"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You may notice that in the network adapters it’s hard to tell which adapter is which since they are all the same type (i.e. the virtualised network).&amp;nbsp; The trick is to remember which network adapter is which in the VM settings – Adapter 1 is “Local Area Connection”, Adapter 2 is “Local Area Connection 2”, etc.&lt;/p&gt; &lt;h3&gt;5. Don’t Forget Your Firewalls&lt;/h3&gt; &lt;p&gt;So if we were to try pinging the Host OS from the VM we would probably find we don’t get a response, and the same would happen if we did it the other way around.&amp;nbsp; If that’s the case you probably forgot to adjust your firewall settings.&lt;/p&gt; &lt;p&gt;Here’s how it’s done in Windows 7 on the Host:&lt;/p&gt; &lt;p&gt;Go to Control Panel –&amp;gt; Windows Firewall then choose “Advanced Settings”&lt;/p&gt; &lt;p&gt;Select the Inbound Rules from the left side and then choose the New Rule action from the right.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-W_NycuI/AAAAAAAAApw/gM4QkGRYwEQ/s1600-h/image%5B33%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SnY-YDrbFeI/AAAAAAAAAp0/IoMozWLU0SM/image_thumb%5B19%5D.png?imgmax=800" width="504" height="344"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Choose “Custom” in the dialog and then in the scope step add the IP address for the VM in the Remote settings area (as shown).&amp;nbsp; For extra security you should also ensure that the local address is set to the IP address of the loopback adapter on the host (10.2.1.1 in my case).&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_5dD_rBQSs2o/SnY-ZL1rniI/AAAAAAAAAp4/LfiOvOE3sDg/s1600-h/image%5B40%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-aHBq-nI/AAAAAAAAAp8/YSvEkLTQxls/image_thumb%5B22%5D.png?imgmax=800" width="504" height="407"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Allow all connections through on that rule and don’t forget to give it a meaningful name such as “Windows VM Loopback” or something like that.&lt;/p&gt; &lt;p&gt;You’ll also need to do that same in your guest operating system (assuming it also has a firewall enabled).&lt;/p&gt; &lt;p&gt;Once that’s done you should then be able to ping the Host from the VM as shown and do the same in the reverse direction.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_5dD_rBQSs2o/SnY-a1I50II/AAAAAAAAAqA/xiNc1lT9OXE/s1600-h/image%5B41%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_5dD_rBQSs2o/SnY-brzJn3I/AAAAAAAAAqE/fie92t5N78w/image_thumb%5B23%5D.png?imgmax=800" width="504" height="265"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;6. One Last Step&lt;/h3&gt; &lt;p&gt;Trying to use IP addresses can be somewhat of a pain, especially if something you’re accessing is wanting you to use host names instead.&amp;nbsp; The way to improve this situation is to edit the HOSTS file and add entries for the remote machines in both the Host OS and also in the Guest OS (the VM).&lt;/p&gt; &lt;p&gt;On Windows 7 start Notepad as Administrator since you need Administrator privileges to edit the HOSTS file.&amp;nbsp; The Hosts file can be found in C:\Windows\System32\drivers\etc.&amp;nbsp; Note that there is no extension on the Hosts file so you may have to change the filter in the Open File dialog to show all files before you’ll see it.&lt;/p&gt; &lt;p&gt;Once you have it open add an entry at the end of the file on a new line in the format of &amp;lt;ip address&amp;gt; &amp;lt;machine name&amp;gt;.&amp;nbsp; For example I use:&lt;br&gt;&lt;font face="cou"&gt;10.2.1.2&amp;nbsp;&amp;nbsp;&amp;nbsp; tfs2008-vm&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Save the file and check that things are working by opening up a command prompt and pinging the virtual machine using the name you just gave it:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_5dD_rBQSs2o/SnY-cp4bzeI/AAAAAAAAAqI/uT69C0fHa14/s1600-h/image%5B45%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_5dD_rBQSs2o/SnY-dljsp4I/AAAAAAAAAqM/3Ygn5HUeFKU/image_thumb%5B25%5D.png?imgmax=800" width="504" height="273"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Don’t forget to do the same on the Guest OS in the Virtual Machine.&lt;/p&gt; &lt;p&gt;Once that’s done you should be all set to go and your Windows 7 Host and you Virtual Machine should now be able to talk to each other without a problem.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-7139088698639297287?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OFHw7483nz9C7TLSka0P4dCzAUk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OFHw7483nz9C7TLSka0P4dCzAUk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OFHw7483nz9C7TLSka0P4dCzAUk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OFHw7483nz9C7TLSka0P4dCzAUk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=EYYdtSkKKdc:BAjfGaGCcpc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=EYYdtSkKKdc:BAjfGaGCcpc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=EYYdtSkKKdc:BAjfGaGCcpc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/EYYdtSkKKdc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/7139088698639297287/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/08/windows-7-virtual-machines-and-host.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/7139088698639297287" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/7139088698639297287" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/EYYdtSkKKdc/windows-7-virtual-machines-and-host.html" title="Windows 7 Virtual Machines and Host Networking" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/08/windows-7-virtual-machines-and-host.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-2694972531259725774</id><published>2009-07-31T15:34:00.001+10:00</published><updated>2009-07-31T15:35:05.625+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title type="text">Visual Studio Tip: Guide Lines for Line Wrapping</title><content type="html">&lt;p&gt;Nothing new here, but I was talking about it with a colleague today who wasn’t aware of the feature, so if you haven’t seen it before you might find this useful&lt;/p&gt; &lt;p&gt;Let’s say you want to wrap or break lines in your source code at the 80 column mark or 120 columns (or whatever your team prefers).&amp;nbsp; How do you do this?&amp;nbsp; Visual Studio doesn’t include any options in the GUI to enable such functionality.&lt;/p&gt; &lt;p&gt;That said, it is possible, and you may have seen people who have guidelines on their screen that look something like the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_5dD_rBQSs2o/SnKCVDLmkOI/AAAAAAAAAow/m_alR2KDxNE/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_5dD_rBQSs2o/SnKCWtSOYCI/AAAAAAAAAo0/ycXd2wPIy5Y/image_thumb%5B4%5D.png?imgmax=800" width="504" height="412"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The way to do it is to simply jump into Regedit and add a value as follows:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Key: &lt;/strong&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor&lt;/p&gt; &lt;p&gt;&lt;strong&gt;String Name:&lt;/strong&gt; Guides &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Value:&lt;/strong&gt; RGB(128,0,0) 80,120&lt;/p&gt; &lt;p&gt;The 80,120 will actually add two guidelines – one at column 80 and one at column 120.&lt;/p&gt; &lt;p&gt;Hope that helps!&lt;/p&gt; &lt;p&gt;References: &lt;a href="http://stackoverflow.com/questions/138703/any-way-to-automatically-wrap-comments-at-column-80-in-visual-studio-2008-or-d" target="_blank"&gt;Stack Overflow&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/saraford/archive/2004/05/05/257953.aspx" target="_blank"&gt;Sara Ford&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/13321238-2694972531259725774?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EQ3ef3f1VdUVxUZYUOU0ecgXrZE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQ3ef3f1VdUVxUZYUOU0ecgXrZE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EQ3ef3f1VdUVxUZYUOU0ecgXrZE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQ3ef3f1VdUVxUZYUOU0ecgXrZE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=e1xWYgy4yG0:2KI_c_N94AQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=e1xWYgy4yG0:2KI_c_N94AQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=e1xWYgy4yG0:2KI_c_N94AQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/e1xWYgy4yG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/2694972531259725774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/visual-studio-tip-guide-lines-for-line.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/2694972531259725774" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/2694972531259725774" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/e1xWYgy4yG0/visual-studio-tip-guide-lines-for-line.html" title="Visual Studio Tip: Guide Lines for Line Wrapping" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/visual-studio-tip-guide-lines-for-line.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-1275125286418451569</id><published>2009-07-31T14:51:00.001+10:00</published><updated>2009-07-31T14:51:51.057+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title type="text">NUnit for Team Build Gets an Update</title><content type="html">&lt;p&gt;For those of you using NUnit with TFS you may want to go and visit the &lt;a href="http://codeplex.com/nunit4teambuild" target="_blank"&gt;NUnit4TeamBuild project site&lt;/a&gt; on CodePlex and get the latest release.&lt;/p&gt; &lt;p&gt;It fixes some issues with support NUnit 2.5 and test names longer than 255 characters, but most importantly it removes the need to have MSTest available for publishing the results back to the TFS server through the inclusion of a new utility that makes the appropriate WCF calls directly instead of doing so through the MSTest executable.&lt;/p&gt; &lt;p&gt;Many thanks to &lt;a href="http://twitter.com/mrkwatkins" target="_blank"&gt;Kev Watkins&lt;/a&gt; for the contribution! I love seeing open source working so well :-)&lt;/p&gt; &lt;p&gt;For more info on how the whole thing works go and see &lt;a href="http://www.mrkwatkins.co.uk/Blog/2009/07/25/Making-NUnit-Play-Nicely-With-Team-Foundation-Server" target="_blank"&gt;Kev Watkins blog post&lt;/a&gt; or visit the &lt;a href="http://codeplex.com/nunit4teambuild" target="_blank"&gt;project site&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/13321238-1275125286418451569?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YNcBZUjLaJg43p_9eUImyd1iqh0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YNcBZUjLaJg43p_9eUImyd1iqh0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YNcBZUjLaJg43p_9eUImyd1iqh0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YNcBZUjLaJg43p_9eUImyd1iqh0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=_IdZORJyLLk:mgx8r2YGDvU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=_IdZORJyLLk:mgx8r2YGDvU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=_IdZORJyLLk:mgx8r2YGDvU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/_IdZORJyLLk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/1275125286418451569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/nunit-for-team-build-gets-update.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/1275125286418451569" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/1275125286418451569" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/_IdZORJyLLk/nunit-for-team-build-gets-update.html" title="NUnit for Team Build Gets an Update" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/nunit-for-team-build-gets-update.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-3099444125225258883</id><published>2009-07-29T20:46:00.001+10:00</published><updated>2009-07-29T20:46:00.838+10:00</updated><title type="text">Have We Named the Slashes Incorrectly?!</title><content type="html">&lt;p&gt;What do you call the ‘\’ and ‘/’ symbols?&lt;/p&gt; &lt;p&gt;Do you call the ‘/’ a slash? Do you also use the same name for the ‘\’?&amp;nbsp; Most people do (even if they think one of them is called the backslash) and they’ll use the names interchangeably, unless of course they have worked for Microsoft for more than 3 months in which case they might be calling one of them a “whack”. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Side note: The first time I heard someone at Microsoft ask me to open up a browser and go to h-t-t-p-whack-whack-somesite-dot-com my response was to crack up laughing!&amp;nbsp; Seriously?! Whack-Whack?&amp;nbsp; What are we? The Mafia?! Whack that URL! &lt;/p&gt; &lt;p&gt;It’s even better for the back slash, since it gets called a back-whack. Even more sinister mafia overtones.&amp;nbsp; I can imagine someone saying in hushed and secretives tones “at the command line go to C-backwhack-windows”. Oooo… so scary!!&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That said the redeeming feature of being in the midst of so much violence was that I knew which slash was whacked and which slash wasn’t.&amp;nbsp; So now, back to the extremely serious matter at hand – how do we resolve the confusion that the naming of these slashes causes? Some people say that one is a forward slash and one is a backwards slash and that it’s blindingly obvious, but try explaining that to your grandmother as she’s trying to login to facebook so she can see what you’ve been up to, or proclaiming the nuances of it to your IT illiterate friend who’s trying to locate a document they’ve lost on their computer.&amp;nbsp; They just don’t get it because to them a forward slash is one that is drawn from top to bottom in the forward direction! The terminology we use doesn’t gel with the experience the average punter has and it only makes it worse when people shorthand the terminology for the forward or backward slashes to just ‘slash’.&amp;nbsp; It’s then that you can guarantee that someone will get confused and asks which slash they mean.&amp;nbsp; It’s then that the kittens start dying!&lt;/p&gt; &lt;p&gt;Try this for yourself.&amp;nbsp; Go and find one of those antique pen thingies your parents still talk about and try writing the offending symbols on a fragment of dead tree.&amp;nbsp; Note how you will have drawn the symbols from top to bottom, and that the “forward-slash” is, as suspected, drawn from right to left, while the “back-slash” is drawn from left to right with the hand moving in a forward direction! What does this mean!&amp;nbsp; Can it be that the computing world has it wrong!&amp;nbsp; Can we have gotten it round about face!!&amp;nbsp; Can it really be true that the backslash is the forward slash, and the forward slash is the backslash?!!&amp;nbsp; Oh the horror!!&amp;nbsp; The wasted years of our lives!&lt;/p&gt; &lt;p&gt;Even that tome of absolute truth Wikipedia has the &lt;a href="http://en.wikipedia.org/wiki/Backslash" target="_blank"&gt;backslash&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Slash_%28punctuation%29" target="_blank"&gt;slash&lt;/a&gt; wrong!&lt;/p&gt; &lt;p&gt;Just to be clear and in case you missed it, I propose that we rename the symbols with immediate effect to:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Back-Slash&lt;/strong&gt;: &lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Forward-Slash&lt;/strong&gt;:&amp;nbsp; &lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;\&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Only in this way can the true balance of the world be restored! Only then will peace be restored to the galaxy! Only then will we truly be able to fathom the magnificence and pure awesomeness that is Jar-Jar Binks in Star Wars Episode 1!&lt;/p&gt; &lt;p&gt;And with that I now calmly and humbly accept all the accolades, awards and cash donations for making such a stunning breakthrough in the world of typography, human communications and micro-molecular cell bonding that I’m sure you agree is so richly deserved!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-3099444125225258883?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dQ4xLqTfVR5kgCLFS5Ufso95h58/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dQ4xLqTfVR5kgCLFS5Ufso95h58/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dQ4xLqTfVR5kgCLFS5Ufso95h58/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dQ4xLqTfVR5kgCLFS5Ufso95h58/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=xXuma_HgPFY:N2-mBiRK3DM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=xXuma_HgPFY:N2-mBiRK3DM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=xXuma_HgPFY:N2-mBiRK3DM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/xXuma_HgPFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/3099444125225258883/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/have-we-named-slashes-incorrectly.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/3099444125225258883" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/3099444125225258883" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/xXuma_HgPFY/have-we-named-slashes-incorrectly.html" title="Have We Named the Slashes Incorrectly?!" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/have-we-named-slashes-incorrectly.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-2648264854831359435</id><published>2009-07-20T13:50:00.001+10:00</published><updated>2009-07-20T13:50:22.104+10:00</updated><title type="text">Some TeamBuild Fun and Games</title><content type="html">&lt;p&gt;I’ve just spent the morning helping a client with a few team build problems they were having using a newly installed TFS2008 server and a new build server.&lt;/p&gt; &lt;h3&gt;Where’s LC.exe?&lt;/h3&gt; &lt;p&gt;The first problem they had was that when they were running their build they were getting an error as follows:&lt;/p&gt; &lt;p&gt;Task failed because "LC.exe" was not found, or the .NET Framework SDK v2.0 is not installed.&amp;nbsp; The task is looking for "LC.exe" in the "bin" subdirectory beneath the location specified in the SDKInstallRootv2.0 value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.&amp;nbsp; You may be able to solve the problem by doing one of the following:&amp;nbsp; 1.) Install the .NET Framework SDK v2.0.&amp;nbsp; 2.) Manually set the above registry key to the correct location.&amp;nbsp; 3.) Pass the correct location into the "ToolPath" parameter of the task.&lt;/p&gt; &lt;p&gt;LC.exe is the program the is used to processes the *.licx files when dealing with 3rd party custom controls (they were using Janus controls) and for some reason the file couldn’t be loaded even though the LC.exe file could be found on the disk.&lt;/p&gt; &lt;p&gt;The thing to note for this is that they were using a new build server.&amp;nbsp; It has TeamBuild 2008 and VS2008 SP1 installed and was successfully building a separate project (that didn’t have licx files).&lt;/p&gt; &lt;p&gt;As it turns out, the problem related to the fact that they were trying to build a VS2005 sln file.&amp;nbsp; Since the build server didn’t have VS2005 installed on it many of the settings the installer normally creates were present, including the ones that set the paths for the LC.exe.&lt;/p&gt; &lt;p&gt;Instead of mucking around with VS2005 solutions, we simply converted it to a VS2008 solution and the LC.exe problem went away.&lt;/p&gt; &lt;p&gt;As a note we could have installed VS2005 on the build server as well but since the team was moving to VS2008 anyway the solution conversion option was deemed to be the better choice.&lt;/p&gt; &lt;p&gt;However, once we’d done this we ran into another problem.&lt;/p&gt; &lt;h3&gt;Strong Naming Shenanigans&lt;/h3&gt; &lt;p&gt;The solution being built included a strong named assembly, with the signing processing using a .pfx file instead of the usual .snk file.&amp;nbsp; When the build ran we saw this error message:&lt;/p&gt;&lt;pre class="brush:csharp"&gt;Target ResolveKeySource: &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: The "ResolveKeySource" task failed unexpectedly. &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application. &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: at System.Windows.Forms.Form.ShowDialog() &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: at Microsoft.Build.Tasks.ResolveKeySource.ResolveManifestKey() &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: at Microsoft.Build.Tasks.ResolveKeySource.Execute() &lt;br&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1718,7): error MSB4018: at Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean&amp;amp; taskClassWasFound) &lt;br&gt;Done building target "ResolveKeySource" in project "xxx.yyy" -- FAILED. &lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Since MSBuild runs non-interactively any time a dialog box appears the build will break (as the dialog box can’t be shown).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So what was actually happening here to cause a dialog to appear?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The eagle eyed amongst you will probably have figured it out already, but for those who couldn’t be bothered thinking too much I’ll tell you.&amp;nbsp; As it turns out when you do a compile and sign your assemblies with a .pfx file Visual Studio will look in the local certificate store to see if the certificate is already known.&amp;nbsp; If it’s a certificate that hasn’t been used before then Visual Studio will attempt add it to the local certificate store and in doing so will prompt you to enter the private key as part of the installation process.&amp;nbsp; This is where a dialog box will appear.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Since this was a new build server the .pfx file obviously hadn’t been seen yet and so Team Build was trying to prompt for the private key so it could install the certificate.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The solution to this was to simply log on to the build server as the build service account, run the build manually via Visual Studio and enter the private key when prompted.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Subsequent builds then worked as expected as the certificate was now loaded in the certificate store.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(Thanks to &lt;a href="http://www.edsquared.com/2007/07/18/Team+Build+And+Strong+Naming+Or+ClickOnce.aspx" target="_blank"&gt;Ed Blankenship&lt;/a&gt; and his blog for the info on this one)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-2648264854831359435?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/03jIMknvy_8nAtdiwJWqO4at_HY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03jIMknvy_8nAtdiwJWqO4at_HY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/03jIMknvy_8nAtdiwJWqO4at_HY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03jIMknvy_8nAtdiwJWqO4at_HY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=kJGKg4s8RJY:mBujdAdbsSc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=kJGKg4s8RJY:mBujdAdbsSc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=kJGKg4s8RJY:mBujdAdbsSc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/kJGKg4s8RJY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/2648264854831359435/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/some-teambuild-fun-and-games.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/2648264854831359435" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/2648264854831359435" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/kJGKg4s8RJY/some-teambuild-fun-and-games.html" title="Some TeamBuild Fun and Games" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/some-teambuild-fun-and-games.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-6402838878809701299</id><published>2009-07-14T15:14:00.001+10:00</published><updated>2009-07-14T15:14:53.711+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="general" /><title type="text">Our Job As Software Developers…</title><content type="html">&lt;p&gt;I’m lucky enough to get to do some public speaking about agile from time to time and a large part of my job involves helping teams improve their agility and one of the things I’ll talk about when introducing people to agile concepts is the role of the software developer.&amp;nbsp; If you’ve heard me blather on about such things in the past then this might just be a refresher for you. If you’re just following along on the blog then this might be something for you to think about, especially in what it means for how you approach each day.  &lt;p&gt;So, here’s my view on what the job for a software developer is all about…  &lt;p&gt;&lt;b&gt;As software developers our job is not to write software, our job is to provide great &lt;i&gt;customer service&lt;/i&gt;.&lt;/b&gt;  &lt;p&gt;Customer Service?! What the…?!  &lt;p&gt;“Surely not.&amp;nbsp; Our job is to write software!” you cry.&amp;nbsp; No, actually, it’s not.&amp;nbsp; Or, maybe I should say, that’s only a part of what our job is.  &lt;p&gt;A number of years ago now, I read a great book on sales and marketing (its name eludes for now) and in it the author took the position that every single business in this world is a service business.&amp;nbsp; For some industries, that’s obvious, but what about manufacturing for example?&amp;nbsp; Well, the author stated that the reason these companies are able to sell their products at all is because the product is the result of a service they are providing.  &lt;p&gt;What service? The satisfaction of their customers needs and desires through a physical item.&amp;nbsp; I stopped and though about this for a while and realised that this actually makes sense. It explains why me-too businesses can start in competitive industries and thrive and why other business that have good product ideas fail (they’re not meeting a need).&amp;nbsp; It also changed the way I viewed a lot of what we do as developers.&amp;nbsp; Software development is in essence the provision of the service to creating software that meets our customers needs.&amp;nbsp; If a customer doesn’t have a need or desire that they want satisfied through software then there is nothing for us to write.&amp;nbsp; No software –&amp;gt; no sale –&amp;gt; no money –&amp;gt; no job.&amp;nbsp; Similarly if someone else can meet the same need but do it with better customer service then they’ll get the sales and we won’t.&amp;nbsp; Once again: No sales –&amp;gt; no money –&amp;gt; no job.  &lt;p&gt;Now sometimes this customer service mentality can be a little grating.&amp;nbsp; What if the customer asks for and insists on something we think is stupid and short sighted.&amp;nbsp; Do we go against them because we know better? I don’t think so. Why? Because we are in no position to tell the customer what they’re needs and wants are. We don’t have their perspective, we don’t have their context, we aren’t them.&amp;nbsp; In fact, if you put yourself in their position you might come up with the same demands.  &lt;p&gt;The trick for us is in helping our customers decide if they are asking for is really what they want or need.&amp;nbsp; This is where the 5-whys approach to questioning or proposing alternate ideas comes into play.&amp;nbsp; However, whilst we can propose your counter-arguments and reasoning as to why “stupid idea A” is a stupid idea, if our customer still disagrees and want that stupid thing provided, then that’s their prerogative.&amp;nbsp; After all, it’s their dime they’re spending, and they can choose to spend it as they wish.  &lt;p&gt;Customer service will also say that if it’s all going to fall apart then be ready to support your customer in their time of need because it’s very likely that they will be both embarrassed that they ignored our advice and dug themselves a deep hole and at the same time they will be desperate to remedy the situation.&amp;nbsp; “I told you so” will only serve to impair your relationship, instead of solving the problem.&amp;nbsp; It might make you feel better, but it won’t make any real difference to what is going on.&amp;nbsp; &lt;p&gt;&lt;strong&gt;Awkward truth: The customer is always right (even when they’re wrong) &lt;/strong&gt; &lt;p&gt;If you don’t like this, well that’s a shame, but you can’t do much about it.&amp;nbsp; You could consider self-funded retirement or life in a monastery as an option since that’s probably the only chance you have of a life without customers.&amp;nbsp; Failing that, your stuck with dealing with customers.  &lt;p&gt;Yes, customer service can be a difficult thing at times and at times you may want to chew your arm off in frustration but on the flip side it can also be very rewarding.&amp;nbsp; There’s a special feeling you get when you see your customers improve because of a service you’ve provided, smiling because of something you’ve done for them or, even better, telling others about you because you’ve given them such great service.  &lt;p&gt;So, stop and think.&amp;nbsp; If your job is a service job, then what does that change about the way you approach your work?  &lt;p&gt;As a side note, you’ll note I used the word customer throughout this and not “client”. To me “client” infers that the development team are the dominant party in the relationship, whereas “customer” infers the idea that we serve them instead, and I think this can help us keep our attitude right.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-6402838878809701299?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xYwbNmsVMa5Jj8cDS2C2F8Uf2Pg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xYwbNmsVMa5Jj8cDS2C2F8Uf2Pg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xYwbNmsVMa5Jj8cDS2C2F8Uf2Pg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xYwbNmsVMa5Jj8cDS2C2F8Uf2Pg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=VarqgWyB5GI:2X3ddbYwW7M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=VarqgWyB5GI:2X3ddbYwW7M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=VarqgWyB5GI:2X3ddbYwW7M:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/VarqgWyB5GI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/6402838878809701299/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/our-job-as-software-developers.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/6402838878809701299" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/6402838878809701299" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/VarqgWyB5GI/our-job-as-software-developers.html" title="Our Job As Software Developers…" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/our-job-as-software-developers.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-9137785636730405240</id><published>2009-07-06T21:10:00.001+10:00</published><updated>2009-07-06T21:10:05.517+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blogging" /><title type="text">Why Do You Blog?</title><content type="html">&lt;p&gt;I’ve been writing this blog for a few years now (since June 2005 in fact) and in that time I’ve been asked this question quite a few times, typically from people who I think like the idea of writing their own blog but get put off by what a lack of confidence and doubt.&amp;nbsp; Questions like “what would I say?” or downer statements such as “I don’t have anything interesting or original to say” are typically what I hear.&lt;/p&gt; &lt;p&gt;So, if you don’t mind indulging me for a few minutes, let me give you some of the reasons why I blog.&amp;nbsp; If these reasons help you consider your own blogging or lack thereof afresh then I’d be pleased, but that’s not really the point of this post as you’ll see.&lt;/p&gt; &lt;p&gt;By the way, in case you were wondering, there’s nothing radically new or earth shattering in this post.&amp;nbsp; Seriously.&amp;nbsp; It’s all been said before by other people with much more eloquence than I can put together.&amp;nbsp; In fact, if you want, go and read a few of those posts (just Google for reasons to blog or check Atwood’s or Hanselman’s blogs as they’ll probably have something prosaic and witty to say about it).&amp;nbsp; So you may ask why would I write this post at all then?&amp;nbsp; Let me give you the first of my reasons as an answer:&lt;/p&gt; &lt;h3&gt;To Clarify My Thinking&lt;/h3&gt; &lt;p&gt;Shock. Gasp. Awe. Yawn. Told you it wasn’t earth shatteringly original :-)&amp;nbsp; I sometimes write blog posts as a way of helping me get my view on things straight and clearing up my understanding.&amp;nbsp; The simple act of writing something down and trying to do so in a lucid, structured and clear manner instead of resorting to “grawk, nhhh, brrrp” explanations combined with hand movements and dance simply helps me get things straight in my head.&amp;nbsp; This particular post is to remind myself why I blog and why after a lengthy break (due to major household renovations) it’s worth getting back into.&amp;nbsp; When I write clarity posts I’ll normally publish them but sometimes I don’t, especially if I think it’s worthless drivel, but even so, the mere act of writing something down helps me understand where I’m at.&amp;nbsp; If I realise I’m still not clear on a subject it’ll usually just save it as a draft until clarity comes.&lt;/p&gt; &lt;p&gt;OK, With that out of the way here’s a few more reasons… &lt;/p&gt; &lt;h3&gt;It Helps Me Improve&lt;/h3&gt; &lt;p&gt;Yep.&amp;nbsp; Putting something on screen and posting it on the internet for any and everyone to see can be a bit scary at times, but that in itself is a challenge to help me improve not only my understanding of a subject but also my ability to explain concepts and techniques.&lt;/p&gt; &lt;p&gt;Sometimes it works, sometimes it doesn’t, but regardless it helps me improve, little by little, and for someone who blathers on about continual improvement this is just one of many mechanisms for doing it.&lt;/p&gt; &lt;h3&gt;I Enjoy Teaching and Helping&lt;/h3&gt; &lt;p&gt;I actually enjoy helping people understand something they didn’t before.&amp;nbsp; Now this is where most people start in with the “nothing original” excuse.&amp;nbsp; My response?&amp;nbsp; “Yeah, so?”.&amp;nbsp; Big deal if someone has written about it before.&amp;nbsp; Who cares if it’s something &lt;a href="http://weblogs.asp.net/scottgu/" target="_blank"&gt;ScottGu&lt;/a&gt; or &lt;a href="http://www.loudthinking.com/" target="_blank"&gt;DHH&lt;/a&gt; has blogged about.&amp;nbsp; If someone’s reading a blog post of yours then it’s probably because they’re either interested in you as a person and want to hear what you have to say or because they found it via a search engine.&amp;nbsp; If it’s the latter, then you’ve probably written something from a slightly different angle than others and that’s something that’s going to help them.&amp;nbsp; That’s a good thing.&lt;/p&gt; &lt;h3&gt;For The Fame and the Money!&lt;/h3&gt; &lt;p&gt;Of course!&amp;nbsp; Well, maybe not.&amp;nbsp; Yes I’ve got some ads on the blog and feed (please click them and help me feed my starving children!!) but the amount of cash they bring in is only enough to cover a coffee once a week (if that).&amp;nbsp; And if I was doing it for the fame then I’d be delusional.&amp;nbsp; I’m glad you’re reading this post, seriously I am, but with my visitors a month count being in the 3,000-4,000 range and with the regular readers who follow via the feeds being in the hundreds I’d be considered extremely lucky to rate a mention globally.&amp;nbsp; If I wanted to get lots of hits then I’d have to blog about trendy subjects and unless I have an interest in it myself, then why would I? A blog should be about you and what interests you.&amp;nbsp; Of course I could write a killer app and be famous the world over, but that flash of inspiration still hasn’t hit :-P&lt;/p&gt; &lt;p&gt;Before I move on, I’ll be honest with you, a well received blog post does help scratch the ego and I like to get positive feedback, but if that was the main reason for me doing it, it would be a pretty crappy reason.&amp;nbsp; I can get my ego scratched much better by just visiting &lt;a title="http://ourstereo.com/compliment/" href="http://ourstereo.com/compliment/"&gt;http://ourstereo.com/compliment/&lt;/a&gt; and clicking refresh a few times.&amp;nbsp; Or playing a game with my kids who adore me.&amp;nbsp; Or, heck, I could just go look in the mirror… LOL. Yeah, okay.&amp;nbsp; Reality check!&amp;nbsp; I can proceed.&lt;/p&gt; &lt;h3&gt;It’s a Record of What I Learn&lt;/h3&gt; &lt;p&gt;Yep. Boring.&amp;nbsp; Move along.&amp;nbsp; Actually, I should just say that I often hit my blog and search for things I’ve written about a while back and where I’ve either forgotten the details or don’t have them handy.&amp;nbsp; Being able to quickly look up some info from the blog has helped me many, many times.&lt;/p&gt; &lt;h3&gt;Finally, It’s A Way To Connect&lt;/h3&gt; &lt;p&gt;This one is probably the least thought about, but to me it’s still something that’s quite important.&amp;nbsp; Blogging helps me connect with people, just like &lt;a href="http://twitter.com/rbanks54" target="_blank"&gt;twitter&lt;/a&gt; and IM can, but instead of it being a social connection with people typically know me personally or are one or two connections removed, it’s more a connection around common interests and whatever my blog posts have been about.&amp;nbsp; Through some of my posts I’ve made connections with people I admire from around the globe that I would never have met in person, and who would never have encountered me via social networking alone.&amp;nbsp; Even though the connections are typically loose and short lived I think they’re still invaluable, and who knows, some of those connections have a tendency to stick and can become people you connect with over the long term.&amp;nbsp; How good it that!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So that’s enough reasons for me.&amp;nbsp; What about you?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-9137785636730405240?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rGHI9-y6_aD9bU5cbnB6A8XSDzc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rGHI9-y6_aD9bU5cbnB6A8XSDzc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rGHI9-y6_aD9bU5cbnB6A8XSDzc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rGHI9-y6_aD9bU5cbnB6A8XSDzc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=uB2nRoS0o0Y:J8H8IsJ6rQg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=uB2nRoS0o0Y:J8H8IsJ6rQg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=uB2nRoS0o0Y:J8H8IsJ6rQg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/uB2nRoS0o0Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/9137785636730405240/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/07/why-do-you-blog.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/9137785636730405240" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/9137785636730405240" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/uB2nRoS0o0Y/why-do-you-blog.html" title="Why Do You Blog?" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/07/why-do-you-blog.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-13321238.post-7476529446960321916</id><published>2009-06-03T08:10:00.001+10:00</published><updated>2009-06-03T08:10:01.504+10:00</updated><title type="text">Do you want an Aussie Alt.Net Conference?</title><content type="html">&lt;p&gt;We’re currently trying to gauge the level of interest in having an Australian Alt.Net conference on the day before Tech.Ed AU.&lt;/p&gt; &lt;p&gt;Putting a conference together (even an open spaces one) takes quite a bit of effort so before we go down that path please help us out by &lt;a href="http://sydney.ozalt.net" target="_blank"&gt;responding to the poll&lt;/a&gt; on the sydney.ozalt.net site (it’s in the right hand column).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13321238-7476529446960321916?l=richardsbraindump.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kzW0S-qBqDxxUcY-jrExrf8MzeY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kzW0S-qBqDxxUcY-jrExrf8MzeY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kzW0S-qBqDxxUcY-jrExrf8MzeY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kzW0S-qBqDxxUcY-jrExrf8MzeY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ORyEdCf0Hts:x953l4yuT54:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?i=ORyEdCf0Hts:x953l4yuT54:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RichardsBraindump?a=ORyEdCf0Hts:x953l4yuT54:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RichardsBraindump?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RichardsBraindump/~4/ORyEdCf0Hts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/7476529446960321916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://richardsbraindump.blogspot.com/2009/06/do-you-want-aussie-altnet-conference.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13321238/posts/default/7476529446960321916" /><link rel="self" type="application/atom+xml" href="http://richardsbraindump.blogspot.com/feeds/posts/default/7476529446960321916" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RichardsBraindump/~3/ORyEdCf0Hts/do-you-want-aussie-altnet-conference.html" title="Do you want an Aussie Alt.Net Conference?" /><author><name>Richard Banks</name><uri>http://www.blogger.com/profile/11682500243311050542</uri><email>rbanks54@msn.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="09951884514721415164" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://richardsbraindump.blogspot.com/2009/06/do-you-want-aussie-altnet-conference.html</feedburner:origLink></entry></feed>
