Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29

by merlyn (Sage)
on Jan 11, 2004 at 22:16 UTC ( #320541=perlnews: print w/replies, xml ) Need Help??

According to his girlfriend's blog, Koschei passed away from a cardiac arrest at the age of 24. He was a significant contributor to the CPAN, and frequently interacted with us on the Perl IRC channels. His wiki is still up for perusal. He will be missed.

Rest In Peace, my friend.

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

  • Comment on Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29

Replies are listed 'Best First'.
Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by liz (Monsignor) on Jan 11, 2004 at 22:34 UTC
    die() is such an often used idiom in Perl that you tend forget its irrevocability in real life ;-(


      Iain will be missed. It was only last November that he gave up some time to present a talk on DateTime at the PM.

      Iain talked in detail how the development was proceeding on the Datetime modules and how he spent the last 8 months hard work crafting hacking ("hacking" is a poor choice of words. Conceptually DateTime is not for the weak of mind). The talk was well presented, informative and most of all amusing (especially the bit on the evolution of the French Revolutionary Calander)

      I will certainly be thinking of him when I'm using any of his modules. His legacy is more than mere code.

      Wherever he is I hope they can use good programmers.


      The Needs of the World and my Talents run parallel to infinity.
Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by petdance (Parson) on Jan 12, 2004 at 05:10 UTC
Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by RMGir (Prior) on Jan 12, 2004 at 12:50 UTC
    User since:  Jan 20, 2000 at 03:50 GMT+4
    Last here: Dec 23, 2003 at 20:30 GMT+4 (3 weeks ago)
    Experience: 230
    Level: monk (5)
    Writeups: 31
    How many of us have to ++ those 31 helpful and polite writeups for him to make saint?

    Maybe the gods are listening...

Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by converter (Priest) on Jan 12, 2004 at 11:30 UTC

    When I read about this yesterday, I popped open the freenode #perl and #regex logs and read many of Iain's conversations. I was always impressed at the friendly, professional approach he took with users. I wish we'd been able to find more time to chat with each other.

    Thanks for posting this, merlyn.

Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by Aristotle (Chancellor) on Jan 12, 2004 at 12:46 UTC
Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by Anonymous Monk on Jan 12, 2004 at 07:59 UTC
    Boy: There is no spoon.
    Neo: There is no spoon?
Re: Iain Campbell Truskett ("Spoon"/"Koschei") RIP 2003-12-29
by mugwumpjism (Hermit) on Jan 15, 2004 at 11:23 UTC

    He may be missed, but his code won't be. He has a public SVN repository which is open access. If he was still with us today, I'm sure he'd be glad to know that someone wrote this piece of code ... so that we may not lose any of his gifts.

    This one's for you, spoon.

    #!/usr/bin/perl -w use strict; use POE; use POE::Component::Client::UserAgent; use XML::Sablotron::DOM; use URI; my @urls = qw(; my $thread = 0; sub _start { $_[HEAP]->{situa} = new XML::Sablotron::Situation(); $_[HEAP]->{alias} = "useragent".$_[ARG0]; $_[HEAP]->{thread} = ++$thread; POE::Component::Client::UserAgent->new (alias => $_[HEAP]->{alias}); $_[KERNEL]->yield("next"); } sub next { if (my $url = pop @urls) { $_[HEAP]->{url} = URI->new($url); print "Thread $_[HEAP]->{thread} fetching $url\n"; $_[KERNEL]->post ( $_[HEAP]->{alias} => "request", { request => HTTP::Request->new(GET => $url), response => $_[SESSION]->postback('got_it') } ); } else { print "Thread $_[HEAP]->{thread} waiting 10s for more work\n"; $_[KERNEL]->delay(waiting => 10); } } sub waiting { if (@urls) { goto \&next; } else { print "Thread $_[HEAP]->{thread} shutting down\n"; $_[KERNEL]->post ( $_[HEAP]->{alias} => "shutdown", ); } } sub got_it { my (undef, $response) = @{$_[ARG1]}; # write the response to a file my $url = $_[HEAP]->{url}; # pick a filename like wget does (my $filename = $url) =~ s{^http://}{}; my ($dirname) = ($filename =~ m{(.*)/[^/]*}); ( -d $dirname ) || system("mkdir -p '$dirname'"); if ($response->is_success) { if ($url =~ m{/$}) { print "Thread $_[HEAP]->{thread} scanning $url\n"; # a directory - grok it with Sablotron $_[HEAP]->{doc} = XML::Sablotron::DOM::parseBuffer ($_[HEAP]->{situa}, $response->content); my @dir_nodes = @{ $_[HEAP]->{doc}->xql("//dir") || []}; for my $node (@dir_nodes) { push @urls, URI->new_abs($node->getAttribute("href"), $url) } my @file_nodes = @{ $_[HEAP]->{doc}->xql("//file") || []}; for my $node (@file_nodes) { push @urls, URI->new_abs($node->getAttribute("href"), $url) } } else { # write response ... if (open FOO, ">$filename") { print "Thread $_[HEAP]->{thread} saving $url to $filename\ +n"; print FOO $response->content; close FOO; } else { warn "failed to open $filename for writing; $!"; }; } } else { warn "Thread $_[HEAP]->{thread} got error loading $url; " .$response->status_line."\n"; } $_[KERNEL]->yield("next"); } for (1..3) { POE::Session -> create ( inline_states => { _start => \&_start, next => \&next, got_it => \&got_it, waiting => \&waiting, }, args => [ $_ ], # arguments ); } $poe_kernel->run();
    $h=$ENV{HOME};my@q=split/\n\n/,`cat $h/.quotes`;$s="$h/." ."signature";$t=`cat $s`;print$t,"\n",$q[rand($#q)],"\n";

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlnews [id://320541]
[1nickt]: Discipulus Sorry had no time before. ++Test::Warn, but also simply Capture::Tiny to capture everything and examine it. Or just Test::Exception:: dies_ok().

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (6)
As of 2018-01-22 13:07 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (233 votes). Check out past polls.