<?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>Programmer&#039;s Paradox</title>
	<atom:link href="http://www.programmersparadox.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programmersparadox.com</link>
	<description></description>
	<lastBuildDate>Wed, 07 Dec 2011 15:18:10 +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>Checking out a branch from Github</title>
		<link>http://www.programmersparadox.com/2011/12/07/checking-out-a-branch-from-github/</link>
		<comments>http://www.programmersparadox.com/2011/12/07/checking-out-a-branch-from-github/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 15:18:10 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[branch]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=1491</guid>
		<description><![CDATA[These are the set of commands to checkout a branch of a repository from Github, which is not immediately obvious the first time you try it. First clone the repo if you haven&#8217;t: git clone url-to-repo-you-want Clone has already checked out the branches, but it only initially creates the master branch. You have to tell [...]<p><br/><br/><a href="http://www.programmersparadox.com/2011/12/07/checking-out-a-branch-from-github/">Checking out a branch from Github</a></p>
]]></description>
			<content:encoded><![CDATA[<p>These are the set of commands to checkout a branch of a repository from Github, which is not immediately obvious the first time you try it.</p>
<p>First clone the repo if you haven&#8217;t:</p>
<p><code>git clone url-to-repo-you-want</code></p>
<p>Clone has already checked out the branches, but it only initially creates the master branch. You have to tell it to create the other branches you might want.</p>
<p>To do that:</p>
<p><code>git checkout -t origin/branch-name</code></p>
<p>This will checkout and create a branch that has the name branch-name and that tracks the remote branch at origin/branch-name.</p>
<p>If you want your branch to have a different name from the remote branch:</p>
<p><code>git checkout -t -b your-branch-name origin/branch-name</code></p>
<p>This creates a branch with your-branch-name that tracks the branch at origin/branch-name.</p>
<p>Because these commands uses checkout you will then have the new branch as your current working branch. You can use git branch with the -t (&#8211;track) flag to create the branch without switching to it.</p>
<p>If you&#8217;re working in a repo you&#8217;ve already cloned and want to checkout a newer branch, it maybe necessary to do a git fetch first to make sure your local checkout knows about the remote branch before you create a local branch.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2011/12/07/checking-out-a-branch-from-github/">Checking out a branch from Github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2011/12/07/checking-out-a-branch-from-github/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Trappings of Agile</title>
		<link>http://www.programmersparadox.com/2011/11/09/the-trappings-of-agile/</link>
		<comments>http://www.programmersparadox.com/2011/11/09/the-trappings-of-agile/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 15:00:19 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=1475</guid>
		<description><![CDATA[It&#8217;s easy to think that the agile movement has been around forever. It certainly feels like it has in the raging torrent that is software development time. Yet if you read the Agile Manifesto that started it all, at the bottom, in small letters, you&#8217;ll notice the copyright date. © 2001. Only ten years ago [...]<p><br/><br/><a href="http://www.programmersparadox.com/2011/11/09/the-trappings-of-agile/">The Trappings of Agile</a></p>
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s easy to think that the agile movement has been around forever. It certainly feels like it has in the raging torrent that is software development time. Yet if you read the <a href="http://agilemanifesto.org/">Agile Manifesto</a> that started it all, at the bottom, in small letters, you&#8217;ll notice the copyright date.</p>
<p>© 2001.</p>
<p>Only ten years ago the agile movement formally started. I&#8217;m sure it was around informally before then. Now it&#8217;s an institution that is embodied in methodologies and programs from <a href="http://www.extremeprogramming.org/">XP</a> to <a href="http://www.scrumalliance.org/learn_about_scrum">Scrum</a>.</p>
<p>It good to read the manifesto that started it all. To see the simplicity that launched a movement. Because overtime, as is human nature, we keep adding on facets, until we forget what the original item looked like. This can be for better or worse (think a person from the 50s would recognize a TV today as a TV, if it wasn&#8217;t on?).</p>
<p>One facet we&#8217;ve added is the concept of velocity. <a href="http://jimhighsmith.com/2011/11/02/velocity-is-killing-agility/">Jim Highsmith</a> details nicely how the concept of velocity has been stretched so it chokes the agile process. A key quote:</p>
<blockquote><p>Compounding the problem, the Agile movement has focused on high levels of customer involvement—basically a good thing—but we’ve gone too far. A large number of Agilists decry that they can’t get organizations to focus on technical practices—but why should that be a surprise when we encourage product managers/owners to make all the priority decisions and then measure performance using velocity?</p></blockquote>
<p>This point is spot on. In my experience, product owners are often given complete control over priority, so technical optimizations or necessary muck work aren&#8217;t prioritized. Going back to the agile manifesto, read over the names of the original signers. They all have experience in the technical and the business sides of the equation. They intuitively know how to balance both. Now that agile has gained widespread adoption, teams do not necessarily have this experience.</p>
<p>The idea of the self organizing team needs to return to the agile movement. The team doesn&#8217;t have to be self organizing in that team members constantly change. That becomes too disruptive. The team needs to be self organizing in that the team picks the order of the work they will complete. The product owner might set priority, but it is the team that takes on the work and the order they complete it. There is obviously back and forth between the team and the product owner, but as the manifesto says: people over process. We trust that the team will organize itself, taking into consideration the wishes of the business, so that the work gets done as quickly as possible with the highest quality.</p>
<p>I think people often forget that agile is not a rigid system to be followed. It is simply a belief that change is constant, so we should favor a way of doing things that makes change easy.</p>
<p>In short, do what works for you so that you develop quality software on time. That&#8217;s the definition of agile, with all the trappings stripped away.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.programmersparadox.com/wp-content/uploads/2011/11/developmentstarts.jpg"><img class="aligncenter size-full wp-image-1480" title="development_starts" src="http://www.programmersparadox.com/wp-content/uploads/2011/11/developmentstarts.jpg" alt="" width="500" height="333" /></a></p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/tim_d/5243205245/">And so development starts</a> / <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">CC License</a></p>
<p><br/><br/><a href="http://www.programmersparadox.com/2011/11/09/the-trappings-of-agile/">The Trappings of Agile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2011/11/09/the-trappings-of-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Becoming A Chef</title>
		<link>http://www.programmersparadox.com/2011/11/07/becoming-a-chef/</link>
		<comments>http://www.programmersparadox.com/2011/11/07/becoming-a-chef/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 22:05:35 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[chef]]></category>
		<category><![CDATA[icontact]]></category>
		<category><![CDATA[opscode]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=1461</guid>
		<description><![CDATA[It&#8217;s certainly true that you can&#8217;t guess the path your life will take. When I was a child I remember looking at my father, who was a career military man, and thinking that I&#8217;d go to college, graduate, find a good company to work for, and stay there the rest of my working life until [...]<p><br/><br/><a href="http://www.programmersparadox.com/2011/11/07/becoming-a-chef/">Becoming A Chef</a></p>
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s certainly true that you can&#8217;t guess the path your life will take. When I was a child I remember looking at my father, who was a career military man, and thinking that I&#8217;d go to college, graduate, find a good company to work for, and stay there the rest of my working life until I retired.</p>
<p>It turns out that in my fourth year out of college I am already working at my fourth job. I intend to stay at this one for a while. While I enjoyed my time at <a href="http://www.icontact.com/">iContact</a> and thank them for everything they did for me, on October 17th I started work for <a href="http://www.opscode.com/">Opscode</a>, the company behind <a href="https://github.com/opscode/chef">Chef</a>.</p>
<p>The Opscode team is an amazing group and I lept at the chance to go work for them. It&#8217;s a change to go from scaling email sending to infrastructure automation, but I&#8217;m excited at the challenge. It&#8217;s yet another interesting problem to vex me until I conquer it.</p>
<p>It&#8217;s time to further sharpen my skills and help companies Rule the Cloud.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.programmersparadox.com/wp-content/uploads/2011/11/Knives1.jpg"><img class="aligncenter size-full wp-image-1466" title="Knives" src="http://www.programmersparadox.com/wp-content/uploads/2011/11/Knives1.jpg" alt="" width="500" height="375" /></a></p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/sfllaw/7908295/">Knives</a> / <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC License</a><a href="http://www.programmersparadox.com/wp-content/uploads/2011/11/Knives.jpg"><br />
</a></p>
<p><br/><br/><a href="http://www.programmersparadox.com/2011/11/07/becoming-a-chef/">Becoming A Chef</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2011/11/07/becoming-a-chef/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DevOps and The Lean Startup</title>
		<link>http://www.programmersparadox.com/2011/10/03/devops-and-the-lean-startup/</link>
		<comments>http://www.programmersparadox.com/2011/10/03/devops-and-the-lean-startup/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 15:05:26 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[eric ries]]></category>
		<category><![CDATA[Lean Startup]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=1440</guid>
		<description><![CDATA[All the rage in developer circles and at conferences at the moment is talk of DevOps. This is the loosely defined movement that is about getting developers more closely involved in operations. All the rage in entrepreneur circles at the moment is the concept of the Lean Startup. The term, coined by Eric Ries, is [...]<p><br/><br/><a href="http://www.programmersparadox.com/2011/10/03/devops-and-the-lean-startup/">DevOps and The Lean Startup</a></p>
]]></description>
			<content:encoded><![CDATA[<p>All the rage in developer circles and at conferences at the moment is talk of DevOps. This is the loosely defined movement that is about getting developers more closely involved in operations.</p>
<p>All the rage in entrepreneur circles at the moment is the concept of the Lean Startup. The term, coined by Eric Ries, is a startup that achieves validated learning through the build-measure-learn loop. What is validated learning? Learning what the customer actually wants so that a useful product and a sustainable business model are built.</p>
<p>It may not appear that the Lean Startup and DevOps are related. Obviously, with a statement like that, I&#8217;m now going to tell you how they are. It starts with small batches.</p>
<p>Small batches are the practice of having cross-functional teams work together on the smallest units of work possible while pushing that work to the customer as soon as possible. In working this way, the product gets to the customer quickly, allowing the business model or product direction to be validated.</p>
<p>The common model today is large batches. Instead of a small team working cross-functionally to push a product in front of a customer, the team specializes, with various team members completing their phase of the product before passing it on to the next person in the chain. If at any point a fault is found, the product has be sent back down the chain while those up stream ideal, waiting for the product to reach them. All the while nothing is getting put in front of the customers, so no feedback is being gained. Eventually the product will reach the customer, but if any flaws are found or the customer rejects the product, the entire process is repeated, leading to long lead times before customer behavior can be learned.</p>
<p>Contrast this with the small batch process, where small changes are continually pushed to the customer. This leads to quick feedback and rapid turn around times, resulting in a better product.</p>
<p>Lean startups embrace small batches as I&#8217;ve just described. DevOps is the same. DevOps is about embracing small batches, but the batch in this case is a narrow part of the overall process: pushing a product from development to deployment to seeing it in use.</p>
<p>DevOps is about allowing production behavior to quickly feed back to developers so that development can adjust quickly to situations in production. Often times the fastest way to make this happen is to have developers occasionally serve as, or even to be, the operations team. As with the lean startup, the potential efficiency of an individual unit (developers, operations) might appear to be undercut, but the efficiency of the system as a whole (developing products that work in production) is sped up.</p>
<p>When developing a system it is easy to envision how a system should run, but that doesn’t mean that is how the system will run. Often unavoidable differences in hardware and traffic lead to differences in how the system actually performs with how it was envisioned to perform.</p>
<p>DevOps is about tightening the same loop as the Lean Startup: the build-measure-learn loop. The only difference is the narrower focus of DevOps. With the loop as tight as possible, knowledge gained from the actual system is fed back into the next iteration of the product so the system becomes better in small, but tight, increments.</p>
<p>DevOps is a subset of the Learn Startup. Both are a reaction to today&#8217;s fast changing world and the need to create a system that can optimize the whole quickly, even if that means undercutting what appears to be the efficiency of the individual unit.</p>
<p style="text-align: center;">
<a href="http://www.programmersparadox.com/wp-content/uploads/2011/10/waste.jpg"><img class="size-full wp-image-1454 aligncenter" title="waste" src="http://www.programmersparadox.com/wp-content/uploads/2011/10/waste.jpg" alt="" width="500" height="375" /></a></p>
<p style="text-align: center;"><em>Both DevOps and The Lean Startup are about eliminating waste.</em></p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/12663666@N00/5791260652/">Waste</a> / <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">CC License</a></p>
<p>I’ve only touched the surface of the Lean Startup and DevOps movement. For more on DevOps and to read the article that inspired this one, see the Ars Technica article <a href="http://arstechnica.com/business/news/2011/09/google-devops-and-disaster-porn.ars"><em>Google CIO and others talk DevOps and “Disaster Porn” at Surge</em></a>.</p>
<p>For more on the lean startup, read Eric Ries’ <a href="http://www.startuplessonslearned.com/">blog on the topic</a>, or read his recently published book, <em><a href="http://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898">The Lean Startup</a></em>.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2011/10/03/devops-and-the-lean-startup/">DevOps and The Lean Startup</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2011/10/03/devops-and-the-lean-startup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Java 7 and JRuby on Mac OS X Lion</title>
		<link>http://www.programmersparadox.com/2011/08/24/installing-java-7-and-jruby-on-mac-os-x-lion/</link>
		<comments>http://www.programmersparadox.com/2011/08/24/installing-java-7-and-jruby-on-mac-os-x-lion/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 02:56:48 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=1391</guid>
		<description><![CDATA[I currently have a project that I&#8217;m evaluating using JRuby for. The first step in the evaluation is of course to set everything up. While I could have installed JRuby and let it run with the version of Java already available on Mac OS X Lion, I opted to be on the edge. That means [...]<p><br/><br/><a href="http://www.programmersparadox.com/2011/08/24/installing-java-7-and-jruby-on-mac-os-x-lion/">Installing Java 7 and JRuby on Mac OS X Lion</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I currently have a project that I&#8217;m evaluating using JRuby for. The first step in the evaluation is of course to set everything up. While I could have installed JRuby and let it run with the version of Java already available on Mac OS X Lion, I opted to be on the edge. That means installing the latest OpenJDK Mac OS X port of Java 7 and installing JRuby on top of it.</p>
<p>These are the directions of how I did that.</p>
<p>These steps can be found in other places, but my hope is that by collecting them all in one place I make it easier for others.</p>
<p><strong>First stop, Java.</strong></p>
<p>Java 7 is not yet officially out for Lion, but it is possible to install a Mac OS X port early release version without too much trouble.</p>
<p>The directions are available on the <a href="http://wikis.sun.com/display/OpenJDK/Mac+OS+X+Port+Prerequisites">OpenJDK Mac OS X Port page</a>.</p>
<p>First make sure you meet the prerequisites, such as having a 64 bit capable machine, having Lion, having the latest Xcode installed (Version 4.1, <a href="http://itunes.apple.com/us/app/xcode/id448457090?mt=12">available through the Mac app store for free</a>).</p>
<p>Once you&#8217;ve verified the prerequisites and installed Xcode 4.1 if you need it, you&#8217;ll need to download Apple&#8217;s preview of Java 7. This doesn&#8217;t install Java 7, but it is necessary so that you have the proper APIs for Java 7 to work on the Mac.</p>
<p>To download it, go to <a href="http://connect.apple.com/">connect.apple.com</a>.</p>
<p>You will need to log in using your Apple Id and password. You can register if you don&#8217;t have one.</p>
<p>Once in, navigate to the Java section. You&#8217;ll then want to download the latest disk image for Lion, which as of this writing is <em>Java for 10.7 &#8211; 11M3504 (Disk Image)</em>.</p>
<p>Once the download is complete, run the disk image and install it.</p>
<p>Next you&#8217;ll need to follow further directions from the Mac OS X Ports page, found <a href="http://wikis.sun.com/display/OpenJDK/Mac+OS+X+Port">here</a>.</p>
<p>The directions will tell you how to install a preview version of Java 7 on Lion. You can either build it from source or download an unofficial build. I opted to download the <a href="http://code.google.com/p/openjdk-osx-build/downloads/list?q=label:Featured">latest unofficial build</a>, which is <em>OpenJDK-OSX-1.7-universal-20110822.dmg</em> at the time of this writing.</p>
<p>Once downloaded, install it.</p>
<p>Now Java 7 is on your system, but it won&#8217;t be the default Java. To make it the default Java, launch:</p>
<blockquote><p>/Applications/Utilities/Java Preferences.app</p></blockquote>
<p>and drag both of the OpenJDK 7 entries to the top of the list. Then close the Java Preferences app. Java 7 is now installed on your system and is the default.</p>
<p>To make sure Java 7 is the default, launch a terminal and run <code>java -version</code>.</p>
<p>You should see output that looks similar to this:</p>
<blockquote><p><code>openjdk version "1.7.0-internal"<br />
OpenJDK Runtime Environment (build 1.7.0-internal-b00)<br />
OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)</code></p></blockquote>
<p><strong>It&#8217;s onto JRuby.</strong></p>
<p>Download the latest JRuby from <a href="http://jruby.org/">jruby.org</a> (as of this writing, it is 1.6.4).</p>
<p>I downloaded the tar ball. Extract it. It will place a jruby-1.6.4 folder wherever you extracted it to.</p>
<p>Move the folder to the location you want it on your system, if it isn&#8217;t already there.</p>
<p>Add the bin folder from the jruby folder you extracted to your system path. Good directions can be found at <a href="http://hathology.com/2008/06/how-to-edit-your-path-environment-variables-on-mac-os-x/">Hathology.com</a>. Note that those directions modify the path for every user on the system, not just a single user.</p>
<p>Once that is done, close and restart any terminals you have open. Then type <code>jruby -v</code> and you should see this:</p>
<blockquote><p><code>jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.7.0-internal) [darwin-x86_64-java]</code></p></blockquote>
<p>Success. You&#8217;re now running JRuby with Java 7 on Mac OS X Lion.</p>
<p>Since the Java 7 isn&#8217;t an official version, I can&#8217;t promise there won&#8217;t be bugs or other weirdness, but that&#8217;s the fun of living on the edge.</p>
<p style="text-align: center;"><a href="http://www.programmersparadox.com/wp-content/uploads/2011/08/jrubyconf1.jpg"><img class="size-full wp-image-1419 aligncenter" title="jrubyconf" src="http://www.programmersparadox.com/wp-content/uploads/2011/08/jrubyconf1.jpg" alt="" width="425" height="640" /></a></p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/bendjsf/4100504025/">JRubyConf Post Design</a> / <a href="http://creativecommons.org/licenses/by-nc/2.0/">CC License </a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2011/08/24/installing-java-7-and-jruby-on-mac-os-x-lion/">Installing Java 7 and JRuby on Mac OS X Lion</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2011/08/24/installing-java-7-and-jruby-on-mac-os-x-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

