Saturday, January 27, 2007

eXtreme Testing: Testing on the Toilet

Making the most of every "down time" opportunity this group at Google want you to think about testing even while you're doing your daily business on the can:

...One of Google's little secrets that has helped us to inspire our developers to write well-tested code. We write flyers about everything from dependency injection to code coverage, and then regularly plaster the bathrooms all over Google with each episode, almost 500 stalls worldwide. We've received a lot of feedback about it...

Tuesday, January 16, 2007

Outlook 2007 stops using IE to render HTML email

In a cute surprise it looks like Outlook 2007 stops using IE to render HTML emails, instead using the less complete Word engine to do the rendering. Amongst other things this will break CSS-formatted emails...

Friday, January 12, 2007

Running Internet Explorer on Linux using ies4linux

I've recently been doing some web development on Linux and one thing that is a little annoying is that I need a Windows box nearby to test how the website looks in Internet Explorer. I was happy to see the other day a slashdot story on ies4linux, a nice little package that allows you to run multiple versions of Internet Explorer on Linux. It works its magic by running IE binaries on top of Wine.

IE6 was a little sluggish on my configuration - IE running on top of Wine running on Linux running inside vmware running on Windows XP - but good to see it working :) The latest beta of ies4linux was supposed to support IE7 but I couldn't get it running; hopefully that will work in the near future. Installing ies4linux for Multiple Users works pretty well.

Get cash for those gift cards

Ever get a bunch of gift cards for xmas and you can't use up all of the money on the cards before they expire? Or the card is for a store that you never shop at?

Well now you can buy, swap or sell those gift cards at or

(As an aside apparently 30% of all store xmas sales in the U.S. are gift cards. I heard before xmas that stores were not planning to have post xmas sales because they knew so many people would be getting gift cards which they had to spend within a few months. Luckily for my wallet the post-xmas sales went ahead because the xmas retail figures were not so good.)

Saturday, January 06, 2007

Die COBOL, die!

A reminder to us developers that work on "modern" languages like Java and C#:

...Analysts, Gary Barnett, Research Director of Ovum (quoted here) reported in 2005 that COBOL accounted for 90 per cent of all financial transactions, and most finance companies are well aware of its importance to them. But it is also the language of many other business applications (Barnett estimates 75 per cent of transactions generally) and many enterprises may be less aware that they have it as part of their IT infrastructure...

Wednesday, January 03, 2007

Scaling vertically or horizontally?

A couple of recent articles on the evolution of the eBay architecture and the Flickr database architecture reminds me of a leason I rarely see documented but many developers learn the hard way at some point in their careers: if you have large sets of data then it is nearly always better to scale the application horizontally instead of vertically.

Can all applications be scaled horizontally? No. It only works if your data set is largely independent of eachother, allowing each data element to be hosted on an arbitary server . For example, the stock price of company A will usually have little to do with the stock price of company B. (In some cases two companies will be related by ownership or industry or something else, but the system your building may not care about such relationships.)

Scaling horizontally also has other advantages like not bringing down your whole site if a single db/node fails.

eBay have made some interesting and extreme scaling design decisions including:
  • No business logic in the database. No stored procs!
  • Moved CPU-intensive work from the database to the application tier. Rreferential integrity, joins and sorting all done in the application tier.
  • No client side transactions, no distributed transactions. Single db transactions managed through anonymous PL/SQL blocks - I'de love to see their O/R mapping layer!
  • No session state in the application tier. Transient state maintained in cookies or scratch db.