24 hours of lemons: sears pointless 2010

March 13th, 2010

Last weekend was the debut race for Doug’s 1986 300ZX Turbo: Sears Pointless 2010. Unbelievably, the car came together in time and ran all 16 hours over two days, green flag to checker. Doug has some pics on his page, and I’ve uploaded a few of the professional shots of our car to gallery. Here’s one of me dealing with some traffic:

We had a video camera in the car, which was unfortunately mounted to the roll cage, so it was pretty shaky on acceleration. If you can stand it, here’s a video of Tommy at the race start:

race start

The whole weekend was a blast. I drove a total about about 30 minutes on Saturday and an hour on Sunday—and that was plenty. It was simultaneously amazingly fun and terrifying and stressful. Only hit two cars on my driving stints, but no black flags or spin-outs! I’ll get some more pictures up soon.

10 years of overt.org

February 16th, 2010

Ten years ago today, I sat in my dorm room at UT Austin with a dictionary in my lap, hunting for a simple English word, five letters or less, that hadn’t already been claimed as a domain name. I must have tried a hundred things before I came across “overt.” I was a college freshman and totally digging all this new freedom over my life and interests, meeting new friends every day, trying on new ideas all the time—so overt seemed like a perfect fit. Although all three of overt.com, overt.net, overt.org were available (these being the only three top-level domains available for public registration at the time, not counting ones for other countries), my anti-corporate and alliterative (see?) tendencies let me to choose overt.org. In retrospect, I should have just registered all three, but the $75/year it cost to register a domain in 2000 seemed like a lot of money to me and I definitely wasn’t going to spend it three times over.

I worked part-time doing web and database development at the career center for the college of engineering and had access to several internet connected computers. The same night that I registered overt.org, I set up an illicit web server (embarrassingly, Windows 2000/IIS) on my publicly accessible workstation in the career center and pointed my new domain to it. I stayed up late creating a web page with dated, journal-like entries that ran in reverse order on the front page just like my favorite website at the time, slashdot. Later I would learn that web sites like this had been called “web logs” since at least 1997—I was way behind the curve! And so, overt.org was born:

A week or two later, I set up an SMTP/POP3 email server on the same machine, assumed the email address I’ve used since then, and started handing out accounts to my friends.

The hardware behind overt.org took many forms over the next four years at UT, moving from my workstation to a dedicated machine in ENS, the electrical engineering building, but it always remained hidden in a corner or under a table, leeching off of UT’s excellent and pretty much unmonitored internet connection. As we approached graduation, Ali, George, Drew and I pooled our money together to pay for a dedicated server based out of San Francisco: overt.org was legit and has been ever since.

Over the last ten years, overt has grown quite a bit. It now hosts over three dozen web sites, blogs, and photo galleries. It’s a labor of love for Ali and I to maintain the server and it’s been a lot of fun to watch become a home for us, our friends, and our families on the internet.

Here’s to the next ten years of overt.org!

off-site backup for $0.10/GB using dirvish and Amazon EC2 and EBS

February 15th, 2010

I’ve been using dirvish, an rsync-based snapshotting backup system, for years to manage local and off-site backups. It’s simple to set up, automatic, creates daily snapshots of entire systems (or just specific directories), and it’s a breeze to browse and restore–all the files are right there in a tree, organized by date. Think of it like Apple’s time machine, but better because you can actually make it do what you want.

I recently needed to set up off-site backup for a few hundred gigabytes of data. My first thought was S3, but the HTTP interface meant that I couldn’t use a simple tool like rsync (or dirvish) to automate the snapshotting, and that browsing and restoring entire filesystems from backup would be cumbersome. Then I remembered that Amazon recently announced support for booting EC2 instances from persistent EBS volumes. This lets you “save” an instance by shutting it down and starting it up again, and you only pay for compute hours when the computer is running. Storage on EBS volumes is cheaper than on S3 ($0.10/GB instead of $0.15). Also, EBS volumes are just normal block devices that can be mounted by EC2 instances as though they were hard drives.

So here’s the idea: create an EC2 instance that boots from a big, dedicated EBS volume. Every night (or week, or whatever), start up that instance, run dirvish for the off-site backup, and then shut it down again. I only pay for the instance during the short periods it runs to perform the backup, and my data is saved offsite on the durable EBS volume. I implemented this system and it has been working great for several weeks. I just launch a python script (as a cron job) that starts the instance, runs dirvish, and then shuts it down when it’s complete. For those interested, here’s the (quick, dirty) python source (which uses the excellent boto library for manipulating the EC2 instance):

#!/usr/bin/env python -t
# encoding: utf-8
"""
run_offsite_backups.py
 
Wake up the EC2 backup server, run dirvish backup, then shut it down
 
Created by Bryan Klingner (code.b@overt.org) on 2010-02-02.
Feel free to use this code yourself. Maybe email me if you do :)
"""
 
import sys
import os
import boto
import time
import subprocess
 
BACKUP_INSTANCE_ID = 'YOUR_INSTANCE_ID'
 
def main():
 
    conn = boto.connect_ec2()
 
    # get the backup instance object
    instance = conn.get_all_instances(instance_ids=(BACKUP_INSTANCE_ID,))[0].instances[0]
 
    # if the instance is stopped, start it up
    if instance.state != 'running':
        conn.start_instances(instance_ids=(BACKUP_INSTANCE_ID,))
        waited = 0
        while instance.state != 'running':
            instance.update()
            sys.stdout.write("\rInstance starting up (%d sec)..." % (waited))
            sys.stdout.flush()
            time.sleep(1)
            waited += 1
 
    print "\n"
    print "Backup instance running:"
    print "    ID:       ", instance.id
    print "    State:    ", instance.state
    print "    DNS name: ", instance.dns_name
 
    # chill for a few seconds so the SSH server is listening
    time.sleep(10)
 
    print ""
    print "Initiating backup..."
    retcode = ssh_cmd('dirvish-expire; dirvish-runall', instance.dns_name, user='username')
    print ""
 
    # backup is done; shut down the instance
    conn.stop_instances(instance_ids=(BACKUP_INSTANCE_ID,))
    waited = 0
    while instance.state != 'stopped':
        instance.update()
        sys.stdout.write("\rInstance shutting down (%d sec)..." % (waited))
        sys.stdout.flush()
        time.sleep(1)
        waited += 1
    print ""
 
def ssh_cmd(cmd, host, user='root'):
    """ Run a shell command on a remote server via ssh """
 
    ssh_cmd = 'ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no ' + user + '@' + host + " '%s'" % (cmd)
    print "Running SSH command: %s" % ssh_cmd
    returncode = subprocess.call(ssh_cmd, shell=True)
 
    #logging.debug( output, returncode )
    return returncode
 
if __name__ == '__main__':
    main()

racing in the rain

January 17th, 2010

You may have heard me mention that Doug is putting together a car for the 24 hours of LeMons race at Infineon Raceway in March. Well, George and I are helping a bit (me a very little bit) working on the car and are also supposedly going to help drive the thing. A major concern with this plan, of course, is my total lack of experience and competence racing a full-sized car on a racetrack, especially in the presence of other people trying to do the same thing. I did one autocross long ago, but let’s just say that driving alone around cones in my 104HP Honda Civic hatchback probably doesn’t do a lot improve my status.

Well, all that changed today, ho boy! George and I went racing at Laguna Seca (he’s in the gray car on my left).

We signed up for a 4-hour “Intro to Racing” class at Skip Barber, which uses Laguna Seca near Monterey as one of their school locations. It was outrageously fun and terrifying, not least because it was pouring rain the entire time we were on the track. Each of us was outfitted with a Mazda Miata MX-5 Cup Car and followed an instructor (insultingly driving a pokey Mazda 3 much faster than us). We started slow, and did increasingly faster and faster laps around the full track.

Just being on the track sort of fulfilled a lifelong fantasy of mine, because I’ve probably done at least 500 laps around Laguna Seca while playing Gran Turismo 3. In fact I actually said (out loud, while driving, about 5 times), “Oh shit I’m lapping at Laguna fucking Seca.” George and I agreed that it felt smaller in person than it did when playing a video game, but we both think we benefited from our minute acquaintance with every turn. Here we are just before the start (George ahead of me in 09):

The rain made everything hard, but also more worthwhile from a learning perspective. It was no problem at all to put the car into a skid with just a touch too much throttle too fast coming out of a turn, and I ended up in the gravel more than once. After I realized I wasn’t dead, I pulled it back on the track with a huge smile on my face. What a blast.

I should have had video of the whole thing, but like a dumbass I put the Doug’s loaner video camera in take-a-still-picture-every-two-seconds mode instead of take-a-video mode. Luckily, George paid for the professional in-car video and spent half the time right behind me. Hopefully I’ll get a good clip of the time I spun out spectacularly right in front of him after leaving the corkscrew (he dodged me with aplomb).

Here’s a final, accidental shot of me just after removing helmet. I look exhausted, yes… but do I also detect a slight air of smug satisfaction?

$21 beer.

January 9th, 2010

Leslie mentioned when she saw it on the shelf that it had been one of Saveur’s 100 reader-submitted taste-experiences (or whatever). I was intrigued… I love me some bottle-conditioned beer, and here it was, with a biblical reference and farm implement on the label. How could we not buy it? Oh, here’s how: it costs 21 fucking dollars, legal tender US. For a bottle of beer. Beer, also available in sub $0.50 can form, with more or less the same pharmacological end effect. OK, whatever, let’s do it. The guy at the checkout mentioned that, as far as he knows, it’s the most expensive bottle of beer available (at the Whole Foods Market, in Berkeley California. Yeah… nowhere down to go, really, from there…).

But, heck, here’s the deal: it’s like an unholy union of beer, champagne, and really laid-back merlot (maybe that comes from it being aged in old wine barrels?). The first sip was like, “Oh, okay, it’s a wild ale. I like that. WAIT. Wait. No, it’s… light. It’s like a sparkling wine. But there’s the malt. What the hell is this, in my mouth, costing more than twice what I’m normally willing to spend on a bottle of wine? It’s damned good, is what it is, and even more so with a nibble of sharp white cheddar or a garlic-stuffed olive.

Andrew Jackson wasn’t much of a president anyway, so I’ll throw Washington in after him for .75 liters of this stuff any day.

thanksgiving road trip

December 1st, 2009

We returned on Sunday from a whirlwind road trip to Texas and back. We had been hankering for a road trip for a while, but we didn’t make it happen this summer, so we decided it might be fun to drive to Dallas and meet at the Hall Ranch for dinner with Leslie’s parents and mine.

The trip down contained lots of interesting moments, such as Sous’s first exposure to snow:

Death Valley:

Vegas:

as well as several more unbelievably gorgeous national parks and general southwest scenery. We made it down to Dallas on Tuesday to commence ranching, cooking, and eating of delicious foodstuffs. I think Sous was really born for the ranch. She chased the golf cart, swam in the pond, played more fetch than I’ve ever seen, and generally wore herself out. Although she only reached a tenuous peace accord with the cows.

The drive back was accomplished in two days. The first day, we drove from Dallas to Blythe, California, some 1200 miles. We thought the second day, a mere 600 miles, would be a piece of cake in comparison, but it turned out that half of Cali was driving from LA to the bay area on sunday (the other half was driving back). But we persevered, and managed to get in by about 6pm to do laundry and collapse in exhaustion.

smokin’

October 5th, 2009

I’m a fan of barbecue. I think since I left Texas and got more into food, my love has only intensified—both because I appreciate slow-cooked meat more and it’s so dern hard to get on the west coast.

Leslie bought me the Cook’s Illustrated guide to grilling and barbecue last year and I have done a lot of grilling, but no smoking at all. So I decided to try and make one of my favorite Texas barbecue staples: smoked pork spareribs:

Finished spareribs

I started with the dry rub, a concoction of salt, sugar, and spices that covers the outside of the ribs and is responsible for a lot of the flavor. Here’s a pic of all the ingredients from Cook’s dry rub:

dry rub

I coated two full racks of pork spare ribs with the rub:

rubbed raw ribs

…and let them sit for a while, soaking up the goodness.

Now, technically I don’t have the right equipment for barbecue. In the ideal case I’d have a dedicated smoker, which not only separates the meat as much as possible from direct heat from the coals, but also rotates or moves it to ensure even cooking. A nice smoker is the heart of any good BBQ joint, but it’s just not accessible to the average home cook. There are ways around this of course, with dedicated home smokers or even retrofitted oil drums and old refrigerators, but I decided to go with an even simpler method (the one suggested by the Cook’s guide), which is just to use my standard kettle grill for the smoking, putting the meat as far away from a low bed of coals as possible.

The “traditional” smoke source is, of course, hickory, but that sounded a bit too southern for me. My Texas roots drew me to mesquite instead. Luckily, chips of both kinds are easy to find even at hippie west-coast grocery stores. I soaked them for an hour before I started the coals, so they would combust slowly and give off plenty of flavorific smoke.

mesquite chips

After the chips were good and damp, I put them on a low fire on my kettle grill, dialed in the temperature as best I could to about 275F, and laid the ribs on. I added coals as necessary and turned the ribs about every 30 minutes for about three and a half hours.

ribs on the grill

I should say that 3.5 hours is way, way less time than I could have left them on for. Traditionally, ribs on a full-size smoker might cook at 225F for 8 hours or more… it’s hard to go too long, assuming that you recover the rendered fat somehow to keep the ribs from getting too dry. But, since I was limited to kinda-sorta indirect heat, I did a much shorter time at a higher temperature. The Cook’s recipe tries to mitigate some of the toughness issues this raises by specifying an hour-long rest right after the ribs leave the grill, sealed tightly in foil and paper bags. After the rest, we pulled out the ribs and added some rib sauce imported from Peggy Sue.

finished ribs 2

How’d they turn out? Well, thanks to the excellent rub, mesquite smoke, and Peggy Sue sauce, the flavor was damned good. Nice and smoky, but still with some real porkiness still coming through… “authentic.” The texture, though, wasn’t quite there. The meat was thoroughly cooked and deep red from smoking, but I think it was just too close to the coals, or maybe the coals were too hot, and so it was a bit chewy and not fall-apart tender like it should be. If I were doing it again, I’d try to plan to double the smoking time, build an even lower fire, and use a drip try to catch the rendered fat so it would stay in contact with the meat.

Coming up next: my more successful adventure with pulled pork butt!

nyc: mostly just ate

August 8th, 2009

Our little mini-trip to NYC was a blast. We got a hotel in midtown for $100/night on priceline and spent our two days wandering around, seeing sites, visiting clare, and (most of all) eating. A few highlights:

Momofuku Noodle Bar. Shitake buns, hanger steak with polenta, and the best ramen I’ve ever had.

shitake buns

hanger steak

ramen

And Peter Luger Steakhouse in Brooklyn. Slice of bacon = $3, and wow. Was probably 1/2 inch thick before they threw it on the grill. Hamburger = $9, best I’ve ever eaten. Steak for one = $40, definitely in my top 5 ever. (They only serve porterhouse, which is great, but I’m more of a ribeye guy if I’ve got the choice).

bacon

porterhouse

in bethesda, with thunderstorms

July 25th, 2009

Les and I left this morning for a mini work trip/vacationlet to DC and NYC. I can’t actually remember the last time I was in DC, but it might have been on that first road trip I took with Leslie in 2002. Anyway, I’m ecstatic to get a few days out of the office. We were greeted on landing by some nice rain, thunder, and lightning that I miss so much in the bay area. Tomorrow we’re striking out into the heart of DC for some quick museuming, then I’ll be taking myself on a (potentially damp) walking tour of all the major monuments and memorials while Leslie does the work that prompted this trip. Then on Monday we leave for NYC… can’t wait!

2nd anniversary eating

June 13th, 2009

To celebrate our second wedding anniversary, Leslie and I decided to spend the day in San Francisco eating. We started at Samovar Tea Lounge, where we shared a pot of green tea and another of Pu-erh, which is fermented Chinese green tea–Leslie was a fan. The caffeine seems to have affected my eyebrows.

Bryan with tea at Samovar

From there we did lunch at the Monk’s Kettle, which is kind of like Toronado in that it has an amazing bottled and draft beer selection, but minus the sticky counters and loud punk music and plus a very tasty food menu. We kicked things off with 0.5L of Weihenstephaner Hefe, which reminded us of our newlywed summer in Berlin where we drank it in the Weihenstephaner restaurant in Hackescher Markt.

leslie with beer

From there, we did some shopping, saw Up at the Castro theatre, then quickly got back to eating at the Anchor Oyster Bar in the Castro. The oysters were just a warm up for the main event, though: Kiss Seafood.

I linked to the Yelp page because Kiss Seafood doesn’t have a website. They also don’t have a lot of other things like a good location, nice decor, a large menu, any employees besides the husband (chef) and wife (waitress) who own the place, nor room to seat more than 12 people (including at the bar). What they do have is the best sashimi I’ve ever eaten. We sat down and ordered the chef’s omakase menu, which is like a prix fixe menu at a French place where the chef decides what you eat. This menu came recommended, and it was also the most convenient option because we couldn’t read the specials anyway:

kiss specials

I’m now going to bore you with a description of each course because this, my friends, was a dinner worthy of rememberance and it is my website after all. We didn’t get enough pictures of the food, but just imagine everything coming out looking half like a sparse, modernist painting and half like something you really want to eat, now. First was a sweet, light salad of soybeans, bean sprouts, and seaweed with a delicate vinegar and sesame dressing. Then, we got a trio of flavors that I’m not used to at a japanese place: smoked (maybe braised?) octopus with what I swear was a barbecue sauce—and it tasted like brisket, not rubbery at all; turnip slices with the most amazing hash of marinated scallop on top; some unidentifiable, firm, delicious root vegetable.

The third course we hit the fish. It was a plate of two slices each of six kinds of sashimi. Here’s the plate after one of each has been eaten:

sashimi of the gods

Let’s be clear: this was the best sashimi I’ve ever had. The pieces were bite-sized, bursting with flavor, each one an adventure of texture in my mouth. I wish had gotten down all the names; here are some snippets from my notes. (Yes, I started taking notes. It’s not weird at all.)

“Something like red striped bass that tastes, according to Leslie, ‘like the deck of a ship—but in a good way.’” “Giant clam. Crunchy like the plumpest oyster, but smoky sweet and not salty at all. Wow.” “Thai snapper with the skin still on. Delicate. Perfect.” “Mackerel fin. Totally unique texture, not marinated.” “A chunk of white fish that looks like that flavorless, crunchy stuff you get everywhere but which tastes like cod that was force fed melted butter for its entire life.” “Please, don’t let the sashimi be over.” You get the idea.

The fourth course was a clam broth with steamed clams and turnip slices and a ground fish patty. I wasn’t blown away until I had all the ingredients together, then quipped “Wow! Turnip + patty - what a combo. I’m a bad person for judging it early.” Fifth was a miso soup with egg custard, steamed veggies, lotus root, trumpet mushrooms, and chunks of poached whitefish. It was like the platonic ideal of miso–every other bowl I’ve had is a dancing, hollow shadow. I thought for sure that was the end, but no: round six brought an entire plate of nigiri, bite sized and and just as astronomically good as the sashimi (so I guess Kiss is taking “best nigiri” title as well). We waddled out of the restaurant and headed home for sleep.

Not a bad way to celebrate two years.

life is beautiful

April 29th, 2009

Leslie has posted some pictures from this spring that give some indication of how things have been on a day to day basis in spring of this year. For example, on any given Saturday afternoon you’re likely to find us here:

seats in the sun

the great wave MAME box

February 22nd, 2009

Now that I’ve escaped from Berkeley, I have free time again. Evenings, weekends–they exist. Almost organically, my desire to do things has been recovering. So I hatched a new project: a MAME box. MAME stands for ‘multiple arcade machine emulator,’ and it’s a project to resurrect classic (and modern) arcade games by meticulously emulating the original hardware that they ran on. It can run everything from Galaga to Street Fighter. At first, I planned to do the whole shebang: a full-size arcade cabinet with a classic arcade monitor. I was inspired by Doug’s MAME cabinet that he built in college.

I couldn’t get over one serious drawback of the full cabinet: it is immobile. Done properly, it’s about 6 and a half feet tall and weighs a couple of hundred pounds. So wherever I built it would be where it stayed. Instead, I decided to build just the control panel of the cabinet, with a computer running MAME inside the control panel enclosure. The finished product would fit easily in a car, and connect via HDMI to existing A/V setups. I batted the idea around until Doug and George surprised me with a set of computer-cut wood pieces to make the box out of. From there, it all came together pretty rapidly. The finished product:

finished mame box

I decided to call it “The Great Wave” because I used Hokusai’s famous woodcut The Great Wave off Kanagawa as the artwork for the top surface. Here’s a description of how we (Doug, George and I) built it over about six weekends at the beginning of the year. Read the rest of this entry »

this t-shirt

February 3rd, 2009

…is the first joke t-shirt I have seen in years that I can imagine wearing:

pi joke t-shirt

the end of the crate

January 6th, 2009

From the moment we got her, Sous was confined to her crate whenever we weren’t at home to watch her. All the new-age dog lit claims it’s not a prison but a safe space, a housebreaking aid, and a way to keep your puppy (and your stuff) safe from harm while they’re still young and learning what is and isn’t a chew toy. She slept every night in her crate.

tiny sous in crate sous in crate

When we moved to the new place in Oakland, we started leaving her free to roam the house when we were gone. An hour, then two hours, then three hours. Then, we set her free at night to sleep where she chose (anywhere, of course, except our bed). When I started work, we arranged to have her walked in the middle of the day. After a while, we started leaving her free in the mornings before the walk, but she’d still return to her crate to wait the 4-5 hours between the end of her walk until we got home.

Yesterday, we eliminated the crate all together. She’s free to roam the house whenever she’s home, and so far there hasn’t been a bit of destruction. As always when I compare her to my previous dogs, her behaviour is a revelation. In high school, dogs alone in my room for any extended period meant destroyed books, exploded chewed-up pens, and the occasional urine stain. In comparison, Sous was at home today with her treat bag full of food at nose level as well as most of a bag of toffee sitting on the coffee table–both left untouched.

I mostly attribute her good behavior to exhaustion–again, the hippie school of dog care traces most misbehavior to lack of exercise–and I’m relieved to find that what we pay in time and money on her exertion is indeed sufficient. Still, it’s another little miracle to me to have a dog I can trust free in our house all day. Thank you, Sous!

vacation!

December 23rd, 2008

I’m currently sitting in my parents’ condo in Tabernash, Colorado. We got here via train–crazy, right? Yesterday we were on the slopes in Winter Park, and today we’re busy researching the best way to construct snow sculptures. My life has been a haze of relaxed euphoria since I filed my dissertation. It turns out just working a full-time job is much easier than being a grad student–and they send me paychecks every now and then.

Anyway, Leslie just got done posting pictures of our holiday adventures so far. You can find them in the usual place:

winter park

school’s out forever

November 25th, 2008

You’ll probably be hearing more from me now.

yeah bitches

the last week

October 26th, 2008

Tomorrow, I start my last week at Berkeley. A week later, I start my new job. So yeah, I’m kind of busy tying everything up. But someday, I will write something.

teach your kids math. not too much, though…

September 30th, 2008

Driving yesterday I heard a PSA about helping to bring math into everyday life for kids. I’ll paraphrase:

“Encourage your kids to make change when you buy things at the store. Teach them to hunt for the best deals on the shelf. Make math a part of every day life and you’ll ensure they grow up smart enough to make the right financial decisions for themselves. This message brought to you by the California State Lottery

Yes, you read that right! Teach your kids to add and multiply, but be sure not to teach them probability, because then they might realize what an insane, regressive, predatory tax the lottery is. This reminds me of the ad my dad once heard on spanish-language AM radio in Austin where one guy advises another to save the money he’s spending on night school to learn English and spend it on lottery tickets instead. At least the message there is consistent…

we moved

September 17th, 2008

It’s been a busy month. On top of Jeff getting married, trying to find a job, and finishing my dissertation, we also moved to an awesome two bedroom house in Rockridge (North Oakland). As part of this transition we finally obtained the quintessential piece of IKEA furniture, the Poang chair. What’s more, we purchased this chair like-new at one third the retail price from craigslist, which makes this like the ultimate example of bay-area 20-something home furnishing. Too bad we don’t get to sit in it much:

sous in poang chair

braid

August 8th, 2008

 When I broke down and got a fancy new TV, I decided to get the Xbox 360 instead of the PS3 because of the sizeable selection of games you can download for a fee directly from the couch. This includes old arcade classics as well as new stuff. A couple of days ago, a game called “Braid” was released, which is a sort of puzzle game done up like a painting. It started blowing my mind about 5 minutes after I started playing it, and hasn’t quit. Since. Here’s what it looks like:

braid screenshot

The music fits in perfectly with the look of the game. Here’s a little YouTube action so you can get the full aesthetic:

YouTube Preview Image

I usually get frustrated in puzzle games pretty quickly, when the difficulty ramp is too steep, or bored, if it’s too easy. Braid is perfect, right in the middle. I’ve solved 3/5 of the worlds, and haven’t been once tempted to reach for a walkthrough. What’s more, Braid doesn’t have any complicated rules–you learn everything by observation, and so the overall experience is very satisfying. It was $15 and has already paid for itself.