<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sunergeo Systems, Inc.</title>
	<atom:link href="http://www.sunergeosystems.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sunergeosystems.com</link>
	<description>Working Together.  Seamlessly.</description>
	<lastBuildDate>Wed, 21 Dec 2011 17:06:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Innovation Lacking?  Try FedEx Days&#8230;</title>
		<link>http://www.sunergeosystems.com/2011/12/12/innovation-lacking-try-fedex-days/</link>
		<comments>http://www.sunergeosystems.com/2011/12/12/innovation-lacking-try-fedex-days/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 17:05:09 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Motivational]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=111</guid>
		<description><![CDATA[Innovation &#8211; it&#8217;s the bread and butter of any tech-oriented company.  If you&#8217;re not doing it, your products, services, and ultimately your company are regressing.  Without innovation, you on the surest path there is to dinosaur state.  I&#8217;ve read a lot of things about what large companies do to foster innovation.  3M, for example, allows [...]]]></description>
			<content:encoded><![CDATA[<p>Innovation &#8211; it&#8217;s the bread and butter of any tech-oriented company.  If you&#8217;re not doing it, your products, services, and ultimately your company are regressing.  Without innovation, you on the surest path there is to dinosaur state.  I&#8217;ve read a lot of things about what large companies do to foster innovation.  3M, for example, allows employees to have every Friday to work on anything they want, regardless of whether it&#8217;s related to any current project.  <a title="FedEx Days at Atlassian" href="http://www.atlassian.com/fedex-day?utm_source=WAC&amp;utm_medium=banner&amp;utm_campaign=fedex-day&amp;utm_content=front-page" target="_blank">I recently came across another such innovation-fostering practice</a> being employed by a large scale software vendor called Atlassian.</p>
<p>The idea is quite simple, but very powerful.  Allow a select group of employees to participate in a competition for creating the most innovative feature.  The catch?  It must be fully shippable within 24 hours.  Hence, the term FedEx Days.  Very clever!  And from the results they report at Atlassian, far more than just clever.  They&#8217;ve been able to achieve some very sophisticated feature improvements based on this model.  Apparently, the combined elements of competition and a fixed time constraint are key ingredients to achieving that innovation spark that&#8217;s often missing on extended projects.</p>
<p>So, if your team is stuck in a rut, consider giving this approach a try.  You can offer real prizes (free beer, cash, trophies), benefits (additional vacation days, prime parking spot, name on the company newsletter), or just good old fashioned bragging rights.  Lots of potential here, and it doesn&#8217;t have to be expensive.</p>
<p>PS: For a great demonstration as to why this works, <a href="http://www.youtube.com/watch?v=u6XAPnuFjJc">check out this video</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/12/12/innovation-lacking-try-fedex-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Napoleon Hill and the Knowledge Economy</title>
		<link>http://www.sunergeosystems.com/2011/12/03/napoleon-hill-and-the-knowledge-economy/</link>
		<comments>http://www.sunergeosystems.com/2011/12/03/napoleon-hill-and-the-knowledge-economy/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 15:20:10 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Motivational]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=102</guid>
		<description><![CDATA[&#8220;He had never heard that more gold has been mined from the brains of men than has ever been taken from the earth.&#8221; This statement was made by Napoleon Hill in his seminal classic Think and Grow Rich, first published in 1937. What a timeless statement to describe the world in which we live today. [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;He had never heard that more gold has been mined from the brains of men than has ever been taken from the earth.&#8221; This statement was made by Napoleon Hill in his seminal classic <a href="http://www.amazon.com/gp/product/1612930298/ref=as_li_tf_tl?ie=UTF8&amp;tag=sunergeo04-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1612930298">Think and Grow Rich</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=sunergeo04-20&amp;l=as2&amp;o=1&amp;a=1612930298" alt="" width="1" height="1" border="0" />, first published in 1937. What a timeless statement to describe the world in which we live today. In Mr. Hill&#8217;s day, the Great Depression had just ravaged most of the U.S. economy a few short years prior to the publication of his book. Mr. Hill witnessed first-hand the abject destruction of unimaginable wealth, as thousands of businessmen lost everything they had worked for their entire lives. And yet, standing amidst the carnage wrought by this devastating calamity, Mr. Hill is able to hold out hope to all who will listen to him.</p>
<p>The hope which Mr. Hill so generously points out to the readers of his time is the same hope that is available to us today, despite persistently high unemployment, a stagnating  economy, and the ineffectiveness of governments around the world to do anything about the economic woes that continue to plague us.  What is this great hope?  It certainly is not government benefits.  It isn&#8217;t even better education or job training.  This hope consists of two key ingredients &#8211; DESIRE and FAITH.  And these ingredients are not restricted based on race, gender, color, creed, disability, age, or any other limiting factor of which we are prone to complain.  They are literally free to all.</p>
<p>Mr. Hill had no way of knowing how men like Steve Jobs or Bill Gates would transform the world.  These men, and others like them, generated literally billions of dollars in wealth for themselves and people all over the world from one simple raw material &#8211; the incomprehensible power of ideas.  And these are a just a couple of examples &#8211; volumes could be written containing the stories of thousands of others just like them.  Consider this question: Which has produced more wealth &#8211; the diamond mines of Africa, or the digital ecosystem that was created by the advent of the Internet?  It&#8217;s not even close!  Far from running out of resources, we stand on the shores of a vast digital ocean that has only begun to be explored, much less mastered.</p>
<p>So, the next time you are tempted to allow a little laziness to slip in and excuse it away by blaming the bad economy, remember this statement from Napoleon Hill.  And remember that others have faced far worse times than we, and not only overcame, but built tremendous fortunes and lasting legacies.  You are without excuse &#8211; the DESIRE and FAITH that empowered Andrew Carnegie to build his empire, or Henry Ford to build the V8, or Steve Jobs to revolutionize the way we consume media &#8211; these ingredients are freely available to you and I today.  Let&#8217;s settle it right now, and determine to tap into that vast resource of ideas.  The solutions to our worldwide economic woes are no further away than that grey matter between our ears.  Let&#8217;s get to work!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/12/03/napoleon-hill-and-the-knowledge-economy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Simple TDD Tutorial &#8211; Part IV</title>
		<link>http://www.sunergeosystems.com/2011/03/25/a-simple-tdd-tutorial-part-iv/</link>
		<comments>http://www.sunergeosystems.com/2011/03/25/a-simple-tdd-tutorial-part-iv/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 10:36:19 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=64</guid>
		<description><![CDATA[The name of my first test is IndexShouldThrowIfStartDateIsInvalid.  I am using convention to declare what I expect the test results to be.  It is very important that tests be this singularly focused.  I am not testing all the parameter validation at one time, since order depence can result in subtle bugs.  I&#8217;m also not simply [...]]]></description>
			<content:encoded><![CDATA[<p>The name of my first test is IndexShouldThrowIfStartDateIsInvalid.  I am using convention to declare what I expect the test results to be.  It is very important that tests be this singularly focused.  I am not testing all the parameter validation at one time, since order depence can result in subtle bugs.  I&#8217;m also not simply skipping input validation, assuming that it will be handled later.  I&#8217;m explicitly testing my input validation from the very beginning.  Once you get into the flow of doing this kind of testing, these tests only take a few minutes to write, but their benefits continue throughout the rest of the life of the project.</p>
<p>So, here is the finished code for this first test:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot9.png"><img class="alignnone size-full wp-image-67" title="tdd-screenshot9" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot9.png" alt="" width="755" height="117" /></a></p>
<p>Very, very simple!  Unit tests should not be too long.  If they are, then it&#8217;s probably because you&#8217;re testing too many things.  So, just as the test name implies, I&#8217;m feeding my controller bad data intentionally, and then checking the results of how my controller handles that data.  I expect to get an exception, so let&#8217;s look at the controller code:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot10.png"><img class="alignnone size-full wp-image-68" title="tdd-screenshot10" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot10.png" alt="" width="690" height="421" /></a></p>
<p>Since I know the MVC framework will handle creating a DateTime object from the data passed in via the query string using a parameter of the same name, I really only need to test whether or not a date was passed.  My controller logic requires a start date, and an end date, and the end date must be later than the start date.  So for this first condition, I check for an empty date.  If I received an empty date, I throw a special JsonException.  You can see that in the catch block for JsonException, I do the following:</p>
<ul>
<li>Log the exception &#8211; all exceptions should always be logged</li>
<li>Set the status code to be returned to the ajax call, letting the javascript know an exception occurred</li>
<li>Return a JsonResult view, containing the exception to be passed back to javascript</li>
</ul>
<p>I also include a default catch block to handle any unexpected exceptions in the same way.</p>
<p>With this done, my test will now run and pass.</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot11.png"><img class="alignnone size-full wp-image-69" title="tdd-screenshot11" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot11.png" alt="" width="417" height="429" /></a></p>
<p>That concludes one iteration of the process.  I can now check this code in!  It will not break the build, it&#8217;s legitimate (though incomplete) code.  Repeat this process for the remaining conditions, such as:</p>
<ul>
<li>Test the end date parameter</li>
<li>Test that start date and end date are correct with respect to each other (i.e. end date comes after start date)</li>
<li>Test that a valid logged in user initiated the request.</li>
</ul>
<p>After all of the tests for bad data conditions are finished, the last thing to do is write a test for the valid case.  With all of these steps completed, you now have a solid, reliable, repeatable way to test this controller.  When it comes time to refactor this controller, you can do so with confidence, knowing that this path through the code will always be exercised automatically when the code is checked in to the central repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/03/25/a-simple-tdd-tutorial-part-iv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Simple TDD Tutorial &#8211; Part III</title>
		<link>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-iii/</link>
		<comments>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-iii/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 14:17:58 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=54</guid>
		<description><![CDATA[Initializing the Test Conditions Most of my applications make use of the Repository pattern as the portal through which interaction with the data store occurs.   Using this approach, I can provide a standard access interface that allows my controller to make one call, and it doesn&#8217;t matter if it&#8217;s calling into a fake repository or [...]]]></description>
			<content:encoded><![CDATA[<h1>Initializing the Test Conditions</h1>
<p>Most of my applications make use of the Repository pattern as the portal through which interaction with the data store occurs.   Using this approach, I can provide a standard access interface that allows my controller to make one call, and it doesn&#8217;t matter if it&#8217;s calling into a fake repository or the live repository &#8211; the controller logic works the same in either case.  The beauty of this approach is it allows me to construct a fake repository in memory, which has several advantages:</p>
<ul>
<li>It is extremely fast</li>
<li>It is always initialized into a known state &#8211; I don&#8217;t have to write database setup/teardown code</li>
<li>I don&#8217;t even have to have access to the database</li>
</ul>
<p>So, with that said, my first step in making my test pass is to give it an instance of the fake repository, like so:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot5.png"><img class="alignnone size-full wp-image-56" title="tdd-screenshot5" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot5.png" alt="" width="453" height="169" /></a></p>
<p>I instantiate the fake repository in the Init call, so the repository is alway rebuilt prior to executing the test.  That way, if my test makes changes to the repository (i.e. inserts a record, changes a field, etc.) the repository is always returned to a known state before the next test begins.</p>
<p>The next step is to setup my controller to be tested.  Here is where the concept of mocking comes into play.</p>
<p>There is a lot of internal plumbing that is setup by IIS during the process of processing an HTTP request.  Objects such as HttpContext, cookies, etc. are all wired up before control is passed to your application for further processing.  This makes it very difficult to implement unit tests &#8211; at least it used to.  With the new MVC framework, Microsoft has completely reworked the IIS stack to make it possible to setup the entire environment outside of the web server.  There are a number of ways to do this, but the approach I&#8217;ve settled on utilizes a project called <a title="Rhino Mocks Home Page" href="http://hibernatingrhinos.com/open-source/rhino-mocks">Rhino Mocks</a>.  I have a static class called MockControllerBuilder, which takes care of instantiating my controller with all the surrounding plumbing mocked up and in place.  So, for the feature I&#8217;m developing right now, my next step is to expand MockControllerBuilder to provide a method for creating my new controller.  I do this by adding a new method to the class:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot7.png"><img class="alignnone size-full wp-image-57" title="tdd-screenshot7" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot7.png" alt="" width="824" height="208" /></a></p>
<p>The highlighted red code indicates that I don&#8217;t yet have a TransactionJsonController class, so I&#8217;ll create that next.</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot6.png"><img class="alignnone size-full wp-image-58" title="tdd-screenshot6" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot6.png" alt="" width="590" /></a></p>
<p>Notice that this controller (as all controllers following this pattern) has two constructors.  One is the default constructor (no arguments) used by the MVC framework to instantiate my controller during the processing of a live HTTP request.  The other constructor is used by the test framework, and it utilizes a pattern known as Dependency Injection to pass in an instance of my fake repository.</p>
<p>My last step to complete the setup is to use the mock controller builder to create an instance of my controller, like this:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot8.png"><img class="alignnone size-full wp-image-59" title="tdd-screenshot8" src="http://www.sunergeosystems.com/wp-content/uploads/2011/03/tdd-screenshot8.png" alt="" width="894" height="282" /></a></p>
<p>The CreateTransactionJsonController method takes two arguments &#8211; an instance of the fake repository, and a profile (or null).  By passing in a profile, I am simulating which user is logged in as the controller processes the request.  If you look at the fake repository for the instance of the UserProfile with username sbradley@trustecx.com, you will see that this user has been assigned the &#8220;Admin&#8221; role, so this test will execute as though an Admin user is logged in.  By doing this, the unit tests can be constructed to execute under the authorization parameters of various user accounts.</p>
<p>With this done, the test setup is complete.  Now I move on to <a title="A Simple TDD Tutorial – Part IV" href="http://www.sunergeosystems.com/archives/64">setting up expectations</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DBML and ConnectionString Pitfall</title>
		<link>http://www.sunergeosystems.com/2011/03/23/dbml-and-connectionstring-pitfall/</link>
		<comments>http://www.sunergeosystems.com/2011/03/23/dbml-and-connectionstring-pitfall/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 08:15:00 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=132</guid>
		<description><![CDATA[This one bit me good, and cost quite a bit of time before I figured it out. Therefore, I thought it best to document my findings in case it comes up again. The Issue As with many bugs, the behavior didn’t show up until the application was deployed – it worked fine in the development [...]]]></description>
			<content:encoded><![CDATA[<p>This one bit me good, and cost quite a bit of time before I figured it out. Therefore, I thought it best to document my findings in case it comes up again.</p>
<h1>The Issue</h1>
<p>As with many bugs, the behavior didn’t show up until the application was deployed – it worked fine in the development environment. My app uses Linq-to-SQL, and includes an IDE-generated DBML file to interface with my database. The app was connecting to my local database just fine. However, when the app was deployed, and all the changes to the connection string in the web.config file were updated, the connection to the database failed with the error “A network-related or instance-specific error occurred while establishing a connection to SQL Server”. What??</p>
<h1>The Solution</h1>
<p>After digging and googling, I discovered something about the IDE behavior when it comes to Linq-to-SQL and DBML generation. When the DBML file is first created, the IDE inserts an entry in the Settings.settings file, which contains the full connection string details. Since this connection string matches the settings in my web.config and the app.config for my local projects, everything works fine. The problem is masked by the fact that both the settings file entry and the config file entries are the same. So, to fix this requires first changing the settings on the DBML file to not use the connection string in the Settings.settings file.</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/ecx-blog-screen-shot-1-1024x6291.png"><img class="size-full wp-image-134 alignleft" title="ecx-blog-screen-shot-1-1024x629" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/ecx-blog-screen-shot-1-1024x6291.png" alt="" width="1024" height="629" /></a></p>
<p>After that, the constructor for the repository needs to be updated to use the configuration manager to pull in the connection string from the config file, like this:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/ecx-blog-screen-shot-2.png"><img class="size-full wp-image-135 alignleft" title="ecx-blog-screen-shot-2" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/ecx-blog-screen-shot-2.png" alt="" width="916" height="168" /></a></p>
<p>Once this is done, the app will pull in the connection string from the config file, and no more error!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/03/23/dbml-and-connectionstring-pitfall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Simple TDD Tutorial &#8211; Part II</title>
		<link>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-ii/</link>
		<comments>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-ii/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 08:11:33 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=45</guid>
		<description><![CDATA[Writing a Test To begin, I open up the solution and locate the unit test project.  It should look like this: Since I will be writing a json controller eventually, I will start by creating a new item in the JsonControllerTests folder, called TransactionJsonControllerTests.cs.  This class will hold all of my tests for transactions.  To [...]]]></description>
			<content:encoded><![CDATA[<h1>Writing a Test</h1>
<p>To begin, I open up the solution and locate the unit test project.  It should look like this:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot2.png"><img class="alignnone size-full wp-image-46" title="tdd-screenshot2" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot2.png" alt="" width="435" height="747" /></a></p>
<p>Since I will be writing a json controller eventually, I will start by creating a new item in the JsonControllerTests folder, called TransactionJsonControllerTests.cs.  This class will hold all of my tests for transactions.  To start with, the test class is minimal, so it looks like this:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot31.png"><img class="alignnone size-full wp-image-48" title="tdd-screenshot3" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot31.png" alt="" width="746" height="430" /></a></p>
<p>One of the basic tenants of Test Driven Design is that the test should always fail first.  Write the test, make it fail, make it pass, repeat.  This example is a little silly in its extreme, but it makes the point &#8211; this test will fail when it is run.  The reason for doing this is to avoid the subtle bugs that creep in when tests pass because the <strong>test</strong> is not written correctly.  It helps to avoid the error of false positives.</p>
<p>Now, when I run the test, I get:</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot4.png"><img class="alignnone size-full wp-image-49" title="tdd-screenshot4" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot4.png" alt="" width="574" height="428" /></a></p>
<p>I see that indeed, my test did fail.  Ordinarily, this process would have taken less than two minutes, and I am setup on a solid path with the knowledge that my code will be thoroughly tested in a repeatable manner.  My thought process has been very focused, and I&#8217;ve not wasted any time on ancillary issues that may or may not come up during the rest of the development of this feature.  The key is to focus on the simplest aspect of the feature, write the test, make it fail, make it pass.  Now I move on to <a title="A Simple TDD Tutorial – Part III" href="http://www.sunergeosystems.com/archives/54">initializing the test conditions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/03/23/a-simple-tdd-tutorial-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Simple TDD Tutorial</title>
		<link>http://www.sunergeosystems.com/2011/03/22/a-simple-tdd-tutorial/</link>
		<comments>http://www.sunergeosystems.com/2011/03/22/a-simple-tdd-tutorial/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 00:15:40 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=37</guid>
		<description><![CDATA[Recently, I needed to describe to some of our overseas developers the concepts of test driven development (TDD).  After several unsuccessful attempts via email, I decided the simplest way would be a straightforward tutorial, taken directly from the project that was under development at the time.  I have decided to re-post the entire tutorial here, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I needed to describe to some of our overseas developers the concepts of test driven development (TDD).  After several unsuccessful attempts via email, I decided the simplest way would be a straightforward tutorial, taken directly from the project that was under development at the time.  I have decided to re-post the entire tutorial here, in case it may benefit someone else.</p>
<h1>Basic Test Driven Development</h1>
<p>For this tutorial, I am going to implement the ajax controller that provides the summary of transactions by member for the current month.</p>
<p><a href="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot11.png"><img class="alignnone size-full wp-image-40" title="tdd-screenshot1" src="http://www.sunergeosystems.com/wp-content/uploads/2011/12/tdd-screenshot11.png" alt="TDD Tutorial Screenshot 1" width="590" /></a></p>
<p>From the preceding screenshot, Firebug tells me that the URL localhost/TransactionJson/Transactions does not exist.  So, you might expect we would start by implementing this URL.  But that would not by the TDD way!  No, instead, I will start with <a title="A Simple TDD Tutorial – Part II" href="http://www.sunergeosystems.com/archives/45">writing a test</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2011/03/22/a-simple-tdd-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why &#8220;git fetch&#8221; beats &#8220;git pull&#8221;</title>
		<link>http://www.sunergeosystems.com/2010/01/08/32/</link>
		<comments>http://www.sunergeosystems.com/2010/01/08/32/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 15:08:17 +0000</pubDate>
		<dc:creator>Shawn Bradley</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.sunergeosystems.com/?p=32</guid>
		<description><![CDATA[Here is an excellent post addressing some common issues you may encounter when working with remote branches in git.  The author provides a particularly helpful explanation for why it is a good idea not to use &#8220;git pull&#8221;, but rather use &#8220;git fetch&#8221; and then merge the changes into your working tree as a separate [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an <a href="http://longair.net/blog/2009/04/16/git-fetch-and-merge/">excellent post</a> addressing some common issues you may encounter when working with remote branches in git.  The author provides a particularly helpful explanation for why it is a good idea not to use &#8220;git pull&#8221;, but rather use &#8220;git fetch&#8221; and then merge the changes into your working tree as a separate step.  This is particularly helpful in my case, where I am working with a distributed team of developers, some of which are located in a foreign country.  By fetching their changes first, examining the changes, and then merging them into my working tree, I can catch errors and bad code before it becomes a part of the code base.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sunergeosystems.com/2010/01/08/32/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

