Results of the Advanced CORBA Programming with C++ Easter Egg Hunt

Last updated: 21 December 2000

The Easter Egg Hunt

On 31 March 1999, Michi and Steve announced the Advanced CORBA Programming with C++ Easter Egg Hunt in comp.object.corba (see the original announcement for the competition rules). Briefly, the idea was that readers should try to find two Easter eggs that are hidden in the book and submit the eggs for inspection by 21 April 1999. The first person to submit a correct solution would win the first prize of US$150.00. Two second prizes of US$100.00 each would be drawn among all correct entries that would arrive before 21 April 1999, midnight GMT. All three prizes were graciously donated by Addison-Wesley.

By 12 April, we had lots of interesting guesses, but not a single one that came anywhere near the correct solution. (It was quite amusing to see the suggestions that were made. One person suggested that the picture on the cover contains a hidden image of an Easter egg; another person suggested that the Easter eggs were two of the ovals in Figure 11.1 on page 431. Naturally, we wouldn't do anything either so devious or so obvious :-)

After we didn't get any correct entries for nearly two weeks, we decided to drop a hint and let people know that one egg could be found in Chapter 3 and the other one in Chapter 7. That got the ball rolling.

The Winners

First Prize Winner (US$150.00)

The first prize winners are Darrell Brunsch and Nanbor Wang, who worked on the solution together and submitted the first correct entry on 13 April 1999, at 16:16:09 GMT. There were a few other submissions that arrived before Darrell's and Nanbor's and came close, but none of them was completely correct at that point.

Second Prize Winners (US$100.00 each)

We drew the second prize winners from the remaining correct entries using our random number generator on Mars ;-) The two second prize winners are Krishna Kunchithapadam and Loren Rittle.

Correct Entries

The following people submitted correct (or at least nearly correct) entries:
Darrell Brunsch, Chris Cleeland, Kevin Curley, Donnacha Forde, Krishna Kunchithapadam, Sacha Laborey, Bill Lloyd, David McCann, Loren Rittle, Mark Sheppard, and Nanbor Wang.

Congratulations to all of you!

A few people had problems caused by byte swapping on little-endian machines and sent scrambled eggs instead of Easter eggs ;-), or they introduced typos when they entered an IOR and only sent one correct image. However, we gave everyone who made at least a serious effort the benefit of the doubt. We figured that anyone who was determined enough to type in the two IORs from the printed text in the book deserved a spot in the draw :-) We also apologize for the collective loss of productivity we apparently caused around various companies :-)

The Solution

So, where are the eggs?

Well, when you think about it, there aren't all that many places in a book where one could hide something. We thought that telling people that there are two eggs would clue them off as to where they are: there are two stringified IORs shown in the book (apart from two nil IORs, which obviously have no interesting content). Stringified IORs are a pile of hexadecimal gibberish, which makes them ideal places in which to hide something. (Unfortunately, no-one thought that this was as obvious as we did. Only after we provided the hint did the penny drop and solutions started to come in.)

So, the eggs are contained in the IORs shown on page 44 and page 249. The IORs are:

For readability, we have shown the IORs here the same way as they are shown in the book. Of course, each IOR is a single string and does not contain embedded line breaks.

Chapters 2, 13, and 14 explain quite a bit about the internal structure of IORs. In particular, each IOR contains an object key that is provided by the application. Naturally, the object keys of the above two IORs are where we hid the Easter eggs.

To find the eggs, you had to type the IORs into a file (which was the hardest part of the contest :-) and decode them. The correct way to do this is detailed in the CDR encoding rules for IORs in the CORBA specification. However, most ORBs ship with a tool that decodes an IOR and shows the information contained in it, so that's a much easier way to extract the IOR contents. (There are several freeware and open source versions of such tools available.) Most of these tools display the value of the object key as a string. The object keys are:

Non-printing characters are shown as  '.' and we have inserted line breaks to keep things readable (such as they are :-)

Looking through these strings, we find that both of them contain the substring "X-Face: ". This provides a clue that we are on the right track. An X-Face (for those of you who have been on the net less than ten years or so) is a mail header that contains a 48x48 black and white compressed bitmap. (People used to add an X-Face: header to their e-mail; various mail readers can be configured to automatically display the bitmap when the e-mail is read.)

Now the problem is nearly solved. The remaining piece of the puzzle is how to decode the X-Faces. A bit of searching on the Web leads to a tool called uncompface, which turns X-Face strings into X-11 bitmaps.

The strings you need to feed to uncompface are:

Again, we have added line breaks here for readability. The actual string to feed to uncompface is a single string.

From these strings, uncompface produces the following X-11 bitmaps:

These xbm-format files can in turn be displayed with many image display programs, such as xv.

Going through all of this correctly, the decoded X-Faces yield the following two images:

Michi's X-Face Steve's X-Face

Of course, these are the Easter eggs.

The X-Face on the left is Michi's, and the one on the right is Steve's. We used an image editing program to cut the images out of the pictures on our respective home pages and to reduce them to 48x48 black and white bitmaps. The source images appear below.

Michi Henning Steve Vinoski

That's it! Thanks to everyone who participated, and we hope you all had fun hunting for the eggs!

Michi and Steve

Back to:

Valid HTML 3.2!