I found an utterly fascinating story about what seems to be a provable case of large-scale (6 figures) cheating in online poker. The best thing about this (apart from being a ripping yarn about software security) is that the detective work has been done by members of an online forum, and all their guesses and investigations and allegations can be seen, step by step.

I started from a blog post by Bruce Schneier, which linked to a few summaries, which in turn linked to links that led to links that led to links… as much information as you could possibly want.

We’re planning a vacation. That means booking flights.

After half a dozen failed attempts to book one on BA’s web site (all ending with a cryptic error message) I called their support line. The first thing the guy asked me was if I had, by any chance, entered first and middle name in the box for first name. Well, yes, because it says “Enter name exactly as in passport”, I said. No no no, we don’t actually mean that, we only want the first name, he says. I tried again, and when I only entered the first name, it worked.

The BA support staff are so familiar with this problem that they immediately knew to suggest this as a potential cause… and yet they have done absolutely nothing about it. There is no clarification next to the box, no validation (but they do validate my phone number, so they are obviously familiar with the concept) and no clue about this in the error message you get. Is it really cheaper to have support staff sit in a call centre than to add a few lines to the web page?

I’ve done a bit of tinkering with the blog. You may or may not have noticed that the category archives are now paginated (some of those pages were getting rather long). To satisfy my own curiosity, I’ve also created a page to list the most commented-on posts. I was expecting the Parcelforce rant to come out at the top, but instead it’s my review of Eragon. Teenage fantasy beats adult frustration.

By the way, the Eragon review is also the only post to receive comments containing the word “LOL” (is LOL a word?) and the only one where I am addressed as “u”.

The pagination magic was done with the MTPaginate plugin and the comment filtering with MTSQL, as suggested on the Movable Type community forums. Both plugins were really easy to use and did exactly what I wanted. The SQL script for filtering by comment count just needed a slight tweak to ignore junk comments, and another one to sort posts by date if the comment count is the same.

For almost 10 years now, we have been keeping track of all our expenses. We started with a single Excel spreadsheet but in 2001 we switched to an Access database. Later I added an Excel front end to it so I could get some nice charts, and this year I wrote a new front end in .NET for easier data entry.

Geeky? Yes. (We’re talking about an accountant and a programmer here, after all.) But also useful and interesting. Which probably just proves the point about geekiness.

This chart shows our total spending on absolutely everything. You can see when I graduated and we moved to London in 2001… our costs more than doubled. More interestingly, though, we seem to have found a steady state since around 2002. Our salaries go up and down (mostly up, luckily) but the annual total expenses have been surprisingly stable.

We group all the individual items into around 25 categories. The tall dark red bars in the middle are for rent and utilities (insurance, electricity, heating). This category accounted for around a quarter of the total in Stockholm, and for around half in London. London is expensive.

The turquoise bars near the top are for travel. This is almost exclusively made up of holidays and flights, not local transportation. This category also grew a lot after we moved, because we could now afford holidays, and also because of our trips back home, of course. It would be noticeably larger if bicycles weren’t our main mode of transportation.

The cream-coloured one-off chunk in 2002 is our wedding, and the pale purple at the bottom of 2006 and 2007 is a category titled “baby”. The dull pinkish red at the bottom of all previous years is entertainment – movies, exhibitions, concerts etc. The baby category has almost pushed the entertainment category out of existence, both in this chart and in real life.

I find this data useful because it helps me think about what we would and could do if our income suddenly dropped – if one of us had to leave our current job, for example. We could cut our expenses by 15-20% by not travelling. We could instantly cut another 7-8% by not buying music, movies, or books and by cutting out entertainment. Move to a smaller and cheaper apartment, and we’d be close to a zero monthly balance again.

It also helps me put things into perspective. Some categories are so tiny that you cannot even see them in this chart. This tells me that I can completely stop worrying about how much I spend on them, because no matter how I splurge, that spending will be dwarfed by the real black holes. Furniture? Bought so rarely that it adds up to a minimal amount. Snacks? Costs nothing, so ignore the cost and buy the juiciest-looking cake.

Some people seem to get stuck in a certain era in fashion. Look carefully and you will see people who are still wearing 1970s clothes (or as close as they can get) or still have a 1980s hairdo – not because they think retro is cool but because they truly think that that is what things SHOULD look like.

Other people get left behind the technology train: they cannot and will not learn to operate a VCR, or refuse to use mobile phones.

I think I might be on the verge of missing the technology train. I don’t get the point of the things the younger generation is doing. I can see the point of blogs, of PSPs and wifi and digital cameras and wikis. But most of the Web 2.0 craze that has some people so excited just puzzles me. Tumblr? Twitter? Yahoo Pipes? MySpace? Who has time to fill these sites with all that junk, and who cares?

Am I growing old?

I received a comment on one of my older posts about interviewing for an Excel VBA job, asking about possible interview questions. I’ve been on both sides of the interview table, and I enjoy interviewing, and I’ve thought about this quite a lot. So I thought I’d write a more thorough reply, and make it a full post instead of hiding it in a comment. Maybe others can find this useful, too.

If I was conducting an interviewing for an Excel VBA, I would probe you from the following directions.

One: your general attitude towards and approach to programming. I’d ask you to write code to solve some simple generic problem that shouldn’t take you much more than 15 minutes. It could be sorting an array, or printing a checkerboard pattern of 0s and 1s, etc. I’d check that you have meaningful variable names, that you declare your variables (which in VBA you don’t necessarily need to do), that your code is reasonably well-organised etc.

Two: your knowledge of Excel. I’d want to see that you can use array formulas and pivot tables, lookup functions, named ranges, etc. You can’t be a good Excel VBA developer if you’re not a good Excel developer. I would give you a laptop and a few actual problems to solve, and leave you to it.

Three: your knowledge of the Excel object model. I’d ask you to write code that manipulates a worksheet – for example, sort and filter a range, or clean out duplicate data from a list, or consolidate data from multiple files. I’d look for knowledge of and ability to work with fundamental Excel objects such as Workbook, Worksheet, Range etc; also I’d definitely want to see that you don’t write “macro recorder”-style code with Select and Activate everywhere.

Four: your knowledge of how Excel VBA works. I’d check what you know about events (“Can you write code that runs every time the worksheet changes?”), about user-defined functions (“What is and isn’t allowed in UDFs?”), volatile functions (“How can you ensure that your UDF is volatile?”, “Which built-in Excel functions are volatile?”).

Five: questions specific to whatever the job is about. If it’s at a bank, I’d want to see you do some basic financial calculations. If it’s a database reporting job, see if you can work with ADO and basic SQL, or interop with Word, or creating charts in VBA, or whatever else is relevant.


This is quite a lot and might not all get covered in the first interview, but I would ideally want to go through all of this before deciding whether to hire you.

Personally I’d prioritise the parts just as I’ve listed them here, most important first. But I’ve been to interviews where they do almost the opposite – I once got a 10-question multiple-choice test about some nitty-gritty stuff in Excel but they didn’t care about what my code looked like. So you never know.

The reason I’ve put “knowledge of Excel” above “knowledge of Excel VBA” is that in my opinion, the latter is more straightforward and easier to learn. It’s just code, and it is reasonably well documented. It’s harder to find people who are good at writing efficient Excel formulas. But often formulas can yield a far more efficient solution – faster by several orders of magnitude. If I have a choice between formula and code, I’d almost always choose the formula.

John, I hope you find this helpful, and good luck with your interview!

Links to great photos of Amazon’s UK warehouse have been circulating on various blogs (Digg, BoingBoing etc) recently.

I was surprised to see that the warehouse is manual – unlike UPS sorting terminals for example. The picking and sorting isn’t done by robots and conveyor belts but by human beings who walk around all day and pick things into orange crates, which are then forwarded to yet more human beings who pack the orders.

You can read more about it (and see more pictures) here and here.

After a 10-month absence, I have spent some time at Xtreme VB Talk again. I felt my brain needed some exercise, but I wouldn’t have the time or energy to focus on any substantial project, so some foruming should be just the right thing. It felt like coming home. I used to spend a lot of time there.

We used to get so many questions about automating Excel that we (myself and another user) wrote a tutorial about that, and I used to refer others to it daily. So much so that I knew the thread ID by heart, and – as it turns out – remember it even now, 10 months later. (The thread ID is 135815.)

Out of curiosity I checked how many other people have been reading that tutorial, and my other big tutorial (about Excel userforms). Both turned out to be among the top 5 most popular tutorials on the site – #2 and #4, respectively. I am really pleased and proud!

This all makes my fingers itch… for code, and for writing, too. Perhaps I should write some more tutorials?

I couldn’t agree more with these thoughts from Jeff Atwood:

90% of Windows software is absolute unfettered crap which should never be installed on any computer running any operating system. Ever. But I’d also say Sturgeon’s Revelation applies to all media, not just Windows software. But our 90% is larger than your 90%. Despite what all the Elise-drivin’, iPod wearin’, Mac-lovin’ pundits would have you believe, it’s not all craplets and malware in the Windows world.

As Windows users, we should do our part to fix this. Let’s band together and support those small software vendors writing Windows apps that not only don’t suck, they ROCK. Let’s support the little guy who still gives a damn about creating small, beautiful, useful apps on an operating system that gets no respect.

That is why I declare today, Friday, December 1st, 2006, Support Your Favorite Small Software Vendor Day.

Check your hard drive, and I’m sure you, too, will find some bit of software written by a small software development shop, maybe even a single developer. Something you find incredibly useful. Something you rely on every day. Something you recommend without reservation to friends and peers. Something that makes using the computer that much more enjoyable. Or at least less painful.

The two most useful applications on my computer – both of which I use daily, and really enjoy using – are EditPad, an excellent text editor and Opera, an excellent web browser. I write all my blog posts in EditPad, and most other things as well. I feel handicapped without these two applications, and missed both on my work computer (even though UltraEdit and Textpad are both good text editors, too). I am upgrading to EditPad Pro right now!


I used to resist paying for software. If I could get it for free, or borrow someone else’s license, I did. Getting into software development has really changed my viewpoint on this. Even when I was only doing it for myself, for fun, it gave me a whole new perspective: an appreciation of the effort involved, an understanding of what it feels like to have someone steal your code, and conversely, what it feels like to know that you have written something that others use, enjoy and find useful. I am a lot more inclined to pay for software now.

Of course, the fact that it is now a lot easier to find and buy good-quality software, also helps. Everything is reviewed and recommended (or not) somewhere on the web, and there are trial versions of everything.

This weekend we bought Ingrid her first development tool. Hers is from Mothercare and not Fischer Price, but it does vibrate! She hasn’t done much productive work with it yet, but that is just a matter of finding the right incentives, I’m sure.