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 07, 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 03, 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?

Saturday, December 22, 2007

Twas the night before Festivus...

And all through the FriendFeed Global International World Headquarters, not a creature was coding, not even Bret..



But before that, we were all very busy...


And not just busy posing for pictures -- we're also creating new products! I'm thrilled to announce the release of our latest platform initiative, AirGrievance.

Friday, December 14, 2007

Brilliantly wrong

Being a little bit wrong is easy, but it's much more interesting to be completely wrong.

Google Blogoscoped had an entry yesterday about my statement that, whenever possible, everything should have undo.

The comments on that story had the usual mix of no-so-great usability suggestions (putting options and settings everywhere), and a few good ideas, but it also had one comment that was so remarkably wrong that it brightened my whole day:
While an Undo feature could be useful, isn't this just coddling people who should otherwise be paying closer attention to what they are doing? A mistake is a mistake, and people need to learn to live with the consequences of the mistakes they make.

This comment may have been a joke, but I really like this "tough love" approach to usability, because in just a few words it perfectly captures the exact opposite of what we should be doing.

To design great products, we must truly empathize with our users, and understand that if they are having problems using our products, is more likely our fault, not theirs. This isn't the same as the disdainful or patronizing attitudes too often expressed by engineers and other technical people. Our users aren't dumb, they just have better things to do than waste time understanding poorly designed software.

As for "undo", in general, the more we can lower the costs of making mistakes, the faster we can move. This applies to everything from interfaces (I type fast because I have a backspace key) to societies (people are more likely to start new companies in cultures that are accepting of failure).

Sunday, December 09, 2007

Is there more to life than money?

Whenever there is a discussion about joining a startup vs working at regular job, someone will defend the boring 9-5 job by saying, "there is more to life than money".

These people are, of course, right. There is plenty of evidence that happiness is only loosely correlated with wealth. People seem to derive a much greater sense of satisfaction from good relationships, and having a sense of purpose and meaning in their life. Money matters too, but not as much once the basic need for food and shelter are addressed, and those aren't big issues for most people deciding between joining a startup or a big company.

Furthermore, most people who do join startups will never experience a huge payday. Google distributed billions of dollars to thousands of employees, but that was truly exceptional. Even moderately successful startups that eventually sell for $50 million dollars or so will only make a couple of people rich.

If all you care about is money, I doubt that joining a startup is the right way to go. You'll probably make a lot more at a hedge fund, or by becoming a lawyer, or something like that.

Maybe it now seems like I'm defending the boring 9-5 job, but it's actually just the opposite. Those 8 hours/day are a huge chunk of of your waking life, and don't forget that you'll probably also spend a few hours preparing, commuting, and "unwinding". Even worse, bad or boring jobs can sap our energy, so that at the end of the day all we feel like doing is sitting in front of the tv.

That's no way to live, if you can help it. Why surrender such a huge chunk of your life just to get some money? For some people, that's the only option, but for those fortunate enough to be smart and educated, there's a better way.

Instead of throwing away your "working hours", why not make every minute count? Why not find work that you can actually enjoy, work that's fun and meaningful?

Of course that's easier said than done, but it's not impossible.

For reasons that will have to be left for another post, the structure and systems in big companies tend to make work meaningless and life unpleasant, at least for me. Of course smaller companies can be awful too, but they have a greater potential to be good.

If your job isn't working for you, if it isn't making you happy and energized, then why are you still there? I can't guarantee that you'll find something better, but perhaps you should at least try something new. Don't just give up on life.

I truly enjoy writing code. I love creating new products and features. I like getting feedback from users and finding ways to solve their problems. I like the game of business. I like helping people. Of course there is always some amount of unpleasant work that must be done, but that can be contained (my rule is that work should be no more than 10% awful).

That's why, even though I don't financially need to work, I choose to work (and end up staying up until 4am pushing new code). It's why we created FriendFeed, to have a great place to work, a place where we can build great products and have happy users. Of course I'd also like to earn a few billion dollars, and I plan to make all of our employees very wealthy, but that's more like a bonus. I don't believe that you can be happy and make great products and treat your users right if all you think about is money.

There's more to life than money.




My first Google pay-stub (including note from Heather). Money isn't everything, but this zero-dollar check did make me a little nervous.

Sunday, December 02, 2007

There's no such thing as a "social network"

Of course there are many things that people call "social networks", but that's more confusing than enlightening. The "social network" aspect of these products is just a mechanism, not the purpose, and their purposes are often more different than similar. It's like saying that something is a "Javascript". Many websites use Javascript, but hopefully the Javascript is only there in order to accomplish some other purpose. LinkedIn and Twitter, for example, both use Javascript and social networking mechanisms, but clearly they are very different products and have very different uses. Facebook likes to call itself a "social utility", but to me that's just as meaningless.

That said, there is something "social networky" that unites these otherwise-dissimilar "social networking" sites. The two features that seem to define the social network aspect of a product are:
  1. Some kind of page or profile for each user. The contents of this page vary wildly, but it always includes a name and often a picture.

  2. "Friend" links among the profile pages, which may or may not be bi-directional. These "friends" only sometimes correspond to real-life friends.
Those two features alone are very simple but also very useless. Real products need more functionality in order to somehow deliver value to their users. It is this other functionality that defines the real purpose of a product, not the "social network", which exists only to enable or enhance the core purpose.

So what ARE the purposes of these many "social networking" products? (in random order)
  1. Enable people to send messages to their friends. This functionality basically defines email, which can be considered one of the earliest "social networks", though most email systems lack browsable profiles. Annoyingly, many other social networking products reimplement this function, with mixed results.

  2. Enable people to send messages to non-friends. There are two aspects to this feature: discovery (finding the people) and control (preventing unwanted messages). Email is weak on both aspects, and for many people, this is one of the most useful features of products such as Facebook and LinkedIn (I can easily find and contact people that I don't know).

  3. "Live" address/phone book. Sites like Facebook have fields for phone, email, etc, and since everyone maintains their own page, the information is generally up-to-date (vs the bad-old-world of everyone having to broadcast "please update your address books" every time they move).

  4. Less private communication. Email and IM are often too private. Life would be much less interesting if all of our conversations took place one-on-one in closed rooms. Part of what makes parties, offices, and other social environments interesting is that we can observe other people interacting, overhear conversations, and often join-in. Features such as the "wall" create a kind of public or semi-public email, allowing our friends to overhear conversations. Twitter is often used as a public IM/chat.

  5. Passive communication about my life. I don't want to interrupt or spam my friends every time I have some little bit of news, take some new pictures, or get a random thought, but I have no problem blogging or Twittering those things, or uploading to photo sharing sites (which all have social features now). Similarly, I enjoy seeing this information from my friends (but I wouldn't want them calling me on the phone to tell me about their lunch every day).

  6. Passive sharing of non-personal content. I'll occasionally see an interesting or amusing web page and want to share it with friends. I used to put these things into my IM status, but now I add them to my FriendFeed. Email, Twitter, Facebook, and Digg/Reddit are also sometimes used for this purpose (though obviously Digg is less "friend" oriented).

  7. Self expression. This is most prominent on MySpace, where user profiles are highly customizable and can have embedded music (which starts playing as soon as I visit the page). This behavior is very similar to decorating your house or bedroom in "real life" -- there seems to be some human instinct to define our identity through decorations, fashion, music, art, etc. Self expression is an element of all products which have browsable profiles, but on most sites identity is expressed more in terms of content (favorite movies on Facebook, job history on LinkedIn, tweets on Twitter, etc).

  8. Background information. If I meet someone new (or am about to meet them), I sometimes checkout their Facebook or LinkedIn pages to learn more about their background, see if we have common friends, etc. Obviously this also ties in with self-expression and identity in more social settings -- people "friend" each other after meeting and their MySpace page (or whatever) becomes part of that "first" impression.

  9. Dating. One of the earliest and still most popular uses of sites like MySpace, Facebook, Orkut, etc. It's less "explicit" than on dating sites, but by putting themselves online, people can see and be seen, plus get background info, see who their common friends are, etc. The Facebook newsfeed even tells us when friends break-up (or start dating).

  10. Jobs. Job hunting and hiring are essentially the "professional" analog of dating and seem to work in somewhat similar ways.

  11. Finding old friends. By enabling friend-of-friend and school class browsing, it's much easier to locate old friends, and therefore people do more of it. This also lets people track down old friends without appearing crazy (they can "bump" into them on classmates.com, or whatever -- no private detective needed).

  12. Keeping in touch with "unclose" friends (related to "passive communication about my life"). It's fun to know what's going on with people who we've known in the past, even if we aren't close friends. Profile browsing and newsfeeds make this easier. This can also make unclose friends into closer friends, as we may coincidentally be in the same city at the same time, be attending the same events, or just start chatting.

  13. "Micro-socializing" (I need a better term here). A lot of wall posts, poking, winking, commenting, Twittering, etc can go into the category. The comments on FriendFeed generally fall into this category as well -- someone shares a link or posts some photos, then they and their friends will end up chatting about it. This is somewhat analogous to the traditional "water-cooler" conversation.

  14. Word-of-mouth recommendations. Shared links, news, Yelp reviews, some Twitters, and the like provide us with information about what our friends are doing. Word-of-mouth can be very powerful since we typically trust our friends much more than random people. The new Facebook "Beacon" advertising system is trying to use this effect to sell things.

  15. General amusement for bored people. Clicking around on friends and friends-of-friends and even random people's pages can be kind of interesting. As sites provide more content (such as the links and videos on FriendFeed) or games (many popular Facebook apps are games) there will be even more of this.

  16. Publishing. This especially applies to blogs, twitter, flickr, and the like, but being able to subscribe to the content produced by our favorite authors and artists as well as friends and family is very powerful for both the producer and the consumer.

  17. Group sharing and socializing. This was traditionally done via mailing lists and that's the model behind Google/Yahoo Groups, but of course Facebook, Orkut and the like have have some basic group functionality too, and Ning seems to specialize in it by enabling each group to create their own social network.

This list is certainly not complete, but I'm way over my 30 minute limit... I look forward to seeing your suggested additions. I'll probably post an improved list at some point.

I also hope to explain how my company, FriendFeed, fits into all of this. It definitely has social aspects (the word "friend" is right in the name!), but it certainly isn't a social network in the style of MySpace or Facebook.

Saturday, November 17, 2007

We all have tunnel vision

Supposedly people can hold about seven "items" in their mind at any one time. I was never sure what that meant -- what qualifies as an "item"? I recently realized that it means our brains have roughly seven "registers", similar to the registers on a microprocessor. These registers don't store much information, they really just hold pointers to something in longer term memory.

Here's the important realization: There's a million important things going on in the world and in our lives, but we're really only aware of seven of them. This means that we all have a very narrow and limited understanding of the world and our own lives. The seven things on our mind all seem very important, while everything else is just kind of forgotten.

We must be very careful about what gets loaded into those seven registers. I like to read reddit occasionally, but I've found that it can be a little dangerous. Some days it is filled with bad news -- my seven registers get filled with scary and depressing things, and it feels like the world is crumbling.

On the other hand, I can go for a walk outside and after a little while I begin to notice how nice the trees are, the various smells of nature, the construction progress on the house down the street, and other pleasant (for me) things, and the world seems like a really nice place.

This seven register limitation also makes people very subject to manipulation. If you can control what is getting loaded into their attention, you can largely control what they think and how they feel. For example, if people keep talking about Iran and how scary they are and debating what to do about them, then pretty soon Iran will seem like the biggest, scariest problem in the world, and no solution will seem too extreme. The truth is that there are probably 100 more important problems, but it won't seem that way because all seven registers are loaded with the same topic. The subject of the debate is more important than the content.

At any one time, a million things are going wrong, the world is falling apart. At any one time, a million things are going right, the world just keeps getting better. Those are both true statements, but one will feel much more true depending one which seven things are loaded into your attention now.

The same thing can happen inside of a company. We can easily become obsessed with one issue or threat, and it ends up taking all of our attention and energy even though it's not the most important problem. And because it seems like the only problem, our response is often completely irrational. I have some amusing Google anecdotes, but I'm almost out of time for this post, so they will have to wait...

How do we deal with this? I'm not certain, but the first step is to simply be aware of it. Take a break. Go for a walk. Try to clear out your attention. Maintain balance. Keep four good things in mind at all times (make a list). We shouldn't ignore the bad things, but we mustn't allow them to overwhelm us, because that's what will happen if the bad completely pushes out the good.

27 minutes.

Update: To be clear, the actual value "seven" is not important -- it's just an idea that many people are familiar with. The point is that our attention has a very limited capacity, and therefore we are always missing out on the bigger picture.

Thursday, November 15, 2007

Back to blogging again, I hope

I have about a 1000 posts queued up in my brain, but these things take forever to write, and now that I'm working again, I don't have forever to waste. So, in the spirit of "Good enough" is the enemy of "At all", I'm going to start blogging again, but with an absolute limit of 30 minutes per post. If after 30 minutes I'm not happy with what I've written, I'll delete the post and move on for the day. If anything seems less thought-out or more confusing and inflammatory, this is why (and I didn't mean whatever you thought I meant, I meant something intelligent and non-insulting).

Meanwhile, check out My FriendFeed.

Monday, October 01, 2007

The next big adventure

We have a new startup: FriendFeed!

It's still early beta, and I'll write more about the product and company as soon as I get a chance. Until then, read the NY Times article and checkout our "about" page.

Monday, September 17, 2007

Quick: Read this if you ever store password data

Thomas Ptacek has a good post explaining why your password storage scheme is probably bad.

His post has a lot of words, so I'll summarize:
  • Storing passwords in plaintext is obviously bad (most developers already know this)
  • Using a salted-hash such as MD5 or SHA-1 isn't much better. (too easy to brute force)
  • Your other clever password storage ideas are probably bad too.
  • Use bcrypt instead. It was created by real cryptographers for just this kind of thing.

Here's bcrypt for Java. It has a nice simple API:

// Hash a password for the first time
String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

// Check that an unencrypted password matches one that has
// previously been hashed
if (BCrypt.checkpw(candidate, hashed))
System.out.println("It matches");
else
System.out.println("It does not match");

I'm sure other popular languages have similar libraries.