<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brightbox Blog &#187; ruby on rails</title>
	<atom:link href="http://blog.brightbox.co.uk/tag/ruby-on-rails/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.brightbox.co.uk</link>
	<description></description>
	<lastBuildDate>Fri, 02 Dec 2011 12:56:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Wanted: Senior Ruby Software Engineer</title>
		<link>http://blog.brightbox.co.uk/posts/wanted-senior-ruby-software-engineer</link>
		<comments>http://blog.brightbox.co.uk/posts/wanted-senior-ruby-software-engineer#comments</comments>
		<pubDate>Fri, 18 Mar 2011 15:16:28 +0000</pubDate>
		<dc:creator>John Leach</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[brightbox cloud]]></category>
		<category><![CDATA[ruby jobs]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[software engineer]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=1849</guid>
		<description><![CDATA[Job description: In the three and a half years since Brightbox started, we’ve built a solid reputation for our “Serious Rails Hosting” platform. We’ve spent the last twelve months building Brightbox Cloud our new cloud Infrastructure-as-a-Service which is already making big waves. We’re now looking for an experienced software engineer to join our small but [...]]]></description>
			<content:encoded><![CDATA[<h3>Job description:</h3>
<p>In the three and a half years since Brightbox started, we’ve built a solid reputation for our “Serious Rails Hosting” platform. We’ve spent the last twelve months building <a href="http://beta.brightbox.com">Brightbox Cloud</a> our new cloud Infrastructure-as-a-Service which is already making big waves. We’re now looking for an experienced software engineer to join our small but highly productive development team. This is an awesome opportunity to use your skills and experience to help shape our future products and direction in this exciting and fast growing industry.</p>
<h4>Main responsibilities:</h4>
<ul>
<li>Lead development of our distributed cloud management and automation systems</li>
<li>Break down complex projects into clear tasks and specs</li>
<li>Proactively find ways of improving our services, systems and code</li>
<li>Efficiently manage your own workload as well as that of others</li>
<li>Extract code to be released as free software projects</li>
</ul>
<h3>The ideal candidate:</h3>
<p>You have an insatiable desire to understand things, to break them apart and to fix them. You are continuously looking for ways to improve things. You are enthusiastic about some technologies and vocalise your reasoned dislike for others. You have strong opinions and stand by them when it really matters, but are willing to compromise when it doesn’t. You are able to communicate your ideas succinctly with eloquence and clarity. You have probably contributed to some free software projects, and perhaps started your own. You don’t take yourself too seriously and are comfortable with others reviewing your work. You love what you do.</p>
<h4>Skills &amp; Experience:</h4>
<ul>
<li>Several years experience of coding in Ruby</li>
<li>Experience with Ruby web frameworks, such as Rails, Sinatra</li>
<li>Experience of testing frameworks, such as rspec</li>
<li>Experience of deployment using tools, such as Capistrano</li>
<li>In-depth knowledge of distributed cloud infrastructure concepts</li>
<li>Experience programming asynchronous systems</li>
<li>Experience consuming and creating APIs</li>
<li>Experience of working in a fast-paced, agile environment</li>
<li>Ability to empathise with users</li>
</ul>
<h3>Our team:</h3>
<p>We’re Ruby developers and system engineers. We’re obsessive about great user experience and clear documentation.  We’re passionate about high availability, performance and consistency, though not all at once. We’ve coded seriously in Ruby, C, Delphi, Ada, C++, Python, Amiga AMOS, PHP, Java, Objective-C, Pascal, Eiffel, Basic, Perl, Informix 4GL, Javascript and Bash. We use Ubuntu, Centos and OS X. We take our work seriously but we have a lot of fun.</p>
<p>Like our systems, our teams are geographically distributed, communicating in real-time throughout the working day using our private Jabber conference or phone calls. We manage our work with Redmine, usually organising chunks of work into weekly sprints. We’re a lean organisation &#8211; you’ll have direct access to leadership as well as other teams. Our development, engineering and operations teams all work closely together which shortens the feedback loop and means we get things done better.</p>
<h3>Location:</h3>
<p>Remote, but ideally working within 2 hours of UTC.</p>
<h3>Salary:</h3>
<p>circa £55k p.a. (depending on experience).</p>
<h3>Closing date:</h3>
<p>Friday 22nd April 2011.</p>
<h3>How to apply:</h3>
<p>Send a hello email and a CV (PDF or plain text) to <a href="mailto:&#x6a;&#x6f;&#x62;&#x73;&#x40;&#x62;&#x72;&#x69;&#x67;&#x68;&#x74;&#x62;&#x6f;&#x78;&#x2e;&#x63;o.uk">&#x6a;&#x6f;&#x62;&#x73;&#x40;&#x62;&#x72;&#x69;&#x67;&#x68;&#x74;&#x62;&#x6f;&#x78;&#x2e;&#x63;o.uk</a>. All correspondence from recruitment agents must be in Esperanto and to our special recruitment email address: <a href="mailto:root@localhost">root@localhost</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/wanted-senior-ruby-software-engineer/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Timezones on your Brightbox</title>
		<link>http://blog.brightbox.co.uk/posts/timezones-on-your-brightbox</link>
		<comments>http://blog.brightbox.co.uk/posts/timezones-on-your-brightbox#comments</comments>
		<pubDate>Tue, 06 Apr 2010 16:37:27 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[brightbox]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[modrails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=998</guid>
		<description><![CDATA[You may have thought the time is wrong on your server. Well, it isn&#8217;t really, it is just that we prefer to set the default time on Brightboxes to Coordinated Universal Time (UTC). This is generally considered to be best practice where ever a server is geographically located, however, it may  cause a problem if [...]]]></description>
			<content:encoded><![CDATA[<p>You may have thought the time is wrong on your server. Well, it isn&#8217;t  really, it is just that we prefer to set the default time on Brightboxes  to Coordinated Universal Time (UTC).</p>
<p>This is generally considered to be best practice where ever a server is geographically located, however, it may  cause a problem if you are hosting a  geographically specific web application.</p>
<p>If your web application requires a different time-zone such as CET, BST or PST, or Daylight Saving Time is giving you a headache,  take a look at our <a title="Brigthbox timezone wiki page" href="http://wiki.brightbox.co.uk/docs:time_on_your_brightbox" target="_self">Wiki page</a> for a timely introduction to the subject of time-zones on Brightboxes.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/timezones-on-your-brightbox/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brightbox sponsor the Scottish Ruby Conference 2010</title>
		<link>http://blog.brightbox.co.uk/posts/brightbox-sponsor-the-scottish-ruby-conference-2010</link>
		<comments>http://blog.brightbox.co.uk/posts/brightbox-sponsor-the-scottish-ruby-conference-2010#comments</comments>
		<pubDate>Tue, 23 Mar 2010 08:30:22 +0000</pubDate>
		<dc:creator>Louisa Parry</dc:creator>
				<category><![CDATA[events]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[John Leach]]></category>
		<category><![CDATA[ruby conference]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Scottish Ruby Conference]]></category>
		<category><![CDATA[SRC2010]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=987</guid>
		<description><![CDATA[After having such a good time at last year&#8217;s event, Team Brightbox is heading to Edinburgh again later this week for the Scottish Ruby Conference. Again, we&#8217;re sponsoring the event and have provided hosting for the website. Our technical director John Leach is also speaking at the conference &#8211; his talk &#8220;UNIX: Rediscovering the wheel&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="right content_image size-full wp-image-988" title="Scottish Ruby Conference" src="http://blog.brightbox.co.uk/wp-content/uploads/2010/03/src-240.jpg" alt="" width="240" height="133" />After having such a good time at <a href="http://blog.brightbox.co.uk/posts/brightbox-sponsor-scotland-on-rails-2009">last year&#8217;s event</a>, Team Brightbox is heading to Edinburgh again later this week for the <a href="http://scottishrubyconference.com/">Scottish Ruby Conference</a>.</p>
<p>Again, we&#8217;re sponsoring the event and have <a href="http://scottishrubyconference.com/posts/25">provided hosting for the website</a>.  Our technical director John Leach is also speaking at the conference &#8211; his talk &#8220;<a href="http://scottishrubyconference.com/sessions#proposal_48">UNIX: Rediscovering the wheel</a>&#8221; will take place in the Great Hall on <a href="http://scottishrubyconference.com/programme">Friday afternoon</a>.</p>
<p>John, Jeremy &amp; Caius will all be attending the conference so make sure you say hi &#8211; and grab one of our always popular t-shirts too!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/brightbox-sponsor-the-scottish-ruby-conference-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paul joins Team Brightbox!</title>
		<link>http://blog.brightbox.co.uk/posts/paul-joins-team-brightbox</link>
		<comments>http://blog.brightbox.co.uk/posts/paul-joins-team-brightbox#comments</comments>
		<pubDate>Mon, 07 Dec 2009 14:18:45 +0000</pubDate>
		<dc:creator>Louisa Parry</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Paul Thornthwaite]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[staff]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=846</guid>
		<description><![CDATA[We welcomed our latest addition to the Brightbox team a fortnight ago &#8211; Paul Thornthwaite. Experienced programmer Paul was a beta tester for Brightbox back in our very early days and has now come on board as our new senior developer. He&#8217;ll be joining Baz and Caius working on our customer-facing control panel and our [...]]]></description>
			<content:encoded><![CDATA[<p><img class="left content_image size-full wp-image-850" title="paul" src="http://blog.brightbox.co.uk/wp-content/uploads/2009/12/paul.jpg" alt="paul" width="180" height="220" />We welcomed our latest addition to the Brightbox team a fortnight ago &#8211; Paul Thornthwaite.</p>
<p>Experienced programmer Paul was a beta tester for Brightbox back in our very early days and has now come on board as our new senior developer.  He&#8217;ll be joining Baz and Caius working on our customer-facing control panel and our behind-the-scenes systems, and he&#8217;ll also take a lead in project managing all the development side of things.</p>
<p>Welcome to the team, Paul!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/paul-joins-team-brightbox/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Queues and Callbacks</title>
		<link>http://blog.brightbox.co.uk/posts/queues-and-callbacks</link>
		<comments>http://blog.brightbox.co.uk/posts/queues-and-callbacks#comments</comments>
		<pubDate>Tue, 03 Nov 2009 09:00:49 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[AMQP]]></category>
		<category><![CDATA[bigwig]]></category>
		<category><![CDATA[bunny]]></category>
		<category><![CDATA[RabbitMQ]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[warren]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=755</guid>
		<description><![CDATA[A major part of our work behind the scenes is about improving our internal processes and, whenever possible, automating tasks. To this end we have a number of systems that need to communicate with each other. The Control Panel that you may be familiar with uses Delayed Job. This is a Rails-specific gem that uses [...]]]></description>
			<content:encoded><![CDATA[<p>A major part of our work behind the scenes is about improving our internal processes and, whenever possible, automating tasks.  To this end we have a number of systems that need to communicate with each other.</p>
<p>The Control Panel that you may be familiar with uses <a href="http://github.com/tobi/delayed_job">Delayed Job</a>.  This is a Rails-specific gem that uses the database as a queue, with a nicely packaged worker process that handles messages as they arrive.  Because the Control Panel only ever talks to Rails from Rails, this worked extremely well.</p>
<p>However, our other systems were not homogenous &#8211; there are a number of different interfaces that needed to be instructed at various times and across various machines, and Delayed Job didn&#8217;t really fit the bill.  In particular, there were some tasks that could only happen on certain servers &#8211; while Delayed Job let us have multiple worker processes on different boxes, it essentially managed a single queue, so it could not differentiate between messages for one worker and messages for another.<br />
<span id="more-755"></span></p>
<h2>AMQP to the rescue</h2>
<p>Because of this, we looked elsewhere for our central work queue.  We decided to use the <a href="http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol">AMQP</a> protocol,  with <a href="http://www.rabbitmq.com/">RabbitMQ</a> as our implementation.  AMQP is a protocol for taking incoming messages, placing them on one of many queues and routing them to a destination reliably; RabbitMQ is a server, built in Erlang, that is pretty lightweight and has some nice clustering features built-in.</p>
<h2>Into the Warren</h2>
<p>When it came to getting our Rails applications to talk to RabbitMQ, we had a couple of choices.</p>
<p>There is an <a href="http://github.com/tmm1/amqp/">AMQP gem</a> which looked great.  Unfortunately, as it uses EventMachine internally, it caused a few problems with our Passenger-based deployments &#8211; EventMachine opens a background thread which can cause issues to the web-server controlled Passenger processes.</p>
<p><img class="content_image left size-medium wp-image-765" title="Rabbit on the run" src="http://blog.brightbox.co.uk/wp-content/uploads/2009/09/rabbit-225x300.jpg" alt="Rabbit on the run" width="225" height="300" /></p>
<p>There was also a gem called <a href="http://github.com/celldee/bunny/">bunny</a>.  This works synchronously, thus avoiding the EventMachine issues &#8211; you connect and bunny either says &#8220;here&#8217;s the next message&#8221; or &#8220;the queue is empty&#8221; and then you disconnect.</p>
<p>It looked like bunny was perfect for our Passenger-based apps, with the AMQP gem being used in the non-Passenger side of things (actually in the end, we went with bunny on both sides, but for other reasons).  But there was still a couple of things that we wanted to do with the messages.</p>
<p>Firstly, we are Rubyists and AMQP (the protocol) is language agnostic.  In particular, we wanted to put a hash of data onto the queue and have a hash of data presented to us at the other end.  Secondly, security is important to us &#8211; especially when it comes to tasks like rebooting or reconfiguring a server &#8211; so we wanted to ensure that the contents of the message were not tampered with in transit.</p>
<p>For these reasons, we built <a href="http://github.com/brightbox/warren">Warren</a>.  This adds filters over the AQMP layer.  In our case, we had one filter that automatically marshalls the data to and from YAML as it is put onto and taken off the queue and a second HMAC filter that, with one line of configuration, ensures that the data was not altered on its journey.</p>
<p>Warren itself has an adapter layer, so it can quite happily use either the AMQP gem or bunny to actually talk to the queue.  Adding new adapters, or filters, is as simple as creating a new subclass &#8211; Warren detects it and adds it to its stack.</p>
<h2>Bigwig</h2>
<p>With Warren it is pretty simple to put a message on to the queue:</p>
<pre><code>
Warren::Queue.publish(@queue_name, @hash_of_data)
</code></pre>
<p>It is just as easy to pull the messages off the other end:</p>
<pre><code>
Warren::Queue.subscribe(@queue_name) do | hash_of_data |
  do_something_with hash_of_data
end
</code></pre>
<p>But how do we implement this mysterious <tt>do_something_with(hash_of_data)</tt> call?</p>
<p>For our purposes, the endpoint needs to do different things depending upon which machine we are on and which queue we are listening to.  The key one is our &#8220;builder&#8221; system which handles reboots, migrations and deployments, but there are several others, which while not yet live, will be coming onstream soon.</p>
<p>So effectively, we needed a set of daemon processes that listen to given queues and handle the messages that they receive.  This splits into two components &#8211; the daemon framework and the workers themselves &#8211; which lead to <a href="http://github.com/brightbox/bigwig">Bigwig</a> (keeping the rabbit theme going, Bigwig was a character in <a href="http://en.wikipedia.org/wiki/List_of_characters_in_Watership_Down">Watership Down</a>).</p>
<p>Bigwig expects a configuration file, telling it how to connect to the AMQP server and a folder full of plugins.  Each plugin is a simple Ruby class that performs a given action.  Bigwig takes the incoming messages, looks for a parameter within the Hash called &#8220;method&#8221; and then uses that to find a plugin.  The plugin is then invoked and can perform whatever tasks it needs to, using any data from the incoming message.</p>
<p>For monitoring purposes, Bigwig automatically deals with any incoming messages with a method of &#8220;ping&#8221; &#8211; these simply write a message to the log file.  We can then send ping messages to the queue at set intervals and monitor that the log file is updated when expected &#8211; if we don&#8217;t see the update then we trigger an alert, in case the queue, or Bigwig, is down.</p>
<p>If the queue itself goes down, for whatever reason, then Bigwig uses an intelligent reconnect pattern.  At first, it retries often, to minimise the downtime, but if the queue stays down, it reconnects less frequently, giving the queue a chance to restart before being swamped with connections.  Of course, if the queue fails, then the ping messages won&#8217;t make it through and our monitor should alert us.</p>
<h2>Calling back</h2>
<p>Our primary internal application creates a Task object, with a unique identifier when dispatching tasks across the queue.  This ID is then passed onto the queue and each Bigwig plugin is told of it when it is invoked.  The application itself makes the Tasks available over ActiveResource.</p>
<p><img src="http://blog.brightbox.co.uk/wp-content/uploads/2009/09/3410902-400x300.jpg" alt="3410902" title="3410902" width="400" height="300" class="content_image right alignright size-medium wp-image-773" />This means that the Bigwig plugins themselves don&#8217;t actually need data passing over the queue.  Instead, when they are invoked, they call back into the primary application, using the Task ID as the key to their ActiveResource call.  They can then extract the data they need from the Task object and use that to do whatever they need to do.  When completed, they call the <tt>complete!</tt> method on the ActiveResource object and our application knows that the job has been done (alternatively, they can call <tt>error!</tt> and our app knows that something went wrong).  All of these appear in an event feed on the application&#8217;s homepage &#8211; so we know at a glance what activity is happening across our systems and, more importantly, what has failed.</p>
<p>We could have implemented this using AMQP again &#8211; a &#8216;responses&#8217; queue that our primary application listens to, with each worker putting a message back when it was done.  But we chose to use ActiveResource, partly because it is so simple (Rails makes it super-easy to expose your objects as XML and ActiveResource makes it equally easy for other Ruby programs to call back to them), and partly for philosophical reasons.  When the primary application places a message onto the queue, it doesn&#8217;t necessarily know how it will be handled.  AMQP dispatches it and a listener deals with it &#8211; in our case the listener is <em>likely</em> to be a Bigwig instance, but doesn&#8217;t <em>have</em> to be.  But when the callback is made, it is <em>always</em> made into our application, which is already geared up for completing tasks or marking them as having an error.  As we know that it is a Rails app at the other end, we chose to follow the path of least-resistance and use the &#8220;Rails way&#8221;.</p>
<p>However, we did have one issue with ActiveResource.  Most of our plugins actually shell out to invoke Ruby scripts, with the plugin unpacking the information from the Task and generating command line arguments.  This is a slight security risk, just because it is feasible that someone could inject a malicious command into the command line parameters (although as this is all internal it should never be an issue and Ruby&#8217;s system command does escape any supplied parameters).  So we are switching the scripts to accept environment variables, thus bypassing the shell and eliminating a whole category of potential attacks.  Secondly, using ActiveResource in a non-Rails application caused some weird errors &#8211; but only when you tried to POST back to the ActiveResource object.  It turns out that ActiveSupport was causing some shifting to occur in the background and that was knocking out some of our own code.  The solution was simple &#8211; we had to ensure that the <tt>require 'activeresource'</tt> statement was the first thing in each script.</p>
<p>So that&#8217;s a quick peek into the workings of some of our internal systems.  We put a lot of thought into how these different components should work together, as their reliability is fundamental to our success as a business.  And while they are not infallible (nothing ever is) I think you will agree that they show that using Ruby and AMQP as the &#8220;glue&#8221; to tie different systems together is not only feasible, it&#8217;s actually quite easy.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/queues-and-callbacks/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux Sys Admin &#8211; Join the Brightbox team!</title>
		<link>http://blog.brightbox.co.uk/posts/linux-sys-admin-join-the-brightbox-team</link>
		<comments>http://blog.brightbox.co.uk/posts/linux-sys-admin-join-the-brightbox-team#comments</comments>
		<pubDate>Wed, 07 Oct 2009 09:00:58 +0000</pubDate>
		<dc:creator>Louisa Parry</dc:creator>
				<category><![CDATA[jobs]]></category>
		<category><![CDATA[careers]]></category>
		<category><![CDATA[leeds]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sys admin]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=775</guid>
		<description><![CDATA[We’re looking for an experienced and motivated Linux Systems Administrator to join our Technical Team here at Brightbox. You’ll work closely with our Technical Director and Senior Sys Admin to run our virtual hosting platform, our Ruby on Rails hosting clusters, our network and our MySQL databases. A full job description is below. The role [...]]]></description>
			<content:encoded><![CDATA[<p>We’re looking for an experienced and motivated Linux Systems Administrator to join our Technical Team here at Brightbox.</p>
<p>You’ll work closely with our Technical Director and Senior Sys Admin to run our virtual hosting platform, our Ruby on Rails hosting clusters, our network and our MySQL databases.  A full job description is below.</p>
<p>The role is full-time and you can work from home, from our office in Leeds, or a bit of both (the rest of us do a bit of both).</p>
<p>Send a hello, a CV and salary expectations to jobs at the Brightbox UK domain. CVs should be in an open format, preferably PDF or plain text. Closing date is <strong>24th October 2009</strong>.</p>
<p>As always, recruitment agents should e-mail our special recruitment company email address: root@localhost</p>
<ul>
<li><a href="http://www.brightbox.co.uk/about/jobs">More jobs available at Brightbox</a></li>
<li><a href="http://www.brightbox.co.uk/about/working-for-brightbox">More about working for Brightbox</a></li>
</ul>
<p><span id="more-775"></span></p>
<h3>Linux Systems Administrator</h3>
<p><strong>Job Description</strong></p>
<ul>
<li>Work under the Technical Director and with our other system admins to support and run:</li>
<ul>
<li>our customers’ Ruby on Rails hosting clusters</li>
<li>our virtual hosting platform</li>
<li>our MySQL systems</li>
<li>our networking infrastructure</li>
<li>our backup systems</li>
<li>our network management and monitoring systems</li>
</ul>
<li>Provide excellent customer service and support</li>
<li>Assist with technical sales</li>
<li>Participate in an out-of-hours on-call rota</li>
<li>Work from home or our office in Leeds, or a mixture of the two</li>
<li>Occasional visits to our hosting data centres for new builds and hardware maintenance</li>
<li>Update technical and process documentation</li>
</ul>
<p><strong>Qualifications</strong></p>
<ul>
<li>2+ years experience with GNU/Linux based systems</li>
<li>Experience with web technologies such as NGINX, Apache &#038; mongrel</li>
<li>Experience with Ruby, Rails desirable</li>
<li>Familiarity with Puppet, Virtualization, MySQL, PostgreSQL, LVM desirable</li>
<li>Familiarity with common Internet services such as DNS and SMTP</li>
<li>Experience working with customers</li>
<li>Ability to work both independently and as part of a team</li>
<li>Keeps up with new technologies and developments</li>
<li>Good written and verbal communication skills</li>
<li>Able to commute to Leeds, UK for team meetings</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/linux-sys-admin-join-the-brightbox-team/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails form helper security vulnerability</title>
		<link>http://blog.brightbox.co.uk/posts/rails-form-helper-security-vulnerability</link>
		<comments>http://blog.brightbox.co.uk/posts/rails-form-helper-security-vulnerability#comments</comments>
		<pubDate>Fri, 04 Sep 2009 10:22:47 +0000</pubDate>
		<dc:creator>John Leach</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[attach]]></category>
		<category><![CDATA[cross site scripting]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vulnerability]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=724</guid>
		<description><![CDATA[A vulnerability has been found in the Rails form helpers that allows an attacker to inject arbitrary HTML into pages.  This opens up an unpatched Rails app to potential cross site scripting attacks (XSS), which could result in stolen session cookies and other such scenarios. All versions of Rails above and including version 2.0 are [...]]]></description>
			<content:encoded><![CDATA[<p>A vulnerability has been found in the Rails form helpers that allows an attacker to inject arbitrary HTML into pages.  This opens up an unpatched Rails app to potential <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">cross site scripting attacks</a> (XSS), which could result in stolen session cookies and other such scenarios.</p>
<p>All versions of Rails above and including version 2.0 are affected. There are two new official releases to fix this, 2.3.4 and 2.2.3.  If you&#8217;re still running Rails 2.0 or 2.1 and can&#8217;t upgrade, patches have been provided by the security team but need applying manually.  In this case, we&#8217;d recommend vendoring the rails gems and then applying the patches.</p>
<p><a href="http://groups.google.com/group/rubyonrails-security/msg/7f57cd7794e1d1b4">More details from the security team here.</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/rails-form-helper-security-vulnerability/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Senior Rails Developer &#8211; Join the Brightbox team!</title>
		<link>http://blog.brightbox.co.uk/posts/senior-rails-developer-join-the-brightbox-team</link>
		<comments>http://blog.brightbox.co.uk/posts/senior-rails-developer-join-the-brightbox-team#comments</comments>
		<pubDate>Mon, 24 Aug 2009 10:34:58 +0000</pubDate>
		<dc:creator>Louisa Parry</dc:creator>
				<category><![CDATA[jobs]]></category>
		<category><![CDATA[careers]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[leeds]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=707</guid>
		<description><![CDATA[We&#8217;re currently looking for an experienced and motivated Senior Rails Developer/Project Manager to join our development team here at Brightbox. You&#8217;ll work closely both with our Development and Technical Teams to develop our customer control panel and other backend systems. We&#8217;re looking for someone who, in addition to being a great coder, will be an [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re currently looking for an experienced and motivated Senior Rails Developer/Project Manager to join our development team here at Brightbox.</p>
<p>You&#8217;ll work closely both with our Development and Technical Teams to develop our customer control panel and other backend systems.  We&#8217;re looking for someone who, in addition to being a great coder, will be an integral part of the team and an organised and enthusiastic project manager.</p>
<p>The role is full-time and you can work from home, from our office in Leeds, or a bit of both (the rest of us do a bit of both).</p>
<p>Send a hello, a CV and salary expectations to jobs at the Brightbox UK domain. CVs should be in an open format, preferably PDF or plain text. Closing date is Friday 11th September 2009.</p>
<p>As always, recruitment agents should e-mail our special recruitment company email address: root@localhost<br />
<span id="more-707"></span></p>
<p><strong>Job Description</strong></p>
<ul>
<li>Work under the Technical Director and with our other developers to:</li>
<ul>
<li>Maintain and extend our &#8220;cloud&#8221; management systems</li>
<li>Maintain and extend our billing system</li>
<li>Build the front end for our next generation of deployment systems</li>
<li>Help with application consultancy (advising customers how to design and scale their apps)</li>
<li>Work on side-projects that help the community and promote Brightbox (such as isitruby19.com)</li>
<li>Extract code to be shared with the community as open source/free software</li>
<li>Invent and develop new ideas for services and products</li>
</ul>
<li>Project manage several concurrent projects</li>
<li>Work from home or our office in Leeds</li>
</ul>
<p><strong>Qualifications</strong></p>
<ul>
<li>Great Ruby on Rails coding skills</li>
<li>A track record of implementing live RoR sites</li>
<li>Experience of test driven development using RSpec</li>
<li>Experience of deploying Rails using tools such as Capistrano</li>
<li>Experience of project management desirable</li>
<li>Proactive developer able to work independently as well as part of the team</li>
<li>Suited to working in an agile, flexible environment</li>
<li>Good written and verbal communication skills</li>
<li>Living within 2 hours of the UTC time zone</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/senior-rails-developer-join-the-brightbox-team/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rails: so successful it&#8217;s starting to hurt?</title>
		<link>http://blog.brightbox.co.uk/posts/rails-so-successful-its-starting-to-hurt</link>
		<comments>http://blog.brightbox.co.uk/posts/rails-so-successful-its-starting-to-hurt#comments</comments>
		<pubDate>Mon, 02 Jun 2008 14:00:00 +0000</pubDate>
		<dc:creator>Neil Wilson</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[skills]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/?p=73</guid>
		<description><![CDATA[One thing that we often hear from customers is how difficult it is find Rails developers. Which is funny since we also hear people saying how they’d love a job building Rails applications. The well-being of the Rails community is important to us, so we’d like to try and do what we can to keep [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.brightbox.co.uk/wp-content/uploads/2008/06/istock_000005702296xsmall.jpg" alt="" title="Mind the gap" width="400" height="300" class="alignnone size-full wp-image-75 content_image" /><br />
One thing that we often hear from customers is how difficult it is find Rails developers. Which is funny since we also hear people saying how they’d love a job building Rails applications.</p>
<p>The well-being of the Rails community is important to us, so we’d like to try and do what we can to keep it bubbling along nicely :)</p>
<p>One of the ideas that came up was some sort of Rails training network that would help bridge any skills gap. But before we do anything, we want to understand whether there is actually a skills gap, or just an &#8220;expectation gap&#8221; in either price or experience (anybody with any sort of Rails commercial experience is almost certainly gainfully employed at a good rate at the moment).</p>
<p>So, we’d like to hear from you if…</p>
<p>1) You’re in the market for Rails talent and would either be interested in using a Rails training programme, or interested in talking to ‘graduates’ of such a programme or</p>
<p>2) You’re a developer and you’d be interested in signing up for a Rails training programme and potentially getting your name in front of Rails employers.</p>
<p>Drop us an email to hello [at] the brightbox uk domain &#8211; we&#8217;ll gauge interest and take it from there.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/rails-so-successful-its-starting-to-hurt/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Brightbox Gem v0.24</title>
		<link>http://blog.brightbox.co.uk/posts/brightbox-gem-v024</link>
		<comments>http://blog.brightbox.co.uk/posts/brightbox-gem-v024#comments</comments>
		<pubDate>Fri, 02 Nov 2007 12:58:48 +0000</pubDate>
		<dc:creator>John Leach</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/posts/brightbox-gem-v024</guid>
		<description><![CDATA[I&#8217;ve just released a new version of the Brightbox Gem. It might takes a few hours to get to all the Rubyforge mirrors but in the mean time you can download and install it manually directly from the project page. It&#8217;s largely just a maintenance release, which means no Capistrano v2.0 support just yet, it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released a new version of the <a href="http://rubyforge.org/projects/brightbox/" title="Brightbox Ruby on Rails Deployment Gem">Brightbox Gem</a>.  It might takes a few hours to get to all the <a href="http://rubyforge.org">Rubyforge</a> mirrors but in the mean time you can download and install it manually directly from the <a href="http://rubyforge.org/projects/brightbox/" title="Brightbox Ruby on Rails Deployment Gem">project page</a>.</p>
<p>It&#8217;s largely just a maintenance release, which means no Capistrano v2.0 support just yet, it still requires Capistrano 1.4.1.  Cap 2.0 support is in the works though and will be released soon.</p>
<p>A quick summary of the changes:</p>
<ul>
<li> Fixes default Monit config bug (changes totalmem to mem, no more false memory overage alarms!)</li>
<li> Fails out if MySQL database exists on cold_deploy (you really shouldn&#8217;t be running a cold_deploy a second time anyway)</li>
<li> Adds reconfigure task (for easy adding of mongrels or domain changes)</li>
<li> Archives Apache configs on cold_deploy or reconfigure</li>
<li> Fixes Capistrano 1.4 dependency (will pull in v1.4.1 if necessary now)</li>
<li> Changes default Apache log location to /var/log/web (for new cold_deploys or reconfigures)</li>
</ul>
<p>Remember that you need to upgrade the Brightbox gem both in your development environment and on your Brightbox.</p>
<p>The HOWTO on deploying your Rails app using the Brightbox <a href="http://wiki.brightbox.co.uk/docs:thebrightboxgem:howto" title="Deploying your Rails app using the Brightbox Gem">is here</a> as usual.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/brightbox-gem-v024/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why we chose Ubuntu Dapper Drake</title>
		<link>http://blog.brightbox.co.uk/posts/why-we-chose-ubuntu-dapper-drake</link>
		<comments>http://blog.brightbox.co.uk/posts/why-we-chose-ubuntu-dapper-drake#comments</comments>
		<pubDate>Fri, 03 Aug 2007 11:31:09 +0000</pubDate>
		<dc:creator>John Leach</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[dapper]]></category>
		<category><![CDATA[dapper drake]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[rails hosting]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/posts/why-we-chose-ubuntu-dapper-drake</guid>
		<description><![CDATA[We&#8217;ve had a few beta testers ask about why we chose Ubuntu 6.06 (Dapper Drake) as our primary Xen guest installation, as opposed to one of the more recent releases such as Edgy or Feisty. We chose it primarily because of its support contract. Ubuntu&#8217;s release schedule sees a new version released roughly every 6 [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve had a few beta testers ask about why we chose Ubuntu 6.06 (Dapper Drake) as our primary Xen guest installation, as opposed to one of the more recent releases such as Edgy or Feisty.  We chose it primarily because of its support contract.</p>
<p>Ubuntu&#8217;s release schedule sees a new version released roughly every 6 months.  These releases contain the very latest versions of the software packaged with it and are supported for only 18 months.  Once in a while a version is selected as Long Term Support release (LTS) which gets 5 years of server support (3 years for desktop).  By support, I mean the Ubuntu team are committed to releasing security upgrades in a timely manner.  Dapper was the first LTS version and is support through to June 2011.</p>
<p>If we&#8217;d chosen Edgy, security upgrades wouldn&#8217;t be available to us after April 2008, forcing all of our Brightboxers to upgrade to Feisty, and so on every 18 months.  With the speed that the Rails community jump deployment strategy ships some might say this isn&#8217;t a problem, but most installations do need long term stability and Dapper provides that.</p>
<p>There are some issues though, mainly that Dapper&#8217;s version of Apache is too old to support the nice proxy balancing stuff that&#8217;s used for Mongrel deployments<sup>1</sup>.  To solve this, we chose to use a backported Apache package<sup>2</sup>.  This does mean that we have to commit to backporting all security fixes, but this is trivial compared to all our guest machines needing a full upgrade every 18 months.  We still get the Ubuntu team working for us on the other 99.9% of packages.</p>
<p>For our users who like to ride the bleeding edge, they can still upgrade to Feisty themselves if they know what they are doing but for most, this isn&#8217;t what Brightbox is all about.</p>
<p><small><sup>1</sup> A beta tester pointed us in the direction of this bug report <a href="https://bugs.launchpad.net/dapper-backports/+bug/80609">requesting an official Apache backport for Dapper</a>.  The more people testing these packages and voicing their support, the more likely this might happen.</small></p>
<p><small><sup>2</sup> We&#8217;re using the backported Apache package provided by kodefoo.com at the moment (<a href="http://www.kodefoo.com/2007/2/18/deploying-rails-on-ubuntu-dapper/">http://www.kodefoo.com/2007/2/18/deploying-rails-on-ubuntu-dapper/</a>) but are ready to roll our own if necessary.</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/why-we-chose-ubuntu-dapper-drake/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brightbox beta program</title>
		<link>http://blog.brightbox.co.uk/posts/brightbox-beta-program</link>
		<comments>http://blog.brightbox.co.uk/posts/brightbox-beta-program#comments</comments>
		<pubDate>Tue, 19 Jun 2007 13:39:52 +0000</pubDate>
		<dc:creator>Jeremy Jarvis</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[rails hosting]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.brightbox.co.uk/archives/brightbox-beta-program</guid>
		<description><![CDATA[We&#8217;re currently looking for a few more active Rails developers to help us test our new Brightbox rails hosting service and provide some valuable feedback. The ideal participants will most likely fit most of the following profile: Be developing in Ruby on Rails almost exclusively for new projects. Currently hosting, or looking to host in [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re currently looking for a few more active Rails developers to help us test our new <a href="http://www.brightbox.co.uk">Brightbox rails hosting</a> service and provide some valuable feedback. The ideal participants will most likely fit most of the following profile:</p>
<ol>
<li>Be developing in Ruby on Rails almost exclusively for new projects.</li>
<li>Currently hosting, or looking to host in the next 3 months, at least one production rails app</li>
<li>At least some experience of deploying rails to a production environment</li>
<li>Be the decision-maker, have the casting vote or at least have a major say in where apps are hosted at their company or agency</li>
<li>Have an active or rails-focused blog</li>
</ol>
<p><strike>Interested? drop a quick email to <a href="mailto:&#x62;&#x65;&#x74;&#x61;&#x2d;&#x72;&#x65;&#x71;&#x40;&#x62;&#x72;&#x69;&#x67;&#x68;&#x74;&#x62;&#x6f;&#x78;&#x2e;&#x63;o.uk">&#x62;&#x65;&#x74;&#x61;&#x2d;&#x72;&#x65;&#x71;&#x40;&#x62;&#x72;&#x69;&#x67;&#x68;&#x74;&#x62;&#x6f;&#x78;&#x2e;&#x63;o.uk</a> and tell us a bit about your app/apps and how you fit into the above profile. You might just get a free brightbox to play with, plus a nice discount when we launch.</strike></p>
<p><strong>UPDATE:</strong> (30 Jul 2007)<br />
We&#8217;re well into the beta programme now so we&#8217;re not looking for any more beta testers.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.brightbox.co.uk/posts/brightbox-beta-program/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

