This page is deprecated and is only online for archival purposes. To read my latest blog posts , you should visit my new blog website.
This is an article written by Michael Gray which was published by the National Collective and has been reproduced in full. It (and their website) are currently down due to legal action brought about by the subject of the article.
I don’t make any claim for its accuracy, I just really don’t like censorship. Read it. Make up your own mind.
For the past two and a bit years I’ve been privileged to work with the fine folks at FreeAgent. I was employee number thirteen in a company that now has over sixty members of staff. It’s been great fun and I’ve learned lots and had tonnes of opportunities, like being able to speak internationally at conferences about subjects I care about, that I probably wouldn’t have had elsewhere.
At the same time as all this, I’ve been working on my own endeavour, The Happy Geek Ltd. For the most part, it’s been about me doing little bits of freelance work and serve as a way for me to scratch my itches and work on some secret projects.
It’s been a hard decision that I’ve been mulling over for ages, but the time’s come for me to break out and do my own thing for a while. I’m available for your freelance development and project management needs. I can cut Ruby with the best of them, PHP when I need to, I understand web application security (and scary things like PCI DSS compliance) and I’m not too bad at the dev-ops stuff either.
I’d like to open with a couple of questions, nothing too onerous – hands up if you came to Ruby from another programming language.
Most of the room, when asked, raised their hand to show that Ruby was the 2nd or later programming language that they had learned.
I’m quite opinionated on the subject of languages and language learning, and I’m going to be sharing some of my thoughts with you.
Like many (if not most) of you here, I speak a fair few languages:
Some of them I learned in a classroom, others in front of my computer, or by reading books or listening to mp3s / tapes. I guess most of you learned your languages using one or more of these methods.
I’ll be going into that a bit later.
This summer is set to be particularly thrilling for me this year.
First of all, I’m speaking at The Scottish Ruby Conference again, where I will be talking about how we as Engineers learn programming languages and about how we can apply those skills to become truly multi-lingual by learning an additional natural language.
I’m not sure when yet I’ll be placed on the schedule, but the conference takes place on the last weekend in June this year, on the 29th and 30th of July in Edinburgh.
This is a bit of a departure from the usual nature of my blog; but after the recent court ruling in the UK banning ‘The Pirate Bay’, I thought I’d throw my two-pence worth into the debate. You might also want to read James Ball’s article on The Guardian’s Comment is Free Blog.
The online community is full of ways to circumvent such ridiculous censorship measures, rendering the judgement practically impossible to enforce — but then; most of the tech community online already knew this, so I’m not really banging on about anything new.
Instead I’m going to talk explicitly about ‘infringement’, and focus on the ‘piracy’ of television programmes.
The Japanese you read online is typically rendered horizontally and arranged for reading form left-to-right, much like in English. This is great - but there is also another, traditional way of writing Japanese - from right to left, top to bottom from the top right-hand corner of a page (or other point) down.
Typically this pretty vertical arrangement of text is used in books, poetry, newspapers and calligraphy but is generally avoided in print (except newspapers and magazines) and the web. One of the main reasons for its absence on the Internet is that the ability to render the text correctly is still beyond many web browsers.
I thought I’d have a go with using nothing but CSS and sensible markup to see if I could, at least, approximate vertically rendered Japanese text. If you just want to skip ahead, the finished example is here.
This post is about me coming to terms with, and understanding some of the mistakes I’ve made of the past year with my company, what I did about them, what I learned and how I’m going to ensure mistakes aren’t repeated.
It’s pretty personal. Writing honestly about where you’ve screwed up is always hard. I hope this helps other people to maybe avoid the same mistakes I’ve made. I certainly don’t come off looking too clever here, but for me, this post is to bring closure to a long period of self-doubt and hard reflection.
This website has served me very well for quite some time, but now it’s starting to look rather dated and doesn’t really give away much about me, my interests or my personality.
That’s changing slowly, and I’m writing this entry to explain and chronicle how my approach of ‘Cultured Localisation’ is informing the reimagining of
ryanstenhouse.eu and the design and engineering decisions I’m having to make.
I’m also taking a ‘Mobile First’ approach to the design, with the idea that no matter what device you visit this site on, you’ll always get the best possible experience.
I’ve been thinking a lot lately about how Continuous Integration (CI) is used, especially within large distributed teams and kept coming back to a lightning talk I delivered at the Scottish Ruby Conference in 2010.
It talked about the common strategy of running your CI tool off of your ‘master’ or ‘gold’ branch – which is probably the one that ends up going into production – once someone has pushed their code up to that branch of your repository. I’ll call that branch ‘deployable’.
The problem with that is that if someone on your team hasn’t, or couldn’t run your tests / build your application before pushing up – you’ve got broken code right there in the branch that should always be deployable and your CI tool going crazy.
The coming year has me filled with excitement and a little trepidation. For one thing, I’m leaving the wonderful PCCL, where I have been privileged to work since January 2007 to join the team at FreeAgent Central.
This is a big change for me and it seems fitting that I’ll be starting the New Year in a shiny new job. I’ll deeply miss my friends and colleagues from PCCL and am grateful for nearly 4 great years of fun challenges, interesting work and a great working environment.
I’m going to be speaking at the 2011 Scottish Ruby Conference on the subject of the Payment Card Industry’s Data Security Standard (PCI DSS); a subject which has been a very intimate part of the last year of my professional life. If you’re coming along, come see me speak and I’ll talk about how you can use Free and Open Source Software to help reduce the cost of compliance.
The ‘real world’ is an emotive term when it comes to software development. It parcels off your skills and experience to one side and holds it against and in comparison to a mythical archetype of ‘reality’ which seems to have little, if any, relevance to how, where and why you work. In this context, the ‘real world’ is subjective and is defined by the person who is making the comparison.
The ‘enterprise’ is another one of these terms which conjures up different images for different people and is the subject of many debates across the internet, especially in the Ruby world.
In this post, I draw upon my own work and personal experience to discuss both these topics and try to see where Ruby and Rails sit in the ‘real world’ as it pertains to me, and within the ‘enterprise’.
A cargo cult is a type of religious practice that has appeared in many traditional tribal societies in the wake of interaction with technologically advanced cultures. The cults are focused on obtaining the material wealth (the “cargo”) of the advanced culture through magic and religious rituals and practices, believing that the wealth was intended for them by their deities and ancestors.
From time to time, the term “cargo cult” is invoked as an English language idiom to mean any group of people who imitate the superficial exterior of a process or system without having any understanding of the underlying substance.
From the Wikipedia Cargo Cult Article.
You may be familiar with the story that our (the UK that is) Prince Philip (The Duke of Edinburgh) is venerated as a god by the Yaohnanen tribe on the southern island of Tanna in Vanuatu. A similar thing happens pretty much every single time a shiny new ‘paradigm shifting technology’ pops up the the Ruby world.
I tweeted last night about finally talking myself into making a go of a business idea I have been kicking around for a while. Here is the outline of it, I’m putting it out here for feedback and criticisim from my peers to find out if the idea has legs before taking it to the next stage of development
Geekspaces will be a new kind of bar and meeting venue designed to attract customers with a keen interest in Technology who need a casual space where they can eat, drink and use their laptops.
For a while now, my responsibilities at my work have revolved around the Payment Card Industry’s Data Security Standards (PCI DSS). As of publishing this article, PCCL are compliant as a Level 1 Service Provider, the highest possible level of compliance.
Ruby played an important part in our overall compliance and I’m going to talk about how Rack and Sinatra play an important part in our compliance in a later post. For now I’ll explain a bit about PCI DSS itself and give some general advice for anyone working towards compliance.
First, I need to give a semi-obligatory disclaimer. I am not a PCI DSS QSA, all of what you’ll find here is based on my own experience as part of the two man team in PCCL who were responsible for designing and building our compliant infrastructure. From this, I’ve gained a good understanding of the specification; but you will need to speak to a QSA if you want advice which you can make business decisions on.
I get rather offended on behalf of other people’s customers when I hear friends and colleagues telling me about horrific ‘Rescue Mission’ projects they are involved with, how feeble and inferior the previous developers of the project were and how only through prodigious effort and liberal application of their own awesomeness, could they and only they, save the day / save the business that hired them.
Taking a step back from this and looking the pheomenon from the outside, you can draw some fairly reasonable assumptions:
This seems to me to be fairly common set of circumstances in the freelance world, at least from my own experience. Does that mean that every time I’ve worked in that situation I’ve been on a ‘Rescue Mission’? No, it means I was hired to do a job and did it.
I’ll admit to have being a little bit hostile towards REWORK in the beginning; I avoided the book like the plague, thinking it was yet another attempt for someone to cash in on a reputation they (rightly or otherwise) have built for themselves.
I ended it up on my Nook only because I wanted to test the integration with the B&N Bookstore on the device.
I won’t say I feel I was entirely wrong with my initial opinion about the book, its a very good marketing ploy that promotes 37signals all the way through; however where I was wrong was in thinking that this book is not useful.
Once you get past the (rather expected) boastful, attitude filled writing style, you are left in no doubt that the book is written by knowledgeable people.
The Scottish Ruby Conference comes to Edinburgh on the 26th and 27th of March, 2010.
Over the two main days of the conference, there will be three tracks with many, many interesting and informative talks from all corners of the Ruby world. Armed with my Netbook and a 3G connection just incase the WiFi goes; I’ll be there to bring you live coverage of the whole event.
I’ll be paying special attention to the questions and answers after each of the talks, and I’ll also be covering the lightning talks after the conference on the 26th. Hopefully those who can’t make it to the conference or the lightning talks will find it useful.
If you would like to join in with the livebloggery, then please drop me an e-mail and I can give you access to post too.
Prawn is the fastest pure Ruby PDF generation library available. It really is pretty cool and takes most of the ouch out of generating print-ready documents.
I recently had the need to be able to generate report documents in PDF format, and found Prawn to be the best out of all the available Ruby tools to do the job.
The thing that was missing, however, was built-in support for adding graphs and charts to these reports I was generating. Of course, I could have used something like Gruff to generate a pretty PNG or JPEG of a graph and then embed that in the PDF; however to me this seemed inelegant and I was loath to add another bunch of dependencies to my application (Gruff, RMagick).
And so, I created Prawn::Graphs, It’s a very simple abstraction on top of prawn/graphics that draws Graphs. Find out more about it and see some usage examples on the project page.
The most nifty thing about this implementation is that it only relies on Prawn and the methods it exposes through prawn/graphics to do its work. That’s right, no RMagick, no embedded images, just native PDF graphs.
As part of adapting the talks that didn’t quite make it into this year’s Scottish Ruby Conference, I’ve put together a tutorial which shows you how easy it is to switch databases within your rails application.
It would be particularly useful to people wanting to provide software-as-a-service to their users without needing to inefficiently deploy duplicate instances of their applications to keep customer data separate.
I use Vim as my editor of choice for all of my programming work these days. Lately, I’ve begun to scratch the surface of the more advanced features of the editor and it’s rather brilliant extensibility.
IDEs, in my experience, tend to be rather heavy affairs ([Aptana] on OS X weighs in at a whopping 130MiB). Often, they’ll include their own version of things which you already have on your computer if you’re using it for development.
Do you really need this duplication? I don’t think so. I think that you need to be able to efficiently edit your source code files; be able to interact with the environment your programming for and, if possible, not waste precious storage space.
I apologise for this break from the usual content of my blog and website. I appreciate that most of my readers come here for the technology articles and perhaps to view my portfolio and current projects, however the scale of this disaster and the level of suffering we all are witnessing on the news has lead me to make this post.
There’s nothing technical here, no programming, no tutorials – just a plea from me for all of my readers and to the wider internet for those who are able to, to consider making a donation to the DEC or ICRC.
I’ve done a fair bit of evangelising for Linode since becoming their customer. I’ve been using their services off-and-on since mid 2008, and, while I’ve been around-the-block in terms of VPS and hosting providers; I’ve yet to find anyone who can compare on cost, features, service and support. Now that Linode have opened up their first data-centre in Europe; they have finally ticked all of my boxes.
I’ve submitted two proposals to be considered for inclusion in the Scottish Ruby Conference this year (2010).
The first is entitled: Sometimes you just need a Jobby.
You’ll find out all about Jobby, the mechanism for handling heavy, long running tasks in Rails (and almost anything else, for that matter). As well as briefly explaining the reasons behind its development, Iʼll cover in detail how it works, why itʼs different and present some interesting use-cases where it is especially useful.
The second is entitled: :has_many client_databases.
If you have an application you offer as a service to others (think Google Docs and such), youʼre going to run into the problem of needing to keep data separate between your customers. Youʼll want to do this as efficiently as you can, with as little code as possible. Iʼll discuss methods you can adopt to solve this problem and prove with real-world examples that itʼs not quite as difficult a problem as it seems to be.
Fingers crossed, one of these talks will be accepted and I’ll be able to have the fun of presenting!
You might already know about Jobby, the generic forking process manager written in Ruby which is designed to make handling the offloading of long running, complicated tasks as straightforward and resilient as possible. If you aren’t familiar with it, please check out Mark’s wonderful introductory article over on his blog.
The Rails interface to Jobby, Jobby Rails, has now been extracted from our work at PCCL and is ready for careful consumption. You can see more about it on it’s project page. It’s under heavy development and I would like to encourage anyone to fork away and get hacking on it, report issues and generally get stuck in and enjoy!
The folks over at ThoughtBot have put together a really nifty survey to track coding-style, preferences and habits in the Ruby Community.
It’s informative too, I for one was blissfully unaware of rescue nil, and am now trying especially hard to forget ever seeing it.
You can take the survey here, you’ll probably want to allow a few minutes for it.
The wonderful people over at Linode have painlessly migrated me over to their shiny new data centre in London.
I really can not sing Linode’s praises enough – If you’re with Slicehost or Webbynode or anything similar, ditch them! You’re paying to much and getting far too little.
A selection of my past and present work is now available to browse online at my Portfolio Page.
Please have a look through the page – if you have any questions or comments about the work, please don’t hesitate to contact me.
It’s been a long time coming, in all honesty. Dreamhost are quite possibly the most awful, unreliable and downright oversold hosting service I have ever used. I’m sick of the constant passenger spawn errors because all the RAM in my host machine has been eaten, I’m sick of the slow connection to the site because they have third-world levels of connectivity. Most of all, I’m sick of the terrible customer service and the caviller, off-hand manner they deal with problems on their own network.
I’ve been sitting here with a Linode doing almost nothing for a few months, excepting hosting a few small applications and some client sites. The time has finally come to get the finger out and migrate everything over. The fact that you’re reading this blog-post is proof-enough that the migration worked.
This is a re-post and updated version of the original article I published in March 2007.
Before I start off with the rest of this post, I should probably tell you all a bit about myself and my background before I, as some people will no-doubt say, “start throwing the FUD around”:
I’m a Software Engineer with a company which runs almost exclusively on Free and Open Source Software. All of our desktops run Fedora, our servers Red Hat. We develop using Free tools such as vim and gcc and code in free languages and frameworks such as C, Python, Ruby, Rails. I myself run a a fair whack of different operating systems. On my Desktop: Windows XP, Vista, Ubuntu, Fedora and Free BSD. I own a MacBook which dual-boots into Ubuntu Jaunty and have an Acer Aspire One which dual boots Linpus and the latest version of Ubuntu Karmic. I develop for all of these different operating systems and most importantly use all of these operating systems on a daily basis (with the exception of FreeBSD).
It’s been such a long time coming – but I’ve finally got this website live and in a useable state. Apologies for the delay – I was suffering like the proverbial cobbler’s son.
All that aside; what can you expect from this site?
Well, I’ll be putting up my thoughts and probably more than a fair share of my opinions. I’ll be blogging about technology in general; Ruby, Ubuntu, Fedora and related subjects in specific. There will probably be more than a few ‘essays’ posted too and hopefully a few tutorials.
Primarily, this place will serve as a hub for me to organise everything I’m working on and to share what I can with the world at large. I’ll be aggregating content from my GitHub, BitBucket and Redmine.