Monday, October 27, 2008

The myth of the sudoku's

Sudoku's have been quite a hype in recent years, attracting puzzle lovers all over the world. I have solved quite a number of them myself, or at least, that's what I thought until earlier this year. Seeing the daily "difficult"/"superieur"-level sudoku in a Swiss free newspaper, a coin dropped. They've been publishing the same sudoku for over a year now. Yes, that's right, the same sudoku, every day. Or more precisely, an equivalent sudoku. By using four simple transformations, yesterday's sudoku can be transformed into today's, and so can the solution !
  1. rearranging rows withing the same 3-row block (idem with columns)
  2. rearranging the order of the 3-row blocks (idem with 3-column blocks)
  3. permutating 123456789 into a different order
  4. transposing the grid (making rows into columns and vice versa)
How long can they keep this up, you wonder ? There's a total of about 1.2x10E12 combinations to every sudoku puzzle. It will take them 4.6 billion years before they run out of variations of this "one and only" sudoku.

PS the title of this article refers to "the myth of the fingerprints" by Paul Simon. "I've seen them all and man, they're all the same..."

Wednesday, October 1, 2008

identifying the ESX version in a VM: peeking through the blinds

An interesting issue popped up: how can a program or script in a VM determine the type and version of the hypervisor it is running on ? This is important if you want to install version-specific software, like the VMware Tools ("enlightened hardware drivers", as MS would say).
Knowing that you're running in a virtual machine is pretty easy: you can look at the hardware, on VMware you'll see "00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter" which makes it pretty clear, and lspci -v says "Subsystem: VMware Inc" for every PCI device. Easy as 1 2 3.

But which version of VMware ESX is it ? Not that easy, it seems. But we (hi Dag !) found a unique signature for each ESX version: looking at dmidecode, the output in the "BIOS Information" section lists a Release Date and an Address field. These seem to be unique for each ESX version. The mapping we could build was:
ESX 2.5 - BIOS Release Date: 04/21/2004 - Address 0xE8480 - Size 97152 bytes
ESX 3.0 - BIOS Release Date: 04/17/2006 - Address 0xE7C70 - Size 99216 bytes
ESX 3.5 - BIOS Release Date: 01/30/2008 - Address 0xE7910 - Size 100080 bytes
ESX 4(?) - BIOS Release Date: 08/15/2008 - Address 0xEA6C0 - Size 88384 bytes

Tested versions: ESX 2.5.2, 3.0.2, and 3.5u2. We received an anonymous tip about ESX 4 beta results. Thanks !
VMware Workstation 4.5 reports the same as ESX 2.5. VMware Server 1.0 reports the same as ESX 3.0. Workstation 6.5 reports the same as ESX 4(?). Workstation 6.0 and Server 2.0.0 report
WS 6.0 - BIOS Release Date: 12/06/2006 - Address 0xE78A0 - Size 100192 bytes
SRV 2.0.0 - BIOS Release Date: 7/29/2008 - Address 0xEA6C0
but we didn't find an ESX version that reported the same values. Refer to the VMware "mobility guide" document for other possible relationships between different VMware products.

P.S. 26/11 thanks to Michael for sending us information on VMware Server 2.0.0 ! Same address as WS 6.5 and ESX4(?), but different release date.