<?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>Transcending Frontiers &#187; New additions to our case study section</title>
	<atom:link href="http://blog.thefrontiergroup.com.au/category/websites-or-tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thefrontiergroup.com.au</link>
	<description>Your peek inside the collective mind of The Frontier Group</description>
	<lastBuildDate>Tue, 03 Jan 2012 06:53:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>New additions to our case study section</title>
		<link>http://blog.thefrontiergroup.com.au/2011/11/new-additions-to-our-case-study-section/</link>
		<comments>http://blog.thefrontiergroup.com.au/2011/11/new-additions-to-our-case-study-section/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 13:21:37 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Inside TFG]]></category>
		<category><![CDATA[Our Products]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://blog.thefrontiergroup.com.au/?p=1847</guid>
		<description><![CDATA[Our primary focus at The Frontier Group is web and mobile applications, but we do find time to design a website every now and again. We&#8217;ve added three websites recently completed to our case studies section of the site. You can see them by clicking the links below: Australian Mines Ramelius Resources BatteryLimits]]></description>
			<content:encoded><![CDATA[<p>Our primary focus at The Frontier Group is web and mobile applications, but we do find time to design a website every now and again. We&#8217;ve added three websites recently completed to our case studies section of the site.</p>
<p>You can see them by clicking the links below:</p>
<p><a href="http://www.thefrontiergroup.com.au/case-studies/australian_mines">Australian Mines</a><br />
<a href="http://www.thefrontiergroup.com.au/case-studies/ramelius_resources">Ramelius Resources</a><br />
<a href="http://www.thefrontiergroup.com.au/case-studies/battery_limits">BatteryLimits</a></p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2011/11/new-additions-to-our-case-study-section/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2011/11/new-additions-to-our-case-study-section/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn Ruby with the Ruby Koans</title>
		<link>http://blog.thefrontiergroup.com.au/2011/10/learn-ruby-with-the-ruby-koans/</link>
		<comments>http://blog.thefrontiergroup.com.au/2011/10/learn-ruby-with-the-ruby-koans/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 06:42:59 +0000</pubDate>
		<dc:creator>mlambie</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Inside TFG]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://blog.thefrontiergroup.com.au/?p=1837</guid>
		<description><![CDATA[If you&#8217;re looking for an engaging and interactive way to learn Ruby, I&#8217;d recommend Ruby Koans by EdgeCase. I think that the koans are especially interesting if you&#8217;re coming from another programming language like PHP or Java, because they rely on some basic programming knowledge, but don&#8217;t presume any Ruby-specific abilities. The Koans walk you [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking for an engaging and interactive way to learn Ruby, I&#8217;d recommend <a title="Ruby Koans" href="http://rubykoans.com/">Ruby Koans</a> by <a title="EdgeCase" href="http://edgecase.com/">EdgeCase</a>. I think that the koans are especially interesting if you&#8217;re coming from another programming language like PHP or Java, because they rely on some basic programming knowledge, but don&#8217;t presume any Ruby-specific abilities.</p>
<blockquote><p>The Koans walk you along the path to enlightenment in order to learn Ruby. The goal is to learn the Ruby language, syntax, structure, and some common functions and libraries.</p></blockquote>
<p>By manipulating and building upon Ruby&#8217;s TestUnit framework, the EdgeCase developers have created a step-by-step process for teaching Ruby through the practice of &#8220;<a title="Red, Green, Refactor" href="http://jamesshore.com/Blog/Red-Green-Refactor.html">Red, Green, Refactor.</a>&#8221; They&#8217;ve added some simple game mechanics too, by showing your systematic progression through the 270+ challenges (puzzles). Reaching enlightenment results in a pretty ASCII graphic, and a legitimate sense of achievement.</p>
<p>Before you start with the koans though you&#8217;ll need a working Ruby installation. I recommend you take a look at the excellent <a title="rvm" href="http://beginrescueend.com/">rvm</a> project, which will allow you to install multiple rubies (1.8.7 and 1.9.2 for example, alongside each other) and multiple gemsets in your home directory. Former Frontiersmen and 2011 Ruby Hero Award winner <a href="http://twitter.com/#!/sutto">Darcy Laycock</a> was heavily involved in this project as part of the 2010 Ruby Summer of Code, so we really like rvm at TFG.</p>
<p>The <a href="https://github.com/edgecase/ruby_koans">GitHub repository</a> even includes a handy Keynote presentation, which I used as the basis for my talk about Ruby Koans at last week&#8217;s <a title="Ruby on Rails Perth Meetup" href="http://www.perthrubyonrails.com.au/">Ruby on Rails Oceania Perth meetup</a>.</p>
<p>Lastly, if you&#8217;d like to have a play with the koans before diving in too deep, they&#8217;re available online through your web browser at <a title="Ruby Koans Online" href="http://koans.heroku.com/">Ruby Koans Online</a>. This is a no-risk way of trying out Ruby (hint: team them up with why&#8217;s <a title="Try Ruby" href="http://tryruby.org/">Try Ruby</a> project) in your browser.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2011/10/learn-ruby-with-the-ruby-koans/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2011/10/learn-ruby-with-the-ruby-koans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guest Series: Peter Cooper &#8211; Capybara-WebKit: Bringing WebKit to your integration tests</title>
		<link>http://blog.thefrontiergroup.com.au/2011/08/guest-series-peter-cooper-capybara-webkit-bringing-webkit-to-your-integration-tests/</link>
		<comments>http://blog.thefrontiergroup.com.au/2011/08/guest-series-peter-cooper-capybara-webkit-bringing-webkit-to-your-integration-tests/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 13:48:03 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://blog.thefrontiergroup.com.au/?p=1776</guid>
		<description><![CDATA[Today we bring you the first in a series of guest posts on our TFG blog. This post is written by Peter Cooper, editor of Ruby Inside and Ruby Weekly. You&#8217;re using Capybara, right? It&#8217;s an acceptance / integration test framework for Ruby that superseded Webrat and makes it easy to automatically interact with Web [...]]]></description>
			<content:encoded><![CDATA[<p>Today we bring you the first in a series of guest posts on our TFG blog. This post is written by <a href="http://twitter.com/peterc">Peter Cooper</a>, editor of <a href="http://www.rubyinside.com" rel="nofollow">Ruby Inside</a> and <a href="http://rubyweekly.com" rel="nofollow">Ruby Weekly</a>.</p>
<hr />
<p>You&#8217;re using <a href="https://github.com/jnicklas/capybara">Capybara</a>, right?</p>
<p>It&#8217;s an acceptance / integration test framework for Ruby that superseded Webrat and makes it easy to automatically interact with Web applications but at the user level. It&#8217;s now the de facto way to do request / integration / acceptance testing (seriously, it gets called any or all of these) in Rails 3.</p>
<p>Capybara supports using different &#8216;drivers&#8217; to run the scenarios you specify and by default it&#8217;ll use Rack::Test or Selenium (which uses Firefox&#8217;s Gecko engine). <a href="https://github.com/thoughtbot/capybara-webkit">capybara-webkit</a> is a library by the guys at <a href="http://thoughtbot.com/">Thoughtbot</a> that gives Capybara a WebKit-powered driver using the WebKit implementation in Qt, a popular cross-platform development toolkit.</p>
<h3>Why?</h3>
<p>Why get WebKit involved with your integration tests at all? Perhaps your userbase is primarily made up of Safari and Chrome users (both WebKit-powered browsers) and you want to focus on them. Or perhaps you&#8217;re thorough and want to ensure the JavaScript on your pages works fine with your tests in a WebKit scenario too.</p>
<h3>Installation</h3>
<p>Here&#8217;s the bad news. You need Qt installed in order to install capybara-webkit. If you&#8217;re on OS X, <a href="http://qt.nokia.com/downloads/qt-for-open-source-cpp-development-on-mac-os-x">grab it from here</a> (pick the Cocoa: Mac binary package &#8211; the 206MB version). You can install via homebrew too (using <code>brew install qt</code>), but Thoughtbot says it takes <em>forever</em> (well, almost).</p>
<p>For other platforms, check out Qt&#8217;s <a href="http://qt.nokia.com/downloads">Downloads page</a>.<br />
If you&#8217;re on CentOS, in particular, <a href="http://opensourcetester.co.uk/2011/06/23/capybara-webkit-centos/">check this article.</a></p>
<p>Once you&#8217;ve installed the Qt toolkit, add this to your app&#8217;s Gemfile:</p>
<p><code>gem 'capybara-webkit'</code></p>
<p>Then run <code>bundle</code> and you&#8217;re off to the races.</p>
<h3>Usage</h3>
<p>Once everything&#8217;s installed, you can set Capybara&#8217;s JavaScript driver to use Webkit by default, by adding this to your normal Capybara config options (or if you have none, in <code>spec/spec_helper.rb</code> in most Rails 3 cases):</p>
<p><code>Capybara.javascript_driver = :webkit</code></p>
<p>Then, if you&#8217;re using Cucumber you can add the following tag to the header of your scenario to trigger JavaScript usage specifically (it&#8217;s not done by default):</p>
<p><code>@javascript</code></p>
<p>In regular RSpec code, you can do something like this:</p>
<p><code>feature "The signup page" do<br />
scenario "should load", :js =&gt; true do<br />
visit new_user_registration_path<br />
page.should have_selector("form.user_new")<br />
end<br />
end</code></p>
<p>You could also use the <code>:driver</code> option to specify <code>:webkit</code> if you want to choose the driver on a per scenario / describe basis. The same applies to <code>@webkit</code> in Cucumber.</p>
<p>If you&#8217;re on OS X, when you first run tests using capybara-webkit the OS X firewall might go a little crazy since it works by connecting over a socket. Just approve it and you&#8217;re on your way.</p>
<p>You may also have issues if you&#8217;re using transaction fixtures. If so, read the &#8220;Transactional Fixtures&#8221; section of the <a href="https://github.com/cavalle/capybara">Capybara README.</a></p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2011/08/guest-series-peter-cooper-capybara-webkit-bringing-webkit-to-your-integration-tests/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2011/08/guest-series-peter-cooper-capybara-webkit-bringing-webkit-to-your-integration-tests/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Catch mail and serve it through a dream with MailCatcher</title>
		<link>http://blog.thefrontiergroup.com.au/2011/05/catch-mail-and-serve-it-through-a-dream-with-mailcatcher/</link>
		<comments>http://blog.thefrontiergroup.com.au/2011/05/catch-mail-and-serve-it-through-a-dream-with-mailcatcher/#comments</comments>
		<pubDate>Wed, 18 May 2011 06:00:45 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://blog.thefrontiergroup.com.au/?p=1511</guid>
		<description><![CDATA[Here at The Frontier Group we were having trouble finding a simple, extensible way to look at email sent out by our web applications during development. After trying quite a few alternatives, one of our developers Sam Cochran sat down in some spare time and forced slender man into skinny jeans strapped to a mailbox to create MailCatcher. MailCatcher is a [...]]]></description>
			<content:encoded><![CDATA[<p>Here at <a href="http://thefrontiergroup.com.au/">The Frontier Group</a> we were having trouble finding a simple, extensible way to look at email sent out by our web applications during development. After trying quite a few alternatives, one of our developers <a href="http://sj26.com/">Sam Cochran</a> sat down in some spare time and forced <a href="http://code.macournoyer.com/thin/">slender man</a> into <a href="https://github.com/sj26/skinny">skinny jeans</a> strapped to <a href="http://eventmachine.rubyforge.org/EventMachine/Protocols/SmtpServer.html">a mailbox</a> to create <a href="https://github.com/sj26/mailcatcher">MailCatcher</a>.</p>
<p>MailCatcher is a ruby mashup to catch mail sent via SMTP to a local port and serve it in your web browser for easy testing. It lets you check out the plain text and HTML versions of the email, as well as inspecting any attachments. Thanks to <a href="http://dev.w3.org/html5/websockets/">WebSockets</a> (in <a href="http://google.com/chrome">Google Chrome</a>, at least) you&#8217;ll see new mail instantly as it arrives.</p>
<p><a href="http://blog.thefrontiergroup.com.au/wp-content/uploads/2011/05/MailCatcher1.png"><img class="alignnone size-large wp-image-1593" title="MailCatcher v0.3.0" src="http://blog.thefrontiergroup.com.au/wp-content/uploads/2011/05/MailCatcher1.png" alt="MailCatcher v0.3.0 displaying a message" width="869" height="660" /></a></p>
<p>Installation and usage instructions can be found on the <a href="https://github.com/sj26/mailcatcher#readme">project home page</a>. Over the coming weeks I look forward to sharing some more of our open source contributions from within TFG.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2011/05/catch-mail-and-serve-it-through-a-dream-with-mailcatcher/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2011/05/catch-mail-and-serve-it-through-a-dream-with-mailcatcher/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Adding additional processing support to CarrierWave</title>
		<link>http://blog.thefrontiergroup.com.au/2011/03/adding-additional-to-carrierwave/</link>
		<comments>http://blog.thefrontiergroup.com.au/2011/03/adding-additional-to-carrierwave/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 02:24:30 +0000</pubDate>
		<dc:creator>Mario Visic</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Inside TFG]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://blog.thefrontiergroup.com.au/?p=1251</guid>
		<description><![CDATA[CarrierWave is a great gem for adding image uploading and basic processing abilities to your Rails applications. By default there is no way to set the quality of the resized images, which could be a very useful feature. One of the applications that we&#8217;re currently building has a requirement to resize and compress images to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/jnicklas/carrierwave">CarrierWave</a> is a great gem for adding image uploading and basic processing abilities to your Rails applications. By default there is no way to set the quality of the resized images, which could be a very useful feature.</p>
<p>One of the applications that we&#8217;re currently building has a requirement to resize and compress images to produce smaller file sizes, as well as stripping out any personal information that may be stored in the uploaded images.</p>
<p>Out of the box CarrierWave provides a consistent interface to process images using RMagick, MiniMagick  or ImageScience. Resizing and cropping is supported for all three image processing engines but setting the quality or removing personal data is not supported. Thankfully, CarrierWave provides an easy way to extend the default functionality so we can do more.</p>
<p>For the examples I&#8217;ll be adding extra functionality to RMagick processing. If you&#8217;re using MiniMagick or ImageScience the methods will need to be altered to work correctly. We&#8217;ll start by adding a new initializer into our application.</p>
<p class="gist-block" data-gist-id="965983" data-gist-file="carrierwave_initializer.rb" id="gist-965983">Can&rsquo;t see this Gist? <a rel="nofollow" href="http://gist.github.com/965983">View it on Github!</a></p>
<p>You may be wondering about the fix_exif_rotation method. Well, some modern cameras always take photos upright, in portrait. When you take a photo in landscape mode the photo is actually saved as a portrait, but the photo will contain some extra orientation metadata. When we remove the embedded data in the photo this value gets removed, so as a result we need to manually rotate the photo, which is what this method does.</p>
<p>The application server will need to be restarted before the new initializer can be used. Once restarted the new filters can be used in an uploader like so:</p>
<p class="gist-block" data-gist-id="965983" data-gist-file="avatar_uploader.rb" id="gist-965983">Can&rsquo;t see this Gist? <a rel="nofollow" href="http://gist.github.com/965983">View it on Github!</a></p>
<p>That&#8217;s it! That&#8217;s all that&#8217;s needed to add extra quality and processing functionality to carrierwave.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2011/03/adding-additional-to-carrierwave/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2011/03/adding-additional-to-carrierwave/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Who we work with at The Frontier Group</title>
		<link>http://blog.thefrontiergroup.com.au/2010/12/who-we-work-with-at-the-frontier-group/</link>
		<comments>http://blog.thefrontiergroup.com.au/2010/12/who-we-work-with-at-the-frontier-group/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 06:44:20 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Inside TFG]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://thefrontiergroup.com.au/blog/?p=1129</guid>
		<description><![CDATA[As 2011 approaches, I decided to look back on a few of the great organisations we have worked with in the last 12 months. We&#8217;ve always had a soft spot for building web sites and web applications that make a difference to real people, as opposed to just solving a business need. Here&#8217;s an overview [...]]]></description>
			<content:encoded><![CDATA[<p>As 2011 approaches, I decided to look back on a few of the great organisations we have worked with in the last 12 months. We&#8217;ve always had a soft spot for building web sites and web applications that make a difference to real people, as opposed to just solving a business need.</p>
<p>Here&#8217;s an overview of some of these projects from 2010.</p>
<h2>Direct Sponsorship</h2>
<p><a title="Big Geekend" href="http://biggeekend.com">The Big Geekend</a> &#8211; Website donated to host event raising money for <a title="Children's Miracle Network" href="http://www.childrensmiraclenetwork.org">Children&#8217;s Miracle Network</a></p>
<p><a title="Australian Children's Trust" href="http://www.australianchildrenstrust.org.au">Australian Children&#8217;s Trust</a> &#8211; Website donated and discounted hosting (new website under construction)</p>
<p><a title="MosArts - Camelot Outdoor Cinema" href="http://www.mosarts.com.au/">MosArts (Camelot Outdoor Cinema)</a> &#8211; Free website hosting</p>
<p><a title="Bletchley Park Primary School" href="http://www.bletchleyparkps.wa.edu.au/">Bletchley Park Primary School</a> &#8211; Sponsorship of <a title="Tournament of Minds" href="http://www.tom.edu.au/">Tournament of Minds</a> team</p>
<p><a title="Breast Cancer Care WA" href="http://www.breastcancer.org.au">Breast Cancer Care WA</a> &#8211; Cash donation</p>
<p>WA Special Needs Children&#8217;s Christmas party &#8211; Cash donation</p>
<h2>Partnerships / Organisations helped</h2>
<p><a title="Independent Living Centre of WA" href="http://www.ilc.com.au">Independent Living Centre of WA</a> &#8211; Built and maintained web systems to help them book more appointments and serve more people in the community. Also rebuilt their website to be accessible, more useful to their audience and added an equipment supplier search feature.</p>
<p><a title="Independent Living Centres Australia" href="http://ilcaustralia.org/home/default.asp">Independent Living Centres Australia</a> &#8211; Current development of the new website and the national supplier database, integrating seven state-based databases into one.</p>
<p><a title="Parkinsons WA" href="http://www.parkinsonswa.org.au/">Parkinsons WA</a> &#8211; Built accessible website.</p>
<p><a title="Council for a Parliament of the World's Religions" href="http://www.parliamentofreligions.org/">Council for a Parliament of the World&#8217;s Religions</a> &#8211; Built web based system to organise and run worldwide conference, as well as followup development for future conferences.</p>
<p><a title="West TV Perth" href="http://www.wtvperth.com.au/">West TV</a> &#8211; 2011 Official web partner &#8211; Development on new website features in 2011.</p>
<p><a title="The Green Network" href="http://www.greennetwork.com.au">The Green Network</a> &#8211; 2011 Official web partner &#8211; Development of new website, launching in February 2011.</p>
<h2>Organisations of Interest</h2>
<p><a title="Climate Watch" href="http://www.climatewatch.org.au/">Climate Watch</a></p>
<p><a href="http://www.solarmarket.com.au">Solar Market</a></p>
<h2>Looking to 2011</h2>
<p><a title="Drop in the Bucket" href="http://www.thefrontiergroup.com.au/pages/drop-in-the-bucket">Drop in the bucket</a> &#8211; Sponsorship drive</p>
<p>And more&#8230;</p>
<p>Here&#8217;s looking forward to a big year of helping out our local, national and international communities; and sharing those stories with you!</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2010/12/who-we-work-with-at-the-frontier-group/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2010/12/who-we-work-with-at-the-frontier-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This Week On The Web #4</title>
		<link>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-4/</link>
		<comments>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-4/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 07:58:06 +0000</pubDate>
		<dc:creator>karlbright</dc:creator>
				<category><![CDATA[Inside TFG]]></category>
		<category><![CDATA[This week on the web]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://thefrontiergroup.com.au/blog/?p=1038</guid>
		<description><![CDATA[We&#8217;ve got a good mix of links for you all this week. Hope you find something interesting. Got a link to share with us? Link us up in the comments. Slim: A template language ØMQ &#8211; The Guide Enterprise HTML/JS/CSS A facebook like is worth 6x a tweet Help stop the spread of NIBS (Native [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve got a good mix of links for you all this week. Hope you find something interesting. Got a link to share with us? Link us up in the comments.</p>
<ul>
<li><a href="http://bit.ly/9dknk8">Slim: A template language</a></li>
<li><a href="http://bit.ly/aR8pc8">ØMQ &#8211; The Guide</a></li>
<li><a href="http://bit.ly/9MnJUt">Enterprise HTML/JS/CSS</a></li>
<li><a href="http://bit.ly/9J6j6p">A facebook like is worth 6x a tweet</a></li>
<li><a href="http://bit.ly/ctldLs">Help stop the spread of NIBS (Native is Better Syndrome)</a></li>
<li><a href="http://bit.ly/bpWHo4">Making real connections over the web by Ze Frank</a></li>
<li><a href="http://bit.ly/bzSjji">10 Flaws that made my weekend app possible</a></li>
<li><a href="http://bit.ly/dn5rHO">Linux kernel flaw gives root rights</a></li>
</ul>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-4/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This Week On The Web #3</title>
		<link>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-3/</link>
		<comments>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-3/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 08:06:38 +0000</pubDate>
		<dc:creator>karlbright</dc:creator>
				<category><![CDATA[This week on the web]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://thefrontiergroup.com.au/blog/?p=1034</guid>
		<description><![CDATA[Fun with Wav: Ruby &#38; C Best Games using HTML5 Canvas The Greplin Challenge The Expressiveness of Go Introducing the Opera link API Bad logos for beer money Got some interesting links you&#8217;ve found this week that you&#8217;d like to share? Link us up in the comments.]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://bit.ly/9mJovB">Fun with Wav: Ruby &amp; C</a></li>
<li><a href="http://bit.ly/9hN4en">Best Games using HTML5 Canvas</a></li>
<li><a href="http://bit.ly/bGmqMD">The Greplin Challenge</a></li>
<li><a href="http://bit.ly/dl27YQ">The Expressiveness of Go</a></li>
<li><a href="http://bit.ly/9oGXjg">Introducing the Opera link API</a></li>
<li><a href="http://bit.ly/9aMeBp">Bad logos for beer money</a></li>
</ul>
<p>Got some interesting links you&#8217;ve found this week that you&#8217;d like to share? Link us up in the comments.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-3/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>This Week On The Web #2</title>
		<link>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-2/</link>
		<comments>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-2/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 06:20:21 +0000</pubDate>
		<dc:creator>karlbright</dc:creator>
				<category><![CDATA[This week on the web]]></category>
		<category><![CDATA[Websites or Tools]]></category>

		<guid isPermaLink="false">http://thefrontiergroup.com.au/blog/?p=1030</guid>
		<description><![CDATA[I’d like to apologise for missing a week, its been busy around the office. We’re not complaining, we just wish we had a little more time to share some links with everyone. MongoDB CTO on Foursquare’s Scaling Issues Unlogo &#8211; Removing logos from video Faster web development with Virtual Machines Recommendations for usability in practice [...]]]></description>
			<content:encoded><![CDATA[<p>I’d like to apologise for missing a week, its been busy around the office. We’re not complaining, we just wish we had a little more time to share some links with everyone.</p>
<ul>
<li><a href="http://bit.ly/9QSM23">MongoDB CTO on Foursquare’s Scaling Issues</a></li>
<li><a href="http://bit.ly/bPhhht">Unlogo &#8211; Removing logos from video</a></li>
<li><a href="http://bit.ly/csMoBT">Faster web development with Virtual Machines</a></li>
<li><a href="http://bit.ly/9lydPG">Recommendations for usability in practice &#8211; final version</a></li>
<li><a href="http://bit.ly/blf8gh">Video from a homemade spacecraft &#8211; fantastic idea</a></li>
<li><a href="http://bit.ly/aeFMiB">Erkie &#8211; Make any website fun</a></li>
<li><a href="http://bit.ly/dj91q1">Defining User Experience as Brand Experience</a></li>
<li><a href="http://bit.ly/c11ORf">Mark Zuckerberg on the “Biggest Problem in Social Networking”</a></li>
<li><a href="http://bit.ly/a7Ffhg">Dive into HTML5</a></li>
<li><a href="http://bit.ly/cellLH">jQuery Fundamentals</a></li>
<li><a href="http://bit.ly/cObuuA">Hardboiled CSS3 Media Queries</a></li>
<li><a href="http://bit.ly/biYErI">visualizing.org &#8211; Making sense of complex issues through data and design</a></li>
<li><a href="http://bit.ly/bAFM6p">Stress first development</a></li>
</ul>
<p>Found something interesting on the week this week? Let us know in the comments.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-2/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2010/10/this-week-on-the-web-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RVM: More than Ruby 1.9 and Rails 3</title>
		<link>http://blog.thefrontiergroup.com.au/2010/09/rvm-more-than-ruby-1-9-and-rails-3/</link>
		<comments>http://blog.thefrontiergroup.com.au/2010/09/rvm-more-than-ruby-1-9-and-rails-3/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 04:12:11 +0000</pubDate>
		<dc:creator>Darcy Laycock</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Websites or Tools]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://thefrontiergroup.com.au/blog/?p=1021</guid>
		<description><![CDATA[RVM is best known as a tool to help developers upgrade their applications to newer versions of Ruby and Rails (3 specifically). That said, for ruby developers, it has many features which help to make their workflow far simpler. Whilst some have shown with effort and rigorous manual process you can achieve much of what [...]]]></description>
			<content:encoded><![CDATA[<p>RVM is best known as a tool to help developers upgrade their applications to newer versions of Ruby and Rails (3 specifically). That said, for ruby developers, it has many features which help to make their workflow far simpler. Whilst some have shown with effort and rigorous manual process you can achieve much of what RVM offers, the following is a look into some less often discussed areas of RVM that make it my most favoured tool when it comes to development.</p>
<h2 id="gemsets_and_the_gemset_hierarchy">Gemsets and the Gemset Hierarchy</h2>
<p>Whilst Bundler solves most of the problems related to isolating gems for me personally, on most projects I develop for there are things that make rvm&#8217;s implementation of gemsets (especially when used along with bundler) invaluable to me as a ruby developer.</p>
<h3 id="isolating_gems">Isolating Gems</h3>
<p>A major strength of RVM is the ability to isolate gems at the system level. This keeps them safely partitioned from any other gems unrelated to my project. The way bundler isolates gems is for the most part at run time &#8211; It changes the way rubygems works to solve it&#8217;s problem and either installs all gems to a user specified path or to your gem directory.</p>
<p>If you are using the usr specified path option, you must to remember that your custom rubygems bin directory is not contained in your PATH. This means that you must either manually add it to the PATH,  or your need to manually prefix each command with bundle exec, or alternatively you can generate the binaries into your applications bin directory and each command with ./bin/</p>
<p>If you take the opposite approach and install your gems into your gem home, you then need to be aware of the fact that each next install will overwrite any previous binaries &#8211; the canonical example being Rails 2 and Rails 3. The way that rubygems generates binaries lets you run <code>gem-binary-name _version_ something</code> to call the binary loaded from a specified gem version. Unfortunately, in Rails 3, the rails binary was moved from the rails gem into the railties gem which just so happens to break this feature of rubygems. You can try this for yourself on a new rvm gemset, install rails 2.3.8 and rails 3.0.0 and then try <code>rails _2.3.8_ -v</code>.  If you are using the simple solution of installing to gem home, even though you are using bundler it will still overwrite the binary.</p>
<p>One common suggestion is to just create a wrapper binary manually (e.g. rails2) or always prefix your commands with bundle exec. In contrast RVM&#8217;s isolation works by explicitly setting rubygems home and path to directories isolated under RVM. RVM takes this even further using gemsets (think subdirectories) to handle more fine grain isolation. For example, I personally use 1 gemset per application, thus avoiding the issues described above as for each application I will have only a single version of rails installed. Even better, switching is shell-local and only persists for a single shell instance. This means that I can have two different applications with two completely different versions of Rails running at the same time in different terminal sessions without issue.</p>
<p>As an added bonus, because RVM isolates at the rubygems system level (using environment variables), your application doesn&#8217;t actually need to know or care about conflicts from gems that the application does not use.</p>
<p>Combining RVM and Bundler yields a great deal of flexibility and consisency. This affords you the ‘best of both worlds&#8217;, system level isolation with the ability to install gems from git repositories, and in application gem loading based on application environment.</p>
<p>For more information RVM&#8217;s gemsets, check out the <a href="http://rvm.beginrescueend.com/gemsets/">Gemset&#8217;s section</a> on the rvm site. For more information on Bundler, check out <a href="http://gembundler.com/">Bundler&#8217;s documentation</a>.</p>
<h3 id="gemset_hierarchy">Gemset Hierarchy</h3>
<p>The second feature I use often is the global gemset.  Each ruby interpreter installation comes with two gemsets out of the box &#8211; the default (blank) gemset (e.g. <code>ree-1.8.7-2010.02</code>) and the global gemset (e.g. <code>ree-1.8.7-2010.02@global</code>).  When you use any gemset, rvm not only sets the gem home to a uniq directory for the given gemset (ensuring gems are installed in the correct place) but it also sets <code>GEM_PATH</code>.</p>
<p>Much like <code>PATH</code>, <code>GEM_PATH</code> is a colon separated list of directories that rubygems uses to look up gems when requiring them. By installing a gem to the global gemset for any ruby, e.g. <code>ree-1.8.7-2010.02@global</code>, it will automatically be made available (including it&#8217;s binaries) inside both the default gemset and any user-defined gemsets. E.g.,</p>
<ul>
<li><code>ree-1.8.7-2010.02</code></li>
<li><code>ree-1.8.7-2010.02@bighelpmob</code></li>
<li><code>ree-1.8.7-2010.02@tedxperth</code></li>
</ul>
<p>Will all have access to gems installed in <code>ree-1.8.7-2010.02@global</code>.</p>
<p>This comes in super handy for things like <code>awesome_print</code>, <code>wirble</code>, <code>bundler</code>, <code>git-up</code>, <code>homesick</code> &#8211; Namely, gems you want available in every environment.</p>
<p>Unfortunately, bundler currently does not support multiple items in <code>BUNDLE_PATH</code>. We have hope it will be added in the future but for now gems you want shared between apps using bundler, you&#8217;ll get some duplication.</p>
<h3 id="default_global_gemset_contents">Default Global Gemset Contents</h3>
<p>As an added bonus along side the global gemsets, rvm provides a way to declare a file which tells it what gems to install initially. To do this, it uses a ruby string-based directory hierarchy (see the link below) to look for a global.gems file that rvm then imports &#8211; For example, my <code>~/.rvm/gemsets/global.gems</code> (that is imported into the global gemset of all ruby interpreter installs) contains the following simple list:</p>
<pre><code>rake
rdoc
awesome_print
bundler
git-up
ghost
homesick
wirble</code></pre>
<p>For more information on this feature, be sure to read the <a href="http://rvm.beginrescueend.com/gemsets/initial/">Automatic Gemset Initialization</a> page on the RVM site.</p>
<h2 id="set_operations">Set operations</h2>
<p>If you are writing gems, one of the most important things you can do as a Ruby developer  these days is to ensure they work on all of the major implementations. At the moment, for most gem developers you should generally be testing your code against:</p>
<ul>
<li>REE / 1.8.7</li>
<li>1.9.2</li>
<li>Rubinius</li>
<li>Jruby</li>
</ul>
<p>And optionally, MagLev and MacRuby. RVM provides tools making it simple to run code and commands against multiple rubies. This includes but is not limited to running Rake tasks and tests / specs. The idea being to make it as frictionless as possible to test your gem against all of the above interpreters. As an example, you can run:</p>
<pre><code>rvm rake test</code></pre>
<p>Which will run <code>rake test</code> against all of your installed ruby interpreters (using default gemset for each). You may need to do some manual setup (e.g. installing test gem dependencies) but rvm tries to make it all as simple as possible and more importantly, heavily integrated into your normal work flow whilst staying out of the way.</p>
<p>Along side rake, rvm also provides wrappers for many common binaries (e.g. ruby, spec and the like) plus the <code>--json</code> and <code>--yaml</code> flags which make it simple to get a summarised view of the program results. Using <code>rvm exec</code>, you can even perform set operations against any arbitrary command.</p>
<p>There is a whole lot more set operations can do and I suggest anyone using or considering using rvm read the <a href="http://rvm.beginrescueend.com/set/">set&#8217;s section</a> on the rvm site. Go forth and have sets!</p>
<h2 id="tools_for_easing_dependency_related_pains">Tools for easing dependency-related pains</h2>
<p>One of the most commonly encountered problems (since for most people, the ruby interpreter you&#8217;d normally use is distributed as a binary install) are related to external dependencies &#8211; Namely, things like readline, iconv and openssl.</p>
<p>In an attempt to make life easier (and in particular, work around common problems like a neutered libedit instead of readline on OSX), rvm provides the <code>rvm package</code> set of commands that make it easy to install sandboxed versions of these in the ~/.rvm/usr directory.</p>
<p>As an example, to work around the libedit vs. readline issue on OSX, you can build your ruby against readline 6.0 by running:</p>
<pre><code>rvm package install readline
rvm install &lt;ruby&gt; --with-readline-dir=$HOME/.rvm/usr</code></pre>
<p>And, as an added bonus, to automatically patch older versions of ree and 1.8.7 to respond to Control-C immediately (for example, in irb) instead of when you press enter, you can replace the <code>rvm install</code> command above with:</p>
<pre><code>rvm install &lt;ruby&gt; --with-readline-dir=$HOME/.rvm/usr --patch readline-fix</code></pre>
<h2 id="simple_ruby_upgrades">Simple Ruby Upgrades</h2>
<p>Say, for example, a new version of 1.9.2 comes out in the next few weeks and you want to automatically update your rubies to match it correctly. As of approximately rvm 1.0.0,  we added an <code>rvm upgrade</code> command that automatically handles doing the following:</p>
<ul>
<li>Installing the new ruby</li>
<li>Moving across gemsets</li>
<li>Updating wrapper scripts and aliases</li>
</ul>
<p>The only thing you typically have to update are references in your .rvmrc&#8217;s and your passenger configuration. But, with a little forethought (e.g. creating an alias using <code>rvm alias create</code>), it&#8217;s entirely possible to make it so the entire upgrade is automatic.</p>
<p>I have personally used this feature to move from the 1.9.2 release candidate to the final patchlevel 0 release &#8211; I used <code>rvm upgrade</code> to simplify the process of updating each time it was bumped.</p>
<p>This is currently undocumented on the rvm site but documentation will be added &#8211; for the moment, in your rvm install, run <code>rvm help upgrade</code> and/or <code>rvm upgrade help</code>.</p>
<h2 id="location_matters">Location Matters</h2>
<p>One of the underlying decisions related to rvm&#8217;s architecture is where it installs your rubies &#8211; In most cases, rvm will install your rubies into <code>~/.rvm/rubies</code> and gems into <code>~/.rvm/gems</code>. This means that you should almost never have to use sudo for commands (there are a few exceptions, most notably passenger which relies on root permission in order to bind to port 80).</p>
<p>This approach is simple on the scale of things but also brings a lot of freedom &#8211; for one, it means you are free to experiment with a Ruby / RVM setup, wiping it away when you&#8217;re done with a simple <code>rm -rf ~/.rvm &amp;&amp; mv .rvm-original .rvm</code>.</p>
<h2 id="rvmrc_files">.rvmrc files</h2>
<p>All of this is fine and dandy, but when you still have to manually switch ruby interpreters and rubies each time you do something, it can become mildly annoying rather fast. For this exact reason RVM offers project-specific .rvmrc files &#8211; If you haven&#8217;t encountered them before, project .rvmrc&#8217;s are files that are automatically sourced into the current shell when you change (cd) into a directory containing one. These files can contain anything that is valid shell script (and to prevent RVM automatically running code you don&#8217;t want, it defaults to asking you to trust it the first time it is run) making things like project bootstrapping and configuration simple and mostly automatic after a quick setup in the project root directory:</p>
<pre><code>rvm --rvmrc --create &lt;ruby&gt;@&lt;gemset&gt;</code></pre>
<p>In my own projects, I use these to automatically install the Ruby if not present, create and use a project-specific gemset and then do the minimum possible required to bootstrap the new environment &#8211; in most cases, this is simply a matter of installing a few gems (e.g. for me, I install bundler via <code>rvm gemset import</code>).</p>
<p>In some cases, I even automatically run <code>bundle install</code> (with 1.0, if you have the gems already installed, this is very fast) hence the first time I cd into a project it essentially bootstraps the entire environment for me automatically.</p>
<p>Ultimately, this approach means that the Ruby interpreter and gemset switching are completely transparent to me &#8211; No matter which project I&#8217;m using, ruby and irb are available and point to the correct executable for the current project I am in. When integrated with some code I wrote for ruby summer of code, it&#8217;s even possible to have passenger automatically use this .rvmrc file to automatically change your application&#8217;s gemset at run time.</p>
<p>For more information on .rvmrc files, check out the <a href="http://rvm.beginrescueend.com/workflow/rvmrc/">rvmrc page</a> and the <a href="http://rvm.beginrescueend.com/workflow/projects/">Project Workflow page</a> on the rvm site. See <a href="http://rvm.beginrescueend.com/integration/passenger/">RVM&#8217;s passenger integration page</a> page for more details on gemsets with passenger.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I hope that you have found at least one new or useful thing about RVM.  RVM has been invaluable to me as a developer on multiple open source projects over the last several months. It makes it simple for me to do things that are otherwise harder or less flexible and generally stays out of my way.</p>
<script src="http://feeds.feedburner.com/~s/TranscendingFrontiers?i=http://blog.thefrontiergroup.com.au/2010/09/rvm-more-than-ruby-1-9-and-rails-3/" type="text/javascript" charset="utf-8"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.thefrontiergroup.com.au/2010/09/rvm-more-than-ruby-1-9-and-rails-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

