10 years of overt.org

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

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

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.

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

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’

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

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

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

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.