abstraction layers that hurt

Hibernate is this tool that you can use, that means that you don't have to write any SQL in order to use a database. It's like a compiler for SQL: you write your code in java, and it compiles the SQL for you automatically.

The problem with Hibernate is that you have to be an expert in data storage theory in order to use it well. So at that point you may as well write the SQL, because let me tell you Hibernate is not a very good compiler. You have to spoon feed it your data structures, and in order to get it to work cleanly you have to give up a lot of speed and efficiency in your database design.

It does have some good data portability and regularity benefits, but I'm betting we'll never take advantage of them for our game. Abstraction Layers that don't reduce complexity, don't increase performance, and don't grant extra flexibility that you will actually use, should be avoided.

a sortof for profit company

Publicly held companies have a fiduciary obligation to maximize shareholder profits. This can lead to all sorts of pathological activity.

Non-profit companies are prohibited from rendering an investment profit. This leads to some classes of inefficiency and drives away a lot of people who might otherwise like to participate.

I think we need a designation in between, a company that is bound to follow a well defined mission of some kind, but also wouldn't mind making some money at the same time. Not obliged to be evil, not beholden to shareholders, but not divorced from the market.

By the way, Google sees itself this way, if you believe their mission statement and their founders, and I do. Over the years I expect that Google will come to see itself as just another profit driven machine, but I think that as of now it still has some idealism left.

Craigslist is another place that seems to be operating this way, and I think their idealism may survive even longer.

It's the company everyone wants, but there's no place for it in the regulatory or investment schema. Maybe there should be?

clean design: software vs real life

We all love elegant simple solutions. We appreciate good clean design and we strive towards it. But I write code all day, and then I try to apply the same principles to mechanical systems in the real world, and I find that it's just a different design space. In the real world, you cannot stuff an infinite amount of functionality into a black box. You can't keep adding abstraction layers (or pipe fittings, adapters?) Inheritance is a meaningless concept. And you have to make compromises with euclidean geometry and existing structures. You cannot just put your house in a box and move it somewhere else. Or you can but it's not a best practice.

Just something to remember I guess.

basic gardening lore

Row covers, keep your plants warm and pest-free. This is the kind of basic shit that I never learned. ;-)


I'm thinking about setting up a greenhouse/aquaponics system, I guess that's the same principle. I can't decide where to put it around the yard, since I'd like to have the koi pond in front and the greenhouse in back. I mean I can just pipe the water back and forth and not worry about it.


Ok fine I just read about it at Wired, but One Block Off the Grid looks pretty interesting. They collect a bunch of people in a city who want to get solar installed, and then negotiate a sweet deal on solar installations with all that collective buying power.

Their rates for their current campaign in Los Angeles look pretty attractive: about $6 a watt before government rebates and tax credits, and about $3.15 a watt after. So a 3 kilowatt system comes out about $10,000, though you may need to be able to front 18,000, I'm not sure.

Solar increases home resale value by a lot, too, so in addition to making it back in your electric bill, you make it back when you sell the house. I don't think we really use a ton of electricity, so a 3kW system should be plenty for us.  Just interesting. Though I think before we do something like this, we'd want to make other efficiency improvements like replacing our windows and blowing insulation into our walls. Then we can talk solar.

flash hack high five

to this guy

for this hack (my version):

static private function construct(type:Class, args:Array):*
    //OK SO we can't dynamically pass an array in 
    //since this is a constructor and not a Function object...
    //SO instead we're just going to hardwire it for up to N arguments
    //I am so so sorry
    if(!args || args.length == 0)
        return new type();                
            case 1:
                return new type(args[0]);
            case 2:
                return new type(args[0],args[1]);
            case 3:
                return new type(args[0],args[1],args[2]);
            case 4:
                return new type(args[0],args[1],args[2],args[3]);
            case 5:
                return new type(args[0],args[1],args[2],args[3],args[4]);
                throw new Error("Too many Dao Constructor Arguments: if you need more, expand the switch statement I guess. Sigh.");
    return null;

Silent partners in suffering.

dear science, please clone this

Cold blooded, slow moving, tiny goats.

I think they would make excellent pets, especially for apartments, where they could laze out on the balcony all day. Their slow metabolism would mean that you wouldn't have to feed them much, but since they're mammals they might be more friendly and cuddly than most reptiles. You might have to spend a few generations domesticating them first, but it's gotta be worth a try, right?

a cornucopia of entertainment

Really? Assassin's Creed 2 and Left 4 Dead 2 come out on the same day and they both get amazing reviews? I still haven't had time to plow through Torchlight yet, and I'm neglecting my WoW characters and my Rock Bands. It's so hard being a game consumer sometimes.

The sad truth is that my eyes are bigger than my stomach when it comes to games; I just don't have anywhere near the time to play these things. And that's not even counting the fourm mafia game, the play by wave zombie campaign, game night, or Descent. But I guess the good news is that I never have to be bored, ever again.

I'm literally embarrassed by this situation.

the 405

They finally finished their epic construction work on the 405, in between where I live and where I work. It had been going on since 2004.

I think it finished on Friday or over the weekend. This is the only news item I could find that mentions it, which surprises me because it seems like it would be kind of a big deal. Maybe Caltrans just hasn't put out a press release yet.

My commute is so, so much better now. Here's hoping it stays like this.

my zombie rpg let me show you it

Fresh Brains: Zombie Pickup RPG
Version 0.1
by Nate


The Concept: a fast paced pulp pickup zombie survival game where you can expect to play multiple PCs, because they'll probably get bitten a lot.

The world: Your standard Zombie apocalypse, a combination of Max brooks, Left 4 Dead, etc.

The System: is adapted from the Snakes on a Plane RPG, and Descent, with some differences 

Character Creation

You have five stats, ranked from 1 to 9.
GUTS: How tough and strong you are. Also indicates how slowly you'll turn if bitten by a zombie.
NERVE: How quickly you react; reflexes and coordination. You'll use this to dodge zombies.
WITS: How smart you are on your feet, and how likely your traps and fortifications are to work.
CHARM: How attractive and charismatic you are. Works better on people than it does on zombies.
GEAR: How many weapons, how much food and ammo, etc have you got with you? You can spend GEAR to gain other stats at 2 for 1.

Distribute 25 points among these stats; minimum of 1, maximum of 9.

In addition, your character gets a 1 line story and 2 tropes from tvtropes.orgThis page is a good place to start - find 2 tropes you like and link to them from your character sheet.


Each scenario involves the GM and 1 or more PCs. Link your character sheet at the start of the scenario. For each scenario, we keep track of the number of nearby zombies, (THREAT) and the time. As time passes, more zombies arrive. Zombies can be ONSTAGE or OFFSTAGE. ONSTAGE means that the zombies have line of sight to the PCs and are not impeded by fortifications. If there are zombies onstage, the game is HECTIC. Otherwise it is CALM.

The game is played with a map on a grid that can be updated by any player or the GM. The map can include FORTIFICATIONS that are found, maintained, or destroyed by the players.

During Hectic time, play proceeds in rounds. Once each PC has taken an action the next round starts. After each PC's action, all zombies move 1 square. After a player takes an action, all zombies adjacent to that PC attack that PC. A player may always pass instead of making a roll, but this still counts as taking an action as far as the zombies care.

Scenario End Conditions: If the THREAT drops to 0, the players are considered SAFE and the scenario ends. The scenario also ends if the players reach a safe location, are rescued, or if they all die.

Task Resolution

Rolling Dice
When you roll a stat, roll as many d6 as points in that stat. Every 5 or 6 you roll is a SUCCESS. (When attacking zombies, each success means one dead zombie.) Each 1 you roll is a point of NOISE. For every point of NOISE the GM may either take 1 THREAT, or may move 2 zombies ONSTAGE. If your roll more NOISE than SUCCESS, that's called a BLUNDER. When you roll a BLUNDER, the GM rolls on the Zombie Attack Table.

Being Quiet
If you don't blunder, you may spend 2 SUCCESSES to cancel 1 NOISE, as long as this doesn't turn the roll into a blunder.

Arbitrary tasks
When things are CALM, you can do whatever you want. Some actions may require action rolls; if so they can grant NOISE normally. BLUNDERS when it's CALM double the NOISE, but do not merit a roll on the zombie attack table.

When things are HECTIC, everything you want to do, other than talk, requires a roll of 1 of the 5 stats.

Killing Zombies
You can make an attack against any nearby zombies with any of your stats, as long as you can describe it in a way that justifies the use of that stat. Every Success you roll is one dead zombie, but you can't kill more zombies than you can reach with the attack.

When you describe what you want to do, be awesome. Use the environment, use other PCs tropes, all that jazz. You get extra dice for doing so. A good description of using your basic stats gets you 1 extra die. Using the environment or another PC's trope gets you 2 dice. But each aspect can only be used once in this way per scenario per player. Assigning bonuses: PCs may assign themselves bonuses. The GM or other players will let you know if you're not being reasonable.

Using Your Tropes:
You may invoke each of your tropes once per scenario, for a bonus 3 dice. Your description must justify the use. Stunts stack with Tropes.

If I'm using a bloody axe to chop zombie head off, I attack with GUTS. If my GUTS is 5, I roll [5d6 = 56 36 36 26 16] In this case I kill 1 zombie but I also make 1 NOISE.

If instead of just attacking, I duck under the table at the last second, causing the three nearby zombies to lunge onto the table when I pop back up on the other side and casually chop their heads off as they lie prone, then I can attack with Nerve, and I get a +2 bonus for a stunt. If my Nerve is 6, then that's [6d6+2d6 = 66 66 56 46 46 36 16 16] Since I got 3 successes I kill all three zombies.

Zombie actions:
After each PC action, in order:
1. Every Zombie adjacent to that PC makes an attack by rolling on the Zombie table
2. All zombies move 1 square towards the nearest PC.

The Zombie Attack Table
1: The zombie tries to bite you. Lose 1 point of Guts as you shove it away.

2: The zombie grabs at you. Lose 1 point of Nerve as you wrench yourself away.
3: The zombie surprises you and you freak out and scream. Lose 1 point of Wits for not being able to focus.
4: The zombie claws at your face. Lose 1 point of Charm for your mussed hair and bloody nose.
5: The zombie rips at your clothing. Lose 1 point of Gear for the gadget that fell off.
6: Reroll and double all point values lost; you stumbled onto a lot of motherfucking zombies. Reroll and double every time the die comes up 6.

Once you subtract the point or points from your relevant trait, you have killed the zombie. If a trait is at 0 and you are asked to subtract points from it, the zombie kills you.

Passage of Time:
During HECTIC time, Every round takes 1 minute. During CALM time, passage of time is adjudicated by the GM depending on the actions. Depending on the scenario, THREAT increases linearly with time. (e.g. 1 THREAT per 5 minutes.)

Spending THREAT and NOISE
At any time, the GM can spend 2 THREAT to move 1 zombie ONSTAGE at an UNEXPLORED or EXTERIOR point.

When NOISE is generated, the GM may spend 1 NOISE to move up to N zombies ONSTAGE, where N is the number of players (PCs + GM), spending just 1 THREAT each to do so. (if there are 3 PCs, the GM may spend 1 NOISE to spawn in up to 4 zombies for 1 THREAT each. OR the GM can convert the NOISE into THREAT (1 to 1) instead of bringing zombies ONSTAGE.

All DOORS and FORTIFICATIONS have a THREAT cost. The GM may spend 1 THREAT per action (or N per round, or N per minute, where N is the total number of players) to destroy that fortification. FORTIFICATIONS typically hide EXTERIOR areas, which means that the GM will be able to easily move zombies ONSTAGE at this point.

Maybe there are other ways for the GM to spend THREAT. Special Zombies, environmental hazards, WHO EVEN KNOWS. If the GM is spending threat, look out.

Making Noise
A PC can spend an action to lure nearby zombies. Use a stat roll, but instead of rolling, just count the total dice. The GM must move that many zombies onstage at a cost of 1 THREAT each. If the GM runs out of THREAT the PCs win.

Other things

Unexplored Areas
Might contain zombies! The GM may spawn in zombies anywhere the PCs have never seen (for interior areas), or anywhere they can't see right now, if there's an exterior area there.

Exterior Areas
Areas the PCs cannot access may contain zombies. The GM may spawn zombies there at the normal price.

The PCs can move through doors, but zombies must bash them down. An average door takes 3-5 THREAT to break down.

The PCs can find, repair, and destroy fortifications. Repairing a fortification requires roll, even when it's CALM. Every 2 successes repairing a fortification increases its THREAT cost by 1. Every success spent dismantling a fortification reduces its THREAT cost by 1. When it's worth 0 THREAT it's considered destroyed and the players can move through it.

Finding stuff
The PCs may increase their stats by finding GEAR lying around places. When they find a piece of GEAR players may either take the GEAR, or trade 2 points of GEAR for 1 point in another stat.

Equipment mostly exists to give you flavor and let you use it in stunts. You can play the game without specifying your equipment, but if you specify it you can stunt with it. Your GEAR stat loosely governs what equipment you can have.

Weapons mostly affect the flavor of the attack you can make, and it's range, and what is considered reasonable or justifiable. Your maximum weapon level depends on your GEAR stat:
0-1: simple/improvised melee (chair, shovel)
2-3: appropriate melee (axe, pitchfork, prop sword)
4-5: small handgun or superior melee
6: shotgun, samurai sword, chainsaw, rifle.
7-8: assault rifle, auto shotgun, sniper rifle
9: man whatever the heck you want.

If your GEAR level drops below the level of your current weapon, consider it either out of ammo, or wrenched from your grasp and lost, or jammed by zombie tendons, as appropriate.

Armor and clothing:
Your gear might include armor. This will help you stunt the use of GUTS instead of NERVE to move across a
HECTIC room, but has no special effect for reducing damage.

Environmental Hazards
There will be some times when the only way forward is going to be either noisy or time consuming, or both. The GM should let you know approximately how much NOISE you can expect to make for a given set piece. 

my guacamole recipe

My guacamole has been called many things, most of them positive, but I've resisted writing down any kind of recipe. Not because I fear imitators, but mostly because I didn't want to bother to measure all the stuff I put into it. That and also, it's going to take a long time to explain. But I've finally gotten around to it, so here you go.

(The recipe is down at the bottom because I want you to have to scroll past my pontification to get to it.)

Avocado Selection
Avocado selection is important and non-obvious. Ripe avocados are black and soft, but not mushy. Perfect guacamole avocados are not quite ripe. They are slightly firmer than avocados that you might select for eating out of the shell, or in a salad, for example. You can get away with this because the first thing you're going to do is mash them up. The reason to pick less-ripe avocados is that they have less of the oxidized brown parts. (Don't try to make guacamole with green or hard avocados: your avocados should still be soft when you slice into them.)

5 small avocados from our local mecixan market - serves 4

After you've opened your avocados, spoon them into your mashing bowl. I like to pick out the obvious brown parts and discard them, but you don't have to be too vigilant, it will generally all come out in the wash (i.e. mash). On occasion though, I will discard an entire avocado if it's too brown and mushy when I open it up.

On Spices
All spices are to taste, but the spice balance is really what makes or breaks the guac in my opinion. My greatest lesson, and the most important piece of advice I can bestow upon you, is that you need more salt than you think you do. And more garlic. A lot more garlic. The first step after opening the avocados is to salt them. You should salt the guacamole until just before it tastes like salt. Don't be afraid of overshooting; go slow and get it right. If you go too far, that's why you have tomatoes and garlic on hand. Garlic is fantastic for balancing salt: adding a lot of garlic will allow you to add more salt, and you should do so.

The other spices I use are black pepper and cayenne. The cayenne especially adds a little bit of a slow burn to your guacamole that will give it a subtly addictive quality. It should be noticeable on reflection, but you don't have to make it hot for it to have an effect. If your guests are spice-intolerant (ahem), you may omit. Do not bother with Paprika or Chili Powder, you will not taste it and it will turn your green brown.

This is what I use.

Lime Juice
Acid prevents avocados from browning too soon (it works on apples too.) Lime juice is delicious in guacamole, and I feel that it's really necessary for a truly sanctioned mix, but of course sometimes we have to make sacrifices.

For mine I only used half a lime.

Optional Ingredients
Include tomatoes if you have them on hand, and especially for large party bowls. They taste good, add some festive color, and they're a lot cheaper than avocados. Select ripe, red tomatoes and dice them fine enough that they blend in. Do not add them until after you get your spice mix just about right, as too much mixing will cause them to disintegrate.

If I have cilantro on hand for some other part of the meal I will often include it. Chop it very fine so it doesn't interfere with your texture. It's optional.

Some people are wrong.

Garlic or Garlic Salt?
Real garlic is too sharp and screws up your texture. Garlic powder dissolves beautifully and gives you an even texture and taste. Sometimes easier is also better.

Don't like 'em. Their taste overpowers the avocados, and their texture gets in the way too. They're great on tacos or whatever but with guacamole they're a bull in a china shop.

Sour Cream?
It really affects the texture and color. I've had some good guacamole that was made this way but I won't do it myself... It just doesn't seem necessary since the avocados give you plenty of creamy goodness already.

Cutting the Guac
If I'm making a large batch for a party, I will use about one (small roma) tomato per (large haas) avocado. It's just cheaper. Nobody ever complains about it. It means that people who are late might actually get some.

The reference batch was made used 5 rather small avocados for 4 people, but I wrote up the recipe for what I estimate to be an equivalent number of the large avocados that you usually find at supermarkets. If you try out the recipe let me know how it came out.

Nate's Guacamole

it will vanish

3 large avocados (or equivalent)
1 tomato
1 teaspoon salt
1 teaspoon black pepper
1 tablespoon garlic
2 dashes of cayenne (to taste)
half a lime or 2 squirts from or a bottle of lime juice
1 bag tortilla chips (salted, non-flavored)

Open up 3 ripe-but-firm avocados and spoon them into a bowl, discarding any dark brown portions. Add salt and mash. Test salt level and add more if it doesn't taste too salty yet. Add garlic, pepper, and cayenne, and mix. Taste. Continue to tweak, mix, and taste until it is delicious and a bit salty. Dice tomato and add. Add lime juice. Mix, taste, adjust, serve with tortilla chips.


on self awareness

Yesterday I spent a few minutes browsing through Dale Carnegie's How to Win Friends and Influence People. It's a fantastic book and I like to review it every once in a while as a way of taking my own social temperature. This morning I was sitting in a meeting when it occurred to me that I was feeling defensive, adversarial, and stressed out. I wrote down the words "reduce stress" on my pad and spent the rest of the meeting doodling around them.

Later on I started looking up meditation techniques. Wikipedia has a good general review, and I thought that maybe I would find one of the listed secular techniques helpful. Autogenic training and a couple other things looked interesting. That reminded me of Yoga, which I have enjoyed when I've tried it, but it's difficult and I don't think I can find time to attend a class. (And also I find working out in public stressful.) I was thinking of getting a beginner's Yoga DVD, and that reminded me that there might be a Wii yoga game. Wii Fit Plus seems to be the one at the moment, although there's another yoga game coming soon. I don't know if it will be good or not. And then that reminded me that there are probably yoga courses online that might be even more appropriate, and cheaper, or free (but probably worse).

Does anyone have advice on either meditation or yoga?

Sometimes I see my life as a series of overlapping and interconnecting obsessions, kind of like the way story arcs come and go in a grand epic piece of fiction.

my thoughts on torchlight

So I tried out Torchlight, mostly on the advice of Tycho and Metacritic. Here are my thoughts so far.

Diablo I was a great game--it broke a lot of ground. It was mentally light, but very addicting, and very replayable. In many ways Diablo II was a different game. It got a lot more complex, a lot longer, and a lot more involved. It has a much larger complexity profile. It also made some big improvements on the first game in terms of usability, balance, etc., but for the purposes of this review, consider that Diablo I and Diablo II are two different games.

Think of Torchlight as Diablo I, with every rough corner removed. When you launch the game you can pick up your progress within 10 seconds. Everything is streamlined. Anything that was annoying about Diablo I has been removed, and some modern tropes like WoW-style skill trees have been added.

Torchlight is a fantastic single player hack-and-slash dungeon crawl. It is 60% loot, 35% character progression, 5% story, and 0% bullshit. The graphics are simple but really well done. The gameplay feels really good. It doesn't break a lot of new ground, it just does what it does perfectly. Torchlight is the new reference Diablo I experience. And it's a great place to park your brain for a few minutes (hours) when you don't feel up to a more complex or social game.