Thursday, March 27, 2008

FriendFeed from the command line



Sometimes, it's faster and easier to just use the command line. Thanks to the new FriendFeed API, I was able write a little script that connects my command line to my FriendFeed.

This probably would have been easier to write in Python, but bash is so awkward that it makes for a somewhat more interesting challenge. (most of this code is just dealing with image files -- the real work is done by curl)

Here you go:
#!/bin/bash
# Replace with your nickname:remote-key
# Go to http://friendfeed.com/account/api to get your remote key
USER="paulapitest:buggy696hoist"

function usage {
echo "Usage: $0 [-t title] [-l link] [-u nickname:remotekey] [images ...]"
exit 1
}

MAXSIZE=""
while getopts m:u:t:l: opt ; do
case "$opt" in
t) TITLE="$OPTARG";;
l) LINK="$OPTARG";;
u) USER="$OPTARG";;
m) MAXSIZE="$OPTARG";;
\?) usage;;
esac
done
shift $[OPTIND - 1]

TITLE="${TITLE:-$LINK}"
TITLE="${TITLE:-$1}"

[ "$TITLE" = "" ] && usage

ARGS=("-F" "title=$TITLE" "-F" "link=$LINK" "-u" "$USER")
FILES=("$@")

for F in "${FILES[@]}" ; do
if [ "$MAXSIZE" != "" -a -x /usr/bin/sips ] ; then
T=`mktemp /tmp/ffshare.XXXXXX`
sips --resampleHeightWidthMax "$MAXSIZE" --out "$T" "$F" 2>/dev/null
F="$T;filename=$F"
fi
N="${#ARGS[@]}"
ARGS[N]="-F"
ARGS[N+1]="img$RANDOM=@$F"
done

CODE=`curl -o /dev/null -w "%{http_code}" "${ARGS[@]}" http://friendfeed.com/api/share`
if [ "$CODE" == "200" ] ; then
echo "Shared on http://friendfeed.com/`echo "$USER" | sed -e 's/:.*//'`"
else
echo "Failed: HTTP response $CODE"
fi

Monday, March 17, 2008

Is fragmentation bad?

Imagine that you've just finished watching a movie and are in the mood to talk about it. How are you going to do that? You could chat with random, semi-anonymous people in the movie theater lobby (assume you went to a theater). You could find a community of people who are big fans of the director or the book that the movie was based on. Or, if you saw the movie with friends or family, maybe you'll discuss it with them.

Which of these options you choose will probably depend on your situation. Sometimes it's fun to hear what "random" people think. If the movie is a little more niche and you're somewhat of a connoisseur, you may not care what random people, or even your friends, think. On the other hand, going to movies is often more about shared experience than it is about the movie itself. We enjoy spending time with our friends and the movie is just something interesting to discuss.

Ultimately, a single movie may spawn millions of separate discussions among millions of different people, all in different situations and contexts.

However, there's a question that no one is asking: Isn't all that fragmentation bad? Instead of having millions of separate discussions, shouldn't we have a single, unified discussion, preferably under the control and ownership of the movie studio?

No?

I enjoy our fragmented movie discussions, and I suspect that I would hate the single, unified, shouting match that would occur if we tried to unify all of those separate discussions. This issue of unified discussion may seem a little silly, but I keep seeing it repeated in the context of blogs and other online content.

People sometimes complain that specialized communities such as news.ycombinator.com are taking the conversation away from the sites that they link to, but I go to news.yc in large part because it has an intelligent and well behaved community. That community is kind of niche -- they mostly talk about programming and startups -- but I'm interested in those same things, so I like it.

On the other hand, I occasionally read the comments on YouTube, but I would never comment there myself. It's too random and belligerent for me.

Most recently, this issue of fragmentation has been brought up a lot when debating FriendFeed. One of things that people really love about FriendFeed are the comments -- it's the only place on the web where I can easily share and discuss things with my actual friends (to see what this looks like, view the things I've shared or the things that I've liked or commented on).

Although comments are one of our most popular features, they are also our most controversial feature. If you believe that there should only be a single, unified discussion, then the extra fragmentation caused by FriendFeed will seem like a step in the wrong direction. In fact, not only is there a separate discussion on FriendFeed, there may be hundreds of separate discussions within FriendFeed on the very same topic or link (because different people are sharing the link, and different people have different friend groups).

I, for one, enjoy the fragmentation. It's important to understand that FriendFeed isn't trying to replace the specialized communities on places such as news.yc, or the screaming hordes on YouTube. We're creating a third option: discussion with friends. It may not be for everyone, and that's fine, but many people really like it, including people who would never participate in broader forums such as TechCrunch or YouTube.

Monday, February 25, 2008

Good news, everyone!

FriendFeed is officially launching! (and also announcing our funding)

See Louis Gray, VentureBeat ("Friendfeed, the best software for conversations"), and TechCrunch for more detailed reviews.

Sunday, February 17, 2008

The most important thing to understand about new products and startups

First, a quote from Marc Andreessen's "Guide to Startups, part 4: The only thing that matters"
If you ask entrepreneurs or VCs which of team, product, or market is most important, many will say team.
...
Personally, I'll take the third position -- I'll assert that market is the most important factor in a startup's success or failure.

Why?

In a great market -- a market with lots of real potential customers -- the market pulls product out of the startup.

The market needs to be fulfilled and the market will be fulfilled, by the first viable product that comes along.

The product doesn't need to be great; it just has to basically work. And, the market doesn't care how good the team is, as long as the team can produce that viable product.
...
Conversely, in a terrible market, you can have the best product in the world and an absolutely killer team, and it doesn't matter -- you're going to fail.


Mark's blog post did not immediately resonate with me, because his terms are somewhat different from the way I think. After all, how great is your product if nobody wants it? How great is your team if they persist in building something that nobody wants?

However, his main point has stayed in the back of my mind since then, and I'm continually reminded of how important it is, and how often I see people who clearly don't get it.

In my mind, there's really two points. One: You can take the smartest, most experienced, most connected, most brilliant people in the world and have them build the most stunningly designed and technically advanced product in the world, but if people don't want it, then you will fail. This is roughly what happened with the Segway, for example.

Perhaps that seems a little discouraging. After all, if really smart people with all the right resources can fail, then what hope is there for the rest of us? Perhaps success is random, and maybe startups are more like the lottery than we'd like to admit.

I don't believe that's true though. There is an optimistic way of understanding my first point, and that's my second point: Even if you aren't the smartest person around, and your product is kind of ugly and broken, you can still be very successful, if you just build the right product. YouTube and MySpace are both fine examples of this.

But if your team is so great, why aren't they building the right product? Simply put, they have the wrong attitude. Firstly, they overestimate the importance of their own skills. Engineers think that success is all about fancy technology and complex engineering (hello Google). Designers think that success is all about beautiful design. MBAs think that success is all about knowing the right people, or spreadsheets, or something. If you have especially smart or successful people, then this problem could be even worse, because then the team is also likely to be arrogant and overconfident, which makes them less likely to question these assumptions or the value of their own skills.

It's easy to find examples of this wrong attitude. When Google acquired YouTube, many people inside the company were flabbergasted, "But they have no technology!?" They didn't understand that you only need enough technology to make the product work. Any more and you probably have the wrong priorities. I regularly see similar complaints about Facebook, MySpace, and a lot of other popular sites. Similarly, people will often complain that MySpace or even Google has "no design" or "bad design". Again, they have enough design (or the right design) to work for their users.

So what's the right attitude? Humility. It doesn't matter how smart and successful and qualified you are, you simply don't know what you're doing. The good news is that nobody else does either, though some are foolish enough to think that they do (and that's why you can beat them).

What is the humble approach to product design? Pay attention. Notice which things are working and which aren't. Experiment and iterate. Question your assumptions. Remember that you are wrong about a lot of things. Watch for the signals. Lose your technical and design snobbery. Whatever works, works.

MySpace is a great example of this. I'm pretty sure that their custom profile page layouts were an accident. They didn't know enough to properly escape the text that people put on their profiles, and that allowed their users to start including arbitrary html and css in their pages. This is a common bug, and most people would have fixed the bug and that would have been the end of it (really great engineers wouldn't have had the bug in the first place). But they did something smarter. They noticed that the feature was popular and found a way to preserve it. The result is mostly ugly, but it's extremely popular.

There are many other accidental inventions besides MySpace, but it's important to understand that "accidental" isn't the same as "random". There are clues all around us, we just need to watch more closely.

For web based products at least, there's another very powerful technique: release early and iterate. The sooner you can start testing your ideas, the sooner you can start fixing them.

I wrote the first version of Gmail in one day. It was not very impressive. All I did was stuff my own email into the Google Groups (Usenet) indexing engine. I sent it out to a few people for feedback, and they said that it was somewhat useful, but it would be better if it searched over their email instead of mine. That was version two. After I released that people started wanting the ability to respond to email as well. That was version three. That process went on for a couple of years inside of Google before we released to the world.

Startups don't have hundreds of internal users, so it's important to release to the world much sooner. When FriendFeed was semi-released (private beta) in October, the product was only about two months old (and 99.9% written by two people, Bret and Jim). We've made a lot of improvements since then, and the product that we have today is much better than what we would have built had we not launched. The reason? We have users, and we listen to them, and we see which things work and which don't.

Find the gradient, then follow it.

Sunday, January 27, 2008

Ultra-immersive, long-form video games from the past or future

As our technology and understanding of nature improves, we are living longer, and many predict that this trend will continue to the point that humans will become nearly immortal. When confronted with the possibility of living for hundreds, thousands, or even millions of years, most people express several concerns: "Will I still be able to retire at age 65?", and "Won't that get boring after a while?"

Fortunately, technology is also improving it other areas (and not just more deadly weapons). Video games, for example, are getting quite sophisticated. As the graphics and other interfaces improve, video games become increasingly immersive and involved, and we begin to feel as though we are really inside the game. As this trend continues, will we get to the point that the games feel so real that we become completely immersed and forget about the outside reality?

So what will million-year old people do to manage their boredom? Perhaps they will play long, complicated, multi-player, fully-immersive video games. If your regular life lasted millions of years, occasionally spending a hundred years playing some fancy game might seem reasonable. Perhaps you would play-out your character's entire life span, from birth to death, in one "sitting". In order to really feel the experience and keep the game authentic, you would of course make it so that everyone playing would forget that it was just a game (though maybe some people would try to cheat).

The obvious question: Is that the future, or the past?

Once we eliminate the certainty of our perceived reality, then how can we justify our certainty of anything else? Accepting true reality, whatever it may be, requires letting go of everything specific.

Monday, January 7, 2008

Building a great team

Unless you happen to be really great at everything, it's very important to build a well matched team of people who have complimentary skills and can work well together. Unfortunately, that's much easier said than done, and most startups really struggle to find the right people. That's why I'm excited to announce another great addition to the FriendFeed team. Check out my post on the FriendFeed blog to understand why this is a big announcement.

Thursday, January 3, 2008

Should Gmail, Yahoo, and Hotmail block Facebook?

Apparently Facebook will ban you (or at least Robert Scoble) if you attempt to extract your friend's email addresses from the service.

Automated access is a difficult issue for any web service, so I won't argue with their decision -- it's their service and they own you.

However, when I signed up for Facebook I gave them my Gmail address and password, using their find friends feature:


It was very helpful -- I didn't think that I would know anyone on Facebook, but it turns out that I knew hundreds of people.

However, Gmail's Terms of Use seems to prohibit this:
You also agree that you will not use any robot, spider, other automated device, or manual process to monitor or copy any content from the Service.

Facebook can also import contacts from Yahoo and Hotmail. Yahoo TOS says:
You agree not to access the Service by any means other than through the interface that is provided by Yahoo! for use in accessing the Service.

And Hotmail TOS says:
In using the service, you may not:
...
Use any automated process or service to access and/or use the service (such as a BOT, a spider, periodic caching of information stored by Microsoft, or "meta-searching")

So the question is, should Gmail, Yahoo, and Hotmail block Facebook (or close the accounts of anyone who uses Facebook's "friend finder") for violating their Terms of Use?