<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Early and Often</title>
	<atom:link href="http://earlyandoften.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://earlyandoften.wordpress.com</link>
	<description>Mike McGarr&#039;s weblog on Java, Groovy/Grails, Agile Engineering and maybe some golf...</description>
	<lastBuildDate>Fri, 27 Jan 2012 20:21:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='earlyandoften.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/e34a5bfc550cd8709bbeaef5033de031?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Early and Often</title>
		<link>http://earlyandoften.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://earlyandoften.wordpress.com/osd.xml" title="Early and Often" />
	<atom:link rel='hub' href='http://earlyandoften.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Interactive presentations with impress.js + GitHub Pages</title>
		<link>http://earlyandoften.wordpress.com/2012/01/16/impress_js_github/</link>
		<comments>http://earlyandoften.wordpress.com/2012/01/16/impress_js_github/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 04:01:16 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[github pages]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[impress.js]]></category>
		<category><![CDATA[mcjug]]></category>
		<category><![CDATA[prezi]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[showoff]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=963</guid>
		<description><![CDATA[Next month, I am giving a follow-up of my Continuous Delivery talk to the Montgomery County Java User&#8217;s Group.  In preparing for this talk, I decided that challenge myself by using a presentation tool other than PowerPoint.  In fact, I decided to avoid any desktop variant and try some of the next generation web-based presentation [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=963&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Next month, I am giving a follow-up of my <a title="Continuous Delivery Talk" href="http://earlyandoften.wordpress.com/2011/06/17/cd-at-mcjug/" target="_blank">Continuous Delivery talk</a> to the <a title="MCJUG" href="http://www.mcjug.org/" target="_blank">Montgomery County Java User&#8217;s Group</a>.  In preparing for this talk, I decided that challenge myself by using a presentation tool other than PowerPoint.  In fact, I decided to avoid any desktop variant and try some of the next generation web-based presentation tools.</p>
<p>I first considered <a title="Showoff" href="https://github.com/schacon/showoff" target="_blank"><img class="alignright" src="http://www.ruby-lang.org/images/logo.gif" alt="" width="186" height="67" />Showoff</a>, a nice framework for building presentations in HTML (running on <a title="Ruby" href="http://www.ruby-lang.org/" target="_blank">Ruby</a>/<a title="Sinatra" href="http://www.sinatrarb.com/" target="_blank">Sinatra</a>).  This tool is hot in the developer community right now.  Since it is a running application, it depends on deploying to hosting provider like <a title="Heroku" href="http://www.heroku.com/" target="_blank">Heroku</a>.  It does have a nice simple markdown for capturing content and I would consider using it in the future.</p>
<p><img class="alignleft" src="http://www.w3.org/html/logo/downloads/HTML5_Logo_512.png" alt="" width="88" height="88" /><a title="HTML5 Slides" href="http://slides.html5rocks.com/#landing-slide" target="_blank">HTML5 Slides</a> is more of a demonstration on how you can use <a title="HTML5" href="http://en.wikipedia.org/wiki/HTML5" target="_blank">HTML5</a>/<a title="CSS3" href="http://www.css3.info/" target="_blank">CSS3</a>&#8216;s features to build web-based slide shows.  I considered this option as a way to learn more about HTML5.  The pages still need to hosted somewhere, and <a title="AWS S3" href="http://aws.amazon.com/s3/" target="_blank">AWS S3</a> would be the perfect location.</p>
<p><a title="Prezi" href="http://prezi.com/" target="_blank"><img class="alignright" src="http://upload.wikimedia.org/wikipedia/en/c/cd/Prezi_logo.jpg" alt="" width="169" height="68" />Prezi.com</a> is a service for building Flash-based presentations that break the convention of slides.  With Prezi.com, you can build dynamic visual presentations where the camera moves about on a page.  Public presentations are hosted for free, but you would have to pay for private presentations.  While Prezi <del datetime="2012-01-17T02:33:17+00:00">does</del> did offer a unique presentation style, I didn&#8217;t feel the platform (Flash-based) fit my needs.</p>
<p>In the end, I chose <a title="impress.js" href="https://github.com/bartaz/impress.js" target="_blank">impress.js</a>, as it seemed to be the best of all solutions.  Impress.js is essentially an HTML5 presentation framework that enables you to build Prezi.com like presentations. (thanks to <a title="MattMakai.com" href="http://www.mattmakai.com/" target="_blank">Matt Makai</a> for pointing this tool out)  You build your presentations in html (div = slide) and using tags and css, you can manipulate size, position, scale and even animation within your slide.  It is also the newest tool on the scene and seems promising.  By building my presentation in impress.js, I will be forced to beef up my front-end skills, which have been lacking as of late.</p>
<p>I also discovered that impress.js presentations can easily be hosted on <a title="GitHub" href="https://github.com/" target="_blank">GitHub</a> using <a title="GitHub Pages" href="http://pages.github.com/" target="_blank">GitHub Pages</a>.  Since my presentation is just a web page, all I have to do is push my changes to the <em>gh-pages</em> branch of my GitHub repository and wait for the site to be displayed.  GitHub will deploy the website using a url following this convention:</p>
<blockquote><p>http://${username}.github.com/${repositoryname}</p></blockquote>
<p>Github Pages works for private repositories as well, and all you need to do to enable it is create the <em>gh-pages</em> branch.  Having my presentation displayed directly from version control with a simple url makes the process simple to manage.  Updates to the latest version are a git add, commit, push away.</p>
<p>Since I am just starting down this road, I may have some further feedback on how these tools work out, but so far, the presentation is looking great!  If interested in any or all of these presentation technologies, here are some sample presentations:</p>
<ul>
<li><a title="TDD your CLI presentation" href="http://tdd-ruby-cli.heroku.com/#1" target="_blank">TDD your CLI</a> by <a title="Dave Copeland's website" href="http://www.naildrivin5.com/" target="_blank">Dave Copeland</a> (showoff)</li>
<li><a title="HTML5 Slides" href="http://slides.html5rocks.com/#landing-slide" target="_blank">HTML5 Demo Slides</a> at <a title="HTML5 Rocks " href="http://www.html5rocks.com/en/" target="_blank">HTML5Rocks</a> (HTML5 slides)</li>
<li><a title="Coca Cola Company Presentation" href="http://prezi.com/ftv9hvziwqi2/coca-cola-company/" target="_blank">Coca Cola Company</a> (Prezi.com)</li>
<li><a title="12412.org Presentation" href="http://extra.12412.org/digibury/#/title" target="_blank">12412.org Presentation</a> (impress.js)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/963/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=963&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2012/01/16/impress_js_github/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>

		<media:content url="http://www.ruby-lang.org/images/logo.gif" medium="image" />

		<media:content url="http://www.w3.org/html/logo/downloads/HTML5_Logo_512.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/en/c/cd/Prezi_logo.jpg" medium="image" />
	</item>
		<item>
		<title>Jenkins and GitHub: Integration</title>
		<link>http://earlyandoften.wordpress.com/2011/12/30/jenkins-github-int/</link>
		<comments>http://earlyandoften.wordpress.com/2011/12/30/jenkins-github-int/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 04:08:36 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=946</guid>
		<description><![CDATA[I&#8217;ve been trying to setup a Jenkins build of a private GitHub project recently and found it wasn&#8217;t as straight forward as I thought.  GitHub provides a feature called Deploy Keys, which are SSH keys used to authenticate servers to your GitHub repository.  Here&#8217;s how I set them up. On your Jenkins server, generate a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=946&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to setup a <a title="Jenkins CI Server" href="http://jenkins-ci.org/" target="_blank">Jenkins</a> build of a private <a title="GitHub" href="https://github.com/" target="_blank">GitHub</a> project recently and found it wasn&#8217;t as straight forward as I thought.  GitHub provides a feature called <a title="Github's Deploy Keys" href="http://help.github.com/deploy-keys/" target="_blank">Deploy Keys</a>, which are SSH keys used to authenticate servers to your GitHub repository.  Here&#8217;s how I set them up.</p>
<ol>
<li>On your Jenkins server, generate a new SSH key if you don&#8217;t already have one.  (Make sure you are logged in as the user that Jenkins runs as): ssh-keygen -t rsa</li>
<li>Log into your GitHub project and click the project&#8217;s admin button.</li>
<li>Click the Deploy Keys link and add a new key.</li>
<li>Copy the contents of the public key you just generated (id_rsa.pub) into the GitHub Deploy Keys field.</li>
</ol>
<p>That&#8217;s it!  Now, using the <a title="Jenkins Git Plugin" href="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin" target="_blank">Jenkins Git plugin</a>, you can point your Jenkins Build Job at your GitHub repository and it should authenticate just fine.</p>
<p>This will only work for one repository.  GitHub requires that your Deploy Keys be unique among your repositories.  Ideally, you should be able to create multiple SSH keys on your Jenkins server, but I had trouble getting this to work.  What I ended up doing instead was <a title="Git Setup" href="http://help.github.com/mac-set-up-git/" target="_blank">adding the SSH public key</a> to my <a title="Mike McGarr's GitHub account" href="https://github.com/jmcgarr" target="_blank">GitHub user account</a>.  This allows Jenkins build access to any of the private repositories I create.</p>
<p>I would ideally like to get the<a title="Jenkins GitHub Plugin" href="https://wiki.jenkins-ci.org/display/JENKINS/Github+Plugin" target="_blank"> Jenkins GitHub plugin</a> working, but after a 10 minute test, I stuck with my current setup so that I can move on to the next problem.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/946/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=946&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/12/30/jenkins-github-int/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency Management in .NET</title>
		<link>http://earlyandoften.wordpress.com/2011/12/17/dependency-management-in-net/</link>
		<comments>http://earlyandoften.wordpress.com/2011/12/17/dependency-management-in-net/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 00:28:10 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[dependency management]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Nuget]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=930</guid>
		<description><![CDATA[I have been a Java developer for over 10 years, during which I have used Maven or one of it&#8217;s successors (Gradle or Ant+Ivy) for build and dependency management.  It was obvious to me early on that Maven&#8217;s dependency management was its killer feature.  I began evangelizing Maven and converting teams to use it.  The days of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=930&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been a <a title="Java" href="http://www.oracle.com/technetwork/java/javase/overview/index.html" target="_blank">Java</a> developer for over 10 years, during which I have used <a title="Maven" href="http://maven.apache.org/" target="_blank">Maven</a> or one of it&#8217;s successors (<a title="Gradle" href="http://gradle.org/" target="_blank">Gradle</a> or <a title="Ant" href="http://ant.apache.org/" target="_blank">Ant</a>+<a title="Apache Ivy" href="http://ant.apache.org/ivy/" target="_blank">Ivy</a>) for build and dependency management.  It was obvious to me early on that Maven&#8217;s <a title="Dependency Management" href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html" target="_blank">dependency management</a> was its killer feature.  I began evangelizing Maven and converting teams to use it.  The days of checking .jar files into version control were over, and I rejoiced!</p>
<p>Six months ago, I started coaching a number of <a title="Microsoft .NET" href="http://www.microsoft.com/net" target="_blank">.NET</a> development teams on Agile Engineering best practices.  This was an eye-opening experience for me and I learned a lot about .NET.  While there were some bright spots, namely <a title="C Sharp, the programming Language" href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)" target="_blank">C#</a>, I was surprised how .NET seemed to be lacking in certain areas that were fairly mature in the Java community.  The most notable omision was the lack of a dependency management framework for .NET.</p>
<p>After my experiences with these teams, and discussing this problem with other .NET experts, I have come to realize that the standard practice is to check in .dlls to version control.  I was appalled.  When coaching teams on conduct unit testing, build automation, and continuous integration, I found the lack of a proper dependency management solution to be a huge problem.  Adding .dll&#8217;s to version control works ok for third-party libraries, but when I want to consume a &#8220;working&#8221; version of another team&#8217;s code as they change it, this becomes a burden that Maven solved gracefully.</p>
<p>I then discovered <a title="NuGet" href="http://nuget.codeplex.com/" target="_blank">NuGet</a>, and hope returned.  NuGet is a .NET open source project that&#8217;s sole purpose is dependency management in .NET.  Yes, just what the agile engineering coach ordered.  Right?  Wrong.  NuGet, while a promising project, is still young and lacks numerous dependency management features.  NuGet was originally designed as a <a title="Microsoft Visual Studio IDE" href="http://msdn.microsoft.com/en-us/vstudio/aa718325" target="_blank">Visual Studio</a> extension for allowing developers to search for, download and add libraries to their solution.  Developers would then check in the .dlls to version control.  What!?  Isn&#8217;t this what we are trying to avoid?</p>
<p>In reading the forums (<a title="Snapshot Functionality in NuGet" href="http://nuget.codeplex.com/discussions/238169" target="_blank">here</a>, <a title="NuGet for Large Teams" href="http://nuget.codeplex.com/discussions/268636" target="_blank">here</a>, <a title="NuGet Request" href="http://nuget.codeplex.com/discussions/268100" target="_blank">here</a>, and <a title="NuGet for Setup only" href="http://nuget.codeplex.com/discussions/236592" target="_blank">here</a>), it appears that users where complaining that NuGet wasn&#8217;t doing enough dependency management.  In fact the project organizers were hesitant to add Maven-style dependency management.  &#8221;We need NuGet to support continuous integration!&#8221;, the community cried.  Well thankfully, NuGet is an open source project and the features for restoring dependencies has been added to the <a title="NuGet 1.6 Release Notes" href="http://docs.nuget.org/docs/release-notes/nuget-1.6" target="_blank">1.6 release</a>.  With this release, you Nuget can be setup to restore packages that haven&#8217;t been checked in, as well as support for &#8220;beta&#8221; releases.  For me, this change is still half cocked and fails to establish the benefits that Maven provided years ago.</p>
<p>NuGet is a promising young project and I hope that it will continue to grow and do well.  The .NET community desperately needs it to grow up fast and support more features.  In the spirit of open source development, I have done my part to support the project by submitting <a title="NuGet Bug Report" href="http://nuget.codeplex.com/workitem/1780" target="_blank">a bug report</a>.  I wish the Nuget team, as well as the rest of the .NET community the best of luck.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/930/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=930&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/12/17/dependency-management-in-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Gotcha when changing TeamCity&#8217;s default port</title>
		<link>http://earlyandoften.wordpress.com/2011/11/17/teamcity-port/</link>
		<comments>http://earlyandoften.wordpress.com/2011/11/17/teamcity-port/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 16:09:28 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[teamcity]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=899</guid>
		<description><![CDATA[I ran into an issue today where I changed my TeamCity default port (from 8080) and found that my build agents were suddenly disconnected.  After some fiddling around, I discovered that I needed to manually change each Build Agent&#8217;s configuration to point to the new master server port. To make this change, open up the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=899&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I ran into an issue today where I changed my <a title="StackOverflow on changing TeamCity's default port" href="http://stackoverflow.com/questions/2387375/teamcity-change-port-for-web-server" target="_blank">TeamCity default port (from 8080)</a> and found that my build agents were suddenly disconnected.  After some fiddling around, I discovered that I needed to manually change each Build Agent&#8217;s configuration to point to the new master server port.</p>
<p>To make this change, open up the $TEAMCITY_HOME/buildAgent/conf/buildAgent.properties file and update the following value:</p>
<p><pre class="brush: plain;">

serverUrl=http:\://localhost\:8080

</pre></p>
<p>In this case, the agent is running on the same server as the master server.  Once you restart the build agent, the master server recognizes the agent as back online.  Hope this helps.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/899/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/899/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/899/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=899&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/11/17/teamcity-port/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Exploring Test Method Names</title>
		<link>http://earlyandoften.wordpress.com/2011/11/10/test-method-names/</link>
		<comments>http://earlyandoften.wordpress.com/2011/11/10/test-method-names/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 13:20:02 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agiledox]]></category>
		<category><![CDATA[art of unit testing]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=825</guid>
		<description><![CDATA[When coaching individuals on how to name unit test methods, I have struggled to come up with a standard that I like.  I have read numerous posts and books on the subject with a wide variety of results and standards.  In this blog I will explore the various standards for naming unit test methods and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=825&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When coaching individuals on how to name unit test methods, I have struggled to come up with a standard that I like.  I have read numerous posts and books on the subject with a wide variety of results and standards.  In this blog I will explore the various standards for naming unit test methods and present my perspective on the subject.</p>
<p>Prior to discussing unit test methods, I want to mention that the naming conventions for unit test <em>classes</em> are fairly well solidified.  I will assume that everybody will using the following naming convention for their unit test classes:</p>
<blockquote><p>[NameOfClassUnderTest]Test</p></blockquote>
<p>Some conventions specify that the &#8216;Test&#8217; postfix be &#8216;Tests&#8217;.  I personally don&#8217;t care about the difference between the two, so long as your team uses one or the other and not both.</p>
<p><strong>JUnit</strong></p>
<p><a title="JUnit" href="http://www.junit.org/" target="_blank">JUnit</a> is one of the first unit testing frameworks and one could argue is responsible for the explosion of unit testing over the past ten years.  In previous versions of JUnit, it was necessary that the name of the unit test method be prefixed with <strong>test</strong>.  This was how the JUnit runner identified unit test methods.  So a unit test method name might look like this:</p>
<p><pre class="brush: java;">

public void testAddingTwoNumbers();

</pre></p>
<p>This framework limitation unit test method name was overcome in JUnit 4.  In JUnit 4, it is possible to use <a title="Java 5 Annotations" href="http://download.oracle.com/javase/1,5.0/docs/guide/language/annotations.html" target="_blank">Java 5&#8242;s annotations</a> to tag a method as a test method.</p>
<p><pre class="brush: java;">

@Test public void addingTwoNumbers();

</pre></p>
<p>Most modern test frameworks no longer force developers to prefix the test method name with the word test.  I prefer to avoid frameworks that impose this convention, but there are <a title="Grails unit testing" href="http://grails.org/doc/latest/guide/9.%20Testing.html" target="_blank">exceptions</a>.</p>
<p><strong>The Art of Unit Testing</strong></p>
<p><a title="Roy Osherove" href="http://osherove.com/blog" target="_blank">Roy Osherove</a> wrote a great book on unit testing called <a title="The Art of Unit Testing" href="http://artofunittesting.com/" target="_blank">the Art of Unit Testing</a>.  While this book was focused on <a title="Microsoft .NET" href="http://en.wikipedia.org/wiki/.NET_Framework" target="_blank">.NET</a> testing approaches, there is a lot of good recommendations there applicable to all developers, and I would recommend it.</p>
<p>In this book (as well as his <a title="Roy's Naming standards" href="http://osherove.com/blog/2005/4/3/naming-standards-for-unit-tests.html" target="_blank">blog</a>), Roy recommends a unit test method naming convention that uses the following pattern:</p>
<blockquote><p>[MethodName_StateUnderTest_ExpectedBehavior]</p></blockquote>
<p>While I appreciate how comprehensive this standard is, I don&#8217;t personally subscribe to this approach.  I find that this approach doesn&#8217;t put enough emphasis on the overall behavior of the class under test, but rather inputs and outputs of methods on the class.  When applying TDD, I find that I think more about behavior than I do inputs/outputs.</p>
<p><strong>Introducing BDD</strong></p>
<p>Dan North introduced Behavior Driven Development, or BDD in 2006 with an article in Better Software magazine (which you can read <a title="Dan North introducing BDD" href="http://dannorth.net/introducing-bdd/" target="_blank">here</a>).  In this article, Dan discusses the series of revelations he had regarding unit test naming conventions before he came across BDD&#8217;s Given When Then convention.  I am not going to go over BDD here, but I definitely recommend reading this article.</p>
<p>While I personally love BDD and feel it is extremely valuable in defining human readable tests, I feel it aligns much better with acceptance testing than unit testing.  What peaked my interest in this article was some of the intermediate steps Dan made on his way to BDD, namely &#8220;test method names should be sentences&#8221;.  He references a friend&#8217;s open source project <a title="AgileDox" href="http://agiledox.sourceforge.net/" target="_blank">agiledox</a> that turned a unit test class into a document describing what the class does.  For instance, given this unit test class:</p>
<p><pre class="brush: java;">
 public class CalculatorTest {
     @Test public void addsTwoNumbers () {...}
     @Test public void subtractNumberFromAnother () {...}
     @Test public void multipliesTwoNumbers () {...}
     @Test public void dividesTwoNumbers () {...}
 }
</pre></p>
<p>Agiledox would produce documentation for the class that would look like this:</p>
<blockquote><p>Calculator</p>
<p>- adds two numbers</p>
<p>- subtracts number from another</p>
<p>- multiplies two numbers</p>
<p>- divides two numbers</p></blockquote>
<p><strong></strong>This was an aha moment for me.  While I have never used agiledox, I found this convention and approach to be extremely simple and easy.  The unit test names now provide a description of the behavior of the class under test.  When I write unit test methods, I imagine these agiledox style sentences being laid out, as a sanity check.</p>
<p><strong>Focus on Behavior</strong></p>
<p>For me, the best unit test name should be focused on a particular behavior of the class under test.  How you word the test name is up to you, so long as you focus on behavior.  You should make sure to include exception cases in this definition of the behavior as well.</p>
<p>Another nice side effect of this focus on behavior is it makes it easier to assess whether or not the class under test is violating the <a title="SRP Wikipedia page" href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank">Single Responsibility Principle (SRP)</a>.  By quickly looking through the feature list, provided by unit test names, you can determine whether or not the class is doing too much and should be broken up into collaborating objects.</p>
<p><strong>Side Note: Method Names in Groovy</strong></p>
<p>Since Groovy allows method names to be strings, this allows you to write a unit test method that looks like this:</p>
<p><pre class="brush: groovy;">
class CalculatorTest {
   @Test void &quot;adds two numbers&quot;() {...}
   @Test void &quot;subtracts a number from another&quot;() {...}
   @Test void &quot;multiplies two numbers&quot;() {...}
   @Test void &quot;divides two numbers&quot;() {...}
}
</pre></p>
<p>This allows you to write true sentences without the need for a tool like agiledox to break up the camel case. Another compelling reason to use Groovy for unit testing Java.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/825/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/825/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/825/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=825&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/11/10/test-method-names/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Grails Best Practice Resources</title>
		<link>http://earlyandoften.wordpress.com/2011/10/11/grails-best-practice-resources/</link>
		<comments>http://earlyandoften.wordpress.com/2011/10/11/grails-best-practice-resources/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 21:15:27 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=863</guid>
		<description><![CDATA[I have been spending some time learning Groovy and Grails recently.  As a Java developer, I find that they answer many of the problems that currently exist in the Java platform (and the .NET platform as well).  They provide an amazing, and Agile toolkit for developers to get started with. I have also found some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=863&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been spending some time learning <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a> and <a href="http://grails.org/" target="_blank">Grails</a> recently.  As a Java developer, I find that they answer many of the problems that currently exist in the Java platform (and the .NET platform as well).  They provide an amazing, and Agile toolkit for developers to get started with.</p>
<p>I have also found some interesting resources on Grails best practices that I would like to share.</p>
<ul>
<li><a href="http://www.grailspodcast.com/blog/id/249" target="_blank">Grails Podcast &#8211; episode 127</a></li>
<li><a href="http://weblog.dangertree.net/2008/11/22/grails-package-naming/" target="_blank">Grails Package Naming (dangertree techblog)</a></li>
<li><a href="http://stackoverflow.com/questions/6226759/best-practices-to-be-followed-while-developing-grails-application" target="_blank">Grails Best Practice discussion on StackOverflow.com</a></li>
<li><a href="http://martinfowler.com/bliki/AnemicDomainModel.html" target="_blank">Martin Fowler on Anemic Domain Model</a> &#8211; not directly about Grails, but food for thought when talking about Domain object design</li>
</ul>
<div>As a Java developer, many of your instincts might be wrong, so it is definitely worth taking a look at these when starting with Grails.  I will likely post more as time goes on.  I hope that these resources were helpful.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/863/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/863/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/863/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=863&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/10/11/grails-best-practice-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>GitFlow and Continuous Integration</title>
		<link>http://earlyandoften.wordpress.com/2011/09/14/dvcs-ci/</link>
		<comments>http://earlyandoften.wordpress.com/2011/09/14/dvcs-ci/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 10:30:20 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[artifactory]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitflow]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=838</guid>
		<description><![CDATA[I came across an interesting blog post by James Carr discussing his workflow when building Java applications.  In general, I think that the stack and process he mentions is top notch.  I love Gradle, Jenkins, Artifactory and Git/GitHub.  I have been playing with or using in production all of these tools and they are amazing. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=838&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across an <a title="James Carr - My Current Java Workflow" href="http://blog.james-carr.org/2011/09/09/my-current-java-workflow/" target="_blank">interesting blog post</a> by James Carr discussing his workflow when building Java applications.  In general, I think that the stack and process he mentions is top notch.  I love <a title="Gradle" href="http://www.gradle.org/" target="_blank">Gradle</a>, <a title="Jenkins" href="http://jenkins-ci.org/" target="_blank">Jenkins</a>, <a title="Artifactory" href="http://www.jfrog.com/products.php" target="_blank">Artifactory</a> and <a title="Git" href="http://git-scm.com/" target="_blank">Git</a>/<a title="GitHub" href="https://github.com/" target="_blank">GitHub</a>.  I have been playing with or using in production all of these tools and they are amazing.  I especially like how the article provides a tutorial on how to setup your project to look just like his, something I will definitely try.</p>
<p>Where the article raised questions for me was when James started talking about <a title="GitFlow" href="https://github.com/nvie/gitflow" target="_blank">GitFlow</a> and Vincent Driessen&#8217;s <a title="Vincent Driessen's Git Branching Model" href="http://nvie.com/posts/a-successful-git-branching-model/" target="_blank">Git Branching Model</a>.  If you haven&#8217;t read this article, I recommend you stop and go read it now.</p>
<p>Vincent&#8217;s approach to using Git takes full advantage of a major feature provided in DVCS, <a title="Why git is better than X - Cheap Local Branching" href="http://whygitisbetterthanx.com/#cheap-local-branching" target="_blank">cheap local branching</a>.  As an advocate of <a title="Continuous Integration" href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">continuous integration</a> however, I have always recommended that one should avoid the approach of excessive branching.  One of the principle practices of continuous integration is:</p>
<blockquote><p>Everyone commits to the mainline everyday</p></blockquote>
<p>Martin Fowler goes on to say,</p>
<blockquote><p>&#8220;In practice it&#8217;s often useful if developers commit more frequently than that. The more frequently you commit, the less places you have to look for conflict errors, and the more rapidly you fix conflicts.&#8221;</p></blockquote>
<p>So taking this a basic rule of thumb, does Vincent&#8217;s branching model conflict with continuous integration?  The short answer is no, so long as the developers are only branching locally and are pushing their changes to <em>origin</em> (the centralized git repository) daily.</p>
<p>In Vincent&#8217;s approach however, he says</p>
<blockquote><p>&#8220;But besides the centralized push-pull relationships, each developer may also pull changes from other peers to form sub teams. For example, this might be useful to work together with two or more developers on a big new feature, before pushing the work in progress to <code>origin</code> prematurely.&#8221;</p></blockquote>
<p>This is an approach to feature branching Martin Fowler calls <a title="Martin Fowler on Feature Branching " href="http://martinfowler.com/bliki/FeatureBranch.html" target="_blank">Promiscuous Integration</a>.  Martin Fowler attempts to assess whether the concept of promiscuous integration is a good idea or not.  I recommend you read the article yourself, but he ends up saying he thinks it&#8217;s not the best idea (but doesn&#8217;t outright say don&#8217;t do it).  He recommends using <a title="Feature Toggles" href="http://martinfowler.com/bliki/FeatureToggle.html" target="_blank">Feature Toggles</a> or <a title="Branch by Abstraction" href="http://martinfowler.com/bliki/BranchByAbstraction.html" target="_blank">Branch by Abstraction</a> as approaches to avoiding Feature Branches in long running development cycles.  This same advice is reinforced in the book <a title="Continuous Delivery" href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912" target="_blank">Continuous Delivery</a> by <a title="Jez Humble" href="http://jezhumble.net/" target="_blank">Jez Humble</a> and <a title="Dave Farley" href="http://www.davefarley.net" target="_blank">Dave Farley</a>.  I highly recommend this book!</p>
<p>So, what does one do with this information?  Is use of GitFlow or promiscuous integration a bad idea?  I think that it can work very well for some teams and could be very dangerous in others.  In general, I like it when the VCS stays out of the way and the team gets in the habit of pushing changes and looking to the CI server validation that everything is ok.  Introducing promiscuous integration could interrupt this cycle and allow code changes to circumvention the mainline longer than they should.  This branching scheme feels complex, even with the addition of GitFlow.</p>
<p>I plan on trying GitFlow and further investigating it&#8217;s merits, hopefully writting a more in depth analysis of how it works.  I think that it is an interesting idea (worth blogging about) and has a lot of potential.  I would love to hear what you think about GitFlow, promiscuous integration, feature branching and how they are good or bad, so please comment below!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/838/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=838&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/09/14/dvcs-ci/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Unit vs. Integration Tests</title>
		<link>http://earlyandoften.wordpress.com/2011/06/24/ut-vs-it/</link>
		<comments>http://earlyandoften.wordpress.com/2011/06/24/ut-vs-it/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 14:46:03 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[integration testing]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=347</guid>
		<description><![CDATA[I have been doing more and more testing recently and I wanted to start capturing some of my thoughts on testing.  An important topic is the differences between a unit test and an integration test.  I feel like this is pretty straight forward, but is still worth clarifying, since I feel like it is done [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=347&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been doing more and more testing recently and I wanted to start capturing some of my thoughts on testing.  An important topic is the differences between a unit test and an integration test.  I feel like this is pretty straight forward, but is still worth clarifying, since I feel like it is done incorrectly way too often.  My definition of each breaks down as follows:</p>
<p><strong>Unit Tests:</strong></p>
<ul>
<li>Focused on defining (not testing) the behavior of a particular class, and that class only.</li>
<li>Fast (less than 0.1 second per test)</li>
<li>No external implementation dependencies (filesystem, database, web services, etc.).  All dependencies are faked for the test context.</li>
<li>Can easily be parallelized, since each test is atomic</li>
</ul>
<p><strong>Integration Tests:</strong></p>
<ul>
<li>Focused on verifying the integration of one or more components together.</li>
<li>May have external dependencies. (in fact, it is likely testing the integration with this dependency)</li>
<li>A test that takes longer than a unit Test should (longer than 0.1 seconds per test)</li>
</ul>
<p>Both unit and integration are focused on the internal quality of the application, whereas acceptance tests focus on the external, or business quality of the application.</p>
<p><strong>Code Coverage</strong><br />
I feel very strongly that developers should focus on achieving &gt;80%  code coverage by unit tests only.  Unit tests should target happy case logic as well as exception logic.  With integration tests, it is not necessarily to target a high code coverage.  Integration test coverage needs to cover integration points.  For instance, write integration tests to ensure your Hibernate database mappings are wired correctly.  Exceptions that could result from a integration failure should be defined behavior in the unit test, and expressed easily through fakes.</p>
<p><strong>Summary</strong></p>
<p>Your team should have a testing strategy that focuses on using both unit and integration tests, as both have a different focus and goal.  If you have additional criteria to add to this discussion, please feel free to share it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/347/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=347&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/06/24/ut-vs-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Delivery Presentation at the MC Java User&#8217;s Group</title>
		<link>http://earlyandoften.wordpress.com/2011/06/17/cd-at-mcjug/</link>
		<comments>http://earlyandoften.wordpress.com/2011/06/17/cd-at-mcjug/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 23:36:52 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[build pipelines]]></category>
		<category><![CDATA[mcjug]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=800</guid>
		<description><![CDATA[This past Wednesday night, I gave a presentation to the Montgomery Country Java User&#8217;s Group on Continuous Delivery.  I was lucky enough to be given the opportunity to speak to a  smart and attentive audience, and I look forward to going back and giving another presentation in the future.  I want to thank Victor Semenov, who organizes the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=800&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mcjug.org/"><img class="alignright" title="MCJUG Logo" src="http://www.mcjug.org/_/rsrc/1292297278055/home/mcjug_logo.png" alt="Mo" width="240" height="120" /></a>This past Wednesday night, I gave a presentation to the <a title="Montgomery County Java User's Group" href="http://www.mcjug.org/" target="_blank">Montgomery Country Java User&#8217;s Group</a> on Continuous Delivery.  I was lucky enough to be given the opportunity to speak to a  smart and attentive audience, and I look forward to going back and giving another presentation in the future.  I want to thank <a title="Victor Semenov at Twitter" href="https://twitter.com/#!/victorsemenov" target="_blank">Victor Semenov</a>, who organizes the MCJUG, for setting this up.</p>
<p>The presentation serves as an introduction to the concept and practices of Continuous Delivery.  The presentation cover the concept and need for continuous delivery, and then talks about the core practices necesarry for continuous delivery, such as:</p>
<ul>
<li>Agile</li>
<li>Configuration Management</li>
<li>Continuous Integration</li>
<li>Testing</li>
<li>Build Pipelines</li>
</ul>
<p>I intended to cover both the core practices as well as tools, but I ran out of time.  In the future, I will likely break this presentation up into two halves that cover an introduction, and then a specific roadmap with tools and techniques.</p>
<p>I have included a link to the slide deck I used for the presentation.  Check it out and add comments.    I hope that you enjoy it!</p>
<div id="__ss_8341276" style="width:510px;">
<p><strong><a title="Continuous Delivery" href="http://www.slideshare.net/jmcgarr/continuous-delivery-8341276">Continuous Delivery</a></strong><iframe src='http://www.slideshare.net/slideshow/embed_code/8341276' width='510' height='418' scrolling='no'></iframe></p>
<div style="padding:5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/jmcgarr">jmcgarr</a></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/800/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=800&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/06/17/cd-at-mcjug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>

		<media:content url="http://www.mcjug.org/_/rsrc/1292297278055/home/mcjug_logo.png" medium="image">
			<media:title type="html">MCJUG Logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Java EE Interview for the SD Times</title>
		<link>http://earlyandoften.wordpress.com/2011/06/15/java-ee-interview/</link>
		<comments>http://earlyandoften.wordpress.com/2011/06/15/java-ee-interview/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 18:32:39 +0000</pubDate>
		<dc:creator>Mike McGarr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java ee]]></category>
		<category><![CDATA[lamdbas]]></category>
		<category><![CDATA[sd times]]></category>

		<guid isPermaLink="false">http://earlyandoften.wordpress.com/?p=788</guid>
		<description><![CDATA[Last Friday, an article on&#8221; Java EE:  The state of the environment&#8221; was published by the SD Times.  I was interviewed for this article and you can check my quotes in the article at the SD Times website.  Please note, that I was misquoted in the article.  Any reference to C++ should be a reference [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=788&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last Friday, an article on&#8221; <a title="SD TImes Article" href="http://www.sdtimes.com/content/article.aspx?ArticleID=35628&amp;page=1" target="_blank">Java EE:  The state of the environment</a>&#8221; was published by the <a title="SD Times" href="http://www.sdtimes.com/" target="_blank">SD Times</a>.  I was interviewed for this article and you can check my quotes in the article at the SD Times website.  Please note, that I was misquoted in the article.  Any reference to C++ should be a reference to C#.  Hope you enjoy it otherwise!</p>
<p>Article: <a href="http://www.sdtimes.com/content/article.aspx?ArticleID=35628&amp;page=1">http://www.sdtimes.com/content/article.aspx?ArticleID=35628&amp;page=1</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/earlyandoften.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/earlyandoften.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/earlyandoften.wordpress.com/788/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=earlyandoften.wordpress.com&amp;blog=9516549&amp;post=788&amp;subd=earlyandoften&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://earlyandoften.wordpress.com/2011/06/15/java-ee-interview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86fec6d2472483b896d9512aef9b4394?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Mike M.</media:title>
		</media:content>
	</item>
	</channel>
</rss>
