Home

Advertisement

Customize
binderofdaemons
19 June 2009 @ 02:33 pm

Mirrored from Obsolete Your Idols.

So something awesome happened this morning.  The hard drive in Vy’s computer died.

That’s not the awesome part.  The awesome part is that because I took the advice of jwz AND paid for the SuperDuper program AND consulted the wise and informative ifixit.com site, I was able to restore her system with no data loss.  That’s pretty awesome.

So I wanted to say how thankful I am to jwz for his great advice, to the fine coder(s?) behind ShirtPocket who made a program which does well what it says it will do and the technicians at iFixit who are able to explain clearly and usefully exactly how to get into the guts of Mac hardware.  I couldn’t have had a morning this awesome without all of you.  Keyboard cat, play us some Danny Halfelf.

 
 
binderofdaemons
17 May 2009 @ 12:03 pm

Mirrored from Obsolete Your Idols.

This is TSR 9177 REF 3 The Book of Lairs by James M. Ward and Mike Breault p5.

Don’t worry.  If you’ve no idea what that means, this post isn’t directed at you.

  1. Door
    • Animated two-handed swords (2)
  2. Weapon forge
    • Animated hammers (6)
    • Animated spears (6)
    • Animated long swords (6)
    • Animated two-handed swords (6)
    • Animated morning stars (6)
  3. Armor forge
    • Suits of animated armor (2 * characters)
  4. Resting place
    • Iron golems (2)

If I ran this in 3.5 edition d20, the system I use most of the time I’m running these days, here’s how these four encounters might be converted.

Door:  Animated Object, obviously.  I’d make them Medium Greatswords, presuming them to be weapons crafted for Medium creatures and being two-handed, the same size class as the wielder.  Hardness 10 and flight seem appropriate additional special defense and special quality. I’d let them do Greatsword + 1 damage and leave their attack modifier at +2. I’d bump up the CR for these to 3 each instead of the CR2 for an ordinary Medium Animated Object monster.  So EL4, overall.

Weapon forge:  More Animated Objects.  The softer version considers the hammers to be light warhammers and thus Tiny, otherwise Small for the non-light version.  If the spears are short, Small.  If longspear, Medium.  Longswords are Small.  The two-handed swords become Medium Animated Object Greatswords, like the ones at the door.  The morning stars are Small. Again granting them Hardness 10, flight, and normal damage +1 for weapons of their type at +2 to hit over conventional Animated Object monsters bumps up the CRs.  The lowest range I’d use would be 6 + 12 + 12 + 18 + 12 and the high end would be 12 + 18 + 12 + 18 + 12.  Either way this is EL9 or EL10 territory.  If the party got clever and split up the attackers somehow, controlled terrain to only let a few come at them at a time, I’d award the full xp for an EL10 encounter.  Perversely if they went in against all the weapons at once, only EL9 xp.  I’m mean that way.

Armor forge: Surprise.  More Animated Object monsters.  I’d make them unmodified Medium.  At 2 suits per character, that makes this one EL (party size + 4).

Resting place:  Straight up pair of by the book Iron Golem monsters.  The only thing unusual about them is that these are chatty and being chatty isn’t a special attack.  EL15.

Given all that, I’d run this scenario for a party with an average character level of 10 or so.  Slightly lower would probably be okay if they are good at managing terrain or willing to back out when they hit the blade storm in the Weapon Forge.

 
 
binderofdaemons
17 May 2009 @ 06:41 am

Mirrored from Obsolete Your Idols.

While on the course of wondering something almost as silly, I decided to see what kind of distribution of software packages my laptop has installed.  It turns out to be skewed wildly in favor of the letter L.

dpkg –get-selections |  grep -v deinstall | cut -c 1 | sort | uniq -c

  • 1 9
  • 44 a
  • 44 b
  • 74 c
  • 44 d
  • 66 e
  • 57 f
  • 178 g
  • 26 h
  • 33 i
  • 9 j
  • 29 k
  • 1015 l
  • 61 m
  • 40 n
  • 44 o
  • 134 p
  • 8 q
  • 23 r
  • 65 s
  • 99 t
  • 45 u
  • 10 v
  • 17 w
  • 117 x
  • 1 y
  • 6 z
 
 
binderofdaemons
17 May 2009 @ 06:02 am

Mirrored from Obsolete Your Idols.

Some of my favorite stories were all written by the same person, Philip K. Dick. So I’m always on the lookout for more stories which remind me of those stories. If you’re similar, you may want to give a read to Walter Mosley’s Blue Light. It’s a story about a group of people around the San Francisco Bay Area who experience an uncanny blue light which changes them. They then work, together and apart, to change the world they live in. Or perhaps it’s the aftermath of a cult recorded by a delusional chronicler, an interpretation which would squint towards the inaccurate if not downright unreliable narrator.

I came to read this book not because it turned up in a search of stories like those PKD wrote but because when out walking near Berkeley one day at dusk, a pedestrian saw me and asked me if I read sf. When I acknowledged his intuition, he insisted that I seek out Walter Mosley’s science fiction stories.

People who might like this book

  • Fans of PKD
  • People who live, lived or want to live in Northern California
  • Fans of the early stages of a utopia

People who might not like this book

  • Those sensitive souls who think the past was a golden age where everyone was nice
  • Those who need complete closure to a story
  • Those who think the only interesting science fiction is the most currently written
Tags: , ,
 
 
binderofdaemons
19 April 2009 @ 10:07 pm

Mirrored from Obsolete Your Idols.

I was fiddling around for something to do with a Yahoo API and so now the MUD chatbot returns (simple) websearch results. Isn’t that nice? I think it’s nice.

#!/usr/bin/perl

# mudbot by Shannon Prickett <stp@manjusri.org>
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.

package mudbot;

use Smart::Comments;
use Modern::Perl;
use Net::Telnet;
use Net::AIML;
use DB_File;
use WWW::Mechanize;

use vars qw{$being_quiet %global_exit $mud_connection $mud_conversation $mud_host $mud_name
            $mud_pass $mud_port $mud_sent $pid $robot %room_name $yahoo_id};
use subs qw{setup sometimes speak};

$mud_host       = 'ginka.armageddon.org';
$mud_port       = '4242';
$mud_name       = 'Somebot';
$mud_pass       = 'YRMEME';
$being_quiet    = 0;
$pid            = $$;

tie %room_name, 'DB_File', 'mapfile' or
    die "can't tie to mapfile: $!\n";

$robot          = Net::AIML->new( botid => 'BOTIDGOESHERE' ); 

$mud_connection = new Net::Telnet( Host => $mud_host, Port => $mud_port )
                    or die "Can't connect to $mud_host $mud_port: $!";

$yahoo_id = 'LALALALA';
setup( $mud_connection );

TALKLOOP: while (1) {
    ### TALKLOOP start

    my $atme = 0;
    my $prematch = '';
    my $postmatch = '';
    my $who_said;

    my ($stub_said, $what_said) =
        $mud_connection->waitfor(   Match => '/ says, ".*"/',
                                    Errmode => 'return', );

    next TALKLOOP unless defined $what_said;

    $stub_said =~ qr{ START \d+ .+ \b(\w+)\b }msx;
    $who_said = $1;

    $what_said =~ s{says, \"(.*)\"}{$1}g;

    ### Got: $who_said
    ### Got: $what_said

    if ($what_said =~ qr{$mud_name}msxi){
        ### saw my name
        $atme = 1;
    }

    $what_said =~ s{$mud_name}{}g;

    if ( ($atme) && ($what_said =~ qr{QUIT}) ) {
        $mud_connection->print("QUIT");
        exit;
    }

    if ( ($atme) && ($what_said =~ qr{be quiet}) ) {
        if ($being_quiet) {
            $mud_connection->print("say Maximum verbosity achieved.");
            $being_quiet = 0;
        } else
        {
            $mud_connection->print("say Shutting up now.");
            $being_quiet = 1;
        }
    }

    if ( ($atme) && ($what_said =~ qr{search for ([\w\s]+)}) ) {
        ### requested to search
        my $terms = $1;
        ### got: $terms

        my @terms = split ' ', $terms;
        my $querystring = join '+', @terms;

        if (sometimes( )) {
            $mud_connection->print("say Found http://lmgtfy.com/?q=$querystring");
        } else
        {
            my $web_connect = WWW::Mechanize->new( autocheck => 1);
            $web_connect->get( "http://boss.yahooapis.com/ysearch/web/v1/$querystring?appid=$yahoo_id&format=xml");

            my $results = $web_connect->content();
            if (defined $results) {
                speak( 'Found some URLs:' );
            }
            my @lines = split /\n/, $results;
            for my $line ( @lines ) {
            ### got: $line
                if ($line =~ qr{(.+)}) {
                    my $output = $1;
                    speak( $output );
                }
            }
        }

        next TALKLOOP;
    }

    if ( ($atme) && ($what_said =~ qr{explore}) ) {
        $mud_connection->print("say OK, going to poke around now.");
        sleep 3;
        $mud_connection->print('home');
        goto EXPLORELOOP;
    }

    if ($being_quiet) {
        next TALKLOOP;
    }

    my $response = $robot->tell($what_said);
    if ($atme) {
        print "response: $response\n";
        speak( $response );
    }
    else {
        if ( !$being_quiet && (sometimes()) ) {
            print "jumping in with $response\n";
            speak( $response );
        }
    }
}

EXPLORELOOP: while (1) {
    ### exploring

    my ($name, $desc);

    $mud_connection->print('look');
    my $startmark   = $mud_connection->getline( );
    $name           = $mud_connection->getline( );
    while (my $line = $mud_connection->getline( Errmode => 'return', )) {
        $desc .= $line;
    }

    $mud_connection->waitfor( Match => '/END$pid/', Errmode => 'return');
    chomp $name;
    chomp $desc;

    ### got: $name
    ### got: $desc

    $room_name{$name} = $desc;

    sleep 10;

    $mud_connection->print('out');
}

sub setup {
    my $mc = shift;

    $mc->dump_log('/home/binder/src/mb/logfile');

    $mc->waitfor('/connect\s+guest\s+guest/');
    $mc->print("connect $mud_name $mud_pass");

    $mc->waitfor('/Vote to ban the MisInformation SuperHighway/');
    $mc->print('@desc me=Just a Perl toy of Binder\'s.');

    $mc->print("OUTPUTPREFIX START$pid");
    $mc->print("OUTPUTSUFFIX END$pid");

    $mc->waitfor('/Description set/');
    $mc->print("home\nout\nvillage");
}

sub sometimes {
    return (rand() > .75);
}

sub speak {
    my $response = shift;
    my @lines = split /\n/, $response;
    for my $line (@lines) {
        $mud_connection->print("say $line");
    }
}
 
 
binderofdaemons
19 April 2009 @ 10:22 am

Mirrored from Obsolete Your Idols.

I’ve now sunk a number of hours into it and added some functionality, none of which really works yet. But in the interest of keeping things going, here’s where things stand now. Explore doesn’t quite work, and there are still weird undef matches in the dialogue. But I pulled out all of Expect.pm and went to Smart::Comments.


#!/usr/bin/perl

# mudbot by Shannon Prickett <stp@manjusri.org>
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.

package mudbot;

use Smart::Comments;
use Modern::Perl;
use Net::Telnet;
use Net::AIML;
use DB_File;

use vars qw{$being_quiet %global_exit $mud_connection $mud_conversation $mud_host $mud_name
$mud_pass $mud_port $mud_sent $pid $robot %room_name };
use subs qw{setup};

$mud_host = ‘ginka.armageddon.org’;
$mud_port = ‘4242′;
$mud_name = ‘Somebot’;
$mud_pass = ‘YRMEME’;
$being_quiet = 0;
$pid = $$;

tie %room_name, ‘DB_File’, ‘mapfile’ or
die “can’t tie to mapfile: $!\n”;

$robot = Net::AIML->new( botid => ‘GETFROMPANDORABOTS’ );

$mud_connection = new Net::Telnet( Host => $mud_host, Port => $mud_port )
or die “Can’t connect to $mud_host $mud_port: $!”;

setup( $mud_connection );

TALKLOOP: while (1) {
### TALKLOOP start

my $atme = 0;
my $prematch = ”;
my $postmatch = ”;
my $who_said;

my ($stub_said, $what_said) =
$mud_connection->waitfor( Match => ‘/ says, “.*”/’,
Errmode => ‘return’, );

next TALKLOOP unless defined $what_said;

$stub_said =~ qr{ START \d+ .+ \b(\w+)\b }msx;
$who_said = $1;

$what_said =~ s{says, \”(.*)\”}{$1}g;

### Got: $who_said
### Got: $what_said

if ($what_said =~ qr{$mud_name}msxi){
### saw my name
$atme = 1;
}

$what_said =~ s{$mud_name}{}g;

if ( ($atme) && ($what_said =~ qr{QUIT}) ) {
$mud_connection->print(”QUIT”);
exit;
}

if ( ($atme) && ($what_said =~ qr{be quiet}) ) {
if ($being_quiet) {
$mud_connection->print(”say Maximum verbosity achieved.”);
$being_quiet = 0;
} else
{
$mud_connection->print(”say Shutting up now.”);
$being_quiet = 1;
}
}

if ( ($atme) && ($what_said =~ qr{search for ‘(.*)’}msxi) ) {
my $terms = $1;
my @terms = split $terms;
my $querystring = join ‘+’, @terms;
$mud_connection->print(”say Found http://lmgtfy.com/q=$querystring”);
}

if ( ($atme) && ($what_said =~ qr{explore}) ) {
$mud_connection->print(”say OK, going to poke around now.”);
sleep 3;
$mud_connection->print(’home’);
goto EXPLORELOOP;
}

if ($being_quiet) {
next TALKLOOP;
}

my $response = $robot->tell($what_said);
if ($atme) {
print “response: $response\n”;
speak( $response );
}
else {
if ( !$being_quiet && (rand() > .75) ) {
print “jumping in with $response\n”;
speak( $response );
}
}
}

EXPLORELOOP: while (1) {
### exploring

my ($name, $desc);

$mud_connection->print(’look’);
my $startmark = $mud_connection->getline( );
$name = $mud_connection->getline( );
while (my $line = $mud_connection->getline( Errmode => ‘return’, )) {
$desc .= $line;
}

$mud_connection->waitfor( Match => ‘/END$pid/’, Errmode => ‘return’);
chomp $name;
chomp $desc;

### got: $name
### got: $desc

$room_name{$name} = $desc;

sleep 10;

$mud_connection->print(’out’);
}

sub setup {
my $mc = shift;

$mc->dump_log(’/home/binder/src/mb/logfile’);

$mc->waitfor(’/connect\s+guest\s+guest/’);
$mc->print(”connect $mud_name $mud_pass”);

$mc->waitfor(’/Vote to ban the MisInformation SuperHighway/’);
$mc->print(’@desc me=Just a Perl toy of Binder\’s.’);

$mc->print(”OUTPUTPREFIX START$pid”);
$mc->print(”OUTPUTSUFFIX END$pid”);

$mc->waitfor(’/Description set/’);
$mc->print(”home\nout\nvillage”);
}

sub speak {
my $response = shift;
my @lines = split /\n/, $response;
for my $line (@lines) {
$mud_connection->print(”say $line”);
}
}

 
 
binderofdaemons
18 April 2009 @ 02:56 pm

Mirrored from Obsolete Your Idols.

I was feeling restless so I looked at what Google Webmaster Tools had to say about this blog. Mostly it thought my title tags weren’t interesting enough, which was true. So I took the tip from Perishable Press on making title tags without Yet Another Plugin.

Humans shouldn’t notice anything exciting but perhaps the Googlebot will be thrilled.

 
 
binderofdaemons
17 April 2009 @ 08:40 am

Mirrored from Obsolete Your Idols.

And the bot is now both more and less annoying. Updated code below.


#!/usr/bin/perl

# mudbot by Shannon Prickett <stp@manjusri.org>
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.

package mudbot;
use Modern::Perl;
use Net::Telnet;
use Net::AIML;
use Expect;

use vars qw{$mud_connection $mud_conversation $mud_host $mud_name $mud_pass $mud_port $mud_sent $robot};

$mud_host = 'ginka.armageddon.org';
$mud_port = '4242';
$mud_name = 'Somebot';
$mud_pass = 'YRMEME';

$robot = Net::AIML->new( botid => 'GETTHISNUMBERFROMPANDORABOTS' ); 

$mud_connection = new Net::Telnet( Host => $mud_host, Port => $mud_port )
    or die "Can't connect to $mud_host $mud_port: $!";

$mud_conversation = Expect->exp_init($mud_connection);

$mud_conversation->log_group(1);
$mud_conversation->log_user(1);
$mud_conversation->log_stdout(1);
$mud_conversation->log_file("/home/binder/src/mb/logfile", 'w');

$mud_conversation->expect(30,   '-re', qr{connect       # pretty standard MUCK greeting
                                    \s+
                                    guest
                                    \s+
                                    guest}msx,
                                sub {
                                    my $fh = shift;
                                    $fh->send("connect $mud_name $mud_pass\n");
                                    });

$mud_conversation->expect(30, 'Vote to ban the MisInformation SuperHighway',
                            sub {
                                my $fh = shift;
                                $fh->send("\@desc me=Just a Perl toy of Binder's.\n");
                                });

$mud_conversation->expect(30, 'Description set',
                            sub {
                                my $fh = shift;
                                $fh->send("home\nout\nvillage\n");
                                });

TALKLOOP: while (1) {
    print "TALKLOOP start\n";

    my $being_quiet = 0;
    my $atme = 0;
    my $prematch = '';
    my $postmatch = '';

    my $index = $mud_conversation->expect( 60, '-re', qr{ says, "} );  

    $prematch = $mud_conversation->before();
    $postmatch = $mud_conversation->after();
    $mud_conversation->clear_accum();

    next TALKLOOP unless $prematch;

    $postmatch =~ s{\"}{};
    print "$prematch said $postmatch\n";

    if ($postmatch =~ qr{$mud_name}){
        print "saw my name\n";
        $postmatch =~ s{$mud_name}{Persephone}g;
        $atme = 1;
    }

    if ( ($atme) && ($postmatch =~ qr{QUIT}) ) {
        $mud_conversation->send("QUIT\n");
        exit;
    }

    if ( ($atme) && ($postmatch =~ qr{be quiet}) ) {
        if ($being_quiet) {
            $mud_conversation->send("say Maximum verbosity achieved.\n");
            $being_quiet = 0;
        } else
        {
            $mud_conversation->send("say Shutting up now.\n");
            $being_quiet = 1;
        }
    }

    if ($being_quiet) {
        next TALKLOOP;
    }

    if ($atme) {
        my $response = $robot->tell($postmatch);
        print "response: $response\n";
        $mud_conversation->send("say $response\n");
    }
    else {
        if ( !$being_quiet && (rand() > .75) ) {
            print "jumping in\n";
            my $response = $robot->tell($postmatch);
            print "response: $response\n";
            $mud_conversation->send("say $response\n");
        }
    }
}
continue {
    $mud_conversation->clear_accum();
}

 
 
binderofdaemons
16 April 2009 @ 11:13 pm

Mirrored from Obsolete Your Idols.

I decided to scratch an itch and practice a little bit of the Manifesto of the Cult of Done tonight.  So I wrote a clunky and fragile Perl wrapper which ties a chatbot to a MUCK.  Here’s the code.

#!/usr/bin/perl

# mudbot by Shannon Prickett <stp@manjusri.org>
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.

package mudbot;
use Modern::Perl;
use Net::Telnet;
use Net::AIML;
use Expect;

use vars qw{$mud_connection $mud_conversation $mud_host $mud_name $mud_pass $mud_port $mud_sent $robot};

$mud_host = 'ginka.armageddon.org';
$mud_port = '4242';
$mud_name = 'Somebot';
$mud_pass = 'YRMEME';

$robot = Net::AIML->new( botid => 'GETTHISNUMBERFROMPANDORABOTS' ); 

$mud_connection = new Net::Telnet( Host => $mud_host, Port => $mud_port )
    or die "Can't connect to $mud_host $mud_port: $!";

$mud_conversation = Expect->exp_init($mud_connection);

$mud_conversation->log_group(1);
$mud_conversation->log_user(1);
$mud_conversation->log_stdout(1);
$mud_conversation->log_file("/home/binder/src/mb/logfile", 'w');

$mud_conversation->expect(30,   '-re', qr{connect       # pretty standard MUCK greeting
                                    \s+
                                    guest
                                    \s+
                                    guest}msx,
                                sub {
                                    my $fh = shift;
                                    $fh->send("connect $mud_name $mud_pass\n");
                                    });

$mud_conversation->expect(30, 'Vote to ban the MisInformation SuperHighway',
                            sub {
                                my $fh = shift;
                                $fh->send("\@desc me=Just a Perl toy of Binder's.\n");
                                });

$mud_conversation->expect(30, 'Description set',
                            sub {
                                my $fh = shift;
                                $fh->send("home\nout\nvillage\n");
                                });

while (1) {
    my $command;
    $mud_conversation->expect(3,
                             '-re',
                             qr{ Somebot }msx,
                             sub {  my $fh = shift;
                                    $command = $mud_conversation->after();
                                    $command =~ tr{\,\"\.\!}{}d;
                                    print "matched: $command\n";
                                    if ($command =~ qr{QUIT}) {
                                        $fh->send("QUIT\n");
                                        exit;
                                    } else
                                    {
                                        if (length($command)>3) {
                                            my $response = $robot->tell($command);
                                            $fh->send("say $response\n");
                                        }
                                    }
                                }
                            );
}

 
 
binderofdaemons
09 April 2009 @ 06:12 am

Mirrored from Obsolete Your Idols.

Check out her newly designed website! Designed and implemented by Eugie Foster.

Tags:
 
 
binderofdaemons
09 April 2009 @ 05:50 am

Mirrored from Obsolete Your Idols.

If you go to Playfirst and throw some games in your cart and use the coupon code APRILFRIENDS you’ll get them for half price, at least until April 12th.  Share and enjoy.

 
 
binderofdaemons
05 April 2009 @ 04:29 am

Mirrored from Obsolete Your Idols.

If you’re reading this, as most visitors do, via the RSS feed, then you won’t notice that I finally changed to a non-default Wordpress theme.  (Unless you consider having tweaked the default header block to be a darker less offensively chirpy blue color as being non-default, which no one probably should.)  But in fact I have gone to a lovely theme, which I chose because it was the top hit for ‘dark widget’ at the Theme Directory, aptly named Dark Smoke.

Sorry if this messes up your mental spatial map of where links are on the page, since this moved things around, but given the longevity of the last theme, things should stay where they are for a good long while after this.

Also I noticed a lot of 404s from old links still going to my legacy blog archive and cleaned that up a bit, so the crusty old blog is back.

Tags:
 
 
binderofdaemons
04 April 2009 @ 05:52 pm

Mirrored from Obsolete Your Idols.

This is kind of important. http://www.bidder70.org/ is the story of a guy who took a stand against corporations running over land.

 
 
binderofdaemons
04 April 2009 @ 05:48 pm

Mirrored from Obsolete Your Idols.

I guess in terms of fiction I’ve been on a space opera kick because I also read Revelation Space recently.  That’s a nicely layered book with multiple reveals that twist the earlier understanding of how things are and send the story shooting off in a new direction.

The starting impetus is that an archeologist excavating ruins of a non-human society finds something unexpected.  Then the layers of the onion start coming off, putting the archeologist’s history in new light, the find in new light, the fundamental backdrop they operate against in new light.  This book does an excellent job of making plausible each of these successive expansions of the reader’s understanding of the situation.

Things I liked about this book

  • The construction of the story
  • The structure of the setting, all the players and vectors of motive in play
  • The assassin character
  • Knowing that there are other books in this setting which I can look forward to reading, now

Things I didn’t like about this book

  • There were a few red herrings which I got invested in and which didn’t pan out
  • Some of the characters who weren’t of consequence got an odd degree of screen time, while others who were significant sometimes came out of nowhere

Who might like it

  • Space Opera fans, unite!
  • People who enjoy the kind of detective story where the author keeps expanding the scope of concern until it’s enormous
  • Fans of protagonists who are utter bastards

Who might not like it

  • Those who need every last thing explained in a story
  • Those who prefer character driven over concept driven narratives
  • People who feel like they’ve had a glut of space opera in their diet lately
 
 
binderofdaemons
04 April 2009 @ 05:31 pm

Mirrored from Obsolete Your Idols.

Continuing my long and successful plan of being the last person to read things, I recently read another Culture novel by Iain Banks, The Player of Games.  This might be my favorite book of his I’ve read and it’s largely because I could understand the central character’s motive, being a game player myself, though on a much smaller scale.

In brief, a champion game player is recruited by a faction within his society to go play a very difficult game with very high stakes and with lots of shenanigans to keep it from getting dull.  The narrative does a good job of raising the stakes and having a rewarding payoff.  Pacing is brisk, the characters are convincingly detailed, and it’s a solid, though somewhat predictable, story.

Things I liked about it

  • Central focus on games and the kind of thinking which goes into playing them
  • Larger than life sweep of events, with a rich futuristic flavor to the setting
  • Devious gambits and duplicity revealed

Things I didn’t like about it

  • The final reveal felt too pat to me
  • Some of the most dramatic events happened outside the scope of narrative

Who might like this book

  • Fans of space opera
  • Fans of the experience of playing games

Who might not like this book

  • No idea.  I suppose such people much exist but I didn’t notice anything offensive here.
 
 
binderofdaemons
22 February 2009 @ 09:01 pm

Mirrored from Obsolete Your Idols.

Did you know it’s interactive fiction writing month?  I didn’t until I stumbled upon it via brasslantern.  Then over the course of a week I spent three days working on a story and sent it in.  This is now week two and I’m going to try to finish my story and add some interesting parts to it.  Stay tuned, when I’m content with it I’ll make it papyrus-able.

 
 
binderofdaemons
15 February 2009 @ 12:30 pm

Mirrored from Obsolete Your Idols.

Apologies for the small burst of posts just now. LJ Xposter seems to have not worked for some time and I only now found a replacement (JournalPress) and so I republished them in a rush.

 
 
binderofdaemons
15 February 2009 @ 08:40 am

Mirrored from Obsolete Your Idols.

Again this year, Vy and I enjoyed the absolutely dreamlike Valentine’s Day menu at Nibblers Eatery.  Those of you who follow me on twitter probably saw an abbreviated and order jumbled rendition of the courses because the twitter service was having some sort of a meltdown.  Here in fuller form, the delicious dishes delivered and dined upon.

  • The amuse was a whisky smoked salmon mousse next to bergamot preserve on baguette toast.  It tasted exactly like you’d expect those two things to taste together, assuming you’ve ever drank Earl Grey tea or eaten lox.
  • For the first course, we chose lobster purses on pea sprouts.  This was a course where Vy knew exactly what she wanted and so we didn’t really discuss the other options available.  I liked every option here and would have been fine with any of them.  There was a sparkling wine tasting paired with this and it really helped cut the doughiness of the pastry satchel.
  • With the second course, we had no strong feelings other than wanting to avoid some ingredients which give us trouble, so we went with the waitress’s suggestion and had the frittata with duck & fig sausage and red potatoes.  As was evident once it arrived, it had a delicious mustard sauce over it.  Well, delicious for me, anyway.  Vy actually didn’t hate the mustard taste which is a tribute to the culinary skills at this restaurant.  It was paired with a red wine.
  • Then, an intermezzo of champagne sorbet.  I’m not a sorbet fan.  This was pretty good for something I don’t much like, certainly better than any of the several fruit sorbets I’ve tried from all sorts of places.
  • Do you know what barramundi is?  Me neither!  But the third course was some of this new-to-me fish, lacquered with mirin and served on a bed of couscous.  This was the winner of the dinner for us both.  I liked the strong tang of curry and mirin and the solidity of the fish.  It had a satisfying texture and engaged the tongue.  Back to a white wine taste paired with this one.
  • Then, because I love to exercise options, I got the cheese plate.  On it were an Andante Pianoforte, a Torta la Serena Serra de Estrela, and a Rogue Creamery Rogue River Blue.  The blue was paired with apple slices and ginger biscuits, the Serra with honey and the Andante with a preserve.  Vy tasted each of them and pronounced the Pianoforte the one she disliked least while I ravaged all three of them and in the end would say what I did as I began, that the blue cheese is my go-to cheese.  Especially the Rogue Creamery, which we’ve had before at Nibbler’s.
  • The meal finished out with a poundcake bite with custard on it and it really put the closure on the meal that you would expect.

As ever, one of the best meals we can remember having since, well, the last time we went to Nibbler’s.  The restaurant was reassuringly crowded on this occasion and so we have hopes they’ll be in business for a good long while yet to come.

 
 
binderofdaemons

Mirrored from Obsolete Your Idols.

Feeling beleagured and under rested?  Here are some time honored ways to medicate this.

  • play games, lots of them
  • read stuff with low retention need
  • have you considered drinking?

Some games I’m wasting time with this very minute

  1. nethack
  2. freeciv
  3. kingdom of loathing
  4. buttonmen
  5. lexulous (formerly Scrabulous if you remember that one)
Tags: ,
 
 
binderofdaemons
31 January 2009 @ 05:26 pm

Mirrored from Obsolete Your Idols.

This blog got defaced.  I was probably careless and using a plugin with a hole.  It looked like a PHP exploit which overwrote a number of files to replace their contents with some anti-American messaging.  Luckily the database seems relatively intact.

Tags:
 
 
 
 

Advertisement

Customize