Robot Has No Heart

Xavier Shay blogs here

A robot that does not have a heart

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

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

Ingredients

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

Method

  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

Ingredients

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

Method

  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:

Packaging

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

Poverty.com

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.

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.

Collection

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.

Presentation

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.

A pretty flower Another pretty flower