Thoughts, links, pictures on music, food, wine, film, tech etc.


I will be at this:

Ship Week

This is my first post since posting on the morning of Funconf 2. This is fitting, because I think that Funconf 2, to this day, is the best thing I’ve ever been part of. Funconf 3 was probably more ambitious, but there was something about the castle, the sheer absurdity, and that group of people that will probably leave Funconf 2 unsurpassed in my memory forever.

On Monday, April 8th, I'll be kicking off Ship Week. Ship Week is very different to Funconf. It’s more ambitious: not necessarily in logistical scale, but in its effort to empower positive change.

Last year, Dermot and I ran Úll: a conference for iOS, Mac OS X and Mobile designers. There’s an obvious pitch there to the Apple developer community, but Úll became something more: a conference about building excellent software. Few of the talks applied solely to developing for Apple. It’s a conference that takes Apple as a benchmark, and ponders the question: what’s next?

Last year I wanted to take the spirit of Funconf: joy, comradarie and care, and apply it to a “regular” conference. Úll was the result.

Ship Week is a continuation of that theme. It combines several events, under the UNIX philosophy, or Weinberger’s theory of the web: small pieces, loosely joined. Small events, loosely connected, all under that shared effort: empowering positive changes.

Úll speaks for itself I think after a successful first year in 2012. It’s back on the 12th April and the lineup this year is fantastic.

We’re kicking off the week with Ship It! Monday. The Ship It! mantra, embodied succintly, by a photo-bombing squirrel, is one simply of putting things into the world. Ship It! Monday is a focus on that: a show and tell for people who make things.

Perhaps most exciting to me though this year is Brio. A conference about the future of being entrepreneurial. But it’s more than that: it’s a conference about the future, period. A lot has changed since the internet was born, and a lot is changing still every day. Brio aims to put that conversation in perspective. It’s a conference about doing the right thing. You should come.

Tickets for Ship It Monday, Brio, and Úll are still available, and you can buy an Úll / Brio combo ticket too.


I co-organised this:

Ladies & Gentleman, I Give You Funconf 2 : A Conference in a Castle

Last year, as the ashes of the first Funconf were settling, I was coming down from that high you get when you organise things for other people and they fully embrace your crazy idea. One thing was missing though. We had originally planned to journey on busses to a variety of stops around Ireland. When our original plans were scuppered by the ash cloud, we scaled back.

One of the things we cut was a stop that we'd planned in "a castle". The castle was Lismore Castle. We had been down to visit the castle and I completely fell in love with it.

I started pitching people on the idea, and feedback wasn't just encouraging, it was very enthusiastic. "A conference in a castle? You had me at castle." We contacted the amazing castle people again, and before long, it was booked. Funconf 2: the conference in a castle.

Since we announced the current site earlier this year, we haven't added anything to it. We haven't announced speakers. We haven't fleshed out details. We've been lazy about blogging. We sold out with just a paragraph describing our rough plan. 80 of the best folks in the world have come to town. They don't know their schedule. They don't know our plans. They've already met some of the speakers without knowing : but everyone is so talented they could be speakers in their own right.

It's been amazing, flattering and gratifying to have this much trust. Last night, Whiskey March reminded me why it's so important to bring people together. This morning, two hours before Funconf is about to begin, there's no more organising to do. Eamon and I have lined up our ducks. It's going to be a fun weekend.


I wrote this:

My TXJS 2011 Talk

The Ingredients of Fine Web Apps.

Steve McConnell’s classic tome of software development opens with a discussion on the power of metaphors to create strong mental models of what software engineers do in order to guide our approach. He writes:

“Important developments often arise out of analogies. By comparing a topic you understand poorly to something similar you understand better, you can come up with insights that result in a better understanding of the less-familiar topic.”

He goes on to give examples of important scientific discoveries that were made on the back of realisations born outside of the field of interest.

I want to extend a bit of a metaphor today: I want to talk about a particular interest of mine: food, fine dining, eating at restaurants that have achieved high acclaim for their attention to detail, atmosphere and experience.

I’ve never worked in the food business, nor do I know many people who do. I draw all conclusions from my experience, which is that of constantly being blown backwards by the power of what can be done by taking simple ingredients, science, discipline and finesse to create experiences that transcend the sum of their parts.

It’s hard to overstate how much of a profound effect on me this particularly snobbish part of my personality has had. Eating at top restaurants, experiencing the work of top chefs: it has changed my whole outlook on everything I do, on what can be achieved by taking simple parts and putting them together with skill.

Glenn Vanderburg, Chief Scientist at Living Social, formerly InfoEther, has a wonderful presentation called “Real Software Engineering.” In it, he compares the practice and discipline of structural engineering to that of software engineering, attempting to fit the metaphor:

In physical engineering, “you have engineers, and they sit and produce designs and those designs are then handed to labourers who use the designs to go and build the finished product”

Taking that model, I might run with something like: “you have top chefs, and they sit and produce recipes and those recipes are then handed to sous chefs who use the recipes to go and build the finished dish”

Mr. Vanderburg continues:

“by analogy then if we want to view software development in the same way and try to learn from engineering disciplines about how we should build software let’s look at what the analogy looks like: we have software engineers and they produce a design which is then given to some labourers in their cubicles which produce the finished product” (that is source code)

It’s a fairly neat match.

But in his talk, Glenn takes an insight from a man named Jack Reeves in 1992, who claimed in his paper “What is Software Design” that the analogy is totally wrong: “it misses some fundamental things about software development”:

And so, the paradigm shifts a bit. Glen continues:

“The programmers are the engineers of software. The source code is not the finished artifact. Our customers are paying us to produce working software, not files of ascii text. In fact, that source code is the design of our software. What corresponds to the labourers? Compilers and language implementations. And the finished artifact is working solutions”

So, now that the engineering metaphor is flipped on its head a bit and I can paraphrase back to food:

Programmers are the chefs of software. The source code is not the finished artifact. Our customers are paying us to produce working software, experiences, interactions. In fact, that source code is the recipe of our software. What corresponds to the sous-chefs? Compilers and language implementations. And the finished artifact is working solutions.

Lovely. V8, Spidermonkey, Squirrelfish. The sous chefs of the internet kitchen.


First, a little background. Why the hell should I care about what chefs are doing? Why would I want to let them influence me at all?

Heston Blumenthal is one of the top chefs in the world. His restaurant “The Fat Duck” in Bray in England, has long been hailed amongst the top restaurants in the world. Over time, he has built up a repertoire of dishes that go beyond even what most of us imagine as creative cooking. Constructions such as “Snail Porridge”, “Bacon Ice Cream” “Hot and Iced Tea” (in the same glass) have mystified and delighted thousands of patrons.

“Sound of the Sea” is a dish he serves with an ipod inside a conch shell so that you can listen to the waves while you literally eat a food beach, constructed from various fish, a salty foam and “sand” made with tapioca and baby eels.

Novel as they sound, these dishes go way beyond novelty : taste, texture and ambiance are all carefully orchestrated to maximise the emotional experience of the dish.

Heston operates at a completely different level, and he exemplifies the notion of a consummate artisan: endless passion, relentless creativity, boundless imagination, tamed with discipline, focus and empathy, wrapped up in care, attention to detail and the utmost of finesse: tending toward perfection along every facet of what he produces.

Heston’s enthusiasm can be summed up as a hunger. He writes:

“I wanted to know everything that went into a top-quality meal, from the high standard of the produce and what it took to achieve that, to the subtle attention to detail that — invisibly but effectively — distinguished a great restaurant from a good one”

Perhaps that same hunger could be applied to what we do. Perhaps I could utter the same in my journey learning programming over the last ten years:

“I wanted to know everything that went into a top-quality APP, from the high standard of the SOFTWARE and what it took to achieve that, to the subtle attention to detail that — invisibly but effectively — distinguished great CODE from good”

One of the most inspiring things about Heston is that he is entirely self-taught. He toured France year after year in the 80s, soaking up the best experiences. He pored through classic texts and techniques, constantly fought to keep up with the latest and greatest in food preparation. It’s particularly inspiring for me: I have no academic training. Steve McConnell aludes to this: about 50,000 software developers enter the field each year, but only 35,000 software-related degrees are awarded.

Thomas Keller has been one of the luminaries in American cooking for decades. From his kitchen in Yountville, in Napa, have come alumni who are now world famous in their own right : Grant Achatz of Alinea in Chicago, René Redzepi of Noma in Copenhagen.

Keller is a bit like the Crockford of modern cuisine. He is a consummate professional, exuberant traditionalist, ardent perfectionist. His is widely regarded as the best classical French cuisine in the world today. For sheer tastiness, homeliness, and consistency, it’s hard to argue against his methods and his food.

Ferran Adria I know least about of the three figures I wanted to highlight specifically by name as inspiration for this talk. This is mainly because his restaurant, El Bulli in Spain, has been the most difficult restaurant in the world to get a reservation at, and at the end of this summer, it will close to become a full time institute dedicated to the advancement of culinary arts. Adria is hero to both Keller and Blumenthal. A wizard, a luminary, a modern day food genius.

For a long time, I’ve been fascinated by the notion of “the best”. Over time, I’ve come to accept that “the best” of anything only really applies to “the best right now for what I need”, but … but regardless, I love “best of” lists. I love the idea that a group of people would collectively get together out of mutual respect and say: hey, we know a bit about what we’re talking about: what are OUR favourites?

It’s one of those things that the web sort of, well, ruins. Giving everybody a voice doesn’t necessarily bring out the best : just the median, and the median is the median because by definition, it’s in the middle. I’m much more interested in the things that move people out of the ordinary, out of the middle of the road.

“Make no little plans. They have no magic to stir men’s blood and probably themselves will not be realized. Think big.”

One of the biggest thoughts for any top chef comes from “Guide Michelin.” The Michelin guide, a mysterious, highly secretive group of independent restaurant reviewers : still the gold standard for finding what they consider the best in dining around the world. The Michelin guide, and other guides such as the Gault Millau in France have moved some top chefs to dedicate their whole careers to the pursuit of perfection in dining. Some are moved to psychological breakdowns. Others to suicide.

Another list that draws massive hype and attention each year is the San Pellegrino Top 50 Restaurants in the World. Ranked by a select panel of writers, critics, restaurateurs and I guess people with that certain “Je ne sais quoi”, the Top 50 list ranks restaurants on the simple criterion of “how much did you enjoy the experience?” and will often contain restaurants with low or no stars : indeed, this year’s Number 1 for the second year running, Noma, has a mere 2 Michelin stars.

I have had the pleasure to dine at the hands of several of the modern masters of cuisine. Every time, I’m overwhelmed with what can be achieved with something so simple as food. I like the top 50 list because it ranks enjoyment as the most important aspect, and as a reference for great places to eat around the world, I’ve certainly enjoyed the places that it has led me to. Every year for the past few years, I’ve tried to eat at at least one or two from the top 5.

Dining at these places teaches me a lot about food and wine, sure. But I also learn a lot about life, about many things outside of just the experience itself.

What fascinates me is the cross over in how great ideas in food spread through experimentation and indeed, conferences : many of the top chefs in the world go to and build their profile at food conferences, just like we techies do with our ideas about how to move our community forward, and to learn from the best minds clustered together.

But greatness is often misunderstood, and leading a charge is often met with misunderstanding.

Jeff Bezos, last week:

“I believe if you don’t have that […willingness to be misunderstood…] in your […] culture, then you can’t do large-scale invention. You can do incremental invention, which is critically important for any company. But it is very difficult — if you are not willing to be misunderstood. People will misunderstand you.”

In 2006, Ferran Adria, Thomas Keller and Heston Blumenthal, the world leaders at the time in combining science and cooking, felt massively misunderstood.

As Blumenthal writes of the misunderstandings about where top chefs were going with their food inventions:

”[…] misunderstandings had bedevilled nouvelle cuisine. […] Gradually, it became packaged and watered down and appropriated by other chefs who hadn’t really grasped the principles behind it, and suddenly we were all eating kiwi fruit and squeaky green beans tied up with a chive off black octagonal plates”

To combat these misunderstandings, these chefs got together and published a statement in response to people focussing on the outcome of principles-based culinary invention, vs. the misunderstanding as novelty.

The document highlighted four points:

1) Three basic principles guide our cooking: Excellence, openness and integrity

Call out:

“We are motivated above all by an aspiration to excellence. We wish to work with ingredients of the finest quality, and to realise the full potential of the food we choose to prepare, whether it is a single shot of espresso or a multi-course tasting menu”

“Today there are many fewer constraints [ … than in the past …] and tremendous potential for the progress of our craft”

“Paramount to everything we do is integrity. Our beliefs and commitments are sincere and do not follow the latest trend”

2) Our cooking values tradition, builds on it, and along with tradition is part of the ongoing evolution of our craft

Call out:

“Tradition is the base that all cooks who aspire to excellence must know and master. Our open approach builds on the best that tradition has to offer.”

“As with everything in life, our craft evolves, and has done so from the moment when man first realised the powers of fire. We embrace this natural process of evolution and aspire to influence it. We respect our rich history and at the same time attempt to play a small part in the history of tomorrow”

3) We embrace innovation - new ingredients, techniques, appliances, information and ideas - whenever it can make a real contribution to our cooking

“We do not pursue novelty for its own sake.”

“We may use modern thickeners, sugar substitutes, enzymes, liquid nitrogen, sous-vide, dehydration and other non-traditional means, but these do not define our cooking. They are a few of the many tools that we are fortunate to have available as we strive to make delicious and stimulating dishes”

4) We believe that cooking can affect people in profound ways, and that a spirit of collaboration and sharing is essential to true progress in delivering this potential.

“We also believe in the importance of collaboration and generosity among cooks: a readiness to share ideas and information, together with full acknowledgement of those who invent new techniques and dishes”

What follows is a thought experiment. What are the universals that underly the creation of masterful food? What can we as software developers learn from that?



Last year I had the pleasure of working with the recently appointed MIT Media Lab Director, Joi Ito, on a small project building a flickr mirror web application over the course of a month.

Every other day, we would have a call, and Joi asked me to give him an overview of progress. During these calls, I would bring Joi through each of the libraries I’d added in the last iteration. I would highlight a particular, say, authentication library that I had used, and give a bit of background about why I was using that rather than anything else. I would tell Joi about the author of the library, a bit about where they worked, why I respected them, why I thought they did good work. I invariably found myself repeating the phrase: “He’s a really nice guy.”

Incidentally, that was the project that I did the majority of work on a client side framework of my own: eyeballs and it was exhilarating to be on the producer side of things for a while.

What it made me realise is that, subconsciously or not, I take great pride in meeting, and indeed thanking the people who build the tools I use. By filling in that context, I feel like I filled a gap that so often prevails in today’s open source development: where did all this code come from: where did originate? What’s the story behind the code?

A great meal begins in the imagination of a farmer. Picture the scene: He awakes, 3/4am. His first thought is not: “how can I scale my farm to make more?”. His thought is: “how can I best tend what I have?”. His next thought is not: “I must grow and sell as much as possible”, his next thought is: “how do I ensure that I will be here tomorrow, and able to keep growing?”

  • sustainability

Top chefs promote sustainability as an art form. They demand the highest, the HIGHEST quality in their ingredients, and quality of food is not something that happens at scale. It happens through careful cultivation, over time. From careful tending of the soil, the earth and the minerals in the land for the most flavourful vegetables, to extreme techniques such the feeding of beer and massaging of cows backsides to improve the quality of wagyu meat.

  • connection

The other trick is that top chefs get to know their suppliers intimately. They know their names, they probably know their families. There’s a connection there that goes all the way from the imagination of the farmer, through their hands, through the earth, to the produce all the way to the kitchen.

Until I finally managed to taste Kobe beef recently, by far the best piece of meat I ever ate was at the hand of Thomas Keller in the French Laundry. What was interesting though was that on the menu, it wasn’t just listed as “Calotte de Beouf Grillée”: no, the origin and story behind the beef is too important, so the maker takes pride of place in the title on the menu: “Snake River Farms Calotte de Beouf Grillée”.

There’s a care there, a care about not only the quality, but the origin of every last ingredient.


Wil Shipley wrote an article recently about “farming vs. mining”. He writes:

“In the mining model of software companies, the charismatic, flighty founders and their investors stand to make a lot of money. Their workers, their customers, and their secondary investors all get boned, because these companies and their products tend to suck.”

“The people who really change the world are farmers. Steve Jobs works constantly on his products, every waking minute of every day. He lives and sleeps and breathes them. He’s obsessive and crazy and kind of scary — but he’s trying to build something. He didn’t just say, “Here’s my idea: smart phone! BAM! Go make it happen. Ima jump in the sauna.” That simply doesn’t work. God is in the details. In the implementation.”

What is ironic about today’s society is that we all have the resources and tools to be farmers. A lot of us simply do not have the patience.

Because when I know the person who wrote the code, my opinion of it changes. I have a relationship with that code in the same way as I have a relationship with an author.

Conclusion #1: The origin of each and every piece of software that I use is important. Meeting, thanking and honouring the people behind the code should be a fundamental part of what I do in building software.


Written above the kitchen door in Thomas Keller’s kitchen in The French Laundry is the word “Finesse” : and below it a statement that the aim of perfection in food is unattainable : you can only strive to provide an environment in which people will feel at home.

I had the pleasure to get a tour of the kitchen with Tyler, one of the folks that was working there at the time. His role was “expeditor” : the eyes and the ears of the kitchen. The third course that night was butter poached maine lobster, to be followed by tete de cochon. The tete, it seems, has to be cooked at the last minute, to make sure that it is perfect when it hits the table.

Tyler told us later that he was watching us as we ate our lobster. I finished my plate, and my friend Simon his. My other friend, Dave was on his last bite, and as he lifted his fork to his mouth, Tyler called to the chef: “Fire! Fire!” … just as he said this, we must have been having a very exciting conversation, because Dave put his fork down, and didn’t finish. In the kitchen, oblivious to us, all three plates were trashed and fresh ones prepared.

The kitchen of a top chef can be the furious, stereotypical loud, firepit that the media likes to convey. Furious, hot, high pressure: yes, but typically, there is only one voice in a top kitchen, and typically, they do not like to raise their voice to be heard.

Chefs abide by the rule of “mise en place” ; that is, your tools laid out, your ingredients prepped, your workstation clean and tidy. Mise en place ensures that everything is in its right place, that the conditions for producing the meal are set : organised, ready.

And this is where training kicks in. Taking ingredients and constructing dishes at high pressure that transcend the sum of their parts. Skill, combined with ingredients and tools producing delectable results.

Throughout the whole process, respect abounds. Respect for the executive chef. Respect for everyone in the kitchen. Respect for the customer. Respect for the ingredients themselves. This respect permeates the whole experience.

Underwriting every top chef’s ethos is their ambition. To “affect people in profound ways”, Along with the ambition, though, is that relentless creativity. The will to surprise and delight, but to do so while constantly searching to move people in what they do : emotionally, empathically … blending the tastes, flavours, textures, smells and ambiance to create experiences far more than simply breaking bread together. An obsession with ensuring that the experience is perfect, every time.


The programmer’s kitchen is the terminal, the text editor, the browser, the computer. We can learn a lot from the masters in the kitchen.

But what is my mise en place?

If I was to build an app today, taking direct inspiration from the masters of cuisine, what would I do? Well, I guess, subconsciously, I already do a lot of it.

At the fundamental level, using source control, which thankfully, is easier than ever these days. Choosing my tools, carefully trying to balance my skill, their appropriateness and how they fit me and my methods.

What matters though is not so much the tools themselves: what matters is that I care. And what matters is that respect.

Do I respect the origins of the tools I use enough to attempt to solve my own problems, to question myself before planting blame elsewhere? Do I respect my co-workers and future users of this code to write a solid README, to carefully construct unit tests, to write code that explains itself as much as comments ever would? Do I respect my users enough that I won’t short change them on how features work. Should I really make them wait for a response from the server when I can update an element straightaway, with just another bit of work.

There is a long list of things I could ask myself about how to create a fine web app experience, but fundamentally, I can find the answers by asking the simple question: who do I respect the most, and what would I do if I was building this for them. Every time.

Conclusion #2: Our tools are important, but more important than the tools themselves is respect. Respect for the tools, respect for those who created them, and respect for those whom we work together with, and whom we serve to create things for.


  • presentation

Upon entering The Fat Duck, I was surprised at how normal the place felt. Pristene, starched white table cloths, a simple bowl of olives. The first course “Lime Grove” changed any impression of normal that I had. “Lime Grove” is “Nitro Poached Green Tea and Lime Mousse” : your server brings a bowl to your tableside, liquid nitrogen evaporating in an animated cloud above the bowl. A canister is produced, from which a blob of foam is squeezed on to a spoon, which is tossed into the liquid nitrogen, before being plated and puffed with green tea powder. One by one, this process happens, ladies first, around the table. As you pick it up and pop it in your mouth, the waiter subtlely spritzes a lime scent in your face, and as you bite into the iced savoury merangue and it explodes, the smoke that has gathered inside it, mixed with the green powder topping puffs out your nose.

I could spend a whole presentation retelling Heston’s story behind the Nitro Poached Green Tea and Lime Mousse. Suffice to say, he has spent seven years perfecting the recipe, making small changes in presentation, texture, technique and finesse, to create a tightly coreographed, orchestrated, pin perfect experience of the freshest, zestiest opener to a meal that I have ever experienced.

And that was just the first course.

The nitro poached lime green tea mousse is one bite, yet the experience of it is so much more.

All through my experience eating at these places, I’m constantly delighted by the attention to detail. At Pierre Gagnaire in Paris, a silver slab is provided to rest your knife on. At the French Laundry, midway through eating foie gras and brioche, a fresh warm brioche will be served if you take your time getting through the first one. And heaven forbid you try to pour your own water.

What differentiates these places is that things happen without me noticing. No-one ever has to come to the table and say: “Is everything alright here?” It just always is.


The fundamental lesson here I think is that perhaps, I as a developer sometimes focus on the machine before the person. I move on once a unit test case passes or a condition is satisfied. I don’t focus on the extra, little things that turn a seemingly simple, mundane thing into one that glistens with excitement.

Too often I find myself moving on without taking that extra step: now that I have the functionality, what can I do do improve things from a human point of view.

Conclusion #3: People are the centre of every step of the process of making things: People are the origin, people are the makers and people are the consumers. Putting people first—empathy—is fundamental.


What the amazing table experience at these restaurants also amounts to is this: with food preparation, things inevitably go wrong. Someone won’t be happy. Dealing with natural products always warrants some degree of risk. The thing is, a poor food experience can be rectified by excellent service.

No amount of food, however creative, can make up for an unpleasant experience.


It’s a simple point, but it applies just as fundamentally to software. Time and time again I see it: people willing to forgive defects in software if they are backed up with a voice that cares.

This brings us full circle back through all of my points: it starts with the people, the stories, the origins, it continues through the people who put the ingredients together, and it is carried through with a focus on the people themselves. All our problems are really people problems.

Conclusion #4: I must accept that nothing I do is perfect, but that through dedication to the other factors in what I do, in how I present myself and the things I make, I can make up for the fundamental tragedy that true perfection is impossible.


  • emphasis on experience, respect, food, craft : not profits

So here we are: 4 conclusions:

1) As a principle, I care about the origin of the ingredients of what I build 2) Respect is paramount in everything I do : respect for style, respect for tools, respect for the people I work with and the people who will consume what I create. 3) Moving people is paramount. From the moment I conceive of an idea, I’m motivated not only to change the world, but that as a result of what I create, the world is somehow better. 4) Finally, acceptance. Acceptance that perfection is really not attainable, and that we can augment our search of perfection with the atmosphere that we create.

Many top chefs do it for the fame, the celebrity, the crazy lifestyle.

But we don’t have a Gault Millau, or a Guide Michelin for web apps, and it would be impossibly subjective to find a common enjoyment metric for all of the web applications that are out there.

That said, we are often drowned in the need to maximise conversions, to “go viral”, to get big fast.

The legendary French cuisineur Auguste Escoffier’s quote adorns the opening page of Heston’s “Big Fat Duck Cookbook”:

“Cooking is a science and an art, and the man who puts all his heart into satisfying his fellow men deserves consideration”

Programming is also a science and an art.

This is an appeal to myself to slow down. An appeal to take a look at what I build: personally I do not want to appeal to the lowest common denominator, nor do I want to game anyone into anything that they would not otherwise choose. I want to sit on the forefront of technology, building fine web applications, elevating the experience, cultivating the produce, and ultimately putting all my heart into satisfying my fellow men.

Who’s with me?

Thank you very much.


I agree with this:

Most of the fundamental ideas of science are essentially simple, and may, as a rule, be expressed in a language comprehensible to everyone.

Albert Einstein


I hell yeah'd on this:

My RailsConf Talk 2011

“And all these things you say never matter to anyone And all these things you’ve said never mattered to anyone Well they matter to me

Rise up and bathe your face in the morning sun Put a good dress on this day has just begun And it matters to me

You open your eyes and it’s so perfect it hurts And only I know what it’s worth

So tired of trying and failing Trying to make some sense of this all I’ve got no idea of where I’m going Just a haunting hint of where I went wrong

I think maybe you can help me Cos I think maybe you can see I think maybe you can help me Cos I think maybe you can see

That it’s so perfect it hurts All these things you said never mattered to anyone”

This is my third RailsConf. Who’s here for the first time? Second? Third? More?

You’re all very welcome. Very very welcome. Especially newbies. Some day, you can be like me. Cos I know you’re dreaming about how you could be checking in to an airport hotel in Washington at midnight when the bar is closed so that you can eat cheetos and snickers for dinner.

Seriously, you’re very, very welcome. Thank you SO much for having me. Thank you. Thank you. Thank you.

I have no slides. Where we’re going, we don’t need slides. Fold away your laptops, hold on to your seats, because shit is about to get emo.

The other Meta: On Rails and What Matters to Me?

I am a troll. Every time I read something, see something out there, I’m on the attack. I’m quick to criticise. To find fault. To ask: “why would I need that?”. To catch folks out. To bicker and attack. The more I learn, the more I troll. The more I troll, the more I learn.

I just don’t write any of it on the internet.

I am a hater. Every day, I direct so much hate at so many things. So much anger quietly channelled here or there. A lot of it at myself. Sometimes I wonder why I bother to do anything. Not suicidal, but just: what’s the point? You don’t belong, Paul. You don’t belong.

I just don’t write any of it on the internet.

I am an egoist. I’m constantly aware of my identity. Is he looking at me? Is she listening to me? Whether or not I actively go out and seek to craft a particular persona, I often slip into the self-centered mind-set, and I get frustrated at who I am, and why I am not a better me.

I just don’t write any of that on the internet.


I’m 27 years old. I have a girlfriend. We live together. I have a wonderful nephew and a beautiful niece; 4 of the best siblings you could wish for. I love and thank my parents very much.

Every morning, I open my terminal, fire up Textmate. I type “cd Sites/blah/blah/blah” and I run “git pull”. I run “passenger start”. I run “bundle” and I run “cucumber features” and “rspec spec”.

Before all that though, I take a deep breath, and imagine sitting on a wooden balcony in a villa in Tuscany. I imagine sipping a fine Montepulciano and chewing on a triple cream Piemonte cheese.

Oh, wait. No. I’m at my desk, staring at a backlit screen, about to enter the wonderfully lavish world of Ruby on Rails.


What’s it all about? REALLY? All this syntactical sugar. This modular design. The managed dependencies, multiple migrations, the lazy evalutation, the autoloading, the bleeding edge, the cream of the crop, the …


Wasn’t it all much easier before without all of this crap?

Trolls gon’ troll. Haters gon’ hate.

The Other Meta. On Rails and What Matters to Me.

The first thing that comes to mind anytime I think of this question is music. Why do I think of music when I think of why I enjoy software?


I grew up in a family that was more or less music obsessed. My dad played in a band and actually toured the DC area for six months playing Irish ballads for drunken Americans. In the car on holiday, we listened to everything from the Beatles to Simon and Garfunkel, Van Morrison, Nancy Griffith, the Travelling Wilburries. Really fantastic stuff.

Music is amazing because it transcends language and lives in the world of direct emotional experience. You don’t have to learn anything to appreciate a piece of music.

Cliché and awkward as the term “rock star” is, today’s conference whore workaday software craftsman agile evangelist developers really are akin to working musicians, who travel the world spreading crazy ideas using tools that go beyond natural language, sharing ideals and challenging people to reject the status quo, daring people to throw down false idols and invent their own future.

Music is also an expression of an abstract construct: musical notation, an ethereal thing, a state machine with a programmable instruction set. A bridge between the natural world and the world of logic, that brings people together with shared emotional experiences. Music takes a logical base, converts it to a physical manifestation, but it is consumed via a one to one emotional connection between the artist and the listener.

Software is exactly the same. Music matters because it joins us all with a common language. Code and the resulting software has the same effect.

So what’s this other meta all about?


Metaphysics is an abstract term used in philosophy to represent things that are “beyond physics”. Things that are beyond physics. There is some debate in general about whether metaphysics itself even exists. But that’s seriously meta.

Indeed, there is debate about whether consciousness exists. Or whether anything exists. But anyway.

Back in the Ancient Greece, there weren’t too many computers for people to hack on. Back then, we all would have been philosophers, changing the world with just the power of our minds, and writing it all down.

Let me tell you, if Aristotle was alive today, he’d be super excited about the upcoming asset pipelining in Rails 3.1.

One of those “knowledge-hackers” was René Descartes. Descartes’s meditations on first philosophy formed the basis for much of the succeeding thought on the nature of reality.

Let’s take a journey then, for one small moment, on a Cartesian meditation. We close our eyes. We lose our grip on the things we call our bodies, focussing on only our minds. We become aware of our thoughts. Just our thoughts. Not inside our heads, because we’ve let go of any concept of a body. Just pure thought.

Then we go a step further, beyond our thoughts, and we consider what it is doing the thinking.

One of my favourite quotations from all of philosphy is from Wittgenstein:

“And from nothing in the field of sight can it be concluded that it is seen from an eye.”

The same applies here with Descartes: we’re attempting to look somewhere with our minds that we potentially can’t even conceive of.

Welcome, folks, to the edge of reason. Out here, nothing matters. Things simply are. A causes B, and C follows. Logically. Out here, you can argue anything as long as it is valid. In fact, out here, you could probably invent new logic.

John Rawls appeals to the edge of reason too, in his Theory of Justice, where he defines the modern concept of justice. Out here, we’re all bodyless. Just floating about. There’s no materials, so no wealth. In Rawls’s version, we all know what the real world is like, but we don’t know what body we’re attached to, and we have no sense of who we are. In that situation, Rawls concludes, the only rational decision is to agree on a that we are all equal.

Basically: when we’re all equal, we gotta focus on the things that matter most, irrespective of wealth and position.

Anyway, we’re still here, hanging out at the edge of reason. It’s pretty perfect. Shit is good here, because, well, good and bad are equal. Up and down are equal. Everything is equal.

But there’s something about it. There’s something not real about it. Oh shit and suddenly you realise, that it’s all a dream. That your boss is calling, your customers need your help, your girlfriend wants attention or your mom needs to print a photo of her grandchild. Somebody wants you to fix something and as you sit up from the bed and the physical world hits you like a jackhammer popping a balloon, you’re reminded that that fifth gin and tonic last night was the one they call “the one.”

My name is Paul, and I am a Rails Developer.

The other meta is the stuff that joins us all together that is not code. The common themes that keep me coming back to Rails, even after I explore other technologies and techniques.


I love open source software. Watching Open Source software get developed is like watching evolution happen at a million miles an hour. A branch here, a fork there. A decision here. Rails has what, 1886 contributors? Did you know that _why the lucky stiff has one commit?

Have you ever read the Rails commit history from back in 2004? It’s a real tear-jerker. Anyone remember rhtml? fastcgi? Back when REST meant taking a break between coding. And whatever happened to lighttpd?

It reads like a film-noire history. It’s an education in the evolution of large scale software development. 7 years of evolution, open for everyone.

Imagine you could see every decision your local government representative made for the last 7 years, along with a little note explaining what they did and what just changed.

Open matters.


John Gruber gave a presentation last year at DConstruct about the “auteur theory of design”. He posited that the quality of a project is a function of the taste of the person, the auteur, who has the most final decision making in the project, rather than the combined talents of everyone involved. We all know who the auteur of Rails is.

Every orchestra needs a conductor. Rails, to me, is a wonderfully orchestrated manifestation of its stated goals: to be opinionated, to be simple, to be sustainable.

It is by no means perfect. But as my taxi driver on the way here told me:

“If you want a perfect world, then you better find a better world to live in.”

Rails 3.1 is adopting the CoffeeScript transpiler as the default for writing your javascript in new apps. CoffeeScript is no more than a year old. Make no mistake though: it’s a big deal. At JSConf, Jeremy Ashkenas’s presentation was “hijacked” by Brendan Eich, the author of javascript. Brendan loves coffeescript, and will be putting forward proposals based on coffeescript for the next version of javascript. When it comes to getting on board with nascent technologies that carve out the future, you’re in good hands with Rails. REST is not a commonplace buzzword by accident.

Jeremy is a true auteur: the numerous forks of coffeescript and the number of things he says NO to are testament to that.

Big, ballsy, yet careful decision making that ensures we’re riding a wave of innovation, keeping Rails as the pack leader, the framework that the others copy, borrow and steal ideas from.

Rails 3.1 is adding jQuery as the default javascript framework choice, even though Prototype development has been synonymous with Rails development for a long, long time.

Well, duh, about time, but again: this is a carefully curated decision, not made in haste, not made in anger, just the ability to go with the flow as well as riding the wave. If it’s NOT the right decision, or something better comes along, I’m sure we’ll see that take jQuery’s place in time.

Finally, last year we saw Rails 3.0 adopt XSS protection by default for the first time. XSS protection by default was a principle oft poo-poo’ed on the Rails mailing list in the early days, but it was encouraging and rewarding to see Rails adopt this obviously beneficial feature after seeing Django adopt it successfully without blowing up any apps.

Curation matters.


A good conductor makes a piece of music his own. Let’s face it : there are tons of ways to write a web application or an API. The constraints that Rails provide are choices, made my folks who want to maximise their OWN use of the framework, and by extension, choices made on our behalfs as users and community members.

Rails gives you a paintbrush and a canvas. What really matters is what you put on that canvas.

Rails’s constraints are one of the most oft-criticised points of Rails, particularly with regard to ActiveRecord.

Like most constraints though, if you fight them, you will tend to end up unhappy. Kayaking upstream just isn’t going to work, but if you kayak downstream, the river’s gonna take you.

Boating analogies aside, Rails’s constraints really aren’t all that big of a deal any more. If you run with them, they’ll accelerate you from 0-first feature super quick. If you really need a custom setup, there’s never been a better time to plug in components that better suit your use case.

Constraints matter.

Feeling Like I’ve Made a Difference.

Take a look at the little donor card beside your nametag in your LanYard. Last year, the release of Rails 3.0 raised nearly $40k for Charity:Water. It’s always hard to judge the impact of charitable donations, but everything from the RailsConf 5k to Ron Evans teaching schoolkids at BohConf yesterday. I don’t know about you, but I definitely feel the undercurrent of GIVING when I hang out here.

Charity matters, but Rails gives us another kind of empowerment. Look at all the things you don’t have to do when you’re building a Rails app. It’s pretty easy to underestimate just how empowered we are as Rails developers.

Empowerment is important because it is democratising. It takes away many of the lines between big and small, between wealthy and poor. It’s really hard to measure economic effect of software directly. In his post “The Great Ephemeralization” recently, Timothy B Lee argues that “the real lesson […] may not be that the American economy is stagnating, but rather that the government is bad at measuring improvements in our standard of living that come from the software industry”

Rails is part of that. With the abundant ecosystem of gems, with the relatively low friction of getting up and running, and with the constant focus on programmer happiness and productivity, Rails makes each one of us wealthier, without taking a penny from our pockets.

Empowerment matters.

Using Tools that are built for people

I’ve used plenty of tools both Ruby and not so much in my 10 or so years as a budding hacker. Sometimes, I feel like I’m missing something, sometimes the programming metaphor as a human machine interaction is a lot less human and a lot more machine. I get that this turns a lot of folks on, but heck, so do transistors and resisters and single coils. Rails has always definitely had that timeless characteristic of being “easy to learn, hard to master”.

Rails helped me to learn programming by giving me lots of the product and much less of the history. gem install rails. bundle install. script/server. There we go.

Again, there’s lots to improve, and maybe it will be something else, but, even 6 years in, I appreciate the little human touches. Code generators, scaffolding, inline comments with helpful instructions and context, syntactical sugar. Even if I don’t use a lot of it any more, I still really appreciate that it’s there.

I like being treated like a person, rather than a machine. That matters.

Stories about attention to detail

I don’t have time to go through all of the wonderful care and attention to detail that Rails has given us down through the years. One in particular spans almost the entire development history, and since I mentioned _why’s commit earlier, I’d like to draw attention to that. Does anyone know what the commit was?

Why introduced Object#blank? to Rails in 2005 for version 1.0.1. Object#blank? is a bit like Ruby’s “unless” statement : you don’t really, really need it, but it’s such a joy, such an expressive way to test any object.

Three years later in 2008, we got Object#present? the seemingly obvious inverse of Object#blank? … simple expressive, a joy to use.

Skip to last August and Rails 3.0.0. I was lucky enough to follow the decision making in both the mailing list and the rails core chat room for the addition of Object#presence. It was at least a couple days, maybe weeks and there were various suggestions. In the end, again, presence seems so obvious, and it’s reflected in ActiveRecord’s validators, but when other suggestions such as “existence”, “objectifpresent” etc. are on the table, it’s the careful attention to detail that matters.

Make no mistake, these are one line methods ; but they were the one-liners I longed to have by default when I was making the transition from 2.3 to 3.0.

Care and attention to detail matter.


I can’t give a talk about what matters to me without mentioning the word “community”. Community, though, is a loaded word. It sort of makes it feel like there’s something that you have to enter in to, or be born in to, or have a right to be a part of.

Being part of the Rails community is more about what you don’t do to remain a part of it. I’ve never hung out with a more inclusive bunch of people. People so enthusiastic at every level. People willing to listen to me tell stories about my nose hair, or sleeping patterns or other nonsense, but also people willing to talk to me on their level, and let me smile and nod, but as a peer whilst talking about computer science principles, techniques and tools that I can only hope to understand within my career.

5, 6 years ago, my decision to learn Rails wasn’t just a decision to learn a web framework. It was a door to wonderful, ongoing relationships with great people. It was a channel to empassioned discussions that started with code, but blossomed way beyond. It was the beginning of so many friendships, both within the Rails sphere and outside.

Community matters.

PLAY MUSIC (Beethoven’s 9th)


And so we come to the finale. The deep, soul searching moment where our protagonist pours his heart forth, meditating on what truly matters. rails generate meaning. 0:28 (BIG CHORD)

0:40 There are some things that Rails simply cannot generate. 0:47

The Other Meta

A lot of the “magic” within Rails is the meta-programming power provided by Ruby itself. Code manipulation that allows you to focus on building applications rather than servers; scoring your application using a shared notation rather than re-inventing a new notation from scratch. A notation that quickly makes sense and is efficient.

1:10 The “magic” of the Rails community is the lengths that people here go to ensure that things are consistently amazing. Rails teaches us that code is art. Art divides people. That’s ok. I like the divide.


So anyway. I’m nearly done talking. What really matters are the bits in between. Family, Friends, Loved ones. I never met my grandparents, but for me, it’s my mother, my father, my brother and sisters, my girlfriend, my nephew, my niece. Family is always first.


But that’s something of a Cartesian meditation in and of itself. When it comes to reasonable reflection on the important things; for me, saying that family comes first is an absolute. But it has to be said.


What’s next though, is something more fundamental to us as programmers, as makers. The tools themselves don’t matter that much. It’s not that it’s Ruby or Rails or Coffeescript or whatever.

What matters most is that these tools are the products of Creativity and Imagination.


Creativity and Imagination

Dear Rails,

You’ve been with us for 7 years now. You were always a cantakerous kid, with your strong opinions and your rebellious nature. Please don’t lose that.

I love how you take away the boring bits and let me focus on the blank canvas. It’s hard, and sometimes I want to break the canvas apart just for the sake of it, but I think you’re cool with that too.


I love how you challenge me to be creative with everything I do. Because you are carefully crafted and because you come out of the wash so clean, you encourage me to keep things clean, to keep the things I do carefully crafted.

Rails, you took the status quo, ate it up and crapped it out. But that was 7 years ago. Now you are the status quo. You’re no longer the upstart, but I feel like maybe, maybe your day is not done.


As long as you stay open, Rails, I think I’ll be in good hands, but only as long as you remain carefully curated. As long as the constraints you give me are based on your original goals ; my happiness, my effiency, my ability to keep going. As long as I can sit down and within a few keystrokes, feel like I’m the master of my domain. As long as you continue to empower me ahead of my peers, I’ll stick with you. As long as you feel, Rails, that behind you is someone who gives a damn that I matter, then I’ll still enjoy being here. As long as I keep noticing details that entice, delight, tickle me to use them and explore them, then I’ll keep using and exploring.


As long as I keep meeting the kinds of people, Rails, that I meet when I hang out with you, then I’ll keep coming back. As long as I continue to feel humbled when I’m surrounded by so many damn, damn good people, Rails, I’m damn proud to be here.

Rails. Sometimes we don’t get along. Sometimes I hate you. Sometimes, I know, you hate me too. But I keep coming back to you. You’re like an artist, Rails. You can be insufferable, unbearable at times to be with, but deep down, I don’t know anyone with quite the imagination, quite the creativity as you have.

Thanks for the good times, Rails,


Homage to _why day

At last year’s RailsConf, Glenn Vanderburgh announced _why day “to remember Why’s contributions to our community and culture by hacking just for the fun and joy of it”. _why day is really cool. But _why is dead. He’s Mary Poppins, and hopefully, we’ve taken our spoonful of syntactical sugar.

4:50 We can all be a little bit _why in everything we do. Experimentation and creativity don’t have to be the realm of the eccentric. Art and magic and poetry and rhythm … who’s going to say no to that?

5:00 Creativity and Imagination matter.

5:05 I have a new name for _why day. It’s called today.

Thank you.


I prepared this:

My JSConf talk.

I was scheduled to appear on the lunchtime slot both days at JSConf this week. Unfortunately, I completely mis-represented myself on stage. We decided, I think fairly, that it wouldn't really be appropriate to take to the stage on the second day. I had written a script, though, which is a bit more representative of me, rather than some kind of lame "entertainer." Here it is, unedited:

William Faulkner wrote:

“Always dream and shoot higher than you know you can do. Do not bother just to be better than your contemporaries or predecessors. Try to be better than yourself.”

Last November, at JSConf.EU 2010, I was lucky enough to see Chris present “Community.js”. Not only did his message resonate with shivers down my spine, but it was delivered in the presidential style that is close to my heart. With apologies to Chris, I’m falling back to that style today.

My story begins 2 years ago, in Berlin.


JSConf.EU was one of the most exciting conferences I’ve ever been to. It tasted different to other conferences. Round tables, free booze and … every where I looked, someone I admired.

It was the conference that Ryan announced node.js. An historical moment, some might say. I’ve talked to folks since about node far and wide, and damn am I proud to say that I was there, in that crowd, hacking on javascript while Ryan was talking about the future. Now node has its own conference.

Ryan is here. If you see him, you should say hello, because he’s really a very nice guy.

I met Amy Hoy and Thomas Fuchs at that conference. We’ve become friends, but before that, they were outspoken heroes of mine; I’d admired and used their work and the stuff they wrote for years.

Thomas is here. If you see him, you should say hello, because he’s really a very nice guy.

That was 2009. I want to go back another 2 years. Summer, 2007. Eamon Leonard and I were stuck for a place to work. We all wanted to do amazing things on the web, but Dublin had little or no place for the real grassroots to hang out. We co-opted an office, and took in blow-ins every so often. Last year we organised a conference called funconf, which I’d like to talk a little bit about today.

Eamon is also here, and if you see him, you should say hello, because he’s really a very nice guy.

One of those blow-ins was Jan Lehnardt. Often while travelling, I meet someone from Berlin, and I ask them “Do you know Jan”? Because I’m proud to know Jan. Usually they respond: “Everytime I say I’m from Berlin, people say: Do you know Jan?”

Jan is here. If you see him, you should say hello, because he’s really a very nice guy.

Skip back to the first JSConf. Twitter had been ablaze with praise for this amazing conference and the buzz was mighty so I bought a ticket early for the EU edition, because I wanted to support Jan, and indeed, I love Berlin. I think I even submitted a talk proposal, but back then, it wasn’t to be. I’ve wanted to be part of this since the start.

At the end of the conference, gee, what a conference, Malte Ubl and Holge Blank turned on the projector screen one last time, and who appeared on the screen, but Laura and Chris. I didn’t know either of them, and my initial reaction was “who the fuck is this?” … but there was a spark in those eyes, even across the shaky Skype connection. Chris Williams, organiser of JSConf.

Malte, Holge, Laura and Chris are all here. If you see any of them, you should say hello, because they’re really very nice people.


Javascript is a bit like music. It transcends all borders, it’s a common language. Whatever your background, training, leanings as a developer, if you want to make interactive applications on the web, you’re writing javascript.

I’m a “Ruby Guy” : but what was magic about JSConf.eu, first time around, was that there were “Ruby guys” and “Python guys” and “PHP guys” … but, nobody cared. It was just full of folks passionate about the internet, passionate about code.

After the conference was done, and every single party had dried up, Eamon and I were only really beginning to get going. As he ushered the last few folks out, Jan whispered, in hallowed tones “The Github guys are coming”

The Github guys are coming. This was I think the end of Github’s first year, and they were growing and growing. I idolised these guys. They had been at a conference in Poland and were about to make an impromptu stop in Berlin. At midnight.

Berlin is one of the few cities in the world where you can truly drink all night. And so we drank. From the remaining beers at the after-after-after-after party, through several metal bars and ultimately, a bar that has not closed in 40 years, we drank through a night never to be forgotten.

All that night, as Amy and Tom had said, as others had said, Tom Preston Werner, PJ Hyett and Scott Chacon from Github said: “Give us a reason to come to Ireland”

My response, the whole time, was “we’re planning a little fun conference … a fun conf” … I will always remember Scott Chacon’s reply:

“I’d LOVE to come to a fun conf in Ireland!”

Over the holidays, we got together and brain stormed. We were just about to end our friendship abruptly when Eamon sparked off an idea that captured my imagination: Why don’t we put the entire conference on a moving bus while travelling through the Irish countryside.

And so funconf was born. 10 months, a volcano, an ash cloud and a lot of panic, planning and botched accounting later, 70 of the finest nerds in the world were travelling, in a bus, to discuss failure, success, the internet, more failure and beer.


Funconf was a massive success. We’re doing it again this year: we’ve booked a castle in the south of Ireland and we’re almost sold out.

But funconf was also a pretty big risk. For a first conference, choosing a moving venue might not have been the best choice. We had CTOs and CEOs and founders and yet more idols on the speaking and attendee list. Money flew in and flew out. At various points, things didn’t always seem to be going so well.

We stood to make fools of ourselves.


But risk-taking is one of the key ingredients of JSConf and the spirit it represents. Listening to Chris speak at JSConf.EU last year, I realised something.

When Eamon and I cooked up funconf, the over-arching question was “how can we make an event that people will really, really love? How can we be different and put the attendees first? How can we bring people to Ireland and have them leave thinking: holy shit, that was amazing”

In a way, we wanted to be unique, original. We wanted to stand out of the crowd. We wanted to be individual.

But here’s the thing:

This is a team sport.

Community.js is every bit as much Community.net, Community.php, Community.py, Community.rb, Community.pl, Community.ss, Community.st, Community.f90.




The conference that you are encouraged to sit next to folks and talk, chat and drink. You don’t hear the phrase networking, because people do not network, machines do.

The conference that pays for your food and looks after you all day, all night, because you are the customer, not the product. Because eating together is what great teams do.

The conference that takes you in as one of its own, no matter who you are, looks you squarely in the eye and says: be a little crazy. Because let’s face it, we’re all a little bit crazy.

The conference that defies you to out-do yourself. To go home and challenge yourself. Because we always want to be inspired by someone new.

The conference that is fashioned not by focussing on profits, not on selling products and not on taking every opportunity to advertise this or that. Because profits, products and advertising are far inferior to trust, encouragement and love.

The conference that is born out of love for what we do, love for who we are and love for making a difference. Because love encourages people to drop their guard, and vulnerability brings out true creativity, inspiration and vision.

The conference that is your conference.


Javascript IS a bit like music. On the flight here, I discovered a wonderful, beautiful song from the French artiste Edith Piaf called “Le Chant D’Amour”. (start music) The chorus of the song cuts right through my heart to the centre of what I think drives creative spirit.

Si vous voulez bien écouter,         # Listen carefully
Je vais chanter un chant d’amour,   # If you want to organise a conference
Un chant d’amour banal à souhait    # Just think of your attendees
Pour deux amants qui s’adoraient.   # Like lovers
Si vous me laissez raconter               # Allow me to tell 
L’histoire d’amour belle à rêver, # the beautiful love story Alors, laissez-moi chanter… # now, let me sing


Please keep coming, thanking, encouraging, talking. There can never be enough participation, praise, encouragement, communication, great ideas, support.

Please keep introducing yourself, saying hello. We are an introverted bunch, but each of us has a voice.

Please keep representing yourself, your beliefs, because that is allowed and we often hide out of fear, doubt or otherwise. I want to hear your voice.

Please keep pushing me to better myself. I will never grow tired of that.

Please keep focussing on the things that matter. I love the feeling I get when I know that you care.

Please keep sharing the love. Mary Rose Cook put it so well yesterday: fall in love with your code. Fall in love with your code, bring that love wherever you go.

And here’s the thing. By design, JSConf is your conference. funconf is your conference. But maybe you have an idea for something that is truly YOUR conference.


It could be a meet-up that brings a handful of folks together about a topic close to your heart. Bring them together and talk.

It could be a mini-conf that invites an international luminary to speak to your local community. Ask them to come and talk one-on-one to the folks that find it hard to put themselves in front of a crowd.

It could be a code retreat, a dojo or a hackday, where you create an environment that lets people represent their true feelings about whatever they want.

It could be a startup camp, where you pitch people against each other in the name of changing the world.

It could be a conference on a bus.

It could just be amazing.

Keep taking risks, keep singing, keep dancing. Keep putting as much love into everything you do, as I see you guys do every day.

My name is Paul. I’m here. If you see me, please say hello. Thank you very much.

Annex Aaron, who was with me on stage, shipped an amazing open-source altruism project called "Code for Other People." You should check it out.


I offer this:

Irish? Want to go to Scottish Ruby Conf? Here's your chance!

I'm a huge believer in the power of conferences to inspire folks and to move whole communities forward (I think my last few posts of my talks attest to that.)

Last August, I bought two super early bird tickets to Scottish Ruby Conf, and promptly forgot that I'd done so. I've since picked up another ticket, so I find myself with a couple of spares.

I've spoken in the past about how I feel Irish developers are under-represented in general at international conferences, particularly the European ones, so I'd like to do something about that, in a small way.

Having spoken there last year, I can say that Scottish Ruby Conf is a really great conference, and the lineup this year is fantastic. Also: it's completely sold out.

Anyway, in the spirit of giving, and community, and money where my mouth is and whatnot, I'd like to offer these two tickets to two Irish Rubyists. I talked to my friend Jan about this, and he suggested I choose a guy and a girl who really want to go, but couldn't afford it, or wouldn't or whatever. I'd be willing to subsidise flights and accommodation too.

I'm not exactly sure of the kind of person to expect. Maybe you're an undergrad student, struggling in our shitty economy. Maybe you're a seasoned developer, unconvinced of the value of going to a conference. Maybe you're bootstrapping a startup. I have no idea. Surprise me. Convince me.

This is your chance: just email me at paul+src@hypertiny.ie with who are you, why you should go and why I should pick you.

In the spirit of Dave Thomas's RubyConf Keynote about encouraging more women in Ruby, my preference would be exactly Jan's suggestion: one guy, one girl.

So there you have it. Impress me, attend Scottish Ruby Conf. Go!

Depending on the response, I'll choose two people next Monday. The terms and conditions are: I call the shots, no purchase necessary. The conference is on the 7-9th April, so you need to be free then to go!


I was moved to write this:

Why The Beatles on iTunes Matters

It’s rare that I’m on the irregular side of a geek argument, but when it comes to the Beatles, I almost always sway the side of the fab four.

Today, Apple announced that the Beatles have arrived on iTunes. People are saying that this is anti-climactic.

That’s insane. Today marks the spiritual ending of 20 odd years of intense legal tension between Apple (computer) and Apple (Corps). Apple is called Apple because Steve named it after the record label set up by his favourite band.

Yes, that Steve, and the band was the Beatles. Apple fans often find it hard to understand why other folks aren’t excited by a new announcement or a shiny new gadget. If you’re underwhelmed by the Beatles announcement, then you now know how to put yourself in the shoes of people who don’t “get” Apple’s tech.

Loading the Apple homepage just now made me draw a breath. No other band in history consistently innovated, both musically, and in terms of pushing recording technology together.

For me, no other band consistently produced such complex music, that was so accessible to anyone at first listen.

Refined, simple and accessible, yet complex and innovative at the same time. Does that sound familiar? Make no mistake, this is a big deal, and a huge day.


I performed this:

My RubyConf Talk

I just gave the last of my series of presidential address style speeches, for this year anyway, at RubyConf in New Orleans, Lousiana. The strikethrough lines are titles that I used to organise the sections, but didn't actually speak. Here's the script:

I start with a quote From Wikipedia:

“During its debut weekend in the United States, the film opened at #1 grossing an estimated $23 million in 2,771 theaters.[52] In its second weekend it was #1 again, dropping only 31.2%, breaking Inception’s 32.0% record as the smallest second weekend drop for any #1 movie of 2010 [...] As of October 31, 2010 the film has grossed $79.7 million in the United States and $32.2 million overseas for a worldwide total of $132.9 million.”

The movie, is, of course, “The Social Network.” The number one movie of 2010 is about a programmer. Occasionally I hear people bitching about this trend of hiring “rockstar programmers” or “ninjas”. To them, I say: suck it. Today’s real “rockstars” are washed up stinky wannabes who dream of a world where teenagers rebelled against their oppressive parents. Well, you know what? The 60s was 50 years ago. The kids won. Look at Justin Bieber. Rockstars are dinosaurs.

I want to propose, here at Ruby Conf X, in New Orleans Louisiana, that we programmers, you and I, we are the rebels, the upstarts, the dreamers, the believers, the change-makers. And I want to say it in a speech.

The writer of “The Social Network”, Aaron Sorkin, is the writer of “The West Wing,” a show I’m a big fan of. If you know the show, I’d like you to imagine Sam Seabourne and Toby Siegler slaving away all night in the communications department to write this speech for me, drinking lattés to keep themselves awake.

Imagine I’m President Obama, only a little pastier, with some journalistic tendencies, and imagine he would know what you were talking about if you asked him about optimising for functions that call themselves. Imagine he cared, deeply, as much as you do, that you can pass blocks of code about as values, imagine that he wakes up in the middle of the night and thinks “Yes, I have it, the answer to EVERYTHING is an asynchronous event loop!”

Got it? Ok, I think we’re ready to start.

—The talk --

My goal for this talk isn’t to teach you about how to start a successful business. Tom Preston-Werner did a much better job of that than I can, and he just spoke right here, minutes ago. Also: I’m still on this road myself. But I’ve chosen to go it alone. I’ve chosen to build products, and to fund it by whatever way I can: in my case, simply consulting and using those projects to learn new things, write open source code, and figure out my next big idea.

My goal, more, is to fill you with a sense of wonder, a sense of holy shit, a sense of “Hey, this might just be for me.” If nothing else, I’d like for you to leave with a spring in your step.

I don’t have any big company insight, and I don’t have a whole lot of success to draw on myself. So, instead, I took to interviews of a few key players in the Ruby community to get their take on things. I also interviewed a few folks who don’t do much Ruby at all.

I have released one product, Ketchup, a web based note-taking app, and some of the folks I interviewed were instrumental in encouraging me to release that. And I organised a conference this year, funconf, out of which I made some great connections that I drew on for this talk.

I interviewed 11 people in total. José Valim and Mikel Lindsaar, friends from the community, are just starting out, contributing some great open source libraries and working on cool projects. Founder of Freckle, and famous for her early Rails cheatsheets, Amy Hoy, and founder of JS Conf, Chris Williams are a bit of a way along, sparking community by organising conferences and working on their own products.

Joe Stump from SimpleGeo, Tom Preston Werner, co-founder of Github and Jan Lehnardt, co-founder of Couch.io and core CouchDB guy have been doing the rounds these past 5 years, migrating from seed ideas to things that are really starting to get big.

DHH, creator of Rails, partner at 37signals & Tobi Lütke, founder of Shopify are poster boys of the Rails revolution.

And Rich Kilmer is a veteran: he’s been here since the start.

It’s a solid cross section. Talking to these folks has completely inspired me, and I want to share with you some choice quotes from those interviews, and some of the things that have resonated with me.

—The Community of Rubyists --

I think a good place to start is my chat with Rich Kilmer, CEO of InfoEther and board member of RubyCentral. Rich was at the very first RubyConf in Florida, 9 years ago, where he discovered, as he puts it, “some really interesing folks” at a conference that “was totally different to the JavaOne conferences” that he’d been to before.

“To come and meet a community that [...] talked about the features of different languages and the values of those things, dynamic languages vs. static languages. I never had those conversations when I was doing Java development.”

“It opened up a whole new world for me. The thing it taught me was looking at languages as ‘what is the right language to do the thing you’re trying to do?’”

“Ruby, for a long time, was not a place of entrepreneurship. It was a place of tinkering and people who loved the language. It was what people did on the side. Rails changed that. The Ruby and Rails communities are full of entrepreneurs.”

I chatted with Rich about the Ruby community, this Ruby community, is based on a foundation of language nerds. Matz has said in the past that he is, indeed a language nerd and described Ruby as being a mutant hybrid of Perl, Smalltalk, C and Lisp. And indeed, according to Rich, at that first RubyConf were heavy Smalltalkers who “looked at Ruby as a nice syntactic way of getting to the power of what they knew Smalltalk had.” A community of polyglots, a community of lovers of language. “People really cared about how their code read.”

From humble beginnings, maybe, but humble and significant.

A couple of years later, DHH introduced Rails, and the world exploded. He told me:

“Ruby is the technical lifeblood of 37signals. All the programmers at the company were brought together by a common love of the language.

“It has enabled me to find the best people I have ever worked with and it has given us the productivity to achieve amazing things with a tiny team.”

Pretty much everyone I interviewed mentioned 37signals. They created a movement, empowering developers to think about developing software in a completely different way. “Get Real” they say, and continue to reap the, literal, profits.

Joe Stump is someone who’s done the rounds in San Francisco startups, with a long run at digg.com, a co-founder of his own funded startup, SimpleGeo, and currently working on a bootstrapped project, where he’s using Rails. His perspective is that of an outsider to Ruby. To provide some balance, has his own opinion of 37signals and the movement they created.

“they’re lucky”, he says: ”, they’re fucking lucky that Rails is where it is now. Success is the combination of preparation and opportunity. Sometimes opportunity is based a lot on luck”

Regardless, what has sprung up seems to me to be pretty exciting.

“It’s almost like the difference is that there IS a Ruby community” says Tom Preston Werner, TPW, co-founder of Github “I’m sure there are PHP and ColdFusion communities, but when I was working in them, it never really felt like it was very close knit and the Ruby community very much feels like that. It’s the conferences, the small conferences that are put on. It’s the mailing lists, it’s just people meeting up doing users groups.”

And so, we have a community based around smart, creative developers, and a movement heavily influenced by 37signals, a flagship company who teach us how to be street smart “business guys”, bootstrapping our software companies.

Tobias Lütke, founder of Shopify, puts it really well:

“Ruby was kind of a counter culture thing, but one that was founded on really sound principles. It’s hard to realise now how big java was in 2005 and how heretical it was to say that what java was doing is actually complete shit. That’s clearly what the Ruby community said. This antagonised a lot of people, but it also made a lot of people check out what Ruby was all about, and a lot of people found out that this was a really really good system and a good foundation for building companies or building technology.”

He goes on to illustrate the evolution of the community:

“What happened from the top, a lot of very very smart thinkers in the programming community joined. You had this incredible influx of amazing thinkers coming in from the top.”

“And then on the second side, there was another incredible influx of people from the bottom and those were the designers. So the designers were great at what they were doing but they finally said, you know what, something about this Ruby thing connects better with me than with other programming languages, maybe I should learn programming.”

“What you had was at the top end, the really experienced guys, being augmented by these incredible thinkers, and then the bottom end, people who were starting to program who were massively influenced by these right side of the brain design thinkers, people with incredible aesthetics and sense of design and how things should be put together”

He tells a wonderful story of a cute experience at the first RailsConf in Chicago:

“in the elevator someone asked me what this conference was all about (an elderly gentleman). I told him this was a programming conference. He said he was really surprised because the people are way too well dressed for a developer conference. He said most of the people walking around seem to know how to put together a good outfit. That doesn’t look like a programming group…

It doesn’t quite look like when you go to the linux user group. It’s a bit of a different crowd.”

And so we have The Ruby Community: a well dressed, tightly knit community. A community of folks who CARE deeply about the language and about languages in general. A place of tinkering. A place of pragmatists.

A place, I think, that is a bastion, a harbour for entrepreneurial spirit. A good group for making change in the world.

—What the hell is an entrepreneur? --

One question I asked of everyone I talked to was “Do you consider yourself an entrepreneur? What does being an entrepreneur mean to you?”

I was all ready to say that “everyone I spoke to considers themselves entrepreneurs”, when DHH shot me this:

“Entrepreneur is an overloaded term these days and even in it’s purest form, only really relates to the start. You wouldn’t call Steve Jobs an entrepreneur any more. I prefer to just go by business owner.”

Judging from the other responses, I have to say, it’s easy to see why he’d think it was an overloaded term.

“a person who creates a business or a non-profit” “somebody who looks at a problem not with negativity, but with positivity and potential for finding solutions.” “An entrepreneur looks at lot of different ideas, taking the good ones, idea after idea, and executing on them on a monthly, quarterly basis” “Someone who is willing to assume a great amount of risk to see an idea exist in the world” “It’s like basically not taking no or impossible as an answer, ever” “An entrepreneur is someone who is happier building their own stuff than working on someone else’s stuff”

It’s a bit difficult to draw a conclusion from this melting pot of definitions. Where does a programming language even fit in to all of this?

It makes me think of Yehuda Katz’s keynote, at RailsConf this year, where he unleashed this rallying cry: “Ruby makes easy things trivial, hard things easy, and impossible things possible.” That, to me, that sums it up well.

—Bootstrapping vs. VC --

So I’ve talked about community, and a bit about what it is to be an entrepreneur. So what about bootstrapping?

Of everyone I spoke to, no-one thought that bootstrapping was a bad idea. Having spoken to countless folks on the topic in the past, I’ve rarely heard anyone disagree.

That said, it hasn’t shaken my interest in raising money through Venture Capital and Angel Investment, and before rejecting something outright, I want to know what it is I’m rejecting, and why.

Tobi gave me some super balanced advice on playing the VC game. “Taking investment”, he says ” is simply a tool in the toolbox”

About this “tool,” DHH illustrates the strong 37signals party line, epitomised in their blog series “Bootstrapped, profitable and proud”

“VCs aren’t evil unless you fall for their temptation. They will do “evil” things to protect their investments the best way they know how (often with crude and brute force). The base fact is that most software businesses just don’t need capital, so taking it is a bad idea.”

Joe Stump cites Zappos as an example of why VC can be a bad idea. Faced with a VC fund wrapping up its 10 year cycle, Tony Hseih, who wanted to continue growing the company, was essentially forced to sell to Amazon.

But we’re not all Tony Hseih, sitting on an already fantastic business, disappointed to have to settle for a $214 million dollar exit.

Rich Kilmer elaborates: “I would never go to a VC these days if you don’t have something that’s already bootstrapped”

“You want to go to a VC always with velocity. You don’t ever want to go to them with an idea. It’s too inexpensive to actually make the idea gain velocity”

“It’s too inexpensive to actually make the idea gain velocity” ... that’s the consensus here.

Tobi furthers the thought:

“The right way to build a company is to try to do it without financing. Maybe allow an angel investor in to get the contacts. Then create your product, try to get to profitability; follow 37signals mantra all the way. Once you get to the point where you know your business really well where you say ‘I know how marketing works if I put 1 dollar in I know that I can get 1.80 in 12 months later’ then you start having a very clear case where you say ‘if I could get a couple million dollars to put in to this’ I can get a couple more million dollars out. That’s when a company like ours (SaaS businesses) should really use what’s available from the VC community. And the VC community is ecstatic if you approach them like this. In fact they rarely get opportunities like this. They love it.”

Super, clear advice.

It’s also important to know your investors.

“They don’t really care about you as an individual. That’s something you should know about. They care about your company.”

“They’re investing in an entity. The entity is the thing that gets acquired or that is successful and makes revenue and not the individual.”

“They’ve been burned” says Rich “over and over again by the founder of a company not being able to go to that next level. There’s a time when you’ll most likely have to transtion out of your position of running this company.”

Interestingly, he leads on: “Really, if you’re bootstrapping your company, you need to think of it in exactly the same way. Do you really want to run a company with a thousand employees?”

Tobi goes back and muses about angels:

“Luckily, probably for the first time in this planet’s history, many of the people who have the money are also nice people. I don’t think that ever happened before. Many of the guys who got their millions through the Google IPO”, for example ” there couldn’t be a nicer crowd of people. Those guys are all amazing, every single one I’ve met. “

So there are nice people with money out there.

“I’m an engineer” continues Tobi ” ... I never really believed in all this handshaking and meeting people and all of that, but I’ve played this game for a couple of years now and it’s really amazing what can happen after you just meet people. You really do want introductions and you want to take these lunch meetings which people always recommend. It sounds stupid, but I’ve seen just absolutely tremendous things happen.”

Going back to the former Googlers, the nice guys with cash:

“Some of them are so rich, the amount of money they give away to these startup companies, doesn’t amount at all to them. To them, investing to startups is much like what normal people have an aquarium for. Think about it, it’s like these pretty fish, swimming around being all pretty and you can check it out, and you don’t even have to clean the fish tank. It’s really cool for them. It allows them to keep an ear to the ground and see what’s going on. You know, many of them are geeking out about technology like we do. It’s just a wonderful arrangement for them.”

On the flip side, TPW wants to keep control:

“We are very profitable, and so we can run the company however we damn well please and not have to worry about anyone’s approval at all. And so that’s what we want right now, and so maybe VC doesn’t work so well for us”

“It’s all about what you want as a founder.”

—The Opportunity --

Once you figure out what you want, you need to figure out what to do. Is now a good time to be a programmer with their own business?

“There’s lots and lots of opportunities. Everywhere there’s software that people hate, there’s an opportunity.” says Amy Hoy.

“There’s so much pre-existing legos for you to get started with.” interjects Michael Lopp

“The lesson of the iPad” says Michael Lopp, is “there’s no file->save metaphor ANYWHERE” ... the paradigms of how software looks and feels is changing, and we can ride that wave.

There are buzzwords, there are techniques, there are tools, tips, hints and guides. Really though, says Michael, people just “want to send a picture of their cat” ... We can help them with that!

Says Chris Williams: “Programmers have an innate curiosity of trying to solve stuff that’s similar to what an entrepreneur is. It’s a perspective on the world and you need that curiosity as a main ingredient”

“It’s resident in every programmer.”

And if you’re new to the game, you are very welcome, says DHH:

“I’m happy that we’re getting an influx of inexperienced people! That means that we have a unique opportunity to teach these people about good software practices and get them on the road to improve. What better way to help the world of software move forward than to educate the “masses”.”

Welcome to the Ruby community. You’re in good hands here.

—Why Ruby? --

So, _why Ruby?

“Ruby made me famous!” says Amy. She rode the wave of increased popularity in the language by providing helpful cheatsheets to explain the tough concepts that she herself had had trouble getting to grips with. Again, Tobi has some great insight:

“We started doing these Ruby weeklies. We employed every single person who came to those meetings. It was people who were spending their free time talking about technology. That’s awesome. That’s just such a great cross section of people who are really into this. People were showing up to these meetings who were clearly the kind of people you can go into battle with.”

My friend Mikel: “Ruby has enabled me to rapidly create from nothing an intensely agile business that can adopt to changes as they happen.”

and José Valim, in Brazil:

“Ruby has not hindered us at all. Being one of the pioneers, in the still growing brazilian market, just brought us benefits.”

The wave, spreading out, is still happening across the world. From my own experience, In Ireland, people are only now really taking Ruby and Rails really seriously. It’s a big deal. Ruby attracts smart people.

—Thinking Big --

And so, we bootstrap, and we use Ruby and we are “stupefied by how pretty the language” is. Build simple software. Charge real money.

Michael Lopp got me thinking:

“The language doesn’t fucking matter at all. What matters is whether you’re going to innovate by finding the right people that bring different skillsets to the table, are going to error correct you better than you yourself.”

Maybe the language, in and of itself, doesn’t matter. It’s the people, the people. Over and over, DHH, Tobi, Rich, Tom mentioned the people they found through a common love of Ruby. Ruby brings us together.

It also got me thinking about how these principles don’t need to be applied just to software, it doesn’t have to be just a web app. Amazon and eBay sell stuff. Zappos was a shoe store. But they are software companies. Improving the world with software. There’s just so much opportunity. And Ruby enables you to “get up and running very quickly”

If you’re the guy that designed an API that I can’t stop writing because it’s so beautiful: I want to fly on an airline that you set up.

If you spent a year making sure every part of your app exposes an elegant, simple API to a complex, powerful system: I want to stay in your hotel chain.

That’s the crux of why I think Ruby is so attractive to me as a language, a community, a spirit with which to start new businesses: Ruby says: “I care about you Paul, I care about giving you the best experience possible.” I want that. Everywhere. And means it.

—Preface to conclusion --

The people in this community will bend over backwards to help you out. People WANT you to succeed. We’re rooting for you. I’m rooting for you.

I don’t really know what the hell the word entrepreneur is supposed to mean. But for any and all of the definitions that I listed above, I do know, that, like Rich Kilmer says, now is “an incredibly fun time to be an entrepreneur” ... We’re the folks that understood what Mark Zuckerberg meant when he said “I just needed to fire up emacs and modify that perl script.” And we’re the ones that thought to ourselves, sheesh, why the hell was he using perl?

Now is an amazing time to be alive; that the differences that distinguish wealthy folks from not so wealthy folks; they’re shrinking. We can all play the same game.

The conclusion that I’m drawing, is that there is only one rule in this game of business, of entrepreneurship: there are really no rules. For every strong argument there is an equal and opposite strong argument. For every lover, there is a hater, and for every hater there is a troll. We all need to find our own way.

—Conclusion --

We’re sitting on the pinnacle of 10 years of not only a language, but a community that fosters creative spirit, welcoming of ideas and peers from the outside, and grounded in the principles of programmer happiness and productivity.

I don’t know what the next ground breaking shift in momentum will be. Neither do you, nor do any of the folks that I interviewed. The future, you see, is anyone’s game, and since we are inventors, creators, magicians, we invent the future as it approaches.

So I say this: invent the future, reimagine the world and implement it, break down the rules and build them back better, one at a time.

Michael Lopp says that Ruby is “the place to start” but that maybe ”’there’s too much magic” I say: embrace the magic. Embrace the future. Make it your own.

When it comes to building a business, it doesn’t really matter what the language is. It doesn’t really matter what the framework is. It just better fucking work. And I know that everyone here cares about that too.

What matters is not that you’re using Ruby, or Rails, or whatever, but that you care deeply about the choice of language and framework. And that’s a trait I see over and over in Rubyists.

My friend Jan says: “If you’re a person to turn ideas in to products, today is pretty good.”

Now is a fantastic time to be a programmer doing business. The Ruby community is a great place to be, and the Ruby language is a great place to start.

The folks I spoke to in preparing this, and the people I’ve met: Ruby folks. Artists. Enthusiasts. Early Adopters. Visionaries. Friends. Supporters. Entrepreneurs. My heroes.

Thank you.


I spake this:

My Dublin Web Summit Talk

I wrote and read this at the Dublin Web Summit last week.

I think a conference with all presidential address style talks on technical topics would be great fun!

Here's the script:

Simple, Fast, Great

Here is my thesis:

Simple things tend to be fast. Fast things tend to be simple. Great things tend to be both simple and fast.

And to clarify:

When I say simple, I mean low conceptual overhead. Not necessarily basic, but easy to understand, easy to use.

When I say fast, I mean responsive.

And by great, I mean the stirring of emotions and the evoking of strong feelings of delight, wonder and awe.

So, to rephrase:

Easy to use software tends to feel fast. Software that feels fast tends to be easy to use. Great software tends to be both easy to use and very responsive.


Let’s look at the web.

I’ll talk first about simplicity. I want to look particularly at some examples at the infrastructure level.

First, there is the protocol. HTTP. What a beautiful thing is HTTP, nestled so comfortably upon TCP and its good friend IP.

TCP and IP together transfer bytes from one computer to another. At the speed of light. Sending information at the speed of light. It doesn’t get more elegant than that.

HTTP. Mmm. Mmmmm. Mmmmmmmm. HTTP, which makes it so easy to POST data online, which trivialises PUTting updates and any time we like we can GET it all back.

Connected to Port 80.

GET /home

HTTP/1.1 200 OK

So, so, simple. Ugh. SO SIMPLE.

And HTML. My good friend HTML. Simple labels surrounding portions of text to give that text meaning. Hidden from view. But allowing us to link all of this information together.

Like a book. A book with a circulatory system. A book that’s ALIVE.

This is a <h1>header</h1> and this is a <p>paragraph</p>.

We stand on the shoulders of simple giants. Simple protocols, simple markup.

And then there’s speed.

As developers, we hear a lot about performance. Oh, this system beats that system in the other benchmark. The specs on this machine are faster than that one. This database will perform N thousand operations per second.

Great. Raw speed : that’s cute. And important.

Depending on the context, it’s the perceived speed that really matters. Perceived speed has much less to do with the time it takes to do something, and much more to do with how responsive something is.



The ultimate user interface, against which we should measure every other, to me, is the human body. 100,000,000 years of of intensive user testing have yielded a beautiful, elegant, modular system; each part efficiently playing its role, and the pieces that are exposed to end users offering simple interfaces to hidden, inner complexity.

What are the characteristics of this amazing human machine?

Firstly, humans are wonderfully responsive. How much more satisfying it is to speak to each other directly. Eye contact, touch, response, sensitivity. We are tactile beings, noticing nuanced responses in each other. Everything from the crease of our eyes when we smile to the tone in which we say things generates high emotional response in each other.

Second, our bodies are wonderful at handling long running processes. During lunch, think about the journey of food through our bodies, all of it handled by a complex independent nervous system, independent from the central nervous system. Other internal systems keep the body running without affecting external responses. If anything goes wrong, we usually know about it; fail fast. If everything works out, we know all about it, and we move on to the next meal.

Finally, our brain has this wonderful asset; the subconscious, an always-working stream of thought that continues to process, behind the scenes, everything we’ve fed the conscious brain, and bubbles up inspiration, revelation and other general magic. Automatic asynchronous thought. Tasty.

What does all of this have to do with the web?

The web is in transition. It’s been in transition for the last 15 years, from a delightfully simple transmission system for scientific, connected documentation, to an applications platform, a platform for creating, consuming, processing and distributing information.

An application platform.

With the advances of HTML5, and the present acceleration in the innovation of the browser vendors, we developers are slowly gaining access to nirvana: a truly distributed, write once, run everywhere application stack.

Cue javascript

And so, to a topic close to my heart: javascript. Javascript, the programming language of the web.

Think about that. The programming language of the web. Our programming language. Our common ground. Ubiquitous. The truly ubiquitous language.

Think about that just a little bit more. Ok. Got it? There’s really something great about that.

Our wonderful language. Our powerful language. Oh, we didn’t know it for years, but javascript, like the other parts of the web, is also built on the shoulders of giants. Simple objects, so elegant that they spawned their own data-structure standard in JSON. Functions as values. Closures. Events.

Easy to learn, difficult to master.

Simple. Fast. Great.

And with HTML + javascript, the web is our collective application stack. So. Much. Power.

And with great power, comes great, great responsibility. We can create beauty. We can create wealth. But we can also create monsters. Marquees. Effects. Flashes.

Simplify & Speed up the Web with JS

But the role of javascript, in the browser at least, I think, is to simplify the web. But not only to simplify, but to make the web feel faster.

The simplicity comes from javascript’s implicit ability to change a page without needing to make a new request. Think of the conceptual clarity of an interaction that updates a page instantly versus an interaction that requires a page refresh. No network overhead. No conceptual overhead.

Updating a page with javascript is so fast, in fact, that it often helps to artificially slow down the speed of response of an interaction. Why? To make the response more human like. If someone responds to a question too fast, we don’t take them seriously. If an interface responds too fast, the same principle applies.

Javascript helps to take away the constraint of network latency, and gives us back control of how responsive the applications that we’re building can be.

The relevancy is that today we have so many tools for building these kinds of apps. Prototype, jQuery, mootools, dojo, these are just the start. A movement is afoot, toward development of client-side applications: thick clients that are delivered via simple web pages. Client side templating languages make organising view files a cinch.

And it’s all just the internet.

If we want to build software for humans, I think that we should build our software like humans. Emotive, responsive interfaces. Long running processes should be sent to the background, processing away while other things happen. And an asynchronous aspect that allows our interfaces to respond now, process behind the scenes, and bubble up inspiration.

The Event Loop - build responsively

The traditional way of thinking about a computer program is a set of commands that are run, step by step, one after the other.

An event loop is the programming equivalent of the subconscious. A constant stream that we can send tasks to, and once they’re processed, they can bubble back up and announce their presence. Javascript has a great event loop. Evented programming allows us to update an interface immediately, send a task to the background and specify what to do when the task is done. Power to the people.

If we shift our paradigm of programming from a vertical set of serial commands to a horizontal set of events and callbacks, we can control the perceived speed of our applications. We can make things feel fast.

Where it has led me

I try to be led by these principles as much as I can in my own work.

Ketchup, the web app that I launched earlier this year, for taking notes online. Right now, it’s more or less a manifestation of these principles of how an app should work:

First, the main meeting view is always responsive, all the time. Every user action updates the view immediately, and then gets updated from the server-side.

Next, Every note gets added to the page immediately ; there’s no Save button. The “Save” button is still a hangover from an age in computing where compute and storage was expensive. When do I not want to save?

I’m also working on a javascript framework, eyeballs.js. Eyeballs is all about designing these kinds of interfaces in a manageable way. Amongst other things, eyeballs lets you organise your code in terms of models and controllers, and to specify callbacks on saving your models that encourage you to update the view immediately and respond on success or failure. All in a manageable way.

I’m excited about the future of eyeballs and the future of human-centric interfacing on the web in general. I see us, in the future, having even more power to control the experience of users and even more opportunities to simplify our interaction with the web, and make the whole thing feel really fast.


In summary, I think that the web is one of the greatest things to happen in the history of the world. No single technology has brought us all together so efficiently. Made access to information so widespread.

The web is founded on simple principles. These principles have helped it spread and succeed. But it’s always felt kind of slow.

As developers, we have access to technologies and techniques to make the web feel faster. We can also use powerful tools to simplify the experience of using the applications we build.

These are the principles that guide me every day. I think that they are pretty solid principles, and I’m going to keep on working with them at the forefront of my mind. Maybe they will work for you, maybe they wont, but I promise you, if you build something and it’s easy to understand, easy to use and responds like a baby when you tickle its belly, you might, you just might be on to something great.

Thank you.


I spoke this:

My SchnitzelConf Talk

I gave this talk at SchnitzelConf earlier this month and it seemed to go down well. Since I adopted the presidential address style, I wrote a script. Here it is: Just starting and still freaking out.

In 1984 and Brave New World, George Orwell and Aldous Huxley respectively predicted, in their different ways, that the world would descend into a mundane order of automatons and conformity, where discipline was doled out from on high and grave punishment given to those who stepped out of line.


Growing up, as I did, in Dublin, I was often aware that there was no obvious movement for me to join. My parents shielded me from republicanism, from the hate and terror that happened for so long in their native Northern Ireland.

However shielded, I can’t hide from the fact that I am the product of wars. I am the product of freedom-fighters and terror. Ireland has a strong history of underdogs overcoming the might of the British. I am the product of uprising, uprising and diplomacy, uprising and bloodshed.

I grew up in an Ireland that was recovering from all that, shielded in the safety of a booming economy. My parents sacrificed themselves to give their kids the greatest opportunities they could afford. My siblings are phd scientists, a teacher, a nurse.

I have a very nice life. I had no obvious movement to join.

So instead, I took to making things.


I just want to be great. I want the things I do to be remembered. I want to overhear people at the next table in a faraway place talking about things that I have done.

I want to be Steve Jobs, I want to be Bill Gates, I want to be Gandhi. I want to be John Lennon and Paul McCartney. I want to be Simon & Garfunkel. I want to be Jimi Hendrix. I want to be David Bowie. I want to be Francis Ford Coppola, Steven Spielberg, Stanley Kubrick. I want to be Woodie Allen. I want to be Andy Warhol, Pablo Picasso, Leonardo da Vinci. I want to have grown up in Florence. I want to be the Mona Lisa.

I want to be fluent in French, German hell, why not Italian and Spanish too. I want to be Aristotle, I want to be Plato. I want to be Locke, Berkeley and Hume.

I want to be John Rawls. I want to be Karl Marx. I want to be Hercules. I want to be God. I want to be a fox, a bird, a wolf a lion and an elephant. I want to be a praying mantis.

I want to be a spaceman, a doctor and an athlete. I want to be president. I want to be able to quote the bible and Ulysses and Charles Bukowski. I want to be Robert De Niro and Al Pacino and Laurence Olivier. I want to be James Dean.

I want to be Shakespeare. I want to be top of the charts. I want to be site of the week. I want to know more than Wikipedia about everything.

I want to spring out of bed in the morning. I want to end wars and I want to inspire nations. I want to build a movement and tear down a dictatorship. I want to be Lenin. I want to be Michael Collins.

I want every moment I live to be better then the one before. I want to be a nice person. I want to make things.


Because I love making things. I love technology. I love computers and devices and buttons that I click to click other buttons. I love touchscreens.

I love music. I love playing music. I love the air. I love the outdoors. I love horse riding. Running. Football. Walking in the mountains. I love it all.

I love pictures. Bright colours. Socks. Brightly coloured socks. Brightly coloured clothes. A bright smile. A bright face.

I love the internet. I love internet people. I love being on the internet. I love IRC. Email. Twitter. Connections. TCP/IP. Relationships.

I love the feeling of getting an email. The way that the word “Inbox” goes bold when there are unread messages. I love that I can view astro-photography, diagnose illnesses and download exercise programs and have the best of them all. In seconds.

I love my parents and I love their passion for life, and teaching and giving their kids the best that they possibly could. I love my brother and my sisters. I love my girlfriend. I love my friends.

I love movies, the cinema, I love emotions I love drama and stories. I LOVE stories.

I love fresh pizza, the smell of oregano and hot tomato and melted cheese and dried pasta and foie gras. I love nice crusty bread and creamy butter and truffles over a steaming risotto. I love Wiener Schnitzel. I love fine wine. I love people who love these things.

I love prettiness. And I love ugly things that hide inner beauty. I love discipline and correctness. I love dials and controls and interfaces. I love cause and effect. I love random joy. I love imagination. I love penny sweets. I love simple things and I love complex things made simple. I love trivia. I love doing things right, and I love finding out what the right way to do things are.

I love it when I can say “I love Angry Birds” and everyone gets it.

I love it when someone appreciates when I do a nice thing for them. I love making things. I love the things I make.


I hate greed. I hate scum. I hate selfishness and I hate ego. I hate apathy.

I hate people who spit on the pavement, or when people are rude in restaurants or shops or in an email.

I hate people who are just rude in general. I hate thieves and liars and manipulators. I hate money and I hate vice. I hate anyone who forces their opinion on others. I hate excuses. I hate it when things are half assed. I hate imperfections. I hate procrastination. I hate Santa Claus because he’s not real.

I hate large corporations. I hate corruption. I hate needless bureaucracy. I hate slow decisions on simple problems. I hate fluctuating flight prices. I hate economic inequality. I hate laziness and moaning and complaining and talk talk talk. I hate waste. I hate killing anything. I hate destruction.

I hate it when a better, cheaper solution exists for a problem and is flat out ignored. I hate queuing for things that could or should be done online. I hate sending a letter when I could be emailing. I hate emailing when I should be sending a letter. I hate mundane things that are inefficient. And I despise effiency at the cost of humanity.

I hate it when someone tells me I can’t do something and sorry, but that’s that.

I hate conforming. I hate acceptance of the status quo. And I hate it, I hate it when someone looks at me as though I don’t exist.


Because I’m terrified of rejection. I’m terrified of death, of dying, of the unknown. I’m scared that I’ll get shot in the back or knifed in my sleep, before I get to do anything truly great in the world. I’m worried that my next flight will be my last one.

I’m scared that I’ll be laughed at or mocked for what I do, or who I am. I’m scared that I’m not good enough. I’m scared that I’m really, truly crap.

I’m scared that I didn’t do well enough academically. That I fluffed my way through university and I’ll never get over it. That I’ve never made a movie that I’m not proud of.

I’m scared that I’ll never be anyone worthwhile, that I’ll never make anything of any lasting worth. I’m scared that I’m not a genius, that I’m just average, that I’m just another face in a sea of faceless people.

I’m scared that I’m a coward, that I’ve no heart, that people talk about me behind my back. I’m scared of what people might really think about me. I’m scared that my friends aren’t my friends and I’m scared that I’m really, really alone.

I’m scared that I’m not ambitious enough and I’m scared that I’m not following through on my ambitions.

I’m scared of coins. And the dark sometimes. And creaky pipes. And snakes.

I’m scared of people smarter than I am but I’m even more terrified of people who don’t want to become smarter than they already are.


At a conference last week, I was introduced to someone by a friend:

“This is Paul, he makes cool shit.” I liked that. A lot.

I was a smart kid, but never a prodigy. I won’t make any lists for great achievements under 25. I consider myself, most of the time, completely average.

I built a web product last year but it doesn’t have many customers.

I don’t have very much money. I play guitar, but I don’t practice very much. My singing voice doesn’t record very well. I’m quite serious; I try to be as witty as I can, but I have trouble remembering jokes. I can draw, but I don’t think I’ll ever be much of an artist.

I got a worthless college degree because I didn’t read enough books while I was there for four. long. years. I don’t know very much about politics.

No matter how hard I try, I can’t shape shift into an animal. I often attempt to catch up on my reading, but it’s not easy ; my current reading list is still gathering dust. I never really got a chance to act, or tried much, but I did once perform as a dancing sailor in a school play.

I’m often guilty of so many of the things I hate. Sometimes my fears absolutely consume me. Sometimes I just want to give up.

When I get up in the morning, it’s usually a struggle; I don’t get up at 5am and hit the gym like I feel I should. I’m normally quite groggy and it’s usually a struggle to get going.

I find it difficult to make decisions and I’m easily distracted.

But, I do get going. I’m not regimented, but I value discipline and I try not to be too easy on myself. I’m passionate about what I do, and I try to embrace, control and channel that passion as much as possible.

My product, Ketchup, hasn’t been the overnight commercial success that I hoped, but doing it has lead to other great things. That said, I’m only 8 months in. So far, I’ve met heroes who respect me for doing my own thing. I have more ideas and plans and opportunities than I think I’ll ever need, but I know it’s only a fraction of what’s to come. I think I’m going to be ok.

I try to listen to smart people, and do what they do, without copying. I try to put as much of myself and my ideals into everything I do. I don’t have much money, but I don’t need all that much to do what I want to do.

I’m not religious, but I’m deeply, deeply thankful for my life and my gifts and everything I have. I let myself get emotionally invested in everything I do and I’m proud of that. I trust my gut, but I trust my experiences too. I really, really care.

I try to see the world from other people’s point of view. I find that I’m often quick to insult, but I do try to be thoughtful before I speak, or judge anyone’s opinion or work. I try to do my own work with integrity and I try to apply what I’ve learned in everything new I do. I try to be as nice as I can. I try to make things as well as I can.


I don’t really want to be Steve Jobs or Bill Gates or John Lennon or Gandhi or Leonardo da Vinci. I don’t need to be Coppola or Spielberg or Plato or Aristotle or Michael Collins. Not even David Bowie.

Each one of those guys who achieved great things were born into a world where the things they achieved didn’t exist yet. I was born into a world that has the benefit of their legacy. The benefit of every great person down through history.

A great man from this part of the world once attempted to prove, logically that we live in “the best of all possible worlds” … his proof, unfortunately, or not, relies on the existence of an all powerful, all knowing God. I feel as though Leibniz would be utterly as convinced today, that we do live in the best of all possible worlds.

If any of us travelled back in time to almost any point in the history of humanity, armed with a net connection and some common sense, we would be almost indistinguishable from Gods to the people of that time.

Truly, there is no time that I’d rather live than now, and there is no-one in this world that I’d rather be. I live in a world at the pinnacle of evolution, at a point where knowledge and understanding is moving faster than it ever has.

It’s an amazing place to be.


It’s not perfect and it’s not global.

All around us governments are falling apart, awash with the fuck ups of a society where you had to fight your way to the top. Ridiculous wars, outrageous inequality, greed, corruption and unsustainable mass production of crap.

But I feel that things are slowly coming around. Corporations are being given the runaround by people who care about what they do and other corporations are at least trying to care.

I’ve met so many people in the last few years, all over the world, who care deeply about what they do. Passionate people, who don’t understand what it is not to care. They have strong voices, and people are finally listening. Twitter makes news headlines. The lines between blogs and traditional media are blurring and disappearing. The cost of doing business, at least in Ireland is negligible.

Today, for peanuts, you can learn a new skill or technology with amazing screencasts. You can mock up a web app, track bugs and time, host your code, get inspired designs or set up a personal call centre all for less you’d pay for lunch every day.

Travel is cheap, and the computer I’m typing on is no slower than that of the most powerful people in the world. Global communication is a commodity.

Orwell and Huxley got it wrong. In a society where we’re constantly being watched and constantly being monitored the trend that emerges is not power or corruption. The control required for that is relinquished when everyone has an equal voice. That’s the world I know.

The world I know is a world where nice people are winning.

We are in the age of the individual. Now is a great time to be alive. It’s a great time to be doing business. It’s a great time to be creative. We live in a world of opportunities. A world where knowledge is vast and access is cheap.

We live in a world where great wealth is the default position. Our options are vast and wide. We can choose any path we want. We have 600 million years of evolution on our side, guiding and influencing us subconsciously; it helps us know what feels right. I don’t really know why I want what I want, love what I love, hate what I hate or fear what I fear. But I trust in it.

All that’s left is to get on well together, to make awesome things and to be really good to each other. And everywhere I see people who treat each other with respect and understanding, I see great things happening, great products being built and great ideas spreading.

To do what feels right. That is our movement. That is our victory.

To win is to be nice.

I’m Paul. I make cool shit. I’m just starting and I’m still freaking out. Thank you.


I attended this:

RailsConf 2010

It's always fun to go back and read Teddy Roosevelt's famous lines:

“It is not the critic who counts, not the man who points out how the strong man stumbled, or where the doer of deeds could have done better.”

“The credit belongs to the man who is actually in the arena; whose face is marred by the dust and sweat and blood; who strives valiantly; who errs and comes short again and again; who knows the great enthusiasms, the great devotions and spends himself in a worthy course; who at the best, knows in the end the triumph of high achievement, and who, at worst, if he fails, at least fails while daring greatly; so that his place shall never be with those cold and timid souls who know neither victory or defeat.”

Pretty much exactly how I feel about this week's RailsConf.


I released this:

Ketchup is the business

Last January, I launched Ketchup.

It's only been nine months or so since I wrote the first line of code. Back then, it was just called "meetings"—a name that the source code repo retains.

Last month, I spoke at the Scottish Ruby Conference about releasing software. One of the points I made was to pick the "nine month point" to release—that's the point at which your software is at the development stage of a newborn ... immature but with lots of potential to grow into something great!

And so, sticking to my own advice almost too literally, nine months on, Ketchup v1 is released. It includes a free 30 day trial for everyone. There's an always-free plan, a €9 personal plan and a €49 plan for business.

We've also launched a new site: exquisitely designed to tell the "story of Ketchup" ... Check it out.

Ketchup has been such fun to work on, and I'm stoked to get this far. I'm really looking forward to the next 60 days. Of course, huge kudos go to the amazing Brian Flanagan for his wonderful design and insight.

There are lots of other people to thank too. Jan was a huge support getting the initial release out. And of course the NDRC for their helpful contribution with the Launchpad programme.

Thanks also go to the fine folks I've hired along the way: a lot of code in the app is Rob's, Pat and Till for their API wrappers, and recently Mikel for helping me get the latest release out.

And finally: thanks to everyone who signed up. You are all amazing.


I mused on this:

Manipulating Remote Branches in git

When using git, I occasionally want to do one of two things:

  • Delete a remote repo
  • Push a local branch to a different remote branch

Deleting remote branches panders to my penchant for keeping things tidy. Pushing branches to a different remote branches is useful for deploying a staging branch, for example, to heroku, without merging to the master branch.

It's all in the ":"

git push allows you to specify a source and target branch by using a ":" to separate them.

Normally, something like "git push heroku master" will push the current local master branch to the remote master branch on the remote heroku repo.

If you add a ":" eg. "git push heroku :master", you change the command to pushing nothing to the remote master branch. That is to say, delete the remote branch: git doesn't do empty branches or folders.

Following from that, if you want to push to a different remote branch, "git push heroku staging:master" will push the current local staging branch to the remote heroku master branch. At this point, feel free to sit back with a big cheeky grin.


I relate to this:

"I think there's a great difference in consciousness in that same way in that when we're young we read books for the story, for the excitement of the story - and there comes a time when you realise that all stories are more or less the same story."

John McGahern


I worked on this:

Release of railsplugins.org — An Exercise in Pragmatism

Back in October, a couple of folks from the engineering team at Engine Yard got in touch with me about building a directory for plugins to declare compatibility with Rails 3.

The result is railsplugins.org.

Back then, Rails 3 was just around the corner, and the app was needed in double quick time. There was a long list of potential features. So much so, in fact, that I was quite overwhelmed.

Between myself, the Engine Yard team, and Brian and Rob, I think we did a good job for a first release. As it turned out, Rails took another two months to release, so we could have taken a bit more time to round out the app.

There's nothing quite like releasing early, and Yehuda released the app last Friday week. There were a few cobwebs that were quickly dealt with and we pushed out a few changes during the first week.

The wonderful Mikel Lindsaar is working on the project for a couple of weeks, porting it to Rails 3 and generally cleaning up the code. It's been so fantastic working with so many smart, clued in people who are close to the bone of where Rails is headed.

It's been such a privilege for me to work on something so prominent in the Rails ecosystem.


I 'm presenting this:

Presenting funconf — a conference on a bus, in Ireland

Last November, at JSConf EU, Eamon and I met a lot of people, with a very strong message: they wanted an excuse to come to Ireland.

We decided in December that we'd host an event. We figured the world doesn't need another general web conference and there are plenty of conferences for various technologies happening this year in Europe. Four alone for Ruby (that I know of).

We wanted something Irish. We wanted something with a bit of our personality in it. Basically, we wanted "Paul & Eamo"-conf Over the years, Eamo and I have hosted a number of folks in Dublin, whether it be a spare desk or a pub crawl.

We had the name, funconf, and related domain and twitter user, in reserve, after "announcing" it at the JSConf after party.

At RubyConf, I attended StartupCrawl. I got on the bus at the conference: it was a free ride back to San Francisco. It turned out to be a bus offering crawlers travel to and from a bunch of offices that had been opened as party spaces for the night.

"What about the cube?" said Eamo after a long day arguing about what we wanted funconf not to be. The cube was a party bus that frequented Dublin during the 90s on bar-crawls. Perfect.

And so, today, funconf is born. We basically want it to be a conference to remember. Once you book your ticket, you put yourself in our hands. All travel, food and drink for the day, and the party, as well as access to the bus(ses) will be covered. And there are only 70 places.

We're opening €250 registration for early-bird access today.


I wrote this:

Presenting Ketchup — a Simple Meeting Notes App

I'm pleased to announce the early-adopter, open release of a project I've been working on over the last few months: Ketchup.

Ketchup is a web app for storing meeting notes.

It's designed to be easy to use. We've purposely only designed the simplest features, from the outset. Over the next couple of months, the plan is to listen closely to feedback and shape the product into a powerful, useful and valuable tool.

In terms of philosophy, the app is designed around three principles:

  1. "Do little, insanely well."
  2. Pay close attention to visual design and details.
  3. "Not Saving Changes" ... every detail is saved once it's created or changed.

...heavily inspired by John Gruber.

The underlying goal of the software so far has been to be the place to put your meeting notes.

Ketchup has been in private access mode for a while. There are so many things that could hold me up putting it out into the world, polishing further details, adding more little features. But I've decided to just ship now, with the simplest working implementation.

If you'd like to try it out, it's open for signups now at http://useketchup.com.

Huge thanks and kudos to Brian Flanagan, who's worked insanely well on the design of the app.


I wrote this:

behavior: a Rails gem/plugin for storing application configuration in the database.

I just pushed out "behavior", a Rails gem/plugin for storing application settings / configuration variables in the database.

I needed a solution like this after working on the Rails Development Directory. As it's now open source, we can't store any configuration variables such as the "from:" email address or passwords in the source code. There are solutions that read from a site_config.yml, but that's tricky for end users to edit, and also introduces headaches for deploying.

It's useful to store things like the site title, description, email address and passwords etc. outside of the source code. Keeping them in the database means they're completely decoupled and end users can edit them. Behavior also allows you to set sensible defaults so that your application code can depend on at least something being set, for development and testing.

Behavior uses a Yaml configuration file to define a set of configuration files for your app. You can then access those global config variables with "Behavior.config[:variable]", or just "config[:variable]" in your controllers and views.

It also comes with an in built web interface for managing the variables.

You can check out the source and installation instructions over on github.


I mused this:

An Easy Win Missed by Mobile Companies

It was with great relief that I received a call from Vodafone last week to tell me that they could now offer me a free iPhone 3GS with line rental for €60 per month with twice the calltime and minutes that O2 are offering.

I've felt a bit like a shackled dog, tied in to a long contract with no options and absolutely no negotiation power in O2. I had my hand slapped last year for suggesting that I pre-pay several months in order to secure an upgrade to the 3GS. Back then, I was told:

I am sorry but there is nothing different between an upgrade on to the 3Gs than there is for any other handset and you like everyone else will have to follow the rules that are associated with it

As far as I was concerned, O2 lost out on an easy opportunity to gain massive customer loyalty.

It will cost me €450 to break out of my current contract with O2, which lasts until August. The Vodafone rep recommended I take this option, claiming I'd save the difference in roaming fees.

What I don't understand is: why doesn't Vodafone offer to cover my O2 breakout fee in account credit? I don't know what markup Irish Mobile companies are making, but for calls and texts, it has to be high. Offering me €500 in account credit, a significant amount to me, would probably cost Vodafone far less than the €100's I'll be spending if I sign up.

Had O2 extended the courtesy of offering me a 3GS at upgrade price in exchange for pre-payment of several months up front, I'd be a happy customer right now. Instead, I'm looking for ways to jump ship back to Vodafone.

Mobile companies should be clamouring over themselves to offer incentives and rewards based on account credit, prepaying several months in advance, or upgrading before a contract expires.


I listened to this:

Riu Riu Chiu


I liked this:

"Creeping Elegance"

A thoughtful piece by Pete Warden on lessons learned while starting his career as a games developer.

I love the concept of "creeping elegance" that he links to. I'm definitely in the camp of "make new code work now, but leave any old code you touch in a better shape than you left it".

And this little nugget rings true:

sometimes the worst projects are the best teachers

That said, much like failure in general can teach a lot about what not to do, success (and successful projects) teach a lot about what to do.


I wrote this:

Finding a Link by Its Text Using Cucumber and Nokogiri

A small project I've been working on recently requires linking to an external site, specified in the database.

Normally, when testing links in cucumber, I would do the following:

When I follow "more info"
Then I should see "More Info"

When "more info" is an external link, I don't really want to go clicking it as part of my integration testing: I mean, I could, but I don't like having a dependency on a net connection in my tests.

What I do want to test though is that the link is pointing to the right URL.

Webrat gives us a lovely way to click a link:

click_link("more info")

...but there's no easy way to get at the 'href' attribute of the 'a' element. I searched and searched the source code of webrat to find a convenience method, but the best I could get to was a couple of methods nested deep inside the webrat Link Locator.

Enter Capybara the new hotness in integration testing DSLs.

Capybara's "find_link" method is far more concise than webrat's and uses xpath to locate an 'a' tag by its contents. The Capybara xpath looks like this:

//a[@id='#{locator}' or contains(.,'#{locator}') or @title='#{locator}']

It's actually quite lovely.

Somewhere, at some stage along the chain, capybara passes that xpath down the chain to it's brother in new hotness arms, Nokogiri.

So anyway, using this bit of investigative source code browsing, I was able to come up with this step definition to solve my problem of check the 'href' of an 'a' tag with cucumber:

Then /^"([^\"]*)" should link to "([^\"]*)"$/ do |link, url|
  n = Nokogiri::HTML(response.body)
  n.xpath("//a[contains(.,'#{link}')]").first['href'].should == url

All I needed in this case was the 'contains' part of the xpath. It's pretty concise, and it's definitely something I'm going to use again in the future.


I exclaimed this:

"Holy Moly"

I've been using the expression "Holy Moly" a lot again recently. It was a favourite of mine as a child and it gives me great delight to utter it, often 5 or 6 times a day.

It's a very satisfying expression. A quick trip to Wikipedia explains that the phrase is an "exclamation of surprise" that originally comes from "the Captain Marvel Comic-Book characters". (It's also a UK gossip site)

I love the phrase "exclamation of surprise" though. In today's desensitised world, I'm happy to take all the surprises I can get.


I mused this:

I've Left Contrast

Last May, after RailsConf, I left Contrast.

Unfortunately, as time went on, I felt it wasn't the right fit for me. Looking back over the things we did, I feel a touch of nostalgia, but I have no regrets.

I wish Eoghan and his merry crew all the best. I know he'll stop at nothing to achieve true success.

I've kept busy, working on some exciting things with some really cool people, but for now, I'm keeping my head low, focussing on doing really great work.


I attended this:

Building a Better Web

I got back from Build on a high that I've not felt since ... gee, since I started going to these tech event things.

It was a pleasure to be at a conference so chock full of fantastic speakers. Meyer, Miner, Sims, Budd, Boulton and Van Damme — these guys are a good cross section of the kind of guys leading the web today.

Not only that, but I was so proud that the event was hosted by Andy McMillan. Andy's work to raise the profile of himself and his peers in Ireland is relentless and admirable. Build 2010 is already announced, but I'm hoping his eye will turn to the international scene, because it's obvious that he has what it takes. It's all the more pleasing that Andy's not a social media witch doctor nor is he an SEO magnate, nor does he list his number one skill as "connecting like-minded people".

Andy's a down to earth, honest to goodness, passionate web designer. And it shows. Build is probably the most relevant web conference ever held in Ireland. Others, take note.


I thought about this:

Push the Limits

I just had an awesome latté. I don't think it was too different from other lattés I've had. It's a rotten day in Dublin, so that might have added to it, but I think the real reason is this:

I've been drinking a lot of black coffee lately. I've found that black coffee is quite difficult to drink. Like any fine food or drink though, the more you drink, the more you appreciate it.

I enjoyed the latté more because I've been pushing my palate with stronger, ultimately more rewarding, but harder to drink stuff. I remember when I didn't enjoy lattés but kept drinking them until I did.

I've found that this is a common theme. Something that's tough at the beginning gets easier, and it's really easy to appreciate how far you've come by doing the things you used to find hard. It's important to keep pushing the limits.


I learned this:

Pacing Yourself

I decided to sign up for the RubyConf 5k as I'll be there in November and I wanted a way to motivate myself to run more.

I told a friend yesterday that I was doing it, and I mentioned to him that early on I was having difficulty running long distances, because I'd get really tired out after just a few minutes. But then one day I started out real slow, increasing the pace bit by bit and now I find that I can go on much longer without stopping.

"Paul", he said, "It's called 'Pacing Yourself'"


I discovered this:

Checking blank form inputs with jQuery

I've been checking lots of form fields for a blank value (eg. they contain nothing, or just whitespace) lately, and I wanted to emulate Rails' String#blank? to check this in jQuery.

I had been doing something like this:

if($.trim($(this).val()) == '') ... 

But that's so ugly I felt there must be a better way. Of course, there is:

if($(this).is(':blank')) ...

Simple, clear, and jQuery-ish.

Update This technique, while awesome, isn't bundled with jQuery and requires the jQuery validation plugin (docs).


I enjoyed reading this:

Merlin Mann on Adobe Needing to Sit Up and Shape Up

It installed dozens of crufty extensions, looked just awful, and ran with the pluck and elegance of an incontinent grizzly bear with the gout.

Great piece using Adobe's growing path into unreliable bloatware, and the elegance of small apps that do one or a few things really well.


I loved reading this:

Obie's Reasons Why Pair Programming Won't Work n Conventional Companies

most software managers are under-staffed (see below), overworked and/or under-qualified. They would rather let the group deal with Asshole Architect, Mr. Stinky or Jimmy the office jerk than to go around provoking difficult conversations and making more work themselves

Say what you like about Obie Fernandez, he knows the industry inside out. Entertaining and insightful.


I am all over this:

Like Crying (by Danny Kirwan, early Fleetwood Mac)

Danny Kirwan didn't last much longer in Fleetwood Mac, but I think this song will be with me for a long time

Watch, and shiver


I love this:

ActiveRecord string interpolation. Nom.

Post.all(:conditions => ['date <= :today', {:today => Date.today}])


I wrote this:

The HDAD Pattern for organising controllers in Rails

I've been following a really simple pattern for organising controllers in Rails lately and it's helped me to simplify my controllers and write code that's nice and specific to certain contexts. I refer to it as the "Home / Dashboard / Admin Dashboard" pattern.

The pattern basically follows from the question "Who's looking at this controller?" ... and typically there will be three main users: anonymous users, logged in users and admin users. Given that their concerns when using an app and the various resources in that app will all be different, the trick is to create three namespaces.

Basically, the first page that an anonymous user will see, and subsequently the map.root, will be a singleton resource "home" ... mapped to home_controller. Next, when a user logs in, they get their own area, within their own namespace, something like "my" and they get their logged in singleton resource "dashboard" ... mapped to dashboard_controller. Finally, an admin user will have the option to log in to an "/admin" area and their own dashboard.

Following this, I now have logical namespaces to put any further controllers. If, for example, I have a model named "Post", I put a posts_controller in each of the namespaces, "/", "/my" and "/admin". This leaves me with three distinct areas that have their own permissions, context and views. I find it a really neat way to keep my controllers lean within particular context. It also helps me to only write code specific to those contexts in views.

Here's the routes file that would make this happen:

ActionController::Routing::Routes.draw do |map|
  map.root :controller => "home", :action => "show"

  map.resources :posts
  # Logged in user routes
  map.namespace :my do |my|
    my.dashboard :controller => "dashboard", :action => "show"
    my.root :controller => "dashboard", :action => "show"
  # Admin Routes
  map.namespace :admin do |admin|
    admin.dashboard :controller => "dashboard", :action => "show
    admin.root :controller => "dashboard", :action => "show"
    admin.resources :posts

With the pattern, each of the posts_controllers only need to have actions and code specific to each context: eg. the anonymous one need only have index and show code, because anonymous users will never be updating posts.

On the flipside, the admin version can have full permissions, and the logged in user can have granular access control. Cool, clean separation of intent in each context.


I 'm excited about this:

Passing controller arguments to to_xml - coming in Rails 3!

What if, in Rails, when building an XML API you wanted to output something like this:


As of Rails 2.3, there's not really a neat way to do this, using ActiveRecord's to_xml serialization. I needed this functionality today and stumbled across a patch that's been accepted for Rails 3. It will allow something like:

wants.xml { render :xml => @posts.to_xml(:procs => [Proc.new {|options,post| post_url(post) }]) }

Delicious! Bring on Rails 3!

Check out the Lighthouse ticket and the patch.


I can't get enough of this:

We cannot be useful to ourselves unless we are also useful to others. Whether we like it or not, we are all connected, and it is unthinkable to be happy all by oneself. Anyone who is only concerned by his own well-being will suffer eventually. Anyone who is only concerned with the well-being of others takes care of himself without even thinking about it. Even if we decide to remain selfish, let us be intelligently selfish – let us help others!

Jetsun Jamphel Ngawang Lobsang Yeshe Tenzin Gyatso (born Llhamo Döndrub) (1935), is the fourteenth and current Dalai Lama


I chuckled at this:

"a group of hairy hippies, most of whom look like Robinson Crusoe at Day 405 on Treasure Island"

Great piece from the Times in 2005 reflecting on Disney's purchase of the rights to Henson's Muppets. I've been watching the show lately and am completely enamoured. I love the hidden imagery of what you don't see: the muppeteers themselves:

Of course, the possibility of a culture clash between Disney and the Muppets always seemed quite obvious. Until recently, let us not forget, Disney would not employ anyone with a beard at its theme-parks. One look at any picture of Jim Henson and the 1970s creative nebulous of The Muppet Show, on the other hand, reveals a group of hairy hippies, most of whom look like Robinson Crusoe at Day 405 on Treasure Island


I admire this:

Dustin Curtis

Jaw droppingly beautiful "blogazine" with magazine like typesetting and compelling content.

You should follow me on twitter here and check out Dustin's site here.


I often ponder this this:

Attitude is more important than the past, than education, than money, than circumstances, than what people do or say. It is more important than appearance, giftedness, or skill.

WC Fields (1880-1946) US comedian & commentator.


I was taken by this:

Charles Aznavour performing "Inchworm" on the Muppet Show

I've been watching "The Muppet Show" season one lately, and found it to be a stellar education in show business. I've only known about two of the first nine stars, but upon Googling, they certainly are mega-stars.

I was particularly taken by Charles Aznavour's performance of Inchworm, from the Hans Christian Andersson movie. Moving stuff.


I keep singing this:

The Kinks — Tired of Waiting


I 'm pissed off about this:

O2 Ireland and iPhone upgrades before an upgrade is due

Strict rules around phone upgrades have never really bothered me in the past, as I'm usually due an upgrade around the time I go looking for a new phone.

Not so with the iPhone on O2 Ireland. I started a thread on their "discussion" forum and after initially being shot down by "support" staff, the thread got some good replies, particularly in relation to just how many operational "rules" a customer must "break" just to get an iPhone at all.


I think Leo has the right idea about this:

Everyone thinks of changing the world, but no one thinks of changing himself/herself.

Leo Tolstoy


I wrote this:

Rails plugin: Accepting "http://" or not on a URL field

Sometimes, you have a field on an ActiveRecord Rails model that stores a URL. The user might enter "http://" or they might not. I had this problem, solved it for one model, then needed it for another one. It's plugin baby time!

So I made the world's simplest URL field plugin

Just throw the "url_field" into your class:

class Company
  url_field :website

@company = Company.new
@company.website = "www.example.com"
@company.website #=> "http://www.example.com"

Available now, free on Github

Update: Des and James were quick to point out that my initial release would incorrectly add "http://" to "https://" URLs. Quick patch!


I like this:

Flaming Lips — Do you Realize??

Do You Realize - that you have the most beautiful face Do You Realize - we're floating in space - Do You Realize - that happiness makes you cry Do You Realize - that everyone you know someday will die

And instead of saying all of your goodbyes - let them know You realize that life goes fast It's hard to make the good things last You realize the sun doesn't go down It's just an illusion caused by the world spinning round


I shiver at this:

Most people are other people. Their thoughts are someone else's opinions, their lives a mimicry, their passions a quotation.

Oscar Wilde


I wrote this:

There's no such thing as "stuff you should know" - only "stuff you know" and "stuff you don't"

I met an interesting guy in San Francisco last week who shared some of his experiences trying to get a job in tech there. When he described the people in San Francisco and their attitude, he bowled me over with this line:

"People here don't expect you to know everything. There's no such thing as "stuff you should know" ... just "stuff you know" and "stuff you don't"

It's such an accepting attitude, and one of the wisest things I've heard in a while. I'm often blown away by how people haven't heard of this thing or that thing that I've known for a long time. Equally, I appreciate how much I can learn from others.


I enjoyed reading this:

Virtues of good CEOs

"In 2001, Jim Collins published a best-selling study called “Good to Great.” He found that the best C.E.O.’s were not the flamboyant visionaries. They were humble, self-effacing, diligent and resolute souls who found one thing they were really good at and did it over and over again."

Find one thing you're good at and do it over and over again. The one true path to success?


I believe this:

Beware of the barrenness of a busy life.



I pondered this:

Life is an experience of ripening. The green fruit has but small resemblance to that which is matured.

Charles B. Newcomb


I 'm free to post this:

"Freedom is the right to be wrong, not the right to do wrong."

John George Diefenbaker, (1895 – 1979), a criminal defence lawyer, was the 13th Prime Minister of Canada.


I 'm in awe of this:

Pet Sounds — A Capella

Pet Sounds with all the orchestration removed. Just the vocals. Shows just how good the songs were before Brian Wilson got into the producer's seat.


I read and enjoyed this:

Why Programmers Suck at CSS Design

Long, interesting and useful piece chock full of tips to help developers make their work a bit more palatable to humans


I took a deep breath, then read this:

There was never yet an uninteresting life. Such a thing is an impossibility. Inside of the dullest exterior there is a drama, a comedy, and a tragedy.

Mark Twain


I 've been singing a lot of this:

Notion by the Kings of Leon


I wonder how come I've only just heard this:

Bruce Springsteen — Thunder Road


I laughed when I passed this:


This is about five or six doors down from where I live. He's since been removed from service!


I enjoyed reading this:

Chad Fowler's survey of Rails Development no-no's

Maintaining best practices is hard, but it helps to look at it in the context of the smells you leave behind when you don't adhere to them.

I particularly like the format of putting out a tweet and bringing them together in a blog post.


I am going to this:

Huge names on the web coming to Belfast

Eric Meyer, Wilson Miner, Ryan Sims, Tim Van Damme, Andy Budd and Sam Brown, coming to Belfast in November. Andy McMillan is definitely one to watch.


I came up with this:

My personal coding guidelines for where to put stuff in Rails ActiveRecord models

While working with Rails ActiveRecord models recently, I've found that I'm never sure where to put things. Should validations go before relationships? Should class methods come before instance methods? I've started keeping a coding guideline for myself to keep things nice and consistent. It doesn't follow much of a rational order, but it's something, and I've gone with my gut and my gut is happy. Here's what I've come up with:

  • includes
  • validations
  • called class methods
  • relationships
  • callbacks
  • named scopes
  • class method definitions
  • public method definitions
  • private method definitions
  • callback method definitions

So, for example, here's how a Post class would look:

class Post < ActiveRecord::Base
  # includes
  include SpecialPostMethods
  # validations
  validates_presence_of :title
  validates_uniqueness_of :slug
  # called class methods
  acts_as_textiled :body
  # relationships
  belongs_to :site
  has_many :comments
  # callbacks
  after_create :save_slug
  after_save :ping_technorati
  # named scopes
  named_scope :most_popular, :order => 'votes DESC'
  # class method definitions
  def self.post_types
    ['post', 'page']
  # public method definitions
  def permalink
  # private method definitions
  def flush_cache_entry
  # callback method definitions
  def ping_technorati

Your mileage may vary with this, but I've found that it's really helped me not have to think about where I'm putting stuff. Everything now has a place, so I know I can consistently put things where they should be, or tidy things up when I'm using old code.


I thought about this:

Dave Winer and ideas

I like catching up on Dave Winer's blog every so often. It's definitely a whole lot more than scripting news.

I like his thoughts on ideas in snowstorms ... the kind of moments I guess that James Webb Young promotes in "A technique for producing ideas" ... the snow storm (or whatever) jolts the subconcious mind to look at old ideas in a new light.

I also like the idea of Digg for ads ... I love being advertised to when a) it's a really exciting ad and/or b) I really want the product. I really hate it when a) The ad is awesome but it's some crummy product like fat-free yoghurt or b) it's some crappy thing and it's on the TV because the guy's cousin knew the station manager and a bit of Final Cut pro.

I also hate those crappy musical Halifax ads.


I felt ill reading this:

Nightmare killing

Terrifying to think that this is real life, that it's probably just a cross-section of what's out there.


I melted to this:

Nouvelle Vague — I'll melt with you

Your whole world could be falling down around you and you'd have a hard time not living up to the title of this song.


I laughed out loud at this:

Phallic rooftop

I like how they don't mention anything about what the drawing is in the caption.


I chuckled at this:

"Automated testing is the warmest blanket for an OCD person that you could possibly wrap yourself in"

Hampton Hates Automated Testing from Hampton Catlin on Vimeo.

I don't necessarily agree with this, but I do believe that one should always have a good healthy balance in life! My stance is that testing code is one of many disciplines to help you reflect on the work that you've done. As well as the obvious benefit of helping you out when you break stuff later!

My favourite comment: "whoa, your hair! obviously i have nothing productive to say about automated testing. ps. nice shirt!"


I coded some of this:

Using Twitter's API to sort friends / followers alphabetically

One of the reasons I set up this tumble-loggy blog, rather than stick with a regular blog, was so that I could share little snippets of code every so often, related to the stuff I was working on.

That's why I was delighted when Jon Crawford (NewMonarch) on Twitter asked me this:

I need to grab a Twitter user’s followers on the fly. As you probably know, the friends list isn’t returned in alphabetical order. Instead it’s returned in the order of which you started following the user, 100 results as a time. I’d prefer that the results were returned in alphabetical order by screen_name.

I like this kind of request, because it's one I know the answers to!

Since the beginning, Twitter has provided friends / followers methods for getting a list of a Twitter user's friends or followers. These methods have been damned to hell though, because they only report back 100 users at a time. Worse, they send back all manner of extra data, such as the latest tweet and in depth profile information. This meant for a lot of wasteful traffic back and forth to the API, and crucially lots of requests, eating up your API limit.

This was a particular bone of contention for an app like Qwitter. For someone like Gary Vaynerchuk for example, with tens of thousands of followers, we'd have to make hundreds of requests to the api just to get a list of Twitter follower IDs. A fun programming exercise, no doubt, but seriously inefficient.

At the beginning of February, Twitter released two methods that mark a change in the game for Twitter API developers: their social graph methods

Essentially, these methods let you download an entire friends list or followers list in a single API call:

curl http://twitter.com/friends/ids.xml?user_id=1401881

It just returns a list of IDs, but it's massively more efficient than making lots and lots of calls to the API, particularly for Qwitter.

For Jon Crawford's problem, it marks the beginnings of a solution. Because Qwitter compares the differences in two lists of IDs, we don't rely on associating usernames with IDs.

Here's a script that returns an array of friends sorted in alphabetical order. I've used John Nunemaker's excellent Twitter gem.

The big problem with this script is that it's actually more inefficient than paging through 100 followers at a time, as it makes one API request per user. Perhaps for the first run of a user, something like this would be better:

Then keep a cache of usernames and associate them later. It all really depends on your needs.


I love it when I remember this:

Múm — Smell Memory (live clip on Youtube)

This occassionally pops in to my head and makes me smile. I love the simplicity but also the harshness of the melody.


I don't know what to think of this:

Giant Tetris (or tiny Tetris)

It took me 5 minutes to get an eighth of the way across. Fun though!


I developed this:

My screencasting flow

I've been using Screenflow for the last few days to do some screen casts for a client. It's pretty good. Not perfect, but neater than Snapz Pro X.

I developed a pretty good flow, which I'd like to share. One thing I can't emphasise enough is the need to write a script. I tried doing voiceover and actions at the same time and it just ended up a mess trying to type and talk convincingly at the same time. Here's the flow:

  • Write a script based on the client's requirements. Guess at how long the action will be on screen to decide on how wordy each explanation should be.
  • Do the screen capture video with the script on screen. I kept mine in a narrow window along the right side of my screen. I glance at the script while I record the actions, trying to hear myself saying the words in my head, to keep pace.
  • Save the video and record the voiceover on a new track. In Screenflow, you can hit Apple-Shift-R to add a recording. You have to manually hit play on the controls to play back the 'cast.
  • You might need to tweak the script if it doesn't quite match the video. Try and keep the pace smooth, but don't be afraid of a gap every now and again.
  • Rinse and repeat

I can't emphasise enough how important it is to have a script. I'm constantly tweaking, tweaking, making sure the words are just right.

This flow would probably make a good screencast itself. I might do that some time. It would also make for a very neat presentation. *Adding to my list*


I wish I could persuade more people about this:

"It’s entirely your responsibility to make your dreams come through."

David Heinemeier Hansson


I wrote this:

Talks I'd like to give

This last week has been very conference heavy, but it's also been an indicator to me that there's lots of stuff inside my head that people could probably make use of. I'd be really interested in speaking more about my experiences with:

  • CouchDB - I've dabbled a good bit and released Stuffing
  • Amazon Web Services (particularly EC2 + EBS, S3 and SQS) - Lots of experience building and scaling Exceptional
  • Customer service - I've manned the feedback email for Exceptional since we launched

The list is really for my own reference, but if you'd like to hear my thoughts on these, get in touch!


I presented this:

My Twitter API talk

I gave a talk last Wednesday at "API wars", a Web2Ireland event on APIs before the Facebook Developer Garage. It seemed to go down very well. I think the whole thing was filmed, so hopefully all the talks will be available online. It was my first talk in front of a sizeable audience and it went very well. My green-on-black Terminal screenshots didn't appear on the big screens, so with apologies to _Why, I left the stage to show the crowd how the Ruby Twitter gem works. A lot of fun.

I've made the slides available as a PDF.


I am delighted to discover this:

Twitter social graph methods

Twitter's social graph methods, launched last month, are the secret sauce behind Qwitter. Up until yesterday, when I implemented these methods in the app, I had been mocking them by using round robin to loop over the many thousands of Qwitter users, paginating through hoards of data just to extract the user IDs of followers.

Now I can get all the user IDs of someone's followers in just a single API call.

This is big news not only for Qwitter, but for any app that is doing things with followers lists. No more are we restricted to the 100 per page limit that was imposed before ( plus the unecessary bloat of getting latest status, screen name etc.

The good news is that I can now say that Qwitter should be able to maintain a decent bit of reliability, at least up until around 250k users. We're not quite there yet.


I agree with this:

"The best plan is to overload Google with a long tail of good stuff and to always act as if you're on Candid Camera, because you are."

Seth Godin


I chuckled at this:

"If not actually disgruntled, he was far from being gruntled."

P. G. Wodehouse


I wrote this:

Good writeups for projects I'm involved in

Two writeups in a week, awesome. Exceptional was featured in Smashing Magazine's 10 Useful tips for Rails Developers ... we got a really nice big screen plastered on the "Track application exceptions" section.

Also, to my delight, Stuffing is featured on Rails Inside. Proud to see my little experiment get attention. I think that CouchDB really is the next big thing.


I feel obliged to admit this:

I swam a half-mile!

As it turns out, my maths suck. I was informed yesterday that a mile is actually 64 lengths, not the 32 that I achieved... I was basing my figures on the pool being 50m in length, not 25m.

Still, I was actually happy enough to learn that, as the point of my post was less that I swam a mile and more that a definite goal is more easily achieved. I now have a new definite goal: 64 lengths. A mile!


I wrote this:

I swam a mile

I started swimming a couple weeks ago as a way of relaxing / keeping fit in the morning. I've been going in about a half hour before I start working, so I only fit about 10 lengths in. Today I got in a bit earlier and when I got to 15, I realised that I'd swum about 750m. I realised that hey ... I could get to a thousand, and if I really wanted to, I could probably get up to 1.6k - the elusive mile! Well, it's surprising how easy those next 17 lengths came to me once I had that goal. A mile! There was something exciting about that last length, legs flailing, arms all over that place. Exciting, rewarding. A mile!

Update: Actually, it was only a half-mile. Dang!


I enjoyed this:

Louis CK on Conan

A client recommended this after a long day's work. Louis CK on counting your blessings ... "Maybe we need some time where we're walking around with a donkey with pots clanging on the sides"


I appreciate this:

Flippin' hell


I firmly believe, but don't often enough abide by this:

"In matters of style, swim with the current; in matters of principle, stand like a rock."

Thomas Jefferson, 3rd president of US (1743 - 1826)


I was amused by this:

Neat preview of new U2 album on irishtimes.com

Apparently one of the songs that I've been working on with some mates is very similar to one of these. Dang!


I played with this:

Google web history

Extraordinarily responsive breakdown of your own personal Google usage. Eerie, but useful!


I was shocked to find this:


The UK Companies House company search shuts down after midnight. Doesn't this kind of miss the point of the internet?


I was interesested to read this:

Dan Benjamin on why avatars matter

Some good insight from one of the smartest guys on the web


I appreciated this:

Handy sample Rails app with YUI uploader

So getting the Yahoo YUI uploader to work with Rails is a bit like voodoo. Cameron has published a concrete example using jQuery as well as YUI that works right out of the box.


I loved this:

The Pirate Bay legal story

A description of the courtroom proceedings of the legal case against The Pirate Bay. A riveting, exciting read, an irony-fuelled good vs. evil battle


I like the look of this:

YUI Uploader

The YUI uploader is an open source extraction used in the Flickr web-based uploader. Cool stuff, and in theory more reliable than SWFUpload if it's in production use on Flickr.


I shared this:

'fd' tab trigger in TextMate for creating new Rails form fields

In my screencast below, I used an 'fd' tab trigger in Textmate to generate a div containing a field and a label. This isn't part of the Rails Textmate bundle. Here's the code to generate a label and field inside a div:

  ${RAILS_TEMPLATE_START_RUBY_EXPR}f.label :${1:attribute}${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}${RAILS_TEMPLATE_END_RUBY_EXPR}


I recorded this:

A short video introduction to Stuffing


I used this:

Preventing caching in Rails controllers

Much as our Exceptional competition is "healthy," Thoughtbot are a smart bunch. Paperclip is a top drawer attachments plugin and this post by Chad Pytel is an interesting read on how to prevent pages being cached in Rails controllers. Normally caching is a useful tool for improving the response of your webapps, but in many cases you want the data to be fresh on every request. Take home point: if you want your page to be 'cache-resistant' in Safari and IE, stick an empty iframe in it.


I photographed and posted this:

Photos from the Dublin Twestival

The Dublin Twestival was on last night. Lots of people, lots of fun. Cool to see a LOT of faces that I've not met before alongside a healthy dose of regulars. Bonus appearance from and photos of Twink, who showed up with an entourage from BScene model agency. Crazy. Hope you enjoy my photos. I got a good one of Twink and another good one of Jason Byrne.


I helped to make this this:


Niall Harbison tweeted last Saturday that he had an idea for an app that he wanted done quickly. We got on board straight away. I hacked a prototype together, Eoghan did the design and Des helped with the all the projecty bits. Twecipe was born yesterday. I'm quite proud of how much we got done in just a few days, while keeping plenty of time for client work.


I needed this:

Fix for when Apple-Tab not working

My Apple-Tab key combo to switch apps wasn't working. Des gave me a neat little one liner to fix it:

killall Dock

This stops the Dock, which gets automatically restarted by OS X, and very quickly Apple-Tab works again. Sweet


I totally, totally, totally agree with this:

"The best part of building ‘as little as possible’ comes after launch. Every feature you skipped or held off on is free open space in the app for later development."

Ryan Singer on Signal vs. Noise


I plan to go to this:

Doctor Millar comeback shows

Doctor Millar is playing Dublin tonight in Bewley's Cafe Theatre. I recommend the show. He's also playing next Wednesday, which is when I plan to go see him.


I am very impressed with this:

Transparent background screen effects

Setting desktop backgrounds to mimic what's actually behind them. Very smart. Very creative. I really like the transparent one


I shiver when I listen to this:

Mundy - July


I wish more people would think like this:

The Little Coder's predicament

"You’ve got to be able to write a single line of code and see a result." _why nails it.


I empathised with this:

"What should have been a one-line code fix is turning into another QuickBooks spelunking expedition."

Mike Gunderloy on Twitter


I love this:

Rilo Kiley "The Frug"


I photographed this:

Photos from the Innovate Europe drinks in 4 Dame lane

I went along for drinks with all the lads who had attended the Innovate Europe event with EI last week. As usual, I had my camera so I snapped a bunch of headshots. I think there are a few high-profile guys in there.


I took this:


My housemate built a snowman over the weekend. He looks kind of sinister, but it was really cool to get enough snow to build a snowman.


I wrote this:

Stuffing CouchDB into Rails

Stuffing is a Rails plugin that lets you add a CouchDB data store to an existing ActiveRecord model.

class Post < ActiveRecord::Base stuffing end

The Post model above is just an ordinary ActiveRecord model. It has a MySQL table called "posts" behind it. The fields in the posts table get mapped to methods in instances of Post. But it also has the meta-attribute: stuffing. You can assign a hash of arbitrary keys and values to the stuffing method and it will be persisted automatically to CouchDB.

It works like this:

@post = Post.new({:title => "Cake", :post_type => "recipe", :stuffing => {:ingredients => ['flour','sugar','eggs'], :description => 'mix them all up'}) @post.save @post.stuffing => {:ingredients => ['flour','sugar','eggs'], :description => 'mix them all up'}

When you save this, with @post.save, the :stuffing gets saved to CouchDB. You can retrieve the attributes by accessing the stuffing hash: @post.stuffing['ingredients'] or you can call them by prefixing stuffing_ : @post.stuffing_ingredients. The data gets updated when you update it. It's just like having a big mega-hash in the sky on top of regular old ActiveRecord.

What's the point? Why not just use a CouchDB wrapper like ActiveCouch, CouchRest::Model etc.? Well, CouchDB has a lot of features. It's got javascript views with map-reduce, crash-only design, schema-less documents, bi-directional replication. Lots of really cool stuff that one day we'll all have in our own living rooms. But right now, today, it's only really the schema-less design that appeals to me. I mean, I love the other stuff, but when I'm quickly prototyping an app (as I often am in Rails), I love the idea of just being able to add another field to a form and bam! I have a new attribute. But then I want to be able to quickly hook on all the tried and true ActiveRecord plugins that I'm used to. Hell, I want to be able to call Post.first, Post.last and Post.all.

Stuffing helps to gently add a CouchDB layer to your Rails app without completely removing you from ActiveRecord. Think of it like swimming in CouchDB with arm-bands. Or like a Couch, but without the covers, trimmings or fancy coasters. Just the stuffing.

The plugin is yours, available to enjoy on Github: http://github.com/paulca/stuffing/ where there's a full documentation and some more examples. Feel free to contact me if you have any questions, or fork the project and patch back if you think I screwed something up, or if something can be improved.


I wrote this:

Playing with CouchDB over the last few months

I've had such a good amount of time with CouchDB over the last few months. I first read about CouchDB when I was back in college on Tobias Luetke's blog. It sounded awesome, but that was about that. At the time, it was quite complicated to get up and running, at least too complicated for me.

Then last year I met Jan Lehnardt and the game changed a little for me. I knew someone connected directly with the project. It became exciting for me. Jan got me up and running with a masterclass in CouchDB at RailsConf Europe last year. My appetite was squarely whetted.

My first foray into CouchDB was a little experiment called "Couchy". Couchy uses a TemplateMap class to parse fields out of HTML and create a schema out of them. It was a fun little project and got me up and running with the basic concepts.

It was a while before I got to try anything else, but in the meantime, Chris Anderson had published CouchRest::Model, which was very interesting, because it attempted to create more ActiveRecord-like models out of CouchDB, including dynamic views. It was full of smart stuff.

I got my hands dirty with CouchRest::Model building the first iteration of this little tumble log. I wanted a dynamic data store so that I could post any kind of content - a post, a quote, a link whatever, but I wanted to add to these easily in the future. Not like create a new database field or fill out some crazy schematic. Like just add a new form and I'd have a new post type.

I got quite far with CouchRest::Model, but then a cascade of issues hit me. What about pagination? What about attachments? What about search. All of these things have been solved really well with will_paginate, Paperclip, ThinkingSphinx. There had to be another way.

Today, in about 20 minutes, I was able to take the cool schema-lessness of this little tumble-log and hook it into a couple of ActiveRecord models that I'll be able to use with the above plugins and ActiveRecord finders. I used "Stuffing" a little plugin I wrote to do just that. Stuffing is the subject of my next post.


I stopped maintaining this:

My old blog

This is my old blog. I used Mephisto, which I quite liked, but I found that it ... wasn't just for me. So like any good hacker, I wrote my own blogging engine. And away I go.

Made by Paul Campbell. paul@rushedsunlight.com. Twitter. Github.