Robot Has No Heart

Xavier Shay blogs here

A robot that does not have a heart

New blog - TwoShay

My brother and I have started a new blog about being more awesome. We called it TwoShay. You should check it out.

I’ll still keep posting tech things here.

  • Posted on May 29, 2010
  • Tagged life

Evolution of a graph

Recently I have wanted to chart some cost data I collected on various foods. As a baseline for discussion, here is a very vanilla excel type graph, reminiscent of ones I am certain you have seen in powerpoint presentations:

This is not a good graph for several reasons

  • Only provides a general overview of the data – some foods are cheaper, some more expensive, so what?
  • Labels feel cramped and ugly.
  • The grid is too prominent and distracting, without being very helpful – you can’t read accurate values from it.

The biggest problem is that it doesn’t “invite the eye to compare”. It doesn’t leave an impact. The first step to addressing this is to revisit the data – it’s quite possible you just have boring data. In this case, I improved the data by coding it according to whether it is vegetarian or not.

Version 2

For the next iteration of this graph, I colored the graph to highlight the vegetarian aspect of the food. To address the other issues, I moved the labels into the legend, and completely removed the grid, instead displaying the values directly on the graph. This technique works due to the low number of data points. You can think of it has “enhancing” the table rather than displaying a high level overview of it. Also, a serif font (georgia) was used.

This is certainly an improvement, but it still has its flaws

  • 8 different colors, which distracts from the data, and the vegetarian data is muted.
  • It is much harder to identify the food with the data point, now that the labels have been moved into the legend.


I iterated again, moving the labels back down to the x-axis, which in addition to solving the identification problem, allowed me to drop back down to 2 colours. In our initial graph this felt cramped, so I added some more whitespace and also kept the serif font from the last iteration.

This version of the graph speaks much louder. It’s easier on the eye, and the conclusion I want to draw from the data is clearly expressed. I am using this graph (with proper references and notes) on a new information site I’m working on – it’s far from complete but you can follow along on github if you’re interested.


The first graph was made with OpenOffice spreadsheet, the second with a hacked version of flot for jQuery. The final graph was made with a new jQuery plugin I wrote called tufte-graph. There is a meta-lesson here – I spent hours hacking different JS libraries to try and get them working exactly how I wanted, in the end the quickest solution was to just write what I needed.

I use Colour Lovers to find color nice colour palettes. Works much better than trying random RGB codes.

Final word

Spend time on your graphs. A picture is worth a thousand words. They are too often neglected, and it doesn’t take much effort to make them really shine.

Code for Christmas

Developers don’t have enough time.

We’re all too busy working our day job, or looking after our better half, to give our pet projects the attention they deserve.

That makes time the most valuable thing we can give. This year for Christmas, why not give a fellow developer some?

Ticking off an amazon wishlist never really resonated with me, so this year here is what we are all doing instead:

  1. Find someone’s pet open source project – I’d start at github
  2. Contribute! It doesn’t have to be much – a spec or two, some documentation, or even just a “hey it works on my box”. Fork, commit, pull request.
  3. Wish them a Merry Christmas!

That shouldn’t take you more than an hour. It’s a total win all around – you get to hone your chops, they get some love on their project, and the open source ecosphere is improved. If you’re feeling generous, or don’t have any friends, there’s no shortage of projects that I’m sure would welcome some support.

My wishlist is any of the ruby midi projects out there.

I'm number 8!

I had no idea Working With Rails ran a monthly hackfest. Basically, you contribute to rails, you get points, at the end of the month you can win stuff. To my surprise, I came in at #8 last month and got a free copy of “Make” magazine from O’Reilly.

Sweet. Thank you doc patches.

Obligatory thumbs-up-with-swag photo:

Working With Rails Hackfest Prize

  • Posted on March 28, 2008
  • Tagged life, ruby

Mary Iron Chef - Chocolate Jaffa Boxes

Mary at Kenneth Falls
The picturesque Otways served an inspiring back drop to the inaugural Mary Iron Chef Challenge. Tension was high – I had teamed up with the renowned dessert specialist Amelia Ie, pitted against the young superstar couple Yujin and Katie (photo). Chairman Tim flamboyantly revealed the challenge ingredient – Chocolate! – and with a bang of the saucepan lid gong started the 90 minute Timer Of Impending Dessert.

Amelia and I made 3 dishes for this challenge. Our crowning achievement were the Chocolate Jaffa Boxes. As a judge gushed – ‘the rich velvet couverture of the enclosure frolics playfully with the airy mousse, while the mango reminds me of the playful delights of summer’. Accept that translation at your own risk.

Chocolate Jaffa Boxes

Makes 8


  • 500g dark chocolate, melted
  • 250g milk chocolate, melted
  • 1 packed orange jelly crystals
  • Generous splash of brandy
  • 500ml thickened cream
  • 1 Mango


  1. Spread dark chocolate thinly over 2 trays covered in foil, saving a small amount for later. Refrigerate until solid – this will become the boxes.
  2. Whisk cream until fluffy (use electric beaters)
  3. Mix together brandy and jelly crystals, then dissolve crystals in microwave (takes about a minute). Inhale fumes deeply.
  4. Add jelly mix to milk chocolate, then fold in half of the cream. You fold rather than stir because it helps keep the mixture aerated.
  5. This bit takes some geometric nouse – take the solid dark chocolate out of the fridge and with a sharp knife divide each tray into 40 portions – groups of 5 will be used to make each box. A diagram here would be nice but I don’t have the tools. The base portion can be bigger than the other 4, as long as they all come from the same strip so that they have the same edge length. Take your time with this step because you don’t want to shatter any of the pieces.
  6. Assemble each group of 5 portions into a box, using the left over melted chocolate to stick them together. Lookout, here comes some math: 40 × 2 / 5 = 8 boxes.
  7. Spoon chocolate mix in to each box, then add a dollop of cream to each
  8. Slice up the mango and arrange it NICELY on the top of each box
  9. Refrigerate until the chocolate mix sets (we didn’t do this because we only had 90 minutes, but the ones we left overnight were much tastier)

This challenge was a lot of fun. We got to wear funny hats. Special thanks to Amelia, without whose kitchen mastery I would have probably just served chocolate pieces in a bowl.

Iron Chef - Chocolate Jaffa Box

Apologies for the absence of tech posts lately, that’s just how life is at the moment. Hopefully have something geekier to write about soon.

Coconut Oats

A more appropriate name may be “Ghetto Dessert #1”. Once again, I neglected the supermarket and tried cooking with whatever was in the cupboards.

Coconut Oats

Serves 1-2


  • 1 bowl of oats
  • 1/2 can coconut milk
  • Caster sugar + maple Syrup OR brown sugar + cocoa


  1. Soak oats in coconut milk until it is absorbed (longer is better, I left mine for about 90 minutes)
  2. Mix in your choice of condiments

I experimented with a few different sweeteners – the four listed above individually and also honey. Honey didn’t work so well, but the 2 combinations above I think were winners. Adding fruit to the maple syrup variant would be particularly tasty, but we’re never home enough to have fruit on hand. I’m going to try turning the chocolate one into porridge by warming it in a saucepan. I have another bowl sitting in the fridge that I’m going to leave overnight a la bircher muesli to see just how much the oats can absorb.

And for bonus points it’s vegan – a rare property of my desserts.

UPDATE: Leaving overnight is highly recommended. A tasty non-vegan option is mixing in nutella.

UPDATE 2: Mix in castor sugar, dried apricot and cranberries, then serve with shredded coconut and flaked almonds. This is the best one.

Seagate 500Gb FreeAgent Pro external drive - first impressions

It has a stupid name. The title is the first and last time I will refer to it as anything other than a “Seagate 500Gb external drive”. What is not stupid is the packaging. It’s clear, concise, fun, and most importantly makes me feel like Seagate actually cares about the people who use its products. Observe the following shots of the static packaging and the instruction booklet:


Instructions #1

Instructions #2

Text on the last frame says: “Note: Times may vary depending on how excited you are about using your new FreeAgent Pro data mover.” Delicious.

I had to format it as FAT32 because as far as I can tell OSX doesn’t support writing to NTFS volumes. This makes me sad. I presume linux can write to Mac’s filesystem, but AFAIK windows can’t, which unfortunately I need to support because that’s what all my family use :( No fault of the drive here, just another windows gripe. Although linux has had NTFS write support stable for a while now, I wouldn’t mind Mac catching up.

It is much quieter than I expected. It’s under full load right now – I’m rsyncing to it.

5 year warranty, so I guess they have confidence in the product.

Initial impression is positive, ask me again when I actually have to restore from it.

Unrelated footnote: Technically I’m back from my holiday, but I’m snowed under with dancing commitments for now so coding updates (and enki updates) will still be sporadic.

UPDATE Just reformatted for Time Machine, YAGNIed the work-with-family requirement.

Absence, with suitable recompense

I’m going on holidays until the end of January. The off line kind of holiday where I don’t see a computer. So sad.

So here is a tasty treat for you to devour until I return. A sneak preview of a Fashionable New Blogging App™ named Enki. It is an alternative to Mephisto and SimpleLog that is built on the principles espoused in my prior writings. The website is built using Enki itself, and the port of this site from mephisto is just about finished, so you know you’re getting code that’s got a real life application. There’s still a few rough edges, but it’s ready enough to start building something with if you don’t mind getting your hands a little dirty. I’ve set up a mailing list for it which I’ll be catching up on once I get back.

Bad UI ruins Christmas

On my Mum’s digital camera, when you look at a movie, you get a still from the movie and two options: delete this frame, delete all frames. Delete all frames does not delete all frames of the movie. It deletes everything on the camera. We lost all our Christmas photos, and also a photo of my cake which is kind of depressing.

Don’t use ambiguous or unclear terminology in your UI. “Frame” in my mind refers to a frame of a movie, but the camera used it to refer to a photo – this is likely a case of a system term seeping through to the user interface (or bad translation – it’s a Japanese camera I think).

My brother was impressed by the feature: “Hey cool, you can delete individual frames from your movie”.

Rephrase important decisions in the confirmation, and provide important information. “Are you sure you want to delete all frames?” is useless. Try “This will irrevocably delete all 324 photos and movies on your camera. Are you sure you want to continue?”. And always provide ‘undo’. It’s not that hard to have a ‘trash’ area, only permanently delete the files when you really need the space.

If anyone has any spare Christmas shots they’re not using, please link them up. Mum’s pretty distraught.

Exercises in holiday recreation

In days gone by, before even when I was a young lad, the kids engaged in wholesome entertainment on their holidays. Chasing a wheel down the road, playing with wooden trains, arts and crafts. None of these newfangled electronics. Their eyes were round, not square. Last night my brother and I recaptured this spirit by eschewing the computer, the TV – we built something with our bare hands. A maddening patchwork of skewers and string, cardboard and bluetack. We created the Cockney Monster:

An abominable assemblage by any standards, it was begging for death towards the end. Nevertheless, we left it standing overnight for observation and discussion by the family over breakfast. I stabbed myself in the finger with a skewer while making this. Detail shots and tasty trivia on flickr.

Cockney Monster - Ramps
Cockney Monster - Pulley System
Cockney Monster - Marble Transfer
Cockney Monster - Full shot

Shocking News From The Late News

A revolutionary new study reveals being obese increases your chance of cancer. Random fat member of public responds with “Pfft science. Everything gives you cancer these days.” The head of the meat industry claims we are eating nowhere near enough red meat and it absolutely essential that we get more steak in us.

This is why I don’t watch TV. The problem is everyone else does.

You gotta laugh else you get really fucking depressed.

Making an impact

The dynamic map in the header hits home hard, along with the real time death roll. Real people dying right now. This is a masterful example of boiling down your message and making it count. Even though they just make the names/photos up, it still works.

Found via FreeRice (partner site), a slick vocab game following in the footsteps of Ripple Search – get advertising revenue, donate to charity.

  • Posted on October 29, 2007
  • Tagged life, ui

I'm a rails contributor

Allow me to gloat for a moment. Please turn your attention to changeset 7692 you’ll notice my name in the credits. So it’s not much, but there’s a certain amount of geek cred there.

The Road Home

The mirror to my previous misadventure, The Road To Berlin

Saturday, 5:30pm: And they’re racing!
6:30pm: Arrive at airport
6:40pm: Shoes get wet by an erratic shower
6:55pm: “I’m sorry sir, check-in for Frankfurt just closed. Please come back tomorrow”
8:41pm: Arrive at “dress to impress” party in t-shirt, fisherman’s and sandals
Sunday, 3:00am: Catch up on work emails
5:30am: Fall asleep on floor
9:00am: Morning, sunshine. More work.
Noon: Prost! Not eating chicken for lunch.
3:15pm: Admonished by the polezei for dancing
4:16pm: Pass out on the side of the road outside Oktoberfest
4:50pm: Scab 80c off French guy and spend last Euros on a train ticket
5:42pm: Arrive at airport, with a little help from my friends
6:20pm: Push to front of check-in line, wailing “I’m going to miss my flight!” (lie)
10:00pm: “I’m sorry sir, we don’t have a vegetarian meal for you. Have a bonus roll-with-cheese.”
3:00pm: Skip breakfast by nodding off during serving
5:35pm: After taxiing to the terminal, faint
5:38pm: After exitting the aircraft, faint
5:46pm: Eating chocolate while lying on the floor of business class
8:05pm: “I’m sorry sir, we don’t have your ticket for this flight”
8:15pm: Aquire ticket (5 minutes prior to checkin closure)
8:22pm: “Excuse me sir, Absolut Vodka for you?” (pass)
Tuesday, 1am: No vege meal booked, but the vege+fish one only has fish in the salad
1:16am: French lady in 59B gives me her icecream
5:36am: Touchdown in Melbourne, 1 hour ahead of schedule due to a roaring tail wind. Fantastic.
5:46am: Exit plane. Don’t faint. Fantastic.
5:55am: Exit Melbourne airport, having passed through duty-free collection, passport control, baggage collection and quarantine in under 10 minutes. Fantastic.
5:58am: Walk straight on to a sunbus that departs instantly. Fantastic.
6:55am: Asleep in own bed. FANTASTIC.
9:00am: At work, on time. Only a day late.

Conference Cuisine

Don’t ever let it be said we were left hungry at RailsConf Berlin.

With an attendance nearing 1000, sating the herd could not have been a trivial feat. The staff at the Maritim stepped up to the challenge, and were clearly in their element serving such a large audience. An all-you-can-eat buffet each day for lunch maintained the air of a multi course delicacy. The salads and desserts in particular were exquisitely presented, with small serving platters (shot glasses, for example) placed alongside the main serving giving the impression that the dining party could be counted on one hand, rather than the illegal quantities that would in fact be required.

And the variety! Servings of lentil, tomato, potato, cous cous, capsicum and cucumber salads, cheeses, chillies, olives, seeds, beetroot, broccoli, breads, fried potato, rices, eggs, pestos, coleslaws, mushrooms, lasagne, curry – all a feast for the eyes as well as the tongue. Desserts included divine fruit combinations – fig and casois cream, banana and cherry tart, cream and mango ring cake, berry jam – and a chocolate mousse as light as the clouds, lightly encased in a delicate chocolate sponge. Individual truffles littered among the main platters made for a decadent final cadence.

My only criticism, reluctantly, is the hot food really suffered from the excess of scale. Presentation was clearly below that of the cold dishes, and “hot” is probably too generous an adjective. The taste of the lasagne and the broccoli was bland in comparison to exciting array of salads, but it did provide a nice anchor to the dish. I can’t comment on the uninteresting choices (meat), so maybe these redeemed the mains.

A more general note to close: If anyone ever tells you it is difficult to be a vegetarian in Berlin they are lying, and you should probably consider all of their opinions suspect.

EDIT: Day 3 was shit – cardboard potato, bland carrots and something so forgettable I’ve done just that.

The Road To Berlin

Saturday, Noon: Let’s roll
1:30pm: Join the wrong check-in line
2:12pm: 1 litre kahlua, 1 litre vanilla absolut vodka: $47
2:31pm: Almost get arrested for having a butter knife in my carry on luggage – it’s been there for months :(
3:42pm: Kevin in 41B says “join the rest of the cattle”
4:16pm: First ever tiger beer
4:25pm: I am totally going to to speed run Mario
4:27pm: Nintendo locks up, resisting even a total system reboot
5:20pm: Vege 4TW, get served first
5:54pm: Kevin in 41B says “we have a convert” (Tiger #3)
6:31pm: Dance geekery – you could sort out some partnered finger chorey
9:37pm: “Excuse me sir, Johnny Walker for you?” (black)
9:38pm: 1 lemon + JW, 1 JW black, 1 lemon + JW
9:46pm: Band leader at Singapore airport: “I have a bet with the guy on keys, natural curls?”
9:57pm: 1 JW black, 1 lemon + JW
10:17pm: “Free internet” ain’t so free. Enjoying a pint instead.
11:45pm: Wake up infront of a horrible vege meal with a hangover
Sunday, 4:00am: Lufthansa food is inedible
4:35am: I am figuring a jazz routine to a live version of Buble’s Moondance
7:20am: Frankfurt to Berlin flight departure gate changed
7:40am: While on the tarmac, flight delayed 1 hour
9:45am (25 hours later): Yes, thank you, it’s good to be here

UPDATE: Do read the even more exciting sequel, The Road Home

RailsConf Europe

I’m flying out today for RailsConf Europe 2007 in Berlin. If you are going to be there, won’t you join me for a drink?

Data is fun

This is a story about a graph.

Inspiration struck just before sunrise one Sunday morning. 8 of us, too tired to sleep, decided to construct a relationship map of the local swing dancing scene. Naturally, the discussion turned to relationships on a micro level … who dances with who, who asks who, and the like, a topic quickly abandoned since gossip is a much more readily available data at 5am in the morning. But the seed was sown and my mind was compelled to tend it. On Monday I borrowed a copy of Tufte’s The Visual Display of Quantitative Information from work and, well, if you don’t feel like drawing a graph after reading that book there is something wrong with you.


On the following Wednesday I packed up my laptop and set off to brat pack (my performance troupe) rehearsal. Innocuously planted in the line of other machines waiting to play music or show off videos, my iSight went unnoticed as it snapped a picture of the dance floor every second during social dancing, weaving them together into a little over 1 minute of footage.

That Friday after a few too many post work beers at the local, being in an appropriate data collection mood I reviewed the footage and created a two column table: lead on the left, follow on the right, one row per song. The low quality of the iSight made identifying couples towards the rear of the hall tricky, but the tendency of dancers to generally wear distinctly colored clothes made it possible.


A brief stint of research led me to Processing, a Java environment for creating neat data visuals. I would have preferred something with ruby, but you take what you can get. My Java was a bit rusty, and the collection handling was downright clumsy to what I was used to in ruby, but after a Saturday of hacking I had something I’m quite proud of. Behold, the "dancing network of brat pack for the 15th August:

Brat Pack Dancing Network

I tried to apply many of Tufte’s ideas in the creation of this graph. It was initially presented vertically, but I rotated it so it was easier to compare the histograms. Chart-junk is kept to a minimum, only the horizontal lines representing each dancer are non-data carrying, and the connecting lines were deliberately thinned and lightened to make interpreting the myriad of partnerships easier. Labels use a serif font and also provide scale information and except for one are all presented horizontally.

Looking forward, I’d like to collect some richer data – both more of the same and also extra information like tempo of song – to incorporate into the graph. I suspect the best way to do this would be to record normal video rather than timelapse, to both grab the audio and also make identifying partnerships easier.


Rather than actually doing any of the work I was supposed to do tonight, I started teaching myself how to play “Go”. This game is all very zen and is one of the few that computers haven’t been able to master (top level programs can’t even beat amateurs…). It appeals to me more than chess (which I actually quite like) – maybe because it’s new and exciting.

It is also a really good way to make you feel really stupid. There is a go proverb (one of many): “Lose your first 50 games as fast as possible”. So I let gnugo hammer me a few times and already it’s almost midnight. I suspect I have a way to go before I start hitting the internet for a challenge, though I will most likely do so soon in search of guidance.

Scrabble isn't geeky enough

Arity isn’t in the official scrabble dictionary :(

New Job at RedBubble

As of two weeks ago, I am now a full time software developer for RedBubble – A website for artists and people who want to buy said artist’s work. They have some really high quality prints available (the framed ones are gorgeous), and I’m keen to buy some stuff myself once I have a house with walls to put it on…

They are based in Fitzroy, which is a really groovy area, but also kind of hard to get a house near – 2 weeks in and I’m still homeless. I ride my bike to work, so there’s a fairly large radius in which I’m looking for a place, and a lot of houses available too, but there are just a ridiculous number of people applying for them.

Anyway, they’re a very cool startup with awesome people doing some really nice things with Ruby on Rails (my framework of choice). I’m exceedingly happy to be working with them.

Google Update

Hooray, the obscure oracle forum postings are now gone from my ego-google! has been pushed down to the bottom of the first page, having been overtaken by, probably because I use the latter as my URL when commenting on most blogs. This blog has shot to the top, propelled (I presume) by a trackback link on Sam Ruby’s site to my OpenID post. Interestingly my redbubble profile has already hit number #4 with absolutely no link love from me. Agreeably, the remainder of the first page is rails related.

Yay for personal branding.

In other news my new job is FREAKING AWESOME. I’m still getting used to working in a team on a production site (you can’t just go nuts with design decisions/refactoring near a release, no matter how awesome they are), but I’m learning.

Joining the fold

Walked away from signing my employment contract yesterday with a shiny new MacBook Pro…

  • Posted on March 15, 2007
  • Tagged life

New job

The plan was to stay on holiday until I ran out of money. Things changed when I got asked to apply for a job that looked really awesome.

As of Monday, I will be employed as a full time Ruby on Rails developer for RedBubble. I’m really excited about this. They are a small company – around 10 people – with 4 existing, very talented developers. I went out socialising with them all after my second interview last Thursday and everyone seems really cool. Their processes are top notch and their tools are excellent (Rails on Mac – hooray!). The company seems to realise what it needs to motivate their developers – to give you some examples, they’ve had Koz (from the rails core team) in to help improve their stuff, and they’re sending their head developer over to railsconf.

Speaking of awesome people – Martin Fowler came along to the last Melbourne Ruby User’s Group omg omg omg * hero worship *.

It doesn't matter

My secret to life: I don’t mind what happens.

Quoted just the other day by Everyday Wonderland

If I get a job, if I go to Japan, if I keep living at home, if I move to Melbourne – my happiness is not dependent on any of these outcomes.

The key to this is framing traditionally depressing events – missing out on a job, finding yourself with nowhere to sleep, getting rejected – as challenges. They keep life interesting. I don’t claim to be a master at this, but I am working on it.

Combine this with an acceptance of events outside of your control. You can reasonably expect trains to run on time, so if one is delayed and you are late to an event, there is nothing you can do. Why stress? It doesn’t solve anything and makes you feel like crap.

As with anything, this takes practice. Next time you find yourself getting stressed, think “why can’t I just accept these circumstances?”. Either you will find you can do something productive to alleviate them (even it that is as abstract as working on your time management skills so you’re not pressed to deadline next time…), or find a sense of peace in succumbing to the greater forces of the universe.


Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo

Cue my inner language geek. This seemingly inane tribute is in fact a valid sentence. I was certainly confused. There are 3 readings of the word necessary to comprehend:

  1. The animal
  2. The city
  3. The verb, meaning to confuse, deceive, or intimidate

Replacing each with an appropriate substitute, we could rewrite the sentence as:
Buffalo people [that] Buffalo people intimidate[,] intimidate Buffalo people. The cool thing is you can do a similar thing (you need to add plurals) with any animal/verb pair, albeit without the city: Badgers badgers badger badger badgers; Dogs dogs dog dog dogs.

Explanation taken from Wikipedia.

UPDATE: Badger is also a city! Located in Minnesota.

…. Badger badgers Badger badgers badger badger Badger badgers

Food Choices

UPDATE: As of easter 2008 I am vegan again. I need to write an updated version of this post since I don’t agree with much of it anymore. I’m leaving it here for history’s sake – it’s enlightening to see my progression in thought, I think.

I am a vegetarian. Inevitably, people ask me “why?”. I think it would be more productive for them to ask themselves why they are not, but that is by the by. For me the interesting question is “why am I not vegan?”, which I will get to after I briefly cover the first.

There were two distinct ideas that led to my change of diet (I was an omnivore until mid way through last year). The first was a realisation that living the “examined” life (as Socrates put it) actually led to a dramatic increase in my quality of life, and in a similar vein that I was responsible for everything in my life (Satre’s idea of freedom). This will be the subject of future writings, but it culminated in me trying to rid my life of “contradictions”, of which my food choices presented many.

For vegetarianism, the deciding scenario was first introduced to me by Peter Singer in a public lecture he delivered at Melbourne Uni. It appeals to me because it avoids the need to take a non-mainstream stance on animal rights, but rather draws logical conclusions from common attitudes towards animals. Activities that harm animals for entertainment – bull/cock/dog fighting, for instance – are frowned upon by our culture, evidenced by the fact that they are banned by law. However, the more widespread harm of animals for non-essential food – in the form of battery farming – is condoned. This is a contradiction that I could not allow to stand, and so vowed to avoid battery farmed produce. Theoretically it is possible to continue an omnivorous diet within this constraint, but in practice finding (and affording!) organic meat is non-trivial, so I chose to abstain from meat all together. In addition, on non-ethical grounds I wanted to try the purported health benefits of vegetarianism, and also wanted to expand my cooking repertoire, which was depressingly confined to omnivorous cuisine.

After getting comfortable with vegetarianism, I decided to try veganism. The only ethical justification for this was that livestock are an order of magnitude more expensive (in near all measures of the term) than grain and vegetable sources, and as such are a burden that our growing society simply cannot sustain. Contrary to many vegans, I do not believe that animals deserve the same rights as humans, drawing the (admittedly grey) line at self-reflection and higher order thought. To illustrate, the jury is still out on chimpanzees, but farmyard animals have not demonstrated to my satisfaction that they possess the necessary reasoning, desires or aspirations to be apportioned rights akin to our own.

To allow my body and habits to adjust I mandated a one month trial period. I discovered a number of new ways to cut animal products out of my diet, for example my sandwiches do not benefit for cheese or margarine, and soy milk is a much better alternative over cereal – adjustments I still hold to today. However my social life suffered. Not having any vegan friends, and knowing only one or two vegetarians, I found it difficult to eat out anywhere (since vegan meals are generally lacking if it is not the restaurant’s main trade), and while people will usually be all too happy to cook a vegetarian meal for you, they generally blanch at the prospect of not using cheese. Not to mention that it eliminates virtually all desserts(!), and many types of beer(!!). In addition, I felt my alertness waning, and could not find ways to affordably maintain an athlete’s diet (most notably protein sources – one can only eat so much peanut butter, and it is quite high in fat).

My quality of life diminished, both socially and in health, and I could not justify this by the one ethical tenet by which I had made my decision. I feel I can contribute more to activist and economical causes to offset such a choice if the rest of life is in order, so after a month of a vegan diet I returned to eggs and dairy (and choice beer).

After more than 6 months of vegetarianism, I look and feel healthier than I have ever been. (For balance, I have also been exercising regularly, but do not feel constrained by the lack of meat in my diet). I will potentially try veganism again in the future – I feel support from my social group would help in this regard (which I can’t see happening any time soon!) – and have no desire whatsoever to return to being an omnivore. I no longer crave steak, and the only time I feel my diet is restricted is in certain restaurants that do not pay enough attention to their menu.

To end with a quick rant, the “Real Men Eat Meat” mantra I so often encounter is, if you’ll excuse the term, bullshit, and used as a facade by those too lazy to take control of their lives. I can accept you eating meat, just show me you have actually made an informed choice rather than blindly digesting the empty catchphrases employed by your ignorant peers.

Advice for shared living

I have a number of friends moving into shared accommodation next year. At the same time, I will be ending a number of years in the same, as I move back home in preparation for international travel. At this auspicious time, I elect to bestow a small portion of my accumulated wisdom on the matter upon the general populace.


Have a cleaning roster for the bathroom and lounge room. Even when all parties maintain the best of intentions in regard to keeping shared facilities clean, without a roster it won’t get done. You will become accustomed to conditions far more untamed than your familiar experience. Without a roster, the house mate with the lowest tolerance for filth will either take on the cleaning load themselves, or become an annoying reminder for the others. Neither is desirable.

Keep the kitchen sink empty. Dirty dishes are acceptable, as long as they are not required by others (think fry pans), and they don’t prevent others from cleaning (as a full sink does).


If communal cooking is desired, keep a receipt bucket that is reconciled every now and then. Eating other’s food is acceptable as long as a usable portion remains and it is promptly replaced. Perishables past their use-by date are fair game unless explicitly marked – keeping your fridge clean and fresh!


Whenever a bill is paid mark on the bill your name and the date. Throw these all in to the one drawer/folder, to be reconciled regularly. Unless telephone usage is severely skewed (excessive long distance calls, for example), it is usually easier to just split this down the middle.

Mostly common sense, these tips have worked for the households I’ve resided in. Well, except the cleaning roster one. That’s something I really wish we had. Guess who the low tolerance guy was…

  • Posted on December 29, 2006
  • Tagged life

Hack the Planet

  1. Vegetarian – battery farms lose!
  2. Buy organic, fairtrade and/or local where possible
  3. No car, use public transport and feet, except where not possible (Geelong)
  4. Refuse plastic bags, although I think perversely our excessive number of green bags at home is soon to become an environmental risk
  5. I plan to vote, haven’t had the opportunity yet
  6. Spread the love. Bring politics into conversations. Getting people talking and thinking is the first step.

The last one is important. Preaching at people will never work – global awareness must come from within. We must provide the support and encouragement. Lead by example. It can be tough sometimes. I almost hit intolerable despair last night. Startling, raw, realisations: The pope – the most important man in Christianity – is a political retard, the most powerful man in the world is widely regarded an idiot, and you couldn’t have pulled the recent Naomi Robson story from Frontline… Politics, Religion, Media, the triple crown. The world is loco.

In other news, I’ve just commited some C Sharp tools to Ruby Rant , if you’re interested in a sweet build tool that lets you use ruby (XML loses!). I’m using it for a fairly decent project at work (multiple projects, resources, unit tests, etc) and find it a pleasure to work with. Note I’m talking about a replacement for the deprecated method described in the current documentation. I’m going to get that updated, but for now check the mailing list for info.

The Colemak Diaries

UPDATE 2008-12-9: In response to Gregor’s comment, yes I’m still using Colemak. Eesh, it’s been over 2 years now. I’m very happy with it – I type fast and I can still use QWERTY when I have to.

I spend more than 50 hours per week in front of my computer. A large proportion of that time is spent coding or typing. It is well known that QWERTY is an inefficient keyboard layout, so in my quest to do things the Right Way I decided to do something about it.

I considered two alternatives – Dvorak and Colemak. The former is the more popular, but Colemak – a newer layout – appears to have addressed many of the issues people have found with Dvorak. No point going into detail here, I’ll just link you to the Colemak FAQ.

And so here presented is a diary of my transition to Colemak.

Day 1 – August 23

A Wednesday evening after a long day at work. No mood to code, what is on my list of low-priority-things-to-be-done? Ah yes, this one has been here for a while – “Learn Colemak”. Biggest concern is the productivity hit my coding will take while getting my WPM back (80+ in QWERTY). I’m coming to the end of a project at my day job, which means less typing than normal as I’m testing/debugging. Busy social calendar will keep me away from my contract work for a bit, so it would seem that now is the time.

Installation on ubuntu linux is dead simple. I’m stuck into Lesson 1 on the wiki in under 5 minutes. Freaking weird – I have to concentrate really hard lest I go into autopilot and let my fingers sneakily revert to QWERTY. Brings back memories of “Home Row” on the Apple IIe from grade 2.

A remapped caps lock is the best thing since scoped closures. Within my first few mistakes I’m tapping away with that left pinky like it’s my job. Even if I go back to QWERTY I am keeping this mapping. I can’t recommend it enough.

After a about an hour on and off I’m fairly confident with level 4. WPM on proper text is a frustrating 15.

Day 2 – August 24

No, this won’t normally be a daily affair, but these first few days are going to be the interesting ones. Today I was a little anxious about taking Colemak to work, but confident I could get through the day and at least get something done. Installation on windows was also simple. Not quite as straight forward as linux because you have to manually install the language, but it ain’t rocket science.

“Automatic” words such as usernames and passwords are the trickiest. Passwords especially because you don’t get any feedback on what you’re typing.

I use .NET at work, and Intellisense is a godsend. I hardly have to type at all! Going back to “automatic” behaviour, shortcuts such as CTRL+S are particularly difficult. It’s a good thing CTRL+R isn’t mapped to anything destructive in any of my apps! Semicolon is another tricky one, I think partially because (in QWERTY also) I never hit it with the right finger – my hand is usually moving to a shortcut or the mouse.

I was planning to stay away from QWERTY as much as possible, but I have to use VMWare a lot and none of my VMs have Colemak installed. It would be impractical to do so. To try and minimize the detriment this would have on my Colemak skills I made a point of typing two fingered and looking at the keys while I type. Sad thing is I can still go faster than when I’m typing Colemak, so I deliberately slowed myself down. Whether this was of benefit is a question maybe one day science can answer.

The day started with patience. By 4:30 I’m ready to smash my keyboard through the monitor. Breath in. Breath out. I’m going home.

Day 3 – August 25

This exercise has been promoted fairy near the top of my things-not-to-do-hungover list. Right there above “Go to work”.
I found the easiest (not necessarily best) way to type is by staring at the keyboard picture I printed out and sat below my monitor. WPM is up to 25.

Day 11 – August 31

Maybe it wasn’t such a good time to start learning. I was away all weekend, and then am out every night because it is production week for the musical I’m doing. I haven’t spent any more time at all practising, only just general usage at work. It is no longer painful to type, but I feel I could be a lot faster if I dedicated some time to practice.

Day 15 – September 5

Panic sets in as I try to type something one handed while talking to someone on the phone. It just isn’t happening. Encountered other problems when having to type with a colleague looking over my shoulder. Calm down – look at my print out. Occasionally they want to type on my machine, and here the windows language manager really fails me. You can set the current input language quickly through an icon on the toolbar, but it remembers what setting you had for each application. So I change it, they type some code, switch to a browser, flail their fingers, and before they know it have searched for gibberish. I can’t think of a scenario where this behaviour would be beneficial – there should at least be an option to disable.

Day 17 – September 6

Had to do some typing at a friends place. Took a minute or two to install Colemak, typed to my hearts content, then uninstalled when I was done. I can still type QWERTY if I have to, but the cases where this is required is less than you would think. When doing tech support on a foreign machine, often it is better to let the user drive anyway.

Day 28 – September 17

One month. Just tried lesson 12 in gtypist and got 47 WPM. I feel that is pretty good since every word has a z or an x in it. Error rate is still fairly high (7%) but I think I would have had that problem on QWERTY anyways. Seriously, who types that many bottom row characters? I find the things that slow me down the most when coding is punctuation. With ruby underscores give me all sorts of grief because they are such a big stretch. I’m considering remapping it to an easier to reach key, but not sure what could be replaced. Maybe switch it with semicolon (on Colemak – where P is on QWERTY). Having learnt an alternate layout has given me confidence to further modify my keyboard to achieve typing nirvana. Note that the underscore is in the same place as it is on QWERTY. Learning Colemak has dramatically improved my technique, and at the same time exposed some potential hurdles to higher speeds. My QWERTY speed was largely a result of extend usage.

Overall I am very satisfied with switching to Colemak. It was frustrating at first, but is much more comfortable to type now that I am used to it. My speed is still not quite what it was with QWERTY, but is fast enough for everyday usage. A few more weeks of usage and I’ll be faster than a greased pig.

Not to mention the awesome geek cred… (* tumble weeds *).

Looks like I may need to bring forward my purchase of a keyboard fitting of my elite typing status. The connection at the back of my old keyboard is getting dodgy anyways. Honest.

Day of days

I shouldn’t read Joel On Software, it makes me covetous. Between no LCDs, a dodgy chair, Delphi 6, PVCS, motivation is waning at work. I must have raved about Subversion enough though – we have a meeting on Monday to discuss switching over. Nov 24 I finish. Can’t wait until I’m free of these commitments so I can start chasing some choice projects.

Just had an amusing chat with mum about the internets, why people would be interested on the “tripe” on my website, why if you google my name you get “private conversations” I’ve had.

Which made me realise I’ve lost my #1 google spot to some posts I made on the Oracle forums while at Swinburne. Freaking Oracle.

Today’s awesome Ruby on Rails link: Declarative Permissions. Just added it to a project I’m working on, and in less than an hour had a full authorization model going. Very pretty.

  • Posted on September 08, 2006
  • Tagged life

Make your resume interesting

I’ve just finished up all my IBL interviews. #1 preference is Advatel, followed by Fenwick Software. Both development roles – the other two not so much.

At every interview I got an excited question about my experience at “The World of Robotics”, since everyone knows robots are cool. Also, I’ve listed “Swing Dancing” under other interests. In every single interview, right at the very end I always got a “now I just have to ask…” question about it. It was fantastic, the interview always ended on a high note, which has to be a good thing for your job prospects.

The point I’m trying to make is – Make your resume interesting and worth talking about. You can then predict many of the questions you’ll be asked and can be well prepared to sell yourself.

Do stupid things...

… stupid things happen.

Like running ubuntu dapper as your primary, despite an explicit, stickied recommendation against the practice on the forums. I just wanted to try out compiz…

So as of 10 o’clock this morning I can’t boot properly. It was working at 7:30 – should never have restarted. I can get in to safe mode (no GUI), but the work I need (Ent .NET) is on my virtual PC. So I need to revert to breezy, reconfigure nvidia drivers, reconfigure vmware, and hope to god nothing ridiculous happens. .NET assignment checkpoint due tomorrow. At the worst I’ve only lost 2 hours of work, hopefully will take a lot less time to recreate. Except I’ll have to do it in the lab. I hate working on any computer that isn’t mine. It’s just not right.

EDIT: We’re back in action now. dist-upgrade to the latest kernel version, had to manually grab the matching linux-restricted-modules since apt-get wasn’t finding it, re-install nvidia-glx, YAY COMPUTER WORKS. In the process I also disabled my network shares in fstab, not sure if this had anything to do with it, but when trying to debug I found I couldn’t ls one of them. I never thought I’d hang ls, but it’s been done. I suspect if I’d left my comp for 5 minutes initially it would have eventually come up. You live, you learn. Although after all that I’m still running Dapper. In another stupid move I put my OS on the same partition as my home dir, so I need to find space on the server to back everything up for a reinstall. Including an 8Gb VM. I am such an idiot.

We’ve now added WSE to our .NET project and it’s starting to look rather fancy.

Video games are the new evil

“The free access which many young people have to romances, novels, and plays has poisoned the mind and corrupted the morals of many a promising youth; and prevented others from improving their minds in useful knowledge. Parents take care to feed their children with wholesome diet; and yet how unconcerned about the provision for the mind, whether they are furnished with salutary food, or with trash, chaff, or poison?”
- Reverend Enos Hitchcock, Memoirs of the Bloomsgrove Family, 1790

First it was books, then music, then dancing, then movies, now video games. I wonder what I’ll be campaigning against when I’m old and grey?

Today’s game development tip: Don’t worry about your design. Just do it. I spend way too much time worrying about the best way to implement a full GUI stack for my menu system, when I really just need a couple of buttons. Ruby (or any scripting language) makes this easy since it’s so easy to juggle things around in your code. This is usually pointed out as a danger of dynamic languages, but so far I am finding it much much more productive than my previous efforts with typed languages. I guess time will tell…

And another free one: Don’t write physics or maths code when you’re sleep deprived. Just work on something else.

  • Posted on April 29, 2006
  • Tagged life

Lecture Etiquette

I love enterprise .NET, but nothing annoys me more than people slagging off microsoft in the lectures. Today on security “There’s no such thing as 100% security?” “Linux?”. Aaaargh. And it only got worse. SHUTUP AND LEARN. The lecture didn’t even have any MS specific material in it. People not liking the subject because they “don’t like the way microsoft does things”. 3-tier design? Security? Welcome to the enterprise world. THESE ARE BEST PRACTICES. We are just using microsoft products as a context for those practices. We can’t possibly cover all the options – this is a 12 week course. You knew we were going to be using microsoft products before you started the course.

Of course, this goes for all lectures.

There is rarely a reason to speak in a lecture

Save it for the tutes. No one else is interested in your opinion/question.

Learning Chess

Tonight’s discovery was chess. If you’re like me you know how the pieces move, even some opening moves. You’ve probably decimated your little sister with a 4 move checkmate – twice in a row – and felt disturbingly proud of yourself. I urge you to read (or at least browse a portion – it’s a full book) the following:

A Field Guide to Chess Tactics

The best part is that there are literally hundreds of small chess problems to illustrate the concepts discussed. If you treat these as challenges to solve before reading the well written solutions and explanations, you’ll find a great number of hours simply disappear.

A pretty flower Another pretty flower