vim and :g

Note: This entry has been restored from old archives.

So many things, like vim, are a land of constant discovery. Just now I have devised:

:g/$/exec "s/$/!".line(".")."|"

What it does is append to every line the string ! | – which will look absurd to most people, but it is incredibly useful for me. There are probably a billion other ways to do the same thing…

Munged from an example on vim.org that inserts line numbers at the start of the line:

:g/^/exec "s/^/".strpart(line(".")."    ",0,4)

The Neal Street Restaurant

Note: This entry has been restored from old archives.

Fungo! Fungo!

[Update, November 2007: It saddens me to have to report that a few months back The Neal Street Restaurant closed becuase the building lease ran out. I hope they choose to open a new restaurant somewhere else in the future, but opening a restaurant is such an extreme effort that I’m not going to hold my hopes close to my heart.]

When I was younger I watched Antonio Carluccio’s Italian Feast on SBS, not unsurprising television in a family with chefs for parents. It was an excellent programme, Antonio wandering Italy introducing us to everything Italian – much like a grown up offering of Jamie Oliver’s more recent Italian gallivanting. I have read about Antonio’s restaurant in London and while he isn’t actually the chef there I assumed he would have a very good choice of chef (and probably a lot of creative input I’d like to believe). So since moving here it has been my intention to visit; although with some apprehension since it is taking a while to come to terms with the cost (when converted to AUD) of eating out here in the UK.

This week the opportunity arose, to make up for a week long business trip to Germany I had a long weekend with Kathlene and on Monday finally bit the bullet and went to the Neal Street Restaurant. I’m glad to say that it was worth every £ – all 145 of them (everything described below plus two glasses of good red, two bottles of mineral water and 12.5% “discretionary service”). This is a place you go to only if you consider food to be one of life’s most important little features, or if you’re simply a rich bastard.

I’ll start with the coffee, since it is expected of me. Coffee was the last thing we had that evening and unsurprisingly they knew exactly what a ristretto was and didn’t ask me to repeat it or if I was sure (or my favourite and the most common response: tell me that I mean espresso; gah). The coffee was excellent, the only complaint being that it was too long, the typical ristrettos I’ve had in Rome mirror more what I’m used to getting at Toby’s back in Sydney but this was more the volume I’d expect from espresso. It was good coffee, and was served with excellent chocolates that were perhaps a little too rich for the end of a meal.

We chose to have primi and secondi with the prospect of dessert, and are now glad that we chose to skip the antipasti since the serves were well sized. The meal started with the usual olive oil served with a nice collection of breads: something like a slice of ciabatta, a cube of brioche and thin slices of a sultana and walnut bread, possibly rye. The olive oil had excellent flavour and the olives served as appetisers were amongst the best I have ever had (not very salty, not vinegary and with a spiced flavour – freshly prepared I suspect).

For primi Kathlene the crab tortelli with a saffron sauce and I had one of the nights specials, pappardelle with a porcini mushroom sauce (all the specials were porcini mushroom, they must have had an extra good shipment). Beautiful fresh made pasta and a well balanced sauce; it was, quite simply, just right. Kathlene’s dish was somewhat more complex and my small sample proved a light flavour with a distinctive taste of saffron and excellent texture but the crab flavour I had hoped for was too hidden.

Kathlene ordered a porcini salad with a secondi of Sea Bass en Papillote and I had the quail with truffle stuffing. I should explain how the food is served, the service staff come to your table with a little cart and usually the meal is put together in front of you. For my earlier pasta the pasta was placed into a bowl and then the sauce spooned over it from a saucepan. The preparation was similar for my quail, and Kathlene’s Sea Bass came down in its paper wrapping which was opened up and the fish and mushrooms inside arranged on the plate before us. It brings a little of the kitchen into the dining experience (not to mention freshness); much appreciated.

My quail were perfect, there’s little more to say except that in an up market restaurant I was pleasantly surprised by the plurality of quail. No overpowering overuse of truffle and condimented with a tasty array of funghi. Kathlene’s sea bass was similarly baked with an array of funghi and well cooked. The porcini (aka cep by the way) salad was simple and focused entirely on the porcini; enhanced by a sprinkling of parsley, some strips of what was probably a pecorino romano and a drizzle of extra virgin olive oil.

Our meals left us feeling well fed but still able to squeeze in some dessert… how could it be any other way with a cardamom icecream on the menu! My icecream was the icy sort, almost a sorbet and came in cardamom, cinnamon and saffron flavours. Saffron icecream! It was exquisite. Kathlene inevitably went for Antonio’s Tiramisu and it was a good rendition of this old favourite; very, very rich.

Overall we had an excellent evening, the food actually lived up to my expectations and the service was impeccable. The overall environment was a little more formal that I am comfortable with, but did not make me uncomfortable enough to not pick up my little quail leg bones and get the meat off with the best tools available. In high society I’d probably be made to eat with the dogs; though I might fit right in with medieval royalty.

Certainly a place for the mushroom enthusiast! On the way out we admired the
display of produce, including a tray with a wide variety of mushrooms. Antonio seems to have a thing for funghi. The Carluccio’s deli next door to the restaurant would certainly be worth a visit, but we didn’t get around to popping in. There are also a lot of Carluccio’s cafés around London, one near the office in Notting Hill, but I have never been to one of these – I assume they keep a fairly high standard.

tasso, tasso, tasso, tasso

I’m at risk!

Note: This entry has been restored from old archives.

According to SiteAdvisor I’m at risk! Oh no!

YOU GOT 3 OF 8 QUESTIONS CORRECT
Rating: You’re at risk!
Watch out! Your inbox might explode! Your decisions would have resulted in your
inbox being filled with approximately 2000 spammy e-mails per week. But who can
blame you? It’s often very hard to tell which sites will respect your personal
information. …

Okay, so not quite so terrible. There’s just one flaw with this quiz and that’s the fact that I would never, ever give any email address to any of the sites and thus am actually at zero risk 😉

I believe the most important point here is missed or at least not well conveyed: that based purely on visuals (they also link to the privacy policies, but who reads them?) you simply can’t tell whether or not a site is going to be a source of spam. That’s why something like SiteAdvisor has value, you just can’t know how bad a site will be until you try and the premise of SiteAdvisor is that they do the trying for you. A very good tool for those who run around the web throwing their email address around like a popular STD (probably most people)… though I have to wonder who’s going to convince people who have bad habits to start with to download an Internet condom? Anyone “in the know” should see it as their duty to spread the word: condoms are good, they’ll protect your box from strange gunk. Though this is more like some kind of registered paedophile list than a general purpose preventative.

I do realise the whole thing is probably an engineered marketing campaign with sites carefully selected for their lack of intuitive ‘spamminess’ clues and that they can probably typically expect a result of 50% (choose the sample comparisons well enough of course and you can swing this either way). The main point is probably avoided since it is more effective to make individuals feel that their personal inadequacies require patching up (taking a lesson from the spammers, this is why penile enlargement spam is still worthwhile enough to continue to be such a problem after all these years, there’s an inexhaustible supply of personal inadequacy out there fuelling the world of misplaced hope otherwise known as advertising^Wspam).

What will protect us from the unexpected though, such as my recent AllOfMP3/ChronoPay experience? Both legitimate online businesses with apparently clean privacy records (okay, so one of them looses points for being Russian) and not a peep of spam after more than a year of use and them wham, I have more bestiality and incest in my inbox than I can handle. Probably a security breach, either technical or most likely a low-paid employee lured by some extra cash. Importantly: this can not be detected in advance. So while SiteAdvisor is likely an effective approach to mitigate the spam deluge we’re not quite seeing the end of reactive AntiSpam software just yet; as much as I wish it could be so. I’ve used SiteAdvisor on one of my machines for a while though and do find the results interesting, if not typically much use to a user like myself (the SiteAdvisor Firefox plugin’s marking of Google results as good|bad is nifty, interesting that Google came out not long afterwards with the same idea built-in; SiteAdvisor is still at the advantage because it is there in your taskbar all the time).

If you’re like me you own your own domains and if forced to give some site an address they get their very own unique one – this has two great advantages: 1) You can block that email when it starts getting spam; 2) You know who was responsible for spamming you or leaking your address. I must admit that it would be nice not to have such a level of complexity required to “manage spam”.

And on a related note I’m sad to see that one of the two remaining spam blocklists that I consider safe to use at an SMTP rejection level looks like it could end up being the victim of further proof of USAian litigative idiocy. The two I still use are: list.dsbl.org, sbl.spamhaus.org.

Australian Diaspora

Note: This entry has been restored from old archives.

Reading through my usual online news list today I came across the phrase Australian diaspora in some random opinion piece. Not a phrase I have heard before and an idea I’ve never considered, all my life people have commonly left for foreign shores; but they’re just visiting and will be “back home” soon, right? It set me wondering… I have left Australia with no clear reason to go back any time soon. Many of the people I went to University with have left, are on their way out or wish to leave – even if just “for, you know, a little while”. So why is this? Some say it is fuelled by good old personal greed, the GBP or the USD are better currencies; this argument stumbles though when you realise that many of those who have left relegate “moving back home” into the world of “one day… maybe” and a stronger currency doesn’t mean so much when you stay put. The best I can say along these lines is that it means a trip to Australia for someone living in the UK is comparatively cheaper than a trip to the UK for someone living in Australia.

So why?

Personally if asked to try to draw together some reasons I think everything would boil down to: “why not?”. Realistically someone in my kind of job field can expect to find interesting work in a capital city, and even then you’re really only looking at Sydney or Melbourne. My personal ideal of living in Australia is living “out bush”; when I think “back home” the images in my head are of Dunsborough in the late 80s and early 90s (Incidentally this is a place that no longer exists, sometimes I go back and look for it but it simply isn’t there. It has been buried under something new and shiny and is only extant in diluted wafts here and there. The bushlands where we used to walk, cycle and ride are housing estates; the secluded beaches are Beachside Resorts; the vineyards are a dime-a-dozen. When I try to go back home I am just another tourist in a tourist farm.). The central idea here is that my image of truly living in Australia is that of living outside of the cities, near a nice beach and with scorching hot summers. Think Ocker, True Blue and a Home Among the Gum Trees – I’m one who has often felt ashamed by my lack of a proper Aussie accent.

As it stands Sydney is where it is at for the likes of myself in the realms of working in Australia, seaside country dreams are just that. The question is not “Australia or England?”, it is: “Sydney or London?”.

Once upon a time even Sydney was a place where a normal worker could afford to buy their first home; now this is not so. Once upon a time Australia had great social infrastructure; now this is rapidly eroding. Once upon a time Australia had a political climate that wasn’t entirely in opposition to my personal views; no longer. When I try to think of all the reasons for staying in Sydney I quickly come down to a very simple list: the food, the coffee. Now food and coffee are very important to me, but do not represent an insurmountable problem; wherever you go you’ll work something out. I cook more often now and an occasional barrista receives a bit of extra on-the-job training; and ultimately if you’re in the UK and times are desperate you can fly to Rome for only £50.

With nothing to differentiate Sydney from “the rest” what is going to keep someone there? I’d go out on a limb and make the conjecture that the current political and economic climate have taken Australia down a peg in the “desirable places to live” stakes; but I’m treading on the thin ice of the not-completely-informed here. Once I would have chosen to stick with Australia because “we’re better than the others” – but now we’ve proven ourselves to be just the same. We’ve gone from what in my minds eye is an image of “the home of the free” (in spirit I mean, not free on paper as those legalistic yanks like to see it) to a less palatable “mini united states”. The number of times I heard the phrase “I think it’s time to move to (Canada|New Zealand)” became more significant through my years in Sydney.

Maybe I’m too young, all my mental snapshots of the Australia I’d like to live in come from the interpretations of a child – nostalgic images of summer barbecues, country towns, “the Snowys”, holidays in Exmouth, “Dot and the Kangaroo” and “Expo ’88”. It could very well all be the misleading imagery of childhood fantasy. Still, I like to believe that the idealised but not quite politically correct Australia in my mind really did exist once and I can only hope that one day it can exist again, maybe not on this planet. As it stands Sydney falls well short of the mark, I can take it or leave it.

In the end after all this rambling through memories I still haven’t properly answered the misleadingly simple question: “why?”. The truth is that I probably can’t work out a good answer. I’m living in a world where the idealised “back home” of my youth has dried up, like most things in Australia these days, and in a world without a home does it really matter where you live? The choices seem grey in comparison, ultimately the central theme of life becomes “change is as good as a holiday”.

Here we be today, but change is good and who knows where we’ll be tomorrow.

ChronoPay and/or AllOfMP3 Suck

Note: This entry has been restored from old archives.

Beware of ChronoPay or maybe AllOfMP3! One of them is either a seller of email addresses or a leaker of email addresses; the latter is almost as bad as the former in my books.

When I sign up for a service online they always get their own unique email address, all of a sudden I have been getting vast amounts of porn-spam to the the very unique mail address given to them: allofmp3·chronopay·com@malignity·net. This is a pretty huge finger pointing in their general direction, but which one is the ultimate culprit? I have given other email addresses to AllOfMP3.com and so far never had any spam from them… There’s some online fuss about this I notice now and ChronoPay are apparently blaming AllOfMP3, which wouldn’t be a terrible surprise.

So, unless you’re actually interested in gems like “Shockingg Fa_rrm p00rn baanned in 51 states!” or “Illlegal and weiird familyy gangbangg <$rword#>” I suggest you remember to be wary of where you stick your favourite email address, one of these companies begets the evil of spam and we’ll probably never find out exactly which one was responsible. Intuition would point the finger at “dodgey Russians”, as it stands however I doubt that either company was consciously responsible. I expect this is a data leak, be it a security breach or an employee after an extra buck, either company could easily be the source.

One further reason why owning your own domain names and thus having “disposable email addresses” is very useful. One email address for people you know and trust and infinite others for the rest of world, which you do not trust unless you’re rather foolish.

Stats: In a 45 hour period (length of my current mail.log) the allofmp3.chronopay address has been hit with 132 spam emails – needless to say this email address is now rejected at SMTP level.

[Related: I’m at risk]

Pythious Syntactum

Note: This entry has been restored from old archives.

Time for a little Python “spot the difference” game! I’ve been working primarily with Python lately and a few weeks ago I found this hideous performance bug lurking in my code.

This:

setHash = {}
for featureSet in featureSets:
    for feature in featureSet:
        if feature not in setHash.keys():
            setHash[feature] = []
        setHash[feature].append(featureSet)

Versus this:

setHash = {}
for featureSet in featureSets:
    for feature in featureSet:
        if not setHash.has_key(feature):
            setHash[feature] = []
        setHash[feature].append(featureSet)

Now, consider that I have huge data sets. Guess what happens? Yes, that’s right Tommy! The first example is much slower, in fact it goes 1000 times slower. Beware the Indictkeys, my script! The its that rate, the keys that come! Beware the Hashhash loop, and crypt the pythious Syntactum.

The lesson here is: remember has_key

On reflection the wrongness of what I originally wrote seems obvious; I don’t know exactly what happens “under the hood” but I can probably make a fairly accurate guess. It just goes to show that even in a language as pleasant to work with as Python it isn’t too difficult to trip yourself up with simple, everyday foolishness.

[Of course, there’s always going to be other ways to do it!
It does look neater without the has_key]

Bug Challenged

Note: This entry has been restored from old archives.

You know you’ve truly left the land of the living when you’ve got no bugs left in the bug tracking system – even finally disposed of bug 578; ah, those were the days. Greetings from Hades.

Bug 578 was filed back in the old ‘level 4’ era I believe, when we even had the CEO doing some QA work and possibly even before the great Applications Schism. What do we do with ourselves now as our cells divide and multiply, reaching across the globe with our newly grown appendages.

It seems like an awfully long time, I’ve been working now for almost as long as I was hanging around Uni. Time, as they say, can really fly – such a hurry to what end?

You run and you run to catch up with the sun, but it’s sinking – racing around to come up behind you again. -PF

Office Space

Note: This entry has been restored from old archives.

I get upset every time bastards like Mr JoelOnSoftware write about their office setups.

  • Crap Chair – check
  • Single CRT Monitor – check
  • Open Noisy Office – CHECK
  • Wear headphones to combat distractions – CHECK
  • Realise that all this is very badcheck

(Note: I don’t actually work in an office of my current employer; our office back in Sydney would score better than my current location if compared against the points in Joel’s article – but not a great deal better, but we fit into the ‘it’s hard to do these thing if you’re a VC company‘ category so it can be a bit hard, here there is no good excuse for it being so terrible.)

Lamb Shank Casserole

Note: This entry has been restored from old archives.

Dinner's Up!
Hiding under all the soupy goodness is a shank!

While strolling back from Cinnamon Square (the best place in Rickmansworth for a ristretto) last weekend Kathlene and I wandered into the local butcher in hope that this time they would have some Osso Buco – no luck. However I did see some juicy looking lamb shanks, so they became dinner.

Ingredients:

  • Juicy Lamb Shanks
  • 500g Green Lentils (dry)
  • 2 ~400g Tinned Tomato
  • “Sufficient” Chicken Stock
  • 1 Cup White Wine (Sav Blanc)
  • Flour (just for coating lamb)
  • 5 Anchovies
  • 4 Generous Sprigs of Thyme
  • 3 Sprigs of Sage
  • 1 Cinnamon Stick
  • 3 Bay Leaves
  • 3 Red Onions
  • 2 Sticks of Celery
  • 2 tsp Chilli Powder
  • 2-3rds cup of Peas (defrosted if using frozen ones)
  • 100g Pancetta, thin sliced.
  • 1 tbsp plain flour mixed into 3 tbsp water
  • 1 Small Pumpkin (15cm diameter)
  • 2 Small Kumara (10cm long)
  • 6 Spring Onions

Coat the lamb shanks in flour and place in heated oil to brown, turning regularly; use a casserole large enough for the shanks to be fully covered with liquid Meanwhile slice up the celery, dice two of the onions, chop the spring onions and cut the pancetta into 1cm strips. When the lamb shanks are evenly browned put the onions, celery, pancetta and anchovies into the casserole and cook until the onion starts to caramelise. At this point throw in the chilli powder, cinnamon stick, bay leaves, thyme, sage and spring onions followed by the wine. Then tip in the two cans of chopped tomato and fill with stock until the lamb shanks are covered (if your shanks are as large as mine this will be quite a lot of stock!). Keep on high heat until the liquid starts to boil then reduce to a simmer and cover.

Meanwhile rinse the green lentils and put into boiling water for 10 minutes, scooping off any froth that forms. Once the ten minutes has elapsed tip into a strainer to drain.

After the lamb shanks have been simmering for 30 minutes add the lentils to the casserole, mix through and replace the lid.

Cut the pumpkin in half, scoop out the seeds then cut into 1 inch bands. Cut the skin off the pumpkin bands then cut into pieces that are very roughly 1 inch cubed in volume. Peel the kumara and slice into pieces about half an inch thick. Cut the remaining onion into large pieces (half, half, thirds).

After the casserole has simmered for another 30 minutes add the kumara and onion pieces. Let simmer for another 15 minutes then add the peas and pumpkin pieces. After a further 15 minutes drizzle in the flour mix while stirring and continue to agitate as the liquid thickens a little – after about 5 minutes turn off the heat.

Move the shanks to appropriate bowls, then remove any remains of thyme and sage sprigs from the soup (just stems and attached leaves) and the bay leaves; you could also remove the cinnamon stick at this point too but I prefer to break it up a bit and mix it through the soup as it should easily be soft enough to chew (yum!). Generously spoon the soup mixture and vegetables over the lamb shanks. Garnish as desired and serve with a good glass of dry red wine!

Soup
Soup
Leftovers
Leftovers

You’ll probably have soup left over, this is great to store and eat later. As we have a really huge casserole and only did two quite large lamb shanks we had a lot of left over soup – we had eight servings worth left! There’s still four in the freezer. It should be fine frozen for quite a while (we’ll finish it off this week though).