Featured Posts
June 28 2010


by Hang

I haven’t owned a TV for 8 years. Since the start of college, I have moved 8 times across 3 continents and the thought of lugging around a large black box, optimized for one purpose always had a whiff of anachronism. Don’t get me wrong, I still watched plenty of TV. But it was all delivered via the internet, via both illicit & later, licit means. I cast myself as the new generation of media consumers, untethered from both schedule and selection. Homo media superioris if you will.  In Veetle, I discovered my mea culpa.

It is hard to sell Veetle. I doubt I could sell it to myself. The pitch would go something like “It’s like everything crappy about TV, brought to the Internet”.  Even Veetle doesn’t seem to quite know how to sell itself. Their about page describes it as “provid[ing] the next generation live broadcasting platform that can deliver extremely cost-effective streams at a massive scale with unprecedented quality”.

What this really means is that they’ve built a custom Peer-to-Peer video plugin that allows for the streaming of extremely high quality content without having to pay for expensive servers or bandwidth costs. What this also means is that, being a stream, you cannot pause, you cannot fast forward & you cannot do a thing if the broadcaster decides to take the stream off the air for whatever reason. As it turns out, it is what Veetle cannot do, rather than what it can do, that makes it such a compelling service.

I first discovered Veetle about 2 months ago and, after grumbling about the absurdity of a site that required you to install a plugin to experience it, clicked around for a little bit and landed halfway in an episode of The Big Bang Theory which I hadn’t yet watched. I then proceeded to spend the next 5 hours catching up on the rest of Season 2 of The Big Bang Theory.

Since then, I’ve noticed an increasing amount of my entertainment hours gravitating to Veetle. I have unwatched videos languishing on my hard drive, I have TV shows on Hulu that look super interesting, there are videos on YouTube bookmarked that I’m sure are very funny… but instead, I was watching the last half of Die Hard 4, that really epic scene in Superbad where they destroyed the police car, 3 episodes of the Ali G show and half an hour of many, many random movies, most of which I don’t even know the name of because the broadcaster didn’t bother to fill out a program guide.

This was not good content. This was not even good, bad content. If you had asked me to construct a recommendation engine that would deliver me excellent content, the last half of Die Hard 4 would be pretty far down on the list.

I think, in our desire for optimality, we sometimes lose track of the burden of being optimal. I acquire plenty of content I’m sure will be optimal for me but then, when it comes time for me to consume it, it’s all so overwhelming. I have 465 items in my RSS reader right now that I need to clear by the end of the weekend, I have 8 books stacked by my bedside table that are all 30 pages read, Facebook is an irresistible & unrelenting stream of personally tailored to me content. In this ocean of optimality, Veetle slips up to me and whispers in my ear, “Don’t choose. Let the content come to you and, more importantly, when it slips away, don’t feel guilty for not optimizing away your time”. As it turns out, even as Homo media superioris, I still need to veg out once in a while.

The biggest risk Veetle faces is doing things “right”. Any competent product manager could walk in and immediately spot all of the obvious deficiencies in the product and aim to fix them: encourage people to fill in a schedule for their streams, add the “now showing” info to the browsing panel, build a faceted, tagged search engine, integrate with your calendar to remind you when a movie you particularly want to watch is about to come on, even, god forbid, a recommendation engine. Any competent product manager would ruin Veetle.

To be sure, the service is still very new and there are plenty of rough edges around the product that could be smoothed down. The AJAX breaks how URLs should work, comments don’t live update & you lose your place in the channel selector after you switch channels. But these are all minor annoyances.

For Veetle to be successful, it needs to recognize and fiercely stick to it’s core value proposition and avoid imitating any of it’s competitors. It needs to avoid overcomplicating the interface, adding features or anything which gives people more control over their viewing experience. If I wanted the Hulu experience, I go to Hulu. If I wanted the YouTube experience, I go to YouTube. Veetle awoke in me an experience that had lay dormant in my for 8 years and I hope to god that, in 8 years time, if I want the Veetle experience, I can still go to Veetle.

Guest post: Viewing the Internet as a third place

by Hang

I was invited by Nina Simons of the wonderful Museum 2.0 blog to contribute a guest post for a book club discussion on “The Great Good Place” by Ray Oldenberg. I’d been meaning to read that book for years now so I jumped at the chance.

Check it out:

Oldenburg’s book is important because it managed to put into words what many people only knew as a gut feeling or intuition. It dissected out this one important aspect of our public spaces and said “look, a pub is not just an economic institution for exchanging alcohol for cash, it also serves a vital social function.” What’s more, he demonstrated how certain social spaces either helped or hindered this social function and provided a framework to understand why certain pubs are great good places and others, lifeless drecks.

Faceted Identities Presentation at Internet Identities Workshop X

by Hang

This Monday, I gave a talk on Faceted Identities (the system that this blog is running on) at the Internet Identities Workshop X. The presentation lead to quite a bit of discussion, including some heated skepticism by Randy Farmer. The Notes for the session are on the IIW Wiki and there is also the video + slides:

Faceted Identites @ IIW X from Xianhang Zhang on Vimeo.

The User Experience of Comics is abysmally poor

by Hang

I read quite a few web comics. Every once in a while, I’ll be introduced to a new one and I’m reminded anew at how horrible the user experience is of the web comic experience as a new user. I’ve not yet found a web comic which I feel even has a barely acceptable user experience.

From the most trivial to the most radical, I present some suggestions:

  • At the very least, have at least one place on the page where the previous/next comic button always resides. That way, I don’t have to continually hunt for the link on every comic. Either make the comics a fixed size and put it below the comic or just add it above the comic.
  • Keep your actual comic above the fold. I don’t want to have to scroll down every time I visit your page. If you want to have stuff above your comic, use HTML anchors and anchor the next/previous links.
  • Use an AJAX preloader to load the n adjacent comics. Currently, it takes me more time waiting for your comics to load than it does to read them. This is unacceptably inefficient.
  • Allow me the option to display more than one comic per page. I would love to be able to take in comics a week or month at a time.
  • Create a consistent API access to your comics so that I can use desktop software to consume it rather than do everything through the web browser
  • Make available a .zip file of your entire archives so I can just download the images to my machine and use whatever image viewer I want to view them.

I would love to see web comic authors start thinking much more about the user experience of comic reading and doing something to fix this abysmal ecosystem.

April 14 2010

Sketching a watch over the course of 10 weeks

by Hang

It’s becoming increasingly obvious to me that my pen & paper sketching abilities are a joke. I asked around about tips to improve my sketching and one person on Quora said:

“Beginning students of architecture (at Cal Poly SLO) are required to sketch a chair—the same chair—everyday for ten weeks. At a certain point, you’ll begin to recognize elements you didn’t notice this before”

Seems like a fun challenge to me! Except instead of a chair, I’m going to sketch my watch. This also seems like a perfect excuse to try out Posterous for reals so you can follow my progress on Posterous (aka: laugh at my patheticness).

April 5 2010

In Palo Alto April 11th – 23rd

by Hang

I will be down in Palo Alto from April the 11th – 23rd, giving my presentation and talking with a couple of companies. If you want to meet up for coffee/lunch, email me at [email protected] and we can figure something out.

The persistently stupid idea

by Hang

There are only three types of ideas.

There are some ideas which are really smart ideas that sound smart on the surface and people repeat them to each other over and over again. If you come up with that smart idea independently, then you will tell someone and they’ll go “yeah, that’s already been thought of already, see X”. Using Vitamin C to prevent scurvy, realizing that worrying doesn’t make a situation better and stopping yourself from being a “nice guy” if you ever want success with women are all examples of this. These are not the ideas you have to be worried about.

There are some ideas which are stupid and sound stupid on the surface. If you come up with that stupid idea independently, then you will tell someone and they’ll go “that’s stupid and here’s why”. Here are 10 of them. These are not the ideas you have to be worried about.

There are some ideas which are stupid but sound smart on the surface. If you come up with that stupid idea independently, then you will tell someone and they will go “huh, that’s interesting”. These are the ideas you have to be worried about because they are the persistently stupid ideas. Persistently stupid ideas come to a person, are tried, fail and then disappear, leaving very little trace of their existence after they are gone. As a result, each generation comes up with the same persistently stupid ideas anew and wastes energy and resources chasing the same illusory pot of gold. This is why you have to be worried about them. The only way to avoid persistently stupid ideas is to learn how to become reflexively allergic to stupid.

I harp on this same theme a lot but I’m writing about it today because I was exposed twice in the same hour to two different persistently stupid ideas. Now, since both the people who these came from are personal friends of mine, I want to emphasize that I think the ideas presented are stupid but I, in no way, think the people who sent these to me are stupid. In fact, I discuss this further below. Anyway, onto the stupidities:

The first is an NPR article that repeats the assertion that when our privacy disappears, maybe shame will disappear along with it.

The second is an email in which in which a friend extols the virtue of video chat:

video chat is even better because the software just fades away and it’s true communication. It doesn’t require building software to support intent, it just creates a wide enough channel for communication and gets out of the way.

Both of these are persistently stupid ideas but I’m not going to tell you why they’re persistently stupid ideas.

Because what I just realized about persistently stupid ideas is that they’re perversely more harmful to smart people that dumb people. Each of these persistently stupid ideas has 100 different reasons why they could be wrong. But 99 out of those 100 aren’t the real reason and they don’t stand up to scrutiny.

If you were dumb and you came to be with a persistently stupid idea, I could take pity on you and provide you with any one of those reasons and you would accept it as valid and gently be persuaded from taking the stupid path. However, if you’re smart, I know that you’re going to see through any of the bad arguments and I would be forced to come up with the one correct argument to satisfy you.

But the truth is, I’ve forgotten what the reason is that both of these are a persistently stupid idea. At one point, I had read the literature, carefully constructed the argument, considered it from all sides, correctly rejected all the wrong arguments against it, worked through the implications of the correct reason, concluded that it was a persistently stupid idea, then promptly emptied out my brain of all that datum except that it was persistently stupid.

As a result, I’m not even going to try and persuade you that these are persistently stupid ideas. If you don’t believe me, you’re just going to have to put in your own time and effort to independently investigate them. However, the smarter you are, the harder it will be for you to figure out why they are persistently stupid because you will correctly reject all the utterly random, poorly thought out shit people pull out to justify it’s stupidity.

This is, perhaps, why I’m so fascinated by this topic of stupidity. Because it’s a unique curse that, paradoxically, affects the smartest of us the most.

Mozilla Presentation on Space & Narrative: Designing for Social Interaction

by Hang

On March 18th, I was invited to Mozilla to present some of the work I’ve been doing on Social Interaction Design.

In the talk, I discussed how the software industry has traditionally adopted a tool-builder mentality when it comes to thinking about the design of software. I argue, instead, that it’s more correct to think of social software as spaces rather than tools and that this demands a new approach to thinking about how to design social software. When people interact in social spaces, they are engaged in the communication of “narratives” and that social software needs to be designed with narratives in mind, rather than features. I talked about what it means to design for narratives, a design methodology that allows the analysis of any piece of social software from a narrative perspective and demonstrate several novel social designs that have come out of my thinking.


Space & Narrative: Designing for Social Interaction from Xianhang Zhang on Vimeo.


Unfortunately, due to the lax nature of my documentation, this video currently serves as the most complete and representative sample of my work although I’m working hard to publish all of this stuff in articles and essays.

Find out more

  • If I’m just the person you’re looking for, and you would like to hire me for your company, as of March 30th, 2010, I am available. Shoot me an email at [email protected] to get in touch with me.
  • If you would like to invite me speak about this or other, related topics, and you are in Seattle or San Francisco, shoot me an email at [email protected] and we’ll try to work something out.
  • If you would like to invite me to speak somewhere other than Seattle or San Francisco and you’re willing to pay travel expenses, shoot me an email at [email protected], especially if you’re in New York/Boston.
  • If you’re interested in reading more about my work, check out my portfolio at the Bumblebee Labs Site.
  • If you want to be updated about my thoughts on Social Interaction Design and other techy stuff, subscribe to the Bumblebee Labs RSS Feed or the twitter account.
  • If you enjoyed the presentation or thought I missed something crucial, post a comment on the blog and I’ll endeavor to respond to it ASAP.
  • If you want to read my thoughts on philosophy, atheism or ideas, check out the other facet to my blog, Figuring Shit Out.
March 29 2010

My HN Dinner #6

by Hang

From March 6th – 21st, I’m down in the bay area looking for work as a social interaction designer. I thought it would be fun way to meet people, while down here, to cook for a bunch of Hacker News folk. This is a recording of those dinners.

Hacker News

The 6th & final dinner was for Henry and some of his roommates and friends down in lovely Mountain View. After the last dinner, I was determined to redeem myself and go out with a bang. Henry is an ex-TechCruncher who is now working for a travel startup focusing on the Disney market.

The plan

After surveying Henry’s kitchen, he mentioned that he had plenty of great beer in the fridge and I spied some mushrooms & bacon so I decided that this dinner would be a very beer-focused menu that would also incorporate mushrooms & bacon. I know there’s a renaissance of beer friendly food menus over the last decade but I’ve always found it much easier to pair wine than beer and most of my attempts at pairing have not been as successful as I would have liked. The challenge of making a beer friendly menu made it a good challenge for me and allowed me to stretch my wings a little.

When we got to the market, there were some really great leeks which are unreasonably good with bacon & mushrooms and I’d been vaguely wanting to do a quiche for a while since I got down here so a mushroom & leek quiche with crumbled bacon would be the first course (one of the guests was vegetarian so all the dishes were vegetarian optional).

For the main course, I had already done beef, lamb, seafood & duck since I was down here so I wanted to finish with their pork or chicken to round out the range of meats. There were some gorgeous, center cut pork chops and one of the guests indicated that they really loved pasta so I wanted to do a dish with pasta that had a pork chop on top. From the pork, I spied some acorn squashes and pears also popped into my mind for some reason so the dish became spaghetti with a squash & pear sauce with a curry rubbed pork chop on top.

Finally, for the dessert, I had originally wanted to do a dish with port & dried figs but, since it was a beer menu, I used apple cider instead.

With all the elements in place, lets get to the food:

First Course

Mushroom & Leek Quiche, Crumbled Bacon, Garden Salad, Sierra Nevada Pale Ale

The quiche was fairly standard, the salad cut the richness and the ale was light enough that it matched well with the quiche. One of the things I’m starting to appreciate about beer pairings is their ability to work very well with richness and using the bitterness to add backbone to what could be an overwhelmingly rich dish.

Second Course

Curry Rubbed Pork Chop, Squash & Pear Pasta, Arrogant Bastard Oaked Ale

Henry & his roommates looked at me like I had 2 heads when I suggested that we put pear in the pasta sauce and, to be honest, I had no clue where that idea came from or if I could pull it off. I think, for the oaked ale, the woody flavors really drew me to ingredients from the fall and pork, squash & pears were all classic, late fall flavors. I sauteed the cut up squash in butter and oil until it was brown, nutty & sweet, added onions, garlic & beer, cooked until it was soft and sauce like and then added the pears and cooked just a little bit longer until the pears were tender and on the verge of falling apart.

This sauce is probably one I’ll have to add to my standard repertoire. The sweet & bitter flavors played off each other well and the squash & pear turned into a thick, creamy sauce with enough lumps to keep it interesting texturally. Without the pork, it’s a wonderfully satisfying vegetarian dish and with the pork, it’s robust enough to be a complete meal.

Third Course

Cider Braised Figs, Yogurt, Wydmers Apple Cider

I love braising calymira figs since they suck up their braising liquid so well and also release just enough sugar & fig flavour to form an addictive, concentrated glaze. I’ve traditionally done them with port but this time I decided to use apple cider to keep with the beer theme. It was just figs, cider, honey & vanilla, boiled down into a glaze and topping some yogurt for a nice, healthy dessert.

After a whirlwind trip down to the Bay Area, I’m finally back in Seattle again and slowly recuperating. It’s definitely been a fun experience, meeting and cooking for a whole range of different people over the last 2 weeks and I’ve experienced some incredible generosity from hosts who have invited me into their homes. If you’ve been following along these posts, please post a comment and say hi.

The next few weeks are going to be an interesting time for me and this blog. There’s definitely another trip planned and a couple of essays I have brewing as a result of conversations I’ve had with people. If you are interested in keeping up with my thoughts, you should definitely subscribe to my RSS feed or follow me on twitter.

March 29 2010

My HN Dinner #5

by Hang

From March 6th – 21st, I’m down in the bay area looking for work as a social interaction designer. I thought it would be fun way to meet people, while down here, to cook for a bunch of Hacker News folk. This is a recording of those dinners.

Hacker News

Getting into the final stretch, I was starting to feel the strain of this trip a little. With cooking, like any creative endeavor, you have your good days and your off days and this dinner, although it was still perfectly tasty, wasn’t up to my usual standards.

Last Wednesday, I cooked for Rich, his wife and 2 of their friends. Rich is the founder of the lean startup circle in San Francisco and also the co-founder of Stylous, a women’s fashion startup. I always admire people who choose to build products for people who are not themselves because it’s a difficult thing to do. Non-technical people have been traditionally under served by the transformational shift in technology and anybody working to seriously address that imbalance is doing good work in my book. Rich is also the proud father of a 3 week old little girl so I was really happy to give both him and his wife a good meal and have them not think about getting food on the table for at least one evening.

Immediately, when I walked into the market, I saw these gorgeous beef shanks in prominent display and my mind immediately leaped to osso bucco. Osso bucco is a classic Italian dish, traditionally made with veal shanks but now more commonly made with beef. Apart from that, it’s a pretty classic braise, I make mine with onions, celery, carrot, garlic, tomato paste, red wine, beef stock, bayleaves & thyme. The classic accompaniment to an osso bucco is risotto milanese which is risotto flavored with saffron and marrow from the shank bones. Now that I had the main down, I really wanted to do a soup since I’d been doing mainly salads at this point. Rich had just had this week a minestrone soup and a tomato soup which were my first two thoughts so, in the end, I settled on a French Onion soup. Finally, for dessert, I wanted to do something with chocolate and chocolate mousse was an old standby that I could do in my sleep so that was the dessert.

Paradoxically, this should have been one of my best dinners but it ended up turning into one of my worst. Rich loves to cook and had a well equipped kitchen, we were shopping for quality, organic ingredients and we had plenty of time. And that, I think was the problem. It’s been a long two weeks and I’ve been fighting the onset of a cold over the last few days due to lack of sleep. I was feeling pretty puffed up from all the accolades I’d been receiving, both online and in person and I decided that I could coast a little and nobody would know the difference.

Unfortunately, it’s somehow always the easiest tasks which people end up having the most problems with. Because I wasn’t stretching myself or keeping my eye on the game, there were points at which I flubbed some basic things. Oversalting was a big problem I had with this dinner to a degree I don’t often have, flavors were just a tad off balance and there wasn’t that oomph I was used to delivering. However, these were still minor nits, overall, the food was still at the level of acceptable, just not great.

A digression on menus & food

For some readers, it may be obvious why I’m calling the above menu an example of coasting but, for the majority of people, they would look at that and think that was a perfectly delicious menu that they would be happy to eat.

It’s difficult to write for people with different experiences and knowledge about food. I’ve generally written these reports aimed at the highest level of understanding on the general principle that when I’m reading a discussion of a field that’s entirely alien to me, I prefer to read the undumbed down version. Even if I don’t understand absolutely everything, I still enjoy the general cadence and voice of someone talking in the insider’s language. This section is an attempt to reach out and educate people less knowledgeable about food so feel free to skip this if it sounds like something you already know.

There is a distinction, at least within Western Cuisine, between classic and modern cooking. In classical cooking (pretty much all cooking before the 1960’s) there is a corpus of classical recipes from which you drew on and everyone drew from that same classical corpus. The mark of skill for a chef was in the faithful rendition of the platonic ideal of a dish. You see the same forces play out in, say, American-Chinese restaurants today. Walk into any American-Chinese restaurant in the country today, from food court style all the way up to fancy, white tablecloth and you will find roughly the same set of dishes on the menu: Kung Pao Chicken, General Tso’s Chicken, Sweet & Sour Pork, Moo Shu Pork, Beef & Broccoli etc. Different American-Chinese restaurants may put their own interpretation on the general framework of the dishes and produce items of varying quality and skill but the craft of the cooking is in making a faithful rendition of some platonic ideal.

Modern cooking, from the beginning of Nouvelle Cuisine in the 60’s, became about throwing away the restrictive shackles of the classic french canon and thinking of food again as an inventive process rather than a replicative one. Nouvelle Cuisine is now derided as “tall food and small portions” but some of the changes were genuinely revolutionary but have so pervaded out food consciousness these days that we’ve forgotten their origins.

From Nouvelle Cuisine came the philosophy that the classic recipes were not unique, singular, harmonious expressions of ingredients but that the space of delicious things left to be discovered was far vaster than the few examples that were part of the classic canon. Modern cuisine prides originality as well as execution. It’s all about finding new flavor expressions or new ways of expressing classic flavor combination (deconstruction). As a philosophy, I have more affinity to modern cuisine than classical cuisine and, when I cook, the exploration of flavors and discovering of new dishes is a huge part of the appeal.

The way to recognize classical cuisine is that the dishes are named after people or places: Spaghetti Bolognese, Chicken a la King, Lobster Thermidor. The way to recognize modern cuisine is that the dish descriptions either are just a bag of ingredients or containn quotation marks. Short Ribs, Celeriac Puree, Summer Vegetables, A “timbale” of lobster with a “cappuchino” of mushroom, Duck, Leek & Mushroom “Lasagna”.

At it’s worst excesses, modern cuisine can resemble the ingredient mad libs that so often parodies it. Quails Brains on a Cucumber “Au Gratin” with Dark Chocolate “Foam” would taste exactly as horrific as it sounds. But what I’ve tried to show with some of my previous blog posts is how good modern cuisine is based on a solid foundation of learned experience and principles and the reasoning behind the process I use to innovate.

So, when I say that a menu is “tired” or “uninspired”, what I mean is that there’s very little thought put into the makeup of the dish and all I’m doing is providing a competent and faithful representation of a generic original. I was, in essence, making someone else’s food rather than making my food.

Back to the food…

First Course

French Onion Soup

French Onion Soup is all about the slow, careful caramelization of onions and I simply didn’t get the timing right on this one. A combination of not getting a start on this right away and using a pot that was too tall and narrow meant that it took an hour after I planned before the onions were caramelized to the point I would like. With enough gruyere & croutons on top, it’s hard to make a truly bad French Onion Soup but this was not one of my best.

Second Course

Osso Bucco & Risottto Milanese

Osso Bucco is all about exploring the wonders that is the shank. The shank contains some of the most flavorful yet hardest to cook meat on an animal. Braised with onions, celery, carrot, garlic, red wine, beef stock & herbs, it becomes a rich and tender chunk of beef. Risotto Milanese is the classic accompaniment as the bone marrow from the beef shanks can be used to enhance the risotto. This was rich and lovely, if a tad oversalted.

Third Course

Blood Orange & Pomegranate Chocolate Mousse

The chocolate mousse was rich and had just the right texture and sweetness. The pomegranates were a nice textural addition but the blood orange did nothing for the dish. Overall, it was a nice finish to the meal and I was glad it ended on a high note.

Next up, my 6th and final writeup of the HN Dinner series…

Copyright ©2009 BumblebeeLabs — Theme designed by Michael Amini