Well, hello!

Hello to everybody who knows me from my two previous blogs: edendevelopment.co.uk/blogs/aimee and aimee.mychores.co.uk. I have decided to merge the two into one, which for convenience i’ve decided to have hosted on wordpress.com now.

Big news

In case anyone is not aware, let me share the news that eden development, my place of employment for nearly 3 years, closed its doors in March. For me this is sad news: eden was a truly remarkable place to work.

Through eden i met many amazing people, and learnt to hone the craft of developing excellent quality software. I have learnt how to listen to clients and understand their needs. I have been privileged to take on despo and Alberto as apprentices, imparting my knowledge and care and seeing them develop. Most importantly, i have grown in self confidence, to the point where i am now able to journey out on my own, taking on contracts and freelance work.

Contracting

My contracting has begun at a consultancy firm in London. I have been contracted as a front-end developer, doing HTML, CSS and a bit of Javascript. It is easy work for me, not really particularly challenging. I am happy with that: at the moment i have big challenges to do with commuting and getting used to being self-employed, keeping control of expenses, invoices and tax. I didn’t want the added pressure of difficult work on top of that.

It turns out that the job is suiting me very well. I get on well with the people i work with, and i found i was able to start providing value for the company from my first day. I’m working hard and i believe i am exceeding their expectations of me. At the same time i’m learning how to use Demandware, a powerful ecommerce platform, and i may well find that the skills i learn here could come in useful for me again at some point in the future.

Looking ahead

My contract takes me until the middle of May, at which point i’d like to spend one week working on a freelance project. After that i’d like to take on another contract, and this time i’m particularly looking for something that uses my Ruby skills, as well as my knowledge of behaviour driven development. There are two possibilities i’m looking at, and i’m fairly confident that one of them will work out.

I am always interested in meeting new people to talk about work that i may be able to help with. I am really enjoying the freedom of contracting, so i’m not looking for permanent employment at the moment, unless it’s a very good offer. I’ve realised that job security is a myth, and painful though it was to leave eden, i think i needed that push to venture out on my own.

Right now

At this very moment i am at Scottish Ruby Conference in Edinburgh. I really enjoyed it last year, and this year seems even better. I am meeting new people and rekindling previous friendships. Today i have been inspired to work on a charitable project, i enjoyed an entertaining discussion on programming etiquette by Jim Weirich and Chris Nelson, and i was excited to see how MacRuby works.

It’s lovely that my mentor Enrique is here at SRC, sharing an apartment with me, and my apprentices are both here too. Edenites Chris and tooky are also around, and it’s great to spend time together again. Our shared experience of being part of eden is something that will remain with us, and we will always be good friends.

Notice that i say “edenites”, not “ex-edenites”. For me, eden was all about the culture and the people. My pride for quality of work, my valuing of client relationships, my commitment to learning, my honesty, my humility, these are eden’s values that have become deeply ingrained in me, that i intend should never leave me.

Thank you

If you read this far, thank you. You can see why this post has been a long time coming. It’s only now that i’m at Scottish Ruby Conference that i can really take the time to relax and reflect. The last few weeks have been like a whirlwind for me. Thank you to all who have supported me and encouraged me. It has been scary and exciting, and i’m relishing these new opportunities!

Here’s to my ongoing journey! :)

News from TypeMatrix

I’ve just had an email reply from TypeMatrix. Two things really excite me:

1. They are intending to get Colemak skins printed very soon, and when they do they’ll be advertising it on their site.

2. They are trying to get their keyboards into schools to get them in front of children from an early age. The intention being that they’ll give kids the skins and let them choose between Qwerty, Colemak or Dvorak as they wish.

What a fantastic idea! If anyone has any ideas for participating in the experiment, i suggest you contact TypeMatrix!

Colemak on a mac

These are the steps that you need to take to get Colemak keyboard layout fully working on your iMac or MacBook, including remapping Caps Lock to Backspace.

Installing the layout

Download Colemak.keylayout and Colemak-Mac-Icons.zip. Unzip and put them in your ~/Library/Keyboard Layouts

Files for the Colemak keyboard layout

You will need to restart before they will be picked up by the system preferences.

Activating the layout

Having restarted, go to System Preferences -> Language & Text -> Input Sources and you should find Colemak as an available layout. You may want to tick “Show Input menu in menu bar” if you want an easy way to switch layouts. You can also play with the keyboard shortcuts for switching.

Enable Colemak layout

A tip for beginners: if you enable the “Keyboard & Character Viewer” at the top of the list then you can get a useful on-screen picture of the layout.

On-screen Colemak keyboard viewer

Mapping Caps Lock to Backspace

I found this is easily done with PCKeyboardHack. Download it, unzip it and install it. You will have to restart again, unfortunately. This is Serious Business we are doing here!

Having restarted, go to System Preferences -> PCKeyboardHack and tick the first option: Change Caps Lock to keycode 51 (Delete)

PCKeyboardHack change Caps Lock to Delete

It feels slightly slow to respond and you can’t press and hold to delete many characters at once. I didn’t think i’d keep it, but just as i’ve been writing this blog post i’ve found i’ve got used to it extremely quickly (actually that says more about the number of errors i’m making at the moment!)

In any case my TypeMatrix has the backspace in the middle, which i think is an excellent place for it, and i don’t wish to annoy the people i pair with who like to have Caps Lock as an extra Ctrl key.

But there you go – that’s how you do it if you want to! :)

Colemak keyboard layout

At eden lately there has been a surge of interest in the Colemak keyboard layout and TypeMatrix keyboards.

Colemak is an alternative keyboard layout to Qwerty, which as legend has it put the keys in a non-optimal position to slow people down on old typewriters in order to reduce jamming.

The diagonal arrangement of keys on most keyboards also harks back to the typewriter era. TypeMatrix avoids this historical baggage by arranging the keys in columns, and providing a hardware switch to both Colemak and Dvorak layouts.

TypeMatrix 2030 Colemak layout

My typing history

I switched to Dvorak almost ten years ago because i wanted a keyboard layout which was designed to be more efficient and comfortable to use than Qwerty. I became pretty fast on Dvorak: my typeracer average score was 97 words per minute.

For a few years i have suspected that Colemak is even better than Dvorak, and i would have switched sooner had i known that my TypeMatrix keyboard supports Colemak. You see, for pair programming, it’s really useful to have a keyboard with your chosen keyboard layout built in, otherwise you have to constantly change the settings on the operating system.

At the end of January, Tom Brand found out that TypeMatrix also enables Colemak. For some reason, they don’t advertise this fact anywhere! For the record, you press Fn+F5 and hey presto you’re in Colemak mode!

The deciding factor for me was this keyboard layout analyzer which allows you to type in your own text and see all sorts of statistics for different layouts. I tried it out with emails i have written, code samples and tweets, and in every case Colemak was significantly better for me than Dvorak (and of course, far better than Qwerty).

Learning Colemak

 #colemak typing practice at lunchtime with @tom_b025 on our ... on Twitpic

So at the beginning of February i started learning Colemak. I have been using aTypeTrainer4Mac which has a horrible user interface, but actually works really well in encouraging you with your progress, moving up through the levels at an appropriate pace.

In the middle of February i had a holiday during which i did a lot of Colemak practice, and used Colemak almost exclusively, so that when i came back to eden i was ready to pair program with Colemak.

I am still quite slow going, and have to apologise for all my mistakes, but for the last two weeks i have been getting better all the time. It is starting to come more naturally to me now, patterns are getting stored in my brain, and it feels really comfortable.

Colemak compared to Dvorak

 my lovely new "colemak" keyboard skin! thanks to @... on Twitpic

Only now that i’ve switched to Colemak can i realise the flaws of Dvorak. The L was a strain, and i did not like the second finger stretches to Y and F. It turns out the G and J are much more sensible characters to put there.

It’s great to have the X, C and V back to where they were on Qwerty, as well as the comma and full stop, and all the symbol characters. Not that i need to look anyway: my new TypeMatrix skin has none of those keys marked!

My best typeracer Colemak speed so far has been 44 words per minute. Not a patch on my previous Dvorak speed, but i will keep practising and hope one day to break 100 words per minute.

On teaching kids Colemak

I was recently asked whether Colemak/TypeMatrix would be good for school children to learn. Whilst i hate to think that the baggage of the past continues to be passed on to another generation, the truth is that we still live in a Qwerty world.

TypeMatrix keyboards are expensive, and Colemak isn’t easily available on all computers (unlike Dvorak). TypeMatrix does not yet make a Colemak skin, and the skins they do make look cluttered because of the overlap with the function keys. I enormously prefer the blank layout, but i can’t imagine many kids getting on too well with that!

I don’t know what the answer is just yet. I’d like to see more people realise the benefits of Colemak as a superior keyboard layout and make the switch. I would also like to see more Colemak keyboards made that don’t require downloading any software or switching any settings.

Maybe as a society we can begin to wean ourselves off the hangups of obsolete 19th century typing equipment and get used to a 21st century solution!

Learning from my apprentices

I feel truly blessed to have the opportunity to be a mentor to my apprentices Alberto and despo. I am finding that i am really enjoying the role, and i feel such a sense of compassion and pride for my apprentices.

Whenever i pair with anyone, i always learn something. Although i am spending much of my time consciously teaching, to also learn from my apprentices by pairing with them gives me such a good feeling.

Thanks to despo, i am now using iTerm instead of Terminal. I have been encouraged finally to use Enrique’s Vim Ruby Refactoring tool, we have set up spork and autospec, and i have learnt about RSpec’s nested format. Together we both found out how to use RSpec shared examples today.

Importantly, despo is helping me to realise that i have a tendency to hold too much in my head, and try to do too much at once. I am grateful to despo for restraining me from racing ahead too fast, and for reminding me to do one thing at a time. It is good for me to realise what i need to do to become better at teaching.

I have not yet had the opportunity to pair for more than a few hours with Alberto, but i know i will get the chance soon, and i know i will learn new things from Alberto too, which excites me no end! :)

Pretty autospec growl messages

It’s interesting how you can sometimes notice something through someone else’s eyes that you’d previously overlooked. This week i have been mostly working with my apprentice Despo on a Rails project. Despo noticed that running specs in Rails takes a long time to initialize, which something i am well aware of but i guess i’ve sort of got used to it.

So we decided to do something about it. The first thing we did was set up Spork. If you want to know how to do that i recommend this post by Chris: How to get Spork working NOW on Rails 3, Rspec 2 and Cucumber.

As Chris mentioned at the end of that post, autotest and autotest-growl play well with Spork, so that is what we did next. The results can be quite nice!

Autotest notices which files have changed and starts running the relevant specs:

Autotest notices modifications

Growl can be configured to show failure messages in red:

Growl can be configured to show failure messages in red

Success messages are shown in green:

Success messages are shown in green

Growl can also show when specs are pending:

Growl can also show when specs are pending

How did we achieve this?

Firstly you will need to install the gems autotest and autotest-growl. Either include them in a bundle, or install them system-wide if you want to use them across all projects.

If you use RVM for different versions of ruby you might find this command useful:

for version in $(rvm list strings); do rvm use $version@global && gem install autotest && gem install autotest-growl; done

Secondly you will need a .autotest file. You can either put it in your project’s root directory, or in your home directory ~/.autotest

Here is mine so you can see what it looks like:

#!/usr/bin/env ruby
require 'rubygems'
require 'autotest/growl'

Autotest::Growl::image_dir = File.join(ENV['HOME'], '.autotest_images')
Autotest::Growl::show_modified_files = true

Autotest.add_hook :initialize do |autotest|
  %w(.git .DS_Store db log tmp).each do |exception|
    autotest.add_exception(exception)
  end
  autotest.order = :random
end

Thirdly you will need to install Growl and configure it to your liking. I have mine set to Music Video because it’s so impossible to miss!

The only trouble with the Music Video style is it can only display one message at a time, so i make it fade in and last for just 1 second. Happily, with growl colouring, you don’t really need to read the message – the colour tells you immediately what happened.

The colours you need to set are:

  • Very Low for passed
  • Moderate for pending
  • Normal for info
  • Emergency for failed (or syntax error)

Here is my Growl configuration:

Here is my Growl configuration

Finally, if you want cute pictures to come up with your growl messages, you simply need to put them in ~/.autotest_images – named passed.png, pending.png, info.png, failed.png and error.png.

These are my autotest images

Running autotest

Now, of course, you need to know how to run it!

With Rails 3 you need

AUTOFEATURE=true autotest

With Rails 2 it’s

AUTOFEATURE=true autospec

If you only want to run specs and not features, just take away the AUTOFEATURE=true bit.

But what about FSEvent?

The normal behaviour for autotest is to constantly poll your filesystem looking for changes. This is wasteful as it will use a lot of CPU and drain your battery, but there is an alternative. From Mac OSX 10.5 onwards an FSEvent service reports modified files.

To make use of FSEvent, you should be able to just install the autotest-fsevent gem and require 'autotest/fsevent' in your .autotest file.

Unfortunately, when i tried it, the mere presence of the autotest-fsevent gem seems to cause the specs not to run. It notices changes but doesn’t do anything about them. So if anyone can help me to understand what’s up with that, i would be grateful!

In the mean time, i’m just trying to remember to stop autotest whenever i’ve finished using it.

Welcome to Despo and Alberto!

I would like to make a big public welcome to our new apprentices Despo and Alberto who are starting at eden very soon!

Despo is well known to us through the Software Craftsmanship User Group, code retreats and other software crafting events. We are looking forward to having Despo join us tomorrow, and we’ve already got plenty of work lined up for Despo to jump straight into (pairing with other edenites, of course!)

Alberto has recently spent a 4 weeks here as an intern, and we are delighted to welcome Alberto back for an apprenticeship with us, starting next week. We have already seen Alberto learn a lot during those 4 weeks, so it will be great to follow Alberto’s further progress.

Both Despo and Alberto have solved the eden minisculus challenge!

I am personally very excited as i shall be acting as a mentor to both of them. This is a new challenge for me, and i’m looking forward to it. I very much enjoyed working with Tom over the summer, and i found that Tom seemed to learn a lot from me by coincidence without me actively trying to teach anything. I think that my skills of empathy and personal development help to make me suitable for the mentorship role.

Welcome, new apprentices, we are all very happy to have you join us! :)

MongoDB and Merlin’s Castle

Recently i have been occupying my free time writing a remake of a game i used to play at school. It is called Merlin’s Castle, and it’s a text-based adventure game where you move around in the world, picking up items to overcome obstacles. It’s great fun!

You can play Merlin’s Castle at http://merlinscastle.net.

Last week Russell Smith visited eden to pair for a day, and we got talking about MongoDB, a document oriented database. I had already been thinking about switching Merlin’s Castle to a document oriented database, so it seemed a good opportunity to try out MongoDB with Russell’s help.

I found it was very easy to switch over to MongoDB using the MongoMapper Ruby object mapper gem. I have found many benefits of switching over to MongoDB, so yesterday i did a tech talk to share how i did it, and what i learned from it.

You can watch my presentation at http://vimeo.com/17815778.

I like document oriented databases – they make a lot of sense to me. I used to work with Lotus Notes a long time ago. I also tried out CouchDB a few years ago. I’m very pleased to have an application that uses MongoDB, and i’m sure i’ll be using it again in the near future.

Eden's values (by Alberto Peña)

[This is translated from Alberto’s blog post: Los valores de Eden. I apologise if my translation isn’t perfect – i’ve only recently started learning Spanish!]

Attached to one of the walls at Eden is a card with a phrase that sums up Eden:

Eden exists to enable people to achieve better, greater, more worthwhile things

I don’t know about you, but I like this a lot :D

As I mentioned in previous posts, Eden is guided by a set of values that all the “Edenites” understand, share and abide by. In fact, these values are decided together as a group, as they do with everything else :D All of Eden’s values are related to that phrase.

We build relationships
Eden is not just concerned with building software. Additionally, it is interested in building relationships of total trust with its clients. They are aware that they hold their reputation and livelihood in their hands.

Of course, they are also interested in their own relationships between edenites. In fact, what you will mostly see at Eden is smiles :D

We have a mindset of mutual respect
This is very important at Eden. There may be differences of opinion, but Eden never loses respect for other people.

Really, it’s amazing. In these 5 days there has not been a single lack of respect between edenites, and by lack of respect I am even referring to the typical Spanish joke of “será cabrón :)” [common Spanish joke that translates to “you bastard”]. Yet i saw an example on the part of the client, and I witnessed how it was nipped in the bud by the edenites with a warning.

We ask “why?”
Eden wants to add value for its business clients, and to do this, they have to be clear about their motivations.
Logically, if it is good for a client, it’s also good for Eden. This requires them to question their motivations in order to improve.

We craft excellence
Eden is a great team. They are very good at their job, and very responsible. This responsibility leads them to only ever deliver excellent code. If the functionality is not to the required standard, it is not delivered.

We are disciplined
Not disciplined in the sense of following orders, but disciplined in the sense of being responsible. They prefer to fix the root of problems rather than treat the symptoms.

We learn aggressively
All the members of Eden have a passion for their profession and are always learning (new languages, new techniques, etc.) And they share their learning with each other.

We give generously
Eden is truly generous. They engage with their communities (not just with software communities), they welcome visitors, encourage activities, etc.

If Eden is set up in Madrid, you’ll understand better what I mean. Nos lo vamos a pasar piruleta :D [Spanish phrase meaning: we’re going to have a lot of fun]

We value people
Eden does not allow projects and their due dates to interfere with the personal life of the edenites. Additionally, they encourage activities that strengthen personal relationships between edenites (for example, the showing of Avatar the other day)

I have to say that all this comes naturally. There is no “fuerza la amistad” [forced friendship]. They are just good people working together :)

We are honest and open, even when it’s hard
The trust between everyone at Eden allows for brutal honesty. If something is not working, they say so, whatever the cost.

Actually, in the week that I’ve spent with them the only time that there was a warning was in order to improve the working conditions of a client team. It wasn’t easy, but it was necessary, and the client team accepted it and acknowledged the problem.

We are humble
Eden is humble and the edenites are humble. They know that they are good at what they do, but they are also clear they can still be better. (Although right now I can’t see how :D ).

That’s all, what do you think? I hope that this gives an idea of what kind of a company Eden is (or what I understand Eden to be), but really it’s much better :) Seriously, you have to experience it to see for yourself. This tweet by Luismi Cavallé sums up pretty well how I feel after this week :D

[The tweet, also in Spanish, says, something about discovering that other, better worlds are possible, and that it’s natural, and that there is no going back.]

Welcome to Alberto Peña!

Last week eden were delighted to receive Alberto Peña as our newest intern. Alberto is a Java programmer from Spain, who has taken a leap of faith by coming to intern at eden, setting aside the comforts of a job, girlfriend, culture and language in order to experience something new. For this, i admire and respect Alberto very much.

 @plagelao server github repository is http://github.com/plag... on Twitpic In the first week we set a deliberately impossible challenge for Alberto: to implement rfc2616 – the HTTP server/client protocol. We stipulated that it must be developed with BDD using Cucumber and Rspec. On Friday Alberto gave a presentation of the first week’s work: a demonstration of the successful GET request. Alberto walked us through the code explaining how it works, and talked about the challenges and decisions faced during the week.

Alberto has been blogging every day, and it’s really interesting to read about life at eden seen through somebody else’s eyes. I encourage you to follow Alberto’s blog: El Programador Feliz. It’s mostly in Spanish, but if you’re not completely comfortable reading Spanish, Google Chrome should automatically offer to translate it for you.

Alberto is not being paid during this internship at eden, but there is a pledgie page in case you wish to make a donation (which goes directly to Alberto) – Help an aspiring craftsman on his journey.

Welcome, Alberto! It is a real pleasure to have you with us!