This is a seriously old post. I’d probably not bother reading it, but I keep it here for nostalgia.
I lied, turns out I like sushi! :-/
What’s Jamie been up to?
As you may have noticed, there’s been a severe lack of posting lately. Well, that’s because Jamie’s been a busy little bee! Here’s a run down of what I’ve been up to and what to look forward to:
I’ve recently done an article for the The Rubyist called “Building a Ruby Gem using BDD”. I realised there were loads of articles on testing with BDD, as well as articles on building Gems…but I couldn’t find any article on the actual thought process that went into using the two together. So if you’re interested in how to build a Gem, or just want to know how to think through building up a Gem using Behavioural Driven Development, then do grab a copy of the magazine (print or pdf) and have a read, there’s also a chunk of other interesting articles in there from some real Ruby geniuses like Hampton Catlin and Rein Henrichs.
Cheerio Engine Yard! Hello Parfait!
After 17 months working for Engine Yard, building up the European Support Team from just myself to a mean machine of fantastic support guys, I felt it was time to move on from Engine Yard and fill another gap in the Ruby market. So, it’s without further ado that I’d like tell you about Parfait, my new Ruby business.
I recently posted about recruitment agencies and how I disliked almost every single process they follow, as well as the result that you receive (in our community). Recruitment agencies know nothing about Ruby. I do. Parfait hopes to fill the gap in the Ruby community by providing a service that can provide both full time and contract employees for your company. Because we know Ruby and we know web, we know what skills a company need to fill certain positions in their company. Parfait placement (let’s not use that evil word recruitment) is all about finding you 2 possible candidates for you to choose from, both who will have the skills you need as well as the personality. It’s up to you which you pick, but both would suit you. We know this because we do your interviewing for you. More details to follow on the Parfait web site I’m building.
Of course, Parfait isn’t just about placement. We also do training and consultancy, but I’ll let you know more about that on the new site.
America and ENTP
After leaving Engine Yard I hopped on a plane from San Francisco to Portland and went and met up with Courtenay’s team over at ENTP for some contracting work while I ironed out the details of the new site. Those guys kick ass.
Anyway, I better get back to doing the Parfait site. More to follow!
What is it about recruitment agencies that annoys us all the most? Especially the ones that claim to specialize in Rails! For me, it’s this list of gripes below:
- They know absolutely “Jack Diddly” about Rails or Ruby, so how can they hire you someone that actually fits?
- They charge absolutely ridiculous fees, with no guarantee that they’ll find you someone.
- They hound you like rabid dogs.
In all my experience with recruitment agencies, all they do is hunt through cv’s (resumé’s for you non-Brits) for a keyword of “Rails” or “Ruby”. How do they filter out anyone from that list? When I go to a recruitment agency I have to outline what I need them to find, which usually means them searching their database of possible’s for keywords, or doing a quick dig through Working With Rails for someone who looks like a fit. However, the person searching knows absolutely nothing about Rails or Ruby and therefore can’t make a reasonable decision on whether they fit…so they gather them all and blanket email them.
Seriously fellas, what we need is a better system…one where someone with knowledge of Ruby and Rails does the searching for you, with fees that aren’t astronomical (a.k.a 25% of the expected Salary). If a company told this person exactly what their duties would be and what the plan was, then it wouldn’t be hard to do initial interviews for them also, filtering out the list to a …say… final 3 possibles.
So, I’ve outlined the problem, I’ve outlined the solution. Now just get my RSS feed added to your news reader, and keep your eye on this spot.
Engine Yard Express
Now the RailsConf aftermath has calmed down, I wanted to let you know a little about a tool we announced at the conference that I’ve been working on for a while. We’ve bundled up an Engine Yard gentoo slice from our clusters and put it into a VMWare image.
All the information you’ll need is on that page and there’s more to come.
RailsConf Wrap Up
So the end of the conference has come, and I’m absolutely exhausted. In their wisdom O’Reilly only filmed the keynote this year, so I’ve uploaded my slides with some added notes (so you can get a better idea of what I said) if you missed the talk or were one of the 30+ that got kicked out due to the room being full. I’ll put more up later.
Here’s the presentation:
Oh, and if you liked my talk, feel free to recommend me on Working With Rails:
I’ll be at RailsConf this week giving a talk for Engine Yard with other members of the team holding a Q & A after it. Come along and heckle us with difficult questions, or just watch. Quite a few of us will be at the #caboose conf meets as well, so if you’re there I look forward to seeing you!
Oh, the memories
Let’s pretend that you’re busy making a kick ass template maker, and you’d like to keep backups of the file you generate. You certainly don’t want to write over it every time, in case there’s customer changes that have been made since the last time you did. What if you want to keep 5 copies of it, and only 5?
Rather than code it all yourself, save yourself some trouble and download the Backup gem off github, and you’re ready to go:
$ sudo gem sources -a http://gems.github.com $ sudo gem install engineyard-backup
You only need to install the source once and then you can install any gem hosted on github, which basically means any repository that has a .gemspec at the root of their repository.
backup = Backup.new("/the/file/to/backup") backup.run
So what exactly have we done here? Well, we’ve made a copy of the file we wanted backed up, and we’ve added a timestamp to it. Every time we run this file, Backup will move the current file to a timestamped version, and also ensure that (by default) 5 versions of that file are kept.
Want a different number of ‘releases’?
# Set a different amount of backups on initialize backup = Backup.new("/the/file/to/backup", 10)# or set it manually backup.backups = 15# Run the backup backup.run
Some more methods:
backup = Backup.new("/the/file/to/backup") # which files would we keep in a backup backup.keep\_list# =\> ["backup.20080430185243", "backup.20080430185246", "backup.20080430185243", "backup.20080430185250", "backup.20080430185254"] # which files would we delete in a backup backup.delete\_list# =\> ["backup.20080430185221", "backup.20080430185224", "backup.20080430185230"] # how about skipping the cleanup? backup.run( :no\_delete ) # what if we just want to cleanup the old revisions backup.cleanup # and finally, how about we just get a list of the backup files present backup.find\_all\_releases
This library doesn’t care where it’s being used, it could be a Rails application or a command line Ruby script of some sort. It merely handles backups of files in the form of a library. If you just want to backup some files and not programmatically from within your own application, then these are not the droids you are looking for.
Easy peasy, lemon squeezy backups. Enjoy.
Famous Characters Using Ruby
So, it turns out both Eric Cartman and Arnold Schwarzenegger like Ruby! Who’d have known!
There’s rumoured to be Borat, Ali G and possibly Bruce Forsyth coming too, in an extended version of the question!
RailsConf 2008 (Portland) Talk Proposal Accepted
So, my talk proposal “Hosting and the Woes” just got accepted, in a nutshell it’s all about hosting Rails and the problems you come across. It will also have a questions and answers section at the end which will be hosted by a few Engine Yard members (Ezra Zygmuntowicz, Tom Mornini, Taylor Weibley, Corey Donohoe if he wants, and more).
Keep your eye out for updates, I’ll let you know confirmed attendee’s at a later date.
Irish Web Tech Conference (IWTC)
In case any of you are going to the Irish Web Technology Conference in Dublin which starts today and lasts until the end of the week, I’ll see you there! I’m doing a Ruby on Rails intro talk tomorrow (Wed 27th Feb) at 15:15.
Also note, it could be awful, I’m trying a new presentation style…lots of short, extremely large words, I believe it’s called the “Takahashi Method”. Here’s to falling flat on your face!
The new presentation method worked well, although I didn’t follow the pattern strictly, my slides are available in various formats here:
Even Faster Sessions
Most of you will know by now, that ActiveRecord isn’t the fastest ORM on the planet, so why use it for storing session data in your database? Plan A would be to flip over to SqlSession, which bypasses the ActiveRecord method and goes straight to the database. That’s fine for most sites, but what about those really high traffic sites?
Alexey Kovyrin (for scribd.com) has written the ultimate solution, FastSessions. FastSessions uses some clever MySQL (no, it’s not agnostic) tricks to make for real speedy session storing and lookup. Now I’m no database guru, but this plugin is by one of the MySQL Performance Blog fella’s so you can be sure that it does exactly what it says on the tin.
Installation and use is easy as pie:
piston import http://rails-fast-sessions.googlecode.com/svn/trunk/ vendor/plugins/fast\_sessions
Rails environment configuration:
config.action\_controller.session\_store = :active\_record\_store
Set up your migration to create the table:
./script/generate fast\_session\_migration AddFastSessions
Run the migration:
Little tricks like not saving the session data back to the database unless it changes, or is not empty, make for a huge saving over time.
Read more about it here: http://code.google.com/p/rails-fast-sessions/.