From amoore at mooresystems.com Mon Feb 10 14:46:30 2003 From: amoore at mooresystems.com (A Moore) Date: Mon Aug 2 21:31:05 2004 Subject: [Kc] changes to tomorrow's meeting Message-ID: <1044909990.1114.42.camel@cookies.mooresystems.com> Hi KC gang - I am scheduled to talk a bit about HTML::Mason tomorrow evening. Unfortunately, I have to leave town unexpectedly and will not be able to give the talk. I mailed Garrett, our fearless leader, to see if he could think of anything to fill the time with. I'm not sure what he'll come up with if anything. I'm sure that if you had any suggestions that they would be appreciated. Sorry about the last minute changes, but look for the Mason stuff next month. -Andy From garrett at scriptpro.com Mon Feb 10 15:08:04 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:05 2004 Subject: [Kc] changes to tomorrow's meeting Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BDC@EXCH_MISSION> From: A Moore [mailto:amoore@mooresystems.com] > > I am scheduled to talk a bit about HTML::Mason tomorrow evening. > Unfortunately, I have to leave town unexpectedly and will not > be able to give the talk. > > I mailed Garrett, our fearless leader, to see if he could think of > anything to fill the time with. I'm not sure what he'll come > up with if anything. I'm sure that if you had any suggestions > that they would be appreciated. Sorry to hear you won't be able to make it Andy. I hope your trip is uneventful, and your return swift. This leaves this month's agenda somewhat open: o Book Reviews: x Graphics Programming with Perl (Doug Sparling) x Programming Web Services with Perl (Garrett Goebel) o Puzzles x 100 Monkeys discussion and prizes x new puzzle If anyone has a favorite Perl Tool or Module. I would greatly appreciate it if you would consider doing a Lightning Talk on it tomorrow. As an incentive, I can toss in the choice of one of our O'Reilly to the first person to take me up on the offer. Garrett -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett@scriptpro.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030210/06682b68/attachment.htm From garrett at scriptpro.com Mon Feb 10 15:10:30 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:05 2004 Subject: [Kc] Puzzle: 100 Monkeys (Last chance to enter a solution) Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BDD@EXCH_MISSION> 100 Monkeys 2003-01-14 Note: This puzzle came to me unattributed by way of a co-worker. If anyone chances by the source, please let me know so I can give credit. There are 100 doors, all closed. In a nearby cage are 100 monkeys. The first monkey is let out, and runs along the doors opening every one. The second monkey is then let out, and runs along the doors closing the 2nd, 4th, 6th,... all the even-numbered doors. The third monkey is let out. He attends only to the 3rd, 6th, 9th,... doors (every third door, in other words), closing any that is open and opening any that is closed. The fourth monkey does the same for the 4th, 8th, 12th, 16th,... doors, opening the closed ones and closing the open ones. The fifth monkey does the same to the 5th, 10th, 15th,... doors, and so on. After all 100 monkeys have done their work in this way, which doors are left open? Format: m/^\d+(?:\s\d+)*$/ # scalar must match this regex Goal: o fastest script to calculate the answer o shortest script to calculate the answer Prize: Your choice of O'Reilly book o Computer Science & Perl o Creating Web Applications with Mozilla o Designing Embedded Hardware o Perl CD Bookshelf, Version 3.0 o Perl Graphics Programming o Perl in a Nutshell, 2nd Edition o Programming Web Services with Perl Deadline: Answers must be submitted at least 24 hours before the next kc.pm meeting (February 11th) * As long as you get your final entries in by tomorrow morning it'll be okay. -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030210/7eabbfe7/attachment.htm From garrett at scriptpro.com Wed Feb 12 10:46:09 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:05 2004 Subject: [Kc] Meeting Minutes: 2003_02_11 Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BE6@EXCH_MISSION> Last night's meeting was attended by: Stephen Clouse, Garrett Goebel, Michael Morgan, and Doug Sparling. Before everyone had arrived, Doug describe some fly-by-the-seat-of-his-pants late night coding sessions under high-stakes deadlines. Once we figured everyone who was coming had arrived I launched into puzzles... We quickly went over last month's "100 Monkeys" puzzle, and I also presented "100 Monkeys Redux" for this month. The winners of last month's contest were Gene Daschel and Paul Kulchenko. Congratulations! I'll post the winning answers separately, and get with the winners to see about getting them their books. I'm still fiddling with the best way to award prizes to encourage participation. So this month, one of the prizes will be given by selecting one entry randomly from the pool of all entries which succeed in producing the correct result. I'm seriously trying to figure out ways to attract more people and more activity to our meetings and mailing list. In that vein, please consider copying your fellow perl coders in on the monthly puzzles. For instance, I've just hooked one of my co-workers on this month's puzzle, who hasn't coded much perl since perl4. Other's who aren't concerned with producing the most elegant solution to a particular problem, may be happy submitting something that just plain works with a reasonable chance of winning a free book. Time to step back down off that soap box... and get on with the minutes ;) Doug gave a fine review of Manning's Graphics Programming with Perl (GPWP). I wasn't quite as prepared myself to review Web Services with Perl (WSWP). So I made do with an overview and a promise of a more thorough review next month. Stephen thought that WSWP might just be the thing to help out with a work related request to publish a portion of his company's web application server's interface via Simple Object Access Protocol (SOAP) with Web Service Definition Language (WSDL). Michael Morgan mentioned an interesting problem which I urged him to present on the list. But now that I've brought it up, I'll go ahead and beat him to it. The question was how to write a script which will read in a list of all image files in a particular directory, rename them using an ordered sequence of 1.jpg .. 10.jpg, and resize each image to 640x480. It sounds like a problem many of us have faced at one time or another. If anyone would like to post partial or complete solutions to the list, I and I'm sure Michael would appreciate it. Along similar lines to Michael, I've been playing with Barrie Slaymaker's AxKit Image Gallery tutorial (http://www.perl.com/pub/a/2002/09/24/axkit.html). After the recent birth of my son Ethan, I figured I'd use the tutorial to come up to speed on AxKit while also providing a neat way to distribute baby pictures to my co-workers. Unfortunately, I ran into a snag when Apache via the AxHandleDir directive invokes a fast handler on the directory holding the images. This percolates up to Apache::AxKit::Frovider::Filter before throwing a qq{Can't locate object method "get_handlers" via package "Apache::Filter"} into the apache error_log. So far my searches have indicated the "get_handlers" error comes when mod_perl was compiled without support for PERL_STACKED_HANDLERS. However, I've recompiled and verified via the return value from Apache->can_stack_handlers that mod_perl was indeed compiled with support. Most likely I've misconfigured something along the way. So I'm putting out a feeler for anyone familiar with stacked handlers and any code examples which might make use of stacked handlers independantly of AxKit or otherwise show me how I could hopefully begin to narrow down where the problem lies. Doug thought he might have run accross some useful code snippets and recommended I check out the perl.apache.org's documentation and the highly recommended "mod_perl Developer's Cookbook". After this, we wandered through various recent events and topics of interest. Stephen described some of the work he'd done with Perl's Database Interface (DBI) Module beneath the exposed interface in order to increase performance querying Oracle databases. This lead into general discussions on web server arrangements for serving images, dynamic, and proxied content. And then on into Apache mod_perl 2.0 and the upcoming libareq 2.0 which when it arrives will enable many of the Apache related CPAN modules to work on Apache 2.0. By this point, discussion pretty much puttered out as we each started glancing quickly at our watches, pagers, and clocks. So we wound up, headed out, chatted a bit in the parking lot, and went our separate ways. At least until next month ;) 1; __END__ -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett@scriptpro.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030212/e2aa1a09/attachment.htm From frank at wiles.org Wed Feb 12 11:20:13 2003 From: frank at wiles.org (Frank Wiles) Date: Mon Aug 2 21:31:05 2004 Subject: [Kc] Meeting Minutes: 2003_02_11 In-Reply-To: <71BEC0D4E1DED3118F7A009027B12028034C8BE6@EXCH_MISSION> References: <71BEC0D4E1DED3118F7A009027B12028034C8BE6@EXCH_MISSION> Message-ID: <20030212172013.GB9190@frank.wiles.org> .------[ Garrett Goebel wrote (2003/02/12 at 10:46:09) ]------ | | Michael Morgan mentioned an interesting problem which I urged him to present | on the list. But now that I've brought it up, I'll go ahead and beat him to | it. The question was how to write a script which will read in a list of all | image files in a particular directory, rename them using an ordered sequence | of 1.jpg .. 10.jpg, and resize each image to 640x480. It sounds like a | problem many of us have faced at one time or another. If anyone would like | to post partial or complete solutions to the list, I and I'm sure Michael | would appreciate it. | `------------------------------------------------- This script assumes a Unix system, the existence of Image Magick in the path, and working only with JPG files. Modifying it for other setups shouldn't be hard. Also, I took into account the case of wanting to move images that already had .jpg names by renaming the original to .jpg.orig and the making the resized version normally as jpg. The Image Magick options are pretty self explanatory, but here they are: -size 640x480 gives it a hint that the final product will be this size, which supposedly speeds it up -resize 640x480 tell it to resize to the given size My script should be used like so: script.pl /path/to/convert/ script.pl --directory=/path/to/convert script.pl --start=415 /path/to/convert script.pl --start=415 --directory=/path/to/convert You can call it with just a directory to start sequencing at 1 or set the sequence start number with the --start option. --directory is just there because it was easy to do. :) Hope this helps let me know if you have any questions about it. Script follows, tested as well as I could on my system. --------------------------------- Frank Wiles http://frank.wiles.org --------------------------------- #!/usr/bin/perl use strict; use Getopt::Long; ##################################### # Variables ##################################### my $directory; # Directory to work on my $start_seq = 1; # Number to start sequence at ( defaults to 1 ) my @files; # Array to hold original file names ##################################### # Begin Main Execution ##################################### # Parse commandline options GetOptions( 'start=i' => \$start_seq, 'directory=s' => \$directory ); # Handle case of script.pl if( scalar(@ARGV) == 1 ) { $directory = $ARGV[0]; } opendir( DIR, $directory ) or die "Cannot open directory '$directory': $!\n"; # Loop on all the files in here while( my $f = readdir(DIR) ) { next if $f =~ /^\./; # Skip hidden files next if $f !~ /\.jpg$/; # Skip non JPEG files push(@files, $f); } closedir(DIR); # Process each file my $seq = $start_seq; foreach my $f ( @files ) { # Handle already existing .jpg if( -e "$directory/$seq.jpg" ) { rename("$directory/$seq.jpg", "$directory/$seq.jpg.orig"); $f = "$seq.jpg.orig"; } # Actually convert the images using Image Magick `convert -size 640x480 $directory/$f -resize 640x480 $directory/$seq.jpg`; # Increment the sequence $seq++; } From garrett at scriptpro.com Wed Feb 12 12:16:21 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] 100 Monkeys: Solved Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BE9@EXCH_MISSION> 100 Monkeys: 2003-01-14 [- Problem -] There are 100 doors, all closed. In a nearby cage are 100 monkeys. The first monkey is let out, and runs along the doors opening every one. The second monkey is then let out, and runs along the doors closing the 2nd, 4th, 6th,... all the even-numbered doors. The third monkey is let out. He attends only to the 3rd, 6th, 9th,... doors (every third door, in other words), closing any that is open and opening any that is closed. The fourth monkey does the same for the 4th, 8th, 12th, 16th,... doors, opening the closed ones and closing the open ones. The fifth monkey does the same to the 5th, 10th, 15th,... doors, and so on. After all 100 monkeys have done their work in this way, which doors are left open? [- Answers -] __PAUL_KULCHENKO__ for$a(1..(@c=(0)x100)){my$b;$c[($b+=$a)-1]^=1 for 1..@c/$a} __GENE_DASCHER__ my %doors; my $OPEN=1; my $CLOSED=0; my $door_string = ""; for (my $x = 1; $x <= 100; $x++) { my $y = $x; while ($y <= 100) { $doors{$y} = ((defined $doors{$y}) ? (($doors{$y} == $OPEN) ? $CLOSED : $OPEN) : $OPEN); $y += $x; } } foreach $door (sort {$a <=> $b} keys %doors) { $door_string .= ((($doors{$door} eq $OPEN)) ? ((($door_string eq "") ? "" : " ") . $door) : "" ); } [- Discussion -] I found out the probable source of the puzzle: http://olimu.com/Notes/Monkeys&Doors.htm Feel free to post questions about why and how the following code does what it is supposed to do. I for one was surprised by @c=(0)x100. I thought x 100 could only be used on strings. For instance to get string of 100 0's is $c='0'x100 I had no idea you could use the syntax Paul provided to initialize an array with 100 scalar zero elements. Add on to that, he wraps the assignment in parens and immediately uses @c in a scalar context which returns the number of elements in the array... which is used to specify the range of the foreach style for loop. for$a(1..(@c=(0)x100)) The parens avoid an error which would otherwise occur because perl would read something like 1..@c=1 as attempting to modify a range in scalar assignment. So what we wind up with is extremely compact notation for the construction a loop which increments $a from 1 to 100. I'm not sure where I'd necessarily need to use this, but I like it ;) I was also surprised that Paul's answer while both solving the problem and matching the regex I'd specified, was in a totally different format than I'd imagined. Just goes to show what happens when you don't nail down your specs ;) [- Algorithmic Solution -] All the submissions solved the problem with brute force. I was a bit disappointed that nobody submitted an answer which solved it algorithmically. So I've included one myself below. The trick with 100 monkeys, is to look at the pattern that emerges, recognize that they are perfect squares and figure out why. In case you're still wondering, the doors left open are: 1 4 9 16 25 36 49 64 81 100 These numbers as you can see are perfect squares. Why? Each door is visited by a limited set of monkeys. The 9th door will be visited by monkeys 1, 3, and 9. Door 10 by monkeys 1, 2, 5, and 10. If you look at that long enough, you'll realize that the monkeys that will visit the door are the monkeys who's number can exactly divide the door's number... the factors. And it just so happens that perfect squares always have an odd number of distinct factors. So it follows that those doors which are numbered with perfect squares will only be toggled an odd number of times. Consequently you can skip the brute force solution and solve it algorithmically with: join' ',map$_**2,1..10 -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030212/59bbc818/attachment.htm From garrett at scriptpro.com Wed Feb 12 12:30:49 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] February's Puzzle: 100 Monkey's Redux Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BEA@EXCH_MISSION> 100 Monkeys Redux: 2003-02-11 Credit: The following puzzle is loosely based on a problem from one of the ACM International Collegiate Programming Contests. [- Problem -] You've just taken a job as a choreographer for 100 trained dancing monkeys. The monkeys are trained to dance in a manner where each starts by sitting in a different circle and jumps from one circle to the next on the beat of a drum. They determine where to jump by following an arrow from the current circle into the next. Because the monkeys are easily confused, each circle shall have exactly one arrow leading out and one leading in. Likewise, an arrow may not start and end at the same circle. For each performance your eccentric employer will request a different number of monkeys. You will be given an equal number of circles and arrows. Given the already stated constraints you may arrange the circles and arrows as you see fit. Your employer will pay you per beat of the drum until the beat on which all the monkeys have simultaneously returned to their starting circle. At which point the dance ends. For example, listed below is a figure which depicts the 2 possible groupings of circles for a 5 monkey dance. The first will last 5 beats, whereas the second will take 6 beats before all the monkeys are exactly where they started. (1) -> (2) -> (3) -> (4) -> (5) -> back to (1) (1) -> (2) -> (3) -> back to (1), (4) -> (5) -> back to (4) Your task should you chose to accept it, is to write a Perl script that will determine the maximum number of beats possible for a given number of monkeys. The script will accept multiple dance requests. For each case print the maximum possible number of beats on a separate line. Example: >dance.pl 5 8 6 15 > [- Prize -] Choice from our library of O'Reilly book to o randomly selected entrant with valid solution o fastest script to caclulate the correct output -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030212/8081ce00/attachment.htm From John.Whitmore at maryville.com Wed Feb 12 13:59:09 2003 From: John.Whitmore at maryville.com (John Whitmore) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] 100 Monkeys: Solved Message-ID: <4AD1B6DD52F1FF40ADDDE1F80CF2F5D801051E6B@app8.maryville.com> A faster solution in the same vein is: print "1 4 9 16 25 36 49 64 81 100" Although I admit it is twice as long... John -----Original Message----- From: Garrett Goebel To: kc@mail.pm.org Sent: 2/12/2003 12:16 PM Subject: [Kc] 100 Monkeys: Solved [- Algorithmic Solution -] All the submissions solved the problem with brute force. I was a bit disappointed that nobody submitted an answer which solved it algorithmically. join' ',map$_**2,1..10 From garrett at scriptpro.com Wed Feb 12 14:19:24 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] 100 Monkeys: Solved [x-bayes] Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BEB@EXCH_MISSION> John Whitmore wrote: > From: Garrett Goebel > > > > All the submissions solved the problem with brute force. > > I was a bit disappointed that nobody submitted an answer > > which solved it algorithmically. > > > > join' ',map$_**2,1..10 > > A faster solution in the same vein is: > print "1 4 9 16 25 36 49 64 81 100" > > Although I admit it is twice as long... ;) That's why the goal was explicitly to _calculate_ the answer. I could be wrong, but I don't believe this month's puzzle has an algorithmic answer. So while any halfway decent brute force script will put you in the running for the random drawing... figuring out some good heuristics will be necessary to take the fastest script prize. Garrett -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett@scriptpro.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030212/b2b9e190/attachment.htm From garrett at scriptpro.com Mon Feb 17 08:06:32 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] Alternative to February's Puzzle: 100 Monkey's Redux Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8BFC@EXCH_MISSION> This deceptively simple sounding puzzle is turning out to be incredibly difficult. -At least for me. And since my objective in presenting these puzzles is to put something out that both novice and expert coders can find interesting... I'm going to offer an alterative puzzle for the random drawing. Here goes: There are 3 jars. A black jar, a white jar, and a black-and-white jar. Each jar is filled with either black and/or white balls. The black jar can not contain white balls. Likewise the white jar cannot contain black balls, and the mixed jar cannot contain mixed balls. To determine the contents of each jar how many balls must you extract? Explain. -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030217/e0b14e6e/attachment.htm From garrett at scriptpro.com Mon Feb 17 09:46:37 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] Alternative to February's Puzzle: 100 Monkey's Redux Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8C00@EXCH_MISSION> Oops... that's what I get for posting before finishing the first cup of coffee. I mixed up the part about which balls couldn't be in the black jar and white jar. Let's try this again: February's deceptively simple sounding puzzle is turning out to be incredibly difficult. -At least for me. And since my objective in presenting these puzzles is to put something out that both novice and expert coders can find interesting... I'm going to offer an alterative puzzle for the random drawing. Here goes: There are 3 jars. A black jar, a white jar, and a black-and-white jar. Each jar is filled with either black and/or white balls. The black jar can not contain black balls. Likewise the white jar cannot contain white balls, and the mixed jar cannot contain mixed balls. To determine the contents of each jar how many balls must you extract? Explain. -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030217/31dcf156/attachment.htm From whatever at davidnicol.com Thu Feb 20 14:33:05 2003 From: whatever at davidnicol.com (david nicol) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] box of t-shirts from YAPC 2002 In-Reply-To: <71BEC0D4E1DED3118F7A009027B12028034C8BE6@EXCH_MISSION> References: <71BEC0D4E1DED3118F7A009027B12028034C8BE6@EXCH_MISSION> Message-ID: <1045773185.1816.5.camel@localhost.localdomain> I found the box of PM t-shirts Also I have received a review copy of the DreamWeaver-MX "Missing Manual" to give to whoever asked for it so long ago :) From garrett at scriptpro.com Thu Feb 20 15:18:43 2003 From: garrett at scriptpro.com (Garrett Goebel) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] RE: box of t-shirts from YAPC 2002 Message-ID: <71BEC0D4E1DED3118F7A009027B12028034C8C12@EXCH_MISSION> david nicol wrote: > > I found the box of PM t-shirts > > Also I have received a review copy of the DreamWeaver-MX "Missing > Manual" to give to whoever asked for it so long ago Are you going to be in town for the next meeting... March 11th? If not, I could swing by tomorrow and pick the goodies up. -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/kc/attachments/20030220/7fb65ec3/attachment.htm From whatever at davidnicol.com Wed Feb 26 21:05:20 2003 From: whatever at davidnicol.com (david nicol) Date: Mon Aug 2 21:31:06 2004 Subject: [Kc] David Nicol -- what a guy. Message-ID: <1046315120.12285.108.camel@localhost.localdomain> I've been nominated for the MIT Technology Review "TR100" list of the 100 "young innovators" who will shape the future. They define "young" as "not 35 yrs old until after 1/1/03" so I snuck in by just a few weeks. If you would like to write a reccommendation hyping me, please contact me for the address of the fellow at MIT to send it to. -- David Nicol, independent consultant and contractor Kurt Vonnegut in 2004