<?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>andy goundry &#187; programming</title>
	<atom:link href="http://www.andygoundry.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andygoundry.com</link>
	<description>many things web</description>
	<lastBuildDate>Tue, 23 Mar 2010 01:53:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tiny post &#8211; how to use .htaccess to redirect visitors</title>
		<link>http://www.andygoundry.com/2010/03/22/how-to-use-htaccess-to-redirect-visitors/</link>
		<comments>http://www.andygoundry.com/2010/03/22/how-to-use-htaccess-to-redirect-visitors/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:10:52 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=468</guid>
		<description><![CDATA[redirect 301 /help_decide/index.html http://showcase.health2works.com/help_decide/Homepage.html
Damn, it&#8217;s been ages since i&#8217;ve posted. This is a tiny one that is simple yet very useful.
The Situation
I have a Napkee site that consists of a bunch of html files linked together. This was naturally created from a set of Balsamiq screens. Within these Balsamiq screens was a screen called &#8216;Homepage&#8217; [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">redirect 301 /help_decide/index.html http://showcase.health2works.com/help_decide/Homepage.html</div>
<p>Damn, it&#8217;s been ages since i&#8217;ve posted. This is a tiny one that is simple yet very useful.</p>
<p><strong>The Situation</strong></p>
<p>I have a Napkee site that consists of a bunch of html files linked together. This was naturally created from a set of Balsamiq screens. Within these Balsamiq screens was a screen called &#8216;Homepage&#8217; (not index, because that would have been machine friendly but user unfriendly). So, on Napkee export, no index.html file had been created, which is just messy when sending out links to the Napkee screens because i didn&#8217;t want to include Homepage.html in the link.</p>
<p><strong>The Need</strong></p>
<p>I wanted to redirect all requests for http://www.website.com/napkee_mockup to http://www.website.com/napkee_mockup/Homepage.html</p>
<p><strong>The Options</strong></p>
<ul>
<li><strong>[<span style="color: #ff0000;">Bad</span>] An error page</strong>: Not an option so i&#8217;ll say no more about it.</li>
<li><strong><strong>[<span style="color: #ff0000;">Bad</span>] </strong>A Meta Refresh</strong>, where the following code is added to the Meta tags within the file Head. Again this was not an option as it gives the redirect task to the end user&#8217;s browser.</li>
</ul>
<blockquote><p>&lt;META HTTP-EQUIV=&#8221;refresh&#8221; content=&#8221;0;URL=http://www.new.com/new.htm&#8221;&gt;<br />
&lt;META NAME=&#8221;ROBOTS&#8221; CONTENT=&#8221;NOINDEX, NOFOLLOW&#8221;&gt;</p></blockquote>
<ul>
<li><strong><strong>[<span style="color: #ff0000;">Bad</span>] </strong>JavaScript Refresh</strong>: Too ugly to even paste the code in here, so i won&#8217;t bother. This is again bad because you&#8217;re forcing the user to not only do the redirecting for you, but you&#8217;re also demanding that they use JavaScript to do it. Not very friendly.</li>
<li><strong><strong>[<span style="color: #008000;">Good</span>] </strong>.htaccess redirect</strong>: This is the only correct way to do it.</li>
</ul>
<p><strong>The Solution</strong></p>
<blockquote><p>cd [www]/napkee_mockup</p>
<p>vim .htaccess</p>
<p><strong><span style="font-weight: normal;">add the following: </span></strong></p>
<p><strong><span style="font-weight: normal;">redirect 301 /napkee_mockup/index.html http://website.com/napkee_mockup/Homepage.html</span></strong></p></blockquote>
<div>The key is to ensure that the FROM url is relative to the web application root (so you have to include /napkee_mockup/) and you shouldn&#8217;t include the domain details (http://website.com)</div>
<div>
<p>I hope this helps a little.</p></div>
<p>There&#8217;s more good reading at <a href="http://www.tamingthebeast.net/articles3/spiders-301-redirect.htm">http://www.tamingthebeast.net/articles3/spiders-301-redirect.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2010/03/22/how-to-use-htaccess-to-redirect-visitors/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to use thor with the latest version of merb</title>
		<link>http://www.andygoundry.com/2009/11/26/using-thor-with-a-merb-app-and-merb-version/</link>
		<comments>http://www.andygoundry.com/2009/11/26/using-thor-with-a-merb-app-and-merb-version/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 14:45:46 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Merb]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[thor]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=463</guid>
		<description><![CDATA[The latest version of thor (0.12.0) doesn&#8217;t work with the latest version of merb (1.0.15).
To use thor with your merb 1.0.15 app, you need to install thor -v0.9.9 and then follow the instructions on this page: http://wiki.merbivore.com/deployment/bundling
]]></description>
			<content:encoded><![CDATA[<p>The latest version of thor (0.12.0) doesn&#8217;t work with the latest version of merb (1.0.15).</p>
<p>To use thor with your merb 1.0.15 app, you need to install thor -v0.9.9 and then follow the instructions on this page: <a href="http://wiki.merbivore.com/deployment/bundling">http://wiki.merbivore.com/deployment/bundling</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/11/26/using-thor-with-a-merb-app-and-merb-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merb Gem Cleanup</title>
		<link>http://www.andygoundry.com/2009/11/25/merb-gem-cleanup/</link>
		<comments>http://www.andygoundry.com/2009/11/25/merb-gem-cleanup/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 18:33:31 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[DataMapper]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=461</guid>
		<description><![CDATA[It seems to be a common issue for us Merbists, who depend on multiple Gems for merb to play nicely to get into a bit of a mess as gems are updated.
So, at times a cleanup is in order. Here is what i&#8217;ve done to cleanup my merb setup:

$ sudo gem update --system
$ gem search [...]]]></description>
			<content:encoded><![CDATA[<p>It seems to be a common issue for us Merbists, who depend on multiple Gems for merb to play nicely to get into a bit of a mess as gems are updated.</p>
<p>So, at times a cleanup is in order. Here is what i&#8217;ve done to cleanup my merb setup:</p>
<blockquote>
<pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 12px; color: #000000; overflow-x: auto; overflow-y: auto; background-color: #f3f3f3; padding: 1em;">$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> update --system
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> search --no-version merb | grep merb | xargs <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> un<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">install</span> -a # NOTE: removes all old version of merb
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> search --no-version dm | grep dm | xargs <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> un<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">install</span> -a # NOTE: removes all old version of data_mapper
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> search --no-version data_objects | grep data_objects | xargs <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> un<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">install</span> -a # NOTE: removes all old version of data_objects
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> sources -c
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> rm PATH_TO_<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">GEM</span>S/cache/merb* # PATH_TO_<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">GEM</span>S is the path to your ruby<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span>s <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">install</span>.  Mine is /usr/lib/ruby/<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span>s/1.8
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> rm PATH_TO_<span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">GEM</span>S/cache/dm*
$ <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">sudo</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">gem</span> <span style="color: #000000; background-color: #ffff99; padding: 0px; margin: 0px;">install</span> -r merb</pre>
</blockquote>
<p>This was taken from the meb installation instructions at: <a href="http://wiki.merbivore.com/howto/installation/gems">http://wiki.merbivore.com/howto/installation/gems</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/11/25/merb-gem-cleanup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Call TextMate from command line</title>
		<link>http://www.andygoundry.com/2009/09/07/call-textmate-from-command-line/</link>
		<comments>http://www.andygoundry.com/2009/09/07/call-textmate-from-command-line/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 12:15:04 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[TextMate]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=445</guid>
		<description><![CDATA[A really neat feature of TextMate is the ability to call it from the command line and pass a directory or file as the object to open. Works great.
For this to work, you need to run a quick one-liner on the command line:
sudo ln -s /Applications/TextMate.app/Contents/Resources/mate /usr/local/bin/mate
Once done, you can call mate and pass it [...]]]></description>
			<content:encoded><![CDATA[<p>A really neat feature of TextMate is the ability to call it from the command line and pass a directory or file as the object to open. Works great.</p>
<p>For this to work, you need to run a quick one-liner on the command line:</p>
<blockquote><p>sudo ln -s /Applications/TextMate.app/Contents/Resources/mate /usr/local/bin/mate</p></blockquote>
<p>Once done, you can call mate and pass it any object you want to open, such as:</p>
<blockquote><p>$ mate my_rails_app</p></blockquote>
<p>and it opens the entire directory as if it were a TextMate project.</p>
<p>Lots more detail available here: <a href="http://manual.macromates.com/en/using_textmate_from_terminal.html">http://manual.macromates.com/en/using_textmate_from_terminal.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/09/07/call-textmate-from-command-line/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using Cucumber, Webrat and Selenium to test ajax form field validations</title>
		<link>http://www.andygoundry.com/2009/09/04/using-cucumber-webrat-and-selenium-to-test-ajax-form-field-validations/</link>
		<comments>http://www.andygoundry.com/2009/09/04/using-cucumber-webrat-and-selenium-to-test-ajax-form-field-validations/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 18:11:09 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Webrat]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=439</guid>
		<description><![CDATA[I have an app that fires an ajax request on a form field to validate its contents when I take focus off the field.
I am also using Cucumber, Webrat and Selenium for my integration tests.
I needed my integration tests to test the Ajax responses and the tests weren&#8217;t receiving a response from the Ajax requests.
The [...]]]></description>
			<content:encoded><![CDATA[<p>I have an app that fires an ajax request on a form field to validate its contents when I take focus off the field.</p>
<p>I am also using Cucumber, Webrat and Selenium for my integration tests.</p>
<p>I needed my integration tests to test the Ajax responses and the tests weren&#8217;t receiving a response from the Ajax requests.</p>
<p><strong>The Problem</strong></p>
<p>I found that by simply completing the web form, the ajax request was not being fired and my test was therefore failing when i checked for the existance of the Ajax response. It soon became clear that selenium doesn&#8217;t really interact with the form in the sense of selecting fields and entering values; It simply enters values. As such, the Ajax request was not firing and my test was failing.</p>
<p><strong>The Solution</strong></p>
<p>The solution is Selenium&#8217;s fireEvent method, which you can pass a form field id and the blur method:</p>
<blockquote><p>selenium_session.fireEvent(&#8221;field&#8221;, &#8220;blur&#8221;);</p></blockquote>
<p>In Webrat, this is ever simpler:</p>
<blockquote><p>fire_event(&#8221;field&#8221;,&#8221;blur&#8221;)</p></blockquote>
<p>On using this in a Cucumber step, the ajax is fired as the blur command tells the browser to take focus off the field.</p>
<p>Lovely!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/09/04/using-cucumber-webrat-and-selenium-to-test-ajax-form-field-validations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting up Merb, Cucumber and Webrat (and friends) on Snow Leopard</title>
		<link>http://www.andygoundry.com/2009/09/04/setting-up-merb-cucumber-and-webrat-on-snow-leopard-some-good-some-bad/</link>
		<comments>http://www.andygoundry.com/2009/09/04/setting-up-merb-cucumber-and-webrat-on-snow-leopard-some-good-some-bad/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 14:36:06 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Webrat]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=428</guid>
		<description><![CDATA[
My upgrade to Snow Leopard killed my Merb, Cucumber and Webrat setup so i had to start afresh. That was the bad. The good is that some manual hacks that were required in Leopard are no longer necessary, meaning I can rely on direct gem installations.
Here&#8217;s what i did:

Install Ruby and Gems
Follow instructions on http://hivelogic.com/articles/compiling-ruby-rubygems-and-rails-on-snow-leopard/
Install [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>My upgrade to Snow Leopard killed my Merb, Cucumber and Webrat setup so i had to start afresh. That was the bad. The good is that some manual hacks that were required in Leopard are no longer necessary, meaning I can rely on direct gem installations.</p>
<p>Here&#8217;s what i did:</p>
<ol>
<li><strong>Install Ruby and Gems<br />
<span style="font-weight: normal; ">Follow instructions on <a href="http://hivelogic.com/articles/compiling-ruby-rubygems-and-rails-on-snow-leopard/">http://hivelogic.com/articles/compiling-ruby-rubygems-and-rails-on-snow-leopard/</a></span></strong></li>
<li><strong>Install merb, rspec, cucumber, merb_cucumber and mongrel and dependencies<br />
<span style="font-weight: normal; ">sudo gem install merb rspec cucumber roman-merb_cucumber mongrel term-ansicolor treetop diff-lcs nokogiri do_sqlite3</span></strong></li>
<li><strong>Install webrat<br />
<span style="font-weight: normal;">sudo gem install hoe hpricot webrat</span></strong></li>
<li><strong><span style="font-weight: normal;"><strong>Fix Firefox bug with Snow Leopard<br />
<span style="font-weight: normal;">For some reason the libsqlite3.dylib  library in FireFox 3.5.2 is out of date and breaks cucumber under Snow Leopard. Thankfully, it&#8217;s a simple fix:<br />
mv /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib.orig<br />
cp /usr/lib/libsqlite3.dylib /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib</span></strong></span></strong></li>
<li><strong><span style="font-weight: normal;"><strong><span style="font-weight: normal;"><strong>Install Selenium<br />
<span style="font-weight: normal;">sudo gem install Selenium<br />
sudo gem install selenium-client</span></strong></span></strong></span></strong></li>
<li><strong>Install the textmate cucumber bundle<br />
<span style="font-weight: normal;"><a href="http://github.com/bmabey/cucumber-tmbundle/tree/master">http://github.com/bmabey/cucumber-tmbundle/tree/master</a></span></strong></li>
</ol>
<p><strong>Deprecated Instructions on Snow Leopard that were required on Leopard</strong></p>
<p>The following ugly hacks were required on Leopard with it&#8217;s default Ruby installation. These are no longer required (at least on my machine) on Snow Leopard:</p>
<p><span style="text-decoration: underline;">Manual hack of Selenium</span></p>
<p>http://wiki.github.com/aslakhellesoy/cucumber/setting-up-selenium</p>
<p>As the instructions recommended replacing the Selemium RC jar file () in the installed gem with one from the Selenium website, i had to find out where the gem had installed. Thankfully, gem -h pointed me toward gem help commands and from there i ran gem environment &#8211; This told me where gems are installed locally and i found that Selemium RC had been installed into /Library/Ruby/Gems/1.8/gems/Selenium-1.1.14/ I replaced as advised and then ran selenium from within the app root and all worked fine, using the replacement. I then downloaded and ran the test selenium code from http://github.com/aslakhellesoy/cucumber/tree/master/examples/selenium running selenium in a different console and then running cucumber examples/selenium/features/ . It worked a treat and booted up selenium as required. Great!</p>
<p><span style="text-decoration: underline;">Manual hack installation of webrat</span></p>
<p>Download http://github.com/gwynm/webrat/tree/master tar file. Git clone doesn&#8217;t work</p>
<p>sudo gem install hoe hpricot<br />
cd downloaded and untarred file<br />
rake gem<br />
sudo gem install pkg/webrat-0.2.1.gem</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/09/04/setting-up-merb-cucumber-and-webrat-on-snow-leopard-some-good-some-bad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Awesome tools for rapid UX prototypes &#8211; Letting you focus on the solution!</title>
		<link>http://www.andygoundry.com/2009/06/18/awesome-tools-for-rapid-ux-prototypes/</link>
		<comments>http://www.andygoundry.com/2009/06/18/awesome-tools-for-rapid-ux-prototypes/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 15:39:52 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[gtd]]></category>
		<category><![CDATA[portal]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=404</guid>
		<description><![CDATA[Comic Life is great for creating story flows in a rough and ready way, with a little style.
Balsamiq is an excellent tool for rapidly creating purposefully low-fi wireframe mockups
Napkee enables you to import Balsamiq mockups and turn them into HTML prototypes! Lovely!
Axure is excellent for rapidly creating interactive prototypes.
Liferay Portal is a pretty awesome portlet [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://plasq.com/comiclife/">Comic Life</a> is great for creating story flows in a rough and ready way, with a little style.</p>
<p><a href="http://www.balsamiq.com/demos/mockups/Mockups.html">Balsamiq</a> is an excellent tool for rapidly creating purposefully low-fi wireframe mockups</p>
<p><a href="http://www.napkee.com/">Napkee</a> enables you to import Balsamiq mockups and turn them into HTML prototypes! Lovely!</p>
<p><a href="http://www.axure.com/">Axure</a> is excellent for rapidly creating interactive prototypes.</p>
<p><a href="http://www.liferay.com/web/guest/products/portal">Liferay Portal</a> is a pretty awesome portlet container that, with a bit of UX (HTML, CSS and JSP) hacking, enables you to rapidly produce fully functional portals. It comes with a vast array of portlets out of the box, saving you a whole load of time.</p>
<p><a href="http://jqueryui.com">JQueryUI</a> is a lovely toolkit for quickly developing interactive prototypes. I&#8217;m not completely convinced by it as a production tool (heavy JS? but i could be wrong), but excellent for prototyping</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/06/18/awesome-tools-for-rapid-ux-prototypes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Important iPhone Push Notification consideration</title>
		<link>http://www.andygoundry.com/2009/04/16/important-iphone-push-notification-consideration/</link>
		<comments>http://www.andygoundry.com/2009/04/16/important-iphone-push-notification-consideration/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 09:45:32 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=381</guid>
		<description><![CDATA[A point worth noting by all iPhone developers considering the exciting opportunities of cloud-side iPhone app notifications &#8211; how much will it cost you to provide this service?
An important point to consider.
]]></description>
			<content:encoded><![CDATA[<p>A point worth noting by all iPhone developers considering the exciting opportunities of cloud-side iPhone app notifications &#8211; <a href="http://www.iphonematters.com/article/push_notification_will_cost_iphone_developers_992/#When:21:00:00Z">how much will it cost you to provide this service?</a></p>
<p>An important point to consider.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/04/16/important-iphone-push-notification-consideration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presenting BDD Story-driven delivery to project and account managers</title>
		<link>http://www.andygoundry.com/2009/04/15/presenting-bdd-story-driven-delivery-to-project-and-account-managers/</link>
		<comments>http://www.andygoundry.com/2009/04/15/presenting-bdd-story-driven-delivery-to-project-and-account-managers/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 18:16:45 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=351</guid>
		<description><![CDATA[Today, i had the true pleasure of presenting my view of how BDD stories offer real business value to project delivery, quality and to the lives of everyone on a software delivery project. 
Part 1: Collectively clarify what happens on projects now (on projects that do not use stories)
It was a highly interactive session and [...]]]></description>
			<content:encoded><![CDATA[<p>Today, i had the true pleasure of presenting my view of how BDD stories offer real business value to project delivery, quality and to the lives of everyone on a software delivery project. </p>
<p><strong>Part 1: Collectively clarify what happens on projects now (on projects that do not use stories)</strong></p>
<p>It was a highly interactive session and i first asked attendees to collectively draw on a whiteboard the project process as they saw it, with all of the project&#8217;s actors, products and interactions.</p>
<p>What was drawn resembled a kind of mashup of a <a href="http://www.agilemodeling.com/artifacts/activityDiagram.htm">UML activity diagram with swim lanes</a> &#038; a gantt chart. It showed what the individual actors in the process did and when, and who fed into who in the process.</p>
<p><strong>Part 2: Clarify what documents are written and the associated risks and costs</strong></p>
<p>When the whiteboard was complete, I asked the attendees to consider a number of things:</p>
<ol>
<li>At what points during the process are documents produced and by who?</li>
<li>Of those documents produced, which are directly focused on the business and user requirements?</li>
<li>Of the many producers of those documents, which of these producers had their focus on the business and user requirements?</li>
<li>Of the many documents produced, which were open to interpretation and translation?</li>
<li>What are the perceived risks of having so many documents and periods of documentation translation?</li>
</ol>
<p>When this work was complete, a few points became clear to the group:</p>
<ol>
<li>The project team, as defined on the whiteboard, was greatly separated into areas of expertise and each was concerned about their area of expertise</li>
<li>Interactions between actors were mostly through written documents</li>
<li>Few actors following this project process retained a direct focus on the business and end user requirements</li>
<li>A lot of documentation was being written and much of it was being duplicated, at times to protect actors within the process</li>
<li>Vast amounts of document interpretation and translation was going on to produce each document</li>
</ol>
<p><strong>Part 3: Consider stories</strong></p>
<p>After this part of the session was complete, i gave some examples of the wonderfully simple <a href="http://dannorth.net/introducing-bdd">story DSL</a> and then suggested that many of these documents could be replaced by stories and scenarios:</p>
<ol>
<li>I explained that stories can be used to clarify both high-level requirements and detailed solution definitions. I described how stories can be expanded through the use of scenarios.</li>
<li>I described how everyone on the project, including the client, can understand the wonderfully simple DSL and contribute to the bank of stories.</li>
<li>I then came in with the ace <img src='http://www.andygoundry.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Stories can be used to drive automated browser tests! Man, <strong>they fell off their seats at the point!</strong></li>
</ol>
<p>It was an awesome session. A lot was discussed and understood.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/04/15/presenting-bdd-story-driven-delivery-to-project-and-account-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hudson, Sonar &amp; Ruby: Continuous integration of a Rails app</title>
		<link>http://www.andygoundry.com/2009/04/15/hudson-sonar-continuous-build-and-integration-of-a-rails-app/</link>
		<comments>http://www.andygoundry.com/2009/04/15/hudson-sonar-continuous-build-and-integration-of-a-rails-app/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 17:10:52 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.andygoundry.com/?p=342</guid>
		<description><![CDATA[I&#8217;m currently playing (well battling at times &#8211; VMWare can be an arse at times &#8211; or maybe i&#8217;ve been away for too long) with plugging a rails app into Hudson and Sonar. 
My intention is to have the Rails app on a separate server from the Hudson server and have the Rails app return [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently playing (well battling at times &#8211; VMWare can be an arse at times &#8211; or maybe i&#8217;ve been away for too long) with plugging a rails app into <a href="https://hudson.dev.java.net/">Hudson</a> and <a href="http://sonar.codehaus.org/">Sonar</a>. </p>
<p>My intention is to have the Rails app on a separate server from the Hudson server and have the Rails app return Hudson-friendly XML from <a href="http://rspec.info/">RSpec</a> and <a href="http://github.com/aslakhellesoy/cucumber/tree/master">Cucumber</a> tests. When i get this to work, it&#8217;ll enable me to roll this out at work, with a central Hudson server (perhaps) that interacts with multiple app servers of various technologies and, along with the wonders of Sonar, gives a view into code test coverage, pass rate and complexity. I feel that i might struggle convincing Sonar to play with Ruby, but we&#8217;ll see.</p>
<p><strong>Why Hudson?</strong> </p>
<p>To be completely honest, at work, i didn&#8217;t make that decision and am yet to chase down exactly why it was chosen over <a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a>, but I completely trust those that made the decision on their project. I&#8217;m a big believer in standardising and am as such following suit and trying out Hudson. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.andygoundry.com/2009/04/15/hudson-sonar-continuous-build-and-integration-of-a-rails-app/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
