<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Frank Carver&#039;s Punch Barrel</title>
	<atom:link href="http://blog.punchbarrel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.punchbarrel.com</link>
	<description>Frank Carver&#039;s musings about software and life</description>
	<lastBuildDate>Wed, 20 Feb 2013 16:05:12 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
	<copyright>Copyright &#xA9; Frank Carver&#039;s Punch Barrel 2010 </copyright>
	<managingEditor>frank.carver@googlemail.com (Frank Carver&#039;s Punch Barrel)</managingEditor>
	<webMaster>frank.carver@googlemail.com (Frank Carver&#039;s Punch Barrel)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://punchbarrel.com/images/punchbarrel-144.jpg</url>
		<title>Frank Carver&#039;s Punch Barrel</title>
		<link>http://blog.punchbarrel.com</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Frank Carver&#039;s musings about software and life</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>Frank Carver&#039;s Punch Barrel</itunes:author>
	<itunes:owner>
		<itunes:name>Frank Carver&#039;s Punch Barrel</itunes:name>
		<itunes:email>frank.carver@googlemail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://punchbarrel.com/images/punchbarrel-144.jpg" />
		<item>
		<title>Programmer Pairing with a Tester</title>
		<link>http://blog.punchbarrel.com/2013/02/20/programmer-pairing-with-a-tester/</link>
		<comments>http://blog.punchbarrel.com/2013/02/20/programmer-pairing-with-a-tester/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 16:05:12 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[bach]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[pairing]]></category>
		<category><![CDATA[programmer]]></category>
		<category><![CDATA[tester]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1935</guid>
		<description><![CDATA[James Bach’s Blog » Blog Archive » Programmer Pairing with a Tester.]]></description>
				<content:encoded><![CDATA[<p><a href='http://www.satisfice.com/blog/archives/852'>James Bach’s Blog » Blog Archive » Programmer Pairing with a Tester</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2013/02/20/programmer-pairing-with-a-tester/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The stupid cookie law is dead at last</title>
		<link>http://blog.punchbarrel.com/2013/02/04/the-stupid-cookie-law-is-dead-at-last/</link>
		<comments>http://blog.punchbarrel.com/2013/02/04/the-stupid-cookie-law-is-dead-at-last/#comments</comments>
		<pubDate>Mon, 04 Feb 2013 11:43:37 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[law]]></category>
		<category><![CDATA[stupid]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1934</guid>
		<description><![CDATA[Needs no comment from me&#8230; The stupid cookie law is dead at last &#124; Silktide blog.]]></description>
				<content:encoded><![CDATA[<p>Needs no comment from me&#8230;</p>
<p><a href='http://blog.silktide.com/2013/01/the-stupid-cookie-law-is-dead-at-last/'>The stupid cookie law is dead at last | Silktide blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2013/02/04/the-stupid-cookie-law-is-dead-at-last/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>This blog may be a bit quiet, I&#8217;m busy elsewhere</title>
		<link>http://blog.punchbarrel.com/2013/01/14/this-blog-may-be-a-bit-quiet-im-busy-elsewhere/</link>
		<comments>http://blog.punchbarrel.com/2013/01/14/this-blog-may-be-a-bit-quiet-im-busy-elsewhere/#comments</comments>
		<pubDate>Mon, 14 Jan 2013 19:05:14 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1811</guid>
		<description><![CDATA[Sure, quiet is relative. Over the years I have gone through enthusiastic patches and months with nothing but the occasional scrap of a link. At the moment, though, the quietness here has a reason: I&#8217;m too busy having fun messing with software and hardware on my Raspberry Pi. If you don&#8217;t know already, Raspberry Pi [...]]]></description>
				<content:encoded><![CDATA[<p>Sure, quiet is relative. Over the years I have gone through enthusiastic patches and months with nothing but the occasional scrap of a link. At the moment, though, the quietness here has a reason: I&#8217;m too busy having fun messing with software and hardware on my Raspberry Pi.</p>
<p>If you don&#8217;t know already, Raspberry Pi is a credit-card sized computer with an ARM core, 256MB of RAM (recent ones have 512MB), HDMI 1080p video, USB, SD Card and ethernet on board. It also has a bunch of general purpose I/O pins and only takes a couple of watts of power so it can even run from a USB lead . There&#8217;s a build of Debian Linux which runs on it so you can do stuff in Ruby, Python or whatever, and a growing collection of interesting hardware to plug in to it. People are using it for tiny network devices (media players running XBMC, for example), teaching children to program, and a whole host of embedded and robotics projects.</p>
<p>If you think that still sounds <em>meh</em>, then consider the price. You can <a href="http://cpc.farnell.com/jsp/bespoke/bespoke2.jsp?bespokepage=cpc/en_CC/special_offers/bargains/part_detail/RPi_lp2.jsp&#038;CMP=GooglePi">buy a 512MB model right now for less than £40!</a>.</p>
<p>I&#8217;m having great fun trying things out with mine, and blogging about it at <a href="http://raspberryalphaomega.org.uk/">http://raspberryalphaomega.org.uk/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2013/01/14/this-blog-may-be-a-bit-quiet-im-busy-elsewhere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charles Moore on Portability</title>
		<link>http://blog.punchbarrel.com/2013/01/13/charles-moore-on-portability/</link>
		<comments>http://blog.punchbarrel.com/2013/01/13/charles-moore-on-portability/#comments</comments>
		<pubDate>Sun, 13 Jan 2013 20:04:06 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Charles Moore]]></category>
		<category><![CDATA[Chuck Moore]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[portability]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1807</guid>
		<description><![CDATA[Portability Don&#8217;t try for platform portability. Most platform differences concern hardware interfaces. These are intrinsically different. Any attempt to make them appear the same achieves the lowest common denominator. That is, ignores the features that made the hardware attractive in the first place. Achieve portability by factoring out code that is identical. Accept that different [...]]]></description>
				<content:encoded><![CDATA[<blockquote><p>Portability</p>
<p>Don&#8217;t try for platform portability. Most platform differences concern hardware interfaces. These are intrinsically different. Any attempt to make them appear the same achieves the lowest common denominator. That is, ignores the features that made the hardware attractive in the first place.</p>
<p>Achieve portability by factoring out code that is identical. Accept that different systems will be different.</p>
</blockquote>
<p>via <a href='http://www.colorforth.com/binding.html'>&#8216;http://www.colorforth.com/binding.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2013/01/13/charles-moore-on-portability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracking configuration changes in Jenkins</title>
		<link>http://blog.punchbarrel.com/2013/01/03/tracking-configuration-changes-in-jenkins/</link>
		<comments>http://blog.punchbarrel.com/2013/01/03/tracking-configuration-changes-in-jenkins/#comments</comments>
		<pubDate>Thu, 03 Jan 2013 15:50:44 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1802</guid>
		<description><![CDATA[Continuous Integration is a pretty common concept these days. The idea of a &#8220;robot buddy&#8221; which builds and runs a bunch of tests across a whole codebase every time a change is checked in to the source code repository seems a generally good idea. There are a range of possibilities how to achieve this, and [...]]]></description>
				<content:encoded><![CDATA[<p>Continuous Integration is a pretty common concept these days. The idea of a &#8220;robot buddy&#8221; which builds and runs a bunch of tests across a whole codebase every time a change is checked in to the source code repository seems a generally good idea. There are a range of possibilities how to achieve this, and one of the most popular is <a href="http://jenkins-ci.org/">Jenkins</a>, the open source version of <a href="http://hudson-ci.org/">Hudson</a>, originally a community project but now owned by Oracle.</p>
<p>Although Jenkins is a useful tool, it can be a bit fiddly to set up, with a lot of web-form-filling to configure it for your projects once the basic web app is installed. Most projects I have worked on which use Jenkins have started by working through this setup using trial and error, then stuck with something which seemed to work. In an optimistic world this is OK, but it fails whenever there is a problem with the machine running the CI service, if another one is required, or if someone makes a change which breaks the configuration and the team needs to quickly roll back to a working config. In short it&#8217;s like software development used to be before we all used version control and unit tests!</p>
<p>With all this in mind, I was interested to read an article about a Jenkins plugin for version-controlling the configuration. This could be a step in the right direction.</p>
<p><a href='http://cburgmer.posterous.com/tracking-configuration-changes-in-jenkins'>Tracking configuration changes in Jenkins &#8211; cburgmer&#039;s posterous</a>.</p>
<p>If you use Jenkins this seems a very good thing to try out. I still feel, though, that all this configuration does not really belong in a CI tool. It&#8217;s really just some instructions about how how to build, deploy, and test the product, and to my mind that&#8217;s the kind of stuff which belongs with the code itself.</p>
<p>Imagine how simple things would be if there was no need for a whole CI &#8220;server&#8221;, but we could just use a simple git hook which called something managed, edited, tested and checked in with the code itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2013/01/03/tracking-configuration-changes-in-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kent Beck on incremental degradation (&#8220;defactoring&#8221;) as a design tool</title>
		<link>http://blog.punchbarrel.com/2012/11/29/kent-beck-on-incremental-degradation-defactoring-as-a-design-tool/</link>
		<comments>http://blog.punchbarrel.com/2012/11/29/kent-beck-on-incremental-degradation-defactoring-as-a-design-tool/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 21:32:59 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[defactoring]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[incremental]]></category>
		<category><![CDATA[Kent Beck]]></category>
		<category><![CDATA[origami]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1798</guid>
		<description><![CDATA[Thanks to @AdamWhittingham for pointing out a great post from Kent Beck in which he suggests an &#8220;if you can&#8217;t make it better, make it worse&#8221; approach to incremental development. This is a habit that has been a part of my development process for a long while, and I have needed to explain it to [...]]]></description>
				<content:encoded><![CDATA[<p>Thanks to <a href="https://twitter.com/AdamWhittingham">@AdamWhittingham</a> for pointing out a <a href="https://www.facebook.com/notes/kent-beck/when-worse-is-better-incrementally-escaping-local-maxima/498576730175196">great post from Kent Beck</a> in which he suggests an &#8220;if you can&#8217;t make it better, make it worse&#8221; approach to incremental development. This is a habit that has been a part of my development process for a long while, and I have needed to explain it to mildly puzzled colleagues several times.</p>
<p>An analogy I have often used is that of Origami, the Japanese art of paper folding. The end results can be intricate and beautiful, but the individual steps often seem to go back on themselves, folding and unfolding, pulling and pushing the same section until it ends up in the precisely correct configuration. Just as folding and unfolding a piece of paper leaves a crease which affects how the paper folds in future, factoring code one way then defactoring it to another leaves memory and improved understanding in the team which affects how the code might be changed in the future.</p>
<p>Don&#8217;t be afraid to inline and unroll, what you learn may surprise you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2012/11/29/kent-beck-on-incremental-degradation-defactoring-as-a-design-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Baruco 2012: Micro-Service Architecture, by Fred George</title>
		<link>http://blog.punchbarrel.com/2012/11/20/baruco-2012-micro-service-architecture-by-fred-george/</link>
		<comments>http://blog.punchbarrel.com/2012/11/20/baruco-2012-micro-service-architecture-by-fred-george/#comments</comments>
		<pubDate>Tue, 20 Nov 2012 10:03:51 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[fred geiorge]]></category>
		<category><![CDATA[micro]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[spaces]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1793</guid>
		<description><![CDATA[A fascinating presentation from Barcelona Ruby Conference. Fred George talks through the history and examples of his thinking about system architectures composed of micro services. I found this particularly interesting as it has so many resonances with systems I have designed and worked on, even addressing some of the tricky temporal issues which Fred has [...]]]></description>
				<content:encoded><![CDATA[<p>A fascinating presentation from Barcelona Ruby Conference. Fred George talks through the history and examples of his thinking about system architectures composed of micro services.</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/2rKEveL55TY"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/2rKEveL55TY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p>I found this particularly interesting as it has so many resonances with systems I have designed and worked on, even addressing some of the tricky temporal issues which Fred has avoided.</p>
<p>Thanks to <a href="http://blog.acuminous.co.uk/">Steve Cresswell</a> for pointing this one out to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2012/11/20/baruco-2012-micro-service-architecture-by-fred-george/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assembla on Premature Integration or: How we learned to stop worrying and ship software every day</title>
		<link>http://blog.punchbarrel.com/2012/10/08/assembla-on-premature-integration-or-how-we-learned-to-stop-worrying-and-ship-software-every-day/</link>
		<comments>http://blog.punchbarrel.com/2012/10/08/assembla-on-premature-integration-or-how-we-learned-to-stop-worrying-and-ship-software-every-day/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 20:33:53 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[aagile]]></category>
		<category><![CDATA[assembla]]></category>
		<category><![CDATA[delivery]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1790</guid>
		<description><![CDATA[An excellent article from Michael Chletsos and Titas Norkunas at Assembla, which reminded me how important it is to keep anything which might fail or need rework off the master branch. It&#8217;s a truism about software development that you never know where the bugs will be until you find them. This can be a real [...]]]></description>
				<content:encoded><![CDATA[<p>An excellent article from Michael Chletsos and Titas Norkunas at Assembla, which reminded me how important it is to keep anything which might fail or need rework off the master branch.</p>
<p>It&#8217;s a truism about software development that you never know where the bugs will be until you find them. This can be a real problem if you find bugs in an integrated delivery, as it prevents the whole bunch from shipping. Assembla have some interesting stats about how they have been able to release code much more frequently by doing as much testing and development as possible on side-branches.</p>
<p>Read more at: <a href='http://blog.assembla.com/assemblablog/tabid/12618/bid/90559/Avoiding-Premature-Integration-or-How-we-learned-to-stop-worrying-and-ship-software-every-day.aspx'>Avoiding Premature Integration or: How we learned to stop worrying and ship software every day</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2012/10/08/assembla-on-premature-integration-or-how-we-learned-to-stop-worrying-and-ship-software-every-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do You Really Want to be Doing this When You&#8217;re 50?</title>
		<link>http://blog.punchbarrel.com/2012/10/04/do-you-really-want-to-be-doing-this-when-youre-50/</link>
		<comments>http://blog.punchbarrel.com/2012/10/04/do-you-really-want-to-be-doing-this-when-youre-50/#comments</comments>
		<pubDate>Thu, 04 Oct 2012 11:50:44 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[age]]></category>
		<category><![CDATA[ageism]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tech crunch]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1786</guid>
		<description><![CDATA[I just read an article (Do You Really Want to be Doing this When Youre 50?) from James Hague, who describes himself as a &#8220;Recovering Programmer&#8220;. I understand his experience, and his reasons for deciding that it&#8217;s not the job for him. I even like that he has blogged about it. What I really don&#8217;t [...]]]></description>
				<content:encoded><![CDATA[<p>I just read an article (<a href='http://prog21.dadgum.com/154.html'>Do You Really Want to be Doing this When Youre 50?</a>) from James Hague, who describes himself as a &#8220;<a href="http://prog21.dadgum.com/56.html">Recovering Programmer</a>&#8220;.</p>
<p>I understand his experience, and his reasons for deciding that it&#8217;s not the job for him. I even like that he has blogged about it.</p>
<p>What I really <em>don&#8217;t</em> like, though, is the sweeping generalisation that this is a universally-applicable, age-related issue. Software development is already a field riddled with ageism from employers and management (see <a href="http://techcrunch.com/2010/08/28/silicon-valley%E2%80%99s-dark-secret-it%E2%80%99s-all-about-age/">Silicon Valley’s Dark Secret: It’s All About Age</a> from TechCrunch), and the <strong>last</strong> thing we need is an assumption that one person&#8217;s dissatisfaction with a particular job means that, in James Hague&#8217;s closing words, &#8220;large scale, high stress coding? I may have to admit that&#8217;s a young man&#8217;s game&#8221;</p>
<p>A programmer in his or her 40s or 50s who has kept up with the evolution of the field can be one of the most awesome and effective developers you&#8217;ll ever meet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2012/10/04/do-you-really-want-to-be-doing-this-when-youre-50/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Experimenting with VMware CloudFoundry</title>
		<link>http://blog.punchbarrel.com/2012/09/05/experimenting-with-vmware-cloudfoundry/</link>
		<comments>http://blog.punchbarrel.com/2012/09/05/experimenting-with-vmware-cloudfoundry/#comments</comments>
		<pubDate>Wed, 05 Sep 2012 16:45:40 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[baasalt]]></category>
		<category><![CDATA[bundler]]></category>
		<category><![CDATA[cloudfoundry]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://blog.punchbarrel.com/?p=1772</guid>
		<description><![CDATA[Yesterday evening I went along to the Ipswich Ruby User Group, where Dan Higham gave an enthusiastic presentation about VMware CloudFoundry. The product looked interesting enough (and appropriate enough to my current project) that I decided to spend a few hours evaluating it. On the whole I&#8217;m impressed. After poking around the web site a [...]]]></description>
				<content:encoded><![CDATA[<p>Yesterday evening I went along to the <a href="http://iprug.org/">Ipswich Ruby User Group</a>, where <a href="http://iamhigham.com/">Dan Higham</a> gave an enthusiastic presentation about <a href="http://www.cloudfoundry.com/">VMware CloudFoundry</a>. The product looked interesting enough (and appropriate enough to <a href="http://www.baasalt.net/">my current project</a>) that I decided to spend a few hours evaluating it. On the whole I&#8217;m impressed.</p>
<p>After poking around the web site a bit I decided to download the &#8220;micro cloud foundry&#8221; version, which does not need dedicated hardware, as it runs as a virtual machine on a development box. Once I had passed the first hurdle of requiring registration before even starting a download, then waited for about 40 minutes for the VM image to download, I had a go at running it up.</p>
<p>Now, I must say that I went a bit &#8220;off road&#8221; at this point. Naturally enough the web site recommends only VMWare virtual containers for the task, but the last time I used VMWare player (admittedly a few years ago) I found it clumsy and intrusive, and did not want to clutter my relatively clean development box. I already have virtualbox installed, and use it every day, so I thought I&#8217;d see how well the image runs in this container. Starting the VM was just a matter of telling virtualbox about the disk image, allocating some memory (I have a fair amount on this machine, so I gave it 4G to start with) and kicking it off.</p>
<p>Initially, everything seemed great. The VM started OK, and presented a series of menus pretty much as described in the <a href="http://support.cloudfoundry.com/entries/20316811-micro-cloud-foundry-installation-setup">&#8220;getting started guide&#8221;</a>. I had been warned that setting it up might take a while, so I was not worried that it twiddled around for 15 minutes or so before telling me that it was ready. The next step according to the guide was to go to the system where the application source code is developed and enter <tt>vmc target http://api.YOURMICROCLOUDNAME.cloudfoundry.me</tt> (the micro cloud foundry VM has no command line, it&#8217;s all remotely administered) to connect the management client to the VM. This was a bit of a gotcha, as the &#8220;vmc&#8221; command needs a separate installation, found <a href="http://docs.cloudfoundry.com/tools/vmc/installing-vmc.html">elsewhere on the site</a>. Essentially &#8220;vmc&#8221; is a ruby tool, installed as a gem. In this case I already had ruby installed (it&#8217;s a ruby project I&#8217;m working on), so it was just a matter of <tt>sudo gem install vmc</tt>. Once I had installed vmc, I tried to use it to set the target as suggested, but the request just got rejected a somewhat confusing error message. On the surface it did not appear to be a network issue &#8211; I could happily &#8220;ping&#8221; the pseudo-domain, but vmc would not connect. After some looking around, both on the web, and digging in the &#8220;advanced&#8221; menus of the micro cloud foundry VM, I eventually realized that the error message in question was not actually coming from the micro cloud foundry at all but from a server running on my development system!</p>
<p>To make sense of why, I need to describe a bit about my development set up. The basic hardware is a generic Dell dektop with its supplied Windows 7 64-bit OS. I don&#8217;t particularly like using Windows for development (and did not want to wipe the machine, because I also need to use Windows-only software for tasks such as video and audio production), so I do all my development on one of a selection of virtual Ubuntu machines running on virtualbox. This is great in so many ways. I have VM images optimised for different work profiles, and run them from a SSD for speed. Best of all, I can save the virtual machine state (all my running servers, open windows and whatnot) when I stop work, and even eject the SSD and take it to another machine to carry on if needs be.</p>
<p>So, the problem I was seeing was due an interaction between the &#8220;clever&#8221; way that micro cloud foundry sets up a global dynamic dns for the VM, and the default virtualbox network settings. To cut a long story short, both my development VM and the micro cloud foundry VM were running in the same virtualbox, and both using the default &#8220;NAT&#8221; setting for the network adapter. Somewhat oddly, virtualbox gives all its VM images the same IP-address, and all the incoming packets were going to the development VM. More poking around the web, and I found that a solution is to set up two network adapters in virtualbox for the micro cloud foundry. Set the first one to &#8220;bridge&#8221; mode, so it gets a sensible IP address and can receive its own incoming packets, and set the second one to NAT, so it can make requests out to the internet. I left the development VM with just a &#8220;NAT&#8221; connector, and it seems happy to connect to both the web and to the micro cloud foundry VM via the dynamic dns lookup.</p>
<p>Of course, it was not all plain sailing from there, though. The first issue was that I kepy getting <tt>VCAP ROUTER: 404 - DESTINATION NOT FOUND</tt> as a reponse. A message that was obviously coming from somewhere in cloud foundry, but gave no obvious hint what was wrong. After a lot of trying stuff and searching VMware support, FAQ and Stack Overflow, I came to the conclusion that this is largely an intermittent problem. After a while things just seemed to work better. My guess is that when the micro cloud foundry VM first starts it tries to load dependencies and apply updates in the background. This is probably a quick process inside VMware&#8217;s own network, but out here at the end of a wet bit of string, things take a while to download. Eventually, though, things settled down and I was able to deploy some of the simple examples. Hooray! I have subsequently found that the micro cloud foundry VM needs a few tens of minutes to settle down in a similar way every time it is started from cold. Good job I can pause the virtual machine in virtualbox.</p>
<p>The process for deploying (and re-deploying) applications which use supported languages and frameworks is largely smooth and pleasant. It does not use version control (like Heroku, for example) but a specific set of tools which deploy from a checked-out workspace. If you want to deploy direct from VCS, it&#8217;s easy enough to attach a a little deploy script to a hook, though.</p>
<p>Once I got past paying with the the examples, I tried to deploy one of my own apps. It&#8217;s written in Ruby, uses Sinatra as a web framework and Bundler for dependency management, so it should be supported. But it does not work at all on cloud foundry. It works fine when I run &#8220;rackup&#8221; on my development box, and it works fine when I deploy it to Dreamhost, but on cloud foundry &#8211; nothing. Now, I can understand that there may be all sorts of reasons why it might not work (the apparent lack of a file system on the cloud foundry deployment, for one), but my big problem is that I have so far not discovered <i>any</i> way of finding what is actually wrong. An HTTP request just gives &#8220;not found&#8221; (no specific errors, stack traces or anything useful). Typing <tt>vmc logs MYAPP</tt> correctly shows the bundled gems being loaded, and the incoming HTTP requests reaching WEBrick, but no errors or other diagnostic output. I can only assume that the auto-configuration for a Sinatra app has not worked for my app, but there seems to be <b>no way</b> of finding out why.</p>
<p>To me, this lack of debuggability is the single biggest problem with cloud foundry. I hope it is just that I have not found out how to do it. If there is really no way at all of finding out what is going on on the virtual server we are back to &#8220;suck it and see&#8221; guesswork, which is so bad as to be unusable. I am simply <i>not</i> willing to spend hours (days? weeks?) changing random bits of my code and re-deploying to see if anything works.</p>
<p>If anyone reading this knows a way to find out what cloud foundry expects from a Sinatra app, and how to get it to tell me what is going on, please let me know. If not, I may have to abandon using cloud foundry for this project, and that would be a real shame.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punchbarrel.com/2012/09/05/experimenting-with-vmware-cloudfoundry/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.942 seconds -->
<!-- Cached page served by WP-Cache -->
