Monthly Archives: August 2004

Poker Moneys

My PartyPoker account currently has $250 in it after a $80 buy in. This was after accumulating up to $300 then dropping down to $100, both very quickly. The $150 since then has increased very steadily, something like $30-$50 a day. That makes me feel much better about my playing.

My home game has corrupted me somewhat. We all know each other so well that we don’t need cards to play each other anymore. My brain falsely generalized my home game strategies to online, and it turned out to work very differently. That loss forced me to tighten up and fall back into the security of playing my cards.

I’m once again learning the differences between the various types of hands. I’m re-learning why you call with 89 suited against a big stack big raiser, and fold the same thing against a small stack big raiser. And I’m learning it quantitatively this time. I always knew why: implied odds. If I hit it big, I can get this guy’s whole stack. But now I’m seeing that I do in fact hit it big and pick up a whole stack here and there. I’m stealing less, because I can sit back and wait for an opportunity to bust someone, which is a lot more profitable and a lot less risky than stealing every other hand.

Unfortunately, my tournament play has suffered. In learning how to beat the ring games, I’ve forgotten how to get my stack up quickly and start controlling the tournament in order to take it to the end before the blinds kill me. There’s another thing I have to re-learn. My brain seems to have trouble switching styles like that. It can easily switch styles in the middle of the game for deception purposes, but to switch based on the game I’m playing is somehow harder.

Anyway, I think the answer is to play more. I’m the kind of person who doesn’t just “call along”: I aspire to beat the game and beat the players. It’s not about the money. In that respect, the more I play the better I’ll become, and that’s ultimately a good thing since I love the game. If I want to start playing higher stakes, and everyone does since the game gets too easy at the lower ones1, I’d better get to know my game pretty well. So expect more poker updates in the near future.

1If I go back to the site where I used to play2 and play the $0.01/$0.02 no limits nowadays, I get so bored. I am quite profitable on a relative scale, too. I make about $1 every ten minutes, which is equivalent to $25 every ten minutes at my current stakes, which would be pretty damn good. It’s just so amazingly easy; I can read everyone like a book. Which is a good sign because two years ago I was struggling to break even on those stakes.

2The name of this site has been removed because they blog-spammed me.

Transient Channels

Transient Queues have failed. I wrote a simple demo the other day of a little pixar-like lamp guy who moves his joints when you push the arrow keys. I had to make him move them smoothly, lest he explode due to the integration error. I could have used a transient queue to do exactly what I wanted, but I didn’t. Why not? Let’s look at the transformation of some code to using them:

    use Class::Closure;
    sub CLASS {
        my $x = 0;
            left => sub { $x = -1; }

When I want to smoothly move $x to -1, it turns into:

    use Class::Closure;
    sub CLASS {
        my $x = 0;
        my $queue = Glop::TransientQueue->new;
            left => sub { $queue->push(Timed Glop::Transient (1, sub { $x -= STEP }) }
        method step => sub { $queue->run; }

That’s not really that much more is it? Only three lines to type. But one must realize that my vision of Glop is not to reduce typing, it’s to reduce brain strain. If I were worried about the poor programmer’s fingers, I wouldn’t have them typing Glop all over the place (except to advertize for my cult). But three lines are a lot compared to, say, Glop->input->Keyboard->register, which is just “register some callbacks.” In order to use a TransientQueue you have to 1) create a TransientQueue object in your class, 2) Push on a transient, and 3) add a step function to call the queue every frame. That’s a lot of conceptual load for a simple task. And it’s a one-time load, but it was enough to encourage me not to use it, and I wrote the damn software.

So, I’m killing them. They are no longer part of Glop. What I’m adding in their place are transient channels. They’re the exact same thing, except that you don’t have to create them or call run on them. They’re integrated into the Glop kernel. Here is the change using channels instead of queues:

    use Class::Closure;
    sub CLASS {
        my $x = 0;
            left => sub { Timed Glop::Transient (1, sub { $x -= STEP }) }

You hardly have to know what’s going on. They just do their job, and one second from now, they’re done and they’re gone. If you need the queue’s queueing behavior, then you do still have to create an object. But you don’t have to call run on it yourself; that’s done automatically. So even when you need the more sophistocated behavior, one conceptual strain point is gone. But most of the time, it’s all gone, and significantly easier than doing it yourself.

Manifestation Cards

I just put up my manifestation cards for this year. I did this for the first time last year on my birthday, and they’ve been wonderful. I’ll explain what manifestation cards are, and then I’ll describe a few of mine.

This is an original idea (in that I didn’t get it from anybody else, not that nobody has done it before) in which I identify aspects of myself that I would like to grow, write them down on 3×5 notecards and post them up next to my bed, so they stare me in the face if I’m lying idly in bed. I see them before I go to sleep every night. Even though I ignore them, they go in my brain subliminally.

Here are some of the principles I use when I’m creating them:

  • They’re not supposed to be perfect. I don’t throw one away because it’s not written perfectly or because I taped it up a little slanted. Their content is the important thing, and keeping them around in light of their imperfections is symbolic of that.
  • They can be about anything: things I want to do, things I want to be, things I want to have. But I can’t have too many of them. Identify what’s important and put those up. Again, not necessarily most important, but just things to remind me where I’m going every night.

Last year was about improving my behavior, mostly. I had things like “Plan & Go: Think things through only as much as necessary”, because I would tend to get so caught up in planning how something was going to happen that it wouldn’t ever happen. “Finish”, “Spend Time with Friends”, “Spend Time with Nature”. And those have worked really well (except the last one, I really haven’t done that too much). I consider myself a much stronger person since I put these up last year.

Two of particular note last year: “Become well known in the Perl community”, perhaps the most specific one, worked the best of any of them. Arguably that was where I was headed anyway, but putting it up as a manifestation just helped accentuate that that was where I wanted to be.

Also “Financial Freedom: Have enough money not to worry about it”. This represents the principle I have about money, which will be reiterated in this year’s manifestations. It’s important in order to survive, but gathering as much money as possible is not the important thing in life. I like to have enough so that it doesn’t matter at all. If you get too little or too much, it starts to consume your life (as long as you haven’t put up a manifestation against it :-)

So, this year’s:

  • Compose More; Meet Other Composers.
  • Keep Learning.
  • Uphold my Responsibilities.
  • Kick School’s Ass.
  • Honor the Perl Community.
  • Keep my Friends.
  • Money is Plentiful but Remains Unimportant.

The first two are about continuing to do what I love to do. In light of all the new things I’m manifesting in myself, I must remember to keep my passions.

The third through fifth are about being strong in character. I’ve worked hard to get where I am, and now it’s time to stay where I am in a noble way. Now would be a terrible time to squander that which I manifested last year out of laziness or selfishness. They’re kind of a reiteration of last year’s manifestations, making sure I don’t forget what I’ve learned.

The sixth is similar to that. It’s another reinforcement, as I’ve never been very good at losing friends, but it’s making sure that I don’t start to consider myself “high and mighty” or some such. My ego does tend to run away at times, and I let it, because I think it’s healthy, but I have to make sure that it doesn’t go so far as to hurt myself or others.

Finally, the last one I’ve already talked about. It basically says “the same thing as last year, but more money.” One has to continue one’s third love, Poker, somehow. :-)

More Firefox Power Stuff

Okay, since I’ve officially switched from Opera to Firefox as my preferred browser, I’ve started looking into how to make Firefox cooler. And I’ve mostly succeeded.

First, I installed the All-In-One Gestures extension. That does all the stuff that the buttons at the top of the screen do, so I got rid of those.

I also liked how Mozilla would do a google search on anything I typed in the address bar, but was always annoyed that I had to go push the “Search” button instead of pushing enter. So, after some digging around in my /usr/lib/firefox, I found the configuration option to do it. So to make it do a google search on anything that doesn’t look like an address, go into your config directory (~/.mozilla/firefox/default.mdz) and edit user.js (which may not exist). Put this line in:

    user_pref("keyword.URL", "");

Now I don’t need the google search bar, so that’s gone too. And now I just have an address bar at the top of my screen. Pretty slick. I haven’t found a way to compress those darn menus yet, though. It might be somewhere in about:config (totally cool if you want to mess with things), but I don’t see anything.

Linux Ho!

A week ago I got my computer in the mail. This is the first computer I’ve built, and it went rather well. There were some troubles here and there, but it worked the first time I turned it on, which came to my surprise. I installed windows after unsuccessfully trying to install Gentoo (it could see neither my nForce ethernet nor my SATA hard drive.. the latter making it rather hard to install an operating system). Anyway, Windows is working well (yes, you heard me correctly). And today, I installed Fedora Core 2 for x86_64.

Having not dealt with Linux in years, I am both impressed an irritated. The GUI portion of Linux has come a long way since I last saw it. However, it’s still a pain to install. While I was installing, my temporary /dev was gradually corrupting itself. There was an error in the installer right at the end, probably the worst place for it to be, right after everything was copied but before anything was configured. I know better than to try to configure it myself. I eventually fixed it by—ready for this?—right before it finished I went out into a terminal and typed:

    # cd /dev
    # rm null
    # touch /null
    # ln -s /null

Hurts, doesn’t it? And then the installer was capable of opening /dev/null for writing, and all was well. Much more interestingly, when it was all done, /null was an empty file. So it just opened it and closed it again.

Anyway, ATI doesn’t have drivers for the Radeon 9800 for the 64 bit kernel, so I’m downloading Fedora 32 bit so I can have my 3D graphics back. Nuts. I go to all the trouble of getting a 64 bit processor, and I can’t even run my kernel 64 bit.

Ideas and Responsibilities

It’s been a while. Here’s an update.


I just got back from a week long trip to Portland, OR, at the O’Reilly Open Source Convention (OSCON). It was quite a lot of fun; I met some interesting people and some very interesting people. I did my presentation, then went on to sign up and flake out of a poker game, and had dinner with some famous people.

First off, my presentation went over really well. Everybody laughed at both of my jokes, and I got exactly enough questions to fill up the extra ten minutes at the end. I had someone come up afterward and say it was “the most entertaining session at this conference that wasn’t done by Damian Conway.” Knowing Damian, this is indeed quite a compliment.

After that, I had signed up for a poker game that Thursday. I was waiting for some fresh meat, and I also wanted to find out if I’m actually good, or if I’ve just mastered my local group and will die in foreign circumstances. But I didn’t end up playing, because that same night I got an offer to go out to dinner with the Perl 6 crew: Larry Wall, Damian Conway, etc. Sorry, I like Poker, but not enough to turn down dinner with them. It was fun explaining why I couldn’t play to the poker folks, too :-).

During the weekend, I attended the Perl 6 design meetings which were by far the best part of the trip. All the people on the design team are wicked smart, and it was a great honor conversing with them and determining the fate of the next Perl. Patrick, the Perl 6 pumpking, and I are to design the regular expression engine for Perl 6. This is an interesting turn of fates, as I’ve been pummelling perl6-internals with ignored design revisions ever since the introduction of rx.ops. Now I get to call the shots :-).

Finally, on Monday I went with Larry and Gloria Wall to the Japanese garden and the Rose garden. That was fun, and Larry had plenty of interesting Japanese cultural and language tidbits (he’s studying Japanese).


IPC had the first meeting in likely two months tonight. I’ve basically lost interest in the project, but I’m sticking around on account of being the chief architect of the project. It would be rude (and socially stupid) to abandon the project after setting up such a complex game engine, leaving them with only half an idea what they’re doing. I’m adopting the strategy of letting them do the programming, and being there for design advice and explanations of the patterns I used. I want this project to go somewhere, because my team does, but I’m not terribly interested in where it’s going anymore.

Glop and the Fighting Game

As those of you who followed the development of Glop may know, it was all inspired by an idea for a fighting game. I haven’t written about this connection before, but this is how it happened. I wanted to write a fighting game that required mastery: that required thinking, planning, and observing to play well. I sat down to write it, noticed what a damn pain it was to set up a game engine, and then started Glop to make it easier (the fact that it’s been much harder to write Glop than that simple engine was expected; I balanced the trade-offs and figured I’d praise myself the next time I got a cool idea).

Tonight I had a revelation about that game (which I haven’t started yet). We were playing Soul Calibur II, perhaps the best fighting game ever created. It had all these elements, but it wasn’t what I was looking for. You could whack somebody in the head with your sword, and they’d lose 5% of their life. I want to whack someone in the head with a sword and have them die—immediately. Like Bushido Blade. But a game like Bushido Blade or Soul Calibur would end up with twenty rounds lasting five minutes with that kind of scale—also not what I want.

So I thought: what if the game was in slow motion? That’s precisely what I want. It allows enough time to see what the opponent is doing and come up with a brilliant counter attack. The game won’t be a button-masher like so many fighting games are. The game will be as if in a turn based game (but you’d have to think much more quickly). Two experienced players may battle it out for thirty hits, and the winner will be the one who finds a way to block the opponent’s attack, incapacitate his weapon and his defences, and get the blow in. The knockout move. One mistake against a master and you’re dead instantly. That’s what I want. I don’t know whether it’s a selling idea, because of the learning curve, but it’s the game I want. And that’s the game that I’m going to make.