<?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>Wirestorm</title>
	<atom:link href="http://wirestorm.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://wirestorm.net/blog</link>
	<description>Ray Hilton&#039;s blog about interesting technology</description>
	<lastBuildDate>Mon, 12 Dec 2011 11:07:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2-bleeding</generator>
		<item>
		<title>Chromatic</title>
		<link>http://wirestorm.net/blog/2011/12/12/chromatic/</link>
		<comments>http://wirestorm.net/blog/2011/12/12/chromatic/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 10:53:28 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=189</guid>
		<description><![CDATA[<img src="http://rayh.com.au/clients/chromatic/mzl.tesntimv.175x175-75.jpg" class="app-icon"/>

A colourful, touch-reactive toy. Just touch the screen and watch the big, bright particles light up the screen and react to yours swipes. Multiple touches introduce a centre-of-gravity that causes your particles to swirl around.]]></description>
			<content:encoded><![CDATA[<p>A colourful, touch-reactive toy. Just touch the screen and watch the big, bright particles light up the screen and react to yours swipes. Multiple touches introduce a centre-of-gravity that causes your particles to swirl around.</p>
<p>This was a personal project where I brought together some knowledge of OpenGL, from my days at digital agencies in London, on to modern devices such as the iPhone 4S and the iPad 2.  This app is very graphically intensive and involves plotting a large number of particles using a meta-ball technique.  The main aim of this app was to show that a seemingly complex app could be designed, built and deployed in under 2 months by constraining scope and focusing on user experience. </p>
<p>The app has just been released and is available on the <a href="http://itunes.apple.com/us/app/chromatic/id485629975?ls=1&#038;mt=8">iTunes App Store</a>.</p>
<p><img src="http://rayh.com.au/clients/chromatic/screen1.png" class="portrait large" alt="Screenshot 1"/></p>
<p><img src="http://rayh.com.au/clients/chromatic/screen2.png" class="portrait large" alt="Screenshot 2"/></p>
<p><img src="http://rayh.com.au/clients/chromatic/screen3.png" class="portrait large" alt="Screenshot 3"/></p>
<p><img src="http://rayh.com.au/clients/chromatic/screen4.png" class="portrait large" alt="Screenshot 4"/></p>
<p><img src="http://rayh.com.au/clients/chromatic/screen5.png" class="portrait large" alt="Screenshot 5"/></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/12/12/chromatic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Git to Deploy</title>
		<link>http://wirestorm.net/blog/2011/10/13/using-git-to-deploy/</link>
		<comments>http://wirestorm.net/blog/2011/10/13/using-git-to-deploy/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 02:50:30 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=183</guid>
		<description><![CDATA[I&#8217;ve recently started using Git to deploy to my servers. Anyone who has used Heroku would be familiar with this technique and it feels kinda cool to be able to think of your different environments as just git remotes. I can&#8217;t vouch for the appropriateness of this technique in the general case, but I just [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started using Git to deploy to my servers.  Anyone who has used Heroku would be familiar with this technique and it feels kinda cool to be able to think of your different environments as just git remotes.  I can&#8217;t vouch for the appropriateness of this technique in the general case, but I just wanted to make a note on what I&#8217;ve found to work for me.  Hopefully, others may find this useful.</p>
<p>So, I use GitHub as my main source code repository, but I set up a second repository on the server I want to deploy to, normally in my home directory.  First create an empty Git repo:</p>
<pre class="brush: bash">
$ git init --bar ~/git/my-repo.git
</pre>
<p>To trigger a deployment on a push, we define a post-receive hook in this new repository.  Hooks allow the you took invoke behaviour on a variety of git events, in this case we are interested in when the repository has successfully received a push.</p>
<pre class="brush: bash">
$ vi ~/git/my-repo.git/hooks/post-receive
</pre>
<p>This is just an example, but the contents of the post-receive hook might look like this for a rack/passenger based web application:</p>
<pre class="brush: bash">
#!/bin/bash

cd /var/ww/my-site
unset GIT_DIR
GIT_WORK_TREE=/var/ww/my-site git pull
GIT_WORK_TREE=/var/ww/my-site git reset --hard
GIT_WORK_TREE=/var/ww/my-site git submodule update -i
bundle install
touch tmp/restart.txt
</pre>
<p>Of course, this file can contain whatever you want, just make sure you set the executable bit on the file:</p>
<pre class="brush: bash">
$ chmod +x ~/git/my-repo.git/hooks/post-receive
</pre>
<p>All that remains is to push your local repository to the new git repo on your server:</p>
<pre class="brush: bash">
$ git remote add prod ray@my-server.com:~/git/my-repo.git
$ git push prod master
</pre>
<p>This is just a simple example, but because you are executing a script on the server, you can basically perform any functionality you like.  I don&#8217;t know whether this would be a good idea in a large-scale production environment, but the key here is to make the deployments as simple and easy as possible to encourage smaller and more regular changes.   Backing it with git enables a basic form of rollback, but anything that is not controlled by git, i.e. database schema state, will still need to be managed separately.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/10/13/using-git-to-deploy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PlayUp</title>
		<link>http://wirestorm.net/blog/2011/10/12/playup/</link>
		<comments>http://wirestorm.net/blog/2011/10/12/playup/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 12:18:47 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=160</guid>
		<description><![CDATA[<img src="http://rayh.com.au/clients/playup/mzm.xazfjssh.175x175-75.jpg" class="app-icon"/>

<a href="http://playup.com/us/">PlayUp</a> is a Melbourne-based startup who are bringing sports and social networking together.  I, along with some of the top names in development in Melbourne, were brought together to work on the iPhone app.]]></description>
			<content:encoded><![CDATA[<p><a href="http://playup.com/us/">PlayUp</a> is a Melbourne-based startup who are bringing sports and social networking together.  I, along with some of the top names in development in Melbourne, were brought together to work on the iPhone app.  The app has just been released and is available on the <a href="http://itunes.apple.com/us/app/playup/id449546432?mt=8">iTunes App Store</a>.</p>
<p><img src="http://rayh.com.au/clients/playup/mzl.iztjysys.320x480-75.jpg" class="portrait large" alt="Home screen"/></p>
<p><img src="http://rayh.com.au/clients/playup/mzl.adokahuw.320x480-75.jpg" class="portrait large" alt="Add friends"/></p>
<p><img src="http://rayh.com.au/clients/playup/mzl.jxzqtzic.320x480-75.jpg" class="portrait large" alt="View a match"/></p>
<p><img src="http://rayh.com.au/clients/playup/mzl.thdzvefa.320x480-75.jpg" class="portrait large" alt="Chat with friends"/></p>
<p><img src="http://rayh.com.au/clients/playup/mzl.zdhkcudk.320x480-75.jpg" class="portrait large" alt="View live matches"/></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/10/12/playup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control Xcode builds from Ruby</title>
		<link>http://wirestorm.net/blog/2011/10/12/control-xcode-builds-from-ruby/</link>
		<comments>http://wirestorm.net/blog/2011/10/12/control-xcode-builds-from-ruby/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 05:13:49 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=156</guid>
		<description><![CDATA[Previously I had created an Xcode plugin for Hudson to allow you to configure and invoke builds directly. Although this worked for some cases, there are a few projects where the build process is more complex or non-standard enough to force me back to scripting things manually. Rather than update the plugin to try and [...]]]></description>
			<content:encoded><![CDATA[<p>Previously I had created an Xcode plugin for Hudson to allow you to configure and invoke builds directly.  Although this worked for some cases, there are a few projects where the build process is more complex or non-standard enough to force me back to scripting things manually.  Rather than update the plugin to try and cope with every esoteric use case, I decided to flip things around and simple create a ruby-wrapper for Xcode.  This allows me to take what i need and create custom Rakefiles to control the build process.  The aim of <a href="http://github.com/rayh/xcoder" title="xcoder on github">this gem</a> is provide an object model for navigating the project structure and be able to invoke some common types of modifications.  I aim to gradually add more functionality to this gem as I come across new use cases.</p>
<p>The source is available <a href="http://github.com/rayh/xcoder" title="xcoder on github">on github</a>, but it is available to install from ruby forge by using the command:</p>
<pre class="brush: bash">
$ gem install xcoder
</pre>
<p>A simple use-case would be to find the only project in a directory, update the project&#8217;s build number and then invoke a build:</p>
<pre class="brush: ruby">
# Find the first project in the current directory
project = Xcode.find_projects.first

# Find the target called "TargetName"
target = project.target(:TargetName)

# Find the configuration called "Debug"
config = config.config(:Debug)

# Update the build number
config.info_plist do |info|
    info.version = ENV['BUILD_NUMBER']
    info.save
end

# Clean the build for this target's configuration 
config.clean

# Build the target using this configuration
config.build

# Create an IPA for this target's configuration signed using the provided identity and embed the provided profile
config.package :sign => 'iPhone Distribution: Developer Name, :profile => 'Provisioning/ProfileToEmbed.mobileprovision'
</pre>
<p>It&#8217;s early days yet, but I plan on adding support for OCUnit => JUnit output mapping (like the xcode-hudson-plugin) as well as loading provisioning profiles from the file system and generally manipulating the project file.  Please send issues/feature requests to the <a href="http://github.com/rayh/xcoder/issues" title="xcoder germ">Xcoder page on github</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/10/12/control-xcode-builds-from-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yellow Pages for iPad wins Mobile Award</title>
		<link>http://wirestorm.net/blog/2011/09/12/yellow-pages-for-ipad-wins-mobile-award/</link>
		<comments>http://wirestorm.net/blog/2011/09/12/yellow-pages-for-ipad-wins-mobile-award/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 11:41:23 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=144</guid>
		<description><![CDATA[<a href="http://mobileawards.com.au/MA2011/entry_details.asp?ID=10149&#038;Category_ID=4622" title="Yellow Pages for iPad - Mobile Awards 2011"><img src="http://rayh.com.au/clients/yellow-pages-ipad/ma2011.png" class="centred"/></a>

We won the "Best New Service or Application" category in the Mobile Awards 2011!  Congratulations to everyone involved and I am sure we will all go on to make more award winning apps!]]></description>
			<content:encoded><![CDATA[<p><a href="http://mobileawards.com.au/MA2011/entry_details.asp?ID=10149&#038;Category_ID=4622" title="Yellow Pages for iPad - Mobile Awards 2011"><img src="http://rayh.com.au/clients/yellow-pages-ipad/ma2011.png" alt="Mobile Awards 2011" /></a>
<br />
We won the &#8220;Best New Service or Application&#8221; category in the Mobile Awards 2011!  Congratulations to everyone involved and I am sure we will all go on to make more award winning apps!
<br />
<a href="http://mobileawards.com.au/MA2011/entry_details.asp?ID=10149&#038;Category_ID=4622" title="Yellow Pages for iPad - Mobile Awards 2011">Mobile Awards 2011</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/09/12/yellow-pages-for-ipad-wins-mobile-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Block-based observation with KVO</title>
		<link>http://wirestorm.net/blog/2011/05/27/block-based-observation-with-kvo/</link>
		<comments>http://wirestorm.net/blog/2011/05/27/block-based-observation-with-kvo/#comments</comments>
		<pubDate>Thu, 26 May 2011 22:47:07 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=136</guid>
		<description><![CDATA[Blocks in Objective-C have been a life-saver and allowed our code to become terser and more understandable. Although some of the main parts of the iOS SDK have block-based alternatives (animations, etc), KVO is still based on defining a method with a well-known signature in your observer (not even defined by a @protocol and doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Blocks in Objective-C have been a life-saver and allowed our code to become terser and more understandable.  Although some of the main parts of the iOS SDK have block-based alternatives (animations, etc), <a href="http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOBasics.html#//apple_ref/doc/uid/20002252-178352" title="KVO Observation in iOS">KVO is still based on defining a method with a well-known signature</a> in your observer (not even defined by a  @protocol and doesn&#8217;t allow the use of arbitrary @selector).  I felt there should be a way to be able to achieve this and the result is <a href="http://github.com/rayh/kvo-block-binding" title="KVO Block Binding">this project on github</a>. </p>
<p>In order to encapsulate the observation, a new instance of an object that implements the callback method signature is created for each observation and passed back to the caller.  It is expected that this object is retained by the caller until the caller wants the observation to end.  I&#8217;m not totally convinced that this is the best pattern, but it is at least concise and uses the existing language semantics.  So, on to a simple example:</p>
<p><script src="https://gist.github.com/994318.js"> </script></p>
<p>As you can see, this is very terse and means that all the code to react to changing properties can be encapsulated in the one place.  The returned value is being set to a retained property so that the binding does not get dealloc&#8217;d.  This observation will remain in effect until you release the returned object by setting the property to nil (as in the example) or, indeed, set the property to any other binding.</p>
<p>I would be very interested in feedback about whether this works for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/05/27/block-based-observation-with-kvo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCode plugin for Hudson CI</title>
		<link>http://wirestorm.net/blog/2011/05/01/xcode-hudson-plugin/</link>
		<comments>http://wirestorm.net/blog/2011/05/01/xcode-hudson-plugin/#comments</comments>
		<pubDate>Sun, 01 May 2011 00:41:22 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=72</guid>
		<description><![CDATA[This is a simple plugin for Hudson CI that wraps and provides limited functionality for agvtool and xcodebuild to version and build XCode-based iOS projects. The plugin is mature enough to support building, versioning, IPA packaging and basic testing view OCUnit. Download You can download a pre-built binary of the latest snapshot build (0.1-SNAPSHOT) using [...]]]></description>
			<content:encoded><![CDATA[<p>This is a simple plugin for <a href="http://hudson-ci.org">Hudson CI</a> that wraps and provides limited functionality for agvtool and xcodebuild to version and build XCode-based iOS projects.</p>
<p>The plugin is mature enough to support building, versioning, IPA packaging and basic testing view OCUnit.</p>
<h2>Download</h2>
<p>You can download a pre-built binary of the latest <a href="/xcode-hudson-plugin/xcode-0.1-SNAPSHOT.hpi">snapshot build (0.1-SNAPSHOT)</a> using the latest code from github.  Look below for source code and build instructions.</p>
<h2>Issue Tracking</h2>
<p>Please report any issues and feature requests via GitHub&#8217;s <a href="http://github.com/rayh/xcode-hudson-plugin/issues">issue tracker</a>.</p>
<h1>Features</h1>
<h2>Versioning</h2>
<p>This builder can invoke agvtoool to dynamically update the CFBundleVersion with the current build number using a configurable pattern.  For example, you could specify a pattern of &#8220;1.1.{BUILD_NUMBER}&#8221; which, for build #456, would result in the current version (CFBundleVersion) being set to 1.1.456</p>
<h2>Building</h2>
<p>The target (optional), configuration (e.g. Debug, Release) and SDK (optional) can be specified in the per-project config along with whether to perform a clean before the build phase.</p>
<h2>Packaging</h2>
<p>The builder can be used to package the .app into a .ipa.  Since a .app is actually a directory, it can be awkward to work with and, especially, distribute.  We can simplify this by packaging the .app into a single .ipa file, which is just a zip file with a well-known internal structure</p>
<h2>Unit Testing</h2>
<p>This plugin will listen to the xcodebuild output when running OCUnit tests and write out JUnit-format test reports that Hudson can understand.  Hudson will then use these to publish test failure reports and graphs.</p>
<h2>Gotchas &amp; Limitations</h2>
<ul>
<li>Obviously, the build machine has to be an OSX machine with XCode developer tools installed</li>
<li>Certificates, Identities and Provisions must be installed on the build machine separately</li>
<li>When code-signing, a prompt may appear on the build machine asking whether   to allow keychain access.  This will block the build until it is   dismissed.  Just select &#8216;Always Allow&#8217; the first time and it shouldn&#8217;t need to ask again.</li>
<li>If you connect via ssh to the OSX slave, you will need to execute &#8216;security unlock-keychain&#8217; once you connect to allow the build tools access to the keychain.  The alternative is to use the JNLP slave agent</li>
<li>Derek Stutsman reports that &#8220;If your project has the base SDK set to iPhone simulator, the build will crash with a nullreference exception&#8221;</li>
</ul>
<h1>Building</h1>
<p>The source code is <a href="http://github.com/rayh/xcode-hudson-plugin">hosted on GitHub</a> and made available under the GPLv2 license.</p>
<p>This is a maven project that uses the hudson maven plugin.  You will first need to add the following to your ~/.m2/settings.xml:</p>
<pre class="brush: xml"> 
<settings> 
<plugingroups>
<plugingroup>org.jvnet.hudson.tools</plugingroup> 
  </plugingroups> 
</settings> 
</pre>
<p>To clone the repository and build the .hpi, follow these steps:</p>
<pre class="brush: bash"> 
# Clone the repository
$ git clone git://github.com/rayh/xcode-hudson-plugin.git

# Go into the cloned repository
$ cd xcode-hudson-plugin

# Build the project
$ mvn install
</pre>
<p>The xcode.hpi will be in the target/ directory.</p>
<h1>Installing</h1>
<p>I am awaiting commit access to the hudson repository on java.net so that I can use the official hudson to build the plugin as well as hosting the plugin in the official repository.  Until then, you will have to install it by manually uploading the xcode.hpi to hudson.  Simply go to &#8216;Manage Hudson&#8217; > &#8216;Manage Plugins&#8217; > &#8216;Advanced&#8217; > &#8216;Upload Plugin&#8217; and select the xcode.hpi that you either built or <a href="/xcode-hudson-plugin/xcode-0.1-SNAPSHOT.hpi">downloaded</a> and then select &#8216;Upload&#8217;.</p>
<h1>Usage</h1>
<h2>Setting up a build step</h2>
<p>Add the XCode build step to a free-style project and set the target (e.g. MyApp), configuration (e.g. Release) and check the build IPA and update version number options.  This will give you a single, versioned .ipa file.  You can also select to clean the project before a build;  while this will make sure that the project is starting from a clean state, it will make large projects take a lot longer.</p>
<h2>Setting up a unit test step</h2>
<p>Add the XCode build step and this time specify your unit test target (e.g. MyAppTests), configuration (e.g. Debug) and the SDK (e.g. Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.1.sdk/).  Leave all the checkboxes unselected.  The SDK needs to be supplied here as the unit tests will only be run when building under the simulator&#8217;s SDK.</p>
<p>Check the &#8220;Publish JUnit test result report&#8221; option in the project config and set the value &#8220;**/test-reports/**.xml&#8221; under &#8220;Test report XMLs&#8221;.  This will tell Hudson to pick up the JUnit-format test reports.</p>
<h1>Acknowledgements</h1>
<p>The xcodebuild/OCUnit output parsing was inspired and based upon Christian Hedin&#8217;s <a href="http://github.com/ciryon/OCUnit2JUnit/blob/master/ocunit2junit.rb">ocunit2junit.rb</a> script.</p>
</p>
<p>Jarrod McIntyre provided support for <a href="https://github.com/rayh/xcode-hudson-plugin/pull/5">overriding the marketing version number</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/05/01/xcode-hudson-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yellow Pages Australia for iPad</title>
		<link>http://wirestorm.net/blog/2011/05/01/yellow-pages-australia-for-ipad/</link>
		<comments>http://wirestorm.net/blog/2011/05/01/yellow-pages-australia-for-ipad/#comments</comments>
		<pubDate>Sun, 01 May 2011 00:03:11 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=96</guid>
		<description><![CDATA[<img src="http://a3.mzstatic.com/us/r1000/062/Purple/f1/b3/58/mzl.nxorkggq.175x175-75.jpg" alt="Yellow Pages App Icon" class="app-icon" />

Back again at Sensis working as the dev lead on the Yellow Pages iPad application. This native app brought print content to a digital device for the first time.  ]]></description>
			<content:encoded><![CDATA[<p>I worked at Sensis as the development lead on the Yellow Pages iPad application. This native app brought print content to a digital device for the first time.  Download it from the <a href="http://itunes.apple.com/au/app/yellow-pages-australia-for/id424516241">iTunes App Store</a>.</p>
<p><img src="http://rayh.com.au/clients/yellow-pages-ipad/Home_Page_Grab.png" alt="Yellow Pages iPad Home View" class="landscape large" /></p>
<p><img src="http://rayh.com.au/clients/yellow-pages-ipad/List_View.png" alt="Search Results in List View" class="landscape large" /></p>
<p><img src="http://rayh.com.au/clients/yellow-pages-ipad/Adview_Screen_Grab.png" alt="Search Results in Book View" class="landscape large" /></p>
<p><img src="http://rayh.com.au/clients/yellow-pages-ipad/BPP_Page_Grab.png" alt="Business Profile View" class="landscape large" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/05/01/yellow-pages-australia-for-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PBS Radio</title>
		<link>http://wirestorm.net/blog/2011/03/02/pbs-radio/</link>
		<comments>http://wirestorm.net/blog/2011/03/02/pbs-radio/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 08:51:46 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=114</guid>
		<description><![CDATA[<img src="http://rayh.com.au/clients/pbs/mzl.tlgrbjxu.175x175-75.jpg" class="app-icon"/>
<p class="description">I designed and built the PBS Radio iPhone App that streams the AAC+ stream and provides interactive programme guide from the RESTful web service</p>]]></description>
			<content:encoded><![CDATA[<p class="description">I designed and built the programme information service for PBS 106.7FM that manages the schedule information for the station and whose job it is, essentially, to know what is on when with as great a detail as is possible.  The app is a RESTful web service written in Ruby/Sinatra and the UI is pure HTML/jQuery/CSS and uses the same API..</p>
<p class="description">I have also built a iPhone radio app that integrates the same service and gives users access to the live AAC+ stream as well as the programme guide.  It is available from on the <a href="http://itunes.apple.com/au/app/pbs-radio/id414210309?mt=8">iTunes App Store</a></p>
<p class="description"><i>[From their website]</i>  For 25 years, PBS-FM has been a beacon of independent, freeform, passionate, real and unpretentious radio. PBS is a champion of specialist and under-represented music and is proudly non-corporate, anti-fashion and wanker-free.</p>
<p><a href="http://www.pbsfm.org.au"  class="thumbnail">www.pbsfm.org.au</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/03/02/pbs-radio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“This item is no longer available in the App Store”</title>
		<link>http://wirestorm.net/blog/2011/02/22/this-item-is-no-longer-available-in-the-app-store/</link>
		<comments>http://wirestorm.net/blog/2011/02/22/this-item-is-no-longer-available-in-the-app-store/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 04:44:53 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=81</guid>
		<description><![CDATA[My AppStore apps are currently all reporting that “This item is no longer available in the App Store” or “This item is temporarily unavailable” as of couple of days ago. I have received no notification from Apple and apparently nothing wrong in iTunes connect. After a bit of googling I stumbled across this blog post [...]]]></description>
			<content:encoded><![CDATA[<p>My AppStore apps are currently all reporting that “This item is no longer available in the App Store” or “This item is temporarily unavailable” as of couple of days ago.  I have received no notification from Apple and apparently nothing wrong in iTunes connect.  After a bit of googling I stumbled across <a href="http://www.duffresearch.com/blog/when-ready-for-sale-isnt">this blog post</a> where it seemed that at least one other person had experienced something similar.</p>
<p>I followed the post&#8217;s suggestions and updated my availability date and suddenly the app was marked as &#8220;Pending Contract&#8221;.  However, all my apps are currently freebies and so there are no contracts in place, nor should there be.  I filled out as much of them as I could (bar registering for GST), but to no avail.</p>
<p>I seem to be at the whim of Apple&#8217;s famously distant customer service right now.</p>
<p><strong>Update</strong>:  I eventually solved this by releasing a new version of the app, the process seemed to fix the existing app as it immediately reappeared in the app store while the new version was awaiting approval.  Go figure!</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2011/02/22/this-item-is-no-longer-available-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honda Sydney Motorshow iPad App</title>
		<link>http://wirestorm.net/blog/2010/08/10/honda-sydney-motorshow/</link>
		<comments>http://wirestorm.net/blog/2010/08/10/honda-sydney-motorshow/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 10:08:59 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=129</guid>
		<description><![CDATA[Working with jTribe &#038; DT Digital for Honda to build a bespoke iPad-based interactive brochure for the Sydney Motor Show. Around 50 devices were mounted in custom made stands around the various car models.

<img src="/clients/honda/home-screen.png" alt="Home Screen" class="large landscape"/>]]></description>
			<content:encoded><![CDATA[<p>Working with jTribe &#038; DT Digital for Honda to build a bespoke iPad-based interactive brochure for the Sydney Motor Show. Around 50 devices were mounted in custom made stands around the various car models.</p>
<ul>
<li>Use of Quartz and CoreGraphics to provide a intuatively interactive and highly dynamic image gallery. Utilizing pinch, drag and rotation gestures to manupulate images and basic physics to add momentum.</li>
<li>Extensive testing, bug-hunting and memory-leak plugging in order to allow the app to run constantly for 12+ hours on over 50 devices for every day of the motor show</li>
<li>Implemented a continuous integration system using Hudson, xcodebuild and various shell scripts to provide continuous build feedback and versioned artifacts.</li>
<li>Implemented an Agile process to manage and make visible the outstanding tasks. I also started to measure velocity to better estimate upcoming work.</li>
</ul>
<p><img src="/clients/honda/installation.jpg" alt="Installation at Motorshow" class="large portrait"/></p>
<p><img src="/clients/honda/home-screen.png" alt="Home Screen" class="large landscape"/></p>
<p><img src="/clients/honda/image-gallery.png" alt="Image Gallery" class="large landscape"/></p>
<p><img src="/clients/honda/interior.png" alt="Interior Spin" class="large landscape"/></p>
<p><img src="/clients/honda/exterior.png" alt="Exterior Spin" class="large landscape"/></p>
<p><img src="/clients/honda/specs.png" alt="Home Screen" class="large landscape"/></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2010/08/10/honda-sydney-motorshow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3D &amp; HTML5 Canvas with three.js</title>
		<link>http://wirestorm.net/blog/2010/05/29/3d-html5-canvas-with-three-js/</link>
		<comments>http://wirestorm.net/blog/2010/05/29/3d-html5-canvas-with-three-js/#comments</comments>
		<pubDate>Sat, 29 May 2010 16:46:20 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=59</guid>
		<description><![CDATA[I spent quite a bit of time playing with Processing.org a few years back, mainly using it for video processing (video effects, blob detection, etc) but also for 3D. I recently stumbled across a javascript port of Processing called, logically, Processing.js. This is a really nice idea, taking the established processing syntax (a subset of [...]]]></description>
			<content:encoded><![CDATA[<p>I spent quite a bit of time playing with <a href="http://processing.org/">Processing.org</a> a few years back, mainly using it for video processing (video effects, blob detection, etc) but also for 3D.  I recently stumbled across a javascript port of Processing called, logically, <a href="http://processingjs.org/">Processing.js</a>.  This is a really nice idea, taking the established processing syntax (a subset of Java) and rendering it to a HTML5 Canvas.  The Processing framework uses a &#8220;dont call me, i&#8217;ll call you&#8221; inversion-of-control pattern which makes it very easy to get something up and running but that, and the fact that it is not standard javascript, can make it tricky to integrate.</p>
<p>I also found a very slick library called <a href="http://github.com/mrdoob/three.js">three.js</a> which I used to create the header animation on <a href="http://rayh.com.au">rayh.com.au</a>.  It provides a basic set of 3d concepts such as points, lines, renderer, camera, etc which can use to draw and animate basic 3d scenes.  There is no special loop function, you just use setInterval to trigger your animation to update every once in a while.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2010/05/29/3d-html5-canvas-with-three-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Super Simple Site using Sinatra</title>
		<link>http://wirestorm.net/blog/2010/05/29/super-simple-site-using-sinatra/</link>
		<comments>http://wirestorm.net/blog/2010/05/29/super-simple-site-using-sinatra/#comments</comments>
		<pubDate>Sat, 29 May 2010 13:50:41 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=54</guid>
		<description><![CDATA[My personal site, rayh.com.au, was in need of dire attention. I had originally made it a flat html/js/css site to show off some jQuery skills. However, even though I really like the idea of a site built entire from static files (damn fast) and using javascript to drive the dynamic elements, it is not search [...]]]></description>
			<content:encoded><![CDATA[<p>My personal site, <a href="http://rayh.com.au">rayh.com.au</a>, was in need of dire attention.  I had originally made it a flat html/js/css site to show off some jQuery skills.  However, even though I really like the idea of a site built entire from static files (damn fast) and using javascript to drive the dynamic elements, it is not search engine friendly.  </p>
<p>Biting the bullet, I decided that I needed some sort of server-side scripting.  By day, I mainly use Java and sometimes Ruby.  So my choices seemed to be Java, Ruby or PHP.  Many moons ago, I was a PHP developer and I bailed out of that technology in favour Java.  For me, PHP just sucks in far too many areas for me to adopt it for a one-off tiny website, but the reasons why is another story.  Java seems way to heavyweight and verbose for my needs and so Ruby seemed like the natural choice.  </p>
<p>Previously I had used Rails for projects, but it&#8217;s full-stack solution was still too much for my needs as my site has no database access.  This led me to look at <a href="http://www.sinatrarb.com/">Sinatra</a>, a super lightweight and declarative approach to a web application.  I simply converted my existing html file to a .erb and told Sinatra:</p>
<pre lang="ruby" class="brush: ruby">
require 'rubygems'
require 'sinatra'

get '/' do 
  erb :index
end
</pre>
<p>This code is pretty much all that is needed to get up and running.  It tells Sinatra that when a user accesses the root of the site using GET, serve the index.erb file from the views/ directory.  This approach allowed me to just add the features I needed to perform the simple set of requirements I had rather than trying to convince Rails to do less. </p>
<p>When it came to deploying the app, I used <a href="http://www.modrails.com/">Passenger</a> (AKA mod_rails) with apache which was an absolute breeze.  I highly recommend this approach if you need something more powerful than simple javascript &#038; html without resorting to full-stack web application frameworks or ugly php scripts embedded in html.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2010/05/29/super-simple-site-using-sinatra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yellow Pages Online</title>
		<link>http://wirestorm.net/blog/2009/06/01/yellow-pages-online/</link>
		<comments>http://wirestorm.net/blog/2009/06/01/yellow-pages-online/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 09:48:42 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=112</guid>
		<description><![CDATA[Consulting for Sensis, I worked on the Australian version of the Yellow Pages.  This long-term project involved maintaining an existing J2EE  and migrating to newer technologies such as Spring MVC and jQuery.]]></description>
			<content:encoded><![CDATA[<p class="description">Consulting for Sensis, I worked on the Australian version of the Yellow Pages.  This long-term project involved maintaining an existing J2EE (Struts, Spring, Hibernate, DWR, FAST) and migrating to newer technologies such as replacing Struts 1.0 with Spring MVC 2.5 and replacing DWR with jQuery/AJAX.  Various other internal tools and websites were written in Ruby (including Rails, Capistrano) and test systems utilised tools such as JUnit, Mockito, TestNG.</p>
<p><a href="http://www.yellowpages.com.au" >yellowpages.com.au</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2009/06/01/yellow-pages-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criteria for ActiveRecord</title>
		<link>http://wirestorm.net/blog/2008/04/06/criteria-for-activerecord/</link>
		<comments>http://wirestorm.net/blog/2008/04/06/criteria-for-activerecord/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 08:00:39 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Criteria]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[activerecord]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=53</guid>
		<description><![CDATA[Over the last couple of days I&#8217;ve been working on a Criteria for ActiveRecord. The concept is quite simple; rather than writing strings of SQL to pass to the find() method, we build the criteria using an object-orientated approach. Anyone who has used Hibernate, Torque, Propel et al will know how powerful and useful this [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last couple of days I&#8217;ve been working on a Criteria for ActiveRecord.  The concept is quite simple; rather than writing strings of SQL to pass to the find() method, we build the criteria using an object-orientated approach.  Anyone who has used Hibernate, Torque, Propel et al will know how powerful and useful this can be.  </p>
<p>For example, imagine you have a series of filters, all of which may, or may not, add constraints or expressions to your query.  Each filter will need to append it&#8217;s own SQL to the end of any previously generated SQL and may even need to introspect the existing SQL to determine if its doubling up on statements or resolve potential conflicts.</p>
<p>With Criteria this becomes simpler.  For example:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">criteria = Criteria.<span style="color:#9900CC;">new</span>
criteria.<span style="color:#9966CC; font-weight:bold;">and</span> <span style="color:#9966CC; font-weight:bold;">do</span> |c|
  c.<span style="color:#9966CC; font-weight:bold;">or</span> User.<span style="color:#9900CC;">role</span>.<span style="color:#9900CC;">eq</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:admin</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  c.<span style="color:#9966CC; font-weight:bold;">or</span> User.<span style="color:#9900CC;">active</span>.<span style="color:#9900CC;">eq</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  c.<span style="color:#9966CC; font-weight:bold;">or</span> User.<span style="color:#9900CC;">createdAt</span>.<span style="color:#9900CC;">gt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">10</span>.<span style="color:#9900CC;">hours</span>.<span style="color:#9900CC;">ago</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
criteria.<span style="color:#9966CC; font-weight:bold;">and</span> <span style="color:#9966CC; font-weight:bold;">do</span> |c|
  c.<span style="color:#9966CC; font-weight:bold;">or</span> User.<span style="color:#9900CC;">role</span>.<span style="color:#9900CC;">eq</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:editor</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  c.<span style="color:#9966CC; font-weight:bold;">or</span> User.<span style="color:#9900CC;">active</span>.<span style="color:#9900CC;">eq</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  c.<span style="color:#9966CC; font-weight:bold;">or</span> <span style="color:#9966CC; font-weight:bold;">do</span> |c2|
    c2.<span style="color:#9966CC; font-weight:bold;">and</span> User.<span style="color:#9900CC;">createdAt</span>.<span style="color:#9900CC;">gt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">20</span>.<span style="color:#9900CC;">days</span>.<span style="color:#9900CC;">ago</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    c2.<span style="color:#9966CC; font-weight:bold;">and</span> User.<span style="color:#9900CC;">createdAt</span>.<span style="color:#9900CC;">lt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">10</span>.<span style="color:#9900CC;">hours</span>.<span style="color:#9900CC;">ago</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
users = User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span>, criteria<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>We could, at any point, introspect the state of criteria by calling:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">criteria.<span style="color:#9900CC;">ands</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> |c|
  put <span style="color:#996600;">&quot;AND #{c}&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
criteria.<span style="color:#9900CC;">ors</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> |c|
  put <span style="color:#996600;">&quot;OR #{c}&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>And, finally, we can remove arbitrary bits of criteria:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">criteria.<span style="color:#9900CC;">ands</span>.<span style="color:#9900CC;">delete_at</span> <span style="color:#006666;">2</span></pre></div></div>

<p>I hope to have a release out very soon, but for the time being some more examples and API docs are  on the <a href="http://criteria.rubyforge.org/">Criteria project page</a> on <a href="http://rubyforge.org">RubyForge</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2008/04/06/criteria-for-activerecord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting Swing Client Properties in JavaFX</title>
		<link>http://wirestorm.net/blog/2007/09/30/setting-swing-client-properties-in-javafx/</link>
		<comments>http://wirestorm.net/blog/2007/09/30/setting-swing-client-properties-in-javafx/#comments</comments>
		<pubDate>Sun, 30 Sep 2007 23:50:17 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=48</guid>
		<description><![CDATA[I have been looking around for a way in which to set Swing client properties easily in JavaFX, without subclassing the whole widget. This seems like the simplest (and most obvious, in hindsight) way of doing this. Documentation is still a bit thin on the ground so I am unsure if this is the proper [...]]]></description>
			<content:encoded><![CDATA[<p>I have been looking around for a way in which to set Swing client properties easily in JavaFX, without subclassing the whole widget.  This seems like the simplest (and most obvious, in hindsight) way of doing this.  Documentation is still a bit thin on the ground so I am unsure if this is the proper way to do things:</p>
<p><code>
trigger on (new Button) {
	button.putClientProperty("Quaqua.Button.style", "placard");
}
</code></p>
<p>The above code allows me to inform the underlying Quaqua LookAndFeel that I wish to use the placard button style.  If I wanted to use this selectively, I would have to subclass Button.fx, provide an additional attribute (say style) and then apply the property if the attribute is set.</p>
<p>Obviously, you need to know the internal name for the Swing component you are trying to access, <a href="http://langintro.com/jfx/makeapi/api/index.html">this API documentation</a> is pretty helpful for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2007/09/30/setting-swing-client-properties-in-javafx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SmeshUp</title>
		<link>http://wirestorm.net/blog/2007/08/10/smeshup/</link>
		<comments>http://wirestorm.net/blog/2007/08/10/smeshup/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 09:47:11 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=108</guid>
		<description><![CDATA[Smesh pulls it all together.  Not just mainstream sources but blogs, both established and brand spanking new ones. Because if there's any brand-spanking going on where your clients are concerned, you want to know about it and Smesh wants to find it.

<a href="http://smeshup.com"  class="thumbnail">smeshup.com</a>]]></description>
			<content:encoded><![CDATA[<p class="description">I have been intimately involved with SmeshUp for some time, building a large scale crawl-index-search system for extracting meaningful metrics from social &amp; mainstream media.  The system made use of various forms of Lucene, originally Ferret (Ruby/C port of Lucene) and, more recently, Solr Cloud.  The majority of the system was written in Ruby (Rails, God, Mongrel and many hand-rolled solutions) with some heavy lifting in Java.</p>
<p class="description"><i>[From their website]</i>  Smesh pulls it all together.  Not just mainstream sources but blogs, both established and brand spanking new ones. Because if there&#8217;s any brand-spanking going on where your clients are concerned, you want to know about it and Smesh wants to find it.</p>
<p><a href="http://smeshup.com"  class="thumbnail">smeshup.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2007/08/10/smeshup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse + PHP + J2EE + Rails</title>
		<link>http://wirestorm.net/blog/2007/07/04/eclipse-php-j2ee-rails/</link>
		<comments>http://wirestorm.net/blog/2007/07/04/eclipse-php-j2ee-rails/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 02:33:42 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=47</guid>
		<description><![CDATA[I have just decided to upgrade Eclipse, and thought it best to start from scratch. I do a lot of work in Java, PHP as well as Ruby on Rails and so I tried to set up an integrated environment using Eclipse. I have documented the steps here as much as a reminder for myself [...]]]></description>
			<content:encoded><![CDATA[<p>I have just decided to upgrade Eclipse, and thought it best to start from scratch.  I do a lot of work in Java, PHP as well as Ruby on Rails and so I tried to set up an integrated environment using Eclipse.  I have documented the steps here as much as a reminder for myself as a guide for other people trying to something similar.</p>
<p>First, download and unzip the Ecipse + J2EE package from <a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>.  You do not need to &#8216;install&#8217; Eclipse as such, just put the uncompressed directory somewhere logical (/Applications on a Mac, for example).<a href="http://www.eclipse.org/downloads/">
</a></p>
<ol>
<li>Launch Eclipse <img src='http://wirestorm.net/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </li>
<li>Select: <strong>Help</strong> -> <strong>Software Update</strong> -> <strong>Final and Install</strong>.</li>
<li>Select  <strong>Search for new features to install</strong></li>
<li>Check the <strong>Europa Discovery Service</strong></li>
<li>Select<strong> Add Remote Site</strong></li>
</ol>
<ol>
<li>Type in name:<strong> Aptana </strong>(For javascript support)</li>
<li>Type in url: <strong>http://update.aptana.com/install/3.2/</strong></li>
<li>Select <strong>OK
</strong></li>
</ol>
<li>Select<strong> </strong><strong>Add Remote Site</strong> (For Ruby on Rails support)<strong>
</strong></p>
<ol>
<li>Type in name:<strong> RadRails</strong></li>
<li>Type in url:<strong> http://update.aptana.com/install/rails/3.2/</strong></li>
<li>Select<strong> OK</strong></li>
</ol>
</li>
<li>Select<strong> Add Remote Site </strong>(For SVN integration)
<ol>
<li>Type in name: <strong>Subclipse</strong></li>
<li>Type in url:<strong> http://subclipse.tigris.org/update_1.2.x</strong></li>
<li>Select<strong> OK</strong></li>
</ol>
</li>
<li>Select<strong> Add Remote Site</strong> (for PHP support)<strong>
</strong></p>
<ol>
<li>Type in name: <strong>PDT</strong></li>
<li>Type in url:<strong> http://download.eclipse.org/tools/pdt/updates/</strong></li>
<li>Select<strong> OK</strong></li>
</ol>
</li>
<li>Select<strong> Add Remove Site </strong>(for Hibernate support)
<ol>
<li>Type in name:<strong> Hibernate Tools</strong></li>
<li>Type in url:<strong> http://download.jboss.org/jbosside/updates/development</strong></li>
<li>Select<strong> OK
</strong></li>
</ol>
</li>
<li>Select <strong>Finish</strong></li>
<li>Select your nearest mirror, when prompted</li>
<li>Select <strong>Eurpoa Discovery Site</strong> -> <strong>Programming Languages</strong> -> <strong>Ruby Development Tools</strong></li>
<li>Select <strong>PDT</strong></li>
<li>Select <strong>Aptana</strong></li>
<li>Select <strong>RadRails</strong></li>
<li>Select <strong>Subclipse</strong></li>
<li>Select<strong> Hibernate Tools
</strong></li>
<li>Select <strong>Select Required</strong> (to resolve dependencies)</li>
<li>Select <strong>Next</strong></li>
<li>Accept the agreement(s) and <strong>select Next</strong></li>
<li>Select <strong>Finish</strong></li>
<li>Go for a walk.</li>
<p>Phew, so after all that, you should have an Eclipse IDE set up to support PHP, Ruby, Rails, Javascript, Java, Hibernate and  Subversion.  You can, of course, select many other tools from the Europa discovery site for other development tools, graphical editing and the like.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2007/07/04/eclipse-php-j2ee-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windy Road » (Re)Introducing Javascript And Hidden Applets (JAHA)</title>
		<link>http://wirestorm.net/blog/2007/04/26/windy-road-%c2%bb-reintroducing-javascript-and-hidden-applets-jaha/</link>
		<comments>http://wirestorm.net/blog/2007/04/26/windy-road-%c2%bb-reintroducing-javascript-and-hidden-applets-jaha/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 09:41:11 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=46</guid>
		<description><![CDATA[Windy Road has a nice article on the use of Javascript And Hidden Applets, what they call JAHA.  This is similar to the technique I have used in Robonobo, however I am having all sorts of issues on Mactel Firefox, possibly due to the Apple MRJ / Firefox integration. It would be nice to have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://windyroad.org/">Windy Road</a> has a nice article on the use of <a href="http://windyroad.org/?p=23">Javascript And Hidden Applets</a>, what they call JAHA.  This is similar to the technique I have used in Robonobo, however I am having all sorts of issues on Mactel Firefox, possibly due to the Apple MRJ / Firefox integration.</p>
<p>It would be nice to have a small js library that allowed you to dynamically instantiate and destroy embedded, hidden applets.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2007/04/26/windy-road-%c2%bb-reintroducing-javascript-and-hidden-applets-jaha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Elmo RDF Beans</title>
		<link>http://wirestorm.net/blog/2007/03/28/elmo-rdf-beans/</link>
		<comments>http://wirestorm.net/blog/2007/03/28/elmo-rdf-beans/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 15:30:03 +0000</pubDate>
		<dc:creator>rayh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://wirestorm.net/blog/?p=45</guid>
		<description><![CDATA[&#8220;Elmo is a JavaBean pool implementation for the Sesame RDF repository. Specifically, Elmo is a subject-oriented RDF Bean pool that allows JavaBeans to be cast to different roles and provides a unique context specific view of the subject.&#8221; Basically, you can annotate your classes with url&#8217;s describing the RDF namespace of the class or property. [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Elmo is a JavaBean pool implementation for the Sesame RDF repository. 			Specifically, Elmo is a subject-oriented RDF Bean pool that allows 			JavaBeans to be cast to different roles and provides a unique context 			specific view of the subject.&#8221;</p>
<p>Basically, you can annotate your classes with url&#8217;s describing the RDF namespace of the class or property.  You can then use SPARQL to query/retrieve the beans, and serialize them to/from XML.  Serialization can be acheived through the <a title="Sesame" href="http://www.openrdf.org/doc/sesame2/2.0-beta2/users/">Sesame</a> framework.</p>
<p><a href="http://www.openrdf.org/doc/elmo/1.0/user-guide/">Elmo User Guide</a></p>
<p>Additionally, there is another project, <a title="JRDF" href="http://docs.mulgara.org/system/jrdfapis.html">JRDF</a>, that builds upon Sesame and Jena.  I have yet to use it, but sounds like in encompasses the best of all worlds.</p>
]]></content:encoded>
			<wfw:commentRss>http://wirestorm.net/blog/2007/03/28/elmo-rdf-beans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

