﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>TerryH's Blog</title>
    <description>// No constructor logic needed.</description>
    <link>http://www.tnthughes.net/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.6.1.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.tnthughes.net/blog/opml.axd</blogChannel:blogRoll>
    <dc:creator>Terry Hughes</dc:creator>
    <dc:title>TerryH's Blog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>Refactor This 02: To The Cloud</title>
      <description>&lt;p&gt;&lt;a title="Refactor This Series Page" href="http://www.tnthughes.net/blog/page/Refactor-This.aspx"&gt;Refactor This&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Solutions are due Friday, May 06, 2011 at 05:00:00 PM PDT. &lt;a title="RefactorThis on github" href="https://github.com/TerryHughes/RefactorThis/tree/master/02%20(To%20The%20Cloud)"&gt;Source Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hi and welcome to team Amazing Electronic Code Cluster (Blue-Cyan). As you know, we are a large provide of things that exist solely in a nebulus mass of stuff (like tubes, interconnected tubes, a whole series of them). Anyway, you're not the astronaut in charge of designing it, we hired you to do useful work. Here's a run down of the existing functionality.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A region can contain zero to many availability zones&lt;/li&gt;
&lt;li&gt;An availability zone can contain zero to many instances&lt;/li&gt;
&lt;li&gt;Instances need to have valid account numbers when supplied&lt;/li&gt;
&lt;li&gt;Instances with an availability zone must be uniquely named&lt;/li&gt;
&lt;li&gt;Instances can only be inactivated in certain situations (the actual situations are not important, but inactivation needs to be prevented when they occur)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recently experienced ... well let's say something that is statistically distinguishable from perfect. An availability zone was not available yet we continued to try and add instances to it and update existing instance. It wasn't a good situation. This caused us to think that we should handle that a little better. You're first task is to implement the following functionality.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don't save the instance when its availability zone is not available&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We've decided to allow for three levels of changes (so please specify which level you are solving for). Remember that whichever path you choose the existing functionality must be maintained and the new functionality must work correctly.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free rein, you are allowed to change everything within the current system&lt;/li&gt;
&lt;li&gt;Restricted, you are only allowed to change the Save method in InstanceController (this includes changing the content and the signature). You can add new classes and extension methods but you cannot change any other existing class (with the exception of the Program class of course)&lt;/li&gt;
&lt;li&gt;Compatability, you are only allowed to change the contents of the Save method in InstanceController. Again, you can add new classes and extension methods but you cannot change any other existing class (with the exception of the Program class of course)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FAQ&lt;br /&gt;Yes, this was adapted from real production code.&lt;br /&gt;No, it has nothing to do with cloud technology.&lt;br /&gt;Yes, I am familiar with the offending code.&lt;br /&gt;No, I didn't originally write it.&lt;br /&gt;Yes, I have added to it's nastiness.&lt;br /&gt;No, I don't feel good about it.&lt;br /&gt;Yes, you are awesome and want to impress me.&lt;br /&gt;No, you are not solving a problem for me (it's just a piece of crazy code I was looking at recently and thought it'd make for a good refactoring exercise).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/29/Refactor-This-02-To-The-Cloud.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/29/Refactor-This-02-To-The-Cloud.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=6a56ada2-b7b0-418a-9c89-2c143ea5d02f</guid>
      <pubDate>Fri, 29 Apr 2011 19:04:00 +0000</pubDate>
      <category>Refactor This</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=6a56ada2-b7b0-418a-9c89-2c143ea5d02f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=6a56ada2-b7b0-418a-9c89-2c143ea5d02f</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/29/Refactor-This-02-To-The-Cloud.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=6a56ada2-b7b0-418a-9c89-2c143ea5d02f</wfw:commentRss>
    </item>
    <item>
      <title>Lightsaber IDE 002: Basic improvements</title>
      <description>&lt;p&gt;&lt;a title="Lightsave IDE Series Page" href="http://www.tnthughes.net/blog/page/Lightsaber-IDE.aspx"&gt;Lightsaber IDE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that I have something that works, let's make it better!&lt;/p&gt;
&lt;p&gt;The first thing I'd like to do is make the feedback cycle better. I had setup a build file initially&lt;br /&gt;&lt;div class="code"&gt;
REM make.cmd&lt;br /&gt;@ECHO OFF&lt;br /&gt;&lt;br /&gt;IF EXIST bin RMDIR bin /S /Q&lt;br /&gt;MKDIR bin&lt;br /&gt;&lt;br /&gt;&lt;span class="str"&gt;"%windir%\Microsoft.NET\Framework\v4.0.30319\csc.exe"&lt;/span&gt; /out:bin\DevPad.exe /target:winexe /recurse:src\*.cs /nologo&lt;br /&gt;&lt;br /&gt;@ECHO ON&lt;/div&gt;&lt;br /&gt;but I soon realized that a simple mistake would lead to me wiping out my IDE and forcing me to go back to notepad or keep a working copy of the IDE around some other place. Also, I would run the &lt;code&gt;make.cmd&lt;/code&gt; and then I'd have to run &lt;code&gt;bin\DevPad.exe&lt;/code&gt;. I decided to update the build file to stage the executable and only when the compile succeeds do I overwrite the actual IDE.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;
REM make.cmd&lt;br /&gt;@ECHO OFF&lt;br /&gt;&lt;br /&gt;IF EXIST obj RMDIR obj /S /Q&lt;br /&gt;MKDIR obj&lt;br /&gt;&lt;br /&gt;&lt;span class="str"&gt;"%windir%\Microsoft.NET\Framework\v4.0.30319\csc.exe"&lt;/span&gt; /out:obj\DevPad.exe /target:winexe /recurse:src\*.cs /nologo&lt;br /&gt;&lt;br /&gt;IF ERRORLEVEL 1 GOTO :EoF&lt;br /&gt;&lt;br /&gt;IF EXIST bin RMDIR bin /S /Q&lt;br /&gt;MKDIR bin&lt;br /&gt;&lt;br /&gt;COPY obj\*.* bin &amp;gt;&amp;gt; NUL&lt;br /&gt;&lt;br /&gt;@ECHO ON&lt;/div&gt;&lt;br /&gt;To make it a one step process I added an upgrade file&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;
REM upgrayedd.cmd&lt;br /&gt;@ECHO OFF&lt;br /&gt;&lt;br /&gt;CALL make.cmd&lt;br /&gt;@ECHO OFF&lt;br /&gt;START bin\DevPad.exe&lt;br /&gt;&lt;br /&gt;@ECHO ON&lt;/div&gt;&lt;br /&gt;For tidiness I added a clean script&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;
REM clean.cmd&lt;br /&gt;@ECHO OFF&lt;br /&gt;&lt;br /&gt;IF EXIST obj RMDIR obj /S /Q&lt;br /&gt;IF EXIST bin RMDIR bin /S /Q&lt;br /&gt;&lt;br /&gt;@ECHO ON&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;One annoyance I was running into a lot, was getting prompted with the save dialog AND the confirmation that it was okay to overwrite the specified file when I wanted to save. By storing the file name as a variable I'd be able to know if I'm working on an existing file or something new.&lt;/p&gt;
&lt;p&gt;I also wanted to make my IDE smarter. If I wasn't careful I could lose unsaved changes. I wrote the logic of remembering if there were usaved changes and prompt for when there were out in its own class, &lt;code&gt;UnsavedChanges&lt;/code&gt; and then wired it up inside &lt;code&gt;MainForm&lt;/code&gt;. I don't like how &lt;code&gt;UnsavedChanges&lt;/code&gt; has to have a &lt;code&gt;IWin32Window&lt;/code&gt; and &lt;code&gt;Action&lt;/code&gt; (the &lt;code&gt;Save()&lt;/code&gt; method) but it works for now.&lt;/p&gt;
&lt;p&gt;The final bits of improvements I wanted to add are to show the current file on the form, set the default size to 800x600, to start maximized, and to set the default font &lt;code&gt;new Font("Consolas", 10, FontStyle.Regular, GraphicsUnit.Point, 0)&lt;/code&gt;.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-002-Basic-improvements.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-002-Basic-improvements.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=462114ab-11e8-41f4-95c8-57a4389dc28b</guid>
      <pubDate>Sat, 09 Apr 2011 20:15:00 +0000</pubDate>
      <category>LightsaberIDE</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=462114ab-11e8-41f4-95c8-57a4389dc28b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=462114ab-11e8-41f4-95c8-57a4389dc28b</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-002-Basic-improvements.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=462114ab-11e8-41f4-95c8-57a4389dc28b</wfw:commentRss>
    </item>
    <item>
      <title>Lightsaber IDE 001: First things first, self-hosting</title>
      <description>&lt;p&gt;&lt;a title="Lightsave IDE Series Page" href="http://www.tnthughes.net/blog/page/Lightsaber-IDE.aspx"&gt;Lightsaber IDE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first thing you'll want to do is get your IDE self-hosted. The best way to figure out what the most important thing to work on is by dogfooding. I also suggest that you use the most basic tools to bootstrap yourself. This way you are more likely to use your IDE rather than the one you usually do.&lt;/p&gt;
&lt;p&gt;I've chosen to use notepad with a goal of switching to my IDE ASAP.&lt;/p&gt;
&lt;p&gt;So it seems like the first step is to get a form to show up. Obviously, this is rather trivial:&lt;br /&gt;&lt;div class="code"&gt;
// Program.cs&lt;br /&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.Run(&lt;span class="kwrd"&gt;new&lt;/span&gt; MainForm());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;div class="code"&gt;
// MainForm.cs&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainForm : Form&lt;br /&gt;{&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;I'll need something to type into, a &lt;code&gt;RichTextBox&lt;/code&gt; should do for now. I put all the code to add it to the form in &lt;code&gt;MainForm.designer.cs&lt;/code&gt; and set it's &lt;code&gt;Dock&lt;/code&gt; property to &lt;code&gt;DockStyle.Fill&lt;/code&gt;. Next, I need to be able to open and save files. Instead of the traditional File, Edit, ..., Help menus I decided to just have the three items right there as root menus: Save, Open, and New. Some things I ran into: I had to add the &lt;code&gt;STAThread&lt;/code&gt; attribute to the &lt;code&gt;Main()&lt;/code&gt; method as I wanted to use the built-in &lt;code&gt;OpenFileDialog&lt;/code&gt; and &lt;code&gt;SaveFileDialog&lt;/code&gt;; the &lt;code&gt;RichTextBox&lt;/code&gt; control does not have carriage returns ("\r"), so I had to do a &lt;code&gt;Replace&lt;/code&gt; on new lines ("\n") with &lt;code&gt;Environment.NewLine&lt;/code&gt; when writing the file; and finally I had to use the &lt;code&gt;Encoding.Default&lt;/code&gt; encoding option, so that &amp;copy; et al. will get displayed on the form and saved to the file properly. With that I have a self-hosted IDE that I can begin using.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-001-First-things-first-self-hosting.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-001-First-things-first-self-hosting.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=32500f0a-3f72-4935-ab0b-36b79d3c493d</guid>
      <pubDate>Sat, 09 Apr 2011 19:32:00 +0000</pubDate>
      <category>LightsaberIDE</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=32500f0a-3f72-4935-ab0b-36b79d3c493d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=32500f0a-3f72-4935-ab0b-36b79d3c493d</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/09/Lightsaber-IDE-001-First-things-first-self-hosting.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=32500f0a-3f72-4935-ab0b-36b79d3c493d</wfw:commentRss>
    </item>
    <item>
      <title>Refactor This 01: Gilded Rose</title>
      <description>&lt;p&gt;&lt;a title="Refactor This Series Page" href="http://www.tnthughes.net/blog/page/Refactor-This.aspx"&gt;Refactor This&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I sent around a little challenge at work. Bobby was nice enough to &lt;a title="Refactor This: The Gilded Rose Kata" href="http://iamnotmyself.com/2011/02/13/refactor-this-the-gilded-rose-kata/"&gt;post&lt;/a&gt; about it so I'll leave it at that. I'm happy to report that it got &lt;a title="Gilded Rose Kata" href="http://craftsmanship.drupalgardens.com/content/gilded-rose-kata"&gt;picked up&lt;/a&gt; by a software craftsmanship course.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/01/Refactor-This-01-Gilded-Rose.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/01/Refactor-This-01-Gilded-Rose.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=4911d33e-861d-4134-a233-4995efb8a2a7</guid>
      <pubDate>Fri, 01 Apr 2011 17:19:00 +0000</pubDate>
      <category>Refactor This</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=4911d33e-861d-4134-a233-4995efb8a2a7</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=4911d33e-861d-4134-a233-4995efb8a2a7</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/01/Refactor-This-01-Gilded-Rose.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=4911d33e-861d-4134-a233-4995efb8a2a7</wfw:commentRss>
    </item>
    <item>
      <title>Lightsaber IDE 000: A long time ago in a galaxy far, far away....</title>
      <description>&lt;p&gt;&lt;a title="Lightsave IDE Series Page" href="http://www.tnthughes.net/blog/page/Lightsaber-IDE.aspx"&gt;Lightsaber IDE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So after getting fed up with people complaining about problems with their *favorite* IDE, it occurred to me. &lt;a href="http://twitter.com/Ang3lFir3/status/48504905912172544"&gt;Why don't we just make our own? You know, like how a Jedi builds their own lightsaber.&lt;/a&gt; Talking about it at work and thinking about it on the commute I came up with a list of big ticket items that would need to be addressed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editing a file&lt;/li&gt;
&lt;li&gt;Multiple files&lt;/li&gt;
&lt;li&gt;Compiling&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Test runner&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Find usages&lt;/li&gt;
&lt;li&gt;Go to definition&lt;/li&gt;
&lt;li&gt;Intellisense&lt;/li&gt;
&lt;li&gt;Snippets (prop, propg)&lt;/li&gt;
&lt;li&gt;Source code integration&lt;/li&gt;
&lt;li&gt;TeamCity, StyleCop, etx integration&lt;/li&gt;
&lt;li&gt;ReSharper refactorings&lt;/li&gt;
&lt;li&gt;Underscoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While there is a ton more and it's a big task (and most likely a tremendous waste of time) it seems like a fun thing to do, at least for a little while. I also came up with a name, &lt;a title="DevPad on github" href="https://github.com/TerryHughes/DevPad"&gt;DevPad&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/01/Lightsaber-IDE-000-A-long-time-ago-in-a-galaxy-far-far-away.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/01/Lightsaber-IDE-000-A-long-time-ago-in-a-galaxy-far-far-away.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=b3bc5c94-0b2c-4bf2-8bac-9cbe3d3b2584</guid>
      <pubDate>Fri, 01 Apr 2011 16:45:00 +0000</pubDate>
      <category>LightsaberIDE</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=b3bc5c94-0b2c-4bf2-8bac-9cbe3d3b2584</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=b3bc5c94-0b2c-4bf2-8bac-9cbe3d3b2584</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/01/Lightsaber-IDE-000-A-long-time-ago-in-a-galaxy-far-far-away.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=b3bc5c94-0b2c-4bf2-8bac-9cbe3d3b2584</wfw:commentRss>
    </item>
    <item>
      <title>Harmony Hackathon Retrospective Notes</title>
      <description>&lt;p&gt;&lt;img src="http://www.tnthughes.net/blog/image.axd?picture=2011%2f4%2fHarmonyHackathonRetrospectiveNotes.jpg" alt="Harmony Hacks Retrospective Notes" width="460" height="816" /&gt;&lt;/p&gt;
&lt;p&gt;In case my handwritting is unintelligible.&lt;/p&gt;
&lt;ul&gt;
Worked
&lt;li&gt;Justin stepping up to be the customer rep.&lt;/li&gt;
&lt;li&gt;Liked the environment/facilities&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;same room&lt;/li&gt;
&lt;li&gt;No negative interactions&lt;/li&gt;
&lt;li&gt;New phrases&lt;/li&gt;
&lt;li&gt;Good/committed product owner&lt;/li&gt;
&lt;li&gt;"C# is better than Java" -Scott&lt;/li&gt;
&lt;li&gt;Good learning experience&lt;/li&gt;
&lt;li&gt;Made the product owner think about the workflow, rethink the process&lt;/li&gt;
&lt;li&gt;Demoing often&lt;/li&gt;
&lt;li&gt;Having a central place to demo&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
Didn't
&lt;li&gt;Backbone derailment&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(communication problem?)&lt;/li&gt;
&lt;li&gt;Needed a skeleton/starter kit&lt;/li&gt;
&lt;li&gt;Not much to do @ first&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;a smaller group for a new project (4~5)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;a larger group for adding features to an existing project&lt;/li&gt;
&lt;li&gt;Needing a benevolent dictator&lt;/li&gt;
&lt;li&gt;Conflict between getting an understanding of the problem &amp;amp; solving the problem&lt;/li&gt;
&lt;li&gt;Didn't solve the file backup project&lt;/li&gt;
&lt;li&gt;Needed more formality&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;timebox&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;actually standing up&lt;/li&gt;
&lt;li&gt;Loving the CRUD&lt;/li&gt;
&lt;li&gt;Very painful to watch the rubber band effect&lt;/li&gt;
&lt;li&gt;Didn't do it the way we KNOW we should have&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also thought we should have had a time-lapse camera.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2011/04/01/Harmony-Hackathon-Retrospective-Notes.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2011/04/01/Harmony-Hackathon-Retrospective-Notes.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=5389567a-384a-46a5-a311-92da78ee1dc3</guid>
      <pubDate>Fri, 01 Apr 2011 16:15:00 +0000</pubDate>
      <category>Code Retreats</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=5389567a-384a-46a5-a311-92da78ee1dc3</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=5389567a-384a-46a5-a311-92da78ee1dc3</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2011/04/01/Harmony-Hackathon-Retrospective-Notes.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=5389567a-384a-46a5-a311-92da78ee1dc3</wfw:commentRss>
    </item>
    <item>
      <title>Cropper 1.9.3</title>
      <description>Earlier this month I was added to the &lt;a href="http://cropper.codeplex.com/" title="Cropper"&gt;Cropper&lt;/a&gt; project (thanks &lt;a href="http://jeffreypalermo.com/" title="Jeffrey Palermo (.com)"&gt;Jeffrey&lt;/a&gt;). After working through most of the easier work items I felt it would be a good time to issue a new &lt;a href="http://cropper.codeplex.com/Release/ProjectReleases.aspx#ReleaseFiles" title="Download Cropper"&gt;release&lt;/a&gt;. I&amp;#39;m looking forward to digging in to those tougher issues and implementing the requested features. So go give it a try and feel free to provide some feedback.
</description>
      <link>http://www.tnthughes.net/blog/post/2009/11/27/Cropper-193.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2009/11/27/Cropper-193.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=0514dbbd-7a78-42a3-9085-c8be68c44366</guid>
      <pubDate>Fri, 27 Nov 2009 23:25:00 +0000</pubDate>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=0514dbbd-7a78-42a3-9085-c8be68c44366</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=0514dbbd-7a78-42a3-9085-c8be68c44366</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2009/11/27/Cropper-193.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=0514dbbd-7a78-42a3-9085-c8be68c44366</wfw:commentRss>
    </item>
    <item>
      <title>Access VisualSVN Server and TeamCity through IIS7</title>
      <description>&lt;p&gt;
I run &lt;a href="http://www.iis.net/" title="Microsoft IIS"&gt;IIS&lt;/a&gt;, &lt;a href="http://www.visualsvn.com/server/" title="VisualSVN Server | Subversion Server for Windows"&gt;VisualSVN Server&lt;/a&gt;, and &lt;a href="http://www.jetbrains.com/teamcity/" title="TeamCity :: Distributed Build Management and Continuous Integration Server"&gt;TeamCity&lt;/a&gt; on the same machine and everything works great, except for one small thing: they all need their own port to listen too. I ended up with IIS on 80, VisualSVN Server on 81, and TeamCity on 82. Yuck! The URLs look horrible and you have to remember to explicitly prefix the non 80 ports with http://. What I really want is for everything to be on port 80.
&lt;/p&gt;
&lt;p&gt;
Googling the interwebs, I learned that what I wanted to do was have IIS be a &lt;a href="http://en.wikipedia.org/wiki/Reverse_proxy" title="Reverse proxy - Wikipedia"&gt;reverse proxy&lt;/a&gt; for VisualSVN Server and TeamCity. I also learned that there is an extension, &lt;a href="http://www.iis.net/extensions/ApplicationRequestRouting" title="Microsoft Application Request Routing (ARR)"&gt;Application Request Routing&lt;/a&gt;, for IIS7 that does this very thing. I found an &lt;a href="http://learn.iis.net/page.aspx/659/reverse-proxy-with-url-rewrite-v2-and-application-request-routing/" title="Reverse Proxy with URL Rewrite v2 and Application Request Routing"&gt;article&lt;/a&gt; that outlined how to do what I wanted, but there are a couple of special things that need to be done to get VisualSVN Server and TeamCity working.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Application Request Routing&lt;/strong&gt;&lt;br /&gt;
I enabled the proxy, which is explained in the &lt;em&gt;Configuring Rules for the Reverse Proxy&lt;/em&gt; section of the previous link, and took this opportunity to add a rewrite rule to the Default Web Site that will prefix www to any request that does not have it, the rule configuration can be found a little over halfway through the video on the &lt;a href="http://www.iis.net/extensions/URLRewrite" title="URL Rewriter"&gt;URL Rewrite Module&lt;/a&gt; page. As an aside, after adding the rule, Google Reader showed that existing postings where new entries. I think this is because I had FeedBurner pointing to tnthughes.net/blog not www.tnthughes.net/blog. I&amp;#39;m not sure if there would have been a way to prevent the duplication of posts since the URLs are technically different.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;TeamCity&lt;/strong&gt;&lt;br /&gt;
At first I tried to proxy TeamCity from a subdirectory, but it returns link references to items at the root URL and I was unsuccessful at correctly rewriting the links. Since I run other applications within the same web site, I couldn&amp;#39;t have TeamCity use www.tnthughes.net directly, so I decided to add a TeamCity subdomain in my DNS settings. I updated my prefix www rule to have a second condition so it didn&amp;#39;t try to change TeamCity.tnthughes.net to www.tnthughes.net. I then added a rewrite rule to the Default Web Site that matches any url with the condition that the HTTP_POST is TeamCity.tnthughes.net to rewrite to http://localhost:82/{R:1}.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VisualSVN Server&lt;/strong&gt;&lt;br /&gt;
Since TeamCity had it&amp;#39;s own domain I wanted to do the same thing for VisualSVN Server, only it didn&amp;#39;t work. Remember how VisualSVN Server will automatically append svn/ when you type in just the root address? There is a reason for this, I&amp;#39;m not sure what the reason is, but it is how VisualSVN Server works. So VisualSVN Server has to be proxied at a subdirectory. At first I set the rewrite rules to use a nonexistant directory but found out that IIS blocks files that have certain extensions. Some of the blocked extensions are the very same as the file extensions that I want VisalSVN Server to serve. In order to work around that and not expose those file types in other applications that are running in the same web site, I opted to have a physical directory so I can override the default IIS settings. I created a new folder called svn within the wwwroot folder on my server. I then added a rewrite rule to the svn folder that matches any url to rewrite to http://localhost:81/svn/{R:1}. I couldn&amp;#39;t find a way in the UI to change the file extensions that IIS served but this &lt;a href="http://www.adamwlewis.com/articles/iis-7-not-serving-files-4047-error" title="IIS 7 Not Serving Files - 404.7 Error"&gt;post&lt;/a&gt;
shows the xml configuration syntax needed to tell IIS that it&amp;#39;s okay to
serve certain extensions. I updated the web.config in the svn directory to allow for the extensions .config, .cs, and .csproj. This isn&amp;#39;t all inclusive, just want I&amp;#39;ve ran
across so far. Then i noticed something. If I typed in tnthughes.net/svn the links went to tnthughes.net/{Repository} and would give a 404 error if clicked. Realizing that the ending slash was needed, I played around a bit and figured out that by adding a rewrite rule to the Default Web Site that matches ^svn$ to redirect to http://www.tnthughes.net/svn/ I could always ensure that there was an ending slash. The other thing with VisualSVN Server is that it expects it&amp;#39;s images
and styling files to be at the root of the URL. So I had to copy the
files under %ProgramFiles%\VisualSVN Server\htdocs\ (minus index.html) to the wwwroot folder.
&lt;/p&gt;
&lt;p&gt;
The order in which the rules are processed matters. If the rule for TeamCity happened after the rule to append the ending slash for VisualSVN Server, TeamCity.tnthughes.net/svn would take me to www.tnthughes.net/svn/, not exactly what I wanted.
&lt;/p&gt;
&lt;p&gt;
A side benefit to all of this is that now I can close the non 80 ports on my router and disable the firewall rules on the server. So now I have what I wanted. It&amp;#39;s not exactly perfect, I&amp;#39;d must prefer TeamCity to be in a subdirectory like VisualSVN Server, but I can live with it. For now.
&lt;/p&gt;
</description>
      <link>http://www.tnthughes.net/blog/post/2009/10/11/Access-VisualSVN-Server-and-TeamCity-through-IIS7.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2009/10/11/Access-VisualSVN-Server-and-TeamCity-through-IIS7.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=8da391f1-ccc9-4fcc-b2ff-54e0eb92078e</guid>
      <pubDate>Sun, 11 Oct 2009 11:20:00 +0000</pubDate>
      <category>Tips</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=8da391f1-ccc9-4fcc-b2ff-54e0eb92078e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=8da391f1-ccc9-4fcc-b2ff-54e0eb92078e</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2009/10/11/Access-VisualSVN-Server-and-TeamCity-through-IIS7.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=8da391f1-ccc9-4fcc-b2ff-54e0eb92078e</wfw:commentRss>
    </item>
    <item>
      <title>When to remove hacks?</title>
      <description>&lt;p&gt;A coworker of mine ran into a bummer of a &lt;a title="Practical Example of YAGNI: Good Intentions Gone Horribly Wrong" href="http://iamnotmyself.com/2009/04/24/practical-example-of-yagni-good-intentions-gone-horribly-wrong/"&gt;problem&lt;/a&gt; and asked for advice. Over lunch we talked about what to do, I personally felt that option 2 was the safest solution. I didn't really like adding bad code to cover up bad code and I began to think about how you would know when the hack could be removed. Then I threw out the idea of writing a test to verify that the bad condition is present. When the test fails you will know to remove (or at least re-evaluate) the hack. He thought it was a neat idea, can't wait to see what he comes up with.&lt;/p&gt;</description>
      <link>http://www.tnthughes.net/blog/post/2009/04/24/When-to-remove-hacks.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2009/04/24/When-to-remove-hacks.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=c7a1d87e-e9b3-406f-9a54-ea58d56cf7de</guid>
      <pubDate>Fri, 24 Apr 2009 16:15:00 +0000</pubDate>
      <category>Tips</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=c7a1d87e-e9b3-406f-9a54-ea58d56cf7de</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=c7a1d87e-e9b3-406f-9a54-ea58d56cf7de</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2009/04/24/When-to-remove-hacks.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=c7a1d87e-e9b3-406f-9a54-ea58d56cf7de</wfw:commentRss>
    </item>
    <item>
      <title>ALT.NET</title>
      <description>&lt;p&gt;
I attended the last&amp;nbsp;&lt;a href="http://altdotnet.org/events/seattle" title="Open Spaces, Seattle"&gt;event&lt;/a&gt; with a co-worker a couple weekends ago. This was my first &lt;a href="http://en.wikipedia.org/wiki/Open_Space_Technology" title="Open Space Technology - Wikipedia"&gt;open space&lt;/a&gt; experience, which was amazing to see in action. I wasn&amp;#39;t sure what to expect but&amp;nbsp;left realizing that it is more about the conversation, interaction, and socialization/networking than learning. I left refreshed and energized about what I do and I&amp;#39;m looking forward to new possibilities.
&lt;/p&gt;
</description>
      <link>http://www.tnthughes.net/blog/post/2008/05/03/ALTNET.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2008/05/03/ALTNET.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=ff838225-48c6-4cdc-a34e-96456366f01f</guid>
      <pubDate>Sat, 03 May 2008 22:58:00 +0000</pubDate>
      <category>Conferences</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=ff838225-48c6-4cdc-a34e-96456366f01f</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=ff838225-48c6-4cdc-a34e-96456366f01f</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2008/05/03/ALTNET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=ff838225-48c6-4cdc-a34e-96456366f01f</wfw:commentRss>
    </item>
    <item>
      <title>Event Registration</title>
      <description>&lt;p&gt;
We&amp;rsquo;ve held two &lt;a href="http://www.tnthughes.net/blog/admin/Pages/blog/page/AppliedNET.aspx" title="Applied.NET Reference Page"&gt;Applied.NET&lt;/a&gt; meetings at work. There&amp;rsquo;s been a lot of interest but I&amp;rsquo;ve found the hardest part is making the discussion relevant. It&amp;rsquo;s hard to explain a complex idea using simple examples and in a short amount of time. Luckily, we are starting a new project at work to allow employees to register for events (like training). It will replace an existing system, include new functionality, and be a great opportunity to utilize newer technology. I&amp;rsquo;m looking forward to getting started as it should help drive home new ideas and expose everyone to a new way of working together. 
&lt;/p&gt;
</description>
      <link>http://www.tnthughes.net/blog/post/2008/03/24/Event-Registration.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2008/03/24/Event-Registration.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=61894322-e96b-4b44-ad78-bd368f404fc8</guid>
      <pubDate>Mon, 24 Mar 2008 14:56:00 +0000</pubDate>
      <category>Applied.NET</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=61894322-e96b-4b44-ad78-bd368f404fc8</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=61894322-e96b-4b44-ad78-bd368f404fc8</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2008/03/24/Event-Registration.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=61894322-e96b-4b44-ad78-bd368f404fc8</wfw:commentRss>
    </item>
    <item>
      <title>Nothin' But .NET</title>
      <description>&lt;p&gt;
Last summer a coworker and I were fortunate enough to attend a &lt;a href="http://www.jpboodhoo.com/blog/NothinButNetBuildASolidCoreWenatcheeWAAugust20th24th.aspx" title="Nothin But .Net (Build A Solid Core) - Wenatchee, WA (August 20th - 24th)"&gt;boot camp&lt;/a&gt; lead by &lt;a href="http://www.jpboodhoo.com/blog/" title="Jean-Paul S. Boodhoo's Blog"&gt;Jean-Paul Boodhoo&lt;/a&gt;. Wow, what an experience, JP is an insanely smart developer and a wonderful person in general. By the end of the week I was inspired to be the same. I&amp;rsquo;ve continued to hone my skills through use and further study and I feel that I have grown to a point where I can begin to share my knowledge with others.&lt;br /&gt;
Tomorrow, I will be leading a discussion at work, it&amp;rsquo;s the first in what I hope will be a continued and successful endeavor that I am calling &lt;a href="http://www.tnthughes.net/blog/admin/Pages/blog/page/AppliedNET.aspx" title="Applied.NET Reference Page"&gt;Applied.NET&lt;/a&gt;. I have planned out the first couple of topics and will be coding out examples during the meeting. 
&lt;/p&gt;
</description>
      <link>http://www.tnthughes.net/blog/post/2008/03/03/Nothin-But-NET.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2008/03/03/Nothin-But-NET.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=ef28afa7-4d34-4f63-b727-dc0b3cdba1bb</guid>
      <pubDate>Mon, 03 Mar 2008 20:57:00 +0000</pubDate>
      <category>Training</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=ef28afa7-4d34-4f63-b727-dc0b3cdba1bb</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=ef28afa7-4d34-4f63-b727-dc0b3cdba1bb</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2008/03/03/Nothin-But-NET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=ef28afa7-4d34-4f63-b727-dc0b3cdba1bb</wfw:commentRss>
    </item>
    <item>
      <title>Cropper Patches</title>
      <description>&lt;p&gt;
A week ago I was staying up late looking through &lt;a href="http://www.codeplex.com/" title="CodePlex - Open Source Project Hosting"&gt;CodePlex&lt;/a&gt;. I noticed that &lt;a href="http://www.codeplex.com/cropper" title="Cropper - Home"&gt;Cropper&lt;/a&gt;&amp;nbsp;had a few outstanding issues. Looking through the code and running an instance in the debugger&amp;nbsp;I was able to get a handle for what would be required for some of the simpler issues. I was able to resolve these&amp;nbsp;and&amp;nbsp;upload&amp;nbsp;the &lt;a href="http://www.codeplex.com/cropper/SourceControl/PatchList.aspx" title="Patches for Cropper"&gt;patches&lt;/a&gt;. I had never submitted code to an OSS project before and it felt really good taking unfamiliar code, working through it, and resolving the problems. Of course I woke up the next day realizing that I had missed a few scenarios and resubmit my patches but I also upload an addition feature. 
&lt;/p&gt;
</description>
      <link>http://www.tnthughes.net/blog/post/2008/02/26/Cropper-Patches.aspx</link>
      <author>Terry Hughes</author>
      <comments>http://www.tnthughes.net/blog/post/2008/02/26/Cropper-Patches.aspx#comment</comments>
      <guid>http://www.tnthughes.net/blog/post.aspx?id=4bb01822-ad01-46b8-9b8f-f035e92da265</guid>
      <pubDate>Tue, 26 Feb 2008 23:22:00 +0000</pubDate>
      <category>Open Source</category>
      <dc:publisher>Terry Hughes</dc:publisher>
      <pingback:server>http://www.tnthughes.net/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.tnthughes.net/blog/post.aspx?id=4bb01822-ad01-46b8-9b8f-f035e92da265</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.tnthughes.net/blog/trackback.axd?id=4bb01822-ad01-46b8-9b8f-f035e92da265</trackback:ping>
      <wfw:comment>http://www.tnthughes.net/blog/post/2008/02/26/Cropper-Patches.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.tnthughes.net/blog/syndication.axd?post=4bb01822-ad01-46b8-9b8f-f035e92da265</wfw:commentRss>
    </item>
  </channel>
</rss>