<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>David J Rice</title>
 
 <link href="http://www.davidjrice.co.uk/" />
 <updated>2012-01-19T16:26:57+00:00</updated>
 <id>http://www.davidjrice.co.uk/</id>
 <author>
   <name>David Rice</name>
   <email>me@davidjrice.co.uk</email>
 </author>
 
 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/davidjrice" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="davidjrice" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Upgrading to Ruby 1.9 and Rails 3.2.0.rc2</title>
   <link href="http://www.davidjrice.co.uk/2012/01/19/upgrading-to-ruby-1-9-and-rails-3-2.html" />
   <updated>2012-01-19T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2012/01/19/upgrading-to-ruby-1-9-and-rails-3-2</id>
   <content type="html">&lt;p&gt;Last year was a long year of upgrades for a lot of our clients at &lt;a href='http://rumblelabs.com'&gt;Rumble Labs&lt;/a&gt;. Going into this year, most of our Ruby work is all running on Ruby 1.9.2. A lot of those projects are Rails applications and we managed to have most of those running on Rails 3.0.x. From an OCD point of view, this pleases me.&lt;/p&gt;

&lt;p&gt;Some of the applications we&amp;#8217;re working on for clients are now pretty big, Rails is getting bigger and there are more libraries out there. The combined effects of which are starting to feel a little slow.&lt;/p&gt;

&lt;h2 id='ruby_193'&gt;Ruby 1.9.3&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://www.ruby-lang.org/en/news/2011/10/31/ruby-1-9-3-p0-is-released/'&gt;Ruby 1.9.3&lt;/a&gt; is the latest stable release of the 1.9.x series. It&amp;#8217;s been great to start taking advantage of a few of the niceties in Ruby now since the move from 1.8.x.&lt;/p&gt;

&lt;p&gt;With Ruby 1.9.3 it&amp;#8217;s all about the speed. I tested running &lt;code&gt;time rake -T&lt;/code&gt; before and after the upgrade in a number of our projects. Roughly speaking I saw a reduction of 50% in the time it took. This is &lt;strong&gt;great!&lt;/strong&gt; If you use &lt;a href='http://beginrescueend.com/'&gt;RVM&lt;/a&gt; (and I would recommend you do, or something like it) you can install with the following&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rvm install 1.9.3&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='bundler'&gt;Bundler&lt;/h2&gt;

&lt;p&gt;A quick aside in case you haven&amp;#8217;t heard. The latest beta version of bundler is super fast compared to the current stable release. You can install the latest version of bundler (in your global gemset) with the following.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rvm gemset use global
gem install bundler --pre&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='rails_320rc2'&gt;Rails 3.2.0.rc2&lt;/h2&gt;

&lt;p&gt;The latest version of &lt;a href='http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released'&gt;Rails 3.2.0.rc2&lt;/a&gt; has a few changes, the biggest of which is some performance improvements to boot time, development mode and asset compilation. For our applications running on 3.1 it was quite a painless upgrade (unlike going from 3.0.9 -&amp;gt; 3.1).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# add to your Gemfile
gem &amp;#39;rails&amp;#39;, &amp;#39;3.2.0.rc2&amp;#39;

# I like to create a new gemset for each specific Rails version
rvm gemset create rails-3-2-0-rc2
bundle update&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='heroku'&gt;Heroku&lt;/h2&gt;

&lt;p&gt;What would be the use of upgrading all these apps if we can&amp;#8217;t try them out, in production! Thankfully it is possible to run both Ruby 1.9.3 and Rails 3.2.0.rc2 in production on &lt;a href='http://www.heroku.com'&gt;Heroku&lt;/a&gt; thanks to their new &lt;strong&gt;Heroku Labs&lt;/strong&gt; features, specifically their &lt;a href='http://devcenter.heroku.com/articles/labs-user-env-compile'&gt;user_env_compile&lt;/a&gt; which allows us to set configuration that will be respected by the heroku build packs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: not for the fainthearted&lt;/strong&gt; Heroku mention they may remove any feature of Heroku Labs without warning, so be careful!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Enable Heroku Labs
heroku plugins:install http://github.com/heroku/heroku-labs.git

# Enable the user_env_compile add-on (for each app)
heroku labs:enable user_env_compile -a myapp

# Enable 1.9.3
heroku config:add RUBY_VERSION=ruby-1.9.3-p0&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That should be your Heroku app enabled to run on Ruby 1.9.3. Next time you push to heroku you should see something like the following in the compile output.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-----&amp;gt; Heroku receiving push
-----&amp;gt; Ruby/Rails app detected
-----&amp;gt; Using RUBY_VERSION: ruby-1.9.3-p0&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve upgraded about 10 apps so far and have yet to come across any showstopper bugs. It doesn&amp;#8217;t take too long to do either. So, definitely worth the performance improvements you will gain! Happy upgrading.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rumble Labs</title>
   <link href="http://www.davidjrice.co.uk/2011/08/01/rumble-labs.html" />
   <updated>2011-08-01T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2011/08/01/rumble-labs</id>
   <content type="html">&lt;p&gt;&lt;img alt='Rumble Labs' src='/assets/2011/rumble-labs.png' /&gt;&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;ve recently joined up with the guys at &lt;a href='http://rumblelabs.com'&gt;Rumble Labs&lt;/a&gt; as their new &lt;strong&gt;Technical Director&lt;/strong&gt;. Over the past two years I had been working self employed as a consultant for several local and international companies (Which was an enjoyable change from being a company director before that). However late last year as work was coming in thick and fast and I needed to collaborate with a few local freelancers more and more. I decided it was probably about time to start a another company. However at around about the same time Simon (from Rumble) asked if I&amp;#8217;d be interested in joining the team.&lt;/p&gt;

&lt;p&gt;It was pretty good timing as coincidentally our lovely old office building in Belfast&amp;#8217;s Linen Quarter was being condemned (&lt;em&gt;sad face&lt;/em&gt;). So we decided to share a new office together and knuckle down on a few collaborative projects. After a good few months of that, things were working well so we decided to start the long process of merging companies.&lt;/p&gt;

&lt;p&gt;The paperwork was the easy part! Now we have to start all the technical side of things. For one, I&amp;#8217;m very happy about being able to cross off a life goal of starting a software development hub in my home town!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>How to Upgrade to Rails 3.1.0</title>
   <link href="http://www.davidjrice.co.uk/2011/05/25/how-to-upgrade-a-rails-application-to-version-3-1-0.html" />
   <updated>2011-05-25T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2011/05/25/how-to-upgrade-a-rails-application-to-version-3-1-0</id>
   <content type="html">&lt;p&gt;The &lt;a href='http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate'&gt;Rails 3.1.0 Release Candidate&lt;/a&gt; dropped a few days ago and thought I&amp;#8217;d give it a try on an application I was busy upgrading already. Before starting you&amp;#8217;ll probably want to check out the Release Notes or the &lt;a href='http://railscasts.com/episodes/265-rails-3-1-overview'&gt;railscasts overview video&lt;/a&gt; first.&lt;/p&gt;

&lt;h2 id='1_upgrade_the_gemfile'&gt;1. Upgrade the Gemfile&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;source &amp;#39;http://rubygems.org&amp;#39;

gem &amp;quot;rails&amp;quot;, &amp;quot;3.1.0.rc1&amp;quot;
gem &amp;quot;mysql2&amp;quot;, &amp;quot;0.3.2&amp;quot;
# Rails 3.1 - Asset Pipeline
gem &amp;#39;json&amp;#39;
gem &amp;#39;sass&amp;#39;
gem &amp;#39;coffee-script&amp;#39;
gem &amp;#39;uglifier&amp;#39;
# Rails 3.1 - JavaScript
gem &amp;#39;jquery-rails&amp;#39;

# Rails 3.1 - Heroku
group :production do
  gem &amp;#39;therubyracer-heroku&amp;#39;, &amp;#39;0.8.1.pre3&amp;#39;
  gem &amp;#39;pg&amp;#39;
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Needed specifically the latest version of mysql2 as the earlier ones are incompatible. To get the asset pipeline working on heroku you&amp;#8217;ll need &lt;em&gt;therubyracer-heroku&lt;/em&gt;. Another issue with heroku, it appears you now need to be explicit about using postgres in production.&lt;/p&gt;

&lt;h2 id='2_config_file_changes'&gt;2. Config File Changes&lt;/h2&gt;

&lt;h3 id='update_configbootrb'&gt;Update config/boot.rb&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;require &amp;#39;rubygems&amp;#39;

# Set up gems listed in the Gemfile.
ENV[&amp;#39;BUNDLE_GEMFILE&amp;#39;] ||= File.expand_path(&amp;#39;../../Gemfile&amp;#39;, __FILE__)

require &amp;#39;bundler/setup&amp;#39; if File.exists?(ENV[&amp;#39;BUNDLE_GEMFILE&amp;#39;])&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='update_applicationrb'&gt;Update application.rb&lt;/h3&gt;

&lt;p&gt;In &lt;em&gt;config/application.rb&lt;/em&gt; add the following line.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Enable the asset pipeline
config.assets.enabled = true&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='update_developmentrb'&gt;Update development.rb&lt;/h3&gt;

&lt;p&gt;I seemed to have to remove the following line from &lt;em&gt;config/environments/development.rb&lt;/em&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;config.action_view.debug_rjs             = true&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='update_productionrb'&gt;Update production.rb&lt;/h3&gt;

&lt;p&gt;Add the following lines to enable asset compression in &lt;em&gt;config/environments/production.rb&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Compress both stylesheets and JavaScripts
config.assets.js_compressor  = :uglifier
config.assets.css_compressor = :scss&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='3_move_assets'&gt;3. Move Assets&lt;/h2&gt;

&lt;h3 id='move_the_folders'&gt;Move the Folders&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;mkdir app/assets
git mv public/images app/assets/images
git mv public/javascripts app/assets/javascripts
git mv public/stylesheets app/assets/stylesheets&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='fix_image_references'&gt;Fix Image References&lt;/h3&gt;

&lt;p&gt;Use your favourite find and replace, check judiciously.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;find: /images/
replace: /assets/&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='make_css_and_javascript_manifest_files'&gt;Make CSS and JavaScript Manifest Files&lt;/h3&gt;

&lt;p&gt;I already had an &lt;em&gt;app/assets/application.js&lt;/em&gt; file so I added this to the top of mine and moved the code in there out into separate files with app/assets/javascripts.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// This is a manifest file that&amp;#39;ll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they&amp;#39;ll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It&amp;#39;s not advisable to add code directly here, but if you do, it&amp;#39;ll appear at the bottom of the
// the compiled file.
//
//= require jquery
//= require jquery_ujs
//= require_tree .&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I did the same for &lt;em&gt;app/assets/application.css&lt;/em&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/*
 * This is a manifest file that&amp;#39;ll automatically include all the stylesheets available in this directory
 * and any sub-directories. You&amp;#39;re free to add application-wide styles to this file and they&amp;#39;ll appear at
 * the top of the compiled file, but it&amp;#39;s generally better to create a new file per style scope.
 *= require_self
 *= require_tree . 
*/&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='fix_the_css_and_javascript_references'&gt;Fix the CSS and JavaScript references&lt;/h3&gt;

&lt;p&gt;Instead of requiring multiple files you&amp;#8217;ll want to require the manifest files created above.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= stylesheet_link_tag    &amp;quot;application&amp;quot; %&amp;gt;
&amp;lt;%= javascript_include_tag &amp;quot;application&amp;quot; %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='success'&gt;Success!&lt;/h3&gt;

&lt;p&gt;On an app with good front end conventions established, already using a method of asset bundling, etc. this isn&amp;#8217;t a big task.&lt;/p&gt;

&lt;p&gt;However I do find that because Rails has set such good conventions it&amp;#8217;s hard for people to go too wrong. Of all the applications where I&amp;#8217;ve &lt;strong&gt;taken over&lt;/strong&gt; from another developer over the years. Rescue missions, etc. It&amp;#8217;s the prospect of looking in the &lt;em&gt;public/&lt;/em&gt; directory that scares the bajaysus out of me.&lt;/p&gt;

&lt;p&gt;Thankfully with all this great new front end stuff I&amp;#8217;m hoping that in the future, rescue missions into interface land will suffer less casualties.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Software as a Service Pricing Models</title>
   <link href="http://www.davidjrice.co.uk/2011/01/12/software-as-a-service-pricing-models.html" />
   <updated>2011-01-12T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2011/01/12/software-as-a-service-pricing-models</id>
   <content type="html">&lt;p&gt;There are two common payment models in the software as a service industry.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Feature stratification based price plans&lt;/li&gt;

&lt;li&gt;Usage based price plans&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With price plans based on feature stratification being the most common &lt;em&gt;(this is something I believe has it&amp;#8217;s roots in the mobile industry or similar)&lt;/em&gt; but software as a service developers should beware to carefully consider their business models than just come up with a price plan.&lt;/p&gt;

&lt;p&gt;A long time ago while I was funding my degree studies by working in mobile (at Orange) there was very popular phone contract of the time called the &lt;strong&gt;Virgin tariff&lt;/strong&gt;. So called because it was brought out on Orange to compete with a similar tariff offered by Virign Mobile, the difference between this and the now standard contract tariffs is this;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No set monthly cost or limits.&lt;/li&gt;

&lt;li&gt;You pay monthly for what you use at set usage costs (at a fair price, not like Pay-as-you-go)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now over time at Orange the mood quickly changed about the Virgin tariff and the large numbers of customers it was bringing in and this was made official by Orange HQ lowering the margins on phones sold attached to a Virgin plan. Why? The reason is very simple, &lt;strong&gt;the margin for network operators is a lot less when you only pay for what you use.&lt;/strong&gt; Let&amp;#8217;s look at the following simplified example;&lt;/p&gt;

&lt;p&gt;Imagine &lt;strong&gt;Vapourware Mobile&lt;/strong&gt; provided a plan and a usage based model. The plan with 100 minutes 50 cross network minutes and 100 texts for &lt;strong&gt;£35/month&lt;/strong&gt;, they offered the same unit prices for the usage based model so if a user actually were to be on that plan and use exactly the ammount of service as is allowed on the plan it would cost them &lt;strong&gt;£2.50&lt;/strong&gt; extra. I also made-up some numbers as to what the actual cost to the network is per unit, these aren&amp;#8217;t exactly real figures if anything in real life it is bound to be lower.&lt;/p&gt;
&lt;table class='data-table'&gt;
  &lt;thead&gt;
    &lt;th /&gt;
    &lt;th&gt;Plan&lt;/th&gt;
    &lt;th&gt;Unit price&lt;/th&gt;
    &lt;th&gt;Usage&lt;/th&gt;
    &lt;th&gt;Unit cost&lt;/th&gt;
    &lt;th&gt;Cost / User&lt;/th&gt;
  &lt;/thead&gt;
  &lt;tr&gt;
    &lt;td&gt;Minutes&lt;/td&gt;
    &lt;td&gt;100&lt;/td&gt;
    &lt;td&gt;0.1&lt;/td&gt;
    &lt;td&gt;10&lt;/td&gt;
    &lt;td&gt;0.025&lt;/td&gt;
    &lt;td&gt;2.5&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Other Network Calls&lt;/td&gt;
    &lt;td&gt;50&lt;/td&gt;
    &lt;td&gt;0.35&lt;/td&gt;
    &lt;td&gt;17.50&lt;/td&gt;
    &lt;td&gt;0.1&lt;/td&gt;
    &lt;td&gt;5&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Texts&lt;/td&gt;
    &lt;td&gt;100&lt;/td&gt;
    &lt;td&gt;0.1&lt;/td&gt;
    &lt;td&gt;10&lt;/td&gt;
    &lt;td&gt;0.01&lt;/td&gt;
    &lt;td&gt;1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td /&gt;
    &lt;td&gt;&lt;strong&gt;£35&lt;/strong&gt;&lt;/td&gt;
    &lt;td /&gt;
    &lt;td&gt;&lt;strong&gt;£37.50&lt;/strong&gt;&lt;/td&gt;
    &lt;td /&gt;
    &lt;td&gt;&lt;strong&gt;£8.50&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;So this is the part where the real economic genius comes in to play. In general, every single customer is not actually on a tariff that suits their needs correctly. So the stratified price plan approach gives every user a monthly &lt;strong&gt;target&lt;/strong&gt; of &lt;strong&gt;free&lt;/strong&gt; usage to achieve for every facet of their service to you, the problem for the customer lies in the fact that modern phone contracts have so many &lt;strong&gt;extra charges&lt;/strong&gt; built in and it is very difficult for the customer to know and to use exactly what is in their contract every month.&lt;/p&gt;

&lt;p&gt;What will tend to happen to every customer is &lt;strong&gt;under use&lt;/strong&gt; or &lt;strong&gt;over use&lt;/strong&gt;. In every scenario with the fixed price contract model, the mobile provider is the winner. They have very seriously thought about their &lt;strong&gt;cost per user&lt;/strong&gt; and it is built into their business model.&lt;/p&gt;

&lt;h3 id='the_evil_capitalist'&gt;The Evil Capitalist&lt;/h3&gt;

&lt;p&gt;Well there are two sides of the coin, if you&amp;#8217;re an evil capitalist at heart and would like nothing more than taking every opportunity to make a quick buck then it&amp;#8217;s obvious that you want to structure your pricing like a mobile phone contract. As a mobile exec was once quoted saying &lt;strong&gt;&amp;#8220;Text Messaging is the purest form of profit ever created&amp;#8221;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a quick aside it&amp;#8217;s also worth noting that &lt;strong&gt;SMS&lt;/strong&gt; was actually invented as a by-product of creating the system for wireless voice calls. Spare bandwidth in the system they created that in turn could be used to generate profit, akin to what Amazon are doing today with their cloud computing platform.&lt;/p&gt;

&lt;h3 id='up_or_down'&gt;Up or Down&lt;/h3&gt;

&lt;p&gt;This behaviour in the mobile industry is somewhat similar to the feature stratification of paid web software, a lot of the time the user will be hovering around &lt;strong&gt;plan limits&lt;/strong&gt; and so be forced to make a decision, do they upgrade their plan? or downgrade their usage?&lt;/p&gt;

&lt;p&gt;As pricing is usually quite a jump between levels it is usually unfair to the user as to get their value out of the expense they need to use the system as much as possible to reach the next level at which point they are at that upgrade decision time again. How modern web apps differ from mobile contracts would largely be around their ability to bill users for usage above their current plan without forcing an upgrade.&lt;/p&gt;

&lt;h3 id='a_better_way'&gt;A Better Way&lt;/h3&gt;

&lt;p&gt;So if you&amp;#8217;re more of a hippy idealist you probably want to structure your plans more like a true &lt;strong&gt;Pay as You Go&lt;/strong&gt; contract (in-fact a little more like Amazon). A lot more companies are taking on a more usage based model these days but the numbers are still quite slim.&lt;/p&gt;

&lt;p&gt;I think the usage model as a whole lot fairer on the users, you don&amp;#8217;t make swathes of cash on unused systems but it still stands to be potentially more profitable. Think about it, rather than charging users in &lt;strong&gt;narrow bands&lt;/strong&gt; of pricing where they are likely to try and &lt;strong&gt;conserve&lt;/strong&gt; their usage to avoid upgrading, you have users paying vastly varying ammounts depending on their usage, users who don&amp;#8217;t care about the price anymore because they are getting great value for money. Users who don&amp;#8217;t have to worry about being &lt;strong&gt;locked-in&lt;/strong&gt; and when that next big upgrade spike is going to hit, who tell their friends about this great service they are using that is &lt;strong&gt;cost effective&lt;/strong&gt; to get started with, who are having better love lives and generally being better people&amp;#8230;&lt;/p&gt;

&lt;p&gt;I do not have exact statistics on this but have done research for previous Web Applications I have created, all signs point to more profit. Not to mention the karma. I&amp;#8217;d love to have some hard data for you, perhaps soon.&lt;/p&gt;

&lt;p&gt;At the end of the day, if I had to choose it would obviously be &lt;strong&gt;usage based&lt;/strong&gt; pricing. The main problem and also the reason why there is such a proliferation of &lt;strong&gt;feature stratification based&lt;/strong&gt; pricing is that tracking and calculating usage is a hard problem.&lt;/p&gt;

&lt;p&gt;Ask me in a few weeks if I&amp;#8217;m enjoying the taste of my own dog food, or not.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Issues using Amazon S3 European Buckets</title>
   <link href="http://www.davidjrice.co.uk/2010/10/26/amazon-s3-european-bucket-issues-paperclip-attachment_fu.html" />
   <updated>2010-10-26T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2010/10/26/amazon-s3-european-bucket-issues-paperclip-attachment_fu</id>
   <content type="html">&lt;p&gt;In the past week a few issues have started ocurring with Amazon S3 to do with European buckets only it seems.&lt;/p&gt;

&lt;p&gt;Firstly I have a number of issues with the official article: &lt;a href='http://aws.amazon.com/articles/3912'&gt;http://aws.amazon.com/articles/3912&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It states there is no &lt;strong&gt;region-specific&lt;/strong&gt; endpoint for european buckets&lt;/li&gt;

&lt;li&gt;There is: &lt;strong&gt;s3-eu-west-1.amazonaws.com&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;It states that using the &lt;strong&gt;region-specific&lt;/strong&gt; endpoint is optional&lt;/li&gt;

&lt;li&gt;In my findings below; it is now required for PUT requests yet must be omitted for GET requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the past (i.e. last week!), one could GET and POST to a european bucket using the following style of endpoint.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://bucket.s3.amazonaws.com/images/1/image.jpg&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From the &lt;strong&gt;22nd of October 2010&lt;/strong&gt; PUT requests to this endpoint started suffering &lt;strong&gt;Broken Pipe&lt;/strong&gt; errors at a failure rate of around 50%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GET&lt;/strong&gt; requests to existing files (with this style of endpoint) are 100% successful.&lt;/p&gt;

&lt;p&gt;After some testing, it appears that what does work is changing the endpoint for PUT requests to use the &lt;strong&gt;region-specific endpoint&lt;/strong&gt; for EU.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://bucket.s3-eu-west-1.amazonaws.com/images/1/image.jpg&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After the switch PUT requests are 100% successful. However; a GET request to retrieve the image from the same endpoint fails (with a 404).&lt;/p&gt;

&lt;p&gt;It appears one must use two different endpoints for operating on images in EU buckets.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;GET: http://bucket.s3.amazonaws.com/images/1/image.jpg
PUT: http://bucket.s3-eu-west-1.amazonaws.com/images/1/image.jpg&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='solutions'&gt;Solutions&lt;/h2&gt;

&lt;p&gt;The nature of this issue appears to me to not particularly relate to any language / library in particlar.. but to massive unannounced changes or failures in the Amazon S3 api.&lt;/p&gt;

&lt;h3 id='attachement_fu'&gt;Attachement Fu&lt;/h3&gt;

&lt;p&gt;To fix this issue for &lt;strong&gt;attachment_fu&lt;/strong&gt; based apps.&lt;/p&gt;

&lt;p&gt;Edit config/amazon_s3.yml&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;development:
  bucket_name: bucket
  access_key_id: xxx
  secret_access_key: xxx
  server: s3-eu-west-1.amazonaws.com&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Edit &lt;strong&gt;line 154&lt;/strong&gt; of &lt;strong&gt;&amp;#8230;attachment_fu/backends/s3_backend.rb&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def self.hostname
  #@hostname ||= s3_config[:server] || AWS::S3::DEFAULT_HOST
  @hostname ||= &amp;quot;s3.amazonaws.com&amp;quot;
end&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='paperclip'&gt;Paperclip&lt;/h3&gt;

&lt;p&gt;Edit your attachment class and add a :server option to :s3_options&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Image &amp;lt; ActiveRecord::Base
has_attached_file :image, 
  :styles =&amp;gt; {...}
  :path =&amp;gt; &amp;#39;:attachment/:id/:style.:filename&amp;#39;,
  :storage =&amp;gt; :s3,
  :s3_credentials =&amp;gt; &amp;quot;#{RAILS_ROOT}/config/s3.yml&amp;quot;,
  :bucket =&amp;gt; &amp;#39;xxx&amp;#39;,
  :s3_options =&amp;gt; {
    :server =&amp;gt; &amp;quot;s3-eu-west-1.amazonaws.com&amp;quot;
  }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;All in all I&amp;#8217;m a little bit miffed at such an inconsistency from Amazon. Why the change? Why does it sometimes work? Why two endpoints? Who knows. Hopefully they&amp;#8217;ll fix this issue or have some official clarification soon. Otherwise, I hope these fixes help you in some way for now&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Belfast Ruby</title>
   <link href="http://www.davidjrice.co.uk/2010/04/25/belfast-ruby.html" />
   <updated>2010-04-25T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2010/04/25/belfast-ruby</id>
   <content type="html">&lt;p&gt;&lt;a href='/2007/03/15/brug.html'&gt;Many moons ago&lt;/a&gt; we tried to organise a Belfast Ruby meetup, now I think enough time has passed and there are &lt;strong&gt;enough people&lt;/strong&gt; to warrant another attempt!&lt;/p&gt;

&lt;p&gt;So, dear community. Do you use Ruby, Rails? Do you want to but haven&amp;#8217;t taken the plunge?&lt;/p&gt;

&lt;p&gt;If you would like to &lt;strong&gt;attend&lt;/strong&gt; a &lt;strong&gt;Ruby meetup in Belfast&lt;/strong&gt; in &lt;strong&gt;May 2010&lt;/strong&gt; please, leave a comment. If the numbers are there, I&amp;#8217;ll make it happen.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>HTML5 Validator.nu ruby gem</title>
   <link href="http://www.davidjrice.co.uk/2010/04/22/validator.nu-html5-ruby-validation-gem.html" />
   <updated>2010-04-22T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2010/04/22/validator.nu-html5-ruby-validation-gem</id>
   <content type="html">&lt;p&gt;Thought it has been a while since I last updated my blog so, what have I been working on recently? Well, something that has caught my interest quite feverently is &lt;a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/'&gt;HTML5&lt;/a&gt;. A lovely little markup language with so much potential the best benefit for me would be the complete eradication of flash from the face of the internet. Working with flash on a number of different levels over the years, sometime it was kinda-fun, somtimes it produced cool results but it has always come with an overbearing of pain.&lt;/p&gt;

&lt;p&gt;Where was I? Anyway, standards are great. Use them. So you could not call me a hypocrite after reading this, I recently decided to take the leap and fully embrace HTMl5 here on this blog. So, like any self respecting geek, I wrote a wrapper library for the &lt;a href='http://validator.nu'&gt;HTML5 validator&lt;/a&gt; in my programming language of choice (Ruby).&lt;/p&gt;

&lt;p&gt;You can check out the &lt;strong&gt;validator.nu&lt;/strong&gt; ruby gem on &lt;a href='http://github.com/davidjrice/validator.nu'&gt;github&lt;/a&gt;. Or dive right in with the following example.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem install validator.nu
require &amp;#39;validator.nu&amp;#39;
require &amp;#39;uri&amp;#39;
Validator.nu(URI.parse(&amp;#39;http://bbc.co.uk&amp;#39;))&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>ActiveMerchant Support for Realex</title>
   <link href="http://www.davidjrice.co.uk/2009/09/28/activemerchant-support-for-realex.html" />
   <updated>2009-09-28T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2009/09/28/activemerchant-support-for-realex</id>
   <content type="html">&lt;p&gt;As promised in my &lt;a href='http://davidjrice.co.uk/2009/09/09/getting-real-with-realex.html'&gt;previous article&lt;/a&gt;, I would be releasing the Realex code for ActiveMerchant, a gracious thanks to &lt;a href='http://ticketsolve.com'&gt;Ticketsolve&lt;/a&gt; who funded this development. So, the code currently resides in my fork of ActiveMerchant at &lt;a href='http://github.com/davidjrice/active_merchant'&gt;github&lt;/a&gt; which you can clone and use in your applications straight away, it should hopefully make it&amp;#8217;s way back into the official ActiveMerchant repository soon enough.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gateway = ActiveMerchant::Billing::RealexGateway.new

credit_card = ActiveMerchant::Billing::CreditCard.new({
  :name =&amp;gt; &amp;quot;John Smith&amp;quot;, 
  :month =&amp;gt; &amp;quot;9&amp;quot;, 
  :year =&amp;gt; &amp;quot;2009&amp;quot;, 
  :type =&amp;gt; :visa, 
  :number =&amp;gt; &amp;quot;1111222233334444&amp;quot;, 
  :verification_value =&amp;gt; &amp;quot;xxx&amp;quot;
})

response = gateway.purchase(100, credit_card, {})&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For further usage documentation;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;See the &lt;a href='http://github.com/davidjrice/active_merchant/blob/master/lib/active_merchant/billing/gateways/realex.rb'&gt;main Realex gateway class&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;The &lt;a href='http://github.com/davidjrice/active_merchant/blob/master/test/unit/gateways/realex_test.rb'&gt;unit tests&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;The &lt;a href='http://github.com/davidjrice/active_merchant/blob/master/test/remote/gateways/remote_realex_test.rb'&gt;remote integration test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Getting Real with Realex</title>
   <link href="http://www.davidjrice.co.uk/2009/09/09/getting-real-with-realex.html" />
   <updated>2009-09-09T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2009/09/09/getting-real-with-realex</id>
   <content type="html">&lt;p class='update'&gt;
  This article has been ammended to clarify and expand on some of my initial thoughts after receiving more of an &lt;a href='http://www.webpayments.ie/blog/getting-real-with-realex.html'&gt;in-depth response&lt;/a&gt; than I thought the article would provoke, from &lt;a href='http://www.webpayments.ie'&gt;David Lowry of webpayments.ie&lt;/a&gt; (also, previously a developer at Realex).
&lt;/p&gt;
&lt;p&gt;Recently one of the projects I&amp;#8217;ve been working on has involved writing a fuller implementation of the &lt;a href='http://www.realexpayments.com/'&gt;Realex Payment Gateway&lt;/a&gt; to work with &lt;a href='http://www.realexpayments.com/'&gt;Active Merchant&lt;/a&gt;. If you haven&amp;#8217;t heard of it, Active Merchant is a Payment Gateway abstraction library written in Ruby. The aim is to provide a universal set of methods to interact with a whole host of different implementations. The library revolves around 5 key methods of interaction, they are;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;purchase (money, creditcard, options = {})&lt;/li&gt;

&lt;li&gt;authorize (money, creditcard, options = {})&lt;/li&gt;

&lt;li&gt;capture (money, authorization, options = {})&lt;/li&gt;

&lt;li&gt;void (identification, options = {})&amp;lt;/tt&amp;gt;&lt;/li&gt;

&lt;li&gt;credit (money, identification, options = {})&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also two additional methods for working with recurring payments but there is less support for this among merchants. The original implementation of the Realex Gateway for Active Merchant was written by &lt;a href='http://thinedgeofthewedge.blogspot.com/2007/10/active-merchant-talk-to-ruby-ireland.html'&gt;John Ward&lt;/a&gt; and included the ability to perform purchase requests. I have since added to it to allow the other core methods, I&amp;#8217;ll be releasing this update to Active Merchant soon. If you ask nicely, I might add in support for taking recurring payments.&lt;/p&gt;

&lt;p&gt;After finishing this work, I&amp;#8217;m not 100% happy with it. Why? Because Realex do things differently than most of the other gateway services. For no good reason either, as in my opinion none of the differences I&amp;#8217;m going to list below give any benefit to the customer. I would say, this is from the standpoint of someone integrating payment solutions into a SaaS application with the goal of it being easily used with a different merchant per client. This is especially necessary as they have a global market.&lt;/p&gt;

&lt;p&gt;Your needs may vary, if your business is selling directly to customers, thus all transactions go direct to you then there is less benefit in being able to use multiple gateways. However I do think the same &lt;strong&gt;principles of abstraction&lt;/strong&gt; that make &lt;strong&gt;ORM libraries&lt;/strong&gt; and &lt;strong&gt;frameworks&lt;/strong&gt; a staple of modern software development should also &lt;strong&gt;apply to cloud computing services&lt;/strong&gt; and &lt;strong&gt;APIs&lt;/strong&gt;. Of course security is definitely a major concern when dealing with payments (which is why we use merchants in the first place) but I believe strongly that the &lt;strong&gt;security should be inherent&lt;/strong&gt; and that the merchant should do as much as possible to make their interface as simple as possible and extra features optional. So, here&amp;#8217;s my list of differences between Realex and other gateways that I have used with ActiveMerchant that make it not possible to provide a good, abstracted solution;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href='#unique_transaction_identifiers'&gt;Unique Transaction Identifiers&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='#requiring_extra_identifiers'&gt;Requiring Extra Identifiers&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='#requiring_a_secondary_password_for_credits'&gt;Requiring a Secondary Password for Credits&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='#public_developer_information_portal'&gt;Public Developer Information Portal&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='#test_gateway'&gt;Test Gateway&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='#industry_standard_valid_test_card_numbers'&gt;Industry Standard Valid Test Card Numbers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id='unique_transaction_identifiers'&gt;Unique Transaction Identifiers&lt;/h2&gt;

&lt;p&gt;Okay, so a merchant should always generate a unique identifier at their end for the transaction and so should the application that is talking to it (as we most likely want to save that Order to the database before it is paid for, I do however agree with the implementation of ActiveMerchant which states that &lt;strong&gt;specifying an order identifier should be optional&lt;/strong&gt;. At the end of the day it&amp;#8217;s all about minimum requirements there would definitely be no loss of functionality in simply saving the auto generated identifier from Realex and doing lookups that way, or providing your own order id back as extra trackability.&lt;/p&gt;

&lt;h2 id='requiring_extra_identifiers'&gt;Requiring Extra Identifiers&lt;/h2&gt;

&lt;p&gt;So as I mentioned above I agree that you should only need &lt;strong&gt;one key to uniquely identify a transaction&lt;/strong&gt;. With most of the other gateway implementations in ActiveMerchant you need only give them the transaction identifier (or authorization code) and that is good enough. However with Realex you are required to send back to them;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The unique transaction identifier you specified&lt;/li&gt;

&lt;li&gt;The unique transaction identifier from Realex&lt;/li&gt;

&lt;li&gt;The authorization code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So this would be quite against the essence of abstraction, surely one of these is enough after all the point of a unique identifier is that it is the key required to retrieve a result. David Lowry quite rightly pointed out in his article that the authorization code (being generally around 4 digits) is not a unique identifier, however it would be a unique identifier for a given batch. Seeing as it would only be possible to &lt;strong&gt;Capture&lt;/strong&gt; a previously authorized transaction before the batch is processed. So, considering that I think it is fair to say this is all that should be required to identify it. &lt;strong&gt;Voiding&lt;/strong&gt; or &lt;strong&gt;Crediting&lt;/strong&gt; a transaction, as they could take place further down the line should require a unique id.&lt;/p&gt;

&lt;h2 id='requiring_a_secondary_password_for_credits'&gt;Requiring a Secondary Password for Credits&lt;/h2&gt;

&lt;p&gt;Previously I had stated that Realex require you to send them an extra element in your request for a Credit a password specifically for performing refunds. As David Lowry pointed out in his article that this is to prevent attacks specifically &lt;i&gt;"such attacks could be as simple as a rogue employee carrying out refunds to a card of their choice."&lt;/i&gt;. I would definitely agree that it is an important aspect of application security to prevent possible theft within your organisation. In the context of a back office application I think that encapsulating this as part of your own application logic and only allowing certain users to perform refunds is better from a usability standpoint, from talking to people working with this exact scenario actually making the users of the backend office system enter a password created a lot more support requests because of forgotten passwords or confusion between it and their login to the application itself.&lt;/p&gt;

&lt;p&gt;Anyway after more research this appears to be an optional feature and is only required if it has been enabled on a given account.&lt;/p&gt;

&lt;h2 id='public_developer_information_portal'&gt;Public Developer Information Portal&lt;/h2&gt;

&lt;p&gt;In my opinion it is generally a good business move if you are providing software as a service to give as much information to potential customers to increase customer aquisition through awareness and knowledge of your service. This also has another benefit of reducing the ammount of support requests that staff have to be available to provide answers for. Even if you wish to capture customer details initially you could still allow users to get to step one without needing to get a staff member on the line. The feeling of progress is always a good thing to create a &lt;strong&gt;good customer experience&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id='test_gateway'&gt;Test Gateway&lt;/h2&gt;

&lt;p&gt;Another vitally important part of SaaS is integration testing. Unless you are maintaining all the libraries for using your service in different programming languages, I think it is essential to enable easy integration testing to ensure the robustness of the implementations. So allowing users to at least sign up for a test account straight away and get the unit tests for an implementation running is a good thing, this is especially useful for libraries that are open source.&lt;/p&gt;

&lt;p&gt;I also think it&amp;#8217;s a good idea to have this hosted at a different server especially as it&amp;#8217;s in the sensitive data category. This way any access to sensitive data or communication with banks can be completely removed, the test service effectively becoming a &lt;strong&gt;mock implementation&lt;/strong&gt; of the real thing providing a full range of different responses for all input data and also a list of test input data.&lt;/p&gt;

&lt;p&gt;David Lowry points out that &lt;i&gt;"why should an organization allow unkown parties to access their test servers?"&lt;/i&gt;, security is an issue but I believe that segregating the test service from the live service plus having other server side functionalities such as monitoring API requests, IP addresses and creating warnings based on rate limits etc. is an acceptable solution, this is only a small example of the many paths to increasing security and monitorability of a web service. He also mentions that not having a separate test service &lt;i&gt;"eliminates the risk of possible differences between test and live environments."&lt;/i&gt; in my opinion it shouldn&amp;#8217;t be a big issue to ensure that the interfaces behave the same, it would be the merchants perogative to ensure quality of their code among builds. He also says that &lt;i&gt;"switching from test mode to live mode is greatly simplified"&lt;/i&gt; I would say that point is moot as if anything changing the base url for your payment gateway i.e. changing the value of a string is arguably easier than adding an xml node and therefore shouldn&amp;#8217;t factor into why a company doesn&amp;#8217;t provide test access.&lt;/p&gt;

&lt;h2 id='industry_standard_valid_test_card_numbers'&gt;Industry Standard Valid Test Card Numbers&lt;/h2&gt;

&lt;p&gt;So, there are many card numbers that work across many other merchants for testing purposes. They&amp;#8217;re generally well documented in the gateway&amp;#8217;s developer site and can therefore be used in your unit tests, for your open source library or your application that&amp;#8217;s integrating with it&amp;#8230; you are writing unit tests right? Anyway, unfortunately Realex provide test card numbers on a per account basis so it makes things more awkward to write tests for a library that other people will use.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They need to get a merchant account&lt;/li&gt;

&lt;li&gt;They need to get their set of test card numbers&lt;/li&gt;

&lt;li&gt;Copy and paste their card numbers into a test fixture file&lt;/li&gt;

&lt;li&gt;Run the unit tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, it&amp;#8217;s down to the user experience again. When I&amp;#8217;m taking the time to create workflows I always like to see if there is a way to improve and simplify them. If we have 4 steps, could we get that down to 1 or 2?&lt;/p&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The combined effect of those differences, make for a user experience as a potential customer of theirs that could be improved quite a bit. Also, it means that the end result implementation for Active Merchant needs to work slightly differently for Realex gateways therefore going against the whole aim of the library. If it sounds like these things aren&amp;#8217;t that big a problem? Consider the scenario that you are an Irish SaaS provider and have a new client in the US you want to release your e-commerce site to.&lt;/p&gt;

&lt;p&gt;With a well abstracted implementation of the Realex gateway, they would be able to simply add a configuration setting to use any other merchant they wish for this new customer and still allow their existing customers to use Realex. The quality and testability of code would be excellent as both backend gateways are receiving the same data, not to mention the ease of the change. However without abstraction the application needs another layer of code to handle the differences for the Realex gateway.&lt;/p&gt;
&lt;img alt='ActiveMerchant Abstraction Diagram' src='/assets/2009/9/9/activemerchant-abstraction.png' /&gt;
&lt;p&gt;This is certainly not useful for a potential customer who would wish to utilise Realex &amp;amp; other merchants as well as the extra layer of code is just more to maintain and in my opinion doesn&amp;#8217;t need to be there. However you could say that it isn&amp;#8217;t really in the interest of any business to enable them to easily switch to their competitors&amp;#8230; but I doubt that&amp;#8217;s the reason for Realex&amp;#8217;s differences. Actually this is an interesting point that I will cover at some point but I do believe there is great benefit for a company to show people how easy it is to get out of the service they are signing up for.&lt;/p&gt;

&lt;p&gt;So in the interest of finding a gateway for Irish customers that would allow a well abstracted solution, I&amp;#8217;ve looked into a lot of the competitors and have found that &lt;a href='http://www.sagepay.com'&gt;Sagepay&lt;/a&gt; is probably the best looking I found (formerly Protx, they recently moved fully support transactions in Ireland). They also appear to tick the boxes for the right way of doing things for every point I&amp;#8217;ve raised above so I&amp;#8217;m very interested in seeing how they compare.&lt;/p&gt;

&lt;p&gt;Anyway, happy payment systems integration. Check back soon if you want to get at the Realex Active Merchant code I promised.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Back in Black</title>
   <link href="http://www.davidjrice.co.uk/2009/09/04/back-in-black.html" />
   <updated>2009-09-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2009/09/04/back-in-black</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s been a while, but I recently decided to re-launch my blog and start writing more. A few things stopped me writing as much as I would have liked this year but I&amp;#8217;m hoping to post more frequently now that I&amp;#8217;ve migrated my blog over to something a bit more to my taste. Let me know what you think!&lt;/p&gt;

&lt;p&gt;For the nerdier among you, perhaps you would like to know that this blog is actually now powered by &lt;a href='http://github.com/mojombo/jekyll/tree/master'&gt;Jekyll&lt;/a&gt; (a nifty blog engine tool which is apparently quite popular these days) it gives me a very lightweight blog as it produces purely static html files. To work with what is now a static site but to give some dynamic content (comments!) I&amp;#8217;m using the excellent hosted comment service from &lt;a href='http://disqus.net'&gt;Disqus&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rails Session Storage Cookie Vs Active Record</title>
   <link href="http://www.davidjrice.co.uk/2008/11/25/rails-2-session-storage-cookie-vs-active-record.html" />
   <updated>2008-11-25T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/11/25/rails-2-session-storage-cookie-vs-active-record</id>
   <content type="html">&lt;p&gt;There aren&amp;#8217;t that many resources about the relatively new option for session storage in Rails. So while I have been migrating a legacy application to Rails 2, I wanted to note some of my thoughts.&lt;/p&gt;

&lt;h2 id='cookie_storage'&gt;Cookie Storage&lt;/h2&gt;

&lt;h3 id='cookie-storage-pros'&gt;Pros&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Storage is now distributed to the client within the session cookie.&lt;/li&gt;

&lt;li&gt;Up to 4k of data can be stored within it securely thanks to the neat work done by the core team.&lt;/li&gt;

&lt;li&gt;It&amp;#8217;s a &lt;em&gt;simple&lt;/em&gt; solution to provide scalability by default, no more centralized drb, memcached, db, filesystem to store your sessions.&lt;/li&gt;

&lt;li&gt;Slight performance boost with the session not having to be retrieved, it is sent with the request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='cookie-storage-cons'&gt;Cons&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Session data is transmitted to the client, albeit encrypted and tamper proof.&lt;/li&gt;

&lt;li&gt;An extra overhead of roughly &lt;strong&gt;162 Bytes&lt;/strong&gt; per request in the http headers when sessions are turned on, due to the longer session_id.&lt;/li&gt;

&lt;li&gt;You can only store 4k.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='active_record_storage'&gt;Active Record Storage&lt;/h2&gt;

&lt;h3 id='active-record-storage-pros'&gt;Pros&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You can store as much session data as you want.&lt;/li&gt;

&lt;li&gt;If the session data is super secret, it&amp;#8217;s never transmitted over the wire.&lt;/li&gt;

&lt;li&gt;Roughly &lt;strong&gt;162 Bytes&lt;/strong&gt; less per request in the http headers when session are turned on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='active-record-storage-cons'&gt;Cons&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Another moving part to manage (i.e. clearing the Active Record sessions table).&lt;/li&gt;

&lt;li&gt;Slight performance hit retrieving the session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, in conclusion the Cookie Storage is a great default for Rails as it will suit the vast majority of applications. I&amp;#8217;ve found it great for recent projects, it mainly means you don&amp;#8217;t really have to think about sessions anymore.&lt;/p&gt;

&lt;h2 id='more_resources'&gt;More Resources&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ryan Daigle&amp;#8217;s article about &lt;a href='http://ryandaigle.com/articles/2007/2/21/what-s-new-in-edge-rails-cookie-based-sessions'&gt;cookie session&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Scott Baron&amp;#8217;s excellent &lt;a href='http://scott.elitists.net/sessions.html'&gt;performance comparision&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;A great &lt;a href='http://errtheblog.com/post/24'&gt;run-down on all of the other session storage options&lt;/a&gt; in a lot more detail over on Err the Blog.&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Get Exceptional</title>
   <link href="http://www.davidjrice.co.uk/2008/06/06/get-exceptional.html" />
   <updated>2008-06-06T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2008/06/06/get-exceptional</id>
   <content type="html">&lt;p&gt;&lt;a href='http://getexceptional.com'&gt;Exceptional&lt;/a&gt; is a product I&amp;#8217;ve been thinking about for some time, so it is really exciting for me to say &amp;#8220;Hey, it&amp;#8217;s almost ready for Beta&amp;#8221; so if you would like to try it out, please go ahead and &lt;a href='http://getexceptional.com'&gt;sign up&lt;/a&gt;. What is it? It&amp;#8217;s a combination of a hosted service and a rails plugin, every time an error happens in your production application the plugin tells us about it. We&amp;#8217;re then able to;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notify you when &amp;#8220;shit happens&amp;#8221;&lt;/li&gt;

&lt;li&gt;Not overdo the notifications&lt;/li&gt;

&lt;li&gt;Allow you to choose from many different forms of notification (email, sms, twitter, im etc.)&lt;/li&gt;

&lt;li&gt;Comment on errors to interact with the production support team e.g. &amp;#8221;I&amp;#8217;m working on it&amp;#8230;&amp;#8221;&lt;/li&gt;

&lt;li&gt;Provide meaningful descriptions for errors that can be displayed directly to the user&lt;/li&gt;

&lt;li&gt;Allow users to send in extra detail about what happened, right when the error occurs&lt;/li&gt;

&lt;li&gt;Automatically communicate with users when an error they experienced is resolved&lt;/li&gt;

&lt;li&gt;Integrate with workflow tools like trac, lighthouse and fogbugz&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this and more coming soon, if you have any questions or feedback I&amp;#8217;d love to hear it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>git and github ftw</title>
   <link href="http://www.davidjrice.co.uk/2008/04/21/git-and-github-ftw.html" />
   <updated>2008-04-21T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2008/04/21/git-and-github-ftw</id>
   <content type="html">&lt;p&gt;So I&amp;#8217;ve completely moved over to using &lt;a href='http://git.or.cz/'&gt;git&lt;/a&gt; the &lt;strong&gt;awesome&lt;/strong&gt; version control system by uber geek &lt;a href='http://en.wikipedia.org/wiki/Linus_Torvalds'&gt;Linus Torvalds&lt;/a&gt; after being told about it by uber geek in his own right Matt Keenan in great (and might I say, confuzzling detail at the time). I&amp;#8217;ve moved all of my public source code over to github, &lt;a href='http://github.com/davidjrice'&gt;you can check it here&lt;/a&gt;. Will be updating all articles that reference the old repository and taking it offline this week!&lt;/p&gt;

&lt;p&gt;I used to love &lt;a href='http://subversion.tigris.org/'&gt;subversion&lt;/a&gt; no, not attempting to overthrow government&amp;#8230; the version control system that used to be all the rage. Not sure what happened when we started using &lt;a href='http://git.or.cz/'&gt;git&lt;/a&gt; but it just felt right, I feel like a ninja even though I&amp;#8217;ve barely got my yellow belt. Try it, you&amp;#8217;ll get hooked.&lt;/p&gt;

&lt;p&gt;What better a place to try it out than by registering for a free account over at &lt;a href='https://github.com/'&gt;github&lt;/a&gt;, it&amp;#8217;s an amazing hosted version control service. I&amp;#8217;m using it for all of my secret new company projects. Did I mention they already have integration hooks for &lt;a href='http://campfirenow.com/'&gt;Campfire&lt;/a&gt;, &lt;a href='http://www.lighthouseapp.com/'&gt;Lighthouse&lt;/a&gt;, &lt;a href='http://www.twitter.com/'&gt;Twitter&lt;/a&gt; and IRC. With many more to come (I guess?), or you could roll your own with their cool and dare I say &lt;strong&gt;innovative&lt;/strong&gt; post receive feature (where they will do a http post with all the parameters for a commit to a url you specify) neat!&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s an interesting &lt;a href='http://www.youtube.com/watch?v=4XpnKHJAok8'&gt;google tech talk by Linus himself&lt;/a&gt;, and a &lt;a href='http://peepcode.com/products/git'&gt;peepcode screencast&lt;/a&gt; that you might want to check out. Oh and &lt;a href='http://weblog.jamisbuck.org/'&gt;Jamis Buck&lt;/a&gt; already rolled in git support into &lt;a href='http://capify.org/'&gt;capistrano&lt;/a&gt;, so if you haven&amp;#8217;t given it a look the time is definitely right.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Co-Working Belfast, Put Your Money Where Your Mouth Is</title>
   <link href="http://www.davidjrice.co.uk/2008/04/19/co-working-belfast-put-your-money-where-your-mouth-is.html" />
   <updated>2008-04-19T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2008/04/19/co-working-belfast-put-your-money-where-your-mouth-is</id>
   <content type="html">&lt;p&gt;Okay so things are gathering pace with the &lt;strong&gt;Co-Working Belfast&lt;/strong&gt; initiative, here&amp;#8217;s a little round-up of what happened this week;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://goodonpaper.org'&gt;Andy&lt;/a&gt; registered a domain for &lt;a href='http://coworkingbelfast.com/'&gt;Co-Working Belfast&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Andy booked a viewing for the potential &lt;a href='http://goodonpaper.org/entries/to-be-continued/'&gt;space he found&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;We went to visit the office on Bradbury Place.&lt;/li&gt;

&lt;li&gt;We found a couple of other spots that didn&amp;#8217;t quite meet the criteria on a second walk around the Botanic / University area.&lt;/li&gt;

&lt;li&gt;We put an offer in for the space (see below).&lt;/li&gt;

&lt;li&gt;Darryl from &lt;a href='http://www.banjax.com'&gt;Banjax&lt;/a&gt; gave us a load of advice, info on what people to contact about funding and even invited Brendan McGoran from &lt;a href='http://www.belfastcity.gov.uk/'&gt;Belfast City Council&lt;/a&gt; to the next &lt;a href='http://groups.google.com/group/belfastocc'&gt;open coffee&lt;/a&gt; meetup.&lt;/li&gt;

&lt;li&gt;We visited &lt;a href='http://www.blickstudios.org/'&gt;Blick Studios&lt;/a&gt; and met with the studio manager Christine James, we had a good chat and have a potential space if getting somewhere larger doesn&amp;#8217;t work out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='the_potential_space'&gt;The Potential Space&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://cms.killercontent.net/media/rhm/639090fcef544465adddb29d687665b4Bradbury%20Place,%20Belfast_web.pdf'&gt;Brochure (pdf)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://goodonpaper.org/upload/bradburyplacefirstfloor.pdf'&gt;First Floor Plan (pdf)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://goodonpaper.org/upload/bradburyplacesecondfloor.pdf'&gt;Second Floor Plan (pdf)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The advertised vital statistics are as follows;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1900 (sqft)&lt;/li&gt;

&lt;li&gt;Rent at £8.50 (per sqft)&lt;/li&gt;

&lt;li&gt;Rent is therefore £16,150 p.a.&lt;/li&gt;

&lt;li&gt;Rates 2008/2009 £6,873&lt;/li&gt;

&lt;li&gt;Service charge (unknown)&lt;/li&gt;

&lt;li&gt;To be refurbished pending lease finalisation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After viewing the space it is definitely in need of a good bit of love so we made what I think is a fair offer, along with some extra conditions;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the lessor&amp;#8217;s cost, an architect to visit the property to asses what if any walls could be removed to make the individual offices larger.&lt;/li&gt;

&lt;li&gt;Re-paint walls and ceilings with a clean, matte white finish.&lt;/li&gt;

&lt;li&gt;Laminate wood flooring laid in the office areas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The offer itself &lt;strong&gt;£10,000 p.a.&lt;/strong&gt; for a &lt;strong&gt;3 year lease&lt;/strong&gt;. Some light mathematics and it&amp;#8217;s going to take around &lt;strong&gt;£60,000&lt;/strong&gt; over the next three years to make this a reality. I think we can do it.&lt;/p&gt;

&lt;h2 id='next_steps'&gt;Next Steps&lt;/h2&gt;

&lt;p&gt;So, the list I published at the end of last month we&amp;#8217;ve managed to cross some things off and there are couple of things I would love to ask &lt;strong&gt;you&lt;/strong&gt; to do, if you can answer any of these questions. &lt;strong&gt;Please leave a comment!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you want a desk at Co-Working Belfast?&lt;/li&gt;

&lt;li&gt;What about just being able to drop in and use spare facilities?&lt;/li&gt;

&lt;li&gt;Would you be willing to put your money where your mouth is and chip in for the deposit?&lt;/li&gt;

&lt;li&gt;If we said it was going to be up and running next month&amp;#8230; are you in?&lt;/li&gt;

&lt;li&gt;Can you provide any desks, chairs, monitors, computers?&lt;/li&gt;

&lt;li&gt;Do you have any good funding leads?&lt;/li&gt;

&lt;li&gt;Can you help in any way that I haven&amp;#8217;t mentioned above?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week I will collate all of the feedback I get and use it to prepare a &lt;strong&gt;funding proposal&lt;/strong&gt;, work out the &lt;strong&gt;cash flow&lt;/strong&gt;, budget for &lt;strong&gt;setup costs&lt;/strong&gt; and as usual tell you all about it. To wrap up, I&amp;#8217;m just really looking for help here it was tough alone and now even with all the awesome stuff &lt;a href='http://goodonpaper.org'&gt;Andy&lt;/a&gt; has been doing and Darryl&amp;#8217;s advice it&amp;#8217;s actually getting harder. So please, step up, we can do this but only by co-working towards a common goal &lt;em&gt;(I&amp;#8217;ll leave you with that awful pun)&lt;/em&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Co-working Belfast Plan</title>
   <link href="http://www.davidjrice.co.uk/2008/03/28/co-working-belfast-plan.html" />
   <updated>2008-03-28T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/03/28/co-working-belfast-plan</id>
   <content type="html">&lt;p&gt;Okay so the idea is to setup a not-for-profit organisation with the remit;&lt;/p&gt;

&lt;p&gt;Bringing silicon valley thinking to Belfast by creating a cutting edge work space for digital and creative workers. It&amp;#8217;s goal is solely to improve these industries and provide a creative atmosphere to allow ideas and companies to grow in an organic way.&lt;/p&gt;

&lt;p&gt;UPDATE: Woo! 2 more people interested that brings the total to 18.&lt;/p&gt;

&lt;h2 id='location_requirements'&gt;Location Requirements&lt;/h2&gt;

&lt;p&gt;Here are some rough requirements for what I think a perfect location would be.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can seat at least 10 to 15&lt;/li&gt;

&lt;li&gt;Is located in Belfast city centre, cathedral quarter, queen&amp;#8217;s quarter or the linen quarter.&lt;/li&gt;

&lt;li&gt;There are several eateries, coffee shops and convenience stores within easy walking distance&lt;/li&gt;

&lt;li&gt;Bicycle / Car parking, would be a definite plus&lt;/li&gt;

&lt;li&gt;Has natural light&lt;/li&gt;

&lt;li&gt;Does not cost the earth&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='todo'&gt;Todo&lt;/h2&gt;

&lt;p&gt;There are a lot of things to do, you maybe have an idea of some more. Feel free to let me know if I&amp;#8217;ve missed any.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decide on a name&lt;/li&gt;

&lt;li&gt;Setup a not-for-profit organisation&lt;/li&gt;

&lt;li&gt;Find a suitable location&lt;/li&gt;

&lt;li&gt;Approach relevant creative, arts, public, technology, investment bodies in Northern Ireland for funding&lt;/li&gt;

&lt;li&gt;Get a definite list of people (home team and frequent visitors)&lt;/li&gt;

&lt;li&gt;Make a list of necessary kit&lt;/li&gt;

&lt;li&gt;Decide a fit-out budget&lt;/li&gt;

&lt;li&gt;Find out what assets all the signed up people can bring to the organisation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='the_people'&gt;The People&lt;/h2&gt;

&lt;p&gt;Here is a list of all the people who have expressed an explicit interest in a Belfast co-working space at one time or another. Totaling 16(+2) people already and I bet that I&amp;#8217;ve missed out a couple of names (please tell me if that&amp;#8217;s you!), obviously not everyone will want to be one of the &amp;#8220;Home Team&amp;#8221; but there are a lot who just want these kind of facilities available.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;John Kennedy&lt;/li&gt;

&lt;li&gt;&lt;a href='http://goodonpaper.org'&gt;Andy McMillan&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://banjaxed.com'&gt;Darryl Collins&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://cimota.com/blog'&gt;Matt Johnston&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Gerard McBreen&lt;/li&gt;

&lt;li&gt;&lt;a href='http://lifeforms.ie'&gt;John Ryan&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://carisenda.com'&gt;Stephen Stewart&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://deeden.co.uk'&gt;Steve Rushe&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.michaelwall.co.uk'&gt;Michael Wall&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Brian Cleland&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.propertypal.com'&gt;Errol Maxwell&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Matt Keenan&lt;/li&gt;

&lt;li&gt;&lt;a href='http://woodwardweb.com'&gt;Martin Woodward&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hypercurious.net'&gt;Michal Wronka&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://shylands.com'&gt;Steven Hylands&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.bodytags.co.uk'&gt;Lynsey Browne&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://hiimjames.com'&gt;James Gallagher&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.pennydistribution.com'&gt;Nick Fitzsimons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, I&amp;#8217;m really excited about the interest. With Belfast starting to have it&amp;#8217;s web revolution I&amp;#8217;m so confident that this will be a reality and another step forward very soon. Please let mw know your thoughts and if you want to help out, think of the good you will be doing for everyone else.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Do Not Buy an Apple AirPort Extreme Base Station, They Crash and Burn</title>
   <link href="http://www.davidjrice.co.uk/2008/02/26/do-not-buy-an-apple-airport-extreme-base-station-they-crash-and-burn.html" />
   <updated>2008-02-26T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/02/26/do-not-buy-an-apple-airport-extreme-base-station-they-crash-and-burn</id>
   <content type="html">&lt;p&gt;When my lovely second hand &lt;a href='http://www.netgear.com/Products/APsWirelessControllers/AccessPoints/WN802T.aspx'&gt;Netgear Rangemax&lt;/a&gt; router died I bought one of these new fangled &lt;a href='http://www.apple.com/airportextreme/'&gt;AirPort Extreme Base Stations&lt;/a&gt; from &lt;a href='http://www.apple.com'&gt;Apple&lt;/a&gt; with the logic that;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hey it&amp;#8217;s Apple it&amp;#8217;ll &lt;em&gt;just work&lt;/em&gt; with the rest of my computers&lt;/li&gt;

&lt;li&gt;It will be fast as fcuk thanks to the 802.11n&lt;/li&gt;

&lt;li&gt;It will be able to handle my ever increasing download traffic&lt;/li&gt;

&lt;li&gt;I was wrong&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt='Apple Airport Extremely Shit' src='/assets/2008/2/26/extremely_shit.jpg' /&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; So apple have finally fixed this issue in the &lt;a href='http://www.apple.com/support/downloads/timecapsuleandairportbasestation80211nfirmware731.html'&gt;airport extreme update (firmware version 7.3.1)&lt;/a&gt; released last wednesday. I installed it straight away and have had no issues at all, huzzah! Thanks apple, finally I can say I recommend this product.&lt;/p&gt;

&lt;p&gt;So while yes it is pretty, and it was a snap to setup my network something rather strange started happening. I would have really great connectivity for about an hour then the router would die, the little green light on the front would go amber and nothing would happen. The only solution being to pull the plug from the router and wait for it to restart.&lt;/p&gt;

&lt;p&gt;I went investigating the problem and it seems like always it wasn&amp;#8217;t just me affected by a crashing router. The best write-up I found on the issue was from the excellent &lt;a href='http://codelaide.com/blog/2007/09/21/news-on-the-721-airport-extreme-issue/'&gt;codelaide software&lt;/a&gt; they actually write a really useful utility for the mac called &lt;a href='http://codelaide.com/blog/products/lighthouse'&gt;Lighthouse&lt;/a&gt; for dynamic port mapping so I would consider them an authority on the subject. In the article (which is albeit focused on their application) they reveal that it is actually a &lt;strong&gt;BUG&lt;/strong&gt; in the &lt;a href='http://www.apple.com/support/downloads/airportextremebasestationwith80211nfirmware721.html'&gt;AirPort Extreme Firmware &lt;strong&gt;(Version 7.2.1)&lt;/strong&gt;&lt;/a&gt;, yes folks you heard it. A &lt;strong&gt;BUG&lt;/strong&gt; with &lt;a href='http://www.apple.com'&gt;Apple&lt;/a&gt; software. It is with the NAT/PMP server receiving requests that are perfectly valid NAT/PMP request but the router just shits itself and dies.&lt;/p&gt;

&lt;p&gt;While the AirPort Extreme has been out for a while, it is available in two flavours now &lt;strong&gt;&amp;#8220;Fast Ethernet&amp;#8221;&lt;/strong&gt; and &lt;strong&gt;Gigabit Ethernet&lt;/strong&gt;. The fast ethernet version has been around for a while, if you have one of those and are experiencing these problems count yourself lucky. Just do the following;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the AirPort Utility&lt;/li&gt;

&lt;li&gt;Hold down option and select &lt;strong&gt;Check for updates&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Download AirPort Extreme Firmware &lt;strong&gt;(Version 7.1.1)&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Install that firmware on your base station&lt;/li&gt;

&lt;li&gt;Relax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now if you are like I and bought the &lt;strong&gt;Gigabit Ethernet&lt;/strong&gt; version you will notice that there is only firmware versions 7.2 and 7.2.1, there is nothing lower this is the factory shipped software, with a bug in it. Now you can downgrade to 7.2 and I would really advise you doing that, although it doesn&amp;#8217;t stop the base station from dying it does restart itself afterwards saving a little bit of the inconvenience. The only other thing you can do is turn off any bittorrent client you have running, while it won&amp;#8217;t cut it out completely it will reduce the chance of it happening quite a bit.&lt;/p&gt;

&lt;p&gt;So I phoned up &lt;a href='http://www.apple.com'&gt;Apple&lt;/a&gt; to discuss and well to cut a long story short they wanted to give me a new router no matter how much I explained to them that a firmware issue will be on every piece of hardware. Failing that they wanted me to make the long journey &lt;a href='http://www.mac-sys.co.uk/'&gt;Mac-Sys&lt;/a&gt;, now they&amp;#8217;re great guys but I don&amp;#8217;t think even &lt;a href='http://www.woz.org/'&gt;Steve Wozniak&lt;/a&gt; himself would be able to do anything. No matter how much I pressed or argued the fact or wanted to read out URLS for further info they were absolute in the fact that there is not a bug with their software. Well there is, and it seems to be getting worse every release please &lt;a href='http://www.apple.com'&gt;Apple&lt;/a&gt; acknowledge your dodgy software and fix the bugs, the last time you released an update to it was on August 29th 2007 what the hell have you been doing?&lt;/p&gt;

&lt;p&gt;Anyway, that&amp;#8217;s enough of a rant just don&amp;#8217;t buy an &lt;a href='http://www.apple.com/airportextreme/'&gt;Apple AirPort Extreme Base Station&lt;/a&gt; (at least until they get their act together) buy a &lt;a href='http://www.netgear.com/Products/APsWirelessControllers/AccessPoints/WN802T.aspx'&gt;Netgear Rangemax&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; So apple have finally fixed this issue in the &lt;a href='http://www.apple.com/support/downloads/timecapsuleandairportbasestation80211nfirmware731.html'&gt;airport extreme update (firmware version 7.3.1)&lt;/a&gt; released last wednesday. I installed it straight away and have had no issues at all, huzzah! Thanks apple, finally I can say I recommend this product.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ssh, Presentation in Progress</title>
   <link href="http://www.davidjrice.co.uk/2008/02/13/ssh-presentation-in-progress.html" />
   <updated>2008-02-13T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/02/13/ssh-presentation-in-progress</id>
   <content type="html">&lt;p&gt;Last night I gave a wee presentation at the &lt;a href='http://rubyireland.com/'&gt;Ruby Ireland&lt;/a&gt; meetup. A quick lighting talk on some &lt;a href='http://en.wikipedia.org/wiki/Secure_Shell'&gt;SSH&lt;/a&gt; tips and tricks, with some Unix fun for added measure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://davidjrice.co.uk/assets/2008/2/13/SSH_Lighting_Presentation.pdf'&gt;Slides (pdf)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was a bit of discussion and a couple of other links were mentioned;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://railstips.org/2007/3/5/my-local-rails-setup'&gt;Managing local Rails versions&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://nubyonrails.com/articles/sxsw-aliases'&gt;Aliases (for your command line)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having run out of &lt;em&gt;(obviously?)&lt;/em&gt; rushed presentation material I stuck &lt;a href='http://howcast.com'&gt;Howcast&lt;/a&gt; on screen and let the questions begin. There were a load of really great ones from the group so I hope it was even a little bit interesting for you!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Howcast Has Launched!</title>
   <link href="http://www.davidjrice.co.uk/2008/02/06/howcast-has-launched.html" />
   <updated>2008-02-06T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/02/06/howcast-has-launched</id>
   <content type="html">&lt;p&gt;I have waited for this moment for so long, it&amp;#8217;s great to finally be able to say that &lt;a href='http://howcast.com'&gt;Howcast&lt;/a&gt; has launched! The culmination of hard work over the past year by such an excellent team has produced something that I for one am really proud of. Now perhaps that makes me slightly bias but I do think it is the &lt;strong&gt;best&lt;/strong&gt; how-to site, possibly the &lt;strong&gt;best&lt;/strong&gt; online video site around. Anyway, &lt;a href='http://howcast.com'&gt;go check it out!&lt;/a&gt; If you want to find out more before the jump, the video below gives a great introduction to &lt;em&gt;what&lt;/em&gt; &lt;a href='http://howcast.com'&gt;Howcast&lt;/a&gt; is all about. If you want even more info, &lt;a href='http://blog.howcast.com'&gt;check out the company blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some time soon I will be sharing some more intimate details about the whole process and experience of building Howcast (NDA permitting :)), but is there anything &lt;em&gt;you&lt;/em&gt; want to know?&lt;/p&gt;

&lt;p&gt;(edit, there used to be an embedded video explaining howcast here. You can still &lt;a href='http://www.howcast.com/videos/946-What-Is-Howcast'&gt;view the original video at howcast.com&lt;/a&gt;)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ways to Boost Irelands Homegrown Creative &amp;amp; Technology Industries</title>
   <link href="http://www.davidjrice.co.uk/2008/02/05/ways-to-boost-ireland-s-technology-industry.html" />
   <updated>2008-02-05T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/02/05/ways-to-boost-ireland-s-technology-industry</id>
   <content type="html">&lt;p&gt;There are a lot of government bodies in Ireland devoted to improving the creative &amp;amp; tech industries, here are just a few of them;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.crea8ivity.com/'&gt;crea8ivity - Northern Ireland&amp;#8217;s Digital Hub&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.investni.com/'&gt;Invest Northern Ireland&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.enterprise-ireland.com/'&gt;Enterprise Ireland&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.momentumni.org/'&gt;Momentum - The Northern Ireland ICT Federation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.cecni.org/'&gt;Creative Entrepreneurs Club Northern Ireland&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.nesta.org.uk/'&gt;National Endowment for Science, Technology and the Arts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are all doing &lt;em&gt;something&lt;/em&gt; which is better than nothing, but there is so much more we &lt;strong&gt;could&lt;/strong&gt; be doing if we want to capture the same atmosphere of creativity and entrepreneurship that exists in silicon valley. I&amp;#8217;d just like to note here that Enterprise Ireland are far ahead of the game locally, there is still a lot they could be doing but they put their Northern Irish counterparts to shame.&lt;/p&gt;

&lt;h2 id='invest_small_more_frequently'&gt;Invest Small, More Frequently&lt;/h2&gt;

&lt;p&gt;The traditional approach is to provide the investment, funding, grants, cheap office space and other perks to the largest companies like the Apples and Googles. These guys are mostly in it for the tax breaks, not our elite college graduates no matter how the smoke and mirrors try and reflect the situation. The fact that these companies are generally provided with incentives proportional to the number of jobs they will provide changes the prerogative of these companies, they don&amp;#8217;t need to be super efficient, small and agile as it&amp;#8217;s encouraged to be a behemoth.&lt;/p&gt;

&lt;p&gt;The truth of the matter is that Google and Apple (and insert name of other successful tech company) all started small. The kinds of numbers that used to be needed to form and run a company are constantly being reduced through application of modern principles and great industry advances like utility computing. This all directly equates to reduced initial costs to just get out there and start a business to see if the idea works. In Silicon Valley the attitude is to just go for it, Venture Capitalists will fund a hundred small companies because odds are a lot of them will fail, some will be marginally successful and a couple will make them minted. It&amp;#8217;s probability 101.&lt;/p&gt;

&lt;h2 id='take_the_pain_away'&gt;Take the Pain Away&lt;/h2&gt;

&lt;p&gt;I have talked to many would-be entrepreneurs and some of them just can&amp;#8217;t make the leap to quitting their day job, be it for family or other money related reasons. If you could give this person just enough so they could take 6 months to a year off and help towards expenses you have just created another potential business.&lt;/p&gt;

&lt;p&gt;Also don&amp;#8217;t make your potential entrepreneurs do such merry dances and jumping through hoops. Make it simple to apply and attain funding.&lt;/p&gt;

&lt;h2 id='build_communities'&gt;Build Communities&lt;/h2&gt;

&lt;p&gt;Now what is really interesting is that I see people on the grassroots level doing such a far better job of building communities than those paid to do that exact job.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over the past year there have been regular &lt;a href='http://www.opencoffeeclub.org/'&gt;OpenCoffeeClub&lt;/a&gt; meetings in &lt;a href='http://www.opencoffeedublin.com/'&gt;Dublin&lt;/a&gt;, &lt;a href='http://corkopencoffee.org/'&gt;Cork&lt;/a&gt;, &lt;a href='http://opencoffeewaterford.wordpress.com/'&gt;Waterford&lt;/a&gt;, Limerick, Galway and &lt;a href='http://groups.google.com/group/belfastocc'&gt;Belfast&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;There were 4 &lt;a href='http://barcamp.org/'&gt;BarCamp&lt;/a&gt; conferences in 2007 in &lt;a href='http://barcamp.org/BarCampIreland'&gt;Ireland&lt;/a&gt; (Belfast, Dublin, Waterford and Galway).&lt;/li&gt;

&lt;li&gt;The &lt;a href='http://paddysvalley.org/'&gt;Paddy&amp;#8217;s Valley&lt;/a&gt; trip to Silicon Valley of 26 (or so) Irish entrepreneurs was a phenomenal success. Ask anyone else who went and they will tell you the same.&lt;/li&gt;

&lt;li&gt;The &lt;a href='http://www.coworking.ie/'&gt;Coworking&lt;/a&gt; initiative has had great success, they managed to pull together 4 freelancers to start an office in Dublin. I&amp;#8217;ve been a guest there numerous times and the atmosphere is so exciting.&lt;/li&gt;

&lt;li&gt;&lt;a href='http://paulfwalsh.com/'&gt;Paul Walsh&lt;/a&gt; has put on some great tech evenings for startups to practice pitching, cleverly named &lt;a href='http://segala.com/blog/curry-20-pitch-to-a-waiter/'&gt;Curry 2.0&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.techludd.com/'&gt;Techludd&lt;/a&gt; has quickly become the most successful and best attended event in the Irish technology industry. Setup by &lt;a href='http://antonmannering.com/'&gt;Anton&lt;/a&gt; and &lt;a href='http://www.blogcrumbs.blogspot.com/'&gt;Jessica&lt;/a&gt; after being inspired by Paddy&amp;#8217;s Valley.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the important thing about all of these burgeoning communities are the people involved. What they have achieved in building these social networks is astounding, the big difference is that these communities have been totally based around the people that attend them and completely lacking in the &lt;strong&gt;Business Bullshit&lt;/strong&gt; that tends to shroud more conventionally organised events. Such relationships have built up, business deals made and just general good craic has been had since their inception. Government bodies take heed or you will quickly become obsolete, start coming to events like these, maybe even fund a couple of them. Lets not rest on our laurels but make 2008 an even better year.&lt;/p&gt;

&lt;h2 id='start_a_real_digital_hub'&gt;Start a Real Digital Hub&lt;/h2&gt;

&lt;p&gt;There are government funded digital hubs springing up in many different places in Ireland. They are generally new builds with spacious offices and great technical specs but their priorities are in the wrong place to really help the homegrown industry flourish.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These digital hubs are generally structured to provide large spacious offices, with small tech startups this is not needed.&lt;/li&gt;

&lt;li&gt;They are generally located outside of town, away from the creative, cultural and innovative areas that entrepreneurs want to be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Taking the &lt;a href='http://www.nisp.co.uk'&gt;Northern Ireland Science Park&lt;/a&gt; in Belfast as an example, it is located near the upcoming &lt;a href='http://www.titanic-quarter.com/'&gt;Titanic Quarter&lt;/a&gt;. Cheap land for building large capacity offices, more space for more &lt;strong&gt;bums on seats&lt;/strong&gt; see a pattern forming? It might be a hub, but not now give it half a decade. Anyone that knows Belfast would agree that the &lt;strong&gt;Cathedral Quarter&lt;/strong&gt;, &lt;strong&gt;Queen&amp;#8217;s Quarter&lt;/strong&gt; or even the &lt;strong&gt;Linen Quarter&lt;/strong&gt; would be a better suited venue for a hub of any kind.&lt;/p&gt;

&lt;p&gt;There are several routes to the goal of creating a Coworking space in Belfast but the main hold up is getting enough totally committed freelancers and startups to make it a reality. What would really &lt;em&gt;ease the pain&lt;/em&gt; would be funding from one of the government bodies to create such a place. Just enough to get going as I believe if you build it, they will come.&lt;/p&gt;

&lt;h2 id='questions'&gt;Questions?&lt;/h2&gt;

&lt;p&gt;What I want to know is, after reading that do you have any questions? Any ideas on how we can push forward with some of these ideas in Ireland? If you do I&amp;#8217;d love to hear from you.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m going to post soon about how Universities fit into this picture, it was too much for one article.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>New Ways To Create Revenue Online - The Broadband Content Opportunity</title>
   <link href="http://www.davidjrice.co.uk/2008/01/31/new-ways-to-create-revenue-online-the-broadband-content-opportunity.html" />
   <updated>2008-01-31T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/31/new-ways-to-create-revenue-online-the-broadband-content-opportunity</id>
   <content type="html">&lt;p&gt;What a mouthful, it&amp;#8217;s a worse name than &lt;a href='http://www.techludd.com'&gt;techludd&lt;/a&gt;. It is actually the &lt;a href='http://www.crea8ivity.com/?page_id=194'&gt;title of an event&lt;/a&gt; run by &lt;a href='http://www.crea8ivity.com'&gt;crea8ivity&lt;/a&gt; on Tuesday of this week. Now, if you&amp;#8217;ve &lt;a href='http://www.crea8ivity.com'&gt;looked at their site&lt;/a&gt; you may see where I&amp;#8217;m coming from when I say that the majority of the content is utter &lt;strong&gt;&amp;#8220;Business Bullshit&amp;#8221;&lt;/strong&gt;. Which kind of gave me a correct view of what the event would mostly be like, mind you there were positive points too.&lt;/p&gt;

&lt;p&gt;After some brief introductions &lt;a href='http://www.tomski.com'&gt;Tom Loosemore&lt;/a&gt; took the stage to deliver a talk &lt;strong&gt;Welcome to the New Digital Era&lt;/strong&gt;. From the start it wasn&amp;#8217;t particularly interesting for someone that has &lt;em&gt;seen&lt;/em&gt; the internet before, albeit I do think he&amp;#8217;d just drawn the short straw on this one and quickly showed his smarts in the parts that strayed from the presentation topic. Especially the one about being more open about data services and apis, we can build more beautiful software, only if we become good web citizens. Rock on Tom.&lt;/p&gt;

&lt;p&gt;From the &lt;a href='http://www.bbc.co.uk'&gt;BBC&lt;/a&gt; Emma Somerville talked to us about some of the different projects they were doing on the web and also some different strategies they had applied. That&amp;#8217;s all well and good, but you &lt;em&gt;are&lt;/em&gt; the BBC. Doug Richards would later point out that we all don&amp;#8217;t have a radio and tv monopoly and can&amp;#8217;t benefit from such free and available advertising. He had another beautiful thing to say that &amp;#8220;The BBC should not be the monopoly producer of creative content it should be a monopoly consumer of content from outside bodies.&amp;#8221; wow, wouldn&amp;#8217;t that just shake up the industry in the UK.&lt;/p&gt;

&lt;p&gt;We then got a talk about the &lt;strong&gt;New Digital Innovators from Northern Ireland&lt;/strong&gt; from the project director of crea8ivity. This was to introduce one of the main reasons behind the evening which was the demo of a couple of companies that the crea8ivity initiative had funded. I believe they each got slices of a tasty £1 million pie and the rest was put into launching the crea8ivity project. Enough history. Here are the list of projects that were displayed on the night;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.edcastmedical.com'&gt;Edcast Medical&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.streamon.net'&gt;StreamOn.net&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.sonicacademy.com'&gt;Sonic Academy&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.awashontheweb.com'&gt;Awash on the Web&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://constantcomedy.com'&gt;Constant Comedy&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;iGolfPro&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.dark-water-studios.com'&gt;Dark Water Studios&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay so one of the companies &lt;a href='http://www.streamon.net'&gt;StreamOn&lt;/a&gt;, provide the systems for &lt;a href='http://www.edcastmedical.com'&gt;Edcast Medical&lt;/a&gt;, the &lt;a href='http://www.sonicacademy.com'&gt;Sonic Academy&lt;/a&gt; and &lt;a href='http://www.awashontheweb.com'&gt;Awash on the Web&lt;/a&gt;. They&amp;#8217;ve done pretty well out of the initiative bagging all those projects, I just can&amp;#8217;t get over the fact they&amp;#8217;re selling &lt;strong&gt;&amp;#8220;streaming video web solutions&amp;#8221;&lt;/strong&gt; when they are not offering &lt;strong&gt;streaming&lt;/strong&gt; video solutions, it&amp;#8217;s &lt;strong&gt;progressive download&lt;/strong&gt;. There&amp;#8217;s a &lt;strong&gt;big&lt;/strong&gt; difference, please internet stop bastardising this definition. My other main gripe is their use of Microsoft Publisher which means &lt;strong&gt;wmv&lt;/strong&gt; videos, if you can&amp;#8217;t be bothered to deliver your content in universally acceptable formats (flv anyone?) then I and a lot of other users probably can&amp;#8217;t be bothered to watch it (YES I CBA installing a wmv player!).&lt;/p&gt;

&lt;p&gt;The three clients of &lt;a href='http://www.streamon.net'&gt;StreamOn&lt;/a&gt; definitely need to discover &lt;a href='http://www.thelongtail.com/the_long_tail/2007/03/bob_lefsetz_on_.html'&gt;the power of free&lt;/a&gt;, there&amp;#8217;s no way I would sign up to any of those sites just based on first impressions. What I wanted to see on the front pages of each of them is a big freakin teaser video, then you might capture my attention enough to make me fill in the form. By requiring registration before a user can derive that there may be any potential benefit from a site you put up barriers to entry, you need to show them what they&amp;#8217;re missing.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href='http://constantcomedy.com'&gt;Constant Comedy&lt;/a&gt; great site, great idea made me laugh. They may be going places.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.dark-water-studios.com'&gt;Dark Water Studios&lt;/a&gt; fair play lads, how you managed to build a game development studio in Derry. Perhaps I will never know as you guys were swamped after the talks. Great to see.&lt;/p&gt;

&lt;p&gt;There was this iGolfPro thing there as well, it seemed pretty cool technology but it really didn&amp;#8217;t have anything to do with the web at all. Fail.&lt;/p&gt;

&lt;p&gt;So that&amp;#8217;s the &lt;strong&gt;new digital innovators from Northern Ireland&lt;/strong&gt; not to be harsh but none of them are the next google, &lt;a href='http://constantcomedy.com'&gt;Constant Comedy&lt;/a&gt; and &lt;a href='http://www.dark-water-studios.com'&gt;Dark Water Studios&lt;/a&gt; have a good chance of making it into prime time. I&amp;#8217;d love to see the rest of them be successful too but they&amp;#8217;ll need to change some things first.&lt;/p&gt;

&lt;p&gt;Back to Doug, it was really a breath of fresh air to hear someone just go for it and say what they really think. I can&amp;#8217;t even remember all of his keys to success but that&amp;#8217;s not important, the important thing was to hear how passionately he talked about doing amazing things with the web. One girl asked a question, she basically wanted to find out how she could have some private time to give him a business pitch. I think she almost died when Doug made her stand up and give an elevator pitch to him in front of the entire assembly. Fair play to crea8ivity for getting such an interesting speaker to an event in Belfast.&lt;/p&gt;

&lt;p&gt;So to round up it was great to see at least something happening locally in the web space even if it wasn&amp;#8217;t exactly what I wanted to see&amp;#8230; A lot of the event felt like being in high school during a sex education lecture by a teacher too old to be having never mind talking about sex without making those younger than them feel horribly uncomfortable. That&amp;#8217;s what it was like hearing Crea8ivity talk about the web. Too many suits, too much back patting for a job well done and not enough really getting to know people. &lt;a href='http://www.crea8ivity.com'&gt;Crea8ivity&lt;/a&gt; you did a fair job putting this together but you have no hope in building successful online business in this new social web if you cannot create real world social networks. You need to drop the business bullshit and maybe next time you get such a large chunk of money you might consider investing in some of the more interesting grass roots entrepreneurship initiatives happening in Belfast that you don&amp;#8217;t know about (I&amp;#8217;m talking about &lt;a href='http://www.opencoffeeclub.org/'&gt;OpenCoffee&lt;/a&gt; &amp;amp; The hopefully soon-to-make-it-to-Belfast &lt;a href='http://www.coworkin.com/'&gt;Coworking&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be following up tomorrow with a couple of more positive points on how we can boost the web and creative industries in Northern Ireland.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>This Week in Tech</title>
   <link href="http://www.davidjrice.co.uk/2008/01/29/this-week-in-tech.html" />
   <updated>2008-01-29T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/29/this-week-in-tech</id>
   <content type="html">&lt;p&gt;Really did not ever think I would see the day we would have one technology related event in Belfast. This week, there are three&amp;#8230;&lt;/p&gt;

&lt;h2 id='opencoffee_club'&gt;OpenCoffee Club&lt;/h2&gt;
&lt;img alt='Open Coffee Club' src='/assets/2007/10/23/open_coffee_belfast.png' /&gt;
&lt;p&gt;Tonight the &lt;a href='http://groups.google.com/group/belfastocc'&gt;Belfast OpenCoffee Club&lt;/a&gt; is meeting at &lt;a href='http://www.ampmbelfast.com/'&gt;AM:PM&lt;/a&gt; on Upper Arthur Street at 6pm. I&amp;#8217;ll be heading for food at about 5pm if anyone wants to join me for some very affordable and tasty grub. &lt;a href='http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;q=40-42+Upper+Arthur+Street+Belfast&amp;amp;sll=54.598696,-5.925837&amp;amp;sspn=0.008577,0.007575&amp;amp;ie=UTF8&amp;amp;ll=54.597186,-5.927768&amp;amp;spn=0.008577,0.007575&amp;amp;z=17&amp;amp;iwloc=addr&amp;amp;om=1'&gt;Here&amp;#8217;s a map&lt;/a&gt; if you&amp;#8217;re lost.&lt;/p&gt;

&lt;h2 id='new_ways_to_create_revenue_online__the_broadband_content_opportunity'&gt;New Ways To Create Revenue Online | The Broadband Content Opportunity&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://www.crea8ivity.com/?page_id=194'&gt;What a mouthful&lt;/a&gt;. Organised by a new? body &lt;a href='http://www.crea8ivity.com'&gt;crea8ivity&lt;/a&gt;. Looking forward to attending one of the first big tech events in Northern Ireland and seeing what kind of state the industry is in up here, there have been very few opportunities to really gauge it but I&amp;#8217;m going to have to go with &lt;strong&gt;corporate mire&lt;/strong&gt;. Sad but true, Dublin is light years ahead of Belfast in terms of people and their attitudes. I&amp;#8217;m really hoping I&amp;#8217;m guessing wrong and it isn&amp;#8217;t a den of &lt;a href='http://www.contrast.ie/blog/lets-go/'&gt;&amp;#8220;snake-oil salesmen&amp;#8221;&lt;/a&gt; as Eoghan alluded to in his recent (finally!) blog post.&lt;/p&gt;

&lt;p&gt;This is on tomorrow night 30th January, 5pm at the Innovation Centre at the Northern Ireland Science Park.&lt;/p&gt;

&lt;h2 id='open_island_conference'&gt;Open Island Conference&lt;/h2&gt;

&lt;p&gt;A &lt;a href='http://www.openisland.net/'&gt;one day conference on open source software&lt;/a&gt;, the programme seems quite vague from looking at it but should hopefully be quite interesting. This is on all day Friday at the &lt;a href='http://www.spiresbelfast.co.uk/'&gt;Spires centre&lt;/a&gt; in Belfast.&lt;/p&gt;

&lt;p&gt;See you there!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>TechLudd Dublin</title>
   <link href="http://www.davidjrice.co.uk/2008/01/28/techludd-dublin.html" />
   <updated>2008-01-28T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/28/techludd-dublin</id>
   <content type="html">&lt;p&gt;Last week I attended the &lt;a href='http://www.techludd.com/2008/01/09/event-24-january-dublin/'&gt;TechLudd event in Dublin&lt;/a&gt; it was the first (hopefully of many) &lt;a href='http://www.techludd.com'&gt;TechLudd&lt;/a&gt; events in Ireland. Maybe the name &lt;em&gt;will&lt;/em&gt; change again, but I think the spirit at least will live on. It was organised by &lt;a href='http://antonmannering.com/'&gt;Anton&lt;/a&gt; and &lt;a href='http://www.blogcrumbs.blogspot.com/'&gt;Jessica&lt;/a&gt; fair play to them for flying in the face of adversity and starting &amp;#8220;The largest and most successful social tech related event Ireland has ever seen&amp;#8221;. Here&amp;#8217;s to TechLudd Belfast, watch this space&amp;#8230;&lt;/p&gt;

&lt;p&gt;Oh and there are some pix&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://pix.ie/paulca/album/319140'&gt;By Paul&lt;/a&gt;, &lt;a href='http://pix.ie/paulca/album/319147'&gt;and then some&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://pix.ie/marcus/album/319126'&gt;By Marcus&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://pix.ie/jessi8074/album/319138'&gt;By Jessica&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Translink for your iPhone</title>
   <link href="http://www.davidjrice.co.uk/2008/01/21/translink-for-your-iphone.html" />
   <updated>2008-01-21T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/21/translink-for-your-iphone</id>
   <content type="html">&lt;p&gt;I recently put together &lt;a href='http://translink.davidjrice.co.uk'&gt;an iPhone application&lt;/a&gt; to get &lt;a href='http://www.translink.co.uk'&gt;Translink&lt;/a&gt; bus and train times on your iPhone. It started out life as a &lt;a href='http://www.rubyonrails.org/'&gt;rails&lt;/a&gt; application, I was intently set on &lt;strong&gt;&amp;#8220;Translink on Rails&amp;#8221;&lt;/strong&gt; for the article title but a last minute change to using the &lt;a href='http://merbivore.com/'&gt;merb&lt;/a&gt; framework saw to that. Really enjoyed my first real app using merb, it had a certain freeing aspect having such a bare bones framework to start on.&lt;/p&gt;

&lt;p&gt;The iPhone interface was dead simple thanks to the &lt;a href='http://code.google.com/p/iui/'&gt;iui&lt;/a&gt; library, leaving the guts of the work writing a parser for the completely awful HTML on the &lt;a href='http://www.translink.co.uk'&gt;Translink&lt;/a&gt; site, needless to say I had to get a little creative. Also used &lt;a href='http://davidjrice.co.uk/2008/01/16/scraping-sshtml-sub-standard-html-don-t-forget-to-tidy-up.html'&gt;my previous tip for cleaning up dodgy HTML&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are a couple of improvements I want to make before it&amp;#8217;s &lt;em&gt;finished&lt;/em&gt; such as;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Earlier and Later links for the search results&lt;/li&gt;

&lt;li&gt;Implement filtering by time&lt;/li&gt;

&lt;li&gt;Implement filtering by future date&lt;/li&gt;

&lt;li&gt;Implement filtering by travel mode (bus and/or train)&lt;/li&gt;

&lt;li&gt;Nicer interface&lt;/li&gt;

&lt;li&gt;Make it iPhone/iPod touch only and display a message to users on other browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any feedback or you find it useful please let me know, &lt;a href='http://translink.davidjrice.co.uk'&gt;go try it out!&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Belfast #PintsForStarters Meetup</title>
   <link href="http://www.davidjrice.co.uk/2008/01/17/belfast-ad-hoc-openbeer-club.html" />
   <updated>2008-01-17T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/17/belfast-ad-hoc-openbeer-club</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Previously known as OpenBeer&lt;/em&gt; (Thanks to &lt;a href='http://pix.ie'&gt;Marcus&lt;/a&gt; and &lt;a href='http://www.choosecontrast.com/'&gt;Eoghan&lt;/a&gt; for &lt;a href='http://twitter.com/marcusmacinnes/statuses/608919132'&gt;the name&lt;/a&gt;. I think it&amp;#8217;s &lt;em&gt;much&lt;/em&gt; better than OpenBeer and doesn&amp;#8217;t step on the toes of the similarly named &lt;a href='http://www.openbeer.it'&gt;OpenBSD group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.eoghanmccabe.com/naive-by-design/announcing-the-worlds-first-openbeer-club-dublin-28-april-2007/'&gt;Eoghan&lt;/a&gt; started this off in Dublin last year as a tongue-in-cheek event aimed at the same crowd as &lt;a href='http://www.opencoffeeclub.org/'&gt;OpenCoffee&lt;/a&gt; but with a later time slot and substituting beers for coffees. If you&amp;#8217;re interested in &lt;strong&gt;tech&lt;/strong&gt;, &lt;strong&gt;the web&lt;/strong&gt; or &lt;strong&gt;business&lt;/strong&gt; and want to meet others that share these interests you should come along. The venue is &lt;a href='http://www.apartmentbelfast.com/'&gt;The Apartment, Belfast&lt;/a&gt; (&lt;a href='http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;q=BT1+6JA&amp;amp;ie=UTF8&amp;amp;z=16&amp;amp;iwloc=addr&amp;amp;om=0'&gt;map&lt;/a&gt;) at 6pm tomorrow Friday the 18th of January 2008. Leave me a comment if you&amp;#8217;re coming so I can gauge numbers, &lt;strong&gt;I&amp;#8217;m buying the first round!&lt;/strong&gt; I know, I know it&amp;#8217;s short notice&amp;#8230; more organisation coming soon to an OpenBeer event near you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Event &lt;a href='http://upcoming.yahoo.com/event/408869'&gt;added to upcoming&lt;/a&gt; for your convenience &lt;strong&gt;UPDATE:&lt;/strong&gt; Changed the name to #PintsForStarters, oh and there&amp;#8217;s &lt;a href='http://twitter.com/marcusmacinnes/statuses/608919132'&gt;another event happening down in dublin &lt;em&gt;tonight&lt;/em&gt;&lt;/a&gt;. If that&amp;#8217;s handier for you.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Scraping sshtml (Sub-Standard HTML) Don't Forget To Tidy Up</title>
   <link href="http://www.davidjrice.co.uk/2008/01/16/scraping-sshtml-sub-standard-html-don-t-forget-to-tidy-up.html" />
   <updated>2008-01-16T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/16/scraping-sshtml-sub-standard-html-don-t-forget-to-tidy-up</id>
   <content type="html">&lt;p&gt;So I&amp;#8217;m working on a little project involving movie showing times &lt;em&gt;(more on that soon)&lt;/em&gt; where I need to scrape a web-page for a couple of nuggets of data. That website is &lt;a href='http://stormcinemas.co.uk/'&gt;stormcinems.co.uk&lt;/a&gt; only joking it&amp;#8217;s actually &lt;a href='http://www.stormcinemas.co.uk/'&gt;www.stormcinemas.co.uk&lt;/a&gt;. Anyway during testing I saved a copy of the HTML from Firefox to use as a testing fixture, after a little while I had finished everything and wanted to give it a live run. Job done I thought, nope the first run gave all sorts of errors and it took me ages to figure out why.&lt;/p&gt;

&lt;p&gt;In this situation the HTML being sent back to the browser is so &lt;a href='http://validator.w3.org/check?verbose=1&amp;amp;uri=http%3A%2F%2Fwww.stormcinemas.co.uk%2Fbelfast%2F'&gt;invalid&lt;/a&gt; that Firefox cries out in pain and does some work to fix things up behind the scenes. So whenever I saved the page, that wasn&amp;#8217;t the HTML you get from a request via ruby&amp;#8217;s Net::HTTP library. The main problem is on &lt;a href='http://belfast.stormcinemas.co.uk/bookingDetails.tpl'&gt;this page&lt;/a&gt; where there are no &amp;#60;tr&amp;#62; elements in the showing times table and simply trying to parse it with &lt;a href='http://code.whytheluckystiff.net/hpricot/'&gt;hpricot&lt;/a&gt; is a no go.&lt;/p&gt;

&lt;p&gt;Looking around the web for a solution I found this neat little unix program &lt;a href='http://tidy.sourceforge.net/'&gt;tidy&lt;/a&gt; and to my surprise it was already on my mac, whoop! So here&amp;#8217;s a little ruby method you can use to give that fugly HTML a spring clean before running it through your parsers.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require &amp;#39;open3&amp;#39;

def tidy(html)
  tidied_html = &amp;quot;&amp;quot;
  Open3.popen3(&amp;quot;tidy --force-output true&amp;quot;) do |stdin, stdout, stderr|
    stdin.puts(html)
    stdin.close
    tidied_html &amp;lt;&amp;lt; stdout.read
  end
  return tidied_html
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After going through all this extra work I was wondering who actually did the site, a wee look on the page itself and there&amp;#8217;s no evidence, but checking the source I can see that it was developed by &lt;a href='http://tibus.com/'&gt;Tibus&lt;/a&gt; (at least they got their own dns records sorted) I wonder if my table row problem has anything to do with the lack of accreditation?&lt;/p&gt;

&lt;p&gt;Oh last one, honest. This &lt;strong&gt;really&lt;/strong&gt; made my day when I saw it, whatever developer wrote this line of code I &lt;em&gt;heart&lt;/em&gt; you. Lesson, if you don&amp;#8217;t want your work to be known. Don&amp;#8217;t do this.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#tibus-strapline { display: none; ... }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Peace.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A New Year, A New Resolve</title>
   <link href="http://www.davidjrice.co.uk/2008/01/06/a-new-year-a-new-resolve.html" />
   <updated>2008-01-06T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2008/01/06/a-new-year-a-new-resolve</id>
   <content type="html">&lt;p&gt;Usually, I don&amp;#8217;t indulge myself with the idea that I should change something about my life &lt;em&gt;just&lt;/em&gt; because the calendar has flipped over another year. This year however is different, it&amp;#8217;s not that I want to make &lt;strong&gt;New Year&amp;#8217;s Resolutions&lt;/strong&gt; per se, it&amp;#8217;s just that so much inspiration has come to me in the past weeks and months that I really want to make something of. The downtime over Christmas has provided the perfect opportunity to get some of my thoughts together but I&amp;#8217;m still reeling from things like &lt;a href='http://paddysvalley.org/'&gt;Paddy&amp;#8217;s Valley&lt;/a&gt; (and that new year&amp;#8217;s day hangover) so my personal plan for self betterment is a work in progress.&lt;/p&gt;

&lt;p&gt;Just like &lt;a href='http://goodonpaper.org'&gt;Andy&lt;/a&gt; and &lt;a href='http://words.iced-coffee.com/'&gt;Phil&lt;/a&gt; I too made resolutions, a couple of which are in the same vein which I guess is hard &lt;em&gt;not&lt;/em&gt; to as these things tend to be quite universally applicable. Unlike them however I was pretty slow on blogging mine. So slow in fact, I&amp;#8217;ve already managed to complete two huzzah!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just do it:&lt;/strong&gt; One of the main take-aways from Paddy&amp;#8217;s Valley was the pure energy I had, the urge to create, to connect, to capture my ideas and inspiration when they are just a fleeting thought and run with them. Not just about work, this is something I want to apply to every aspect of my life. This year I just want to freakin do it. No procrastinating, no worrying, just do it. (This new years resolution sponsored by nike)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cut the clutter:&lt;/strong&gt; If you&amp;#8217;re like me (and you probably are) you also have a large pile of supposedly &lt;strong&gt;important&lt;/strong&gt; paper that continuously gets added to until one day it is so unbearable that you sit down and deal with everything at once, realising half way through that there&amp;#8217;s bills to pay, I&amp;#8217;ve missed the date by a week and it&amp;#8217;s no longer relevant, damn. So, to defeat &lt;strong&gt;the pile&lt;/strong&gt; I am purchasing &lt;a href='http://www.fujitsu.com/global/services/computing/peripheral/scanners/ss/lineup/'&gt;one of these badboys, the ScanSnap S510M&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spread my wings: (done!)&lt;/strong&gt; For about a year now I&amp;#8217;ve been working away at the &lt;a href='http://www.flickr.com/photos/davidjrice/1352792634/'&gt;smallest desk in the world&lt;/a&gt; it was a lot better than &lt;em&gt;couch-coding&lt;/em&gt; but it still sucked. My concurrency was so poor, unable to have a book open while I&amp;#8217;m working is like heresy to me as I love to make little notes and scribbles to get ideas down, now I can since &lt;a href='http://www.flickr.com/photos/davidjrice/sets/72157603623346629/'&gt;my new office&lt;/a&gt; arrived a couple of days ago and it ROCKS!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Real Syllabus:&lt;/strong&gt; Now that I no-longer have to do completely ridiculous things like learn the entire &lt;a href='http://java.sun.com/javame/reference/apis.jsp'&gt;Java 2 Micro Edition API&lt;/a&gt; off by heart or code HTML and CSS by hand with a pen &amp;amp; paper (seriously &lt;a href='http://www.qub.ac.uk/schools/eeecs/'&gt;Queen&amp;#8217;s?&lt;/a&gt;). I enjoy the creative freedom of having my own syllabus, which I have constructed in the form of a gargantuan list of books to read and code to try out. Perhaps I will share it at some point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fiscal Responsibility: (done!)&lt;/strong&gt; In the past I haven&amp;#8217;t exactly been idiotic with money, but I haven&amp;#8217;t been that smart with it either and this year I want to change that. Ever since I could get online statements from the Halifax, I opted in thinking that &lt;em&gt;someday these will be handy&lt;/em&gt; I even started to write a web application to collate this information and give me purty graphs. That was sidelined for a while and when I picked it back up someone had already done the work for me yay, thanks &lt;a href='https://www.wesabe.com/'&gt;Wesabe&lt;/a&gt;! In a couple of hours on one of those lazy Christmas days I imported all those years of bank statements, did a wee bit of &lt;a href='http://www.flickr.com/photos/pleasewait/408949026/in/set-72157594452399017/'&gt;tagging&lt;/a&gt; and was able to see some really cool &amp;amp; slightly scary graphs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mr motivator:&lt;/strong&gt; In the past two years my fitness level and general &lt;strong&gt;healthiness quotient&lt;/strong&gt; has looked somewhat like a graph of Sine. Now that I no-longer have to suffer in the enterprise &amp;amp; have finished the massive waste of time that was the &lt;a href='http://www.qub.ac.uk/schools/eeecs/'&gt;Computer Science course at Queen&amp;#8217;s&lt;/a&gt; (I actually can&amp;#8217;t believe their website has gotten worse since I last looked, wtf is up with the picture of the iPod, the squashed aspect ratio graphics, those uber crap buttons, I thought it might just be safari but it looks just as shit in firefox. Woah, end rant). Anyway now that I&amp;#8217;m self employed I&amp;#8217;m making a concerted effort to spend more time away from the computer, the clincher will be in keeping this up when I am back at my pre-christmas level of work.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>think dfs, think</title>
   <link href="http://www.davidjrice.co.uk/2007/10/23/think-dfs-think.html" />
   <updated>2007-10-23T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/10/23/think-dfs-think</id>
   <content type="html">&lt;img alt='Christmas by DFS' src='/assets/2007/10/23/duh_dfs.jpg' /&gt;
&lt;p&gt;Notice anything weird in this picture? Wonder how many people at &lt;a href='http://www.dfsonline.co.uk'&gt;dfs&lt;/a&gt; &amp;#8220;signed off&amp;#8221; on this before not realising they&amp;#8217;ve spelt &lt;a href='http://www.isitchristmas.com/'&gt;Christmas&lt;/a&gt; wrong on every product page. Ouch. Thank Christ the designers used a little CSS and it&amp;#8217;s not hand grafted into every product image.&lt;/p&gt;

&lt;p&gt;Consequently yes, I&amp;#8217;m looking for a &lt;strong&gt;damn&lt;/strong&gt; comfy sofa.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>OpenCoffee Belfast Meetup Tomorrow</title>
   <link href="http://www.davidjrice.co.uk/2007/10/23/opencoffee-belfast-meetup-tomorrow.html" />
   <updated>2007-10-23T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/10/23/opencoffee-belfast-meetup-tomorrow</id>
   <content type="html">&lt;img alt='Open Coffee Club' src='/assets/2007/10/23/open_coffee_belfast.png' /&gt;
&lt;p&gt;The &lt;a href='http://groups.google.com/group/belfastocc'&gt;Belfast Open Coffee Club&lt;/a&gt; is meeting at &lt;a href='http://www.ampmbelfast.com/'&gt;AM:PM&lt;/a&gt; on Upper Arthur Street, tomorrow (the 24th of October) at 6pm. I&amp;#8217;ll be heading there for some food at around 5 should anyone wish to come along that wee bit earlier.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you&amp;#8217;re interested, don&amp;#8217;t be shy just come along. Or &lt;a href='http://groups.google.com/group/belfastocc'&gt;join the google group&lt;/a&gt; to get your courage up.&lt;/li&gt;

&lt;li&gt;If you&amp;#8217;re lost, &lt;a href='http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;q=40-42+Upper+Arthur+Street+Belfast&amp;amp;sll=54.598696,-5.925837&amp;amp;sspn=0.008577,0.007575&amp;amp;ie=UTF8&amp;amp;ll=54.597186,-5.927768&amp;amp;spn=0.008577,0.007575&amp;amp;z=17&amp;amp;iwloc=addr&amp;amp;om=1'&gt;here is the exact location on google maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Could you design a website? Because we can't and can't afford to do it properly either</title>
   <link href="http://www.davidjrice.co.uk/2007/10/22/could-you-design-a-website-because-we-can-t-and-can-t-afford-to-do-it-properly-either.html" />
   <updated>2007-10-22T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/10/22/could-you-design-a-website-because-we-can-t-and-can-t-afford-to-do-it-properly-either</id>
   <content type="html">&lt;p&gt;Belfast city council are &lt;a href='http://www.belfastcity.gov.uk/webcomp'&gt;running a competition&lt;/a&gt; to redesign the site for the get home safe campaign. That&amp;#8217;s &lt;a href='http://gethomesafe.org/'&gt;http://gethomesafe.org&lt;/a&gt;, no no wait only joking it&amp;#8217;s &lt;a href='http://www.gethomesafe.org/'&gt;http://www.gethomesafe.org/&lt;/a&gt; yet another site run by someone without the &lt;strong&gt;enormous&lt;/strong&gt; technical knowledge required to make it work without the www subdomain.&lt;/p&gt;

&lt;p&gt;Before I get distracted, lets go over the prize £1000 plus an additional two payments of £500 over two years. Oh and guess what that means, it&amp;#8217;s a maintenance job too. Even the fact that it is a competition targeted at &lt;strong&gt;students in third level education&lt;/strong&gt;, it does distil down to a lot of cheap &amp;#8216;spec&amp;#8217; work provided by students. It&amp;#8217;s things like this that perpetuate the &lt;em&gt;&amp;#8220;Oh I got my next door neighbour to design me a website for £50&amp;#8221;&lt;/em&gt; scenarios, and I for one don&amp;#8217;t like it.&lt;/p&gt;

&lt;p&gt;I also enjoyed their ridiculous but &lt;strong&gt;I knew that&amp;#8217;d say that&lt;/strong&gt; requirement, &lt;em&gt;&amp;#8220;all entries should be submitted on CD Rom along with two A4 prints of each page of the design.&amp;#8221;&lt;/em&gt; haven&amp;#8217;t they ever heard of&amp;#8230; the internet?&lt;/p&gt;

&lt;p&gt;Anyway, all that aside I hope the outcome of this competition is that another great designer comes out of the woodwork, produces a winning (and good) design and we aren&amp;#8217;t all treated to another shiny piece of junk no-one will ever visit. (Just like this site you say?)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>FOWA Future of Web Apps London 2007 Day2 </title>
   <link href="http://www.davidjrice.co.uk/2007/10/04/fowa-future-of-web-apps-london-2007-day-2.html" />
   <updated>2007-10-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/10/04/fowa-future-of-web-apps-london-2007-day-2</id>
   <content type="html">&lt;img alt='FOWA London' src='/assets/2007/10/4/fowa_london.jpg' /&gt;
&lt;p&gt;Today my main highlight was &lt;a href='http://www.paulgraham.com/'&gt;Paul Graham&lt;/a&gt; talking about the &lt;a href='http://www.paulgraham.com/webstartups.html'&gt;&amp;#8220;Future of Web Startups&amp;#8221;&lt;/a&gt; as inspirational as ever he depicts the changing web landscape that is allowing more startups than ever to be founded and even flourish, I really suggest checking out his talk.&lt;/p&gt;

&lt;p&gt;Another was &lt;a href='http://swardley.blogspot.com/'&gt;Simon Wardley&lt;/a&gt; gave his presentation &amp;#8220;Short on Cycles Long on Storage&amp;#8221; which has probably the &lt;strong&gt;MOST&lt;/strong&gt; slides I have ever seen (300) and in half an hour at that. Really enjoyed the analogy that launching an app and building the hardware, server software and framework is like building a house and with it&amp;#8217;s own power plant&amp;#8230; Utility computing is the future, and will allow better commoditisation of ideas.&lt;/p&gt;

&lt;p&gt;The talk by &lt;a href='http://www.hackdiary.com/'&gt;Matt Biddulph&lt;/a&gt; from &lt;a href='http://www.dopplr.com/'&gt;Dopplr&lt;/a&gt; talked about &amp;#8220;Smart Web App Integration With Third Part Sites &amp;amp; Services&amp;#8221;. Very interesting, and yielded a couple of links I wasn&amp;#8217;t aware of.&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://mofo.rubyforge.org/'&gt;Mofo&lt;/a&gt; &lt;em&gt;(a microformat parser for ruby)&lt;/em&gt; * &lt;a href='http://rfacebook.rubyforge.org/'&gt;RFacebook&lt;/a&gt; &lt;em&gt;(a ruby interface for the facebook API)&lt;/em&gt; * &lt;a href='http://www.woosh.com/'&gt;Woosh&lt;/a&gt; &lt;em&gt;(hosted trac + svn hosting)&lt;/em&gt; * &lt;a href='http://code.google.com/p/ec2-on-rails/'&gt;Pre built ec2 rails images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.plasticbag.org/'&gt;Tom Coates&lt;/a&gt; from Yahoo gave us an insight into a tasty project from yahoo labs &lt;a href='http://fireeagle.research.yahoo.com/'&gt;FireEagle&lt;/a&gt;, nice name. I can just picture countless animated intros to &lt;a href='http://www.zefrank.com/'&gt;Ze Frank&amp;#8217;s&lt;/a&gt; &amp;#8220;Ride the Fire Eagle Danger Day&amp;#8221; feature from his podcast. Cool stuff, can&amp;#8217;t wait to see it in the open.&lt;/p&gt;

&lt;p&gt;Finally there was an interesting panel discussion with a number of the speakers from FOWA, citing their best tips and screw ups. All together a great conference, good laughs, some learning and new contacts. Props to &lt;a href='http://www.carsonified.com/'&gt;carsonified&lt;/a&gt; for a successful one, oh and the free beers too :) looking forward to the next one.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>FOWA Future of Web Apps London 2007</title>
   <link href="http://www.davidjrice.co.uk/2007/10/03/future-of-web-apps-london-2007.html" />
   <updated>2007-10-03T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/10/03/future-of-web-apps-london-2007</id>
   <content type="html">&lt;p&gt;So I&amp;#8217;m out here in the London Docklands for the &lt;a href='http://www.futureofwebapps.com/'&gt;Future of Web Apps&lt;/a&gt; conference, so far it&amp;#8217;s been entertaining and information packed. Managed to collect a couple of titbits from the talks today.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://stevesouders.com'&gt;Steve Sounders&lt;/a&gt; from Yahoo gave a great talk based mostly upon his book &lt;a href='http://www.oreilly.com/catalog/9780596529307/'&gt;&amp;#8220;High Performance Web Sites&amp;#8221;&lt;/a&gt;, great ideas on performance tuning a Web Site with a slight slant to focusing on the front end rather than the traditional back-end tuning. I&amp;#8217;ll definitely be taking this approach in the future.&lt;/p&gt;

&lt;p&gt;The man behind Ajaxian.com &lt;a href='http://almaer.com/blog/'&gt;Dion Almaer&lt;/a&gt; presented about the beta software &lt;a href='http://gears.google.com/'&gt;Google Gears&lt;/a&gt;, which looks to be a neat way of taking web applications offline. Though admittedly it looks like in the current form it&amp;#8217;s only really suited for a number of applications (a-la google reader), might look at this again as I &lt;em&gt;know&lt;/em&gt; I&amp;#8217;ll be needing it soon with a forthcoming start-up.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.abilitynet.org.uk/'&gt;Robin Christopherson&lt;/a&gt; gave us half an hour in a visual impaired person&amp;#8217;s shoes, really inspirational. Seeing someone use a computer in such a competent manner without the use of sight, it has totally changed the way I view accessibility. Google appear as a role model for the industry whereas other giants like Amazon have a &lt;em&gt;long&lt;/em&gt; way to go.&lt;/p&gt;

&lt;p&gt;From &lt;a href='http://www.pownce.com'&gt;Pownce&lt;/a&gt;, &lt;a href='http://deltatangobravo.com/'&gt;Daniel Burka&lt;/a&gt; showed everyone how to interpret user feedback in the short and long terms. An interesting insight into the patience and analysis required when dealing with waves of feedback after a big product lunch.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.wordpress.com'&gt;Wordpress&lt;/a&gt; creator &lt;a href='http://photomatt.net/'&gt;Matt Mullenweg&lt;/a&gt; talked through some of the architecture of Wordpress. For me the main takeaways were his thoughts about hiring in particular, the attitude that it&amp;#8217;s good to say no. &amp;#8220;If you have any doubts about a specific hire, just walk away. You didn&amp;#8217;t need them yesterday so you can do without them tomorrow.&amp;#8221; Probably not a direct quote but you get the picture. Hiring is the most important for a new start-up and it&amp;#8217;s crucial to get it right. Another gem was also about specifically targeting particular segments of your user base with adverts. Instead of showing them to everyone they took the approach to showing them only to the small amount of users that are once off visitors coming in from a search engine. Great idea, keeping revenue and CPM up there whilst not spoiling the user experience for loyal visitors.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://haughey.com/'&gt;Matthew Haughey&lt;/a&gt; talked about his experience building a community with &lt;a href='http://www.metafilter.com/'&gt;MetaFilter&lt;/a&gt; unfortunately I didn&amp;#8217;t really get anything useful from this talk.&lt;/p&gt;

&lt;p&gt;Heidi Pollock from &lt;a href='http://www.bluepulse.com/'&gt;bluepulse&lt;/a&gt; showed us how crazy designing for mobile browsers is at present, with some good practices for staying at least partially sane. Her last jab about iPhone web interfaces being ridiculously easy had me in stitches, with such a myriad of &lt;em&gt;real&lt;/em&gt; mobile platforms to design for, getting an iPhone version out isn&amp;#8217;t exactly a &lt;em&gt;big&lt;/em&gt; accomplishment.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://ejohn.org/'&gt;John Reisg&lt;/a&gt; gave people a brief look into what the future holds for Firefox, Javascript and a whole kit and caboodle of other tricks. Great stuff, I&amp;#8217;m really looking forward to some of this. Especially IronMonkey, which is an attempt to enable coding Javascript in Ruby using the Tamarind engine donated by Adobe to the Mozilla Corporation (yes I&amp;#8217;m still parsing that too).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://kevinrose.com/'&gt;Kevin Rose&lt;/a&gt; (you know who he is :)) ran through some of the lessons learned from launching Revision3, Pownce and oh yes of course Digg. Very interesting, totally struck a chord with his comments about the importance of starting small and bootstrapping than going the VC route straight off the bat.&lt;/p&gt;

&lt;p&gt;After the serious stuff the whole conference was treated to an &lt;em&gt;electric&lt;/em&gt; live recording of &lt;a href='http://www.diggnation.com/'&gt;diggnation&lt;/a&gt;, Kevin &amp;amp; Alex were totally on form (aided slightly by a variety of import brews). Yes, hilarity did ensue. Followed by a bit of a party thrown by &lt;a href='http://www.carsonified.com/'&gt;carsonified&lt;/a&gt;, did someone say free drinks? Good times. More tomorrow.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rails Rumble</title>
   <link href="http://www.davidjrice.co.uk/2007/09/10/rails-rumble.html" />
   <updated>2007-09-10T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/09/10/rails-rumble</id>
   <content type="html">&lt;img alt='Rails Rumble' src='/assets/2007/9/10/railsrumble_yellow_120.png' style='float:right' /&gt;
&lt;p&gt;I took part in the &lt;a href='http://www.railsrumble.com'&gt;Rails Rumble&lt;/a&gt; 48 hour programming competition this weekend, it was good fun to participate and in the end that was all that mattered as our team gradually became just me &lt;em&gt;(though I did find a partner to pair program with in the early hours :))&lt;/em&gt;. Putting together &lt;a href='http://mowawi.railsrumble.com'&gt;mowawi&lt;/a&gt; &amp;#8220;Mobile Waypointing Wiki&amp;#8221;, I was quite pleased with the result given the time&amp;#8230; if only we&amp;#8217;d had a full team, perhaps we could have done something &lt;em&gt;interesting&lt;/em&gt; with the idea.&lt;/p&gt;

&lt;p&gt;&lt;img alt='Pair Programming' src='/assets/2007/9/10/pair_programming_small.jpg' /&gt;&lt;/p&gt;

&lt;p&gt;Thanks to all of the organisers, even more so to all of the teams as I&amp;#8217;m looking forward to look at some of the cool ideas in a bit more depth.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UPDATE:&lt;/em&gt; looks like one of the last minute changes messed up the signup, I was developing till the very end and got caught in the stream of people trying to also do last minute changes. Disappointing yeah. Oh well, good luck everybody :)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UPDATE:&lt;/em&gt; thanks to &lt;a href='http://deeden.co.uk'&gt;deeden&lt;/a&gt; for pointing out &lt;a href='http://railsrumble.com/2007/9/11/important-announcements'&gt;this important rails rumble announcement&lt;/a&gt;. Thankfully I was able to fix the signup bug and add a demo account, whoop! Go &lt;a href='http://mowawi.railsrumble.com'&gt;check it out!&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Where do you want to go today?</title>
   <link href="http://www.davidjrice.co.uk/2007/09/04/where-do-you-want-to-go-today.html" />
   <updated>2007-09-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/09/04/where-do-you-want-to-go-today</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m pretty sure it&amp;#8217;s not just me and that the &lt;a href='http://www.easyjet.com'&gt;easyjet&lt;/a&gt; website really is quite badly put together, I mean the design lameness would take at least a couple of hours to write out. Tonight however, while trying to simply book one flight from Berlin back to Belfast (&lt;a href='http://europe.railsconf.org'&gt;RailsConfEurope&lt;/a&gt; here I come!) I got a whole host of software development nasties presented to me. I managed to get all the way to the final step but clicking the submit button it hung for &lt;strong&gt;ages&lt;/strong&gt;. Deciding to let it run the course I finally got this lovely error;&lt;/p&gt;

&lt;p&gt;&lt;img alt='Easyjet suck!' src='http://www.davidjrice.co.uk/assets/2007/9/4/easyjet_suck.jpg' /&gt;&lt;/p&gt;

&lt;p&gt;After this I got a couple &lt;em&gt;Service Unavailables&lt;/em&gt; and then I finally got a booking confirmation, not exactly confidence inspiring since it was the last page, god knows if I&amp;#8217;ll be receiving a rake of withdrawals from my bank. No wonder I worry about my bags.&lt;/p&gt;

&lt;p&gt;Lets be fair now, what travel company&amp;#8217;s website doesn&amp;#8217;t suck, be honest. Even &lt;a href='http://www.skyscanner.net'&gt;the ones doing something remotely cool&lt;/a&gt;, well their site still does kinda suck. One of the main problems in my mind is that when you&amp;#8217;re booking flights you don&amp;#8217;t really care where you depart from, it&amp;#8217;s where you end up that&amp;#8217;s important. I couldn&amp;#8217;t care less if I flew from Belfast or Dublin, but when searching even with &lt;a href='http://www.skyscanner.net'&gt;Sky Scanner&lt;/a&gt; (which does a good job of comparing flights) you still need to search for the two different departures.&lt;/p&gt;

&lt;p&gt;Wouldn&amp;#8217;t it be wonderful if we lived in a world where this wasn&amp;#8217;t the standard of airline sites? Where airline operators offered free data APIs so cross comparison sites could start to be more useful? When I could just arrive at a site and answer the question &lt;strong&gt;Where do you want to go today?&lt;/strong&gt; Or&amp;#8230; maybe I&amp;#8217;m just a dreamer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UPDATE:&lt;/em&gt; Woo a &lt;a href='http://www.kayak.com'&gt;really cool flights search&lt;/a&gt; just popped up on my radar thanks to my transcontinental buddy. Sky scanner, you are now relegated.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Halifax Verified by Visa, Just F*** Off</title>
   <link href="http://www.davidjrice.co.uk/2007/08/25/halifax-verified-by-visa-just-f-off.html" />
   <updated>2007-08-25T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/08/25/halifax-verified-by-visa-just-f-off</id>
   <content type="html">&lt;p&gt;One thing that &lt;strong&gt;REALLY&lt;/strong&gt; annoys me about shopping online is that little &lt;a href='http://www.visa.com/verified'&gt;verified by visa logo&lt;/a&gt;, whenever I see it I cringe cause I know I&amp;#8217;ll have to reset my password in a couple of clicks time.&lt;/p&gt;

&lt;p&gt;It pisses me off cause there is no choice in the matter, if you have a VISA card this is automatic. Also because the way the HTML is constructed Safari&amp;#8217;s password keychain functionality doesn&amp;#8217;t know to store it so I have to re-enter every time I come to one of these checkouts.&lt;/p&gt;

&lt;p&gt;Now, this wouldn&amp;#8217;t normally be a problem. But for a company apparently SO conscious about security to use the Verified by Visa system they have decided to take a really idiotic move and exclude non alpha numeric characters from the password you are allowed to enter. So just to break it down, here are the maximum number of permutations required to &lt;strong&gt;guess&lt;/strong&gt; a password (that up carret represents to the power of);&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowing any ASCII character in the password = &lt;strong&gt;MAX LENGTH ^ 128&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Allowing only alpha numeric characters = &lt;strong&gt;MAX LENGTH ^ 36&lt;/strong&gt; (26 letters + 10 numbers)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay so that&amp;#8217;s not actually true, cause you would need to sum of the guesses of each permutation for each password length just like the following few lines of ruby do.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;MAX_LENGTH = 32
(0..MAX_LENGTH).inject{ |sum,n| sum+n**128 }
(0..MAX_LENGTH).inject{ |sum,n| sum+n**36 }    &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So as you can see the Halifax way of doing things is &lt;strong&gt;kinda&lt;/strong&gt; NOT as secure.&lt;/p&gt;

&lt;p&gt;So being security minded, any of the potential passwords I would usually choose always have a couple of extra characters in there to increase it&amp;#8217;s strength. However I have to make exceptions for Halifax. This leads to forgetting the password and having to &lt;strong&gt;RESET EVERY TIME!&lt;/strong&gt; so annoying.&lt;/p&gt;

&lt;p&gt;But this leads me to the question, if they are doing something as stupid as this. Are they also storing my password in clear text?&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d like to see Halifax either;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sort out the usability so it works with password keychains, these are secure things don&amp;#8217;t you know&lt;/li&gt;

&lt;li&gt;Don&amp;#8217;t be stupid, and change your restriction on password formats&lt;/li&gt;

&lt;li&gt;Or just F*** off, please k? thx.&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>OpenCoffee Belfast</title>
   <link href="http://www.davidjrice.co.uk/2007/08/22/opencoffee-belfast.html" />
   <updated>2007-08-22T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/08/22/opencoffee-belfast</id>
   <content type="html">&lt;p&gt;Things are starting to happen in the technology industry on this fair isle. Last week I attended the first meeting of &lt;a href='http://opencoffee.ning.com/group/belfastocc'&gt;OpenCoffee Belfast&lt;/a&gt; thanks to a &lt;a href='http://www.opencoffeeclub.org/forum/topic/show?id=609012%3ATopic%3A1156'&gt;random tip&lt;/a&gt; from &lt;a href='http://www.aidanf.net/'&gt;Aidan&lt;/a&gt; via IRC (funny how the news travels sometimes).&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s hoping the kind of community atmosphere that&amp;#8217;s building down in Dublin permeates the border.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails Plugin Test::Unit to RSpec Converter</title>
   <link href="http://www.davidjrice.co.uk/2007/08/12/ruby-on-rails-plugin-test-unit-to-rspec-converter.html" />
   <updated>2007-08-12T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/08/12/ruby-on-rails-plugin-test-unit-to-rspec-converter</id>
   <content type="html">&lt;p&gt;Recently I&amp;#8217;ve been thinking about updating some test cases to the excellent &lt;a href='http://rspec.rubyforge.org/'&gt;RSpec&lt;/a&gt;, I really didn&amp;#8217;t want to have to manually create all the spec files so I put it off&amp;#8230; until today when I finally got some inspiration by way of the &lt;a href='http://www.pivotalblabs.com/articles/2007/06/02/using-search-and-replace-regular-expressions-to-convert-from-test-unit-to-rspec'&gt;Pivotal Labs Blog&lt;/a&gt;. With a bit of work I was able to put together this plugin, to the point where it would generate specs that would pass, woo! That was with a small-ish application, with any significant sized I have tried it out on it&amp;#8217;s taken a while to massage the generated specs so they will run. So if you&amp;#8217;ve been putting off the move to &lt;a href='http://rspec.rubyforge.org/'&gt;RSpec&lt;/a&gt; you need wait no longer! :)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install \
http://svn.davidjrice.co.uk/svn/projects/plugins/test_unit_to_rspec_converter
rake convert_to_rspec&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Before you run the command, take heed as it will overwrite files in the spec directory of your application if they already exist!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; If this is your first time using rspec then do the following too.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install rspec
script/plugin install \
svn://rubyforge.org/var/svn/rspec/tags/REL_1_0_5/rspec_on_rails
script/generate rspec
rake spec &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you do try it out let me know how this goes for you, with your help we can make the conversion process better! Comments and suggestions welcome.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails Protect Params Plugin</title>
   <link href="http://www.davidjrice.co.uk/2007/08/10/ruby-on-rails-protect-params-plugin.html" />
   <updated>2007-08-10T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/08/10/ruby-on-rails-protect-params-plugin</id>
   <content type="html">&lt;p&gt;This is a simple rails plugin I hacked together, mainly to see if it was possible but sparked off by one very important thought&amp;#8230; I &lt;strong&gt;love&lt;/strong&gt; the convenience of mass-assigning variables in rails.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@user = User.create params[:user]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It just feels right, but obviously (as in the above example) we&amp;#8217;re exposing mass assignment of variables to the would-be hacker, which could be used for nefarious purposes.&lt;/p&gt;

&lt;p&gt;The usual approach is with the attr_protected method of ActiveRecord.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Post &amp;lt; ActiveRecord::Base
  attr_protected :id, :created_at 
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For some reason it just never has sat the right way with me, so I chose to experiment with this plugin! If you hook up the model attributes that you want to protect with the &lt;strong&gt;attr_param_protected&lt;/strong&gt; method.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Post &amp;lt; ActiveRecord::Base
  attr\_param\_protected :id, :type
  ...
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then all we need to do is add the following line to our controller (it will work if you add it to ApplicationController). If you want to protect a number of models you can do that too.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PostsController &amp;lt; ApplicationController

  protect\_params\_for :post
  # or protect\_params\_for :post, :user
  ...
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When a request comes in the attributes specified in your model will be stripped from the request parameters (they will show in your logs though!). If you want to join this mad science experiment, let me know how it goes! YMMV :)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install http://svn.davidjrice.co.uk/svn/projects/plugins/protect_params&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>davidjrice.simpsonize!</title>
   <link href="http://www.davidjrice.co.uk/2007/08/01/simpsonize-me.html" />
   <updated>2007-08-01T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/08/01/simpsonize-me</id>
   <content type="html">&lt;p&gt;The &lt;a href='http://simpsonizeme.com/'&gt;latest marketing gimmick&lt;/a&gt; from the simpsons is genius, check out this handsome springfieldian :) Brilliant!&lt;/p&gt;
&lt;img alt='Dave Rice simpsonified' src='http://davidjrice.co.uk/assets/2007/8/1/dave_simpson.jpg' title='David Rice Simpsonified' /&gt;</content>
 </entry>
 
 <entry>
   <title>Apple Macbook Pro Freezing when Switching Application with Command+Tab</title>
   <link href="http://www.davidjrice.co.uk/2007/07/22/apple-macbook-pro-freezing-when-switching-application-with-command-tab.html" />
   <updated>2007-07-22T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/07/22/apple-macbook-pro-freezing-when-switching-application-with-command-tab</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; &lt;a href='http://www.youtube.com/watch?v=6k73poxXpWg'&gt;check out the video&lt;/a&gt; of this bug in action. As you can see from this latest happening, there&amp;#8217;s no 3rd party software running. It&amp;#8217;s all Apple, so I guess now&amp;#8217;s the time you&amp;#8217;d expect them to do something about it. Really annoyed with how this has been handled so far, i&amp;#8217;m &lt;strong&gt;fuming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So this post takes a diversion from my usual apple loving fanboyisms with a much darker and frustrated tone. This problem has been happening to me for ages, since I got my first Macbook pro (RIP). Now with a replacement I was hoping to have escaped from the computer gremlins but they just followed me right to the new machine.&lt;/p&gt;

&lt;p&gt;After a bit of digging around I found &lt;a href='http://discussions.apple.com/thread.jspa?messageID=4992296&amp;amp;#4992296'&gt;this thread on the apple discussion forum&lt;/a&gt; and there seems to be a lot of people experiencing this issue. So please, if you&amp;#8217;re having this problem &lt;strong&gt;make some noise&lt;/strong&gt;, join in the discussion or leave a comment here.&lt;/p&gt;

&lt;h2 id='what_happens'&gt;What Happens?&lt;/h2&gt;

&lt;p&gt;So I&amp;#8217;ll be developing away at my computer not suspecting a thing switching back and forth from &lt;a href='http://iterm.sourceforge.net/'&gt;iTerm&lt;/a&gt;, &lt;a href='http://www.texmate.com/'&gt;Texmate&lt;/a&gt; and &lt;a href='http://www.mozilla.com/firefox/'&gt;Firefox&lt;/a&gt;. Maybe I&amp;#8217;ll even be listening to some tunes then &lt;em&gt;BAM&lt;/em&gt; I&amp;#8217;ll go to switch back and the wee &lt;strong&gt;Application Switcher Bezel&lt;/strong&gt; will stay on the screen. I can move the mouse and see it on screen but nothing else in the interface is responding. Madness! I have left the computer in this state for at least 15 minutes but it never recovers, the only thing to do is try and break it out of stasis!&lt;/p&gt;

&lt;p&gt;From reading all of the posts on the apple discussion forum about this, it appears almost all the people experiencing it are apple laptop users with an external display! So use of an external display seems to be a crucial ingredient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; So this has happened quite a couple of times since then but I have recently been collating the errors and whenever I disconnect the external display it will spew a bunch of errors &lt;strong&gt;(one for every open application)&lt;/strong&gt; like the following to &lt;em&gt;system.log&lt;/em&gt; if you open /Applications/Utilities/Console.app you can check for yourself.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Aug 19 14:17:07 starscream /System/Library/CoreServices/Dock.app/Contents/ \
MacOS/Dock: removeDisplayMapping: _CGSUnmapFramebuffer returns -536870206
Aug 19 14:17:07 starscream /Applications/Safari.app/Contents/MacOS/Safari: \ 
removeDisplayMapping: _CGSUnmapFramebuffer returns -536870206
...&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='ssh_to_the_rescue'&gt;SSH To The Rescue!&lt;/h2&gt;

&lt;p&gt;So I try the old favourite key command &lt;strong&gt;cmd+option+esc&lt;/strong&gt;, nothing. I&amp;#8217;m still wiggling the mouse trying to click, iTunes is still playing. Luckily there&amp;#8217;s another computer close to hand so I can SSH into the macbook and everything seems grand, I can run anything I want from the command line, &lt;em&gt;sometimes&lt;/em&gt; running the following command will bring the computer back to life! only very occasionally though.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo killalll -9 Dock&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This works I think because the Dock controls the applications switching functionality, but what generally happens is the Dock &lt;a href='http://en.wikipedia.org/wiki/Zombie_process'&gt;process is zombified&lt;/a&gt;. If that happens then I can kill any OSX gui application and it will be zombified too. The only way to get out of this mess I have found (without the aid of SSH) is to &lt;em&gt;force shutdown&lt;/em&gt; or &lt;em&gt;hard reset&lt;/em&gt; the macbook by pressing the power key for several seconds (and if that doesn&amp;#8217;t work hold cmd+shift+option at the same time).&lt;/p&gt;

&lt;p&gt;Thankfully with SSH we can do things a bit more safely, but &lt;strong&gt;not without losing data!!&lt;/strong&gt; agh! I have lost countless hours to this really really annoying bug in OSX. Sorry back to the point of this paragraph, having logged into the macbook from another computer I can issue the following command and it will &lt;strong&gt;always&lt;/strong&gt; bring the macbook back to life instantly back to the login screen and &lt;strong&gt;loosing ALL unsaved data in open applications&lt;/strong&gt;. So with that information, don&amp;#8217;t be issuing this command willy-nilly.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo killall -9 WindowServer&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; So as I said this has been happening a lot so I&amp;#8217;ve been keeping the logs. After issuing this command I get a bunch of errors like the following in my &lt;strong&gt;system.log&lt;/strong&gt; not generally for every application but they differ.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; Aug 19 14:27:53 starscream /System/Library/CoreServices/Dock.app/ \ 
 Contents/MacOS/Dock: kCGErrorCannotComplete : CGSDeviceLock: \
 Invalid device window
...
Aug 19 14:27:53 starscream /System/Library/CoreServices/Finder.app/ \ 
Contents/MacOS/Finder: kCGErrorInvalidConnection : \
CGSFlushWindowContentRegion: Invalid connection&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='long_term_solution'&gt;Long Term Solution?&lt;/h2&gt;

&lt;p&gt;So far, I have been dismissed a number of times by Applecare Technical Support for having custom software installed on my macbook. Being a freelance developer, my machine is &lt;strong&gt;very&lt;/strong&gt; important to me and if it crashes I lose time and money because of it, taking the time out to try and fix the computer is costly as it takes up at least the best part of a day to get everything migrated accross. So I have done all of the following at least once to try and fix this, but none have made an improvement;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reset PMU&lt;/li&gt;

&lt;li&gt;Reset PRAM&lt;/li&gt;

&lt;li&gt;Reset NVRAM&lt;/li&gt;

&lt;li&gt;Deleted &lt;strong&gt;/Users/username/Library/Caches&lt;/strong&gt; and &lt;strong&gt;/Library/Caches&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Run the Apple Disk Utility &lt;strong&gt;Disk Repair&lt;/strong&gt; and &lt;strong&gt;Repair Permissions&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Run the Apple Hardware Test tool - &lt;strong&gt;No Faults or Errors&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have also rebuilt the computer from scratch and updated to OSX &lt;strong&gt;10.4.10&lt;/strong&gt; and it is still happening. Aghh! So unfortunately I don&amp;#8217;t see a fix for this in sight. On the &lt;a href='http://discussions.apple.com/thread.jspa?messageID=4992296&amp;amp;#4992296'&gt;thread&lt;/a&gt; I was talking about, several people report to being able to reproduce the issue from scratch and that Apple have been notified about it. So &lt;strong&gt;Apple, just stop pansying about, passing your customers off with lame excuses and blaming third party applications. Take responsibility for your own bugs and just forking fix it!&lt;/strong&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Co-working Belfast, Calling All Freelancers</title>
   <link href="http://www.davidjrice.co.uk/2007/07/07/co-working-belfast-calling-all-freelancers.html" />
   <updated>2007-07-07T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/07/07/co-working-belfast-calling-all-freelancers</id>
   <content type="html">&lt;p&gt;As &lt;a href='http://pabcas.com'&gt;Paul&lt;/a&gt; was &lt;a href='http://pabcas.com/2007/7/1/more-thoughts-on-co-working-from-barcamp-belfast'&gt;saying&lt;/a&gt; we had a good chat with &lt;a href='http://opcode-solutions.com/'&gt;Matt Keenan&lt;/a&gt; and &lt;a href='http://www.interradeireland.com/'&gt;Brian Cleland&lt;/a&gt; about Co-working in Belfast. We came to the conclusion that it is definitely a feasible idea, there are just a number of questions that need answered.&lt;/p&gt;

&lt;h3 id='is_there_actually_enough_interest_in_a_coworking_office_space_in_belfast'&gt;Is there actually enough interest in a Co-working office space in Belfast?&lt;/h3&gt;

&lt;p&gt;This goes out to anyone that reads this, if you or someone you know works freelance in Belfast then please get in touch. I&amp;#8217;d love to hear from you and your thoughts on how we can make this work.&lt;/p&gt;

&lt;h3 id='what_are_we_willing_to_pay_for_such_a_privilege'&gt;What are we willing to pay for such a privilege?&lt;/h3&gt;

&lt;p&gt;Some rough estimations put the price at something around &lt;strong&gt;£150&lt;/strong&gt; Per Person, perhaps more.&lt;/p&gt;

&lt;h3 id='where_would_we_locate'&gt;Where would we locate?&lt;/h3&gt;

&lt;p&gt;To make it work I&amp;#8217;m thinking that it would need to be centrally located in Belfast, I think too far afield would lose a lot of the appeal.&lt;/p&gt;

&lt;h3 id='what_facilities_are_needed'&gt;What facilities are needed?&lt;/h3&gt;

&lt;p&gt;Basically a &lt;strong&gt;desk&lt;/strong&gt; and an &lt;strong&gt;internet connection&lt;/strong&gt;. Bicycle or car parking would be an excellent plus.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Move To Slicehost &amp;amp; Mephisto</title>
   <link href="http://www.davidjrice.co.uk/2007/07/06/the-move-to-slicehost-mephisto.html" />
   <updated>2007-07-06T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/07/06/the-move-to-slicehost-mephisto</id>
   <content type="html">&lt;p&gt;Finally, I&amp;#8217;ve been meaning to move my blog over to &lt;a href='http://slicehost.com'&gt;Slicehost&lt;/a&gt; from &lt;a href='http://textdrive.com'&gt;Textdrive&lt;/a&gt; and at the same time switch blogging software to &lt;a href='http://mephistoblog.com'&gt;Mephisto&lt;/a&gt; instead of &lt;a href='http://typosphere.org'&gt;Typo&lt;/a&gt;. After a long time of a not-so-well performing site, I kept just putting it off as there is a lot of work in doing one of these migrations never-mind the whole lot at once. I just think that typo + my textdrive &lt;em&gt;for life&lt;/em&gt; account weren&amp;#8217;t that compatible and I&amp;#8217;ve seen a great performance boost already.&lt;/p&gt;

&lt;p&gt;Wanting to blog a little more and have a platform i&amp;#8217;m more comfortable hacking and improving was the main motivator. Now, having finished University I am able to devote time to such things :).&lt;/p&gt;

&lt;p&gt;Hopefully, I&amp;#8217;ve remembered to change everything over so you guys didn&amp;#8217;t notice a thing! Stay tuned as I should have a bit of a write up on how the whole thing went.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>BarCampBelfast 2007 roundup</title>
   <link href="http://www.davidjrice.co.uk/2007/07/01/barcampbelfast-2007-roundup.html" />
   <updated>2007-07-01T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/07/01/barcampbelfast-2007-roundup</id>
   <content type="html">&lt;p&gt;I keep saying there&amp;#8217;s not enough social get togethers in Belfast for the computing industry. So when I heard about BarcampBelfast I was delighted to see some movement, big thanks to Matt Keenan at &lt;a href='http://www.opcode-solutions.com'&gt;OpCode Solutions&lt;/a&gt; for organising it.&lt;/p&gt;

&lt;p&gt;So I was meant to be doing a &lt;strong&gt;lightning presentation&lt;/strong&gt; on Ruby, and why I love it. Funny thing is that staying up the night before to finish it meant that I slept in for BarCamp and missed the morning session. Ironic, no?&lt;/p&gt;

&lt;p&gt;But all was not lost, I got to talk with a lot of people about my thoughts for a &lt;strong&gt;co-working space in Belfast&lt;/strong&gt;. Just like what Paul Campbell and co. have just recently setup in Dublin &lt;em&gt;go check &lt;a href='http://www.coworking.ie/'&gt;Co-working Ireland&lt;/a&gt;&lt;/em&gt; if you&amp;#8217;re curious. I am &lt;strong&gt;Really&lt;/strong&gt; interested in this so there will definitely be more on it later!&lt;/p&gt;

&lt;p&gt;The talks I saw were all great, informative and really casual with a lot of participation with the listeners.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://achievemarketing.ie'&gt;Denise Fay&lt;/a&gt; from Achieve Marketing talked about &lt;strong&gt;Marketing a tech company on a shoe-string&lt;/strong&gt; budget&lt;/li&gt;

&lt;li&gt;&lt;a href='http://is.mgt.qub.ac.uk/'&gt;David Newman&lt;/a&gt; from QUB talked about &lt;strong&gt;e-consulting&lt;/strong&gt; work and the benefits of using open source therein&lt;/li&gt;

&lt;li&gt;Thomas Pedoussaut presented about creating &lt;strong&gt;Easy VPNs with OpenVPN&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.logon.ie/internet-marketing-blog/'&gt;Alastair McDermott&lt;/a&gt; of logon.ie presented &lt;strong&gt;something about Internet Marketing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The food was brilliant! An amazing mountain of pizzas arrived from &lt;a href='http://www.cafe-renoir.com/'&gt;Cafe Renoir&lt;/a&gt; at lunchtime (well, breakfast for me :)), I was loving that because it&amp;#8217;s &lt;strong&gt;my absolute favourite&lt;/strong&gt; pizza place in Belfast.&lt;/p&gt;

&lt;p&gt;The craic was also hovering somewhere around 90. In the spirit of &lt;strong&gt;Bar&lt;/strong&gt;Camp we invaded Bar 12 on Lower Crescent (just off Botanic Avenue) for some refreshment that was much needed. The Moghul Indian restaurant, only a stones throw away from Bar 12 was the venue for a tasty feast to round off the day.&lt;/p&gt;

&lt;p&gt;Really looking forward to the next one now.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Autosaving Apple iWork (Pages) Documents with RubyOSA</title>
   <link href="http://www.davidjrice.co.uk/2007/04/21/autosaving-apple-iwork-pages-documents-with-rubyosa.html" />
   <updated>2007-04-21T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/21/autosaving-apple-iwork-pages-documents-with-rubyosa</id>
   <content type="html">&lt;p&gt;This post started as a fuming rant over how such an otherwise great piece of software is ruined by not having &lt;em&gt;autosave&lt;/em&gt; or &lt;em&gt;crash recovery&lt;/em&gt; functionality. Okay so those features are probably optional, but at least make the application stable enough so it doesn&amp;#8217;t crash.&lt;/p&gt;

&lt;p&gt;They say that whatever can go wrong, will go wrong. Totally true, and while Pages is generally a very stable application, just once in a while for no discernable reason it will give up and die. Always it seems after a solid stint of work without repeatedly hitting apple+s. AGH!&lt;/p&gt;

&lt;p&gt;So, deciding to put all that ffing and blinding and general negative energy into something positive. I thought it would be easy enough to &lt;em&gt;fix&lt;/em&gt; with a bit of applescript. Suddenly remembering that there was an interface for scripting osx in ruby I decided to investigate.&lt;/p&gt;

&lt;h2 id='ruby_to_the_rescue'&gt;Ruby to the Rescue&lt;/h2&gt;

&lt;p&gt;Actually throwing the applescript out of the window, &lt;a href='http://rubyosa.rubyforge.org/'&gt;RubyOSA&lt;/a&gt; talks directly to the big man, the apple event manager. Retrieving the scriptable definition of an application and does some ruby magic to create a nice DSL for working with that application. It&amp;#8217;s a gem so installation is painless&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install rbosa&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It&amp;#8217;s much better than applescript as we can fire up irb and investigate! maybe I&amp;#8217;m just ignorant but looking for APIs and generally programming with applescript was a pain.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require &amp;#39;rubygems&amp;#39;
require &amp;#39;rbosa&amp;#39;
OSA.app(&amp;#39;Pages&amp;#39;).methods&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Neat! so on to the actual script then, it wasn&amp;#8217;t too hard to come up with. I want to save all open Pages documents and I want to do it every minute, with those simple requirements I knew a little bit of threading would be necessary.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require &amp;#39;rubygems&amp;#39;
require &amp;#39;rbosa&amp;#39;

pages = OSA.app(&amp;#39;Pages&amp;#39;)
thread = Thread.new do
  while true
    sleep 60
    pages.documents.each { |document| document.save }
  end   
end
thread.join&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simply save this script as something like &lt;em&gt;autosave.rb&lt;/em&gt; and run from a new terminal window like so;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ruby autosave.rb&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;C&amp;#8217;mon apple, if it takes &lt;strong&gt;11&lt;/strong&gt; lines of Ruby code to add autosave functionality to Pages, surely it&amp;#8217;s not that difficult for you.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Think Patchwork!</title>
   <link href="http://www.davidjrice.co.uk/2007/04/20/think-patchwork.html" />
   <updated>2007-04-20T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/20/think-patchwork</id>
   <content type="html">&lt;a href='http://www.thinkpatchwork.com'&gt;
    &lt;img alt='Think Patchwork' src='/images/patchwork.gif' /&gt;
  &lt;/a&gt;
&lt;p&gt;Watch this space.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Just, awesome.</title>
   <link href="http://www.davidjrice.co.uk/2007/04/20/just-awesome.html" />
   <updated>2007-04-20T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/20/just-awesome</id>
   <content type="html">&lt;p&gt;Slightly slow off the mark on this, but it&amp;#8217;s just TOO funny not to post. I mean &lt;a href='http://news.bbc.co.uk/1/hi/northern_ireland/6425333.stm'&gt;using the Elf Defence&lt;/a&gt; that is just quality, totally made my day. Perhaps he got legal advice from Johnnie Cochrane, as it&amp;#8217;s one of the best &lt;a href='http://en.wikipedia.org/wiki/Chewbacca_Defense'&gt;Chewbacca Defences&lt;/a&gt; ever.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A Tale of Two Cities</title>
   <link href="http://www.davidjrice.co.uk/2007/04/13/a-tale-of-two-cities.html" />
   <updated>2007-04-13T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/13/a-tale-of-two-cities</id>
   <content type="html">&lt;p&gt;For a time there was loneliness, in the dark ages. When I had not the &lt;a href='http://thepalaceofheavenlypleasure.blogspot.com/'&gt;pleasure&lt;/a&gt; of &lt;a href='http://green.carisenda.com/'&gt;knowing&lt;/a&gt; such &lt;a href='http://weblog.straytoaster.co.uk/'&gt;culture&lt;/a&gt; and &lt;a href='http://www.catchthat.net/?p=3732'&gt;class&lt;/a&gt;, nor had I &lt;a href='http://iced-coffee.com/'&gt;seen&lt;/a&gt; such &lt;a href='http://nellysgarden.blogspot.com/'&gt;wonder&lt;/a&gt; as I have presently.&lt;/p&gt;

&lt;p&gt;As a mere scholar of the packetised word I ventured out unknowingly and it was some time before I came to know of &lt;a href='http://green.carisenda.com/'&gt;Stephen&lt;/a&gt; and &lt;a href='http://www.deeden.co.uk'&gt;Steve&lt;/a&gt;, in fact I met them in-person before realising this was them, but that I think is a story for another day.&lt;/p&gt;

&lt;p&gt;Over a year has passed since then and I am still a scholar, but I have found other voices from our fair isle. So thanks to the &lt;a href='http://weblog.straytoaster.co.uk/'&gt;Strayest of Toasters&lt;/a&gt; I got a chance to &lt;a href='http://upcoming.org/event/156914/'&gt;meet with them &lt;em&gt;(the blogorati of Northern Ireland)&lt;/em&gt;&lt;/a&gt; and what a great day it was too. For those that couldn&amp;#8217;t make it, you were definitely missed! I had a seriously good time enjoying all the banter and wit &lt;em&gt;(of which there was a plentiful supply)&lt;/em&gt; and the food &amp;#38; drink was pretty good too, so till next time I shall be looking forward to it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Distributed Ruby for Rails</title>
   <link href="http://www.davidjrice.co.uk/2007/04/12/distributed-ruby-for-rails.html" />
   <updated>2007-04-12T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/12/distributed-ruby-for-rails</id>
   <content type="html">&lt;p&gt;Feeling a bit of University related stress, my trip down to Dublin for the &lt;a href='http://groups.google.com/group/ruby_ireland'&gt;Ruby Ireland group&lt;/a&gt; meetup was a great way to chill out. It was great to meet the regulars, and some completely new faces too. &lt;a href='http://www.pacbas.com/'&gt;Paul Campbell&lt;/a&gt; stuck a &lt;a href='http://www.pabcas.com/2007/4/11/clusters-of-replicated-slaves-do-dublin'&gt;couple of picture on his flickr&lt;/a&gt; of the post presentation relaxation at La Taverna di Bacco, great food / wine and banter were had by all! Provided my ass is not presently being kicked by University work, I will definitely be having a Ruby Tuesday next month.&lt;/p&gt;

&lt;h3 id='camping'&gt;Camping&lt;/h3&gt;

&lt;p&gt;&lt;a href='http://ozonesoft.net/'&gt;Olivier&lt;/a&gt; gave a &lt;a href='http://ozonesoft.net/blog/2007/04/11/camping-presentation'&gt;great presentation on Camping&lt;/a&gt; and for the uninitiated I&amp;#8217;m not talking about how to pitch a tent and make smores. I will probably start some &lt;a href='http://code.whytheluckystiff.net/camping/wiki/'&gt;Camping&lt;/a&gt; of my own now I&amp;#8217;ve been exposed to it :)&lt;/p&gt;

&lt;h3 id='distributed_ruby_for_rails'&gt;Distributed Ruby for Rails&lt;/h3&gt;

&lt;p&gt;I gave a talk on &amp;#8220;Distributed Ruby for Rails&amp;#8221;, covering a brief introduction to &lt;a href='http://www.ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html'&gt;DRb&lt;/a&gt; and then a more Rails oriented approach with &lt;a href='http://backgroundrb.rubyforge.org/'&gt;Backgroundrb&lt;/a&gt;, while not as good as Olivier&amp;#8217;s I&amp;#8217;m glad that no-one fell asleep (that I saw :)) and that the live demos I gave worked as planned.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.davidjrice.co.uk/Distributed-Ruby-for-Rails.pdf'&gt;Presentation &lt;em&gt;(pdf)&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;DRb example&lt;/strong&gt; &lt;em&gt;http://svn.davidjrice.co.uk/svn/projects/robots&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Backgroundrb example&lt;/strong&gt; &lt;em&gt;http://svn.davidjrice.co.uk/svn/projects/giant_robots&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fixing the urls to Olivier&amp;#8217;s presentation, oop! &lt;strong&gt;Update:&lt;/strong&gt; &lt;em&gt;20th July 2007&lt;/em&gt; - After moving to slicehost I had to change the location of the examples.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Stripping Off For CSS Naked Day II</title>
   <link href="http://www.davidjrice.co.uk/2007/04/05/stripping-off-for-css-naked-day-ii.html" />
   <updated>2007-04-05T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/05/stripping-off-for-css-naked-day-ii</id>
   <content type="html">&lt;p&gt;Until I saw &lt;a href='http://www.eoghanmccabe.com/naive-by-design/css-naked-day-get-your-divs-out-for-the-lads/'&gt;Eoghan drop his (CSS) pants&lt;/a&gt; I had totally forgotten about the annual &lt;a href='http://naked.dustindiaz.com/'&gt;CSS Naked Day&lt;/a&gt; &lt;em&gt;(Perhaps not as cool as &lt;a href='http://en.wikipedia.org/wiki/Cansei_de_Ser_Sexy'&gt;CSS Naked Day&lt;/a&gt;)&lt;/em&gt;. So to celebrate, and with nothing to hide I&amp;#8217;ll be stripping off for 24 hours&lt;em&gt;-ish&lt;/em&gt;. Three cheers to Web Standards!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Like Paddling Through Toffee</title>
   <link href="http://www.davidjrice.co.uk/2007/04/03/like-paddling-through-toffee.html" />
   <updated>2007-04-03T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2007/04/03/like-paddling-through-toffee</id>
   <content type="html">&lt;p&gt;Another lovely day today and I decided to spend some time clearing my head with some fresh sea air. Portballintrae (or PBT for short) is one of the beaches farthest East on the surf-able North coast of Ireland, and it is by far the messiest. On any given day the breaks will invariably be bigger than Whiterocks beach (perhaps my favourite of the lot) but there&amp;#8217;s a lot to put up, like the &lt;strong&gt;really noticeable currents&lt;/strong&gt;, an &lt;strong&gt;abundance of rocks&lt;/strong&gt;, the &lt;strong&gt;lack of showering facilities&lt;/strong&gt; and a &lt;strong&gt;long walk&lt;/strong&gt; from the car park.&lt;/p&gt;

&lt;p&gt;So today with Whiterocks offering very little for me to get naked in public, we decided to give PBT a turn. &lt;em&gt;A decision that was perhaps against my better judgement for the aforementioned reasons.&lt;/em&gt; It was totally like paddling through toffee, I can remember swimming out for at least a good five or ten minutes to look back and see I was a mere couple of metres from shore. Lame. I got all the workout of a usual surf &lt;strong&gt;and more!&lt;/strong&gt; but without the fun&lt;/p&gt;

&lt;p&gt;Lesson learned. Portballintrae, I am officially crossing you off my Christmas card list.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>BRUG!</title>
   <link href="http://www.davidjrice.co.uk/2007/03/15/brug.html" />
   <updated>2007-03-15T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/03/15/brug</id>
   <content type="html">&lt;p&gt;The Belfast Ruby User Group has yet to ever have any meetings (probably because we all work together), but no-longer. Just recently discovering &lt;a href='http://octopod.info'&gt;another fellow rubyist from northern ireland&lt;/a&gt;, close but not Belfast! (So it&amp;#8217;s really Belfast-and-sorta-close-by Ruby User Group) we&amp;#8217;ve all decided to go out for a bite to eat.&lt;/p&gt;

&lt;p&gt;So if you use Ruby, or want to, come and join us! Don&amp;#8217;t be shy now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href='http://upcoming.org/event/164658/?ps=5'&gt;I just put the event on upcoming&lt;/a&gt; so why let us know if you&amp;#8217;re coming :)&lt;/p&gt;

&lt;p&gt;P.s. Props to &lt;a href='http://octopod.info'&gt;octopod&lt;/a&gt; for setting up the ruby ireland irc room (#ruby.ie on irc.freenode.net) or this all wouldn&amp;#8217;t have happened!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>I had been keeping quiet...</title>
   <link href="http://www.davidjrice.co.uk/2007/03/09/i-had-been-keeping-quiet.html" />
   <updated>2007-03-09T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/03/09/i-had-been-keeping-quiet</id>
   <content type="html">&lt;p&gt;So I had been keeping quiet about this but I was recently asked to join a great startup company in San Francisco. I&amp;#8217;m really excited about how things are turning out, and with the company being in the online video space I&amp;#8217;m getting to do a lot of neat things with Ruby and Rails. &lt;em&gt;Some of which I may be able to divulge at some point :)&lt;/em&gt;. We&amp;#8217;re looking to pull back the curtain in about three months, so mark your diary&amp;#8217;s for some cool internet waves to surf on! :).&lt;/p&gt;

&lt;p&gt;Consequently, we&amp;#8217;re looking for a bright and talented individual to join the team. If that sounds like you then head on over to &lt;a href='http://jobs.rubynow.com/jobs/show/996'&gt;the post on jobs.rubynow.com&lt;/a&gt; and check it out!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Reusing some books that I am glad I no longer need</title>
   <link href="http://www.davidjrice.co.uk/2007/03/01/reusing-some-books-that-i-am-glad-i-no-longer-need.html" />
   <updated>2007-03-01T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/03/01/reusing-some-books-that-i-am-glad-i-no-longer-need</id>
   <content type="html">&lt;div style='float: right; margin-left: 10px; margin-bottom: 10px;'&gt;
 &lt;a href='http://www.flickr.com/photos/davidjrice/406381575/' title='photo sharing'&gt;&lt;img alt='' src='http://farm1.static.flickr.com/181/406381575_27a882b2f2_m.jpg' style='border: solid 2px #000000;' /&gt;&lt;/a&gt;
 &lt;br /&gt;
 &lt;span style='font-size: 0.9em; margin-top: 0px;'&gt;
  &lt;a href='http://www.flickr.com/photos/davidjrice/406381575/'&gt;Reusing some books that I am glad I no longer need&lt;/a&gt;
  &lt;br /&gt;
  Originally uploaded by &lt;a href='http://www.flickr.com/people/davidjrice/'&gt;davidjrice&lt;/a&gt;.
 &lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;PHP, JAVA ? definitely a good thing I never have to reopen them. The &amp;#8216;Enterprise Integration with Ruby&amp;#8217; book is somewhat of an odd one out as it&amp;#8217;s a pretty useful book, I guess I&amp;#8217;m glad that I am no longer with a company you could deem to be &amp;#8216;Enterprisey&amp;#8217;. &lt;br /&gt; &lt;br /&gt; &amp;#8230;and if you haven&amp;#8217;t noticed, yes that&amp;#8217;s my macbook perched atop. The books make a killer laptop stand. :) &lt;br style='clear:both;' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Blogging from the future</title>
   <link href="http://www.davidjrice.co.uk/2007/03/01/blogging-from-the-future.html" />
   <updated>2007-03-01T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/03/01/blogging-from-the-future</id>
   <content type="html">&lt;div style='float: right; margin-left: 10px; margin-bottom: 10px;'&gt;
 &lt;a href='http://www.flickr.com/photos/davidjrice/406402784/' title='photo sharing'&gt;&lt;img alt='' src='http://farm1.static.flickr.com/132/406402784_8b5d6441d3_m.jpg' style='border: solid 2px #000000;' /&gt;&lt;/a&gt;
 &lt;br /&gt;
 &lt;span style='font-size: 0.9em; margin-top: 0px;'&gt;
  &lt;a href='http://www.flickr.com/photos/davidjrice/406402784/'&gt;Blogging from the future&lt;/a&gt;
  &lt;br /&gt;
  Originally uploaded by &lt;a href='http://www.flickr.com/people/davidjrice/'&gt;davidjrice&lt;/a&gt;.
 &lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;In trying out the flickr blogging stuff (which is cool) I realised I could somehow bend space and time, but only by about a minute :)&lt;br /&gt; &lt;br /&gt; I hope it&amp;#8217;s not just the fact that it&amp;#8217;s 4am that made me think this was funny. &lt;br style='clear:both;' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Why do I love Ruby and Rails? Intelligent converstions</title>
   <link href="http://www.davidjrice.co.uk/2007/02/07/why-do-i-love-ruby-and-rails-intelligent-converstions.html" />
   <updated>2007-02-07T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/02/07/why-do-i-love-ruby-and-rails-intelligent-converstions</id>
   <content type="html">&lt;p&gt;Convention over Configuration, it&amp;#8217;s that simple. It makes my life a lot easier as a developer in so many ways. Sometimes when I&amp;#8217;m thinking about programming problems I like to conceptualize them as conversations between me and the computer, both talking the same &lt;em&gt;language&lt;/em&gt;. Why do I really love Ruby and Rails? because these languages let me have &lt;em&gt;intelligent conversations&lt;/em&gt; with the computer, there&amp;#8217;s no better way to explain this than to demonstrate.&lt;/p&gt;

&lt;p&gt;Here is an example of an entirely fictitious conversation that happened this afternoon.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;me: hey ruby
ruby: hey dave
me: hey ruby object, by the way you&amp;#39;re a Message
ruby: oh really? cool!
me: so yeah, there are a couple of attributes i&amp;#39;d like you to have...
ruby: great!
me: right, I&amp;#39;m just writing a table structure for you
ruby: you want to store me in a database, okay.
ruby: so about those attributes, I thought you might want some methods to access them...
ruby: ...and some other stuff to check if i&amp;#39;m valid
me: okay okay, I&amp;#39;ll ask you what methods you have later if I need to&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Later that evening I had a similar conversation with another language.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;me: hey java
java: hey dave
me: hey java object, by the way you&amp;#39;re a Message
java: oh really? cool!
me: so yeah, there are a couple of attributes i&amp;#39;d like you to have...
java: great!
me: right, I&amp;#39;m just writing a table structure for you
java: good for you
me: i&amp;#39;d like to store you in database by the way
java: oh okay
me: well?
java: what?
me: what are you?
java: you said I was a message, with these attributes... and I have a database table or something
me: right.
me: well, you see that attribute I want you to store it here and the next one... 
java: ah right, okay gotcha&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Have you had any intelligent conversations with your computer lately?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rails hackfest 2007 close but no cigar</title>
   <link href="http://www.davidjrice.co.uk/2007/01/30/rails-hackfest-2007-close-but-no-cigar.html" />
   <updated>2007-01-30T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/01/30/rails-hackfest-2007-close-but-no-cigar</id>
   <content type="html">&lt;p&gt;After seeing the post on the rails weblog about the &lt;a href='http://www.workingwithrails.com/contests/hackfest2007'&gt;Rails Hackfest 2007&lt;/a&gt; I decided to give it a shot. I managed to get up to about number 13 at one point but finished 23 overall, close but no cigar. At the very least, i&amp;#8217;ve learned a lot about some of the inner workings of Rails I had previously turned a blind eye to. Congratulations to &lt;a href='http://www.workingwithrails.com/contests/hackfest2007/winners'&gt;all those winners&lt;/a&gt;, and thanks to &lt;a href='http://cdbaby.com/'&gt;Derek from CD Baby&lt;/a&gt; for sponsoring the competition.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s probably just as well I didn&amp;#8217;t win, as it turns out my finals at Queen&amp;#8217;s will be starting on the 17th-ish and I would more than likely have had to miss an exam.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Preloading images with CSS, not just for rollovers</title>
   <link href="http://www.davidjrice.co.uk/2007/01/09/preloading-images-with-css-not-just-for-rollovers.html" />
   <updated>2007-01-09T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/01/09/preloading-images-with-css-not-just-for-rollovers</id>
   <content type="html">&lt;p&gt;In response to &lt;a href='http://www.davidlowry.co.uk/'&gt;David Lowry&lt;/a&gt; about the funky psychedelic effect that was happening while my pretty background images were busy loading &lt;em&gt;which I shall henceforth refer to as the &lt;a href='http://www.davidjrice.co.uk'&gt;davidjrice&lt;/a&gt; effect (although I do wish it were somewhat similar to &amp;#8221;&lt;a href='http://www.youtube.com/watch?v=bcQ3GL_QTus'&gt;the lynx effect&lt;/a&gt;&amp;#8221;)&lt;/em&gt;, I investigated a little and thought I might be able to smooth things out by preloading the background images using CSS. You should hopefully be able to see, or rather &lt;em&gt;not&lt;/em&gt; see the results already :)&lt;/p&gt;

&lt;p&gt;So I have a background that is applied to the main body &lt;em&gt;(the blue flower pattern)&lt;/em&gt;, and one that is applied to the content area &lt;em&gt;(the black flower pattern)&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;body {
  background-color:#000;
  background: url(/images/theme/background-header.gif) left top;  
  font: normal 12px &amp;quot;lucida grande&amp;quot;, verdana, arial, helvetica, sans-serif;
}
...
#page{
  background-image: url(/images/theme/background-content.gif); 
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Using CSS image preloading, we define the background image on an element that does not already have a background image &lt;em&gt;before&lt;/em&gt; we want to apply it, including some positioning to ensure we don&amp;#8217;t see it.&lt;/p&gt;

&lt;p&gt;I also added a background color of black to the content area, which really improved things by fully masking out the blue flower pattern background.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;html {
  background-image: url(/images/theme/background-content.gif);
  background-repeat: no-repeat;
  background-position: -1000px -1000px; 
}
body {
  background-color:#000;
  background: url(/images/theme/background-header.gif) left top;  
  font: normal 12px &amp;quot;lucida grande&amp;quot;, verdana, arial, helvetica, sans-serif;
}
...
#page{
  background-color:#000;
  background-image: url(/images/theme/background-content.gif); 
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that&amp;#8217;s about it! &lt;em&gt;&amp;#8230; and thus ends another exam revision stress induced procrastination episode.&lt;/em&gt; Not too much work for a smoother visual experience, now if only I can make typo (or perhaps lighty) to stop falling over and screaming HTTP 500s ever so often I can be happy with things on this site.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A world without exams</title>
   <link href="http://www.davidjrice.co.uk/2007/01/08/a-world-without-exams.html" />
   <updated>2007-01-08T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2007/01/08/a-world-without-exams</id>
   <content type="html">&lt;p&gt;Aside from it being overcast, rainy and dark the only thing that makes this month better is that it&amp;#8217;s exam month! Oh and guess what, this year Queen&amp;#8217;s sent me a birthday present. What is it? oh it&amp;#8217;s just an invitation to an exam at 9:30am on my birthday, and an IOU for another 3 days later&amp;#8230; &lt;strong&gt;Wow you must have been stoked!&lt;/strong&gt; Okay I promise I&amp;#8217;ll stop it with the sarcasm for now.&lt;/p&gt;

&lt;p&gt;Primarily I see them as pointless, they mainly test the amount of random factoids one can remember about a chosen subject and rarely do they test understanding. Everyone hate&amp;#8217;s exams, but there&amp;#8217;s no alternative&amp;#8230; right? Well I had thought the very same thing until just recently when I had a chat with a good friend of mine who&amp;#8217;s studying over at &lt;a href='http://www.mit.edu/'&gt;MIT&lt;/a&gt; in Boston.&lt;/p&gt;

&lt;p&gt;They don&amp;#8217;t have any exams at all for final year, each module has a practical project that is to be completed and is then marked with a letter grade (A through G or similar). All of the grades are assigned a weighting and people achieve degree classifications based on performance against other students in the class.&lt;/p&gt;

&lt;p&gt;While the actual system might work slightly different (we were out for some festive drinks and I may not recall all of the details :)) it is still a marked improvement on the exam format.&lt;/p&gt;

&lt;p&gt;I think a world without exams would be a better place, what do you think?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Macgyvering Xbox Live with osx Internet Sharing</title>
   <link href="http://www.davidjrice.co.uk/2006/12/27/macgyvering-xbox-live-with-osx-internet-sharing.html" />
   <updated>2006-12-27T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/12/27/macgyvering-xbox-live-with-osx-internet-sharing</id>
   <content type="html">&lt;p&gt;Ever since I was little I&amp;#8217;ve always loved having something to play during the festive season. With the prospect of not getting any toys this christmas, I brought my Xbox home so I could relive some childhood memories (albeit with some new games).&lt;/p&gt;

&lt;p&gt;After a little bit of offline play, I really wanted a bit of multiplayer but how to get internet on my Xbox? There is wireless at my mum&amp;#8217;s, but I don&amp;#8217;t have the wireless adapter for the Xbox, and the basestation is in the attic (and I don&amp;#8217;t have that much ethernet cable).&lt;/p&gt;

&lt;p&gt;So what is a guy to do? I remembered about the internet sharing feature of osx and decided to experiment, with great results! :)&lt;/p&gt;

&lt;h2 id='macgyvering_time'&gt;Macgyvering time&lt;/h2&gt;

&lt;h3 id='setting_up_your_mac'&gt;Setting up your mac&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Turn on &lt;strong&gt;Internet Sharing&lt;/strong&gt; on your mac &lt;em&gt;(In the internet tab of the sharing preference pane)&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Add a new entry to your firewall settings on your mac &lt;em&gt;(You might need to forward the ports from your router)&lt;/em&gt; * TCP Port &lt;strong&gt;3074&lt;/strong&gt; * UDP Ports &lt;strong&gt;88 3074&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Apply the settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='setting_up_your_xbox'&gt;Setting up your Xbox&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go into the &lt;strong&gt;Network Settings&lt;/strong&gt; of the system tab on your Xbox and choose &lt;strong&gt;Edit Settings&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Enter the following IP settings * IP Settings &lt;strong&gt;Manual&lt;/strong&gt; * IP Address &lt;strong&gt;192.168.2.2&lt;/strong&gt; * Subnet Mask &lt;strong&gt;255.255.255.0&lt;/strong&gt; * Gateway &lt;strong&gt;192.168.2.1&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Enter the following DNS settings * DNS Settings &lt;strong&gt;Manual&lt;/strong&gt; * Primary DNS Server &lt;strong&gt;192.168.2.1&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Plug an ethernet cable from your Xbox to the mac&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Festive cheer by the glass</title>
   <link href="http://www.davidjrice.co.uk/2006/12/21/festive-cheer-by-the-glass.html" />
   <updated>2006-12-21T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/12/21/festive-cheer-by-the-glass</id>
   <content type="html">&lt;p&gt;If there&amp;#8217;s one thing I really enjoy about Christmas time is, that it&amp;#8217;s a perfect excuse to make mulled wine. There&amp;#8217;s nothing better than coming in from the cold to a piping hot glass full of this great tasting drink. So, just in time for those Christmas parties here&amp;#8217;s a recipe for mulled wine that I really love. I tried it out last night on a lot of friends and they seemed to love it as much as I do. We also tried some mulled cider, it was my first time making it &lt;em&gt;(or even tasting it)&lt;/em&gt; so was a surprise hit.&lt;/p&gt;

&lt;h2 id='mulled_wine_gluhwein_recipe'&gt;Mulled Wine (Gluhwein) Recipe&lt;/h2&gt;

&lt;p&gt;This will make enough for about 6 to 8 glasses full. Just multiply up the ingredients for making more. This recipe is loosely based on &lt;a href='http://www.bellaonline.com/articles/art25534.asp'&gt;this one&lt;/a&gt; that I found.&lt;/p&gt;

&lt;h3 id='mulled-wine-ingredients'&gt;Ingredients you will need&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;1 litre red wine &lt;em&gt;(The cheaper the better)&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;1/6 litre brandy&lt;/li&gt;

&lt;li&gt;1/8 Litre orange juice&lt;/li&gt;

&lt;li&gt;1 orange (sliced)&lt;/li&gt;

&lt;li&gt;1 orange (sliced for garnish)&lt;/li&gt;

&lt;li&gt;60g white sugar&lt;/li&gt;

&lt;li&gt;1 1/2 cinamon sticks&lt;/li&gt;

&lt;li&gt;1/2 lemon (sliced)&lt;/li&gt;

&lt;li&gt;1/8 tsp allspice&lt;/li&gt;

&lt;li&gt;1/8 tsp mace&lt;/li&gt;

&lt;li&gt;4 whole cloves&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='mulled-wine-how-to'&gt;How to make it&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Grate the orange and lemon to remove their peel and then quarter them.&lt;/li&gt;

&lt;li&gt;Pour the wine into a large pot and begin heating over low heat.&lt;/li&gt;

&lt;li&gt;As it begins to warm, add sugar and spices.&lt;/li&gt;

&lt;li&gt;Stir until sugar is dissolved.&lt;/li&gt;

&lt;li&gt;Add the brandy + orange juice.&lt;/li&gt;

&lt;li&gt;Heat thoroughly, but do not allow to boil!&lt;/li&gt;

&lt;li&gt;Add the lemon and orange quarters and peel.&lt;/li&gt;

&lt;li&gt;Steep for about 1 hour over low heat.&lt;/li&gt;

&lt;li&gt;Keep tasting and adjust the mixture as necessary.&lt;/li&gt;

&lt;li&gt;Strain to remove the bits.&lt;/li&gt;

&lt;li&gt;Serve hot and garnish with orange slices &lt;em&gt;(or cinnamon sticks)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='mulled_cider_recipe'&gt;Mulled Cider Recipe&lt;/h2&gt;

&lt;h3 id='mulled-cider-ingredients'&gt;Ingredients you will need&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;2 litres apple cider&lt;/li&gt;

&lt;li&gt;1/4 cup brown sugar&lt;/li&gt;

&lt;li&gt;1/2 teaspoon ground allspice&lt;/li&gt;

&lt;li&gt;8 whole cloves&lt;/li&gt;

&lt;li&gt;1 cinnamon stick&lt;/li&gt;

&lt;li&gt;1/4 tsp salt&lt;/li&gt;

&lt;li&gt;1 pinch ground nutmeg&lt;/li&gt;

&lt;li&gt;1 orange, quartered with peel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='mulled-cider-how-to'&gt;How to make it&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pour the apple cider into a large pot and begin heating over a low heat&lt;/li&gt;

&lt;li&gt;Add all of the rest of the ingredients into the pot and stir&lt;/li&gt;

&lt;li&gt;Heat thoroughly, but do not allow to boil!&lt;/li&gt;

&lt;li&gt;Steep for about 1 hour over low heat.&lt;/li&gt;

&lt;li&gt;Keep tasting and adjust the mixture as necessary.&lt;/li&gt;

&lt;li&gt;Strain to remove the bits.&lt;/li&gt;

&lt;li&gt;Serve hot and garnish with orange slices &lt;em&gt;(or cinnamon sticks)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Capturing/archiving and converting Real Media files to Quicktime on osx</title>
   <link href="http://www.davidjrice.co.uk/2006/12/13/capturing-archiving-and-converting-real-media-files-to-quicktime-on-osx.html" />
   <updated>2006-12-13T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/12/13/capturing-archiving-and-converting-real-media-files-to-quicktime-on-osx</id>
   <content type="html">&lt;p&gt;Okay, so I recently wanted to convert a Real Media file to play in Quicktime. Here&amp;#8217;s how I went about it.&lt;/p&gt;

&lt;h2 id='archiving'&gt;Archiving&lt;/h2&gt;

&lt;p&gt;So after a little digging about I found a nice little tool called &lt;a href='http://jeanmatthieu.free.fr/cocoajt/'&gt;CocoaJT&lt;/a&gt; to capture a real player stream, and save it as a regular real media &lt;em&gt;(.rm)&lt;/em&gt; file. Nice!&lt;/p&gt;

&lt;h2 id='converting'&gt;Converting&lt;/h2&gt;

&lt;p&gt;Okay now the tricky part, I found a couple of &lt;a href='http://www.macosxhints.com/article.php?story=20060906153448633'&gt;instructions on macosxhints&lt;/a&gt; on how to use &lt;a href='http://ffmpegx.com/'&gt;ffmpegX&lt;/a&gt; to do the job.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download and install &lt;a href='http://ffmpegx.com/'&gt;ffmpegx&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Download &lt;a href='http://forms.real.com/real/realone/mac.htm'&gt;Real Player 10&lt;/a&gt; &lt;em&gt;(direct-ish link)&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Create a new folder on your desktop named reallib&lt;/li&gt;

&lt;li&gt;Go to your Applications folder, control-click on Real Player and choose Show Package Contents from the pop-up menu&lt;/li&gt;

&lt;li&gt;Navigate into Contents -&amp;gt; Frameworks -&amp;gt; HXClientKit.framework -&amp;gt; Helix Plugins -&amp;gt; Codecs. Inside the Codecs folder should be 12 items. Copy all of them into the reallib folder you created on the desktop.&lt;/li&gt;

&lt;li&gt;Move the reallib folder into the /Library/Application Support/ffmpegX folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point we are ready to try converting a real media file&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure your video file has an rm extension, i.e. file.rm&lt;/li&gt;

&lt;li&gt;Open ffmpegx&lt;/li&gt;

&lt;li&gt;Drop file.rm into the slot next to Open &lt;em&gt;(the source file)&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Click on the Video tab and choose MPEG4 [.AVI] mencoder as the video codec&lt;/li&gt;

&lt;li&gt;Click encode &lt;em&gt;(this should take a couple of minutes)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After following this I ended up with a .avi file that would not play in Quicktime, so I performed another conversion on the output of our encoded avi file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set output.avi as the source file&lt;/li&gt;

&lt;li&gt;Click on the Video tab and choose MPEG4 [.MOV](ffmpeg) as the video codec&lt;/li&gt;

&lt;li&gt;Click on the Audio tab and choose AAC (MOV/MP4/3GP) as the audio codec&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this stage we now have a movie that will play in Quicktime, however the audio is out of sync with the video. This is a problem already reported about the &lt;a href='http://www.macosxhints.com/article.php?story=20060906153448633'&gt;macosxhints tip&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='synching'&gt;Synching&lt;/h2&gt;

&lt;p&gt;I found another nice little tool called &lt;a href='http://www.qtsync.com/e/about.php'&gt;QT Synch&lt;/a&gt;, that made it a snap to fix synchronisation of the audio and video.&lt;/p&gt;

&lt;h2 id='exporting'&gt;Exporting&lt;/h2&gt;

&lt;p&gt;I thought I was done here, however if you are wanting to use the video with the likes of you tube, it is advisable to export it as a mpeg4 within quicktime, as youtube doesn&amp;#8217;t understand the synchronisation commands.&lt;/p&gt;

&lt;p&gt;Tada, it&amp;#8217;s a bit of a long process but we have one Quicktime movie! I didn&amp;#8217;t think it were possible, but I hate real player so much more than I already did.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The emperors new clothes</title>
   <link href="http://www.davidjrice.co.uk/2006/12/11/the-emperors-new-clothes.html" />
   <updated>2006-12-11T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/12/11/the-emperors-new-clothes</id>
   <content type="html">&lt;p&gt;Sometimes when I can&amp;#8217;t sleep and I&amp;#8217;ve expended &lt;a href='http://en.wikipedia.org/wiki/Counting_sheep'&gt;all traditional methods&lt;/a&gt; to help me get there, I find it&amp;#8217;s good to take a task that you have been meaning to do for some time and make a start on it. After an hour or two, I would usually be tired enough to sleep and have cut the procrastination cycle a little.&lt;/p&gt;

&lt;p&gt;I have been meaning to do something about the uniformity of my blog for some time, I had still been using the default(?) theme for &lt;a href='http://www.typosphere.org/'&gt;typo&lt;/a&gt;, &lt;a href='http://quotedprintable.com/pages/scribbish'&gt;scribbish&lt;/a&gt;. So tonight, with the feeling of sleep far from my eyelids I decided to take my dust covered designers hat out of the cupboard and &lt;em&gt;have at it!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m actually quite pleased with the way it&amp;#8217;s turned out, dear reader what do you think?&lt;/p&gt;

&lt;p&gt;This post was brought to you by absence of the letter Zzz&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Installing Gruff, RMagick, ImageMagick and friends on Osx Intel</title>
   <link href="http://www.davidjrice.co.uk/2006/11/30/installing-gruff-rmagick-imagemagick-friends-on-osx-intel.html" />
   <updated>2006-11-30T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/11/30/installing-gruff-rmagick-imagemagick-friends-on-osx-intel</id>
   <content type="html">&lt;p&gt;Well, has it not been a long time coming? These stubborn libraries have caused me more than a couple of headaches in the past months, but finally (evil laugh) I have coaxed them into working.&lt;/p&gt;

&lt;p&gt;How I hear you asking? well &lt;a href='http://rmagick.rubyforge.org/install-osx.html'&gt;following the instructions&lt;/a&gt; over at the rmagick rubyforge site really worked this time. Previously I&amp;#8217;ve tried to build the whole shebang from source using &lt;a href='http://lfthoughts.blogspot.com/2006_03_01_lfthoughts_archive.html'&gt;Will Groppe&amp;#8217;s instructions&lt;/a&gt;, while this was my preferred option I had mixed results and was unable to get gruff working. Maybe next time I do a clean install I&amp;#8217;ll try again.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Inline AJAX form validation plugin for ruby on rails</title>
   <link href="http://www.davidjrice.co.uk/2006/11/29/inline-ajax-form-validation-plugin-for-ruby-on-rails.html" />
   <updated>2006-11-29T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/11/29/inline-ajax-form-validation-plugin-for-ruby-on-rails</id>
   <content type="html">&lt;p&gt;While this is a long way off from completed I thought it was quite cool, and didn&amp;#8217;t find that many other articles on the topic so here goes;&lt;/p&gt;

&lt;p&gt;For those of you who like to see before you do, see the finished product here (edit; movie removed, mail me if you want it put online, thanks).&lt;/p&gt;

&lt;h3 id='update'&gt;Update&lt;/h3&gt;

&lt;p&gt;The code is in git and should be working, let me know if you can&amp;#8217;t install the plugin.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install git@github.com:davidjrice/ajax_validation.git&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The plugin abstracts a couple of things that are common for trying to validate a model with ajax, this is my first plugin so i&amp;#8217;m not really sure how to test it but once i figure out&amp;#8230; anyway i&amp;#8217;m making a couple of assumptions in the plugin so here they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are using rails 1.1.6 +&lt;/li&gt;

&lt;li&gt;It assumes that your model/controller are singular/plural post/posts&lt;/li&gt;

&lt;li&gt;It assumes you are using the form_for helper&lt;/li&gt;

&lt;li&gt;It assumes you like ordered list forms :) I know i do.&lt;/li&gt;

&lt;li&gt;It definitely doesn&amp;#8217;t work with dates yet&lt;/li&gt;

&lt;li&gt;You know how to set up a new rails application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay lets start from scratch, fire up your terminal, create a new rails app and follow along;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install git@github.com:davidjrice/ajax_validation.git
script/generate scaffold_resource post title:string body:text published_at:datetime&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='the_model'&gt;The model&lt;/h2&gt;

&lt;p&gt;Lets just throw in a couple of validations to see it&amp;#8217;s working&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Post &amp;lt; ActiveRecord::Base
    validates_presence_of :title, :body, :published_at
    validates_length_of :title, :in =&amp;gt; 3..200
    validates_length_of :body, :minimum =&amp;gt; 10
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='the_controller'&gt;The controller&lt;/h2&gt;

&lt;p&gt;Apart from what&amp;#8217;s already created from you, you&amp;#8217;ll want to add the following&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class PostsController &amp;lt; ApplicationController
  ajax_validation_for :post
  ...
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='the_view'&gt;The view&lt;/h2&gt;

&lt;p&gt;To save time i&amp;#8217;ll only demonstrate the new.rhtml&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;New Post&amp;lt;/h1&amp;gt;
&amp;lt;%= error_messages_for :post %&amp;gt;
&amp;lt;%- ajax_validation_form_for(:post, :url =&amp;gt; posts_url, :html =&amp;gt; {:id =&amp;gt; &amp;quot;post_form&amp;quot;, :legend =&amp;gt; &amp;quot;Post Details&amp;quot;}) do |f| -%&amp;gt;
  &amp;lt;%= f.text_field :title, :label =&amp;gt; &amp;quot;Post title&amp;quot;, :hint =&amp;gt; &amp;quot;between three and two hundred characters&amp;quot; %&amp;gt;        
  &amp;lt;%= f.text_area :body %&amp;gt;
  &amp;lt;%= f.datetime_select :published_at %&amp;gt;   
  &amp;lt;%= submit_tag &amp;quot;Create&amp;quot; %&amp;gt;
&amp;lt;%- end -%&amp;gt;
&amp;lt;%= observe_form :post_form, :url =&amp;gt; validate_posts_path, :frequency =&amp;gt; 2 %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see that is using a new method, ajax_validation_form_for&amp;#8230; it&amp;#8217;s the same as form_for only the fields that are generated are wrapped like the following so if it&amp;#8217;s a field like select, or collection select you&amp;#8217;ll have to write it by hand as the rjs that is returned depends on some of the fields having the correct ids and supporting elements. oh yeah, and there&amp;#8217;s a :hint and :label attribute added to the options for the fields, try it and see.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;li id=&amp;quot;post_user_id_item&amp;quot;&amp;gt;
    &amp;lt;label for=&amp;quot;post_user_id&amp;quot;&amp;gt;Author&amp;lt;span class=&amp;quot;hint&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;%= f.collection_select :user_id, @users, :id, :display_name %&amp;gt;
    &amp;lt;span id=&amp;quot;post_user_id_validation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you&amp;#8217;ve got that all hooked up, you should have something like the example i&amp;#8217;ve shown. Although, your mileage may vary :) I look forward to seeing if anyone else finds this useful.&lt;/p&gt;

&lt;h3 id='quick_rails_related_note'&gt;Quick Rails related note&lt;/h3&gt;

&lt;p&gt;In the above view code, you&amp;#8217;ll notice the following line;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= observe_form :post_form, :url =&amp;gt; validate_posts_path, :frequency =&amp;gt; 2 %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This works because i&amp;#8217;ve applied the patch to rails I submitted here &lt;a href='http://dev.rubyonrails.org/ticket/6721'&gt;http://dev.rubyonrails.org/ticket/6721&lt;/a&gt; however a quick hack to get it to work is to replace the above code with&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= observe_form :post_form, :url =&amp;gt; validate_posts_path, :frequency =&amp;gt; 2, :update =&amp;gt; {} %&amp;gt;&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>Developing J2ME MIDlet applications on Mac OSX Intel</title>
   <link href="http://www.davidjrice.co.uk/2006/10/04/developing-j2me-midlet-applications-on-mac-osx-intel.html" />
   <updated>2006-10-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/10/04/developing-j2me-midlet-applications-on-mac-osx-intel</id>
   <content type="html">&lt;p&gt;For a course i&amp;#8217;m taking this year for my degree we&amp;#8217;re, building J2ME MIDlet applications. JAVA isn&amp;#8217;t really my thing but I suppose it can only make me enjoy those chances when I get to use Ruby a lot more.&lt;/p&gt;

&lt;p&gt;Took me a good bit of searching around to get everything working so hopefully this will save you some trouble.&lt;/p&gt;

&lt;h2 id='prerequisites'&gt;Pre-requisites&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You&amp;#8217;re using Mac OSX 10.4.x&lt;/li&gt;

&lt;li&gt;You&amp;#8217;re at Java 1.5 (comes with Mac OSX)&lt;/li&gt;

&lt;li&gt;You&amp;#8217;ve installed the Mac OSX developer tools (especially Xcode)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='installation'&gt;Installation&lt;/h2&gt;

&lt;p&gt;Okay we&amp;#8217;re going to download and install a couple of things to get up and running.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Ant&lt;/li&gt;

&lt;li&gt;Install the emulator and sdk&lt;/li&gt;

&lt;li&gt;Setup Xcode&lt;/li&gt;

&lt;li&gt;Test it out!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='install_ant'&gt;Install Ant&lt;/h3&gt;

&lt;p&gt;&lt;a href='http://ant.apache.org/srcdownload.cgi'&gt;Download&lt;/a&gt; the latest source file from the Ant site. Fire open your favorite terminal application and cd to the extracted directory. Now simply run the build script, you&amp;#8217;ll have to choose somewhere to install Ant, I thought /Library/Ant was a good one.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sh build.sh -Ddist.dir=/Library/Ant dist&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That should be it good to go, you may have to create some symlinks from /usr/local/bin let me know if this doesn&amp;#8217;t work for you.&lt;/p&gt;

&lt;h3 id='install_the_emulator_and_sdk'&gt;Install the emulator and sdk&lt;/h3&gt;

&lt;p&gt;Download the sdk from Mpowerplayer &lt;a href='http://mpowerplayer.com/products-sdk.php'&gt;here&lt;/a&gt; and extract to /Developer/Java/&lt;/p&gt;

&lt;h3 id='setup_xcode'&gt;Setup Xcode&lt;/h3&gt;

&lt;p&gt;&lt;a href='http://haikusoftware.com/midletdev/xcodemidlets.html'&gt;Haiku Software&lt;/a&gt; produced a great template for use with Xcode. Download it &lt;a href='http://haikusoftware.com/midletdev/xcodetemplate.zip'&gt;here&lt;/a&gt; and copy it into&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/Library/Application%20Support/Apple/Developer%20Tools/Project%20Templates/Java/ &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I have previously gotten errors when compiling with the default template. To fix this, before you copy the template, open up the build.xml file and change the following&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property name=&amp;quot;java.classes.jar&amp;quot; value=&amp;quot;/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar&amp;quot; /&amp;gt; &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property name=&amp;quot;java.classes.jar&amp;quot; value=&amp;quot;/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/classes.jar&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='test_it_out'&gt;Test it out!&lt;/h3&gt;

&lt;p&gt;Open Xcode and choose &lt;em&gt;New Project&lt;/em&gt;, scroll down to the Java section and choose &lt;em&gt;Ant-based MIDlet Jar&lt;/em&gt;. When you hit &lt;em&gt;build and go&lt;/em&gt; it should build the jar file and open up in the emulator. Hurray!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A blaggers worst nightmare</title>
   <link href="http://www.davidjrice.co.uk/2006/08/31/a-blaggers-worst-nightmare.html" />
   <updated>2006-08-31T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/08/31/a-blaggers-worst-nightmare</id>
   <content type="html">&lt;p&gt;Recently at work, we were looking to hire a contractor to spread some of the work load. As this person would be working directly with me on a big project, and time is already short. I wanted to make sure that they were of a calibre were I wouldn&amp;#8217;t end up spending more time educating and checking on them than I would actually doing things in the first place&amp;#8230; so I made sure we got a code sample before an interview was arranged.&lt;/p&gt;

&lt;p&gt;Reading through someone&amp;#8217;s work, a lot becomes apparent of how they think, they&amp;#8217;re methodologies and in general how suitable they are for the role they will fill. This is why hiring from the open source community reduces the risk that you are going to hire dead weight. &lt;a href='http://www.loudthinking.com/arc/000505.html'&gt;David Heinemeier Hansson has a good article on this topic&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I was looking through the submitted code I found use of a lot of &lt;a href='http://glu.ttono.us/articles/2006/08/30/guide-things-you-shouldnt-be-doing-in-rails'&gt;things you shouldn&amp;#8217;t be doing in rails&lt;/a&gt;. Also, it was an authentication system&amp;#8230; I read a couple of lines and thought, wait a second i&amp;#8217;ve seen a lot of this before. A quick check of the plugins directory and I found that yes, &lt;a href='http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated'&gt;acts_as_authenticated&lt;/a&gt; and &lt;a href='http://brainspl.at/articles/2006/02/20/new-plugin-acl_system'&gt;acl_system2&lt;/a&gt; were both being used. Fair enough I thought, i&amp;#8217;ve used them on a lot of the projects I work on, i&amp;#8217;ll just have a look and see how they&amp;#8217;ve been extended&amp;#8230;&lt;/p&gt;

&lt;p&gt;Looking into things further, I couldn&amp;#8217;t help but laugh. Everything was from the &lt;a href='http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated'&gt;acts_as_authenticated stikipad&lt;/a&gt; Including, yes hilariously; the &lt;a href='http://technoweenie.stikipad.com/plugins/show/Password+Resetting'&gt;password reset code that &lt;em&gt;I&lt;/em&gt; had written&lt;/a&gt;. What a coincidence :)&lt;/p&gt;

&lt;p&gt;So the moral of this story is; whenever you claim ownership of something, make sure that at least some aspect of it is unique. Also that it&amp;#8217;s very hard to blag your way within a small community like Ruby on Rails and not be caught out.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Capitalist concession cart conspiracy</title>
   <link href="http://www.davidjrice.co.uk/2006/08/29/capitalist-concession-cart-conspiracy.html" />
   <updated>2006-08-29T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/08/29/capitalist-concession-cart-conspiracy</id>
   <content type="html">&lt;p&gt;So with the &lt;a href='http://www.dft.gov.uk/stellent/groups/dft_about/documents/page/dft_about_612280.hcsp'&gt;recent restrictions on air travel in the UK&lt;/a&gt; it got me thinking how good a business model it is for the duty free shopping and in-flight concession carts. Like all sensible &lt;em&gt;(economical)&lt;/em&gt; people I tend to pack enough drinks and reading material so I don&amp;#8217;t have to be extorted while waiting for my flight&amp;#8230; I mean how much does it cost for those minuscule cans of coke you get on the plane?&lt;/p&gt;

&lt;p&gt;It ain&amp;#8217;t like the good old days when you could accidentally get to america and realise that the penknife you grabbed at the last minute because it might come in handy backpacking was still in your pocket. Memories.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Hello from Typo 4.0!</title>
   <link href="http://www.davidjrice.co.uk/2006/08/01/hello-from-typo-4-0.html" />
   <updated>2006-08-01T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/08/01/hello-from-typo-4-0</id>
   <content type="html">&lt;p&gt;Just upgraded to the recently released version of &lt;a href='http://typosphere.org/'&gt;Typo&lt;/a&gt; that blogging engine I use, written in Ruby on Rails of course. Quite a swift and painless process, thanks to some prior preparation! While I was upgrading I couldn&amp;#8217;t help think I should possibly turn this into a capistrano recipe it would speed up upgrading to the next version. So maybe more on that later.&lt;/p&gt;

&lt;h2 id='quick_guide_for_upgrading_from_typo_26_to_40'&gt;Quick guide for upgrading from typo 2.6 to 4.0&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make a backup copy of your database &lt;em&gt;( because we all know that shit happens )&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Login to your server via ssh&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Check out the latest version of typo to wherever you stash your sites&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; svn co svn://typosphere.org/typo/tags/release\_4\_0\_0 typo&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Copy database.yml.example to database.yml and add the right login info&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Change the shebang lines for your dispatcher scripts&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Copy your custom theme from the current typo dirctory to this one. &lt;em&gt;(I like to keep my theme in a repository of it&amp;#8217;s own so i can easily check it out on a new install)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Stop the ruby processes &lt;em&gt;(and server if appropriate)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;run the command&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;   rake environment RAILS_ENV=production migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Move the current directory to a backup and then change the name of the freshly checked out copy to what you had before.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Restart your server and &lt;strong&gt;hey presto!&lt;/strong&gt; you should be up and running.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>MacBook pro Battery problems... No batteries available!?</title>
   <link href="http://www.davidjrice.co.uk/2006/07/13/macbook-pro-battery-problems-no-batteries-available.html" />
   <updated>2006-07-13T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/07/13/macbook-pro-battery-problems-no-batteries-available</id>
   <content type="html">&lt;p&gt;So I was at the &lt;a href='http://oxegen.ie'&gt;Oxegen music festival&lt;/a&gt; at the weekend past, and it was absolutely brilliant (more to come on that later&amp;#8230;) anyway on the monday after, waking up &lt;em&gt;(some time in the afternon)&lt;/em&gt; I turned on my MacBook, everything seemed as normal until I went to lift it into the living room and removed the &lt;strong&gt;power adapter&lt;/strong&gt;, the screen went black and left a very tired me in a very confused state.&lt;/p&gt;
&lt;script type='text/javascript'&gt;&lt;!--
google_ad_client = "pub-8155081238962145";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
google_ad_channel = "";
google_color_border = "000000";
google_color_bg = "F0F0F0";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//--&gt;
&lt;/script&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;
&lt;/script&gt;
&lt;h2 id='what_happened'&gt;What happened?&lt;/h2&gt;

&lt;p&gt;Well, looking in the &lt;strong&gt;menu bar&lt;/strong&gt; at my &lt;strong&gt;battery icon&lt;/strong&gt; it has a nice big X through it instead of the percentage charge &lt;em&gt;(or a plug)&lt;/em&gt;, clicking on the icon i&amp;#8217;m treated to the lovely text saying &lt;strong&gt;No batteries available&lt;/strong&gt;&amp;#8230; in disbelief I lift my MacBook pro and oh yes the battery is indeed still there, confused? so am I.&lt;/p&gt;

&lt;h2 id='no_batteries_available_attempting_a_soltion'&gt;No batteries available&amp;#8230; attempting a soltion&lt;/h2&gt;

&lt;p&gt;With any hardware failure on a mac there are a number of steps to take to try and fix things.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove any unecessary external peripherals&lt;/li&gt;

&lt;li&gt;Restart&lt;/li&gt;

&lt;li&gt;Shutdown and remove power cables and battery&lt;/li&gt;

&lt;li&gt;Reconnect the ac cable and battery and turn on&lt;/li&gt;

&lt;li&gt;&lt;a href='http://docs.info.apple.com/article.html?artnum=2238'&gt;Reset PRAM and NVRAM&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://docs.info.apple.com/article.html?artnum=303319'&gt;Reset PMU&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When none of this worked I knew it was time to phone for help!&lt;/p&gt;

&lt;h2 id='apple__macsys_to_the_rescue'&gt;Apple &amp;amp; Mac-sys to the rescue&lt;/h2&gt;

&lt;p&gt;After a quick phone call to apple to register this fault and told him all of the steps I&amp;#8217;d already taken &lt;em&gt;(it was great to get someone smart on the other end, as he didn&amp;#8217;t waste my time asking me to repeat them&amp;#8230; that&amp;#8217;s happened before)&lt;/em&gt; anyway, he suggested to try another battery to see if that should be the problem before they send me out a futile replacement battery.&lt;/p&gt;

&lt;p&gt;So i took a quick jaunt to my nearest (read &lt;em&gt;only&lt;/em&gt;) apple certified service provider in Northern Ireland. The guys at &lt;a href='http://www.mac-sys.co.uk/'&gt;Mac-Sys&lt;/a&gt; are always really helpful and all too happy to help&amp;#8230; even went that extra mile by using one of their personal machines batteries to check if mine was a dud, now that&amp;#8217;s great service! My battery wouldn&amp;#8217;t charge in their machine, and inserting the definitely working battery in mine everything was dandy.&lt;/p&gt;

&lt;h2 id='not_alone'&gt;Not alone&lt;/h2&gt;

&lt;p&gt;After a bit of googling, I came across a &lt;a href='http://discussions.apple.com/thread.jspa?threadID=397330&amp;amp;tstart=0'&gt;thread on the apple discussion forum&lt;/a&gt; where a lot of others seem to have had this same problem.&lt;/p&gt;
&lt;script type='text/javascript'&gt;&lt;!--
google_ad_client = "pub-8155081238962145";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
google_ad_channel = "";
google_color_border = "000000";
google_color_bg = "F0F0F0";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//--&gt;
&lt;/script&gt;&lt;script src='http://pagead2.googlesyndication.com/pagead/show_ads.js' type='text/javascript'&gt;
&lt;/script&gt;
&lt;h2 id='the_why'&gt;The Why?!&lt;/h2&gt;

&lt;p&gt;It appears that the battery in the MacBook pro has a &lt;strong&gt;Minimum charge level&lt;/strong&gt; which if one were to go on holiday for a couple of days, would drop below. Once it reaches below this point the MacBook does not recognize it has a battery inserted, and thus can not be charged!&lt;/p&gt;

&lt;p&gt;Hopefully this is something as simple as a firmware / software problem that can be fixed by &lt;a href='http://www.apple.com/'&gt;Apple&lt;/a&gt; sometime soon. Well Apple, this is your second strike &lt;em&gt;(major problem)&lt;/em&gt; one more with this MacBook and I believe you owe me a new one :)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Some tips for smarter ruby on rails testing</title>
   <link href="http://www.davidjrice.co.uk/2006/07/12/some-tips-for-smarter-ruby-on-rails-testing.html" />
   <updated>2006-07-12T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/07/12/some-tips-for-smarter-ruby-on-rails-testing</id>
   <content type="html">&lt;h2 id='drying_up_your_unit_tests'&gt;Drying up your unit tests&lt;/h2&gt;

&lt;p&gt;So you&amp;#8217;ve started unit testing, yet doing unit tests on models for basic crud operations usually leads to a lot of repetition.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many fixtures are there in the database&lt;/li&gt;

&lt;li&gt;Try and create a new record&lt;/li&gt;

&lt;li&gt;Assert some stuff&lt;/li&gt;

&lt;li&gt;Assert that the new record was created&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;and also the inverse&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many fixtures are there in the database&lt;/li&gt;

&lt;li&gt;Try and create a new record&lt;/li&gt;

&lt;li&gt;Assert some stuff&lt;/li&gt;

&lt;li&gt;Assert that the new record was &lt;strong&gt;not&lt;/strong&gt; created&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That&amp;#8217;s were assert_difference and assert_no_difference comes in.&lt;/p&gt;

&lt;h3 id='assert_difference'&gt;assert_difference&lt;/h3&gt;

&lt;p&gt;Using Marcel Molina&amp;#8217;s excellent &lt;a href='http://blog.caboo.se/articles/2006/06/13/a-better-assert_difference'&gt;assert_difference&lt;/a&gt; we can encapsulate a lot of this common code with a simple helper method. &lt;em&gt;(follow the link for the code and place in your test_helper.rb file)&lt;/em&gt;&lt;/p&gt;

&lt;h3 id='assert_no_difference'&gt;assert_no_difference&lt;/h3&gt;

&lt;p&gt;Simply a wrapper for the assert_difference helper, I couldn&amp;#8217;t find this online so just posting it here for posterity.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  def assert_no_difference(object, method, &amp;amp;block)
      assert_difference object, method, 0, &amp;amp;block
  end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='autotest'&gt;Autotest&lt;/h2&gt;

&lt;p&gt;I found this little gem &lt;em&gt;(pun not intended)&lt;/em&gt; from a &lt;a href='http://nubyonrails.com/articles/2006/04/19/autotest-rails'&gt;post by Geoffrey Grosenbach&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What it does is automatically check the files in the rails directory for changes, and run the appropriate tests. This can be really handy if you&amp;#8217;re doing a lot of work in a specific model and you&amp;#8217;ve lots of other tests&amp;#8230; as it will only run the tests corresponding to the files you&amp;#8217;ve changed, saving quite some time.&lt;/p&gt;

&lt;h3 id='installation_is_easy'&gt;Installation is easy&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install ZenTest&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='kick_off_the_unit_tests_with'&gt;Kick off the unit tests with&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;autotest -rails&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='getting_better_test_failure_notification'&gt;Getting better test failure notification&lt;/h2&gt;

&lt;p&gt;After a while using autotest I thought i could save even more time if i didn&amp;#8217;t keep having to flick between textmate and iTerm. Then the other day I noticed an &lt;a href='http://thatswhatimtalkingabout.org/news/2006/6/8/make-your-tests-roar'&gt;excellent plugin by Blake Waters&lt;/a&gt;, that integrates with the Growl notification framework. Popping up a little notification window whenever a test fails&amp;#8230; sweet! &lt;em&gt;(Follow the link for instructions on setting this up!)&lt;/em&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Punx Picnic Belfast</title>
   <link href="http://www.davidjrice.co.uk/2006/07/12/punx-picnic-belfast.html" />
   <updated>2006-07-12T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/07/12/punx-picnic-belfast</id>
   <content type="html">&lt;p&gt;So nearly three weeks ago (Thursday 29th June) I went to &lt;strong&gt;The Front Page&lt;/strong&gt; to catch some local bands with my sister, I must admit I wasn&amp;#8217;t expecting much but oh how wrong was I&amp;#8230; Belfast&amp;#8217;s music scene has really grown up since I was a regular at Giros, The Front Page and all those other small music venues.&lt;/p&gt;

&lt;h2 id='lineup'&gt;Lineup&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Black Pearl Mafia&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.latexspidermonkey.com/'&gt;Latex Spider Monkey&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.myspace.com/stuntonline'&gt;S.T.U.N.T.&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.pocketbilliards.co.uk/'&gt;Pocket Billiards&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Complan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wouldn&amp;#8217;t term any of the bands to fit squarely in the &lt;em&gt;punk&lt;/em&gt; genre that is defined so clearly by the Sex Pistols, it was more of a modern mish-mash of genres and musical tastes each with a unique sound.&lt;/p&gt;

&lt;p&gt;I really enjoyed the set by &lt;strong&gt;latex spider monkey&lt;/strong&gt;, who gave us a wonderful exploration of experimental styled prog/alt rock and a huge helping of weird. With plenty of unusual time signatures and off-beat rhythms they were a technical delight to watch.&lt;/p&gt;

&lt;h3 id='pocket_billiards'&gt;Pocket Billiards&lt;/h3&gt;

&lt;p&gt;It was great to see all 7 (or was it 9) members on stage. (Which is some feat in The Front Page) Maybe i&amp;#8217;m slightly biased with a friend from work playing lead for them, but I do think they were excellent! You can check out some songs by the &lt;a href='http://www.last.fm/music/Pocket+Billiards'&gt;Pocket Billiards on last.fm&lt;/a&gt; to see what I mean.&lt;/p&gt;

&lt;p&gt;All in all a great gig, and what a bargain at Â£4. It&amp;#8217;s inspired me to check out local music more regularly.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Apprentice Ruby on Rails developer needed!</title>
   <link href="http://www.davidjrice.co.uk/2006/06/30/apprentice-ruby-on-rails-developer-needed.html" />
   <updated>2006-06-30T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/30/apprentice-ruby-on-rails-developer-needed</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.designbyfront.com'&gt;We&lt;/a&gt; are looking for an apprentice Ruby on Rails developer. If you think you fit the bill get in touch!&lt;/p&gt;

&lt;p&gt;(Original post from &lt;a href='http://green.carisenda.com/archive/2006/06/wanted_apprenti.html'&gt;Stephen&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I forgot to mention that we are looking for an apprentice Ruby on Rails developer on a full time basis. A recent graduate or possibly someone doing a year out/sandwich course type thing is what weâ€™d thought â€” however weâ€™re open to all and any suggestions. Youâ€™ll be working in a Debian, Ruby and MySQL environment mainly (some Perl and PHP too) and with some quite clever and cool people (and me too Iâ€™m afraid).&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Call for backup! It's a RAID!</title>
   <link href="http://www.davidjrice.co.uk/2006/06/24/call-for-backup-it-s-a-raid.html" />
   <updated>2006-06-24T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/24/call-for-backup-it-s-a-raid</id>
   <content type="html">&lt;p&gt;In a &lt;a href='http://www.davidjrice.co.uk/articles/2006/05/26/dont-panic'&gt;previous article&lt;/a&gt; about backup I mentioned that i&amp;#8217;d bought a RAID array from &lt;a href='http://www.nitroav.com/'&gt;Nitro AV&lt;/a&gt;. I&amp;#8217;ve finally got it up and running so here&amp;#8217;s what I think about it.&lt;/p&gt;

&lt;h2 id='nitroav_vanguard_v_raid_5_array'&gt;&lt;a href='http://www.nitroav.com/product/400/'&gt;NitroAV Vanguard V, RAID 5 Array&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id='specifications'&gt;Specifications&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Five hot-swapable bays&lt;/li&gt;

&lt;li&gt;LCD Configuration&lt;/li&gt;

&lt;li&gt;Firewire 800&lt;/li&gt;

&lt;li&gt;USB 2.0&lt;/li&gt;

&lt;li&gt;SATA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt='Nitro AV - Vanguard V RAID array' src='/files/vanguard.jpg' /&gt;&lt;/p&gt;

&lt;p&gt;The Vanguard V is an awesome machine with a really good spec, it&amp;#8217;s perfectly designed and has a really nice finish. It&amp;#8217;s not too noisy, the fan is powerful but there are no whiney noises which is great. With some music on it isn&amp;#8217;t really noticable.&lt;/p&gt;

&lt;h3 id='a_comparision'&gt;A comparision&lt;/h3&gt;

&lt;p&gt;I previously had a &lt;a href='http://www.buffalotech.com/products/product-detail.php?productid=97'&gt;Buffalo TeraStation&lt;/a&gt;, while it was pretty good it didn&amp;#8217;t play that well with macs, it needed a pc for setup via a complicated procedure. The tool path of the machine was really badly designed however. Granted that it was not intended as a hot swapable machine&amp;#8230; but having to remove 15+ screws, remove connecting wires and fiddle around with awkward &lt;em&gt;(sharp)&lt;/em&gt; internal cases just to change or add another drive was pretty annoying.&lt;/p&gt;

&lt;h3 id='importance_of_a_good_manual'&gt;Importance of a good manual&lt;/h3&gt;

&lt;p&gt;The Vanguard V, brilliant in design that it is. Does not benefit from an equally well designed manual. Reading through all of the manual information online. It had me convinced that I needed an RS232 cable to setup the device. Okay I thought, and set about getting one&amp;#8230; after I got it and connected up to the Vanguard I realised I wasn&amp;#8217;t too sure what to do next so phoned tech support. The guy on the phone was able to walk me through a couple of simple steps to get the Vanguard to start initializing the array.&lt;/p&gt;

&lt;p&gt;As Kathy Sierra hints at in her article, &lt;a href='http://headrush.typepad.com/creating_passionate_users/2006/05/which_users_lif.html'&gt;&amp;#8220;Which user&amp;#8217;s life have you changed today?&amp;#8221;&lt;/a&gt; there&amp;#8217;s no point in having a brilliant product or service, if you can&amp;#8217;t tell your users how it works. The instructions I was told over the phone should definitely have been in the manual. Especially mentioning the default password for the device would have been a good idea too!&lt;/p&gt;

&lt;h4 id='quick_start_guide'&gt;Quick Start guide&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Press enter on the LCD display&lt;/li&gt;

&lt;li&gt;Enter 0000 as the password and press enter until the caret reaches the end of the screen&lt;/li&gt;

&lt;li&gt;You should enter a menu system and be presented with options&lt;/li&gt;

&lt;li&gt;Select &lt;strong&gt;Setup Raid Array&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;It should prompt you with the defaults. If you&amp;#8217;ve got more than 3 drives you can setup raid 5&lt;/li&gt;

&lt;li&gt;Press enter&lt;/li&gt;

&lt;li&gt;It will ask for a number of configuration options which are best left at default unless you know better&lt;/li&gt;

&lt;li&gt;Press enter to continue through the screens&lt;/li&gt;

&lt;li&gt;It should start Initializing the RAID set now. &lt;em&gt;It took about 3 hours for three drives to work all it&amp;#8217;s magic setting up.&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Once the RAID set is initialized, we can plug it into the host computer. &lt;em&gt;I&amp;#8217;m using firewire at the minute (It&amp;#8217;s a pity the new MacBooks don&amp;#8217;t have Firewire 800)&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Open disk utility and format the RAID set. &lt;em&gt;I chose &amp;#8220;Mac OS Extended (Journaled)&amp;#8221;&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;After that&amp;#8217;s finished, we&amp;#8217;re all set!&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id='raid_5'&gt;Raid 5?&lt;/h3&gt;

&lt;p&gt;I think that it&amp;#8217;s possibly the best combination of data redundancy whilst minimizing cost per Gb. If a drive fails, we can simply replace it and the array will rebuild itself. Sweet.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://en.wikipedia.org/wiki/Redundant_array_of_independent_disks#RAID_5'&gt;More info on RAID 5&lt;/a&gt;&lt;/p&gt;

&lt;h3 id='conclusion'&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Awesome product, and performs really well. So far it&amp;#8217;s been seamless, copying files to and streaming the lossless music I put on it&amp;#8230; and it didn&amp;#8217;t skip a beat.&lt;/p&gt;

&lt;p&gt;Great buy, and a long term investment. I went for the case only option myself as I already had two external firewire drives that I coould use. I reckon if I were to give this product a rating it would be &lt;strong&gt;(5) ***** stars&lt;/strong&gt; &lt;em&gt;(out of five)&lt;/em&gt;&lt;/p&gt;

&lt;h3 id='call_for_backup'&gt;Call For Backup&lt;/h3&gt;

&lt;p&gt;I was going to write about how i&amp;#8217;m backing up my computers onto this, but I think that&amp;#8217;s one for another post :)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Typo, Textdrive and mod_security brought to you by... the word ssh</title>
   <link href="http://www.davidjrice.co.uk/2006/06/21/typo-textdrive-and-mod_security-brought-to-you-by-the-word-ssh.html" />
   <updated>2006-06-21T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/21/typo-textdrive-and-mod_security-brought-to-you-by-the-word-ssh</id>
   <content type="html">&lt;p&gt;Okay, so the overzealous mod_security rule will block any attempt to create a page/article/comment (anything really) with a unix command, followed by a space.&lt;/p&gt;

&lt;p&gt;Obviously mod_security is great when it comes to keeping down referrer spam etc&amp;#8230;. however attempting to write an article about ssh&amp;#160;without mentioning it is a tough task indeed :)&lt;/p&gt;

&lt;p&gt;The error you&amp;#8217;re likely to see is&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Precondition Failed&lt;/strong&gt; The precondition on the request for the URL /admin/content/preview evaluated to false.&lt;/p&gt;

&lt;h3 id='workarounds'&gt;Workarounds&lt;/h3&gt;

&lt;p&gt;You can easily get round this by writing code blocks something like the following ( i use markup) However it&amp;#8217;s not a permanent solution&amp;#8230; and you&amp;#8217;re blog could be taken out if someone mentions it in a comment.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;`ssh`&amp;amp;nbps;`user@domain.com`&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you&amp;#8217;re serving you&amp;#8217;re site via apache, you can turn off mod_security in a .htaccess file. However if you&amp;#8217;re proxying to lighttpd from apache, then you&amp;#8217;ll need to open a support ticket and turn off mod_security for the whole domain. See the &lt;a href='http://help.textdrive.com/index.php?pg=kb.page&amp;amp;id=85'&gt;textdrive helpdesk article&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h3 id='update'&gt;Update&lt;/h3&gt;

&lt;p&gt;So there&amp;#8217;s a better workaround, the guys at textdrive cooked up a custom rule to ignore the unixy command names so my blog is &lt;em&gt;nerd-speak&lt;/em&gt; safe.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SecFilterSelective POST_PAYLOAD &amp;quot;uname|echo|kill|chmod|ls|zsh|csh|                               
                                 tcsh|rsh|ksh|wget|lynx|scp|ftp|cvs|
                                 rcp|telnet|ssh|links|mkdir|ps&amp;quot; 
                            allow,nolog&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;ideally this woud all be on one line.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Correct me if i&amp;#8217;m wrong but i&amp;#8217;m sure that was added to the apache2.conf, as it had to be caught before passing through to lighttpd.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Tunnelling to Rails production/qa database via ssh</title>
   <link href="http://www.davidjrice.co.uk/2006/06/21/tunnelling-to-rails-production-qa-database-via-ssh.html" />
   <updated>2006-06-21T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/21/tunnelling-to-rails-production-qa-database-via-ssh</id>
   <content type="html">&lt;p&gt;Okay, so say we have a database on our production/qa server that we want to test a coding change against.&lt;/p&gt;

&lt;p&gt;What i&amp;#8217;d usually do would be to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;svn commit
rake deploy&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s not really good practice for working in a team, as we don&amp;#8217;t want to check in cruft that someone might pick up&amp;#8230;. or kill the production server!&lt;/p&gt;

&lt;h2 id='alternatives'&gt;Alternatives&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mirroring data from our remote database to our local copy&lt;/li&gt;

&lt;li&gt;Connect directly to the remote database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obviously i&amp;#8217;m focusing on the second one for now, but i might take a look into the other at some point&amp;#8230;. :)&lt;/p&gt;

&lt;p&gt;Because of our secure setup, we can&amp;#8217;t just connect directly to the database from outside. So&amp;#8230;.&lt;/p&gt;

&lt;h3 id='enter_the_tunnel'&gt;Enter the tunnel&lt;/h3&gt;

&lt;p&gt;What we want to do is create a tunnel from our development machine to the remote database. Fire open the command line. I&amp;#8217;m assuming you&amp;#8217;re using mysql, and it&amp;#8217;s on port 3306&amp;#8230; just choose a random ephemeral port for the local port.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt;&amp;#160;&lt;code&gt;dave@server.domain.com -L 10293:127.0.0.1:3306&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What we&amp;#8217;re doing is routing traffic via ssh, through port 10293 on our local machine to mysql on our remote server. If you were successful, a new shell should open to the remote server.&lt;/p&gt;

&lt;h3 id='whats_the_connection'&gt;What&amp;#8217;s the connection&lt;/h3&gt;

&lt;p&gt;We can connect to the database by any means we want now, I like to use &lt;a href='http://cocoamysql.sourceforge.net/'&gt;cocoamysql&lt;/a&gt; for browsing, the following snippet from &lt;strong&gt;datebase.yml&lt;/strong&gt; should help configure things,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;production:
  adapter: mysql
  database: database_name
  username: dave
  password: xxxxxxx
  host: server.domain.com
  port: 10293&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>MacBook pro Airport/WiFi problems</title>
   <link href="http://www.davidjrice.co.uk/2006/06/21/macbook-pro-airport-wifi-problems.html" />
   <updated>2006-06-21T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/21/macbook-pro-airport-wifi-problems</id>
   <content type="html">&lt;p&gt;So the macbook pro is an excellent piece of kit, but it seems to be plagued with a lot of problems with airport. It seems to be problems with storing / retrieving passwords from the keychain.&lt;/p&gt;

&lt;p&gt;I noticed a couple of main issues&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;With the &lt;strong&gt;Airport Admin Utility&lt;/strong&gt;, if I want to administer my airport basestation (or airport express). It asks me for the password every time, even if i&amp;#8217;ve selected &lt;em&gt;Remember this password in my keychain&lt;/em&gt;. Hmm&amp;#8230;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;I was using &lt;strong&gt;WEP Encryption&lt;/strong&gt; and operating as a &lt;strong&gt;closed network&lt;/strong&gt;. Every time I would restart or sleep the macbook, it just wouldn&amp;#8217;t want to connect to the network.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='solving_the_macbook_pro_airport_auto_join_problem'&gt;Solving the macbook pro airport auto join problem&lt;/h2&gt;

&lt;p&gt;So using WEP was causing some funk, and when narrowed down to keychain problems, (that I didn&amp;#8217;t really want to investigate any further) I did the following to my airport basestation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enabled &lt;strong&gt;MAC Address based Access Control&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Disabled &lt;strong&gt;WEP&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;Deleted all keychain items matching my home network&amp;#8217;s SSID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bing! We&amp;#8217;ve got auto joining airport back. Airport admin utility continues to be a pain in the ass though.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Building ImageMagick and RMagick on Mac OSX intel</title>
   <link href="http://www.davidjrice.co.uk/2006/06/20/building-imagemagick-and-rmagick-on-mac-osx-intel.html" />
   <updated>2006-06-20T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/20/building-imagemagick-and-rmagick-on-mac-osx-intel</id>
   <content type="html">&lt;p&gt;After countless unsucessfull attempts at installing RMagick, the magick has finally happened!&lt;/p&gt;

&lt;p&gt;Thanks to hivelogic&amp;#8217;s &lt;a href='http://hivelogic.com/articles/2006/06/10/rmagick_os_x'&gt;excellent install script&lt;/a&gt;, everything was pretty straightforward this time. However I had to add an extra configuration option that seemed to be causing the RMagick install to fail.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd ImageMagick-6.2.8
./configure --prefix=/usr/local --without-perl&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='update'&gt;Update&lt;/h3&gt;

&lt;p&gt;Okay, so RMagick installed correctly on intel. But actually trying to do anything with it (or gruff for that matter) fails with &lt;strong&gt;uninitialized constant Magick&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Requiring &lt;strong&gt;gruff&lt;/strong&gt; or &lt;strong&gt;rmagick&lt;/strong&gt; doesn&amp;#8217;t work&amp;#8230; although i can require &lt;strong&gt;gruff/base&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;irb(main):001:0&amp;gt; require &amp;#39;rubygems&amp;#39;
=&amp;gt; true
irb(main):002:0&amp;gt; require &amp;#39;gruff/base&amp;#39;
=&amp;gt; true&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;More on this when I&amp;#8217;ve got it working!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Can you digg it?</title>
   <link href="http://www.davidjrice.co.uk/2006/06/12/can-you-digg-it.html" />
   <updated>2006-06-12T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/12/can-you-digg-it</id>
   <content type="html">&lt;p&gt;Wow&amp;#8230; when i was checking the &lt;a href='http://haveamint.com/'&gt;mint&lt;/a&gt; statistics for this site earlier I just noticed that my previous article about RSI was &lt;a href='http://digg.com/programming/DACT:_Developers_against_carpal_tunnel'&gt;dugg&lt;/a&gt;, by &lt;a href='http://www.robbyonrails.com'&gt;Robby Russell&lt;/a&gt; (thanks!).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m a digg virgin and pretty pleased to have the privilege :) If only my blog had been alive the whole time I might have got a couple more than 3 diggs. ;)&lt;/p&gt;

&lt;p&gt;Typo is a memory hogging bag of fun, and has been systematically killed by the textdrive reaper every day&amp;#8230; i&amp;#8217;m trying it on just the one fcgi dispatcher with lighttpd for now, hopefully that will do the job. But I can&amp;#8217;t wait till the guys at textdrive announce support for litespeed and mongrel (which will hopefully be in the coming weeks), i&amp;#8217;m thinking it will be a permanent aspirin to my deployment headache.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rolling up my sleeves... before going to bed</title>
   <link href="http://www.davidjrice.co.uk/2006/06/11/rolling-up-my-sleeves-before-going-to-bed.html" />
   <updated>2006-06-11T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/11/rolling-up-my-sleeves-before-going-to-bed</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been meaning to try some form of aid for relieving &lt;a href='http://en.wikipedia.org/wiki/Carpal_tunnel_syndrome'&gt;Carpal Tunnel Syndrome&lt;/a&gt;, for some time. I just saw an advert for &lt;a href='http://mycarpaltunnel.com/'&gt;this device&lt;/a&gt; which according to their testimonials, might be worth a try.&lt;/p&gt;

&lt;p&gt;Coincidentally Robby Russell jost posted an article today about how he&amp;#8217;s also &lt;a href='http://www.robbyonrails.com:8680/articles/2006/06/10/rolling-up-my-sleeves'&gt;rolling his sleeve&amp;#8217;s up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RSI is the stealth ninja of ailments&amp;#8230; it&amp;#8217;s never just caused by one thing, I had it pretty bad until quite recently, but it&amp;#8217;s started to go away after I started figuring out what was causing it and doing something about it&amp;#8230;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stressful, mundane and de-motivating job&lt;/li&gt;

&lt;li&gt;Too much computer time&lt;/li&gt;

&lt;li&gt;Bad working environment&amp;#8230; &lt;em&gt;i&amp;#8217;ve since concluded that I am not compatible with Windows machines&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;Lack of exercise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removing and improving on those factors in my life has, and probably will give more of a quantifiable benefit than any device ever could. However an opportunity to speed things along has never been one I would seek to miss.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Dead man walking.</title>
   <link href="http://www.davidjrice.co.uk/2006/06/08/dead-man-walking.html" />
   <updated>2006-06-08T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/08/dead-man-walking</id>
   <content type="html">&lt;p&gt;So typo still keeps on dying during the day at textdrive. I&amp;#8217;ve set it to restart nightly but most of the time I visit the homepage and it&amp;#8217;s an HTTP 500 error or no articles appear, ehm what?&lt;/p&gt;

&lt;p&gt;So i&amp;#8217;ve tried to investigate around the web, and can&amp;#8217;t find anyone with the same problem as I, who has a resolution. I&amp;#8217;ll be trying a couple of things in the next few days to hopefully figure out what is going on! Hopefully will help me keep the zombies off my server :)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Combining two ActiveRecord relationship created arrays</title>
   <link href="http://www.davidjrice.co.uk/2006/06/08/combining-two-activerecord-relationship-created-arrays.html" />
   <updated>2006-06-08T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/08/combining-two-activerecord-relationship-created-arrays</id>
   <content type="html">&lt;p&gt;As I discovered today it&amp;#8217;s best not to use this function with arrays created by the relationships defined in a model&amp;#8230; why ? I&amp;#8217;m not too sure of the specifics causing it, but here is the right and wrong way to combine two arrays of objects in ruby.&lt;/p&gt;

&lt;p&gt;Lets use the example that we have a Person and they can send and recieve SMS &lt;em&gt;(text messages)&lt;/em&gt; we define two finder methods for their sent and recieved messages. But if we want to display an inbox, it will have to combine them all and sort by date right?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Person &amp;lt; ActiveRecord::Base
    has_many :sent_messages, :class_name =&amp;gt; &amp;#39;Sms&amp;#39;, :foreign_key =&amp;gt; &amp;#39;sender_id&amp;#39;, :order =&amp;gt; &amp;#39;created_at DESC&amp;#39;
    has_many :recieved_messages, :class_name =&amp;gt; &amp;#39;Sms&amp;#39;, :foreign_key =&amp;gt; &amp;#39;recipient_id&amp;#39;, :order =&amp;gt; &amp;#39;created_at DESC&amp;#39;

  def messages
  # The right way
     @messages = self.sent_messages | self.recieved_messages
     @messages.sort do |a, b|
        a.created_at &amp;lt;=&amp;gt; b.created_at
     end
     @messages.reverse
  end

  def messages
  # The wrong way
    @messages = self.sent_messages
    @messages.concat(self.recieved_messages)
    @messages.sort do |a, b|
       a.created_at &amp;lt;=&amp;gt; b.created_at
    end
    @messages.reverse
  end

end &lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>Understatement of the year 2006</title>
   <link href="http://www.davidjrice.co.uk/2006/06/04/understatement-of-the-year-2006.html" />
   <updated>2006-06-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/04/understatement-of-the-year-2006</id>
   <content type="html">&lt;p&gt;I had my first day at &lt;a href='http://www.designbyfront.com/'&gt;Front&lt;/a&gt; last thursday, and I am finally happy to have a kick-ass, motivating and creative job. I have always held the studio in high regard, and have thought of it as the best in Northern Ireland, for their wonderful weaving of accessible, beautiful and standards friendly web applications&amp;#8230; so to say i&amp;#8217;m pleased to join the team, might possibly be &lt;strong&gt;understatement of the year 2006&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everyone at the studio has been really friendly and welcoming, and I can&amp;#8217;t say how much I&amp;#8217;m enjoying working with them. Unlike manys a first day, I was shoved head first into the fast lane and was coding by 10am. Even though I&amp;#8217;m in the deep end it&amp;#8217;s reassuring to have so many great people in close proximity.&lt;/p&gt;

&lt;p&gt;Everything has been so relaxedly efficient, it&amp;#8217;s a great atmosphere for working, and I can safely say that in two days I have learned more that is ultimately useful than the 9 months of my previous (boring, corporate) job&amp;#8230;. oh yeah apart from a great &lt;strong&gt;Design Principles&lt;/strong&gt; course put on by the &lt;em&gt;inspirational&lt;/em&gt; Tara Simpson of &lt;a href='http://www.instilsoft.com'&gt;InstilSoft&lt;/a&gt;. Anyone who&amp;#8217;s recommend reading list includes &lt;a href='http://www.amazon.com/gp/product/0201485672/qid=1149456840/sr=2-2/ref=pd_bbs_b_2_2/103-7910824-3728621?s=books&amp;amp;v=glance&amp;amp;n=283155'&gt;Martin Fowler&amp;#8217;s Refactoring&lt;/a&gt; automatically gets my admiration.&lt;/p&gt;

&lt;p&gt;Oh yeah, did I mention we&amp;#8217;re using &lt;a href='http://www.rubyonrails.com'&gt;Ruby on Rails&lt;/a&gt; and i&amp;#8217;m using my Mac :) So I&amp;#8217;ll definitely have some more interesting stuff to write about soon.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Back from the dead.</title>
   <link href="http://www.davidjrice.co.uk/2006/06/04/back-from-the-dead.html" />
   <updated>2006-06-04T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/04/back-from-the-dead</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been really busy lately so when typo started playing up last week i realised i didn&amp;#8217;t really have time to fix it. It would crash after about 10 minutes and some general weirdness was going on, I hadn&amp;#8217;t updated the version of typo for quite some time so i figured i should do that.&lt;/p&gt;

&lt;p&gt;It has been quite a conundrum in the past&amp;#8230; as wanting to stay up to date with versions of typo, but also wanting to keep my theme directory (so in the future I can make my own again). But that was all before I read &lt;a href='http://typogarden.com/articles/2006/04/25/update-your-typo-blog-with-capistrano'&gt;this post&lt;/a&gt; on the Typo Garden website (future host of a theme gallery for the Typo blogging engine), it descrives how to use capistrano to automate updating a typo powered blog.&lt;/p&gt;

&lt;p&gt;All the more reason for me to love capistrano.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Setting up SSH, SSH-Agent on mac OSX</title>
   <link href="http://www.davidjrice.co.uk/2006/06/01/setting-up-ssh-ssh-agent-on-mac-osx.html" />
   <updated>2006-06-01T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/06/01/setting-up-ssh-ssh-agent-on-mac-osx</id>
   <content type="html">&lt;p&gt;I was following &lt;a href='http://green.carisenda.com/archive/2006/04/ssh_keys_sshage.html'&gt;Stephen Stewart&amp;#8217;s tutorial&lt;/a&gt;, about pretty much the same thing, and there were a couple of mac specific items that turned up which I wanted to note down.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Generate a new DSA key on your &lt;em&gt;main&lt;/em&gt; development machine&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Make sure you generate it with a passphrase &lt;em&gt;(enter it on the first prompt)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Choose a nice long passphrase&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Choose a name &lt;em&gt;(or not if this is your first run, id_dsa is the default but you will want to do this if your generating another key)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd ~&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -t dsa&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Copy the key to the server you wish to access * The colon and period at the end are important&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;   `scp.ssh/id_dsa.pub USERNAME@DOMAIN:.`&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Login with secure shell to the server&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  `sshUSERNAME@DOMAIN`&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Add the public key to the list of authorized keys..&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; `cat id_dsa.pub &amp;gt;&amp;gt; .ssh/authorized_keys`
 `mv id_dsa.pub .ssh`
 `exit`&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Download and install &lt;a href='http://www.sshkeychain.org/'&gt;SSHKeychain&lt;/a&gt;, It&amp;#8217;s a nice utility that handles the SSH-Agent part of things &lt;em&gt;(which i&amp;#8217;ll pretend to know something about)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Launch &lt;em&gt;SSHKeychain&lt;/em&gt;, and in the menu bar icon select &lt;strong&gt;Agent &amp;gt; Add all keys&lt;/strong&gt; then choose the keys from the &lt;code&gt;.ssh&lt;/code&gt; dir (it should go there automatically) You should be prompted to enter your passphrase, and off we go!&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;You then have the option of adding the passphrase to your system keychain, which is good as it&amp;#8217;ll save us remembering it along with all our other passwords&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you&amp;#8217;re doing this, remember to have a nice long password for your login keychain&amp;#8230;. otherwise, really what was the point of all this :)&lt;/li&gt;

&lt;li&gt;Make sure it&amp;#8217;s different from your account, and default system passwords too.&lt;/li&gt;

&lt;li&gt;If your also using filevault, then it&amp;#8217;s pretty certain your data is going to be secure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>Sonic Arts Research Centre</title>
   <link href="http://www.davidjrice.co.uk/2006/05/26/sonic-arts-research-centre.html" />
   <updated>2006-05-26T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/05/26/sonic-arts-research-centre</id>
   <content type="html">&lt;p&gt;The &lt;a href='http://www.sarc.qub.ac.uk/'&gt;Sonic Arts Research Centre&lt;/a&gt; at Queen&amp;#8217;s have a pretty interesting article on the Apple / Pro site, &lt;a href='http://www.apple.com/pro/music/sonicarts/'&gt;&amp;#8220;Valhalla for the human ear&amp;#8221;&lt;/a&gt;. They talk about how great the sound setup is and all they&amp;#8217;re awesome mac equipment, but I especially love this quote from the director of research &lt;em&gt;Pedro Rebelo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;These days, he says, I often use a banjo as an input device for my PowerBook.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Don't Panic!</title>
   <link href="http://www.davidjrice.co.uk/2006/05/26/don-t-panic.html" />
   <updated>2006-05-26T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/05/26/don-t-panic</id>
   <content type="html">&lt;p&gt;After a good couple of weeks doing the self employed thing, the most important lesson I have learned is backup your files regularly, backup your files regularly&amp;#8230; backup your&amp;#8230; i think you get the point.&lt;/p&gt;

&lt;p&gt;Apple computers have been getting really solid, and a testament to this the only trouble i&amp;#8217;ve had in recent years has been hard drive failures&amp;#8230; and they only seem to happen at just the right times (usually around project deadlines).&lt;/p&gt;

&lt;h2 id='what_have_i_learned__dont_panic'&gt;What have I learned? - Don&amp;#8217;t Panic!&lt;/h2&gt;

&lt;p&gt;Okay well, obviosuly if you lose everything without a backup you should start to panic as you&amp;#8217;re kinda screwed (unless you want to pay extortionate prices to data recovery guys)! What i&amp;#8217;m suggesting is a method so when you lose a drive you won&amp;#8217;t even care!&lt;/p&gt;

&lt;h3 id='bootable_backups'&gt;Bootable backups&lt;/h3&gt;

&lt;p&gt;Previously i&amp;#8217;d used &lt;a href='http://www.econtechnologies.com/site/Pages/ChronoSync/chrono_overview.html'&gt;Chronosync&lt;/a&gt; for all of my backup needs, but recently i moved to using &lt;a href='http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html'&gt;SuperDuper!&lt;/a&gt; i find it a lot smoother to use, and also as it came out trumps in a &lt;a href='http://blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful/'&gt;recent comparision of all Mac backup solutions&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id='raid_redundancy'&gt;Raid redundancy&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m currently using a plain ol&amp;#8217; external hard drive to backup to. Although just recently i purchased a firewire 800 / sata / USB 2.0 five bay (raid levels 5/3/1/0) hard drive enclosure from &lt;a href='http://www.nitroav.com/product/400/'&gt;Nitro AV&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why spend the money on something like this? well if i&amp;#8217;m backing up to a raid 5 disk I don&amp;#8217;t need to worry about data loss. If a drive fails I can simply swap in another one and it will rebuild all the lost data from information on the other drives&amp;#8230;. awesome&lt;/p&gt;

&lt;p&gt;I haven&amp;#8217;t got it set up yet but i&amp;#8217;ll be sure to give it a mention when everything is running smoothly :)&lt;/p&gt;

&lt;h3 id='automated_work_environment_setup'&gt;Automated work environment setup&lt;/h3&gt;

&lt;p&gt;It&amp;#8217;s often difficult to get a working environment setup, there are usually a lot of different application installers / binaries etc. to install before we can think about developing applications again. If we&amp;#8217;re using our bootable backup that&amp;#8217;s great&amp;#8230; but what about when we want to re-install the system.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s an &lt;a href='http://nubyonrails.com/articles/2005/12/29/an-even-better-way-to-build-ruby-rails-lighttpd-and-mysql-on-tiger'&gt;excellent shell script&lt;/a&gt; created by Geoffrey Grosenbach that will download, build and install everything you need to get ruby on rails running nicely on your Mac (be it intel or PPC). I&amp;#8217;ve also been playing with the &lt;a href='http://lfthoughts.blogspot.com/2006/03/mac-os-x-rails-imagemagick-without.html'&gt;instructions for building imagemagick for osx intel&lt;/a&gt; by Will Groppe. Putting these together would main a fully atuomated rails environment setup.&lt;/p&gt;

&lt;p&gt;There are other things we can do too&amp;#8230; like setting up custom osx installer packages containing all the apps we regularly use, but i think that&amp;#8217;s something for another day.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Version controlling your shiny new ruby on rails application</title>
   <link href="http://www.davidjrice.co.uk/2006/05/17/version-controlling-your-shiny-new-ruby-on-rails-application.html" />
   <updated>2006-05-17T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/05/17/version-controlling-your-shiny-new-ruby-on-rails-application</id>
   <content type="html">&lt;p&gt;I posted this article some time ago but thought i&amp;#8217;d give a little update as some things have changed since Ruby on Rails version 1.1&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Okay first of all lets assume we&amp;#8217;ve created a new project &lt;code&gt;rails example&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Now &lt;code&gt;cd svnexample&lt;/code&gt; and we&amp;#8217;ll import the app into our repository &lt;code&gt;svn import . http://domain.com/svn/example/trunk&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;mv example example_old&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;svn co http://domain.com/svn/example example&lt;/code&gt; We now have a working copy of our application&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The following step will be the same for all of your rails 1.1 &amp;gt; ? applications, so it&amp;#8217;s a good idea to extract it into a handy little shellscript you can run time and time again&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; svn remove log/*
 svn commit -m &amp;#39;removing all log files from subversion&amp;#39;
 svn propset svn:ignore &amp;quot;*.log&amp;quot; log/
 svn update log/
 svn commit -m &amp;#39;Ignoring all files in /log/ ending in .log&amp;#39;
 svn remove tmp/*
 svn commit -m &amp;#39;removing all cache sockets and sessions from tmp directory&amp;#39; 
 svn propset svn:ignore &amp;quot;*&amp;quot; tmp/
 svn update tmp/
 svn commit -m &amp;quot;Ignoring all files created in tmp directory&amp;quot;
 
 # if you&amp;#39;re doing a collaborative application you&amp;#39;ll want to ignore 
 # database.yml too so do these steps

 svn move config/database.yml config/database.example
 svn commit -m &amp;#39;Moving database.yml to database.example&amp;#39;
 svn propset svn:ignore &amp;quot;database.yml&amp;quot; config/
 svn update config/
 svn commit -m &amp;#39;Ignoring database.yml&amp;#39;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;that will clear out all of the cruft we don&amp;#8217;t want to have to transfer every time we do a commit, especially if your using lighttpd locally as subversion really hates the &lt;strong&gt;fcgi-socket-0&lt;/strong&gt; files.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that&amp;#8217;s about it, if you want to streamline things a bit more make an alias for your shellscript and run it every time you first checkout your new rails app. If you want more information there&amp;#8217;s a lot of stuff over at the &lt;a href='http://wiki.rubyonrails.com/rails/pages/HowtoUseRailsWithSubversion'&gt;ruby on rails wiki&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Shoveling Rails applications with capistrano</title>
   <link href="http://www.davidjrice.co.uk/2006/05/16/shoveling-rails-applications-with-capistrano.html" />
   <updated>2006-05-16T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/05/16/shoveling-rails-applications-with-capistrano</id>
   <content type="html">&lt;p&gt;Capistrano (I much preferred the name SwitchTower), is an amazing tool that has been hyped by a lot of people. Everytime I saw a little bit of hype, I just thought &amp;#8220;Man i&amp;#8217;ve gotta give this a try!&amp;#8221; but everytime, procrastination ruled as I never &lt;strong&gt;made&lt;/strong&gt; it part of my work flow&amp;#8230;.&lt;/p&gt;

&lt;p&gt;Conscientious Ruby on Rails developer &lt;a href='http://nubyonrails.com'&gt;Geoffrey Grosenbach&lt;/a&gt;, put together an awesome blueprint for a capistrano deployment task called &lt;a href='http://nubyonrails.com/pages/shovel'&gt;Shovel&lt;/a&gt;. It works for &lt;a href='http://www.textdrive.com/'&gt;Textdrive&lt;/a&gt; with just a tiny bit of configuration, so if &lt;strong&gt;you&lt;/strong&gt; have also been putting off learning capistrano I suggest checking it out.&lt;/p&gt;

&lt;p&gt;If you want to know why i like it so much. Imagine getting that &lt;a href='http://en.wikipedia.org/wiki/Big_red_button'&gt;Big Red Button&lt;/a&gt; feeling every day&amp;#8230; albeit without the nuclear weapons, but it still feels great to have such a &lt;strong&gt;repetitive&lt;/strong&gt;, yet &lt;strong&gt;important&lt;/strong&gt; task done by capistrano&amp;#8230; my deployment minion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://manuals.rubyonrails.com/read/chapter/97#page257'&gt;Capistrano Manual&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://wiki.rubyonrails.org/rails/pages/Capistrano'&gt;Capistrono on the Rails Wiki&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://nubyonrails.com/pages/shovel'&gt;Shovel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Resetting passwords with acts_as_authenticated</title>
   <link href="http://www.davidjrice.co.uk/2006/05/14/resetting-passwords-with-acts_as_authenticated.html" />
   <updated>2006-05-14T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/05/14/resetting-passwords-with-acts_as_authenticated</id>
   <content type="html">&lt;p&gt;acts_as_authenticated is a great plugin for ruby on rails that handles a lot of the common user account functions you might find yourself developing, time and time again. The great thing is that a couple of commands and everything is generated in your app so it&amp;#8217;s easy to modify should you need.&lt;/p&gt;

&lt;p&gt;Some recent work i&amp;#8217;ve been doing needed a forgotten passwords system, when I went over to the acts_as_authenticated wiki to find the &lt;a href='http://technoweenie.stikipad.com/plugins/show/Password+Resetting'&gt;Password Resetting&lt;/a&gt; page blank I knew it might be nice to share things when i&amp;#8217;d finished.&lt;/p&gt;

&lt;p&gt;First of all, i&amp;#8217;m assuming that you&amp;#8217;ve actually setup acts_as_authenticated and the user activation / mailer extras&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated'&gt;acts_as_authenticated&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://technoweenie.stikipad.com/plugins/show/User+Authentication'&gt;user activation&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://technoweenie.stikipad.com/plugins/show/Mailer+Setup'&gt;mailer setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It&amp;#8217;s a little bit of work to get everything setup, but following on from the practices displayed in the other two enhancements, things should be pretty familiar.&lt;/p&gt;

&lt;h2 id='migration'&gt;Migration&lt;/h2&gt;

&lt;p&gt;First we&amp;#8217;ll generate a migration to add the password reset code field, that we&amp;#8217;ll use to ensure that our user has indeed requested to change their password&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class AddPasswordResetCode &amp;lt; ActiveRecord::Migration
  def self.up
    add_column &amp;quot;users&amp;quot;, &amp;quot;password_reset_code&amp;quot;, :string, :limit =&amp;gt; 40
  end

  def self.down
    remove_column &amp;quot;users&amp;quot;, &amp;quot;password_reset_code&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='model__userrb_'&gt;Model ( user.rb )&lt;/h2&gt;

&lt;p&gt;Okay, lets set up a couple more methods in our User model&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def forgot_password
  @forgotten_password = true
  self.make_password_reset_code
end

def reset_password
  @reset_password = true
  update_attributes(:password_reset_code =&amp;gt; nil)
end

def recently_reset_password?
  @reset_password
end

def recently_forgot_password?
  @forgotten_password
end

protected

def make_password_reset_code
  self.password_reset_code = Digest::SHA1.hexdigest( Time.now.to_s.split(&amp;#39;//&amp;#39;).sort_by {rand}.join )
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='controller__account_controllerrb_'&gt;Controller ( account_controller.rb )&lt;/h2&gt;

&lt;p&gt;Now the two methods for requesting to change the password, and then reseting it to the users choice&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def forgot_password
  return unless request.post?
  @user = User.find_by_email(params[:email])
  @user.forgot_password
  if @user and @user.save
    redirect_back_or_default(:controller =&amp;gt; &amp;#39;/account&amp;#39;, :action =&amp;gt; &amp;#39;index&amp;#39;)
    flash[:notice] = &amp;quot;A Password reset link has been sent to your email address&amp;quot;
  else
    flash[:notice] = &amp;quot;Could not find a user with that email address&amp;quot;
  end
end

def reset_password
  @user = User.find_by_password_reset_code(params[:id])
  return if @user unless params[:password]
    if (params[:password] == params[:password_confirmation])
      current_user.password_confirmation = params[:password_confirmation]
      current_user.password = params[:password]
      @user.reset_password
      flash[:notice] = current_user.save ? &amp;quot;Password reset&amp;quot; : &amp;quot;Password not reset&amp;quot; 
    else
      flash[:notice] = &amp;quot;Password mismatch&amp;quot; 
    end  
    redirect_back_or_default(:controller =&amp;gt; &amp;#39;/account&amp;#39;, :action =&amp;gt; &amp;#39;index&amp;#39;) 
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='views'&gt;Views&lt;/h2&gt;

&lt;p&gt;Add these two new views to views/accounts&lt;/p&gt;

&lt;h3 id='reset_passwordrhtml'&gt;reset_password.rhtml&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= start_form_tag %&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;Password&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;%= password_field_tag &amp;#39;password&amp;#39; %&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;password_confirmation&amp;quot;&amp;gt;Confirm Password&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;%= password_field_tag &amp;#39;password_confirmation&amp;#39; %&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;%= submit_tag &amp;#39;Reset password&amp;#39; %&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='forgot_passwordrhtml'&gt;forgot_password.rhtml&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= start_form_tag %&amp;gt; 
&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;Email Address&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;%= text_field_tag &amp;#39;email&amp;#39; %&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;%= submit_tag &amp;#39;Forgot password&amp;#39; %&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;%= end_form_tag %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='user_notifierrb'&gt;user_notifier.rb&lt;/h2&gt;

&lt;p&gt;Add these two new methods&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def forgot_password(user)
  setup_email(user)
  @subject    += &amp;#39;Request to change your password&amp;#39;
  @body[:url]  = &amp;quot;http://localhost:3000/account/reset_password/#{user.password_reset_code}&amp;quot;
end

def reset_password(user)
  setup_email(user)
  @subject    += &amp;#39;Your password has been reset&amp;#39;
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='user_observer'&gt;user_observer&lt;/h2&gt;

&lt;p&gt;Add two new lines to the after_save function&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def after_save(user)
  ...
  UserNotifier.deliver_forgot_password(user) if user.recently_forgot_password?
  UserNotifier.deliver_reset_password(user) if user.recently_reset_password?
end&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id='mailer_templates'&gt;Mailer Templates&lt;/h2&gt;

&lt;p&gt;Add these two new templates to views/user_notifier&lt;/p&gt;

&lt;h3 id='forgot-password-mailer'&gt;forgot_password.rhtml&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= @user.login %&amp;gt;, follow the link to reset your password

&amp;lt;%= @url %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id='reset-password-mailer'&gt;reset_password.rhtml&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= @user.login %&amp;gt;, Your password has been reset&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails on Bluehost</title>
   <link href="http://www.davidjrice.co.uk/2006/04/23/ruby-on-rails-on-bluehost.html" />
   <updated>2006-04-23T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/04/23/ruby-on-rails-on-bluehost</id>
   <content type="html">&lt;p&gt;A project I&amp;#8217;ve been working on recently for a client needed a ruby on rails app deployed on their server&amp;#8230; which just so happened to be &lt;a href='http://www.bluehost.com'&gt;Bluehost&lt;/a&gt;, who recently announced support for ruby on rails!&lt;/p&gt;

&lt;p&gt;After a lot of tech support calls, i finally extracted enough information to figure out how to deploy the app! It&amp;#8217;s a pity that none of the &lt;strong&gt;frontline&lt;/strong&gt; support guys know much about RoR yet&amp;#8230; which isn&amp;#8217;t that cool seeing as it&amp;#8217;s mentioned on their homepage!&lt;/p&gt;

&lt;p&gt;Anyway, hopefully these few steps will help you avoid some annoying moments, where you have no idea why things aren&amp;#8217;t working!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Do your database stuff&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Upload your application to &lt;code&gt;/home/username/appname&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd public&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;chmod 755 dispatch.*&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;chown 555:username dispatch.*&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Set your shebang! line to &lt;code&gt;#!/usr/bin/ruby&lt;/code&gt; in the dispatch files&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;ln -s /home/username/public_html/appname /home/username/appname/public&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Now we should be able to access the app from the subdirectory &lt;code&gt;/appname&lt;/code&gt; hopefully it&amp;#8217;ll work, but slowly! that&amp;#8217;s cos it&amp;#8217;s being served by regular cgi&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Lets enable fastcgi, go back to your rails apps public directory and edit the &lt;code&gt;.htaccess&lt;/code&gt; file and uncomment &lt;code&gt;RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]&lt;/code&gt; and comment out the cgi rule&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Okay we still need to do stuff to RewriteBase for relative urls to work properly in the rails app&amp;#8230; but the way bluehost is setup that&amp;#8217;s not going to work for us so instead, a little hack!&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Go into your Cpanel account and create a new subdomain with the same name as your appname. This should try and create a new folder in public_html, but because our symbolic link is there, it won&amp;#8217;t. Try accessing your newly created subdomain and everything should be working fine!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>
 
 <entry>
   <title>Andorra post mortem Anyone want to buy a powerbook</title>
   <link href="http://www.davidjrice.co.uk/2006/04/03/andorra-post-mortem-anyone-want-to-buy-a-powerbook.html" />
   <updated>2006-04-03T00:00:00+01:00</updated>
   <id>http://www.davidjrice.co.uk/2006/04/03/andorra-post-mortem-anyone-want-to-buy-a-powerbook</id>
   <content type="html">&lt;p&gt;So the snowboarding was great! I got some pretty good &lt;a href='http://www.flickr.com/photos/davidjrice/sets/72057594095397134/'&gt;photo&amp;#8217;s&lt;/a&gt;. Even though it&amp;#8217;s been a couple of years since the last time, I think it&amp;#8217;s the kind of thing that stays with you. Andorra was excellent, never before have I seen such great facilities! However it does come with the fact that Andorra is a resort attempting to throw off the shackles of being a traditional stag night venue&amp;#8230; which leads to it being known by the nickname &lt;strong&gt;Mandorra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arriving back from the snowy white slopes to the world of beize is quite a disheartening experience&amp;#8230; however, not so when your first day back in work is somewhat tinted by the silver of a brand spanking new MacBook.&lt;/p&gt;

&lt;p&gt;Which leads me to point b), I now have a perfectly great powerbook that has effectively become an overly expenseive external hard drive. It will be two years old this summer, and has been taken care of really well. Let me know if you&amp;#8217;re interested, guide price is around &lt;strong&gt;£800 - £1000.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15&amp;#8221; Powerbook G4 1.5 Ghz&lt;/li&gt;

&lt;li&gt;1 GB DDR SDRAM (2 x 512)&lt;/li&gt;

&lt;li&gt;80 GB Ultra ATA Hard Drive&lt;/li&gt;

&lt;li&gt;128Mb VRAM&lt;/li&gt;

&lt;li&gt;Bluetooth / Wi Fii&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Chuck Norris and Web 2 0</title>
   <link href="http://www.davidjrice.co.uk/2006/02/16/chuck-norris-and-web-2-0.html" />
   <updated>2006-02-16T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/02/16/chuck-norris-and-web-2-0</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve always been a fan of finding out new and interesting facts about &lt;a href='http://www.4q.cc/index.php'&gt;Chuck Norris, Vin Diesel or Mr. T&lt;/a&gt;. However, I recently found out that Chuck has been &lt;a href='http://supr.c.ilio.us/blog/2006/01/22/chuck-norris-20/'&gt;&lt;strong&gt;Roundhouse&lt;/strong&gt; kicking Web 2.0&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chuck Norris does not use a web server. His beard serves HTTP.&lt;/li&gt;

&lt;li&gt;Chuck Norris has an open API. His right leg, coming straight at your face.&lt;/li&gt;

&lt;li&gt;Chuck Norris doesnâ€™t search Google. He just stares at the screen until Google pops the website he needs.&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Belfast gone postal</title>
   <link href="http://www.davidjrice.co.uk/2006/02/16/belfast-gone-postal.html" />
   <updated>2006-02-16T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/02/16/belfast-gone-postal</id>
   <content type="html">&lt;p&gt;With most of the postal workers in Belfast having &lt;strong&gt;gone postal&lt;/strong&gt;, though thankfully not in the &lt;a href='http://en.wikipedia.org/wiki/Going_postal'&gt;traditional&lt;/a&gt; sense&amp;#8230; a lot of people stand to lose out in a number of ways due to late mail. Apparently, you can claim for every item of stamped or metered mail &lt;em&gt;( whatever they are)&lt;/em&gt; that is late. I can just imagine all these people claiming, to be told their cheque is &lt;em&gt;in the post&lt;/em&gt;&amp;#8230; haha, brilliant.&lt;/p&gt;

&lt;p&gt;Heading to &lt;strong&gt;Andorra&lt;/strong&gt; for some snowboarding in just over a week, and i&amp;#8217;m &lt;strong&gt;still&lt;/strong&gt; waiting on my European Health Insurance Card, and some snowboarding gear I bought off eBay weeks ago. &lt;a href='http://www.belfasttelegraph.co.uk/news/story.jsp?story=679327'&gt;Somethings got to give&lt;/a&gt;, well that or I have to go and re-buy everything at high-street prices &lt;strong&gt;ouch!&lt;/strong&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>It will be mine Oh yes It will be mine</title>
   <link href="http://www.davidjrice.co.uk/2006/01/24/it-will-be-mine-oh-yes-it-will-be-mine.html" />
   <updated>2006-01-24T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/01/24/it-will-be-mine-oh-yes-it-will-be-mine</id>
   <content type="html">&lt;p&gt;As Wayne Campbell once &lt;a href='http://www.imdb.com/title/tt0105793/quotes'&gt;said&lt;/a&gt;, so too do I hold an almost lusting for an inanimate device. Yes you guessed it, it&amp;#8217;s a &lt;a href='http://www.apple.com/uk/macbookpro/'&gt;MacBook&lt;/a&gt;. February, and my shipping date can not come soon enough.&lt;/p&gt;

&lt;p&gt;&lt;img alt='Macbook' src='/images/macbook.png' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>First post, and first new year resolution complete</title>
   <link href="http://www.davidjrice.co.uk/2006/01/23/first-post-and-first-new-year-resolution-complete.html" />
   <updated>2006-01-23T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/01/23/first-post-and-first-new-year-resolution-complete</id>
   <content type="html">&lt;p&gt;The journey to this very first post has been a trial of positive thought over procrastination. It was a new years resolution of mine to finally do something constructive with this domain, so hopefully I can keep on the positivity express and actually put up some worthwhile content. Stay tuned!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My procrastination story&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There have been more design ideas and code re-writes than I would ever have conceived, but finally I came full circle and decided to go with &lt;a href='http://typo.leetsoft.com'&gt;typo&lt;/a&gt; for my blogging engine of choice. My first idea, was to use typo but this was before I knew very much about rails at all so debugging any problems wasn&amp;#8217;t to great. So then i &lt;strong&gt;did&lt;/strong&gt; decide to roll my own blog, and yes it was a bit sparse on features and I never really had the time to improve it much, any thoughts I had on things to write about usually spurred me into developing more features (thus never writing anything doh!). Now, being a lot more familiar with rails I look at typo and think. Well I &lt;strong&gt;could&lt;/strong&gt; improve my own blog to be as good at this, but i&amp;#8217;d much rather spend my time doing more important things.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>33 days and counting</title>
   <link href="http://www.davidjrice.co.uk/2006/01/23/33-days-and-counting.html" />
   <updated>2006-01-23T00:00:00+00:00</updated>
   <id>http://www.davidjrice.co.uk/2006/01/23/33-days-and-counting</id>
   <content type="html">&lt;p&gt;After a &lt;strong&gt;lot&lt;/strong&gt; of planning, we&amp;#8217;ve finally got a group together to hit the slopes this year&amp;#8230; rockin! Not to sound too &lt;em&gt;cliche&lt;/em&gt; but I am soo totally stoked to be going. It&amp;#8217;s been about 2 years since my last expedition, here&amp;#8217;s hoping that the tricks flow right and fast from memory. &lt;a href='http://www.grandvalira.com/'&gt;Grand Valira&lt;/a&gt; is the spot we&amp;#8217;re heading to, expect some nice shots of the scenery, with snowboarders getting in the way some time when I get back. The only thing that I was worried about was the whole fitness thing; well &lt;a href='http://www.stlyrics.com/lyrics/teamamericaworldpolice/montage.htm'&gt;even rocky had a montage&lt;/a&gt;, so I guess i&amp;#8217;m entitled to one too.&lt;/p&gt;</content>
 </entry>
 
 
</feed>

