Cabbages and Kings

We recently tried out The Walrus and the Carpenter.  The food was great, and I found out there’s such a thing as lamb salt, which P describes as “like bacon bits, but made of lamb”. You can read more about our experience here.

However, the time has come to speak of other things.

The Walrus and the Carpenter is one of three restaurants making up the title of the book A Boat, a Whale & a Walrus. The book title reminds me of the palindrome

A man, a plan, a canal – Panama!

Many people have successfully extended this palindrome with the addition of other objects such as a cat, a yak, a yam… My favourite is this one by Jon Agee:

A man, a plan, a cat, a bar, a cap, a mall, a ball, a map, a car, a bat, a canal: Panama.

Unfortunately, until the word “urlawaelahwataoba” enters the English language, we’re not going to have any palindromes starting with “a boat, a whale, a walrus”. It also doesn’t help that the fourth in this suite of restaurants is called “The Barnacle”. Have they no sympathy for palindrome makers or people with dyslexia?

To end off this random (or is it?) ramble, here’s one of mine and Mr. Richland’s Favorite Song[s]:

 

life in the kitchen

Cooking is one of my girlfriend’s favourite hobbies, and shortly after we got together, I was invited to help out in the kitchen. That was 3 years ago, and I could barely cook an egg. Needless to say, I was more a hindrance than a help. 3 years later, I still can’t cook a decent meal on my own, but I’m useful enough in the kitchen that she would rather have me in the kitchen than out of it.

Looking back, here’s what’s changed over the years, in Python:

Day 2
She invites me over to cook spaghetti bolognese.

import boyfriend as bf

The bolognese sauce needs diced carrots. Should be an easy thing to let me do, so she calls the function:

bf.dice(carrot)

To her horror, she gets the following error:

AttributeError: 'boyfriend' object has no attribute 'dice'

She takes over the dicing, and I observe, trying hard to remember what she’s doing so I can replicate it next time.

Day 17
I’ve been observing in the kitchen a few more times since day 2, and now I feel confident that I can dice carrots. Today, we’re baking carrot cake, perfect for a newly trained carrot dicer like me.

However, I’m thrown off by what happens:

bf.dice(carrot,'fine')

and immediately raise a type error:

TypeError: dice() takes at most 1 argument (2 given)

She doesn’t read the error message carefully and thinks I’m tripping up over ‘fine’, so she tries:

bf.dice(carrot,'small')

which, of course, raises the same error. Realizing her mistake, and seeing that I didn’t raise an attribute error this time, she tries

bf.dice(carrot)

This works, but the carrot pieces, being for bolognese, are far too big for carrot cake, and she takes over once again, dicing them to the required size.

Day 149
Many weeks have passed, and the ‘boyfriend’ module has acquired many more functions, such as ‘peel’, ‘slice’, ‘boil’ etc. I have also learned to apply these functions to tomatoes, onions, garlic, cucumber and many more vegetables. Further, my ‘dice’ function now looks like:

def dice(vegetable,size):
    ...

where size can be one of ‘fine’,’small’, ‘regular’ or ‘large’. She’s always careful to specify which, and so everything goes along swimmingly.

Today, she’s just going to stir-fry some simple dishes at my place. The groceries are already in my fridge and, wanting to give her a pleasant surprise, I look for some simple stir-fry recipes online and head to the kitchen to prepare the raw ingredients before she arrives.

After converting the recipe into machine(i.e. me)-readable code, I proceed to do what it says, washing the vegetables, peeling the onions… so far so good. And then it happens:

bf.dice(carrot)

This used to work, but now I raise:

TypeError: Required argument 'size' (pos 2) not found

I’ve been so used to being told how finely to dice that carrots that I’ve lost my default value for ‘size’! Well, nothing to worry about; I’ll just wait till she comes.

Later, after dinner’s over (carrots diced, seasoned, fried, eaten), I pick her brain to find out how she deals with the ambiguity in recipes. My hypothesis is that she has default values for all her arguments, but, peering into the code for her ‘dice’ function, I realize that that barely scratches the surface. I see a whole train of if-elif-else chains specifying a million possibilities for ‘size’ when ‘size == None’, conditioned on the cuisine, the subcuisine (!), the occasion, who’s coming over to dinner and a tonne of other factors I would never have dreamed of considering.

At which point I give up and decide that I’ll just stick to washing the dishes in the future.