<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3624860625160920598</id><updated>2024-09-15T03:33:46.157+12:00</updated><category term="Visual Studio"/><category term=".NET Framework"/><category term="Development"/><category term="C#"/><category term="Microsoft Data Access Block"/><category term="Team Foundation Server"/><category term="TechEd 2007"/><category term="Test Driven Development"/><category term="Cool Stuff"/><category term="Domain Driven Design"/><category term="Enterprise Libraries"/><category term="SQL Server"/><category term="Source Control"/><category term="Video"/><title type='text'>Duncan&#39;s Blog</title><subtitle type='html'>&quot;There are 10 kinds of people in the world - those who understand binary and those who don&#39;t.&quot; - Anon.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-8520873138785597608</id><published>2009-03-18T20:33:00.004+13:00</published><updated>2009-03-18T21:11:19.257+13:00</updated><title type='text'>Broken Records coming to New Zealand...</title><content type='html'>Not exactly technology related, but I thought a little more promotion wouldn&#39;t go amiss. Since leaving the UK, my brother became a member of a band, &lt;a href=&quot;http://www.myspace.com/brokenrecordsedinburgh&quot;&gt;Broken Records&lt;/a&gt; and I&#39;ve never yet managed to see them live which is a real shame. They have recently been signed by &lt;a href=&quot;http://www.4ad.com/&quot;&gt;4AD&lt;/a&gt; and are currently recording their first album which is due for release on 1st June 2009. Good luck lads!&lt;br /&gt;Oh, by the way, they aren&#39;t physically coming to New Zealand, just via my blog... Shame, I think it would be a good idea! :)&lt;br /&gt;&lt;br /&gt;Partly for my own reference, but also as a shameless plug, here are some of their website links:&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/brokenrecordsband&quot;&gt;YouTube&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.facebook.com/group.php?gid=3064490264&amp;amp;ref=ts&quot;&gt;Facebook Group&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.myspace.com/brokenrecordsedinburgh&quot;&gt;MySpace&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are some videos that are worth watching too:&lt;br /&gt;&lt;br /&gt;Broken Records Studio Video Diary - behind the scenes of their album recording:&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://www.clashmusic.com/themes/clashtheme/players/player.swf&quot; allowfullscreen=&quot;false&quot; allowscriptaccess=&quot;always&quot; flashvars=&quot;file=http://media.clashmusic.com/video/Broken-Records.flv&amp;amp;backcolor=000000&amp;amp;frontcolor=CCCCCC&amp;amp;logo=http://www.clashmusic.com/themes/clashtheme/players/logo.png&amp;amp;playlistsize=100&amp;amp;skin=http://www.clashmusic.com/themes/clashtheme/players/skins/stijl.swf&amp;amp;image=http://www.clashmusic.com/themes/clashtheme/players/video-player-bg.jpg&amp;amp;link=http://www.clashmusic.com/feature/broken-records-studio-diary&amp;amp;displayclick=link&quot; width=&quot;470&quot; height=&quot;376&quot;&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Official promo for &#39;Lies&#39; - the 3rd single from Scottish band, Broken Records&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/TuDUiVwNpdc&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/TuDUiVwNpdc&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A Channel4 review:&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/3v3mPDdU-6o&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/3v3mPDdU-6o&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/8520873138785597608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/8520873138785597608?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8520873138785597608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8520873138785597608'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2009/03/broken-records-coming-to-new-zealand.html' title='Broken Records coming to New Zealand...'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-6302954090789625344</id><published>2009-02-01T22:02:00.001+13:00</published><updated>2009-02-02T09:08:13.304+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><title type='text'>Using language features for readability and understandability</title><content type='html'>&lt;p&gt;Whilst &lt;a href=&quot;http://en.wikipedia.org/wiki/Pair_programming&quot; target=&quot;_blank&quot;&gt;pairing&lt;/a&gt; recently, we came across a situation that I believed was best solved using LINQ. I&#39;ve not used LINQ much other than reading about it in blogs so it was an opportunity to see what it was all about. In the end, we managed to solve the problem very nicely with very few lines of code. As we continued programming, yet another opportunity arose where LINQ could have solved the problem but instead we chose to write a foreach statement and this made me stop and think about language syntax in general. Why do we chose to use a certain syntax over another? Is it readability? Is it understandability? It is about knowledge? This post explores a few thoughts around this topic.&lt;/p&gt;  &lt;p&gt;I can think of a few reasons that might affect why a developer would chose to use a certain syntax:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;readability &lt;/li&gt;    &lt;li&gt;understandability &lt;/li&gt;    &lt;li&gt;fewest lines of code &lt;/li&gt;    &lt;li&gt;existing knowledge of the syntax &lt;/li&gt;    &lt;li&gt;they only know one way to solve the problem &lt;/li&gt;    &lt;li&gt;technical constraint (platform, deployment, etc)      &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These are just a few choices of the top of my head and I&#39;ll examine the readability and understandability first. These two terms are very closely related but they do have distinct differences. I&#39;m not going to discuss them here, but you can read further on Wikipedia on &lt;a href=&quot;http://en.wikipedia.org/wiki/Readability&quot; target=&quot;_blank&quot;&gt;readability&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Understandability&quot; target=&quot;_blank&quot;&gt;understandability&lt;/a&gt;. Suffice to say that the choice of syntax can enhance both these concepts. Let&#39;s look at an example:&lt;/p&gt;  &lt;div style=&quot;font-size: 10pt; background: white; color: black; font-family: courier new&quot;&gt;   &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; Name&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;{&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;get&lt;/span&gt;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;if&lt;/span&gt; (name == &lt;span style=&quot;color: blue&quot;&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;No name&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;return&lt;/span&gt; name;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;}&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;/p&gt; &lt;/div&gt;  &lt;div style=&quot;font-size: 10pt; background: white; color: black; font-family: courier new&quot;&gt;   &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; Name&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;{&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: blue&quot;&gt;return&lt;/span&gt; name ?? &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;No name&amp;quot;&lt;/span&gt;; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;These two property statements are identical in functionality but obviously differ in syntax. However, if you do not understand the &#39;??&#39; operator, you will be at a loss for the second statement. However, if you did understand the operator, which of the statements has a higher readability index? I&#39;ve come round to thinking that they are both readable but one could argue that the first one is more understandable because it uses an explanatory if statement. However, the &#39;??&#39; operator explains the same thing albeit that you need knowledge of the operator to understand its function. Further, you could also argue that the second implementation is more readable because it is only one line of code to read.&lt;/p&gt;  &lt;p&gt;Let&#39;s look at another example this time using LINQ:&lt;/p&gt;  &lt;div style=&quot;font-size: 10pt; background: white; color: black; font-family: courier new&quot;&gt;   &lt;pre style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;IList&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt;&amp;gt; GetCustomers(&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; startsWith)&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;{&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #2b91af&quot;&gt;IList&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt;&amp;gt; customersStaringWith = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt; customer &lt;span style=&quot;color: blue&quot;&gt;in&lt;/span&gt; customers)&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;if&lt;/span&gt; (customer.Name.StartsWith(startsWith))&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; customersStaringWith.Add(customer);&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;return&lt;/span&gt; customersStaringWith;&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;font-size: 10pt; background: white; color: black; font-family: courier new&quot;&gt;&lt;br /&gt;  &lt;p style=&quot;margin: 0px&quot;&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;font-size: 10pt; background: white; color: black; font-family: courier new&quot;&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;IList&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt;&amp;gt; GetCustomersLinq(&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; startsWith)&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;{&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;var&lt;/span&gt; selectedCustomers =&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;from&lt;/span&gt; customer &lt;span style=&quot;color: blue&quot;&gt;in&lt;/span&gt; customers&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;where&lt;/span&gt; customer.Name.StartsWith(startsWith)&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;select&lt;/span&gt; customer;&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Customer&lt;/span&gt;&amp;gt;(selectedCustomers);&lt;/pre&gt;&lt;br /&gt;  &lt;pre style=&quot;margin: 0px&quot;&gt;}&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Again, these two methods return the same result but which one is more readable?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Drawing a conclusion from this is quite difficult as readability and understandability are generally opinionated views. However, what I find interesting is that there are some language syntaxes that are adopted readily whilst others are left behind. Take generics, for example. I don&#39;t know any developer that doesn&#39;t use generics if they are using .NET Framework 2.0 or above. What is it about the syntax that attracts its adoption? Are developers becoming lazy about learning new syntaxes because they can still accomplish their goals using &amp;quot;standard&amp;quot; syntax? Does using a more recent syntax (Linq, Lambda) reflect on the developer&#39;s skill or is it just demonstrating knowledge?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So that I&#39;m not left behind, I&#39;m trying to use these new syntaxes where I get a chance as I believe that the more you use them, the more readable they become - to you. Sometimes, developers fear new syntaxes because they don&#39;t understand them well enough to use them effectively and therefore they write them off if they can accomplish the same result in another way. If a new syntax makes for more concise code and it doesn&#39;t impair its readability, then I believe it is the right choice. One way to expose yourself to various syntaxes (and code styles) is to take part in an open source project and explore the source code.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I&#39;ve only scratched the surface in this post about readability and understandability but the concepts of each are extremely important to grasp in order to write good code, IMHO.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/6302954090789625344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/6302954090789625344?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/6302954090789625344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/6302954090789625344'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2009/02/using-language-features-for-readability.html' title='Using language features for readability and understandability'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4438728960228032978</id><published>2008-07-15T13:00:00.005+12:00</published><updated>2008-07-15T14:17:55.586+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Creating a custom dictionary for code analysis in VS2008</title><content type='html'>There seems to be a few posts out there asking where to put a custom dictionary to be used by FxCop (code analysis). In Visual Studio 2008, you can add a dictionary xml file to the solution and then tell the solution to use this as the dictionary for FxCop. Here&#39;s how.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create your dictionary file&lt;/span&gt;&lt;br /&gt;Add a new XML file to your project or solution and call it what you want. It doesn&#39;t need to be called &lt;span style=&quot;font-style: italic;&quot;&gt;CustomDictionary.xml&lt;/span&gt;.&lt;br /&gt;The dictionary file must follow the correct schema, but unfortunately, there does not appear to be an .xsd schema file available (that I can find). As a starting point, copy the XML from the &lt;span style=&quot;font-style: italic;&quot;&gt;CustomDictionary.xml&lt;/span&gt; that comes with FxCop which is in the default FxCop install directory which on my machine is C:\Program Files\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\CustomDictionary.xml. You can then edit this file to include your own words. However, the schema is pretty simple:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgumkNMT_Qkuunn8xnRm2XdcezzwwhCGWy2yLRRrQi7PO0kC4N7JHA6HLWqRG_bmodi47eIaqaVNNn7KLZ9x_tSzCcbN_h-aO9c7VtBYh0AEzdWRAM995DAJd2J-lSVWn1wtGz5BQX2lVcv/s1600-h/Dictionary.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgumkNMT_Qkuunn8xnRm2XdcezzwwhCGWy2yLRRrQi7PO0kC4N7JHA6HLWqRG_bmodi47eIaqaVNNn7KLZ9x_tSzCcbN_h-aO9c7VtBYh0AEzdWRAM995DAJd2J-lSVWn1wtGz5BQX2lVcv/s320/Dictionary.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5223059060053436946&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Making FxCop use&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; your dictionary&lt;/span&gt;&lt;br /&gt;In the properties for the XML file you&#39;ve created (right-click, properties), change the Build Action to &#39;&lt;span style=&quot;font-style: italic;&quot;&gt;CodeAnalysisDictionary&lt;/span&gt;&#39;.&lt;br /&gt;Recompile your project and FxCop should no longer complain about those words. If you examine the build output window, Visual Studio makes a call to FxCop.exe with a whole load of parameters. Setting the build action property of the xml file to &lt;span style=&quot;font-style: italic;&quot;&gt;CodeAnalysisDictionary&lt;/span&gt;, makes VS include the switch /dictionary:&quot;&lt;yourfile.xml&gt;&quot; to the FxCop command.&lt;br /&gt;You can also just amened the &lt;span style=&quot;font-style: italic;&quot;&gt;CustomDictionaryl.xml&lt;/span&gt; file in the FxCop default installation directory but this obviously only takes effect on that machine. I like being able to check this dictionary file into source control so that other team members can benefit from it and this also includes the build server.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Reusing the dictionary across assemblies&lt;br /&gt;&lt;/span&gt;Another common situation is that you have more than one assembly and you want to share the same dictionary across them. One way of doing this is to add your dictionary file to the solution rather than a specific project. Then, add an existing item to your project, browse to the dictionary file in your solution, and select add as link. This add the dictionary file to your project and makes the link act like a shortcut to the dictionary file in your solution. This means you only physically create one dictionary file which is then easily shared across all your assemblies&lt;span style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt; Remember, you must still set the build action property on the link file in order for it to be recognised as a code analysis dictionary.&lt;br /&gt;Note: You don&#39;t actually need to add the dictionary.xml file to the solution, but it obviously must be checked into your source control system and it should be referenced relatively, not absolutely.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The reason&lt;br /&gt;&lt;/span&gt;In most projects I&#39;ve seen, the code analysis rule &lt;a href=&quot;http://msdn.microsoft.com/en-nz/library/bb264492%28en-us%29.aspx&quot;&gt;CA1704 - Identifiers should be spelled correctly&lt;/a&gt; is all too easily ignored by adding a rule to the global suppression file. Personally, I don&#39;t like this because I think the global suppression file should not be used as a custom dictionary, especially when there is an alternative. The custom dictionary method is much more portable across projects and it preserves the separation of spelling against genuine code analysis errors.&lt;br /&gt;&lt;/yourfile.xml&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4438728960228032978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4438728960228032978?isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4438728960228032978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4438728960228032978'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2008/07/creating-custom-dictionary-for-code.html' title='Creating a custom dictionary for code analysis in VS2008'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgumkNMT_Qkuunn8xnRm2XdcezzwwhCGWy2yLRRrQi7PO0kC4N7JHA6HLWqRG_bmodi47eIaqaVNNn7KLZ9x_tSzCcbN_h-aO9c7VtBYh0AEzdWRAM995DAJd2J-lSVWn1wtGz5BQX2lVcv/s72-c/Dictionary.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4016184811317749299</id><published>2008-04-23T13:06:00.005+12:00</published><updated>2008-04-23T16:07:01.715+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><title type='text'>Standup meetings: Keeping them useful</title><content type='html'>Every morning, we religiously hold a &lt;a href=&quot;http://www.extremeprogramming.org/rules/standupmeeting.html&quot;&gt;stand-up meeting&lt;/a&gt; to share information around the team - or at least, that is what&#39;s meant to happen. Over time, I&#39;ve noticed that the whole idea of the meeting has been lost and people now attend the meeting because that&#39;s what they did yesterday and so it will go on until someone tells them to stop. The &lt;a href=&quot;http://www.extremeprogramming.org/rules/standupmeeting.html&quot;&gt;stand-up meeting&lt;/a&gt; is a technique taken from the &lt;a href=&quot;http://www.extremeprogramming.org/&quot;&gt;Extreme Programming&lt;/a&gt; model and I believe it works effectively if you use it correctly.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A stand-up meeting every morning is used to communicate problems, solutions, and promote team focus.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;So what does this mean? It means, you have to come to the meeting having prepared a synopsis of what you achieved yesterday &lt;span style=&quot;FONT-STYLE: italic&quot;&gt;focusing on the problems and solutions only&lt;/span&gt;. Don&#39;t talk about anything else. We only want to hear successes or failures and not all about your daily churn. Remember the audience that you are talking to - developers, testers, PMs, BAs, etc. They all have different interests but as a whole, they all must come together to ensure communication is effective across the team. This is the whole point of the meeting and everyone who speaks should bear this in mind and focus their content to suit the audience.&lt;br /&gt;&lt;br /&gt;As a reference, here are some things I believe are &lt;span style=&quot;FONT-WEIGHT: bold; FONT-STYLE: italic&quot;&gt;not&lt;/span&gt; worth mentioning:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Daily churn - by this I mean we don&#39;t want to hear that you fixed a few bugs, added a comment to the order class and corrected a few spelling errors. This is not helpful information and doesn&#39;t affect anyone else apart from you. If you do fix a few bugs, say what they were and why they will help other people.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How you are tracking against your estimates is not productive on a daily basis because it&#39;s too granular. Project teams should also hold a weekly meeting that is more appropriate for this type of information. By all means highlight glaring errors in estimates, but don&#39;t talk about why you ran over by an hour on your last story card.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Anything that is implementation specific - remember your audience, save geek-speak for developers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Any problems you are having that are not related directly to the project you are working on.&lt;/li&gt;&lt;/ul&gt;Typical things that I&#39;d be interested to hear at the meeting are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Solutions and successes. For example, we&#39;ve worked out a more efficient way of loading information from the database. Or we have changed the structure of the build file making it easier to maintain and it has reduced the build time. People want to hear about what you&#39;ve been doing and if anything you have done can help them in the future.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Problems - this means areas of the system that are causing longer development times or are very difficult to maintain. If you don&#39;t understand what or how you are meant to do something, raise this and identify someone who can help. If you sit on your own and never mention your problems, no one will know to offer help.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Milestones or notable achievements - everyone likes to celebrate.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If you have nothing worth saying, don&#39;t say anything. You are not required to say anything but you should always attend the meeting to hear what other people have to say. I bet that if you were to ask a team to repeat what someone said in the stand up meeting yesterday, they would not remember unless it was notable. No one wants to remember useless or boring information but we are &quot;programmed&quot; to remember anomalies so focus your information on notable items.&lt;br /&gt;&lt;br /&gt;Finally, remember the rationale behind the meeting and why stand-up meetings are part of the XP methodology. As a team, we want to be continuously improving and each member of the team should be making suggestions to ensure this happens. The stand-up meeting is a forum for everyone to discuss their daily findings and making sure that, as a team, we solve those problems. Also remember that a stand-up meeting is not an excuse to stop talking during the rest of the day. It&#39;s more likely that you will talk to people in a similar role during the day and this should always continue, but use the stand-up meetings to bring the roles together and to form a team that communicates information effectively.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4016184811317749299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4016184811317749299?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4016184811317749299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4016184811317749299'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2008/04/standup-meetings-keeping-them-useful.html' title='Standup meetings: Keeping them useful'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-3350513141755358390</id><published>2008-01-15T14:48:00.000+13:00</published><updated>2008-01-15T14:55:46.874+13:00</updated><title type='text'>Team Foundation Sidekicks V2 Released</title><content type='html'>&lt;a href=&quot;http://www.attrice.info/&quot;&gt;Attrice Corporation&lt;/a&gt; released &lt;a href=&quot;http://www.attrice.info/cm/tfs/index.htm&quot;&gt;Sidekicks V2&lt;/a&gt; on 7th January.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;Text&quot;&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;Text&quot;&gt;                         The version 2.0 of &lt;a href=&quot;http://www.attrice.info/cm/tfs/index.htm&quot;&gt;Team Foundation Sidekicks&lt;/a&gt; application                         provides all features available in previously released version 1.3.3, as well as                         new &lt;a href=&quot;http://www.attrice.info/images/codereview_sk_screen.png&quot;&gt;Code Review Sidekick&lt;/a&gt;. Significant number of bug fixes was also incorporated                         in that release; in addition, Team Foundation Sidekicks application now supports                         Team Foundation Server 2008.&lt;/div&gt;                     &lt;div class=&quot;Text&quot;&gt; This release also deprecates Team Foundation Sidekick Visual Studio add-in; all features previously available in add-in are now part of Visual Studio Integration Package (both for VS 2005 and 2008) which is in turn part of Team Foundation Sidekicks 2.0; new Code Review Sidekick is available as part of Visual Studio package as well.&lt;/div&gt;                     &lt;div class=&quot;Text&quot;&gt;                         Team Foundation Sidekicks application provides convenient GUI for a wide range of                         administrative and advanced TFS version control tasks. The version 2.0 stand-alone                         application includes Workspace Sidekick, Status Sidekick, History Sidekick, Label                         Sidekick, Shelveset Sidekick and new Code Review Sidekick. Team Foundation Sidekicks                         integration package for Visual Studio 2005/2008 includes Code Review Sidekick, source                         control items search, dynamic history and build types editing features.&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href=&quot;http://www.attrice.info/downloads/TF_Sidekicks_2.0.0.msi&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.attrice.info/downloads/TF_Sidekicks_2.0.0.msi&quot;&gt;Download from here&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/3350513141755358390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/3350513141755358390?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/3350513141755358390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/3350513141755358390'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2008/01/team-foundation-sidekicks-v2-released.html' title='Team Foundation Sidekicks V2 Released'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-7544155561568028650</id><published>2007-11-26T08:03:00.000+13:00</published><updated>2007-11-26T08:05:35.273+13:00</updated><title type='text'>Too much Resharper...</title><content type='html'>You know you&#39;ve been using Resharper too much when you press F12 in a Word document expecting to be taken to the next spelling error! :)&lt;br /&gt;&lt;br /&gt;However, now I think of it, it would be a good thing.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/7544155561568028650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/7544155561568028650?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7544155561568028650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7544155561568028650'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/11/too-much-resharper.html' title='Too much Resharper...'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4988803076252346377</id><published>2007-11-02T08:20:00.000+13:00</published><updated>2007-11-02T08:35:50.131+13:00</updated><title type='text'>Mingle 1.1 Released</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1AGBI19cdqFmrZlIVFkqZXSv2b3Z2YiYHhYlUTs6eHBdvII3CTPngL5cjxlx5aFeWGngpfvDO6NVPyWugcw_gCRejW7Y5A-DDRTd87XN3p1lKcvAeOWqKTX3Q_gE8h5P1uDCylYDH_an4/s1600-h/MingleLogo.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1AGBI19cdqFmrZlIVFkqZXSv2b3Z2YiYHhYlUTs6eHBdvII3CTPngL5cjxlx5aFeWGngpfvDO6NVPyWugcw_gCRejW7Y5A-DDRTd87XN3p1lKcvAeOWqKTX3Q_gE8h5P1uDCylYDH_an4/s400/MingleLogo.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5127957782756225570&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;ThoughtWorks Studios have now released &lt;a href=&quot;http://studios.thoughtworks.com/mingle-project-intelligence&quot;&gt;Mingle&lt;/a&gt; 1.1.&lt;br /&gt;&lt;br /&gt;The new changes are &lt;a href=&quot;http://studios.thoughtworks.com/mingle-project-intelligence/whats-new-in-mingle&quot;&gt;documented here.&lt;/a&gt; There is &lt;a href=&quot;http://studios.thoughtworks.com/mingle/1.1/help/Content/installing_mingle/upgrade_instructions.htm&quot;&gt;post installation documentation&lt;/a&gt; here which might be useful when learning about the new card types and how to start using them.&lt;br /&gt;&lt;br /&gt;A word of warning - Once you installed the new version and launched the website, the installation says &quot;...this could take a very long time&quot;. They weren&#39;t joking! It took several hours on my machine. I&#39;ve no idea how long it actually took because I had to leave it running all night. However, it did successfully upgrade in the end. The strange thing was that during the upgrade process, the CPU is hardly used. What was it doing?!&lt;br /&gt;&lt;br /&gt;Not had a chance to use the new features yet but from the documentation they look encouraging. Nice work ThoughtWorks.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://studios.thoughtworks.com/mingle/download-mingle/download-mingle.html&quot;&gt;Download Mingle R1.1&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4988803076252346377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4988803076252346377?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4988803076252346377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4988803076252346377'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/11/mingle-11-released.html' title='Mingle 1.1 Released'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1AGBI19cdqFmrZlIVFkqZXSv2b3Z2YiYHhYlUTs6eHBdvII3CTPngL5cjxlx5aFeWGngpfvDO6NVPyWugcw_gCRejW7Y5A-DDRTd87XN3p1lKcvAeOWqKTX3Q_gE8h5P1uDCylYDH_an4/s72-c/MingleLogo.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-2381566239041444690</id><published>2007-10-26T13:28:00.000+13:00</published><updated>2007-10-27T15:32:58.323+13:00</updated><title type='text'>ScreenGrab! for Firefox</title><content type='html'>Browsing around recently, I came across &lt;a href=&quot;http://www.screengrab.org/&quot;&gt;ScreenGrab&lt;/a&gt; for Firefox.&lt;br /&gt;&lt;blockquote&gt;Screengrab! is an extension for Firefox that makes it easy to save a web-page as an image. With it, you can save anything that you can see in a browser window - from a small selection, to a complete page.&lt;/blockquote&gt;&lt;br /&gt;If you are a web developer and need an easy way to convert sections of a page or an entire page to a .png file, this the tool for you. It would be very useful when supplying clients with page screen shots.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/2381566239041444690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/2381566239041444690?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/2381566239041444690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/2381566239041444690'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/screengrab-for-firefox.html' title='ScreenGrab! for Firefox'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-8673000021607949662</id><published>2007-10-26T13:19:00.000+13:00</published><updated>2007-10-26T13:24:10.084+13:00</updated><title type='text'>IMAP Released for GMail</title><content type='html'>Finally, &lt;a href=&quot;http://www.imap.org/&quot;&gt;IMAP&lt;/a&gt; is available for free on &lt;a href=&quot;http://www.gmail.com&quot;&gt;GMail&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was only released within the last few days and is still being rolled out to everyone.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://googleblog.blogspot.com/2007/10/free-imap-for-gmail.html&quot;&gt;Here&lt;/a&gt; is the official word.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/8673000021607949662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/8673000021607949662?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8673000021607949662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8673000021607949662'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/imap-released-for-gmail.html' title='IMAP Released for GMail'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4648995931610571164</id><published>2007-10-03T08:32:00.000+13:00</published><updated>2007-10-03T08:35:38.225+13:00</updated><title type='text'>Great Mistakes in Technical Leadership</title><content type='html'>Came across &lt;a href=&quot;http://www.hacknot.info/hacknot/action/showEntry?eid=87&quot;&gt;this article&lt;/a&gt; on Hacknot.&lt;br /&gt;&lt;br /&gt;It&#39;s worth a read.&lt;br /&gt;&lt;br /&gt;From the article:&lt;br /&gt;&lt;blockquote&gt;A Technical Lead lacking in self-confidence can be a major frustration to their team. They may find themselves waiting on the Lead to make decisions that significantly effect their work, but find that there is some reticence or unwillingness to make a firm decision. Particularly when new in the role, some Technical Leads find it difficult to make decisions in a timely manner, for they are paralyzed by the fear of making that decision incorrectly. Troubled that a bad decision will make them look foolish, they vacillate endlessly between the alternatives, while their team mates are standing by wondering when they are going to be able to move forward.&lt;br /&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4648995931610571164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4648995931610571164?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4648995931610571164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4648995931610571164'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/great-mistakes-in-technical-leadership.html' title='Great Mistakes in Technical Leadership'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-737521039186524830</id><published>2007-10-02T07:48:00.000+13:00</published><updated>2007-10-02T07:52:21.891+13:00</updated><title type='text'>I&#39;m online with Plugoo</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.plugoo.com/plg2.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;&quot; src=&quot;http://www.plugoo.com/plg2.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I&#39;ve just added &lt;a href=&quot;http://www.plugoo.com/&quot;&gt;Plugoo&lt;/a&gt; to my blog and gave it a test run last night. What a cool idea!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Thanks to Plugoo, visitors on your webpage, friends or family, can easily chat with you while visiting your website!&lt;br /&gt;&lt;br /&gt;Plugoo enables you to chat directly from your Instant Messenger with any visitor of your blog, personal webpage or e-sales site.&lt;br /&gt;&lt;br /&gt;When you’re logged into your Instant Messenger (Windows Live Messenger, Yahoo! Messenger, AIM, GoogleTalk, Jabber or ICQ), you can receive in real time all the comments of your visitors or any question they might ask, and answer instantly!&lt;/blockquote&gt;&lt;br /&gt;It&#39;s very easy to sign up and get it working on your website or blog. If you are reading this from my blog directly rather than a feed reader, make sure you say hello!</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/737521039186524830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/737521039186524830?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/737521039186524830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/737521039186524830'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/im-online-with-plugoo.html' title='I&#39;m online with Plugoo'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-8329379955723213098</id><published>2007-10-02T07:30:00.000+13:00</published><updated>2007-10-02T07:47:24.276+13:00</updated><title type='text'>Google Apps includes presentations</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.google.com/a/help/intl/en/images/presently.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;&quot; src=&quot;http://www.google.com/a/help/intl/en/images/presently.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Google have just released another application to add to their Doc &amp;amp; Spreadsheet &lt;a href=&quot;http://www.google.com/a/help/intl/en/users/dands.html&quot;&gt;Google App suite&lt;/a&gt; called presentations.&lt;br /&gt;&lt;br /&gt;As far as I can see, Google have recreated Microsoft Office online. Well done Google!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Word = Documents&lt;/li&gt;&lt;li&gt;Excel = Spreadeheets&lt;/li&gt;&lt;li&gt;Outlook = Calendar + Gmail + todo&lt;/li&gt;&lt;li&gt;PowerPoint = Presentations&lt;/li&gt;&lt;/ul&gt;The rest of the Office suite doesn&#39;t matter. No one uses it anyway!&lt;br /&gt;&lt;br /&gt;I wonder how long it will be before businesses will starting using Google Apps in earnest?</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/8329379955723213098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/8329379955723213098?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8329379955723213098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8329379955723213098'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/google-apps-includes-presentations.html' title='Google Apps includes presentations'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-7785965144928828445</id><published>2007-10-01T08:45:00.000+13:00</published><updated>2007-10-01T08:54:50.022+13:00</updated><title type='text'>Mingle Roadmap</title><content type='html'>There are a few nice things coming our way in &lt;a href=&quot;http://studios.thoughtworks.com/mingle-project-intelligence&quot;&gt;Mingle&lt;/a&gt; before Christmas. &lt;a href=&quot;http://studios.thoughtworks.com/assets/2007/9/27/Mingle_Roadmap_at_a_glance_21Sep07.pdf&quot;&gt;This pdf&lt;/a&gt; shows a roadmap at a glance. I&#39;m particularly interesting in parent-child card relationships and CruiseControl integration both of which I&#39;ll need to wait until v1.2 scheduled to be release in December.&lt;br /&gt;&lt;br /&gt;However, there are plenty goodies in version 1.1 that will keep me interested in the meantime such as card printing, enhanced transitions and date properties to allow card scheduling.&lt;br /&gt;&lt;br /&gt;It&#39;s not surprising that the Mingle development team use Mingle themselves and here is a picture of their current &lt;a href=&quot;http://studios.thoughtworks.com/assets/2007/9/27/Mingle_Roadmap_CardWall_Sept07.png&quot;&gt;card wall&lt;/a&gt; for release planning.&lt;br /&gt;&lt;br /&gt;Of all these goodies, I&#39;m still concerned about the memory use of MingleServer.exe. It seems to take up a huge amount of memory which I understood was to be fixed in the RTM release. If anyone out these knows how to make this memory use any better, I&#39;m all ears.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/7785965144928828445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/7785965144928828445?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7785965144928828445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7785965144928828445'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/10/mingle-roadmap.html' title='Mingle Roadmap'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-8871197801881623804</id><published>2007-09-12T12:32:00.000+12:00</published><updated>2007-09-12T12:36:51.979+12:00</updated><title type='text'>Shared Posts</title><content type='html'>I&#39;ve starting using &lt;a href=&quot;http://reader.google.com/&quot;&gt;Google Reader&lt;/a&gt; in earnest now and one of its features is the ability to share items on my blog from feeds that I read. Basically, I act like an aggregator for the items that I think are worth sharing.&lt;br /&gt;&lt;br /&gt;This is separate from my blog feed so if you are interested, you can subscribe to my shared items list list using &lt;a href=&quot;http://www.google.com/reader/public/atom/user/06135139350721448131/state/com.google/broadcast&quot;&gt;this feed&lt;/a&gt; ,or you can see it on the &lt;a href=&quot;http://duncanjasmith.blogspot.com&quot;&gt;homepage&lt;/a&gt; of my blog.&lt;br /&gt;&lt;a href=&quot;http://www.google.com/reader/public/atom/user/06135139350721448131/state/com.google/broadcast&quot;&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/8871197801881623804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/8871197801881623804?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8871197801881623804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8871197801881623804'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/09/shared-posts.html' title='Shared Posts'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-2683518633813812791</id><published>2007-09-11T08:12:00.000+12:00</published><updated>2007-09-17T21:06:57.014+12:00</updated><title type='text'>Recent Comments Widget</title><content type='html'>Came across &lt;a href=&quot;http://beautifulbeta.blogspot.com/2006/11/customizable-recent-comments-widget.html&quot;&gt;this&lt;/a&gt; cool gadget that allows you to add recent comments to your Blogger sidebar.&lt;br /&gt;&lt;br /&gt;Very easy to install and configure. &lt;a href=&quot;http://beautifulbeta.blogspot.com/2006/11/customizable-recent-comments-widget.html&quot;&gt;Download it here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While you&#39;re at it, you should check out the &lt;a href=&quot;http://beautifulbeta.blogspot.com/2006/11/widget-installation-and-downloads-page.html#dlpicasa&quot;&gt;other widgets from this site&lt;/a&gt;.&lt;br /&gt;&lt;a href=&quot;http://beautifulbeta.blogspot.com/2006/11/customizable-recent-comments-widget.html&quot;&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/2683518633813812791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/2683518633813812791?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/2683518633813812791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/2683518633813812791'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/09/recent-comments-widget.html' title='Recent Comments Widget'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4343692402672967761</id><published>2007-09-10T08:01:00.000+12:00</published><updated>2007-09-17T21:08:00.072+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Setting up .NET Development Trees in Visual Studio</title><content type='html'>I had the intention of talking about best practice ways of setting up a Visual Studio solution including which are the best tools followed by a step by step guide of how to do it. Well, it looks like someone beat me to it! &lt;a href=&quot;http://www.mikebroberts.com/blogtastic/wp-content/uploads/2007/01/howtosetupadotnetdevelopmenttree.pdf&quot;&gt;This pdf&lt;/a&gt; from Mike Roberts does exactly that. What was interesting is that we set up our VS solutions very similarly and use most, if not all of the same tools. But then again, Mike Robert&#39;s is from ThoughtWorks and our Development Manager is ex ThoughtWorks - Amazing how the information flows between companies! ;)&lt;br /&gt;&lt;br /&gt;Talking of development tree structures, there is a tool on CodePlex that generates your solution tree for you in line with how Mike Robert&#39;s document suggests. It&#39;s called &lt;a href=&quot;http://www.codeplex.com/treesurgeon&quot;&gt;Tree Surgeon&lt;/a&gt;. It&#39;s very simple but it provides a good start.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4343692402672967761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4343692402672967761?isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4343692402672967761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4343692402672967761'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/09/setting-up-net-development-trees-in.html' title='Setting up .NET Development Trees in Visual Studio'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-3604515001755040583</id><published>2007-08-13T21:58:00.001+12:00</published><updated>2007-10-27T15:04:58.389+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TechEd 2007"/><title type='text'>TechEd New Zealand is underway</title><content type='html'>TechEd 2007 started today starting witht the &lt;a href=&quot;http://www.microsoft.com/nz/teched07/live/keynote.aspx&quot;&gt;keynote speech&lt;/a&gt; given this year by Lou Carbone. It was brilliant! It is soon to be posted on the TechEd NZ site soon and I recommend that you watch it. It is very inspirational. Some more info on this on &lt;a href=&quot;http://blogs.msdn.com/darrylburling/archive/2007/08/13/tech-ed-keynote-and-market-place.aspx&quot;&gt;Darryl Burling&#39;s blog&lt;/a&gt; and &lt;a href=&quot;http://blogs.msdn.com/nigel/archive/2007/08/13/tech-ed-is-open.aspx&quot;&gt;Nigel Parker&#39;s blog&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;Intergen were dressed in their ususal &quot;outstanding&quot; outfits making our mark on the NZ community.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht3TIQ8H_CFu4G_bGgH45eiTuOfzmHBzCUw1s1dUU0dBjw888V_MI_Y5obFnR3DHVEvZnnBedniCFiiGIj5kQQ6RRA8OV-WOaUoOCH8CH-LzJxE20WlsTSOnNe57R06k_doBHofY3d6l9n/s1600-h/DSC05403.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht3TIQ8H_CFu4G_bGgH45eiTuOfzmHBzCUw1s1dUU0dBjw888V_MI_Y5obFnR3DHVEvZnnBedniCFiiGIj5kQQ6RRA8OV-WOaUoOCH8CH-LzJxE20WlsTSOnNe57R06k_doBHofY3d6l9n/s320/DSC05403.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5125831348742943250&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I went to the following events:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;                                                                                           DEV346 Next Generation Team Foundation Server&lt;br /&gt;Having already played with TFS quite a bit, I didn&#39;t learn a great deal from this session. However, what i did learn is that there is a way to gain access to TFS source control using a SVN client! So that means we could use TortoiseSVN from Windows Explorer to manage TFS source control - how cool!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                                                                                           ARC304 Architecting Next Generation Business Applications&lt;br /&gt;This was heavily focussed on MOSS which wasn&#39;t for me so didn&#39;t take a lot away from this session&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                                                                                           ARC306 UX - Interface Design patterns&lt;br /&gt;This was an interesting session showing the possibilities of user interface design. It included a few video clips showing &lt;a href=&quot;http://labs.live.com/photosynth/&quot;&gt;Photosynth&lt;/a&gt;, some multi-touch tabled demos from &lt;a href=&quot;http://www.ted.com/index.php/talks/view/id/65&quot;&gt;Jeff Han&lt;/a&gt; all giving us plenty of ideas for our next user interface.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; DAT304 The Next Release of Microsoft SQL Server: Overview&lt;br /&gt;There are a few cool additions to the next vesion of SQL Server codenamed &quot;Katmai&quot;. I particularly liked the automatic page recovery feature of a mirrored database! Check out the rest of the features on the &lt;a href=&quot;http://www.microsoft.com/sql/prodinfo/futureversion/default.mspx&quot;&gt;Microsoft site&lt;/a&gt;.&lt;br /&gt;The July CTP of SQL Server 2008 is now available for &lt;a href=&quot;https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5395&quot;&gt;download&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;A great start to TechEd 2007. Hopefully tomorrow will continue to be as good...</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/3604515001755040583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/3604515001755040583?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/3604515001755040583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/3604515001755040583'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/teched-new-zealand-is-underway.html' title='TechEd New Zealand is underway'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht3TIQ8H_CFu4G_bGgH45eiTuOfzmHBzCUw1s1dUU0dBjw888V_MI_Y5obFnR3DHVEvZnnBedniCFiiGIj5kQQ6RRA8OV-WOaUoOCH8CH-LzJxE20WlsTSOnNe57R06k_doBHofY3d6l9n/s72-c/DSC05403.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-7546818396336649224</id><published>2007-08-12T19:34:00.000+12:00</published><updated>2007-08-13T22:29:52.750+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TechEd 2007"/><title type='text'>Intergen setting up at TechEd 2007</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdxyd53PQKUJmWHx-BsUd0zltoQp0Ph6HWQvNsS33DQEEnPGDH0IG3p0LEOtdhWVu5GkIbY_YdXUBuHz_YT3ktNlq6tjEv6cl3C8l7Bt3e62M7B1BbRwOAL6PCaeeSHatWxE-iC3i3KsOS/s1600-h/TechEdIntergen.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdxyd53PQKUJmWHx-BsUd0zltoQp0Ph6HWQvNsS33DQEEnPGDH0IG3p0LEOtdhWVu5GkIbY_YdXUBuHz_YT3ktNlq6tjEv6cl3C8l7Bt3e62M7B1BbRwOAL6PCaeeSHatWxE-iC3i3KsOS/s400/TechEdIntergen.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5097719845053247858&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Well, Tim and the rest of Tech Services did a great job of setting up the hand on labs room at TechEd this year. Well done guys!! The lab room looks cool and aparently everything is working just fine... fingers crossed!&lt;br /&gt;&lt;br /&gt;Nothing of note has happened so far, but that&#39;s because Ben wasn&#39;t there to entertain us with a brooks-worthy cockup!! Still, 3 days left for that, eh Ben!&lt;br /&gt;&lt;br /&gt;Shaun made a stellar effort of setting up the Intergen stand complete with an shot-em-up arcade machine. Tim and I had a game and got hooked in pretty quickly! If I&#39;m not on lab duty or attending a session, you&#39;ll find me playing games at the Intergen stand.&lt;br /&gt;&lt;br /&gt;As ever, the TechEd bag is quite funky and comes with a bundle of advertising inside, the most controversial of which was a brochure from Absolute IT doing a salary review. :) It&#39;s worth a read.&lt;br /&gt;No free copies of Vista yet but I&#39;m on the lookout.&lt;br /&gt;&lt;br /&gt;To keep everything central, I&#39;ve setup a Facebook group called Intergen &lt;span style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;TechEd 2007 for all the photos, videos, thoughts and new from this years event. It&#39;s an invite only group so if you&#39;re from Intergen, ping me an email and I&#39;ll add you in. There is a link to my Facebook public profile at the top of my blog and from there you can look at my groups to find the TechEd 2007 one.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/7546818396336649224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/7546818396336649224?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7546818396336649224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/7546818396336649224'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/intergen-setting-up-at-teched-2007.html' title='Intergen setting up at TechEd 2007'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdxyd53PQKUJmWHx-BsUd0zltoQp0Ph6HWQvNsS33DQEEnPGDH0IG3p0LEOtdhWVu5GkIbY_YdXUBuHz_YT3ktNlq6tjEv6cl3C8l7Bt3e62M7B1BbRwOAL6PCaeeSHatWxE-iC3i3KsOS/s72-c/TechEdIntergen.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4705271192485134103</id><published>2007-08-10T08:00:00.000+12:00</published><updated>2007-08-10T08:11:48.597+12:00</updated><title type='text'>Adding statistics to your blog</title><content type='html'>Add stats to your blog with &lt;a href=&quot;http://www.statcounter.com/&quot;&gt;Statcounter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I&#39;ve added some statistics to my blog so I can see who is looking at what. Nice to see the demographics of who visits your blog! It&#39;s very easy to sign up and there are loads of config options. Some of the stats are very interesting, especially the demographic map one!&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxYrn2xfJ3D_sMEUuEWzJoYn0uNPoW-kmqG8aVQDOSNxDg-RRwoSizCVq_i_EHsaEIP408hvrXqwGEhreS8Wnn7y8p8P4rYTwL4EOAqg8Mt_BlYTa3_Vls-sPl6y0KaI7jTnFvh7FGmt6/s1600-h/BlogMap.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxYrn2xfJ3D_sMEUuEWzJoYn0uNPoW-kmqG8aVQDOSNxDg-RRwoSizCVq_i_EHsaEIP408hvrXqwGEhreS8Wnn7y8p8P4rYTwL4EOAqg8Mt_BlYTa3_Vls-sPl6y0KaI7jTnFvh7FGmt6/s400/BlogMap.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5096795795724415298&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;A free yet reliable invisible web tracker, highly configurable hit counter and real-time detailed web stats. Insert a simple piece of our code on your web page or blog and you will be able to analyse and monitor all the visitors to your website in real-time!&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4705271192485134103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4705271192485134103?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4705271192485134103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4705271192485134103'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/adding-statistics-to-your-blog.html' title='Adding statistics to your blog'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxYrn2xfJ3D_sMEUuEWzJoYn0uNPoW-kmqG8aVQDOSNxDg-RRwoSizCVq_i_EHsaEIP408hvrXqwGEhreS8Wnn7y8p8P4rYTwL4EOAqg8Mt_BlYTa3_Vls-sPl6y0KaI7jTnFvh7FGmt6/s72-c/BlogMap.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-5992512042723187873</id><published>2007-08-02T13:11:00.000+12:00</published><updated>2007-08-02T13:34:52.893+12:00</updated><title type='text'>Formatting your code for blogging</title><content type='html'>In my previous post, I was trying to insert XML into my blog entry. Blogger isn&#39;t very helpful and makes a mess of XML and any C# or VB code entrys.&lt;br /&gt;&lt;br /&gt;However, there is a &lt;a href=&quot;http://www.manoli.net/csharpformat/&quot;&gt;formatting tool&lt;/a&gt; which outputs 4.01 compliant HTML which you can paste directly into your blog! It parses c# vb, xml, t-sql and others and does it very nicely.&lt;br /&gt;&lt;br /&gt;Here is a sample of c# output:&lt;br /&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;namespace&lt;/span&gt; Vulcan.Borat.WinApp.UserControls&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;partial&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; ProductPanel : UserControl&lt;br /&gt;    {&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; ProductPanel()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/5992512042723187873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/5992512042723187873?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/5992512042723187873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/5992512042723187873'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/formatting-your-code-for-blogging_02.html' title='Formatting your code for blogging'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-4966784199111421775</id><published>2007-08-02T11:48:00.000+12:00</published><updated>2007-08-02T12:40:34.263+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Test Driven Development"/><title type='text'>Using NUnitForms with NUnit Framework 2.2.9</title><content type='html'>&lt;a href=&quot;http://nunitforms.sourceforge.net/&quot;&gt;NUnitForms&lt;/a&gt; has been compiled to work with &lt;a href=&quot;http://www.nunit.org/&quot;&gt;NUnit&lt;/a&gt; framework library 2.2.7. However, NUnit have released a new framework which can be made to work with &lt;a href=&quot;http://www.nunit.org/&quot;&gt;NUnit&lt;/a&gt; 2.2.9 quite easily.&lt;br /&gt;&lt;br /&gt;By default, if you put &lt;a href=&quot;http://nunitforms.sourceforge.net/&quot;&gt;NUnitForms&lt;/a&gt; and &lt;a href=&quot;http://www.nunit.org/&quot;&gt;NUnit&lt;/a&gt; Framework 2.2.9 into the same project, you will get the error message&lt;br /&gt;&lt;blockquote&gt;Could not load file or assembly &#39;nunit.framework, Version=2.2.7.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77&#39; or one of its dependencies. The located assembly&#39;s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)&lt;/blockquote&gt;&lt;br /&gt;along with a further error&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.  Note: There is some performance penalty associated with assembly bind failure logging.&lt;br /&gt;To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].&lt;/blockquote&gt;&lt;br /&gt;However, you can use &lt;a href=&quot;http://nunitforms.sourceforge.net/&quot;&gt;NUnitForms&lt;/a&gt; with &lt;a href=&quot;http://www.nunit.org/&quot;&gt;NUnit&lt;/a&gt; 2.2.9 if you get the test project to perform some assemble redirecting. In your test project, create an app.config file and add the following XML to redirect &lt;a href=&quot;http://nunitforms.sourceforge.net/&quot;&gt;NUnitForms&lt;/a&gt; assemble to use the &lt;a href=&quot;http://www.nunit.org/&quot;&gt;NUnit&lt;/a&gt; Framework 2.2.9 assembly:&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;1.0&quot;&lt;/span&gt;?&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;configuration&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;assemblyBinding&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;urn:schemas-microsoft-com:asm.v1&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;dependentAssembly&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;assemblyIdentity&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;nunit.framework&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;publicKeyToken&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;96D09A1EB7F44A77&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;culture&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;neutral&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;bindingRedirect&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;oldVersion&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;0.0.0.0-2.4.0.2&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;newVersion&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;2.4.0.2&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;dependentAssembly&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;assemblyBinding&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;configuration&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Recompile and run your &lt;a href=&quot;http://nunitforms.sourceforge.net/&quot;&gt;NUnitForms&lt;/a&gt; tests and your working :)</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/4966784199111421775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/4966784199111421775?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4966784199111421775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/4966784199111421775'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/using-nunitforms-with-nunit-framework.html' title='Using NUnitForms with NUnit Framework 2.2.9'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-8156468410227261399</id><published>2007-08-01T15:50:00.000+12:00</published><updated>2007-08-01T15:54:51.407+12:00</updated><title type='text'>Mingle v1.0 Released</title><content type='html'>ThoughtWorks Studios have released Mingle v1.0 to the public.&lt;br /&gt;&lt;br /&gt;You can &lt;a href=&quot;http://studios.thoughtworks.com/mingle/trial&quot;&gt;download a 30 day trial version&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/8156468410227261399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/8156468410227261399?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8156468410227261399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/8156468410227261399'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/08/mingle-v10-released.html' title='Mingle v1.0 Released'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-1561849088889170505</id><published>2007-07-19T08:28:00.000+12:00</published><updated>2007-07-19T10:28:23.671+12:00</updated><title type='text'>Mingle</title><content type='html'>&lt;blockquote&gt;Mingle is a software application that helps you and your team manage Agile IT projects.&lt;br /&gt;It supports software delivery by providing the whole team with a single place to share all project output using a framework based on over 7 years of ThoughtWorks&#39; Agile experience.&lt;br /&gt;&lt;br /&gt;Mingle provides project intelligence for teams that need to make real-time decisions based on Agile metrics collected from everyday activities.&lt;/blockquote&gt;&lt;br /&gt;I&#39;ve had a play with Mingle recently and so far it looks like a great piece of software, even though it is still an alpha release. It is developed and supported by &lt;a href=&quot;http://studios.thoughtworks.com/&quot;&gt;ThoughtW&lt;/a&gt;&lt;a href=&quot;http://studios.thoughtworks.com/&quot;&gt;orks Studios.&lt;/a&gt; You can &lt;a href=&quot;http://studios.thoughtworks.com/mingle-project-intelligence/register-your-interest-in-mingle&quot;&gt;register you interest&lt;/a&gt; in Mingle which I did and was given access to download the software the next day.&lt;br /&gt;&lt;br /&gt;Mingle uses &lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL &lt;/a&gt;or &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;PostgreSQL &lt;/a&gt;as a back end database and the installation was simple and problem free. It integrates with Subversion for tracking your code against the requirements&lt;br /&gt;&lt;br /&gt;Well worth checking out &lt;a href=&quot;http://studios.thoughtworks.com/mingle-project-intelligence&quot;&gt;Mingle&lt;/a&gt; if you are looking for a tool to help you with agile project management and centralising your project information</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/1561849088889170505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/1561849088889170505?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/1561849088889170505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/1561849088889170505'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/07/mingle.html' title='Mingle'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-5399244766381358941</id><published>2007-07-17T09:00:00.000+12:00</published><updated>2007-07-17T09:28:01.248+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="Team Foundation Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Get latest before checkout</title><content type='html'>One difference between Visual Source Safe (VSS) and the version control in Team Foundation Server (TFS) is that VSS performed a get latest operation before checking out a file but TFS does not offer this functionality. This caused an issue for a few of my colleagues and until now, I didn&#39;t know of a way around this problem. For those that are interested, Greg found an article &lt;a href=&quot;http://sela.co.il/?CategoryID=975&amp;ArticleID=501&amp;amp;Page=1&quot;&gt;here&lt;/a&gt; that describes how to alter this behavior and you can download the file from &lt;a href=&quot;http://www.codeplex.com/TfsAddInCheckOut&quot;&gt;CodePlex&lt;/a&gt;. However, the add in doesn&#39;t do it for me because IMHO, you should NOT perform a get latest before you checkout and file and here is why.&lt;br /&gt;&lt;br /&gt;Microsoft have lulled us into a bad head space when it comes to source control. No source control system should manage state, but VSS and TFS both manage state on the server. This just causes no end of problems and doesn&#39;t represent what source control is all about. The topography of source control should be a hub &amp;amp; spoke situation - once a client performs a get latest on the server, the server does whatever it needs to to provide the information to the client and then severs the connection. The server should not maintain that Joe Bloggs just checked out file x because it makes absolutely no difference. What if that person kept file x checked out forever? Would it matter? No, not at all. What matters is what goes into the repository, not what comes out of it. In fact, the whole concept of check out is flawed. It&#39;s not that you are checking out the file, it more that you want to make changes to a file. In TFS land, check out means &quot;update the server with a record saying that I&#39;m maybe going to edit a file&quot; and undo checkout removes the record. What&#39;s the point of maintaining that you might do something? Ultimately, once you have the latest source on your machine, you shouldn&#39;t need to contact the repository again until you want to commit the files.&lt;br /&gt;&lt;br /&gt;Take this scenario:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;there are two developers, Bill and Ben&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bill makes changes to the customer code file&lt;/li&gt;&lt;li&gt;Ben makes changes to the customer code file&lt;/li&gt;&lt;li&gt;Bill checks in his changes&lt;/li&gt;&lt;li&gt;Ben checks in his changes&lt;/li&gt;&lt;/ul&gt;What happens here? Whose changes are accepted? What actually happens is the server performs a merge on every check in and if the code can be merged without conflicts, the changes are merged and accepted into the repository. So in this case, as long as Bill and Ben&#39;s changes merge successfully, there will be no issues and their changes will be merged together.&lt;br /&gt;&lt;br /&gt;However, there is a fundamental step missing from this scenario which causes the most headaches. Before you check in, you should always perform a get latest. If you don&#39;t, the version control system will attempt to merge your changes together but it&#39;s a horrible position to be in to be caught short when your trying to update the repository. A much better approach is to perform a get latest on the entire solution before you check in. This way, any files that have changed are brought to your machine locally and you can merge/diff/rebuild the project and run your tests before checking in.&lt;br /&gt;&lt;br /&gt;Lastly, and my main point about why get latest is bad before checkout, imagine this scenario:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There are two developers Bill and Ben&lt;/li&gt;&lt;li&gt;Ben makes changes to the customer file and these changes require changes to several other files file to complete the change successfully&lt;/li&gt;&lt;li&gt;Bill wants to edit the customer file and he does a get latest before he starts. When he tries to compile, it will fail because he did not get the related files that Ben changed, only the customer file. Therefore, Bill also has to get all the other necessary files to make the solution compile. He doesn&#39;t know which files these are and so ends up having to get latest on the entire project&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This scenario is bad because you haven&#39;t completed doing what coding changes you were working on and yet you&#39;ve had to mix changes from other people. Basically, you should not perform a get latest on a individual file otherwise you are only getting a partial get latest when it comes to building the entire solution. Also, before performing a get latest, you should finish your own changes first and ensure it compiles and passes all the tests before introducing changes from other member of the team through a get latest. Remember, get latest cannot be undone, so if you have your IDE perform a get latest before you check out a file and you end up in the above situation, you could spend a lot of time putting things back together before you are ready to.&lt;br /&gt;&lt;br /&gt;In general, when you are working with source control, you should follow this procedure:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make changes to the source&lt;/li&gt;&lt;li&gt;Build the solution and run your tests&lt;/li&gt;&lt;li&gt;Perform a get latest on the entire solution&lt;/li&gt;&lt;li&gt;Build the solution and run your tests&lt;/li&gt;&lt;li&gt;If it builds and all the tests pass, check in&lt;/li&gt;&lt;/ul&gt;Get latest on an individual file is fine if you understand the repercussions of what you are doing, but having your IDE automatically get the latest copy of a file before you check out defeats the purpose of having a source control system there at all. Assuming it were possible, why not just have all team members working from a central file resource so they alway have the latest files? Can you imagine what this would be like? This is exactly what is recreated if you get the latest version of a file before you make changes to it.</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/5399244766381358941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/5399244766381358941?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/5399244766381358941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/5399244766381358941'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/07/get-latest-before-checkout.html' title='Get latest before checkout'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3624860625160920598.post-1620895101706582211</id><published>2007-06-13T08:43:00.001+12:00</published><updated>2007-06-13T08:54:24.644+12:00</updated><title type='text'>Leadership and Management</title><content type='html'>I came across these two definitions which I thought distinguished the difference between leadership and management effectively.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Leadership without management&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;...sets a direction or vision that others follow, without considering too much how the new direction is going to be achieved. Other people then have to work hard in the trail that is left behind, picking up the pieces and making it work. Eg: in Lord of the Rings, at the council of Elrond, Frodo Baggins rescues the council from conflict by taking responsibility for the quest of destroying the ring - but most of the management of the group comes from others.&lt;/blockquote&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;Management without leadership&lt;/span&gt;&lt;blockquote&gt;...controls resources to maintain the status quo or ensure things happen according to already-established plans. Eg: a referee manages a sports game, but does not usually provide &quot;leadership&quot; because there is no new change, no new direction - the referee is controlling resources to ensure that the laws of the game are followed and status quo is maintained.&lt;/blockquote&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;Leadership combined with management&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;...does both - it both sets a new direction and manages the resources to achieve it. Eg: a newly elected president or prime minister.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href=&quot;http://www.teamtechnology.co.uk/leadership-basics.html&quot;&gt;Read the source article&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://duncanjasmith.blogspot.com/feeds/1620895101706582211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3624860625160920598/1620895101706582211?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/1620895101706582211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3624860625160920598/posts/default/1620895101706582211'/><link rel='alternate' type='text/html' href='http://duncanjasmith.blogspot.com/2007/06/leadership-and-management.html' title='Leadership and Management'/><author><name>Duncan Smith</name><uri>http://www.blogger.com/profile/17230268818435948853</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>