Kristina Chodorow's Blog
Uncategorized
A finite simple group of order two
Apr 30th
Andrew and I just returned from our honeymoon in the mountains, so I am now going to wax boring about how awesome it was.
We really love rock climbing, so we went on a lot of rock scrambles. Rock scrambles involve “scrambling” around rocks, boulders, little cliffs, and crevices. We skittered down slippery sheets of rock, trying to hit the tiny outcroppings and avoid tumbling to our deaths. Then the trail markers would betray us, pointing us right into the crevices, under huge boulders, across precariously balanced natural bridges of rock, through tiny gaps where I barely fit and there was a moment of panic where I thought Andrew was going to get stuck.
At one point, we came to a particularly buggy area. The air was warm and full of tiny flies and mosquitoes. I kept flailing at them, mostly just managing to whack myself in the head. The trail hit the edge of a pit with steep walls blocking our view of everything but the path in front of us. Slipping, sliding, and slapping ourselves in the head, we made our way down.
As we went, the air got ten degrees colder, then twenty, then thirty. Suddenly there were no bugs at all. We reached the bottom of the pit and the air was pleasantly cold. Then we saw why: there were piles of snow! The hole was completely surrounded by rock and protected from the sun, forming natural ice box.
As we scrambled up the other side of the pit, the air became warmer and the bugs resumed their assault, but for a moment there, it was like we were in an ice dragon’s lair in the heart of a hot jungle.
Also, we got room 314 (3.14), which seems like a good omen.
Finally, if you’re a geek and don’t know what the title is referring to, you should watch the video.
My Life is Awesome
Feb 2nd

Andrew and I are getting married!
I can’t figure out how to say this eloquently, but: Andrew is so wonderful and I am incredibly lucky to have him. I love him so much. We love doing stuff together, talking about everything together (well, he puts up with more database talk than he’d probably strictly like), and just being with each other.
He has the cutest new haircut, too, but he’s a tough man to get in front of a camera (the picture on the right is from a year ago).
We’re getting married by the justice of the peace on our third anniversary. We already have tons of crap in our apartment and the last thing we need is more crap, so we’re asking wedding guests to skip the presents and donate to one of the following charities instead:
- Freedom to Marry Foundation, which fights for gays’ and lesbians’ rights to marry.
- The Dakin Animal Shelter, a no-kill animal shelter in my hometown.
- Electronic Frontier Foundation, the ACLU of technology.
I am so happy.
How I Became a Programmer
Nov 30th

NYU's asbestos-filled math and CS building where I spent my undergrad
I started programming when I was 20. My original college plan was to major in mathematics and become a saxophonist (I didn’t feel like starving while I tried to make it as a musician).
Luckily, I had a crush on a computer science major so I tagged along with him to a programming team meeting. Progteam blew my mind: programming was like math, only fun! Majoring in math made me feel smart and dignified, but it was never like “Wow, this it fun.” It was more like “Ow, my brain hurts, but I guess it’s building brain muscles…”
It turned out I was good at computer science, so I decided (somewhat randomly) that I was getting into MIT for grad school, dammit. I knew they’d want to see research, so I asked a professor to mentor an independent research project. Over the next year, I did researched a classic optimization algorithm and wrote a paper on an algorithm I came up with to improve its performance for certain cases.
The problem was that, when the time came to apply to grad school, I wasn’t sure I wanted to go to at all anymore. I had liked learning about optimization and coming up with a new algorithm, but I had hated research, in and of itself. I asked my parents for advice.
“Just apply,” they said. “Keep your options open.”

The computer science building at MIT
Grad school had been my goal for a while, so I applied to a couple of PhD programs. I half hoped that they would all reject me and make the choice easier. Of course, they all accepted me, even MIT (poor me</sarcasm>). I thought about it some more and told my parents that I still didn’t think I wanted to go.
“Just try a semester,” they said. “You can always leave if you don’t like it.”
I ended up accepting Columbia, not MIT. I had really liked every professor I met at Columbia, which I figured would give me more advisor options. Unfortunately, I continued to hate research and I was thoroughly sick of school. The next three months the most miserable of my life.
“Just stick it out,” said my parents. “Until you get a master’s degree, at least.”
I finally put my foot down. Usually they have good advice but I realized that this was their thing, not mine. I dropped out of grad school and got a job I loved. My parents were happy that I was happy and got over the disappointment that I would never be Dr. Chodorow. I’m still at the same job and couldn’t be happier.
So, in the spirit of Thanksgiving, I’m really thankful that I lucked into discovering computer science. Math kind of sucks.
Firesheep: Internet Snooping made Easy
Nov 3rd

A demo of Firesheep, courtesy of a fellow bus rider
If you use an open wifi network, people around you can see what you’re doing. They not only can look at your accounts, but log in as you with a double click. Even if you’re non-technical (especially if you’re non-technical!) you should know how this works and how to protect your accounts. Here’s what’s happening:
When you use wireless internet you are sending information through the air from your computer to a router* somewhere. This information is like broadcasting your own little radio station: it can be picked up and seen by anyone in the area. The problem is, your radio station is broadcasting you checking email, updating your OkCupid profile, writing stupid messages to friends on Facebook… activities that you don’t want random “listeners” to know about.

To keep your radio station private, websites support encoding all of the data you send so it looks like gibberish to anyone on the outside. So, when you sign into Gmail (or Amazon or Chase) your computer turns your username and password into gibberish and sends it into the air. The website receives the message, decodes the gibberish, and says “Now that you’ve given me your credentials, I’ll assume you’re Joe Shmoe if you give me the unlikely combination of digits ’874328972387498234′ every time you make a request.” And then most sites stop encoding anything.
So, when you post a status update to your wall, you send along “874328972387498234″ as clear as day and Facebook says “Aha, it’s you. Okay, I’ll post that.”
However, remember that you’re broadcasting this on your own personal radio station. Well, someone finally built a tuner, called Firesheep. If you have Firesheep installed and you sit down in a coffeeshop (or anywhere with an open wifi network), you are logged in as everyone around you to every site the other patrons are visiting.
Important takeaways for non-geeks:
- Don’t access any accounts you care about via a public wifi connection. There is an embarrassingly long list of sites built into Firesheep: Amazon, Cisco, Facebook, Flickr, Google, New York Times, Twitter, WordPress, Yahoo, and many others. My mom could figure out how to use Firesheep and it would take a geek ~10 minutes to add a new site.
- This “hack” cannot be patched globally by flipping a switch. Each website needs to fix itself. It is analogous to a locksmith discovering that every lock can be unlocked by whistling at it: everyone needs to go and improve their locks, we can’t outlaw whistling.
- There’s no easy way, other than not using your accounts, to prevent people from seeing what you’re doing. The easiest ways I can think of off the top of my head are setting up Tor or a VPN, which are beyond the abilities (or at least interest) of most non-geeks I know.
- Gmail encodes everything, by default. Your Google account will pop up in Firesheep (see the screenshot above), but people won’t actually be able to access your email. Also, any bank or reasonably professional payment system will be secure (look for the little lock symbol in the corner of your browser or https:// in the address bar). You can log into someone’s Amazon account with Firesheep, but you can’t do any payment stuff.
The code for Firesheep is open source and available on Github. You can try it out by starting up Firefox, downloading Firesheep, going to File->Open File and selecting the file you just downloaded. You may have to select View->Sidebar->Firesheep if it doesn’t pop up automatically.
That’s it, it’s ready to start capturing data from other people on your wifi network.
* Geeks: I know it’s not necessarily a router, but most lay people know that a router is where internet comes out and it’s close enough.
How not to get a job with a startup
Oct 15th
First contact
Don’t: contact the startup before you know what they do. I’ve recruited at a couple college job fairs and almost everyone comes up and says, “Hi, I’m a masters student in computer science and I’m looking for a job. Can I give you my resume?” Yes, you can, and I’ll put it on the pile of 200 other resumes.
Also, please don’t walk me through your resume line-by-line: it’s boring. I’ll hate you and I won’t be able to think of a polite way of cutting you off.
Do: say, “I love MongoDB! I’ve been using it with Ruby for <some project> and I would love to work on it full time! I’m really interested in replication/sharding/geospatial/etc. stuff!” Keep in mind: you’re talking to startup employees. Working is our life (which sounds depressing, but we’re doing what we love). It’s annoying to have people apply who are looking for a job, any job, and obviously don’t give a crap what we do.
Startups tend to get romanticized (and I’m about to romanticize them out the wazoo), but working at one definitely isn’t for everyone. The salary isn’t as good, the job security is going to suck, it’s tons more work and investment than a “normal” company, and in all likelihood, after pouring your heart and soul into it for years, it’ll flop.
On the other hand, working at a startup is awesome. You get to do everything: I’ve done C socket programming and jQuery and everything in between. I’m two years out of school and manage release cycles and user communities. I’ve gotten to travel everywhere from Belgium to Brazil and written a book.

It’s a great match if you like being independent: not the Rambo-”don’t tie me down, baby”-independent, the “::snerk::, I like dinosaurs so I wrote a research paper on sauropods”-independent. You have to be willing to work hard under your own steam.
Your resume
Don’t: have a boring resume.
Your resume should prove that we are fools if we don’t bring you in for an interview.
If yours doesn’t, think about what your dream job would look for on your resume. Open source development? Independent research? A penchant for robot design? Now go out and get that stuff on your resume.
Don’t use fluffy language, your resume is going to be read by programmers, not managers. “Did in-depth research to enable optimization of processes” is going to make us groan. “Made a genome-crunching aggregation script 50 times faster by researching how Java memory allocation works” is going to make us go “cool!” Have you done other optimization research? Do you like benchmarking? Do you know a lot about Java internals? Heck, tell us about the human genome.
Your interview is going to be a lot more fun for everyone involved (and much more likely to actually occur) if you make us think, “this person sounds really interesting, I want to talk to them.”
When I was in college I had no idea what I wanted to do, other than a vague idea of “solving interesting problems.” So, you don’t exactly have to be dedicated to the cause to get a job at a startup. Just express some enthusiasm for what they do, write a kick-ass resume, and the rest is up to your technical ability.
Oh, and by the way: if you’re looking for an awesome job, 10gen is recruiting!
Public Speaking: The Prequel
Dec 2nd

Me, presenting at SF JUG
There’s a video that everyone seems to have seen of me (seriously, when I went to Brazil everyone mentioned it) presenting MongoDB to the San Francisco Java User Group. Unfortunately, I think it’s the worst presentation I’ve ever given, partly because of the lead-up and partly because of inexperience.
I looked up directions and gave myself an extra 15 minutes to get to the talk. It looked like I had to take a bus so I walked down to the bus stop, but all the buses that went by had a different naming scheme than what I had to take. I asked the driver on the next bus that went by and he pointed downwards and drove off, which I realised a second later probably meant that I wanted the subway. Whoops.
I went downstairs and saw ticket machines, so I went over and bought tickets. Then I went over to the gate, which didn’t seem to take tickets.
“Excuse me,” I said to the guard, “how do I get in?”
“Oh, that’s a BART ticket, this is the Muni system, it takes quarters.”
So I had to wait in line at the ticket/change machines again, because I didn’t have eight quarters on me.
I finally made it to a platform and the stupid Muni came. I had to go two stops. At the second stop I got out, went upstairs, exited the station and… had no idea where I was. I had somehow gotten off at the wrong station. I started to freak out. However, San Francisco is a city, and as a city, it has cabs. I gave up on public transportation and hailed a cab. The driver drove me all of five blocks to the building where the Java User Group was meeting. I handed him the rest of the money in my wallet and ran in.
By the time I got there, I was at least five minutes late. However, there were thirty people waiting to sign in, so I relaxed a bit as I waited in line.
The organiser looked relieved when he saw me and pulled me and the other presenter aside. We were supposed to each talk for an hour and hold all questions until the end. I was up first and started in. With about two slides to go, I casually checked my cellphone to see if I was on track with the time. I wasn’t.
I had been talking for 25 minutes.
I must have looked like I had suddenly been hit by a bus. In the video, you can see me suddenly run my hand through my hair about 16 times (I didn’t even realise I did that when I was nervous). Then I made those two slides last as long as I damn well could, which was about 10 minutes.
When people were done asking questions, I skulked to the back of the room where I found a seat on the edge. After a few minutes, I couldn’t take it anymore, so I went to the bathroom where I could freak out in peace. When I got back, I sat down and tried not to think about my talk. And, after about ten minutes, the other speaker wrapped up his talk. It seemed like he had just started, but I assumed trauma had made time go all squiggly. I checked my cellphone, and indeed, he had only talked for a half-hour, too! I had died a thousand deaths for nothing.
Afterwards, I talked to a bunch of cool people who were working on interesting projects, which was definitely the highlight. Once all the people who wanted to talk had gone, I packed up and left. There was a bus that could take right to my hotel that I was right on time to catch. I walked towards the stop and, as I approached, I heard the bus turn the corner behind me. I was ahead of it, but it gained speed on the straightaway. It was a long block, and it got a couple-hundred yard lead before it stopped to pick up passengers at the end of the block. I went into full speed, sprinting down the street with my damn brick of a laptop. The bus was stuck at the stop, as the traffic light ahead of it was red. Hurrah! I covered the last fifty yards, touched the back of the bus, and… the light turned green and the bus drove off.
I. Was. So. Pissed.
I decided that I’d walk back to the hotel, since I now vaguely knew where I was. It was a half-hour walk, but I was done with San Francisco public transportation.
When I got home, I realised it was just as well that the bus had driven off, because I didn’t even have a dollar left in my wallet after paying for the Bart ticket, Muni quarters, and taxi ride.
NoSQL Trolls
Nov 19th
I have a Twitter feed for the term “nosql” and every day I get tweets like:
“What moron came up with #nosql? you’re all fired!”
“nosql is making all the same mistakes people made 40 years ago… relational dbs won!”
“yeah, use nosql… if you don’t mind losing all your data”
(these are based on real tweets, but aren’t actually verbatim. They’re all pretty much the same.) I hope I meet someone who says this to me someday, though, so I can say: “Boy, what a good point! If only Google and Yahoo and LinkedIn and Twitter and the thousands of other high-traffic websites had listened to you. Obviously you know what’s going on better than they do, this NoSQL thing is just a bunch of idiots spinning their wheels.”
Then, as they reeled, rendered helpless by my cunning sarcasm, I’d continue in a slightly different vein: “You freakin’ moron! Relational databases failed miserably for huge websites, so alternative database popped up to fill that need. And, so long as we’re making a new database, we figure computer languages and database administration have changed a bit since 1974, so we might as well make dbs easier to use. You’re welcome!”
Then I’d punch them in gibblies until they saw my point.
I might need a vacation.
Foz do Iguacu
Oct 21st
I just arrived in Brazil for Latinoware. I didn’t know what the weather would be like, so I packed everything from tank tops to long sleeves. Turns out it’s totally tropical. It started pouring a bit after we arrived, and it’s like a typhoon out there. It’s still 90 degrees, though. I’ll need to pick up some more tank tops, I think.
Testing MongoDB Replica Pairs with Perl
Sep 17th
I was just fixing this, and it’s a pain to setup/test, so I figured I’d put up what I did here, so at least I’d never have to figure it out again. So, start two db servers and an arbiter:
$ mkdir ~/data1 $ mkdir ~/data2 $ $ ./mongod --pairwith localhost:27018 --arbiter localhost:27019 --dbpath ~/data1 $ ./mongod --port 27018 --pairwith localhost:27017 --arbiter localhost:27019 --dbpath ~/data2 $ ./mongod --port 27019 #arbiter
Then kick off the following Perl script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | use strict; use warnings; use Carp; use Data::Dumper; use MongoDB; # order of left_host/right_host is unimportant my $conn = MongoDB::Connection->new('right_host' => 'localhost', 'left_host' => 'localhost', 'left_port' => 27018); my $db = $conn->get_database('x'); my $coll = $db->get_collection('y'); $coll->drop; for (my $i=0; $i<100; $i++) { print "finding..."; eval { $coll->find_one; }; print $@."\n"; sleep 1; } |
Now, you’ll start getting stuff like:
finding... finding... finding...
That means everything is okay. Now, kill the first mongod process that you started. (The first one you started is probably master. If you don’t see a “pair: setting master=1 was 0″ on the other one after a couple seconds, restart the first one and kill the second one.) You’ll notice your output changes to:
finding...couldn't find master at /usr/local/lib/perl5/site_perl/5.10.0/i686-linux/MongoDB/Connection.pm line 177. finding...couldn't find master at /usr/local/lib/perl5/site_perl/5.10.0/i686-linux/MongoDB/Connection.pm line 177. finding...couldn't find master at /usr/local/lib/perl5/site_perl/5.10.0/i686-linux/MongoDB/Connection.pm line 177.
The slave hasn’t become master yet, so there’s nothing the db can use (there will probably be a 2-10 second delay before the slave becomes master). Once you see “pair: setting master=1 was 0″ scroll by on your db logs, you’ll notice the Perl script’s output change back to:
finding... finding... finding...
You can go back and forth, killing off master dbs and restarting them.
Final Days in CA
Sep 8th
I was reading my new book about the actress in rehab, and I was vaguely wondering why the writer’s name sounded familiar. I couldn’t quite place it, so I flipped to the back to see what her bio said. Suddenly I realized where I knew her from.
“Hey Andrew, guess who wrote this book?” I showed him the front cover.
“No! No way! THE Carrie Fisher?”
Yup. My book was written by Princess Leia. It wasn’t great, but it wasn’t terrible, either. Now I’m wondering if I should get another book. We’re flying home tomorrow, but I feel vaguely uncomfortable going even 24 hours without something to read.
Speaking of going home, I mailed all of our dirty clothes home today so that we’ll have almost nothing to carry tomorrow. I asked the front desk, and they told me the nearest post office was in the back of Macy’s. I walked down the Macy’s block and back again. It was a whole block of Macy’s, nothing else. Finally, I asked at a restaurant.
“The post office is inside Macy’s.”
Weird. I went into Macy’s, where there was no sign of a post office. I asked an over-collagened makeup hawker where the post office was. “Oh, in the basement.”
I went down the escalator, wandered around for a bit, and finally gave up and asked another sales lady. “If you follow the red wall, it’s down there.” Oh.
So, to get to the post office, you go into Macy’s, go down to the basement, make a U-turn, and it’s in sort of a back room. I’ve been to speakeasies that were easier to find.


Subscribe to all posts