Sorry, I just didn't have enough time to get this done until now. See below
for an explanation of my solution. Quick summary:

- code at http://rubyquiz.com/hosted_solutions/129/gregory/129.zip (thanks,
  James!)
- requires ruby-opengl and RMagick gems
- maintains state in a simple file
- when running, space bar chooses a name or switches back to the idle
  screen and the escape key quits (and saves)

On Thu, Jul 05, 2007 at 09:51:11PM +0900, Ruby Quiz wrote:
> Everyone who had my name in their example prize list deserves extra
> credit.  I won millions in cash and prizes as I examined the solutions
> this week.  I can't wait until the checks start coming in the mail.
> 
> I was occasionally beat out by some Yukihiro Matsumoto guy though.
> Weird.

Heh. I was using both names for my testing as well, and they appear in my
included sample list.txt file.

> As usual, there were a lot of great solutions.  We had everything from clever
> ASCII art to full GUI applications.  There were also a lot of clever ways to
> taunt the attendees before a name is picked.
[...]

I went for gratuitous in my solution, largely because I used it as an
excuse to brush up on my long-languishing OpenGL skills. It depends on the
ruby-opengl gem for 3D rendering and the RMagick gem for dynamically
generated textures. Anyone planning on working with the ruby-opengl
library, especially anyone planning on creating or loading textures from
disk, may find it helpful to look through the framework I set up and the
texture code.

The actual name picking is dead simple, and all it does to maintain state
is to save the list of names, minus those which were chosen, to the same
file it got as input when quitting. The main.rb file should be run and
passed a filename as its only argument. The file should contain the list
from which names will be chosen, one name per line. Note that the list file
must use UTF8 encoding; RMagick can handle UTF8-encoded non-ASCII
characters, though you may need to change the font family in
magick_texture.rb (see below) to get some of the more interesting
characters.


The zip file (see above for URL) includes the following source files:

main.rb
	run the program as: ruby main.rb list.txt
render_layer.rb
	the base framework for dealing with OpenGL
name_file.rb
	the part that actually picks names out of the hat
interpolate.rb
	handle simple one-shot and repeating animation
rotate_anim.rb
	wrap rendering in an animated rotation
scale_anim.rb
	wrap rendering in an animated scaling
magick_texture.rb
	dynamically generate an OpenGL texture with RMagick
string_texture.rb
	use MagicTexture to generate a string as a texture
letter_ball.rb
	render a letter (via StringTexture) texture-mapped onto a sphere;
	the code for the sphere and its texture coordinates was modified
	and ported from code found at
	http://ozviz.wasp.uwa.edu.au/~pbourke/texture_colour/spheremap/
reveal_ball_string.rb
	uses animations and LetterBall to reveal the chosen name
render_text.rb
	render letters with lines (rather than textures or polygons)
lone_star.rb
	displays the spinning letters of Lone Star Ruby Conf and uses
	RenderText to do so

Also included is a list.txt file, with one accented character to show that
it works. I've only tested this on MacOS X, but I have every reason to
believe that it will work well anywhere as long as ruby-opengl and RMagick
are properly installed.

--Greg