Decorating with Children's Books and a Phone Camera

I decorated my kids’ room with pictures from their favorite books. This is a guide in case you want to do something similar.

I started with a set of pictures frames. This way you know the number of pictures you need and the dimensions you’re working with. I picked a set of 9 frames from Home Depot: 13″ squares with an 8x8″ mat opening. I also like the HOVSTA square frames from IKEA that are 9x9″ with a 5x5″ mat.

Then I needed pictures. I picked a dozen of my daughters’ favorite books (they’re 5, 2, and 2). Ordinarily, I would use a scanner on a work copy machine but my office has been closed for months. Instead of buying a scanner, I decided to try taking pictures using my phone. I was surprised by how well this worked. To get a clean image put the book on a table or counter, use good lighting, hold the pages as flat as you can, and try to avoid reflections and shadows.

Once I had pictures on my computer I made quick, small, square crops to play the layout using Figma. Figma is a pixel-based tool so I sized everything assuming 20px per inch.

  • 13″ square frame => 260px x 260px
  • 1/2″ black edge => 10px border
  • 8″ inner photo => 160px x 160px

I added an inner shadow on the photo to simulate a photo mat. This is completely unnecessary.

figma_layout2.jpg

This let me plan how it would look ahead of time and make sure the photos and colors went together. Some books have beautiful pictures that just didn’t fit, like A Sick Day for Amos McGee. I also tried to arrange the pictures to minimize clashes and give some directionality: witch flying right is at the top left, Max sailing left is at the bottom right, animals going upstairs in the bottom left, etc.

My initial plan was to do all the pictures on a white background, which I think would look great—especially with more, smaller frames—but I loved the colors of the pictures and decided to keep them as-is.

room_on_the_broom_white_bg.jpg

Once I picked my 9 pictures, I went back to the original files to clean them up a bit. You could probably skip this step and do everything with the tools built-in at Shutterfly and friends. I I have somewhat unhealthy perfectionist tendencies so I spent a few extra hours on the images.

I used Pixelmator Pro to do some light retouching using the repair tool, curves, and sharpen. Here are the steps I used on each image:

  • crop to a square (I did not resample any of the images)
  • adjust the colors using ML Enhance or curves
  • using the repair tool to fix any issues
  • apply sharpen
  • export to a JPEG

I started with Pixelmator’s “ML Enhance” auto-correct feature. Sometimes it looked great and I kept the results; other times it just looked weird (probably because illustrations in children’s books have difference color balance than you typically find in photographs).

If I wasn’t happy with ML Enhance, I adjusted the curves directly. If the picture looked washed out, I used the curve tool to set the page to white and applied a gentle S-curve adjustment to boost the contrast.

Pixelmator’s repair tool is great and it made it easy to fix wrinkles, bright spots from the photograph, and the edge of pages where I needed a little extra color. I watched this video on using the repair tool. In short, create a new empty layer, select the Repair tool, ensure “Sample All Layers” is selected, and click and drag to repair issues.

Once I had all the high-quality JPEGs, I got trial prints of a few from Mpix and Shutterfly. I was particularly interested in giclee prints and matte finishes. The prints all looked amazing; it was hard to believe the source image was a picture of a book that I took on my phone.

sample_prints.jpg

The deep matte finish from Mpix is gorgeous. It makes the print look more like a page from a book instead of a glossy photo print. Once I put it behind a glass frame, though, I could barely tell the difference, so I went with the cheaper glossy finish ($3.73 for glossy vs. $4.81 for deep matte at time of writing for 8”x8” prints). In retrospect, the giclee prints were probably overkill given the relatively low quality source images.

pigeon_framed.jpg

I measured and marked points on the wall to hang the frames. Our house has a mixture of drywall and lath and plaster walls and I didn’t appreciate how hard it would be to be to hang things accurately. If I had to do it again, I would probably try to create a guide on a large sheet of paper and use command strips instead of nails for hanging.

lucy_with_pictures.jpg

Overall I was pretty happy with the results and the girls loved the pictures when they saw the room.

Writing pull requests your coworkers might enjoy reading

Programmers like writing code but few love reviewing it. Although code review is mandatory at many companies, enjoying it is not. Here are some tips I’ve accumulated for getting people to review your code. The underlying idea behind these suggestions is that the person asking for review should spend extra time and effort making the pull request easy to review. In general, you can do this by discussing code changes beforehand, making them small, and describing them clearly.

At this point you may be wondering who died and made me king of code review (spoiler: nobody). This advice is based on my experience doing code review for other engineers at Twitter. I’ve reviewed thousands of pull requests, posted hundreds of my own, and observed what works and doesn’t across several teams. Some of the tips may apply to pull requests to open-source projects, but I don’t have much experience there so no guarantees.

I primarily use Phabricator and ReviewBoard, but I use the term “pull request” because I think that’s a well understood term for code proposed for review.

Plan the change before you make a pull request

If you talk to the people who own code before you make a change, they’ll be more likely to review it. This makes sense purely from a social perspective: they become invested in your change and doing a code review is just the final step in the process. You’ll save time in review because these people will already have some context on what you’re trying to do. You may even save time before review because you can consider different designs before you implement one.

The problem with skipping this step is that it’s important to separate the design of the change from the implementation. Once you post code for review you generally have a strong bias towards the design that you just implemented. It’s hard to hear “start over” and it’s hard for reviewers to say it as well.

Pick reviewers who are relevant to the change

Figure out why are you asking people to review this code.

  • Is it something they worked on?
  • Is it related to something they are working on?
  • Do you think they understand the thing you’re changing?

If the answer to these questions is no, find better people to review your change.

Tell reviewers what is going on

Write a good summary and description of the change. Long is not the same as good; absent is usually not good. Reviewers need to understand the context of the pull request. Explain why you are making this change. Reading through the commits associated with the request usually doesn’t say enough. If there is a bug, issue, or ticket that provides context for the change, link to it.

Ideally you have written clear, readable code with adequate documentation, but that doesn’t necessarily get you off the hook here. How your change does what it says it does may still not be obvious. Give your readers a guide. What parts of the change should they look at first? What part is the most important? For example, “The main change is adding a UTF-8 reader to class XYZ. Everything else is updating callers to use the new method.” This focuses readers’ attention on the meat of the change immediately.

You may find it helpful to write the description of your pull request while tests are running, or code is compiling, or another time where you would otherwise check email. I often keep a running description of the change open while I am writing the code. If I make a decision that I think will strike reviewers as unusual, I add a brief explanation to that doc and use to write the pull request.

Finagle uses a Problem/Solution format for pull requests that I find pleasant. It’s also be fun to misuse on occasion. I don’t recommend that, but I do plenty of things I don’t recommend.

Make the change as small as possible while still being understandable

Sometimes fixing a bug or creating a new feature requires changes to a dozen-odd files. This alone can be tricky to follow before you mix in other refactorings, clean-ups, and changes. Fixing unrelated things makes it harder to understand the pull request as a whole. Correcting a typo here or there is fine; fixing a different bug, or a heavy refactoring is not. (Teams will, of course, have different tolerances for this, but inasmuch as possible it’s nice to separate review of these parts.)

Even if you have a branch where you change a bunch of related things, you may want to extract isolated parts that can be reviewed and merged independently. Aim for a change that has a single, well-scoped answer to the question “What does this change do?”. Note that this is more about the change being conceptually small rather than small in the actual number of files modified. If you change a class and have to update usages in 50 other files, that might still count as small.

Of course there are caveats: having 20 small pull requests, each building on the previous, isn’t ideal either so you have to strike some balance between size and frequency. Sometimes splitting things up makes it harder to understand. Rely on your reviewers for feedback about how they prefer changes.

Send your pull request when it’s ready to review

Is your change actually ready to merge when reviewers OK it? Have you verified that the feature you have added works, or that the bug you fixed is actually fixed? Does the code compile? Do tests and linters pass? If not, you are going to waste reviewers’ time when you have to change things and ask for another review. Some of these checks can be automated—maybe tests are run against your branch; use a checklist for ones that can’t. (One obvious exception to this is an RFC-style pull request where you are seeking input before you implement everything—one way to “Plan the change”).

Once you have enough feedback from reviewers and have addressed the relevant issues, don’t keep updating the request with new changes. Merge it! It’s time for a new branch.

Closing thoughts

Not all changes need to follow these tips. You probably don’t need peer buy-in before you update some documentation, you may not have time to provide a review guide for an emergency fix, and sometimes it’s just really convenient to lump a few changes together. In general, though, I find that discussing changes ahead of time, keeping them small, and connecting the dots for your readers is worthwhile. Going the extra mile to help people reviewing your pull requests will result in faster turnaround, more focused feedback, and happier teammates. No guarantees, but it’s possible they’ll even enjoy it.

Thanks to Goran Peretin and Sarah Brown for reviewing this post and their helpful suggestions. Cross-posted at Medium.

Thoughts on one year as a parent

(Cross-posted from Medium, a site that people actually visit).

Around this time last year I spent a lot of time walking around, thinking about all the things I wanted to teach my daughter: how a toilet works, how to handle a 4-way stop, how to bake cookies. One year later, the only thing I have taught my daughter about toilets is please stop playing with that now, sweetheart, that’s not a toy. Babies shouldn’t eat cookies. And driving is thankfully limited to a push toy which has nonetheless had its share of collisions. On the other hand, I can recite Time For Bed and Wherever You Are My Love Will Find You from memory. Raffi is racing up the charts of our household weekly top 40. I share the shower every morning with a giant inflatable duck. It has been a challenge and yet still joyful. Here’s an assorted collection of observations and advice from someone who just finished his first trip around the sun as a parent.

Advice

Speaking of advice, I try not to give too much to new parents. They have surfeit of books, family, friends, and occasionally complete strangers telling them what they should and shouldn’t do. I don’t want to be one more voice in that cacophony. The first months with a new child is a struggle, and you have to do whatever it takes to get through them. Sure, there are probably some universals when it comes to babies, but as someone who has done it just once, I’m not a likely candidate to know what they are. I’m happy to tell you what I think, but only if you want to know. Let’s just assume for the rest of this article that you want to know.

That said, please vaccinate your kids.

Firsts

It’s easy to forget how many experiences an adult has accumulated in their decades alive. The first year for a baby is almost nonstop first experiences. Everything that has long since become ordinary in your life is new to a baby: eating solid food, going to a zoo, taking the bus, touching something cold, petting a dog. The beautiful thing is that being a parent makes all these old experiences new firsts for you too. I hope never to forget the first time I watched Samantha use a straw: she sucked on it—like everything else—and then when water magically came out of the straw she looked startled, and then, suddenly, thrilled, as if she were not merely drinking water, but had discovered water on Mars.

Sleep

Nothing can prepare you for this. Maybe it’s smooth sailing for some parents, but we were exhausted, completely drained, dead to the world, and whatever other synonyms there are for being tired. Lots of people told us that we would be tired beyond belief, but I think this may not be something that can be communicated with language; it can only be learned through experience. I thought that being an experienced all-nighter-puller in college would be good training for having a baby. It’s completely different. In college you stay up all night writing a paper, turn in the paper, and then it’s OK if you sleep for 36 hours during the weekend. Having a baby is like there’s a term paper due every day for months.

Breastfeeding

Breastfeeding is really hard. I don’t know why they don’t work this into more breastfeeding curricula. Caitlin and I took a multi-hour class and I don’t remember this coming up. Just lots of stuff about all the benefits of breastfeeding, how wonderful the bonding is, how the mother will be totally in love with breastfeeding. Nobody wants to attend a breastfeeding class taught by a dude, but if I were teaching one it would go something like this:

  • There are a lot of good things about breastfeeding.
  • By the way, it’s really hard and Mom will probably end up in tears several times.
  • Working with a lactation consultant can be a lifesaver.
  • Formula is not the end of the world.
  • Good luck, happy latching.

Pictures

If you want to make a new parent’s day, ask to see pictures of their baby. I tried not to subject people to them, but there’s only so much self-control one can have. I loved it when people asked.

Stuff

You end up with so much stuff for a baby. There’s a lot of stuff you don’t need. If you skip that stuff, you’ll still have a lot. Car seat, stroller, bottles, diapers, a bathtub, continually outgrown clothes, more diapers, a crib, a rocking chair. And that’s before you even think about toys and books.

Here are some of my favorite things that we bought this past year:

  • Halo sleep sacks. They zip from the top to the bottom which means you only have to unzip them partway for late night diaper changes.
  • LectroFan white noise machine. We actually have two—one for baby and one for the lucky napping adult.
  • NoseFrida. I never would have guessed how much fun decongesting your baby would be with this snot sucker.
  • Giant Inflatable Duck. I can’t say I love sharing my shower with this duck, but Samantha loves it, so I kind of love it too.

One recommendation I make to all my expecting friends is to check out The Nightlight, the baby equivalent of The Wirecutter and The Sweet Home. They don’t give you a spreadsheet of data and rankings, they just tell you what to buy, with a detailed explanation if you care to read it. I did a lot of independent research and ultimately came to many of the same conclusions, so I stopped reading.

Trivia: the set of clothes and items you need for a newborn is called a layette.

Dropcam/Nest Cam

I read something somewhere about video monitors being distracting and got it into my head that we would only use an audio monitor. I didn’t want one more app to hijack my phone. Boy was I ever wrong. First, we live in a small apartment, so the idea that we need radio frequencies to transmit baby sounds across it is ludicrous. Second, I got so much peace of mind from actually seeing what my baby is doing that I highly recommend it. When we were doing sleep training it was a huge help to be able to see that things were “OK”. Streaming live video from my house to the cloud is a bit creepy, but it’s so nice to check on her taking a nap when I’m at work, and being able to rewind 30 seconds and see what just happened is handy. I guess this is how privacy dies: with little, convenient features here and there.

Other Parents

Being a parent is like gaining membership to the world’s least exclusive club, but finding out that the club is somehow still great. It gave me a new way to bond with other friends and coworkers who are also parents. I thought (naively in retrospect) that all parents have a sense of this shared camaraderie. As it turns out, though, parents are just a random sample of people which means that some of them are strange or petty or just mean. I was surprised by how many interactions with other parents left me feeling like somehow we were still in high school: cliques at drop-in play areas, passive-aggressive remarks about the strangest things.

Airplanes

You could write a Shakespearean tragedy about the Herculean trials of flying with a baby. We rolled the dice a couple times and got lucky but it was exhausting.

Parental leave

I had access to a generous paternity leave policy—10 weeks paid—due to California’s progressive policies and my employer’s good will. It’s completely crazy that this isn’t the norm across the U.S. The law of the land is that, if you meet the requisite conditions, you are entitled to 12 weeks of unpaid leave. I cannot understand how the wealthiest country in the world can’t afford to prioritize reasonable family leave policies (and neither can John Oliver, who has a much funnier take on the state of parental leave in America). On top of that, it’s not like new parents are actually doing the best work of their career. I was sleepwalking through my job for weeks even after I got back.

Politicians say they love families; how about actually helping them out when they need it?

Joy

Being a new parent is a struggle, even if you are thrilled to have a child. You lose so much of your previous life: free time, hobbies, spontaneous dining-out, sleeping in—it’s a lot of change. You trade these things in for something new. This new thing is hard to describe in a way that doesn’t sound trite or glib. I’d say it feels like trading some happiness for joy.

I love being Samantha’s father. The past year has had its share of challenges, but honestly we’ve been so fortunate and I hope that confronting our small share of problems has made me a more empathetic person. Samantha arrived on time, easily, and healthy; we didn’t have the burden of illness or an extended stay in the NICU. We never worried about the cost of diapers or formula; I can only imagine how crushing it must feel not to have what you need to take care of your child. We have had help from so many of our family and friends, help you absolutely need to keep your head on straight. I have a wonderful partner and I don’t know I would get through parenting without Caitlin; I have a new appreciation for single parents.

Who knows what we’ll teach our daughter this next year, or what she’ll teach us. It has been an incredible journey so far. I can’t believe how many years we get to have. They won’t be non-stop happiness, but I hope they’re as joyful as this first one.


“Let’s say I wanted to read more tweets about babies. Where would I go?” “You would go to this collection on Twitter.” “That was a hypothetical. No one wants to read more tweets about babies.”

Ways to communicate with me that are more effective than leaving a voicemail

  • text message
  • email
  • postal mail
  • Twitter direct message
  • pager
  • skywriting
  • interpretive dance
  • smoke signals
  • drunk carrier pigeon
  • singing telegram
  • sports arena jumbotron
  • tell Suzy to tell Rachel to tell Bill to tell me
  • message in a bottle thrown into ocean
  • give me a telling look
  • send a taxi to pick me up and drive me to the coast where a crewman aboard a ship signals using flag semaphore
  • Western Union
  • telepathy

Expanded from the condensed version. Hat-tip to @ravi and @av.

Arrangement in Hefeweizen No. 1

Yesterday afternoon I was out with some friends, having a beer at Jupiter, a restaurant in Downtown Berkeley. As I took a drink, I saw a beautiful colorscape at the bottom of my glass.

Spash of color in a beer glass, #1

I looked up and realized the color was a reflection of a billboard on the side of the building, advertising the very hefeweizen I was drinking.

Jupiter Hefeweizen billboard

I tilted my glass and tried to get a better shot.

Spash of color in a beer glass, #2

This one is almost unrecognizable as a glass of beer, but I love the colors.

The most dangerous part of flying

Pilots will tell you that the most dangerous part of flying is takeoff and landing. This is correct, though it’s most dangerous for people who aren’t busy flying the plane. Shortly before takeoff the doors to the aircraft are closed. From this point on the FAA requires passengers to shut off their electronic devices—the primary means of entertaining oneself in the 21st century—until the aircraft has reached its cruising altitude. Your Kindle off, there’s nothing to read. Your iPad off, there are no angry birds to avenge. Your eyes drift towards the seatback pocket, the only remaining source of entertainment until 10,000 feet. Safety card? Boring. Motion sickness bag? Gross. Oh, hello there, SkyMall.

SkyMall has been in American seatback pockets forever. It has a selection of products from dozens of resellers spread over 100 pages. You can purchase products you find in the magazine by calling 1-800-SKY-MALL, or at skymall.com, both inaccessible from most aircraft.

Browsing an issue of SkyMall follows a typical path. Initially, your resistance is high. Everything in this catalog is ridiculous. These things are a total waste of space and money. Who wants a $400 bronze sculpture of Superman? A 6-foot tall Yeti garden sculpture? A birdhouse to curb your dog’s barking? If SkyMall were your first exposure to human desire, you would think that people are really crazy for pillows. A typical issue has at least a dozen different pillows. Inflatable pillows, wraparound pillows, NASA space-age cooling pillows, “the most comfortable pillow you will ever own,” a pillow that looks like a tree log “only feeling about a million times more comfortable.” You could also be excused for thinking that humans are gonzo for replica objects from fantasy movies like Aragorn’s sword from Lord of the Rings, Hermione Granger’s wand from Harry Potter, and Gandalf’s staff from The Hobbit. I hope we are not.

Next you imagine the scenarios behind some of SkyMall’s offerings. A magnetic cup holder that attaches to your ride-on lawnmower or tractor: “Mary, do you remember when I was out mowing last week and I dropped my beer? I found something that could change all that.” A grass turf platform with fire hydrant so your dog has a place to relieve himself in the apartment. “We used to have some many problems with Butch until we bought a fake hydrant for him to piss on.” A cell phone suitable for underwater use up to 100 feet: “What a beautiful triggerfish! That manta ray is so graceful. Hold on—I have to take this call from Gloria in accounting.”

You find a favorite crazy item. How about this pair of wine glasses that can each hold an entire bottle of wine? It’s perfect for the occasions when you want to impress your guests by serving them a pound and a half of wine. Parties aside, they’re great for any time you want to kick back with a bottle of wine, without the hassle of refilling your glass four, even five times.

But by the time the plane has taxied and left the ground, your resolve has weakened. Sure, most of the things in SkyMall are useless, but there are a few gems. I have been trying to improve my posture. Here on page 47 is a breakthrough waiting to happen: a velcro harness that I could wear just 30 to 45 minutes a day to train my back. Definitely dog-ear that page.

I am usually not one for travel clothing, which looks best on people who don’t care how they look. That said, I could really get into these pickpocket-proof pants on page 62. Pockets that are too hard for thieves to open make a lot of sense. I don’t love wearing a money thong on international trips. With these pockets, I could just leave it at home and carry my wallet like a normal person. No, that’s silly. I’m not going to wear the same pants every day of my trip. Oh. They come in three different colors. And shorts. If I rotated them, that could easily be 10 to 15 days worth of pants. How do I get these again?

I just want the posture harness and five or six pairs of these pickpocket-proof pants, which are actually a great deal at $109. The woman on page 73 looks like she’s sleeping really well with that neck pillow. And you know, it’s not like this phone only works underwater. Obviously I could use it above or below the ocean. I could stop worrying about getting pushed into swimming pools with my phone in my pocket. On second glance, there is a kind of quiet beauty in this bronze Superman. OK, the harness, the pants, the pillow, the Superman—two, my brother loves comic book movies too—the underwater phone and—

Ladies and gentlemen, you may now use your approved electronic devices.

What? Where am I? Woah, close one. See you on the way down, SkyMall. Be strong, Ryan.

There and back again

This is the story of how I stole my bike.

In 2008 I moved to Berkeley, California to start grad school. There are a lot of things that are nice about Berkeley, but driving is not one of them. The city makes having a car painful. Finding parking downtown is a nightmare and enforcement officers can spot an expired meter 2 miles away. Comparatively, biking is glorious. There are racks for parking everywhere. The city has designated certain streets Bicycle Boulevards, which run parallel to major streets, just a block removed from heavy traffic.

Even though I was on a student budget, I knew I wanted a bike to get around. Eventually I found my new steed, a Kona Dew Deluxe. After tax it set me back $706.86, which is a lot of money but I justified the price to myself because my last bike lasted almost 10 years.

For 36 days, life was good.

On September 18, I was running late for my 12:30 class in South Hall. I locked up my bike in the center of campus. Though I had been in the habit of using both a U-bolt lock and a cable lock on the rear tire, I opted in my haste for just the cable. Five hours later, I left the building and walked to the wrong bike rack. “I must have parked it over at that one. Hmm, no, I think I was right the first time. I must have just missed it.” It took a couple trips back and forth before I realized that my bike had been stolen.

I was devastated. When something is stolen from you it cuts twice: you don’t have it anymore, and you feel dumb for letting someone take it. How could I have been so irresponsible? Why didn’t I just take the extra minute to use both locks? I filed a police report and walked home despondent.

The next morning things looked brighter. I called my insurance company and learned that my renter’s insurance covered my bike, minus a $200 deductible. (As an aside, my company, USAA was amazing. I faxed them my purchase receipt and they called me to settle the claim while I was still in line at Staples to pay for the fax.)

Also, this wasn’t my first time at the getting-bike-stolen rodeo. In college I left my bike outside my dorm on a Wednesday afternoon, and come Thursday morning, I found myself walking to class when my bike had, you know, been stolen. Notre Dame has a relatively isolated if large campus—1250 acres, 27 residence halls—so I just resolved to visit every bike rack on campus until I found my bike. This was a slow job, one that would have been aided by the very thing I was searching for. I visited most of them, but I didn’t find my blue Schwinn Moab.

That Friday afternoon, on the way to anthropology in Hagar Hall, I saw my bike locked up outside another dorm. Locked up? The nerve. I ran to the classroom. “Hey, does anyone here have a bike lock? I need to steal my bike.” Amazingly, someone did, so I rushed back outside and added a second lock to my bike. I rubber-banded a note to the seat:

Dear bike thief,

This is my bike. Please remove your lock.

Regards, Ryan

A few hours later I returned to find my bike secured with just a single lock—mine—and I rode it home triumphantly.

Anyway, back to bike #2. On Monday afternoon I was browsing Craigslist when I found a suspicious posting:

Craigslist Posting for 2008 Kona Dew Deluxe

It was for an orange Kona Dew Deluxe with a 58cm frame. I stared at the photo trying to discern if this was a coincidence or my bike. Then I noticed a silver kickstand attached to the frame—just like the add-on I had installed. I was pretty sure this was mine.

I didn’t know how paranoid the person I was dealing with would be, so I tried to be extra cautious. I edited my blog and took down an entry about my new bike. I removed pictures of it from Flickr. Then I sent what I hoped was a really casual email.

From: Ryan Greenberg
Date: Mon, Sep 22, 2008 at 5:21 PM
Subject: 2008 Kona Dew Deluxe - $400 (alameda)
To: sale-xxxxxxxxx@craigslist.org

I saw your posting for the Kona Dew Deluxe and I’m interested in buying it. Is it still available? If so, drop me a line via email or give me a call.

Thanks,
Ryan

Like a hunter waiting for prey I didn’t want to make sudden movements that would scare off the seller.

50 minutes later I got a phone call.

“Hey, I got your email about the bike,” the person on the other end said.
”Oh yeah. Is it still available?"
"Yeah.” OK, stay calm, try to sound like you don’t care if you buy the bike or not, I told myself.
”Cool. Maybe I can come check it out sometime this week?"
"How about tonight?” I was surprised how eager the guy on the other end was. We agreed to meet at a gas station in Oakland at 8:00pm.

My heart started pounding. I needed to find people to go with me to make a pretty shady rendezvous safer. After a bunch of phone calls I picked up Aylin and Mohit, plus our friend Ashkan would meet us there. My friend Nick offered the helpful advice: “Be careful. It would be great if you didn’t die.” Since I agreed, I also brought my checkbook thinking that, if things seemed dangerous, I would just buy the bike.

When we arrived, I told Mohit and Aylin to hang out in the car. I’d wave to them to get out if it was a match. Then I got out and I met Charles (not his real name), who was selling the bike for $400. He claimed he bought it a few months ago and decided that he didn’t need it anymore. Ashkan posed as my knowledgable bike-savvy friend which was easy because he’s bike savvy. While Ashkan chatted up Charles, I rode the bike in circles in the parking lot to try it out. Then I ducked around the corner of the gas station, jumped off the bike, and flipped it over. There, at the base of the pedal mount was the serial number I had memorized that afternoon: 20920800301. It was mine.

As I rode back to Ashkan and Charles. I waved to Mohit and Aylin to get out of the car. “Is it yours?” Ashkan asked.
”Yeah,” I said.
”OK.” He turned to Charles. “We’re taking the bike."
"Great!” Charles said.
”No, we’re not paying for it,” I said. “This bike is stolen."
"What?” Charles said. “No, no, no. I bought this over the weekend at Ashby BART. I paid $100 for it.” I believed him. Charles was a heavy-set guy, and I got the feeling this wasn’t the exact guy who cut the lock. I even felt badly that he was going to be out the money he spent.
”Yeah, sorry,” Ashkan stepped in. “That’s a risk you take when you deal with people who sell stolen goods.”

We went back and forth as Charles denied that he had any idea the bike was stolen. “Well, why don’t we give the police a call and have them help us sort this out?” I suggested. I started writing down the license plate on Charles’s pickup truck and all of a sudden he was in a hurry to leave. Then it was just three friends, my bike, and me, at a gas station off I-80 on a Monday night. I drove home euphoric. I had cheated the gods of bicycle theft once more.

There were a few loose ends to tie up. I called the police and told them that I had recovered my property. I wrote a check to USAA returning the insurance money. I bought a new lock. I don’t want to have to steal my bike ever again.

3.0 kilotweets

In 2007 I created my Twitter account in an Internet cafe in Santiago, Chile because I read on some blog that it was a big deal at SXSW. I spent some time deliberating between the username @ryangreenberg (which I use on a number of other services) and @greenberg. Eventually I decided on @greenberg because it seemed like being short was a big deal on Twitter. Just a few minutes ago I posted my 3,000th tweet on Twitter. Four years and a few thousand tweets later, not only am I still tweeting, but along the way I somehow ended up working for the company. What a ride.

Profile card on Twitter at 3,000 tweets

Here’s a Harper’s Index-style look at my first 3,000 tweets:

  • Number of tweets I sent between July 10, 2007 and February 27, 2012: 3,000
  • Number of words written: 53,066
  • Kilobytes of text: 302
  • Median time between tweets: 6 hours, 43 minutes
  • Average time between tweets: 13 hours, 32 minutes
  • Longest time between two tweets: 84 days between tweet #1 (“Finally signing up with Twitter.”) and tweet #2 (“Wondering if there is something ironic about Superman bandaids.”)
  • Most tweets in a single day: 13 on January 2, 2010, a top ten list of the best years of the decade
  • Retrospectively, do I wish I sounded less whiny sometimes: a little.
  • Number of URLs posted: 571
  • Number of hashtags used in tweets: 155
  • Number of @mentions used in tweets: 768
  • Most frequently mentioned people: @MIGreenberg (40), @npdoty (36), @caitearly (21), @michaelischool (20), and @kevinweil (16).
  • Number of OHs and quotes: 211

Tweet Length

Graph of distribution of tweet length
  • Number of tweets that are exactly 140 chars: 133 (about 4% of them)

Punctuation

  • Periods: 4,705
  • Single quotes, apostrophes: 1,839
  • Double quotes: 1,618
  • Commas: 1,560
  • Colons: 1,421
  • Ellipses: 143
  • Em dashes: 110
  • Semicolons: 71
  • En dashes: 14

Topics

  • Tweets that mention the New Yorker: 18
  • Tweets that mention the Apple or OS X: 47
  • Tweets that mention Twitter: 102

And here are a few of my favorites.

My shortest tweet—four characters—is how I let friends and family know my then-girlfriend’s response when I asked her to marry me:

And the next year when we tied the knot:

A couple graduations:

And starting work at Twitter:

I’m looking forward to the next kilotweet. If you are too, follow @greenberg over on Twitter.

FBI seizes MegaUpload, loses opportunity

Last week the FBI seized the file exchange site MegaUpload through a court order. Previously, users could exchange files too large to email through the service. Now visitors to the site see this message:

Screenshot of FBI notice at MegaUpload.com

The significance of a website seized by law enforcement is heightened in light of the controversial SOPA and PIPA legislation currently being considered in Congress. Given the high stakes—the open exchange of information in a free society, government interference with the Internet—I feel compelled to let the people at the FBI know what I think.

Guys, this is embarrassing. Really amateur hour. Seriously, look at this again:

Close-up of FBI takedown notice

Where have I seen a better looking image? I mean, other than every movie ever made that shows a computer screen?

I don’t even know where to start. Fine, the seals. Any one of these seals by itself is like starting the drive from your own five-yard line. The three together is handing the ball to the other team and carrying them into the end zone. You’re not into football metaphors? OK, a seal crammed full of text like “National Intellectual Rights Coordination Center” is the design equivalent of dividing by zero. All three is taking the limit of bad design as it approaches zero and it evaluates to negative infinity. Math isn’t your thing? No sweat—what I said doesn’t make sense anyway. The point is, the seals are ugly.

But they’re your logos, you say? I feel badly saying this, but they look like someone just slapped them together at 4PM on Friday after a lunchtime happy hour. Take the right one. It says, “Protection is our trademark.” I’m not a IP genius, but it seems to me like if protection really is your trademark, and you want people to take it seriously, you need to use that symbol. Like “Protection is our trademark™” or maybe “PROTECTION™”. But since you’re not actually selling anything or engaging in trade, maybe it would be more accurate to say that protection is your service mark. You don’t see that little SM enough.

As if the seals weren’t texty enough already, someone put “FBI ANTI-PIRACY WARNING” on top of the middle one. Is that part of the seal? Operating under the dubious assumption that there’s any design merit to this logo in the first place, the last thing you want to do is cover up your logo. Can you imagine Nike labeling clothes with its swoosh but then covering half of it up with “GARMENT CARE INSTRUCTIONS”?

Who picked the color scheme for the background? Had this person eaten a hot dog recently? That’s the only way I can figure it out. You can’t even read the complete word “seized” once in this tiled background.

The cited list of alleged crimes at the bottom is a nice touch, but, guys, what are we doing with the typography here? A big block of bold, italic, centered text. I read the first line and I think, “This is heavy stuff—they’re being changed with Conspiracy to Commit” and then I get confused until I realize that it’s Conspiracy to Commit … Copyright Infringement (18 U.S.C. § 371). I know how to continue reading on the next line, but you’re taking some serious liberties with awkward line breaks.

Let’s check out the source of the page:

<html>
<title>NOTICE</title>
<body>
<img src="banner.jpg"/>
</body>
</html>

No JavaScript. No AJAX. No CSS. Not even any tables. The image doesn’t have ALT tags. Maybe you’re not worried about Google indexing this page, or visually impaired people being able to read it, but I hope you realize you are just flushing the last 8 years of the Internet down the toilet. Interestingly, you went with the trailing slash that closes empty elements in XHTML but the DOCTYPE is…nothing. Whatever—this stuff is for nerds.

What we need to focus on is what a colossal missed opportunity this is for you. MegaUpload is down and the notice on the site is getting tons of exposure and when you go there it’s like you’re stuck watching the beginning of a movie forever, or at least that’s what it seems like for those people who paid for the movie and have to watch the FBI reminder to pay for the movie.

You must plan these operations, right? I mean, it’s not like you just randomly seize private property on a whim. This is a failure of project management. You can’t just bring in a designer at the last minute and expect them to polish your design turd. This is your chance to shine. Go wild. Animation, maybe a Matrix-style flow of numbers in the background. Ominous type. Here are some ideas:

  • The user goes to MegaUpload. The site looks normal. Suddenly, the eagles from your logos swoop in and the cool one with the arrows in its feet starts attacking the site while the other one hangs a banner over it that says “Seized by the FBI” and then jail bars drop down over the entire site.
  • The user goes to MegaUpload. The screen is filled with static like an old television. Then it looks like the screen is flipping through different TV channels. They’re all static. Finally, you get to a channel with a retro-looking message: “Seized by the FBI”. The retro part here probably plays to your design strengths.
  • The user goes to MegaUpload. The site is covered with sheets of brushed aluminum that look very heavy duty. Etched into the aluminum is the message: “Seized by the FBI”.
  • The user goes to MegaUpload. It says “HTTP Error 460” (this doesn’t exist—you would be making it up): “Seized by the FBI”.
  • The user goes to MegaUpload. A video of Rick Astley singing “Never Going To Give You Up” starts playing. When the video finishes, it fades out and is replaced by the text “Seized by the FBI”.
  • The user goes to MegaUpload. Suddenly, a S.W.A.T truck drives onto the screen. Fighter jets fly overhead. Missiles, bombs—BOOM—the screen explodes. DOM elements lie in a heap at the bottom of the screen. Smokes rises from the ashes and all of a sudden you realize it’s forming words: “Seized by the F.B.I.”

There are probably jQuery plugins that do all these effects already and you could use those as framework to build on. So dust off your copy of Photoshop. Use the mosaic filter. Add some lens flares. Watch Sneakers and Hackers and The Net and The Matrix and Tron and WarGames. Stay away from Papyrus. Then go and take down MegaUpload and put up something amazing. This is your moment: seize it.

Seen through the lens

I took this photo of a red panda at the San Diego zoo last month. Notice anything funny about it?

Red Panda at San Diego Zoo

Every person looking at the panda, this photographer included, is seeing it through the lens of a camera. Or on a smartphone LCD screen. It makes you wonder why we are so intent on capturing a moment for posterity that we may never have really seen in person.

Best of Chile

So you know how some musicians won’t have any new good songs in awhile and then they’ll release a greatest hits album just to cash in? Anyway, no reason.

Last week yet another friend told me he’s traveling to Chile, news that makes me simultaneously jealous but excited that he’ll get to experience one of my favorite places. Whenever I hear about someone visiting Chile I want to dispense all of the peculiar observations and advice—much of which is probably now outdated—that I accumulated in the years that I was there. I’ve written a bunch of one-off emails with shameless linking to my blog, so I thought I might as well collect those links here.

Destinations

Owing to the country’s slim figure, traveling in Chile is mostly movement along a single axis: north or south. Busses run up and down the country in three classes, normal, semi-cama, and cama, with increasing prices and degrees of seat recline-ability. I wasn’t living in Chile to travel, but I was fortunate to end up seeing many destinations anyway. Here are a few I wrote about:

  • Chiloé. A magical island at the end of the Pan American highway, well known for its seafood.
  • Elqui Valley. A agricultural valley that is the source of most of Chile’s pisco and the resting place of Chile’s first Nobel Laureate, Gabriela Mistral.
  • La Serena. A charming city in the Norte Chico with more than two dozen churches and a moai from Easter Island.
  • Torres del Paine. A national park deep in Patagonia, at the far southern tip of the country.
  • Valparaiso. The San Francisco of Chile.

Many people also rave about San Pedro de Atacama, a small town by the Valle de la Luna in the Norte Grande.

Culture

  • The Dieciocho. Chile’s national holiday is September 18, just as the cold winter is departing. See also a description from 2006.
  • Music. A collection of songs from Chile’s folklore tradition including groups like Inti-Illimani, Los Jaivas, and Illapu. My favorite is Lejos Del Amor.
  • Pisco sours. Pisco is the national liquor, pisco sours are the national cocktail. Also common is a piscola: pisco + Coca-cola.
  • English in Chile. The proliferation of English in Chile manifests itself in funny ways.
  • Currency. $100 for an ice cream cone, $200 for the city bus, $1,500 for lunch, and $20,000 for a pair of pants?
  • September 11. Many years before September 11 became the day of the 9-11 attacks in the U.S., it marked the military coup in Chile that lead to Pinochet’s dictatorship.
  • Pinochet’s death. Chile’s former military dictator died while I was living there.

Observations and Oddities

  • Waiting in line. Not all countries treat lines with the respect they deserve.
  • The triple caja. The Chilean system for making purchases in three easy steps. It’s in use at the Casa Royale.
  • Ice cream. The Chilean summer practically force you to subsist on ice cream.
  • Shopping on busses. No need to go shopping in Chile—just get on a bus.
  • Chile is for lovers. The bar for acceptable public display of affection is rather lofty.
  • Calefóns. Instant water heaters are more common in Chile than the U.S.
  • Street graffiti. Where else can you see stenciled art featuring Mr. Spock, Twiggy, and Waldo?

Spanish Lessons

If you are planning on visiting Chile for more than a few weeks and you speak Spanish, you absolutely must get a copy of How to Survive in the Chilean Jungle. It’s the definitive guide to the cornucopia of Chilean slang and expressions.

These aren’t real language lessons. They’re just my screw-ups. Maybe they’ll make you feel better about your own. Whatever you do, no matter how old you are, remember that you only have one ano.

If you’re going to Chile, I hope you find something interesting here to get your excited for your trip.

"Unboxing the iPad Data," Deconstructed

Yesterday John Gruber linked to an infographic, “Unboxing the iPad Data” by John Kumahara and Johnathan Bonnell. In terms of graphic design it’s visually pleasing, but it falls short in a few areas and highlights common challenges in designing infographics. These are problems that occur all the time in visualizations, so let’s see what we can learn from this example.

I know it’s easy to misinterpret criticism, so I want to emphasize that these are comments about this particular graphic, not about the authors’ skills or ability.

Numbers

People understand numbers. So when you are evaluating a visualization one of the most important questions is whether the graphic is better than just the numbers. The most successful visualizations show trends, outliers, and insights that a table of numbers wouldn’t.

In some places “Unboxing the iPad Data” clearly shows the numbers of interest. In others, it obscures them for the sake of design.

Display of numbers: 3,122 apps in the store, 300,000 devices sold, 1 million apps sold

The fact that Apple sold 300,000 devices and 1,000,000 applications in the first weekend is a big deal—so these should be big numbers. Instead you have to read the fine print to see that 1 actually means 1 million.

Equally large are numbers that few people care about, like the number of respondents or the specifics of the Likert scale used.

7 point scale, 2,176 audience polled

When the numbers speak for themselves, rely on them without decoration. Clearly show what is important.

Colors

Certain aspects of color are a subjective matter. One designer thinks this shade of red is the right choice; another thinks it’s ugly. But there is a science to the perception of color. We know that some colors catch people’s eyes more than others. I would argue that these pie charts would be more readily perceptible if the colors were swapped.

Small pie chart

The intense saturation of the light blue makes it look like it is highlighting something. Here the portion of interest is the small white wedge representing 15%, but the white is overpowered by the blue.

(There is the separate question of whether these pie charts help us understand the difference between the 8% and 15% range represented in the left-most column. The small pie charts are attractive, but does this small multiples grid of pie charts help the viewer understand this dataset better than a table of these numbers alone?)

A similar issue affects the bar chart. Here the viewer must compare between likely (represented by white) and unlikely (represented by blue). Again, the blue stands out and draws the user’s attention.

Number of tweets about the iPad

A minor detail in the bar chart is the orientation of the text. In the U.S., we are more comfortable turning our heads right to read things instead of left. Think of a bookshelf—how do you turn your head to read the books’ titles? My preference (preference!) would be to rotate the labels on this bar chart 180°.

Meaning

Designers must be careful that their infographics accurately depict meaningful information. Here, for example, we see that the peak rate of tweets about the iPad was 26,668 in an hour.

Number of tweets about the iPad

The depiction juxtaposes this number against a timeline that suggests the peak occurred between 11:00am and 12:00pm. If this is the case, then the segment should be labeled so that the viewer can learn this readily. On other hand, if we don’t know the time of the peak, then this illustration is misleading because it implies a fact where there is ambiguity.

The segment of this infographic that depicts the cost of apps for the iPhone and iPad is less clear still.

The accompanying text reads:

The other notable difference between the iPad and the iPhone, are the app prices. The average price of the initial iPad apps ran around $4.99 (according to Mobclix) while the iPhone apps averaged a steady $1.99.

I’ve looked at this pie chart for some time and I can’t figure out what it is showing. The ratio of average app price to the total average app price? Even if that were the case, 5/7 is 71% and this chart is split into 60% and 40% segments.

Area

There are a variety of visual variables a designer can use to encode a given set of data. Among these are length, position, angle, area, color, lightness, and others. Some of these are better suited to certain kinds of data than others, and some are more readily perceptible than others (see Cleveland and McGill’s “Graphical Perception” for extensive details and experiments).

Sales map

Look at this area comparison of percentage of iPads sold. Before we even consider the accuracy, look at these two circles and ask yourself how much bigger is circle B than circle A? Go ahead, just type your guess in the box.

Two circles

The circle on the right is times bigger than the one on the left.

The area of the circle on the left is 1075 pixels (d = 37, r = 18.5, A = 1075 px) and the circle on the right is 7390 pixels (d = 97, r = 48.5, A = 7390). That's 6.8 times bigger.

People are much better at comparing length and position than comparing area. This is a very common mistake (one I’ve made myself). Before you represent a variable with area, you should consider that you may be handicapping people’s ability to compare the data.

Area is hard to understand, but it’s hard for designers to get it right as well. Consider the legend for this map:

Area Legend

Are these circles the right size? Let’s construct a table and find out:

Nominal Size Diameter Radius Area × 1%
1% 22 11 380 1
5% 70 35 3848 10
10% 102 51 8171 21.5
20% 160 80 20106 53

The rightmost column shows the area of the circle compared with the area of the 1% circle. It turns out that the area of the 20% circle is 53 times bigger than the area of the 1% circle—more than 2.5 times bigger than it should be. Comparing areas is hard; it’s harder with an inaccurate legend. The difficulty of accurately representing area is another reason to avoid using it.

Maps

Maps are such a common form of visualization that we use them even when they are not helpful. On top of that, they’re hard. Maps’ static nature make it hard to show important dimensions of data.

The size of maps is fixed, which can be at odds with what your are trying to communicate. In the map shown above much of the interesting data is crammed into the northeast because that’s where those states are located. Meanwhile, a bunch of sparsely populated states in the northwest of the map use up space without communicating anything.

Data on maps is constrained by realities the map itself cannot express. There’s no convenient way to show population data. Does California have a giant circle because Californians buy more iPads than their counterparts across the country? Or is it because California has more people than any other state?

Here the map isn’t clearly better than just the numbers. A table listing the sales numbers for each state, possibly along with the per capita sales per state, would express the point with greater clarity and more succinctly. In the end, that’s the goal, right?

Greasemonkey & jQuery

I taught a class this past fall where we used Greasemonkey as a tool for building prototypes of new browser functionality. We also used jQuery extensively to make JavaScript in the browser simpler. There are some tricks to getting the two to work together that I’ve been meaning to share.

Loading jQuery in a Greasemonkey script

Simply loading jQuery within Greasemonkey hasn’t always been straightforward. I think they should just bundle jQuery with the Greasemonkey package since just about everyone is using it already, but that’s a separate issue.

The old way to include jQuery in your Greasemonkey scripts was to add a <script> tag to every page you visit linking to the jQuery library. Although this works, it’s a clunky solution. It introduces timing issues: since you can’t be sure when the script would load, you have to poll continually, checking to see if jQuery has downloaded yet. Once you detect that jQuery is available, you can run your script. This approach also might clobber other JavaScript running on the main page (like the Prototype library) before you have a chance to call jQuery.noConflict.

Fortunately, later versions of Greasemonkey made this hack unnecessary by adding the @require attribute to scripts. When you install a Greasemonkey script that has an @require statement, the listed resource is downloaded once and included in the script as if it were pasted directly into the document. Unfortunately, there’s a small stumbling block for people testing their scripts: the @require statement is only executed when you install a script. This means that if you create a new Greasemonkey script in Firefox, add the @require line, and save your file nothing will happen. You have to uninstall your script and reinstall it because @require is only processed at installation. Once you do this, you can use jQuery all you want in your script. Except for…

jQuery AJAX and Greasemonkey

By default, jQuery’s helpful AJAX methods like $.get and $.post don’t work in Greasemonkey. jQuery acts as a wrapper around browser’s varying implementations of XMLHttpRequest (XHR), which is what makes AJAX possible. In a Greasemonkey script you don’t have XMLHttpRequest. Instead you get GM_xmlhttpRequest. You can use jQuery’s .ajaxSetup() to specify a different object for requests, but GM\_XMLHttpRequest actually operates differently than a normal XHR.

When you create a new XMLHttpRequest you get an object that you can use to set options like the URL, HTTP verb, callback functions, and so forth. Once everything is set up, you start the XHR with the .send() method. With GM_XMLHttpRequest, you set all these options when you create the object because it sends immediately when you create it. In order to use GM_XMLHttpRequest with jQuery, we need a way to encapsulate its functionality. This script does that:

// Wrapper for GM_xmlhttpRequest
function GM_XHR() {
    this.type = null;
    this.url = null;
    this.async = null;
    this.username = null;
    this.password = null;
    this.status = null;
    this.headers = {};
    this.readyState = null;

    this.open = function(type, url, async, username, password) {
        this.type = type ? type : null;
        this.url = url ? url : null;
        this.async = async ? async : null;
        this.username = username ? username : null;
        this.password = password ? password : null;
        this.readyState = 1;
    };

    this.setRequestHeader = function(name, value) {
        this.headers[name] = value;
    };
    
    this.abort = function() {
        this.readyState = 0;
    };

    this.getResponseHeader = function(name) {
        return this.headers[name];
    };

    this.send = function(data) {
        this.data = data;
        var that = this;
        GM_xmlhttpRequest({
            method: this.type,
            url: this.url,
            headers: this.headers,
            data: this.data,
            onload: function(rsp) {
                // Populate wrapper object with returned data
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            },
            onerror: function(rsp) {
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            },
            onreadystatechange: function(rsp) {
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            }
        });
    };
};

Once we have this wrapper object, we need to tell jQuery to use it instead of the standard browser XHR:

$.ajaxSetup({
    xhr: function(){return new GM_XHR;}
});

If you include this code in your Greasemonkey script (or @require it—see above), you will be able to use $.ajax, $.get, and $.post in your scripts. I’m not sure about $.getScript, and I know that $.getJSON will often fail.

Cross-site scripting with Greasemonkey and jQuery

The short story: using $.getJSON in Greasemonkey will fail anytime you request a resource on another site. To avoid this, just use $.get and parse the returned JSON yourself (using eval() or—better yet—JSON.parse() (see also json2.js).

Update 2010-04-11: jQuery 1.4 added the $.parseJSON method which is what you should use to handle JSON responses (via Paul Tarjan).

For cross-domain JSON requests jQuery uses <script> tags and JSONP as a workaround for the same origin policy. JSONP works because the responding server wraps its response with the name of a user-defined callback function. Instead of returning:

{"param": "value"}

the server will respond with

callback_function_name({"param": "value"})

where callback_function_name is something jQuery creates automatically. When you use Greasemonkey, jQuery defines this function in the scope of the Greasemonkey window, but the browser looks for the function in the main window’s scope and you get an error. The solution is simply to avoid $.getJSON and use $.get instead. Since GM_xmlhttprequest doesn’t have to abide by the same origin policy you don’t need JSONP.

I hope these tips are helpful for people familiar with jQuery who want to try their hand at making a Greasemonkey script.

Sather Tower × 4

Four photos of Sather Tower
Clockwise from top-left: A foggy afternoon on Feb. 18; from the main staircase of South Hall on Feb. 24; nighttime on Mar. 1; and the west facade before sunset on Feb. 25.

Sather Tower, also called the Campanile, is at the center of UC Berkeley’s campus. It’s right across from South Hall, where the School of Information is housed, and where I spent most of my time. These are four pictures I took of Sather Tower in a two-week period.

Conversation with an Anthropomorphized Twiki

This semester I’m taking a class on user interface design and development. One common technique we’ve covered is think-aloud studies, where you get a user to explain what they’re doing aloud as they do it. This gives you some insight into what the user is thinking about your interface, and why they choose the options they do.

For this class, we post our assignments to a class wiki run on Twiki. Twiki is an adequate piece of software, but it has some rough edges. I got frustrated trying to attach images to my assignment, so I wrote a think-aloud dialogue of my interaction with the software.

Insert/edit image to Twiki page
This is the popup dialog to insert an image into the current page. You have to enter the image's URL or select an image that you uploaded before getting to this page.

Ryan: Great, I’m just going to upload some pictures to my page. I’ll just click the insert picture button.
Twiki: Sure thing. What’s the URL for the picture that you want to insert?
Ryan: Uhh…I don’t have one. I mean it doesn’t have a URL. Err…not yet?
Twiki: No problem. You can select a picture that you’ve already uploaded.
Ryan: I haven’t uploaded any pictures.
Twiki: (silence)
Ryan: So where do I go to upload a picture?
Twiki: (silence)
Ryan: Can I do it anywhere on this page?
Twiki: You can attach pictures to a page…
Ryan: Great—that’s what I want to do.
Twiki: …but not when you are editing the page.
Ryan: OK, so I’ll save this page and come back later to finish editing after I upload my pictures.
Twiki: Just click the attach button.
Ryan: OK, so now I can upload my pictures on this page.
Twiki: Picture.
Ryan: Picture?
Twiki: Why would you want to upload more than one at a time?
Ryan: Oh, I don’t know, I just have a few I want to put on this page.
Twiki: One. Picture.
Ryan: Fine, I’ll upload a picture and click Attach and then repeat the process for each picture that I have.
Twiki: Good.
Ryan: This one picture that I uploaded, though. It’s 2000 pixels, which is kind of large to display in a browser window. Could you do something about that?
Twiki: That seems like something you should have though about before you uploaded it.
Ryan: I mean, can’t you resize it or something to make it the right size for my wiki page?
Twiki: No.
Ryan: OK, hold on, I’ll be right back. I have to go resize these images by hand.
Ryan: Back! Now I’ll upload these three…oh…right…Attach, upload, save, attach upload, save, attach, upload, save.
Twiki: Good work.
Ryan: Now let’s put these images into my wiki page.
Twiki: Image.
Ryan: Image?
Twiki: Well, you have to do it one at a time.
Ryan: (sigh) You’re the wiki for a class on usability?
Twiki: Apparently so.
Ryan: Is this some kind of joke?
Twiki: No.
Ryan: This is ridiculous. I couldn’t design a less usable wiki if I sat down and tried to.
Twiki: Now you’re just exaggerating.
Ryan: And don’t even get me started on your “WYSIWYG” editor. It’s like you vomit on my text whenever I’m not looking.
Twiki: Please be reasonable.
Ryan: I AM BEING REASONABLE. And what kind of name is “Twiki”? Even the pronunciation is unusable! I’ve been speaking English for decades and I can’t decide how to use your name. Tee-wiki. Twick-ee.
Twiki: It’s my name.
Ryan: It’s absurd.
Twiki: You just wish I was Wikipedia.
Ryan: No, I don’t want—
Twiki: You wish I had millions of contributors and video and embedded SVGs and links everywhere.
Ryan: Really I just want you to be easier to—
Twiki: (sobbing) WHY CAN’T YOU JUST LOVE ME FOR WHAT I AM?
Ryan: I’m sorry. I didn’t mean to—
Twiki: You can be so cruel.
Ryan: I’m sorry. I’m sorry. I’m sorry. (softly, not realizing this is a bad time) It’s just that, on a lot of other wikis—not that I want you to be exactly like them—but it’s just that I could probably have uploaded my pictures in the time it took me to write this. But with you…
Twiki: (muffled sobs)
Ryan: …
Twiki: …
Ryan: You know what, forget I said anything. I’ll just upload the photos.

Is Online First-come, First-served Fair?

President Clinton is speaking at UC Berkeley next week. Tickets were available to students who filled out an online form starting at 7:00am this morning. Predictably, at 6:59am the website offering tickets looked like this:

Four different server errors

Judging by messages on Twitter, hundreds of other students had the same experience. At 7:39am, tickets were sold out.

Despite being awake and online at the right time, I never even saw the form. I’m not upset or tremendously disappointed, but this experience started me thinking about the process of distribution. This is the fourth or fifth time I’ve participated in an online offer in the last year, and they always leave me with the sense that they’re not fair. In this situation I think fair means that every person who is eligible to receive a ticket and wants one has an equal chance to receive one. 1

The issue is that this system relies on first-come, first-served rationing (FCFS) for a scarse resource. FCFS is pretty well understood in the physical world. We know that people can only be in one place at a time: each person gets a single spot in line. Whoever shows up first, or camps out overnight, will get to see the movie first. Incidentally, these practices are exactly why organizers want to move to an online system. Real-world FCFS means large, unwieldy crowds and groups of students who set up tents on campus.

An online version of first-come, first-served solves these problems: when people vie for a resource online (on the Internet, or calling by phone), they don’t form massive crowds outside your door or camp on your porch. Without the restrictions of the physical world, however, FCFS is different online. I can get 10 places in line just by loading a page in my browser 10 times. If I am handy with programming, I might be able to get hundreds of places in line by writing a script to connect on my behalf. If I have a slow Internet connection, or I’m positioned at a certain point on the network, I might never be able to get in line because the server is too busy. In short, online FCFS has a chance at being fair only if your servers can handle the load and you can prevent people from taking multiple places in line.

A natural next question might be how you can prepare your servers for the demand created by an event like this. People who know a lot more than I do about IT might suggest things like caching, replicated servers, faster machines, and more memory. But this misses the real problem: online FCFS is not a good approximation of fair.

A better alternative is an online lottery. Instead of awarding tickets based on whoever arrives first, you provide a window during which anybody can obtain a lottery number. Then you randomly select people using a computer and give them tickets. This system solves the same problems that online FCFS does: there are no large crowds and no camping out. It also solves some of the problems with FCFS. Since you can get a lottery number at any time during the window, network traffic will be spread out across this time. And since awards are based on random chance,2 a lottery is more fair because every ticket holder has an equal chance.

Of course, there are some similar problems. If the window to get a lottery ticket isn’t large enough everyone who wants a ticket won’t have a chance to get one—not fair. Also, the problem of multiple people in line is now replaced with the problem of multiple lottery tickets. People will find ways to get multiple lottery tickets, increasing their odds of being selected. But I don’t think that ballot stuffing is a much greater problem than having multiple spots in line. With a lottery system you can deal with ballot stuffing on your own time instead of in real time.

In the controlled circumstances of the Clinton ticket giveaway, stuffing is nearly impossible. Each student has a unique student ID number which can be checked to ensure that each person gets only one lottery number. And since each student can only obtain a single ticket for this event for personal use (confirmed with photo ID when claiming the ticket), people cannot use their friends to get extra lottery numbers.

The only downside to a lottery is that it requires more work. With online FCFS you can just tell people to come, watch your server buckle under the load, and eventually give away all the tickets. Online FCFS is also fine if you’re not interested in fair. I don’t mean this in a pejorative sense. If you’re selling concert tickets, you get paid no matter who buys them; there’s no obvious incentive for fair distribution.3

Given the detailed instructions for distributing tickets, it seems like Berkeley does want to be fair about the process. Next time, I suggest they consider a lottery.


1 Of course there are other definitions for fair. If you understand fair in a different sense (like “following an defined process for distribution”) then this system may well be fair. I am using fair as equitable because I think that is a popular understanding of fair.

2 Computers only generate pseudorandom numbers, but these are random enough for our needs.

3 There might be external repercussions for distribution using a process that isn’t perceived as fair. The New Yorker ran an article last summer, “The Price of the Ticket” addressing this issue as it applies to Ticketmaster and fishy practices selling tickets.

A Nook of My Own

This past Christmas my future in-laws gave me a lovely gift, the nook, Barnes & Noble’s new electronic reader. I’ve decided to use the nook to conduct a semester long experiment, where I use it for as much of my reading as possible.

Even with the imminent arrival of the Apple Canvas, I’m excited about testing the nook for a few reasons. First, I’m hoping that reading on a reflective screen like the nook’s will be easier on my eyes. Every semester I have at least a few hundred pages of reading, nearly all of which is only available online. With the nook I have another alternative besides printing everything out or reading on my computer screen, which is hard on my eyes.

Second, I think that having a device just for reading will make it easier to stay focused on the task at hand (command-tab is my worst enemy). Some people think that single-purpose devices are too limited to become popular. For my money, I think they’re right—multipurpose devices will probably be more popular, but a smaller market doesn’t mean the nook (or Kindle) can’t be a commercial success.

While I’m testing the nook over the next few months I’ll write up my thoughts. Here’s my first batch.

Out of the Box

nook out of the box
The nook ships with a message on its screen which lasts indefinitely because of the E Ink technology.

The nook arrives in an attractive clear plastic box that feels quite hefty. When I pulled off the cardboard cover from the box there was a message welcoming me to the nook. This was a nifty touch that actually tricked me: I thought the message was printed on a clear film that I would have to pull off the screen, but it was displayed on the screen itself. One of the advantages of the E Ink technology is that it remains on the screen indefinitely without consuming any power, so they display this message at the factory and it stays there until you see it. I had to fumble with the box for awhile to get it open and remove the nook. The packing is somewhat excessive, as indicated by the two pages of instructions on how to unpack your nook. If I need seven steps to get your product out of the box, you packed it wrong.

Free “Content” and Book Samples

Getting the nook up and running was painless. After charging the device for a few hours I created an account at Barnes & Noble and entered my username and password into the nook. Then I went looking for something to read.

As a grad student I’m not exactly swimming in a pool of gold coins, so the first place I landed was the selection of free ebooks that you can download from Barnes & Noble. After browsing through the available titles it’s pretty clear these books are free because no one in her right mind would pay for them. Here are some standouts in the lineup:

Apparently this is the best Barnes & Noble can do in the free department: vampire romance short stories and gems about the city where “what happen’s in Vegas, Stay’s in Vegas [sic].” Instead of offering disposable books, why not offer, say, the top 10 books of 2009 for free? The cost to Barnes & Noble should be minimal given their role as a distributor. Even if it isn’t, this is the sort of thing that would create an out-of-the-box experience that people would rave about. To their credit, Barnes & Noble preloads the nook with three more durable books: Dracula, Little Women, and Price and Prejudice.

Barnes & Noble says they let you download free samples of any book in their online store to decide if you want to buy it. This is a nice analogue to thumbing through the book in the store before you take it to the cash register. I downloaded the free sample of Michael Pollan’s The Omnivore’s Dilemma. The first 28 pages (which are shorter than a ordinary book page) were the cover, copyright page, table of contents, acknowledgment, and excerpts of reviews from critics. Pollan’s introduction finally began on page 29 and it continued to page 33 where it ended unceremoniously mid-sentence. I fared better with a sample of Dan Brown’s The Lost Symbol, which was 114 pages long, although I still had to flip through the first 20 pages before I got to the preface.

Academic Papers on the Nook

Eventually I’ll buy a book and read through it on the nook, but one of the main reasons I’m interested in the device is to read papers for my courses. This week I had to read the classic “Tussle in Cyberspace” again, so I downloaded the PDF and simply copied it to the nook’s internal storage. When I selected the paper from the “My Documents” menu there was a small problem:

PDF shrunk to fit nook screen
Once you shrink an 8.5″ × 11″ PDF to fit a 6″ E Ink screen a column of text is just over an inch wide.

PDFs have a fixed size, and the double-column format common to research papers doesn’t fare well when shrunk, although this might be a viable option on the pricy Kindle DX or pricier still QUE (what is it with Barnes & Noble and strange capitalization?).

The solution is to convert your PDF into an eBook format that supports reflowing, adjusting the size and placement of the words to a specific device’s screen. I used calibre to convert my PDF to an ePub file, and then uploaded that to my nook. Calibre correctly converted the multicolumn PDF, which was a problem for a web-based conversion tool that I tried. Without much trouble I was able to copy the converted version to the nook. After this, I had mostly what I wanted. There are still some glitches in the reflowing process, however, which leave unsightly gaps and unnecessary hyphenation caused by line breaks in the original PDF. I think I can get better results if I do some tweaking.

Button Placement

Awkward button placement on nook
It feels like the next page and previous page buttons should be flipped.

The only remaining comment I have about the nook is that I think the paging buttons should be reversed. On either side of the nook there are large buttons that page the book you’re reading forward or backward. When I hold the nook firmly in my hands, I find that my thumb is directly above the back button. Maybe they did user testing and found that the actual placement is better for more people, but for me it feels wrong. The top row should be flipped with the bottom row.

Closing Thoughts

Despite the rough edges in the conversion process, I’m looking forward to doing my reading on the nook for the next few months. If I find a good workflow for converting PDFs, I’ll write a walkthrough of the process and share it. In the meantime, I’ll be curled up reading a copy of nudecelebspacevampire.jpg…or something like that.

Hello World! from Arduino

I’m taking an exciting class this semester called Theory and Practice of Tangible User Interfaces. Today was our first lab class where we got our box of inputs and outputs, a breadboard, and an Arduino microcontroller. With these tools I have a way to sense and control things in the physical world with a normal programming environment, which is a step towards the “tangible” interfaces from the class’s name.

TUI, as students call the class, culminates in a final projects that in past years have been a real showcase of creativity: the bubblegum sequencer, Jug Hero, blowing virtual bubbles, and others. I haven’t had my innovative and great idea yet, but since we just got our kits today, I have a bit of time.

Now the main task is to get working with the new hardware and development environment. The language you use to program the Arduino board—also called Arduino—is based on C, which is a more low-level language than I have been using recently. (I spent the summer writing Javascript and Ruby, both of which are very high-level languages). Anyway, typically the first task in any programming language is getting the computer to display the message “Hello world”.

My Physical Computing textbook explains:

Anybody who has learned how to use a couple of different computer systems or programming languages will tell you that the hardest part is getting a computer to do anything at all. … In software, it’s traditional to prove your mastery of any environment by getting your program to say “Hello World!” The “Hello World!” message of the microcontroller is a blinking LED. Once you get the microcontroller to blink an LED, it’s all downhill from there.

But a simple blinking LED didn’t seem like an appropriate start, especially since the newer Arduino boards are programmed at the factory to blink any connected LED. Once I finished fumbling with my breadboard and resistors and finally plugged in all the parts, my light started blinking automatically without me doing any programming at all. I decided that a better start would be to have my light blink “Hello world” in Morse code.

Like almost everyone, I know only enough Morse code to do SOS, and it turns out I was doing even that wrong. Whenever I tap out SOS, I put longer delays between dashes than dots. That’s wrong—the delay between symbols that form a letter is supposed to be constant. The rules for timing are systematic:

International Morse code is composed of five elements:

  • short mark, dot or ‘dit’ (·) — one unit long
  • longer mark, dash or ‘dah’ (-) — three units long
  • intra-character gap (between the dots and dashes within a character) — one unit long
  • short gap (between letters) — three units long
  • medium gap (between words) — seven units long

I copied this timing information and the codes for all the letters from Wikipedia and implemented them as my first Arduino program. It took a bit longer than I expected because I’m not that familiar with C. Debugging was also tricky because I realized I had no idea what the Morse code for “Hello world” was supposed to look like! While I was debugging, I had to use SOS to see if everything was working properly.

Here’s what the end result looks like:

If you want to see the code behind my Morse, here’s the source. It’s messier than I would like because I couldn’t get sizeof() to operate as I expected.

What is bad design?

Bad design is ugly, it is frustrating, it doesn’t create joy, it is not well considered, but above all bad design wastes time. This isn’t to say that design is just about saving time: Good design can make you slow down, it can make you think, it can be about things besides efficiency. Good design makes you think as much as you should, but no more.

USPS Form 3849
This form is about the size of an index card.

I’m writing after a particular encounter with time-wasting bad design via the U.S. Postal Service’s form 3849. When a package cannot be delivered, the mail carrier leaves a orange slip that lets you request redelivery or go to pick up the package at the post office.

My girlfriend wasn’t home when the postman came earlier this week, so I went to pick up a package for her. She signed item 2 on the form, which is labeled “Sign here to authorize redelivery or to authorize an agent to sign for you.” I went to the post office, waited an hour, presented the signed slip, and was turned away: my name didn’t appear in the space for the agent’s name. “What?” I asked, “what space for the agent’s name?” “Right here,” the clerk told me, “it clearly says to write the agent’s name right here.”

Location of agent's name

She was right. The words on the form clearly indicate that the agent’s name should be entered in the upper-right corner. The form’s visual language, however, contradicts these instructions. Once you follow the numbered list and sign in section 2, it doesn’t look like there is anything else you have to do. The space for the agent’s name is so tiny that a glance at the form would never suggest that you have to write anything there. This is bad design. Not only does it waste time because a person has to think too much about filling it out—Look at the instructions in section 1, for example, which tell you to fill out section 3, then come back to section 2—but it also wastes time when people wait in line with an improper form.

In my case, it wasted an hour. That’s bad design.

Live Blogging the I School Masters Presentations

3:58. As a culmination of two years of study at the School of Information, masters students present final projects that represent a significant work based on learning in the classroom. Next year I’ll be giving one of these presentations, but this year I’m just along for the ride.

The first step is a lightning round where each group of students get two minutes to present an overview of their projects. The projects are separated into three tracks.

Love to chat, but it’s time to get started…

4:06. Shawna, Hazel, Aylin start off with a dramatic sktch about their “Doesn’t food just come from a package?” “I feel like every day there’s another food out there I can’t eat because of salmonella and e. coli. … all I want to do is buy healthy food that represents my values.” Squash and Vine, a new online social network that helps people connect with their local food community.

4:07. Anuradha Roy on website metadata. Research project demonstrating the effects of sites publishing site metadata in an open format.

4:09. Srikanth Narayan is looking at how to manage large-scale conversations and discussions online.

4:10. Jon Hicks and Xiaomeng Zhong developed Hyoumanity to “flip the incentives of the medical diagnostic process.”

4:12. Courseland from Mike Lee and Seung-Hyun Rhee. “Registering for courses for should be easy, right?” Laughter from audience. Actually, it takes about seven websites to get all the information to make it happen. It’s a difficult process, and past attempts to fix the process have failed. Instead of a top-down approach, Courseland proposes centralizing the data in one place allowing developers to create applications.

4:13. Ashwin Matthew, a riveting tale called “Pass the Packet, Please?” about the social organization of network administration. “The network is just a cloud, right?” Ashwin is looking at the network administrators who make the system tick—how do they coordinate with one another?

4:14. Knowledge Compass from Kathleen Lu and Ruchi Kumar. A project for the School of Information itself. How do schools reach out to alumni, offer career guidance, etc.?

4:15. Nick Rabinowitz did work on OCHA SITREP, the documents used by the Organization for the Coordination of Humanitarian Efforts. For the last year, Nick and other students the School of Information have been looking at the situation reports created and used by this global community.

4:17. Ashkan, Josh, and Travis’s project is KnowPrivacy, looking at the differences between people’s expectations of privacy online and actual practices. In their research, they examined privacy complaints to the FTC, data on third-party tracking, and information about affiliates.

4:18. Devin Blong and Jon Breitbart worked on The Virtual Shelf, a project to create a digital library interface that capitalized on the affordance of the physical world.

4:19. Anirban Sen and Pierre Tchetgen a project focused on ICTD, information and communication technology for developing regions. Past model is based on the view of the developing world as lacking something. The new approach of this project is to look at the richness of these regions.

4:21. Shanna Epstein worked on “Building Collective Memories Online.” It’s like Eternal Sunshine of the Spotless Mind. Well, not quite, but still an important topic for organizations that collect memories online. Questions the democracy of the web.

4:23. Deepti Chittamuru did a qualitative assessment of children in India and use of mobile phones. “Public education falls far short of providing education, especially in rural parts of India.” MILLEE focuses on educational games for children’s learning. Chock full of qualitative methods like participant observation.

4:25. Isaac Salier-Hellendag did “Mapping San Francisco’s Photographic History,” aka “the San Francisco Wayback Machine.” Problems he examined: searching across lots of collections means using lots of interfaces, searches are limited, and there’s no community input. “I know that intersection!” So Isaac tried to solve these problems.

4:27. And that’s the lightning round. We thank the advisors, and now it’s time for a reception and schmoozing before we break out for the full project descriptions at 5:15.

5:07. My classmate Nick informed me that I was doing it wrong. Apparently the latest entries go at the top. My bad. I’m rearranging the entries (Note: now that it’s over, I re-rearranged them in chronological order).

5:11. All the projects are presented in three tracks: Social Networks and Collaboration, Organizational Issues, and Communication and Memory. Unfortunately all the tracks are presented simultaneously so there are some tough decisions to make about which presentations to attend. People are filling out the dance cards in the main foyer and we’re about to get started.

5:13. I’m started in track 3, Communication and Memory, being moderated by Eric Kansa. Apparently we’ll be on a rigid schedule here to keep all the tracks synched up.5:14. The judges are in the room and introducing themselves, all alumni from the School of Informaton, one from 2005 and two from 2004.

5:15. The first presentation is Virtual Shelf by Devin Blong and Jonathan Breitbart. Based on the information search process in the physical library, which plays an important part in information organization and retrieval.

Devin and Jon have been working with the Open Library, a site with the goal of having one page per library. It’s a wiki: anybody can add a new book.

5:17. Looking at physical books on a shelf lets you see all kinds of metadata: title, author, size, color, etc.

5:18. Data is from observing professionals at Berkeley Public Library and UC library system.

5:20. Findings. The role of serendipity is important in physical libraries: “Finding what you don’t expect to find.” Users don’t know how to search. Google has spoiled field-based search, users just look for keywords.

5:22. When people are looking for books about a topic, librarians suggest that they search a card catalog for titles of interest, write down the call numbers, and go look at that area of the shelves. They’ll probably find something interesting there.

5:23. Devin and Jon built their first prototype in Flash and got feedback from the Open Library community. Demo time! You can see a demo at virtualshelf.org. You’ll need Firefox 3 to make this demo work.

5:28. You can search for books, create a custom bookshelf, and organize the books on the shelf in any way. Sort by author, title, even physical characteristics like thickness of the book (find quick reads!). “Can we sort by subject relevance?” a voice from the audience calls out. Librarians in the audience must be a tough crowd.

5:31. The current interface that Jon and Devin have been working on has ditched Flash. Now they’re riding the Javascript train. It’s totally buzzword compliant: Ajax, RESTful URIs, Atom feeds of shelves, etc.

5:33. And we’re done. Question time. “Develop something like CoverFlow?” Currently something like that doesn’t display the physical characteristics of the book. “What do the colors of spines represent?” Subjects, from LOC call numbers or subject fields matched against Amazon’s top level categories.

5:43. Jumping over to the social networks track to Hazel, Shawna, and Aylin’s presentation on Squash and Vine. The final product is a social network designed to connect people creating a “safe and sustainable food system.”

5:46. Problems: Diabetes and heart disease are leading causes of death in the U.S., monoculture in food growing, industrialized agriculture. People are working to combat these trends—independent producers and retailers—but it is difficult to get information to the people who need it: consumers.

5:48. Aylin is telling us about the existing solutions that they looked at, sites like Foodoro, Hyperlocavore, Organic Nation, and Local Harvest. On some sites, information is very static. Other sites are interactive communities, but they’re focused on consumers. The missing gap that Squash and Vine fills is reaching producers and consumers and promoting dynamic information.

5:50. Conducted dozens of hour-long interviews with producers, distributors, and consumers. Producers said that they wanted to focus on farming, but also develop an online presence at the same time. For new producers, sharing information about how to farm was particularly important. Retailers wanted to be able to source food from many producers efficiently—they see themselves as the middlemen between producers and consumers. Consumers wanted to know about their food. What’s the story, what grows when? Not knowing the seasons that certain food grows was an issue.

5:53. The solution: an online community that lets these groups develop relationships over time, low cost and high efficiency.

5:55. Tons of prototype sketches. Dozens.

5:57. Features for producers. Farmers wanted people to know information about them and their location. Farm profile pages, and simple, Twitter-style updates that let farmers give quick status updates about what’s going on. Oh, cool idea: most farmers have cell phones and the idea of providing audio updates from the field emerged. This would let farmers communicate with one another and get advice.

6:00. Retailers don’t have space on their menus to tell interested consumers where food comes from, but Squash and Vine lets them do that. A screenshot shows “Poulet Henry, with carrots at such-and-such farm, etc.”

6:02. For consumers, they can examine the local “food web” and see what’s being grown at farms in the area. They can also follow favorite foods—I’d do peaches, best fruit ever—and learn when they become available.

6:04. They’ve been demoing the web interface, but there are APIs for more open access. Other students have been working on other interfaces, like an iPhone app.

6:06. Question time! By the way, the site is squashandvine.org. “Is the end result just the website?” Well, there’s also a 95 (!) page report.

“What surprised you most about your findings?” Great question—there are always surprises when you actually talk to people. The passion and time producers put into growing food, also the number of logistic steps involved into getting food to market. For example, to sell organic pork, a rancher had to take a pig to an organic slaughter house, then to an organic processing plant.

06:12. Where did the name come from? Well, squash is an American vegetables, one of the three sister crops that Native Americans would grow: maize, beans, and squash. Maize would provide the stalk that beans would grow up, the beans would infuse the soil with nitrogen, and squash would provide the ground cover preventing weed growth. They liked the synergistic connotation of the whole process. Plus, farmers didn’t want to be associated with vegetables that anybody can produce like salad greens.6:15. Jumping tracks again to room 202 where Ruchi and Kathleen are talking up Knowledge Compass. Orient students towards their professional or academic goals. You know, like a compass. I need to sign up with this program.

They’re reading some key quotes from discussions with stakeholders, nice touch.

“I don’t know what courses to take—it’s like a scattershot.”

“I don’t subscribe to any mailing lists and I don’t care.”

“Nobody responds to mailings.”

6:20. Currently people are using a bunch of methods to (try to) keep in touch. Some are top-down, like our internal mailing and grassroots efforts like LinkedIn and some past iSchool projects.

06:22. Two features: course recommender, like Amazon’s book recommendations. You tell it what your career goals are and the system recommends some courses you might be interested in. A mentor matcher, like Match.com minus the dating, that would help students connect with alumni with similar interests to tap their knowledge.

6:25. Competitive analysis across five institutions that offer masters programs. The UC Berkeley School of Information, I Schools at peer institutions, and the Haas School of Business. In almost all areas, the business school blew other programs out of the water in terms of alumni outreach, course guidance, and so forth. What was surprising was that our I School did comparatively poorly against similar programs.

6:28. Kathleen and Ruchi evaluated institutions using Morten Hansen’s framework: hoarding, not-invented-here, knowledge transfer, and search. We even get a plug: Prof. Hansen’s book on this topic, Collaboration: How Leaders Avoid the Traps, Create Unity, and Reap Big Results, was published this week.

6:29. “We shouldn’t assume that technical solutions will actually solve problems.” Nice table of recommendations with the associated barriers that each one reduces. By the way, the slides and final reports are available for most of these presentations, so you don’t have to take my word for it—grab the Knowledge Compass report.

6:34. We’re looking at mockups of solutions. One example is a course recommender that draws alumni job data from external databases like LinkedIn, joins it with internal data about what courses students took, to let you know what graduates in specific fields studied at the I School. Clever use of data from multiple sources.

6:40. It’s break time: more presentations on the 7 spot.

7:02. This session was another tough call, but I’m sitting in on Nick Rabinowitz’s presentation on OCHA Sitrep, in part because he produced fantastic icons for his presentation. I’d also love to see Srikanth’s talk on Large Scale Discussion Spaces.

7:04. This project is like Where in the World is Carmen Sandiego. Nick, past masters students, and two Ph.D. students conducted interviews in New York, Geneva, Nairobi… They’ve been talking to UN agencies and other humanitarian organizations about writing situation reports (among other topics).

7:05. Great quote: many people in interviews said that it was “out of scope” to deal with political and organizational issues, so they just focused on the technical solution.

7:07. Humanitarian crises in 60 seconds: when you have a disaster too big for a country, you have a response that includes NGOs, UN agencies, the Red Cross, other governments, and donors. All of these groups are coordinated by OCHA, who tries to bring information from various groups to a central place for sharing. Agents in the field assemble a report—a sitrep or situation report—and share it with OHCA, which communicates the info to organization headquarters in Europe.

7:14. Sitreps are affected by The Numbers Game. It’s notoriously difficult to estimate the number of people affected by a disaster, but this number is the basis for determine the amount of aid and intervention. Local governments are often a source of distortion of numbers, although the effect can go both ways. Sometimes governments want to show that they have control of a situation, tending to minimize the number of people affected. This can lead to disparities of orders of magnitude (5,000 people affected vs. 500,000).

7:16. Have I mentioned Nick’s icons yet? These are great slides—they don’t duplicate anything that Nick is saying. The slides aren’t available yet, but you can download Nick’s report.

7:18. Last theme, since we’ve just got two minutes left. Clearance, having authorities review a document adds overhead at multiple parts of the process. “In some cases, getting clearance from all the involved organizations could take a week,” though situations may be changing day to day or hourly.

7:22. Potential solutions: 1. make sitreps a closed system, or 2. establish a neutral broker for information, or 3. created a shared space to build consensus in the field about the contents of sitreps.

7:24. Is this as interesting to you as reading a live blog of, say, an iPhone keynote? I’m guessing the answer is a resounding yes. Let’s keep going.

7:26. Oh, nice strategic move: whenever a judge asks a question, start your answer with “That’s a good question.” File that one away for next year.

7:30. Last presentation, this one is KnowPrivacy from Josh Gomez, Travis Pinnick, and Ashkan Soltani. We’re off to a quick start: The FTC is dropping the hammer. According to the FTC commissioner, “this could be the industry’s last clear chance to show that self regulation can work.”

7:33. These guys took a two-part approach, starting with researching user expectations. They studied the FTC database of consumer complaints. The biggest concern consumers had was a lack of user control, followed by issues with public display of information.

7:36. The big winner of the FTC complaints data—the company complained about more than any other—was Zabasearch. A San Francisco Chronicle columnist wrote, “It’s scary what Zabasearch can do.”

7:39. Many companies say they don’t share data with third-parties, but they do share data with affiliates. For example, MySpace is owned by News Corp, which also own Fox, Hulu…and 1500 other companies, where personal data can flow freely.

7:41. Company also track user browsing using beacons, code embedded in sites that reports a user’s IP and other information. Some domains like Blogspot have a hundred or more beacons. Beacons like Google Analytics are common on almost every site. In the top thousand domains, Google is responsible for around 80% of the tracking beacons.

7:46. Time for recommendations. Website owners should give users access to data like credit bureaus, listing all the companies data has been shared with regardless of affiliation. A new standardized term should be mandated for privacy policies. “Users see ‘privacy policy’ and they think, ‘Oh, my privacy’s protected.’” Maybe data collection policy?

7:49. Question time: “How do you plan to tell users what data is being collected if they don’t even know what a beacon or a cookie is?” Like users get a credit report, they could receive a behavioral report about their tracked behavior. And a curveball: “If you connect to a VPN using a wireless network, are you protected from a port scan?” Yowza.

7:55. And that just about wraps up the evening. Unfortunately, for every presentation I went to there were two I didn’t get to, and based on the lightning round, there was a lot of good stuff here tonight. Hope you enjoyed this look at some of the work students at the School of Information are doing.