<?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>Julian Higman&#039;s Blog &#187; Work</title>
	<atom:link href="http://julianhigman.com/blog/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://julianhigman.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 27 Feb 2012 22:11:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Upgrading PEAR if Guzzle install fails</title>
		<link>http://julianhigman.com/blog/2012/02/27/upgrading-pear-if-guzzle-install-fails/</link>
		<comments>http://julianhigman.com/blog/2012/02/27/upgrading-pear-if-guzzle-install-fails/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 22:11:21 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[guzzle]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=322</guid>
		<description><![CDATA[I had a problem with the PEAR installer with the Guzzle package (a generally excellent PHP HTTP framework). A channel discover would give the following error: root@ip-10-56-47-23:~# pear channel-discover guzzlephp.org/pear Discovering channel guzzlephp.org/pear over http:// failed with message: channel-add: Cannot open "http://guzzlephp.org/pear/channel.xml" (File http://guzzlephp.org:80/pear/channel.xml not valid (received: HTTP/1.1 404 Not Found )) Trying to discover <a href='http://julianhigman.com/blog/2012/02/27/upgrading-pear-if-guzzle-install-fails/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I had a problem with the PEAR installer with the <a href="http://guzzlephp.org/" target="_blank">Guzzle</a> package (a generally excellent PHP HTTP framework).</p>
<p>A channel discover would give the following error:</p>
<pre>root@ip-10-56-47-23:~# pear channel-discover guzzlephp.org/pear
 Discovering channel guzzlephp.org/pear over http:// failed with message: channel-add: Cannot open "http://guzzlephp.org/pear/channel.xml" (File http://guzzlephp.org:80/pear/channel.xml not valid (received: HTTP/1.1 404 Not Found
 ))
 Trying to discover channel guzzlephp.org/pear over https:// instead
 Discovery of channel "guzzlephp.org/pear" failed (channel-add: Cannot open "https://guzzlephp.org/pear/channel.xml" (Connection to `guzzlephp.org:443' failed: Connection refused))</pre>
<p>Strangely, I could fetch the channel.xml file manually and add the channel. But even then, the install would fail (with similar messages about 404 errors).</p>
<p>The solution seemed to be upgrading PEAR &#8211; I was running version 1.9.0 (check it with &#8220;pear -V&#8221;), so I upgraded it:</p>
<pre>root@ip-10-56-47-23:~# pear upgrade pear</pre>
<p>after which I had version 1.9.4. Then I tried the channel discover again, with much better results:</p>
<pre>root@ip-10-56-47-23:~# pear channel-discover guzzlephp.org/pearAdding Channel "guzzlephp.org/pear" succeeded
 Discovery of channel "guzzlephp.org/pear" succeeded</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2012/02/27/upgrading-pear-if-guzzle-install-fails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Jenkins to run remote deployment scripts over SSH</title>
		<link>http://julianhigman.com/blog/2012/02/25/using-jenkins-to-run-remote-deployment-scripts-over-ssh/</link>
		<comments>http://julianhigman.com/blog/2012/02/25/using-jenkins-to-run-remote-deployment-scripts-over-ssh/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 21:58:29 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=294</guid>
		<description><![CDATA[We use Jenkins to deploy code to multiple servers, so that we can manage builds and deployments from the same (even better if you&#8217;re using the Jenkins IRC plugin). The deployment is done by a parameterized build job, where the parameter is the version of the project that we want to deploy. The job will <a href='http://julianhigman.com/blog/2012/02/25/using-jenkins-to-run-remote-deployment-scripts-over-ssh/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>We use Jenkins to deploy code to multiple servers, so that we can manage builds and deployments from the same (even better if you&#8217;re using the <a title="Jenkins IRC Plugin" href="https://wiki.jenkins-ci.org/display/JENKINS/IRC+Plugin" target="_blank">Jenkins IRC plugin</a>).</p>
<p>The deployment is done by a parameterized build job, where the parameter is the version of the project that we want to deploy. The job will run remote commands over ssh on servers that you&#8217;ve defined in the Jenkins configuration. Those commands will pull down a version of our code, unpack it, and run the rest of the install steps.</p>
<p>&nbsp;</p>
<p>First you&#8217;ll need to install the <a title="Publish over SSH Plugin" href="https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin" target="_blank">Publish over SSH Plugin</a>, which will allow files to be transferred to your servers and remote commands to be run.</p>
<p>Set up the SSH key for remote access of your target servers, in the Manage Jenkins page:</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/ssh-key.png"><img class="aligncenter size-full wp-image-295" title="ssh-key" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/ssh-key.png" alt="" width="1176" height="453" /></a></p>
<p>and setup the definitions for each of the servers that you want to deploy to:</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/ssh-server.png"><img class="aligncenter size-full wp-image-298" title="ssh-server" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/ssh-server.png" alt="" width="1079" height="173" /></a></p>
<p>Then in the configuration for the new deployment job you&#8217;ve set up, you&#8217;ll use the &#8220;Send files or execute commands over SSH before the build starts&#8221; settings in the &#8220;Build Environment&#8221; section to remotely execute a script to carry out the install steps on each remote server:</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/remote-exec.png"><img class="aligncenter size-full wp-image-300" title="remote-exec" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/remote-exec.png" alt="" width="919" height="401" /></a></p>
<p>Notice that the build parameter &#8220;$version&#8221; is available to the Exec command that gets remotely executed &#8211; other Jenkins environment variables will also be available (e.g. $BUILD_NUMBER, $JOB_NAME etc).</p>
<p>Use the &#8220;Add Server&#8221; button to add more target servers, with the same Exec command.</p>
<p>Now you can deploy your project (or run any other remote scripts) by running the build job and specifying a version number.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2012/02/25/using-jenkins-to-run-remote-deployment-scripts-over-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building github branches with Jenkins</title>
		<link>http://julianhigman.com/blog/2012/02/22/building-github-branches-with-jenkins/</link>
		<comments>http://julianhigman.com/blog/2012/02/22/building-github-branches-with-jenkins/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 21:47:32 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=278</guid>
		<description><![CDATA[We usually work on several parallel branches of a repo on github, and we wanted to be able to build and test any branch on demand. So we set up a parameterised job in Jenkins that will take the name of a branch and run the build process. As for all github builds, you need <a href='http://julianhigman.com/blog/2012/02/22/building-github-branches-with-jenkins/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>We usually work on several parallel branches of a repo on github, and we wanted to be able to build and test any branch on demand.</p>
<p>So we set up a parameterised job in Jenkins that will take the name of a branch and run the build process.</p>
<p>As for all github builds, you need to have installed the git plugin first (<a href="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin">https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin</a>) and set up your github globals in the Jenkins settings:</p>
<p>&nbsp;</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/jenkins-git-setup-1.png"><img class="aligncenter size-full wp-image-280" title="jenkins-git-setup-1" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/jenkins-git-setup-1.png" alt="" width="919" height="215" /></a></p>
<p>&nbsp;</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/jenkins-git-setup-2.png"><img class="aligncenter size-full wp-image-279" title="jenkins-git-setup-2" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/jenkins-git-setup-2.png" alt="" width="838" height="99" /></a></p>
<p>&nbsp;</p>
<p>Then set up a parameterized build job with the repo as the GitHub project and with &#8220;branch&#8221; as the parameter to be specified:</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/build-param.png"><img class="aligncenter size-full wp-image-289" title="build-param" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/build-param.png" alt="" width="825" height="130" /></a></p>
<p>and in the Source Code Management section, add the parameter to the &#8220;Branches to build&#8221;:</p>
<p><a href="http://julianhigman.com/blog/wp-content/uploads/2012/02/source-code.png"><img class="aligncenter size-full wp-image-290" title="source-code" src="http://julianhigman.com/blog/wp-content/uploads/2012/02/source-code.png" alt="" width="822" height="243" /></a>Don&#8217;t specify any build triggers &#8211; you&#8217;ll probably just want to run this on-demand against specific branches, rather than every time there&#8217;s a push to the repo (which is what happens by default).</p>
<p>Now you can build any branch just by giving the branch name as the required parameter when the job is started.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2012/02/22/building-github-branches-with-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Importing a project into github</title>
		<link>http://julianhigman.com/blog/2011/12/21/importing-a-project-into-github/</link>
		<comments>http://julianhigman.com/blog/2011/12/21/importing-a-project-into-github/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 14:29:13 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=272</guid>
		<description><![CDATA[We&#8217;re moving our development projects into github, so we wanted to get a copy of the code (checked out of Subversion) into a new project in github. Here are the steps (assumes that you&#8217;ve set up your ssh keys correctly, according to e.g. http://help.github.com/linux-set-up-git/) Setup the git globals: $ git config --global user.name "Julian Higman" $ <a href='http://julianhigman.com/blog/2011/12/21/importing-a-project-into-github/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re moving our development projects into github, so we wanted to get a copy of the code (checked out of Subversion) into a new project in github.</p>
<p>Here are the steps (assumes that you&#8217;ve set up your ssh keys correctly, according to e.g. <a href="http://help.github.com/linux-set-up-git/">http://help.github.com/linux-set-up-git/</a>)</p>
<p>Setup the git globals:</p>
<pre>$ git config --global user.name "Julian Higman"
$ git config --global user.email "jh @ kasabi.com"</pre>
<p>Create the new project, add a README file, and connect it to the github remote project:</p>
<pre>$ mkdir my-new-project
$ cd my-new-project/
$ git init
$ touch README
$ git add README
$ git commit -m "First commit"
$ git remote add origin git@github.com:kasabi/my-new-project.git
$ git push -u origin master</pre>
<p>Now copy in the project source files, excluding svn files and other project config files:</p>
<pre>$ cd ..
$ rsync -r --exclude=.svn --exclude=.buildpath --exclude=.project --exclude=.git my-old-project/ my-new-project/</pre>
<p>Then add the new files, commit them, and push to the remote repo:</p>
<pre>$ cd my-new-project/
$ git add -A
$ git status
$ git commit -m "added project files"
$ git push</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2011/12/21/importing-a-project-into-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Drush Make while ftp.drupal.org is down</title>
		<link>http://julianhigman.com/blog/2011/09/02/using-drush-make-while-ftp-drupal-org-is-down/</link>
		<comments>http://julianhigman.com/blog/2011/09/02/using-drush-make-while-ftp-drupal-org-is-down/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 11:53:50 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drush]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=255</guid>
		<description><![CDATA[The Drush Make utility downloads modules from ftp.drupal.org during the build &#8211; but the ftp.drupal.org site is currently down, which means Drush Make won&#8217;t work (and so our continuous integration has ground to a halt). There&#8217;s a fix for general Drush usage here: http://contrib.linalis.com/content/continuer-dutiliser-drush-quand-ftpdrupalorg-est-down That fix changes the download url to use drupal.org (which is <a href='http://julianhigman.com/blog/2011/09/02/using-drush-make-while-ftp-drupal-org-is-down/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>The Drush Make utility downloads modules from ftp.drupal.org during the build &#8211; but the ftp.drupal.org site is currently down, which means Drush Make won&#8217;t work (and so our continuous integration has ground to a halt).</p>
<p>There&#8217;s a fix for general Drush usage here: <a href="http://contrib.linalis.com/content/continuer-dutiliser-drush-quand-ftpdrupalorg-est-down">http://contrib.linalis.com/content/continuer-dutiliser-drush-quand-ftpdrupalorg-est-down</a></p>
<p>That fix changes the download url to use drupal.org (which is working) instead of ftp.drupal.org (which isn&#8217;t).</p>
<p>Unfortunately Drush Make uses it&#8217;s <em>own</em> download functions, so this doesn&#8217;t help.. Here&#8217;s my (very similar) hack to get the Drush Make downloads working..</p>
<p>Change line 367 in drush_make.drush.inc to the following:</p>
<pre>'url'  =&gt; str_replace('ftp.', '', $release['file']),</pre>
<p>(The file should be somewhere like /usr/share/drush/commands/drush_make)</p>
<p>And don&#8217;t forget to remove the hack when ftp.drupal.org comes back..</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2011/09/02/using-drush-make-while-ftp-drupal-org-is-down/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Enable trackpad coasting in Ubuntu 10.04</title>
		<link>http://julianhigman.com/blog/2011/04/04/enable-trackpad-coasting-in-ubuntu/</link>
		<comments>http://julianhigman.com/blog/2011/04/04/enable-trackpad-coasting-in-ubuntu/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 08:32:18 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=251</guid>
		<description><![CDATA[I like the way trackpad edge-scrolling allows you to &#8220;coast&#8221; (start scrolling with the edge of the trackpad, then release it, and the scrolling continues until you tap the trackpad again). It&#8217;s not enabled by default on Ubuntu 10.04, but here&#8217;s how to turn it on (put it in a startup script): xinput set-prop &#8211;type=float <a href='http://julianhigman.com/blog/2011/04/04/enable-trackpad-coasting-in-ubuntu/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I like the way trackpad edge-scrolling allows you to &#8220;coast&#8221; (start scrolling with the edge of the trackpad, then release it, and the scrolling continues until you tap the trackpad again).</p>
<p>It&#8217;s not enabled by default on Ubuntu 10.04, but here&#8217;s how to turn it on (put it in a startup script):</p>
<p>xinput set-prop &#8211;type=float &#8220;AlpsPS/2 ALPS DualPoint TouchPad&#8221; &#8220;Synaptics Coasting Speed&#8221; 1</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2011/04/04/enable-trackpad-coasting-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 and the &#8220;global&#8221; keyword</title>
		<link>http://julianhigman.com/blog/2010/11/05/php-5-3-and-the-global-keyword/</link>
		<comments>http://julianhigman.com/blog/2010/11/05/php-5-3-and-the-global-keyword/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 18:33:21 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=243</guid>
		<description><![CDATA[This had me stumped for a while &#8211; using some 3rd party code with PHP 5.3, the &#8220;global&#8221; keyword didn&#8217;t seem to work any more (references to the supposedly &#8220;global&#8221; variable from within functions always gave NULL).. You have to declare the variable as &#8220;global&#8221; before setting it in the outer scope &#8211; then it <a href='http://julianhigman.com/blog/2010/11/05/php-5-3-and-the-global-keyword/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>This had me stumped for a while &#8211; using some 3rd party code with PHP 5.3, the &#8220;global&#8221; keyword didn&#8217;t seem to work any more (references to the supposedly &#8220;global&#8221; variable from within functions always gave NULL)..</p>
<p>You have to declare the variable as &#8220;global&#8221; before setting it in the outer scope &#8211; then it works again.</p>
<p>So, this used to work (but doesn&#8217;t under PHP 5.3) :</p>
<pre>$util = new Utility();</pre>
<pre>global $util;</pre>
<pre>function show() {</pre>
<pre>global $util;</pre>
<pre>echo "$util-&gt;version";</pre>
<pre>}</pre>
<div>but if you swap the lines of the declaration of $utils, then it does work under PHP 5.3 :</div>
<div>
<div>
<pre>global $util;</pre>
</div>
<pre>$util = new Utility();</pre>
</div>
<div>
<pre>function show() {</pre>
<pre>global $util;</pre>
<pre>echo "$util-&gt;version";</pre>
<pre>}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2010/11/05/php-5-3-and-the-global-keyword/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installing Ruby Active Record on Ubuntu 10.04</title>
		<link>http://julianhigman.com/blog/2010/09/27/installing-ruby-active-record-on-ubuntu-10-04/</link>
		<comments>http://julianhigman.com/blog/2010/09/27/installing-ruby-active-record-on-ubuntu-10-04/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 20:06:30 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=226</guid>
		<description><![CDATA[I had to jump through a few hoops.. I tried the obvious &#8220;sudo gem install activerecord&#8221;, but it gave an error &#8211; it needs to install the i18n gem, but that needs rubygems version &#62;= 1.3.6, and I had rubygems 1.3.5. So I had to upgrade  rubygems first, which would normally be : sudo gem <a href='http://julianhigman.com/blog/2010/09/27/installing-ruby-active-record-on-ubuntu-10-04/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I had to jump through a few hoops..</p>
<p>I tried the obvious &#8220;sudo gem install activerecord&#8221;, but it gave an error &#8211; it needs to install the i18n gem, but that needs rubygems version &gt;= 1.3.6, and I had rubygems 1.3.5.</p>
<p>So I had to upgrade  rubygems first, which would normally be :</p>
<pre>sudo gem update --system</pre>
<p>but that reports that it&#8217;s been disabled on Debian, and directs you to use apt-get instead (which doesn&#8217;t have a better version). So I had to use the gem-updater gem:</p>
<pre>sudo gem install rubygems-update</pre>
<div>
<pre>sudo update_rubygems</pre>
</div>
<div>after which I had rubygems 1.3.7. Then I could get active record:</div>
<pre>sudo gem install activerecord</pre>
<p>I still needed to get the mysql gem installed, which in turn needed the libmysql-dev stuff installed</p>
<div id="_mcePaste">sudo apt-get install libmysqlclient15-dev</div>
<div id="_mcePaste">sudo gem install mysql</div>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2010/09/27/installing-ruby-active-record-on-ubuntu-10-04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu and CloudInit on Amazon EC2</title>
		<link>http://julianhigman.com/blog/2010/09/17/ubuntu-and-cloudinit-on-amazon-ec2/</link>
		<comments>http://julianhigman.com/blog/2010/09/17/ubuntu-and-cloudinit-on-amazon-ec2/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 11:02:00 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=211</guid>
		<description><![CDATA[Alestic and Canonical have released new Ubuntu AMIs for EC2 &#8211; the EBS version in the eu-west-1 region has AMI ID &#8220;ami-38bf954c&#8221;, and the source is &#8220;099720109477/ebs/ubuntu-images/ubuntu-lucid-10.04-i386-server-20100827&#8243;. Ubuntu images support CloudInit, which runs scripts on startup to allow you to configure the server (set up ssh keys, update the repos etc). There&#8217;s a load of different <a href='http://julianhigman.com/blog/2010/09/17/ubuntu-and-cloudinit-on-amazon-ec2/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Alestic and Canonical have released new <a href="http://alestic.com/2010/08/ec2-ami-canonical">Ubuntu AMIs for EC2</a> &#8211; the EBS version in the eu-west-1 region has AMI ID &#8220;ami-38bf954c&#8221;, and the source is &#8220;099720109477/ebs/ubuntu-images/ubuntu-lucid-10.04-i386-server-20100827&#8243;.</p>
<p>Ubuntu images support CloudInit, which runs scripts on startup to allow you to configure the server (set up ssh keys, update the repos etc). There&#8217;s a load of different ways to specify what should get run (see <a href="https://help.ubuntu.com/community/CloudInit">https://help.ubuntu.com/community/CloudInit</a> for full details).</p>
<p>One of the simplest is just to give it a script in the User Data, like this:</p>
<pre>#!/bin/sh
echo "Hello World.  The time is now $(date -R)!" | tee /root/output.txt
EOF</pre>
<p>It runs as the root user, so you can do pretty much anything you want to configure the box.</p>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2010/09/17/ubuntu-and-cloudinit-on-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Coaching &#8211; new book from Rachel Davies</title>
		<link>http://julianhigman.com/blog/2009/08/10/agile-coaching-new-book-from-rachel-davies/</link>
		<comments>http://julianhigman.com/blog/2009/08/10/agile-coaching-new-book-from-rachel-davies/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 21:31:44 +0000</pubDate>
		<dc:creator>jhigman</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://julianhigman.com/blog/?p=146</guid>
		<description><![CDATA[I&#8217;ve just been reading the excellent new book called Agile Coaching by Rachel Davies and Liz Sedley. It&#8217;s the result of many years spent coaching teams to be agile, and the cumulative experience really shows. Writing about agile processes often seems to get lost in an abstract discussion of the nature of processes &#8211; analysing <a href='http://julianhigman.com/blog/2009/08/10/agile-coaching-new-book-from-rachel-davies/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just been reading the excellent new book called <a title="Agile Coaching" href="http://www.amazon.co.uk/Agile-Coaching-Rachel-Davies/dp/1934356433" target="_blank">Agile Coaching</a> by Rachel Davies and Liz Sedley.</p>
<p>It&#8217;s the result of many years spent coaching teams to be agile, and the cumulative experience really shows.</p>
<p>Writing about agile processes often seems to get lost in an abstract discussion of the nature of processes &#8211; analysing the team as a Complex Adaptive System and so on. Rachel and Liz comprehensively avoid such mistakes, and keep their advice firmly rooted in practical examples from their own real-world knowledge.</p>
<p>So, at the start of the book, they describe a generic agile process (usually a blend of XP, Scrum, Lean etc), and then use that as the basis for examining in detail how the process really works and how to coach people in using it.</p>
<p>The emphasis is always on the pragmatic application of the process, illustrated with plenty of examples and stories, which makes it very easy to relate to the daily experience  of working with agile teams.  Each chapter ends with a checklist of bullet points to summarise and reinforce the key messages.</p>
<p>The first section of the book describes the basics of the coach&#8217;s role &#8211; how to get started, how to work with people and lead change, how to build a team, and when to move on.  Some of this would probably be just as relevant  to coaching any activity, but much of it is specifically about the issues in applying agile principles to software development.  In the chapters about working with other people there&#8217;s plenty of good advice &#8211; how to give feedback, resolve conflict and so on &#8211; that would make great reading for anyone who has to work with other people in ANY environment. I particularly like the bit about &#8220;Emotional Outbursts in Meetings&#8221;..!</p>
<p>The next section walks the reader through the iteration processes in more detail. There are chapters covering all the main elements of an iteration, including standups, stories and story cards, acceptance tests, estimating and planning,  and keeping progress visible. As usual, there are plenty of hints and tips for coping with problems &#8211; ideas for what to do when the team is dispersed, or work at different hours, or just hate planning.</p>
<p>The third section focuses on issues of quality. There&#8217;s lots of techie detail here that&#8217;ll be familiar to anyone who&#8217;s worked in an agile development team &#8211; discussion of unit testing, continuous integration, pair programming and other practices. But the key focus is on how all these practices work to the end goal of running, tested, maintainable software. And again, some pointers for techniques to try when things are difficult.</p>
<p>Finally, there are some chapters on listening to feedback &#8211; in terms of process, that includes demos for external feedback, and retrospectives for internal feedback. Retrospectives in particular can be quite difficult to get right, and there&#8217;s a range of techniques to try as well as a checklist of &#8220;Retrospective Smells&#8221; (like &#8220;History Lesson&#8221; and &#8220;Hot Air&#8221;) that can indicate that the retrospective isn&#8217;t working as well as it should.   The &#8221;Growing You&#8221; chapter gives some ideas for planning your own personal development.</p>
<div>Throughout the book, the tone that comes across is one of calm, intelligent guidance, and a very humane approach to dealing with everyone involved in an agile project (including yourself).</div>
<p>It&#8217;s also a great grab-bag of hints and tips, and reminders of key principles.</p>
<p>There are plenty of pointers scattered throughout the book to further reading, from <a href="http://www.myersbriggs.org/" target="_blank">personality types</a> to <a href="http://www.limitedwipsociety.org/" target="_blank">Kanban</a> to <a href="http://c2.com/cgi/wiki?PairProgrammingPingPongPattern" target="_blank">pair programming</a>. And as for the stories and examples that illustrate the chapters, having worked with Rachel at <a title="Connextra" href="http://connextra.com/aboutUs/xp_approach.htm" target="_blank">Connextra</a>, I recognise some of them, and can vouch for the fact that they&#8217;re genuine..</p>
<div>This is not just a book for coaches though &#8211; anyone who works in an agile</div>
<div>team will find lots here to help with understanding the process more deeply. For those just starting out with agile, it&#8217;s a great way to learn what it feels like to be in a properly functioning agile team. And for those who have been doing it for years, there are fresh ways to look at the process, and some inspirational advice for when times are rough.</div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://julianhigman.com/blog/2009/08/10/agile-coaching-new-book-from-rachel-davies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

