Mary Hodder has a post entitled Email Has Evaporated As a Social Tool where she pointed out that she no longer uses email as a "social" tool. Specifically, she doesn't talk to friends and family over email, instead email is for mailing lists, business and spam. Instead she talks to friends and family on Facebook and over IM.

I'm in the same boat. Most of the email I get at my personal email address falls into three categories (a) spam, (b) bills and (c) stuff related to my blog. There is the occassional “social” email exchange with a friend but that happens maybe once every month or two. On the other hand, I’ve been connecting with lots of people who I haven’t talked to in several years from elementary & high school buddies from my time in Nigeria to relatives of friends who live in New York via Facebook.  I’m now a regular user of the site and there seem to be a number of places where the user experience tends to be frustrating which could be fixed with a minor tweak or two. The problems and potential solutions below

  1. Liberate the Status Updates from the Tyranny of the Web Page (APIs, APIs, and Even More APIs): A number of online services have found that opening up their services by providing APIs that enable users to access their stuff from other sites, desktop apps or on their mobile phones is goodness. However a lot of the Facebook API seems geared towards building apps that are hosted in Facebook, than in enabling more ways for users to interact with their data outside of the Facebook user experience. One example of a place where Facebook could add more value to its users via an API is status updates. If I want to view the status updates from my friends, I have to use the status update page on Facebook. I can’t use a desktop application that can just sit in my system tray like Twitterific does for Twitter nor can I write a Windows Live Messenger add-in which syncs my Facebook status message with my IM status message. I’d use the feature a whole lot more if it didn’t involve so many clicks and navigating to the Website every time I wanted to see what was going on with my friends or change my status.

  2. Allow me to Segregate my Friends by Network: Like most people outside college who use Facebook, I now have two broad classes of people on my friends list in Facebook; people I know professionally and people I know personally. I don't think only beauty queens like Miss New Jersey will have problems once they leave school and have all these embarassing pics from college frat parties now available to people who they meet professionally who "friend" them on Facebook. Currently people can decide to create a new account or delete those parts of their lives they feel will be embarassing in a different social context. Being able to create an album that is only visible to my college “friends” or wall posts that are only visible to my work “friends” mirrors reality and is something that Facebook if they don’t want their user base to outgrow the site when they make life transitions.

  3. Fix “How do you know this person?”: Upon adding someone as a friend, Facebook asks “How do you know this person?” then presents a fixed list of options that seem geared towards college students. There’s are lots of people on my list that I leave blank because there are no options for “attended a conference together”, “works in the same industry”, “fan of his blog”, “is my realtor”, “is my doctor”, “is my accountant”, etc. Instead there are options like “we hooked up” and “took a summer course together”. I can understand that they may not want to allow free form entries but they least they could do is update the list to account for their broadening user base. See the following posts for more on this topic; How do I know this person? Through the Web! by Jon Udell, Social networks as “friend” Nazi (design flaws in Facebook, Jaiku, Twitter) by Robert Scoble and It's time to open up networking, again by Dave Winer.

  4. Put Actual Content in Email Notifications: This is another issue that comes up a lot. Facebook will send you a notification that you’ve gotten a message from another user but not the actual content of the message. The purpose of this seems to be to increase the number of page views generated by users which seems to be working given that the site averages over 50 page views a day per user according to ComScore. Unfortunately, it is also rather irritating. Maybe a healthy balance is to put the content of the message in the email and provide links that take you to the response page directly in the email.   

Speaking of feedback on the Facebook user experience, I wonder if anyone from Facebook will be at the Facebook Developer Garage- Seattle next week? It should be an interesting opportunity to get to hear the perspectives of a broad collection of developer minded people who've been taking the site for a spin.

Now playing: Three 6 Mafia - Stay Fly (feat. Young Buck, EightBall & MJG)



July 23, 2007
@ 05:44 PM

I just found out that Vint Cerf, one of the founding fathers of the Internet and current Google employee, will be giving a talk in the Seattle area later today. I’ll be attending the talk and have a list of questions I’d like to ask during the Q&A session. However I suspect that a number of my readers likely have better questions than those I can come up with. Here are my questions, let me know what you think of them and suggest better ones if you don’t like mine

As usual, I’ll blog the proceedings as a Trip Report

Now playing: Twista - Do Wrong (feat. Lil Kim)


Categories: Technology

One of my favorite quotes about the art of software development is

You cannot eliminate complexity, all you can do is move it around

This is very true when it comes to designing systems. You should always look with skepticism when someone tells you that some development tool or technology eliminates complexity. Usually this means the complexity has been hidden but lurks just below the surface waiting to ensnare unwary programmers. However on certain rare occassions, the complex part of the problem is actually solved by the tool or technology effectively eliminating from the worries of the application developer. This is very rare.

A good example of a technology which eliminated complexity for application developers by moving it into the purvey of runtime frameworks is garbage collection. The complexity of memory management was eliminated as a concern of application developers and moved into the domain of application framework developers. This was a win for the industry since the complexity could be relegated to realm of language runtime gurus.

There are lots of examples of technologies that claim to "eliminate complexity" but actually just move it around in a way that makes the complexity less obvious. This is often because, the person claiming to be eliminating the complexity fails to acknowledge where the complexity lies in the first place. For example, when the .NET Framework was first shipped by Microsoft there were lots of claims that DLL Hell would now be a thing of the past. You can still find blog posts and articles like Simplifying Deployment and Solving DLL Hell with the .NET Framework from that era claiming that "DLL Hell" is solved. The problem with that thinking was that versioning and keeping libraries backwards compatible is a fundamentally hard problem that often has no good solution. At the end of the day, you only have two real choices when it comes to preserving backwards compatibility; never change the existing functionality of a library or always ensure that applications always run against the original library they were compiled against so that if the new one changes behavior, they are unaffected. Both choices are untenable which means there will always be complexity when it comes to how one handles versioning and system libraries.

It’s been about six years since the first versions of the .NET Framework were shipped and such hyperbole has died down. Today you can find posts like What A Difference A Revision Makes - IConfigMapPath Is Inaccessible Due To Its Protection Level and Microsoft .NET Patch May Make PCs Go "Haywire" which indicate that DLL Hell is still alive and well when it comes to programming against the .NET Framework.

This brings me to my point. Recently Shawn Steele of Microsoft wrote a blog post entitled Security patch MS07-040 for .Net 2.0 breaks some culture names for .Net 2.0 on Windows XP/2003/2000 where he writes

The .Net patch of July 10th, ms07-049, changes culture names to use the new names on Windows XP/2003/2000 as well as Vista...Unfortunately this change can break applications that expect the old names.  If that happens, the workaround of creating custom cultures might work for your application.

Potential problems experienced by applications could be:

  • client/server communication because one used the old names and one used the new names.  A workaround is to create custom cultures with the old names and choose a parent fallback for them.
  • Visual Studio projects probably need migrated to use the new names for the resources, otherwise there could be confusion compiling and loading resources.
  • If this is your system locale there could be problems loading resources using the old name, depending on the behavior.  In this case creating custom cultures for the old names and replacements for the new names with the old names as the parent culture may solve the problem.

This problem affects the following cultures supported by RSS Bandit; zh-CHT->Chinese (Traditional), zh-CHS->Chinese (Simplified), sr-SP-Cyrl->Serbian (Cyril), and sr-SP-Latn (Latin).

The blog post is unclear but it sounds like RSS Bandit may for our Chinese and Serbian users who have updated their versions of the .NET Framework. However I’m not 100% sure this is the case. If you are an RSS Bandit user whose environment is set to Chinese or Serbian and have applied the recent .NET Framework security patch, please respond to this comment with information about any problems you are facing or let me know if there are no problems.

Thanks for your continued support.

Now playing: T.I. - Big Things Poppin (Do It)


Categories: Programming | RSS Bandit

I'm continuing along with my plan to build an application on the Facebook platform. So far I've made a couple of decisions about the technology I'll use. So far I’ve decided

  • The application will be built on Amazon's Simple Storage Service (S3) and Elastic Compute Cloud (EC2) services for two reasons. The first is that it seems to be the cheapest solution out there for application hosting which can deal with large swings of traffic (if necessary). The second is that I’d like to learn about Amazon’s hosting platform and there’s no better way to learn than actually writing code.

  • The application will be built on the LAMP stack because it seems there are a lot more high quality,  cheap or free tools for building online services available for that platform than the WISC platform. 

  • It will use a Web application development framework that enables rapid Web development which is designed for the Web as opposed to having some HTTP related features being bolted on.

  • I will also use this opportunity to meet my new year's resolution of learning a dynamic programming language which is significantly different from the languages I'm most familiar with (i.e. C#, Java, Javascript).

From looking around the Web, it seems there are two language/web framework combinations that can fit the bill; Django which uses the Python programming language and Rails which uses the Ruby programming language. I haven’t done much investigation yet but so far it seems I’m leaning towards Python/Django for a number of reason

  1. There doesn’t seem to be a tutorial as comprehensive as Dive Into Python for Ruby.
  2. It’ll be easier to transfer Python programming skills to development with the .NET Framework since IronPython is now quite mature while IronRuby doesn’t seem to have gotten out of the prototype phase.
  3. I've read a lot of rants on the Web that indicate that Rails treats referential integrity within the database (i.e. foreign keys) as a second class citizen. See posts like I gave up on referential integrity, Are Foreign Keys Worth Your Time? and Rails' Ridiculous Restrictions, a Rant. On the other hand, Django seems to have built-in support for foreign keys.

I understand these aren’t the only criteria one should use when comparing Web application frameworks and there is a good rundown in Sam Newman's A comparison of Django with Rails. However these are the criteria that are important to me and it looks like it’s Python and Django for me. Unless someone out there has any other points I failed to consider?

Now playing: Shop Boyz - Party Like A Rockstar


Categories: Web Development

One of the side effects of working for a large, successful, multinational corporation is that you tend to lose your sense of perspective. For example, take this post from the Official Google blog entitled Cookies: expiring sooner to improve privacy which states

We are committed to an ongoing process to improve our privacy practices, and have recently taken a closer look at the question of cookie privacy. How long should a web site "remember" cookie information in its logs after a user's visit? And when should a cookie expire on your computer? Cookie privacy is both a server and a client issue.

On the server side, we recently announced that we will anonymize our search server logs — including IP addresses and cookie ID numbers — after 18 months.
In the coming months, Google will start issuing our users cookies that will be set to auto-expire after 2 years, while auto-renewing the cookies of active users during this time period. In other words, users who do not return to Google will have their cookies auto-expire after 2 years. Regular Google users will have their cookies auto-renew, so that their preferences are not lost. And, as always, all users will still be able to control their cookies at any time via their browsers.

What’s is interesting in this post is that Google has sidestepped the actual privacy issue that has many people concerned about the amount of knowledge the company has about Internet users. Numerous bloggers such as Nelson MinarShelley Powers and John Dowdell have already pointed how this change doesn't actually change the status quo. In today’s world, Google knows more about most Internet users than their spouse. Thanks to the magic of HTTP cookies Google knows remembers...

You pretty much can't use the Web without running into a Google cookie. So it seems somewhat facetious for Google to claim that if you can avoid using the Internet for two years then they'll forget everything they are storing about you. Oops, actually they don't even claim that. They simply claim that they’ll stop associating your old data with your current usage, if you manage to avoid hitting a Google cookie for two years. 

If Google really wanted to address people's privacy concerns they’d blog about how they plan to use and protect all the data they are collecting about Internet users from all of their services instead of making ineffective token gestures that are specific to one service.      

Now playing: Lil Boosie & Webbie - Wipe Me Down (feat. Foxx)


Disclaimer: This may sound like a rant but it isn't meant to be. In the wise words of Raymond Chen this is meant to highlight problems that are harming the productivity of developers and knowledge workers in today's world. No companies or programs will be named because the intent is not to mock or ridicule. 

This morning I had to rush into work early instead of going to the gym because of two limitations in the software around us.

Problem #1: Collaborative Document Editing

So a bunch are working on a document that is due today. Yesterday I wanted to edit the document but found out I could not because the software claimed someone else was currently editing the document. So I opened it in read-only mode, copied out some data, edited it and then sent my changes in an email to the person who was in charge of the document. As if that wasn’t bad enough…

This morning, as I'm driving to the gym for my morning work out, I glance at my phone to see that I've received mail from several co-workers because it I've "locked" the document and no one can make their changes. When I get to work, I find out that I didn’t close the document within the application and this was the reason none of my co-workers could edit it. Wow.

The notion that only one person at a time can edit a document or that if one is viewing a document, it cannot be edited seems archaic in today’s globally networked world. Why is software taking so long to catch up?

Problem #2: Loosely Coupled XML Web Services

While I was driving to the office I noticed another email from one of the services that integrates with ours via a SOAP-based XML Web Service. As part of the design to handle a news scenario we added a new type that was going to be returned by one of our methods (e.g. imagine that there was a GetFruit() method which used to return apples and oranges which now returns apples, oranges and bananas) . This change was crashing the applications that were invoking our service because they weren’t expecting us to return bananas.

However, the insidious thing is that the failure wasn’t because their application was improperly coded to fail if it saw a fruit it didn’t know, it was because the platform they built on was statically typed. Specifically, the Web Services platform automatically converted the XML to objects by looking at our WSDL file (i.e. the interface definition language which stated up front which types are returned by our service) . So this meant that any time new types were added to our service, our WSDL file would be updated and any application invoking our service which was built on a Web services platform that performed such XML<->object mapping and was statically typed would need to be recompiled. Yes, recompiled.

Now, consider how many potentially different applications that could be accessing our service. What are our choices? Come up with GetFruitEx() or GetFruit2() methods so we don’t break old clients? Go over our web server logs and try to track down every application that has accessed our service? Never introduce new types? 

It’s sad that as an industry we built a technology on an eXtensible Markup Language (XML) and our first instinct was to make it as inflexible as technology that is two decades old which was never meant to scale to a global network like the World Wide Web. 

Software should solve problems, not create new ones which require more technology to fix.

Now playing: Young Jeezy - Bang (feat. T.I. & Lil Scrappy)


Categories: Technology | XML | XML Web Services

July 16, 2007
@ 06:57 PM

Charlie Kindel just announced on the Windows Home Server team blog that the final version of the software has been released to manufacturing (RTM). This means that you'll be able to buy a dedicated home server from Fujitsu-Siemens, Gateway, HP, Iomega, Lacie or Medion in the next few months.

I wonder if that means we'll soon be seeing the following ad on TV?


Categories: Life in the B0rg Cube

I just read two blog posts this morning about big shots in the technology industry who are on Facebook. The posts were Jeff Pulver's Goodbye LinkedIn. Hello Facebook. and Robert Scoble's Why Facebook, why now?

Both posts got me to wondering how many execs from major Internet companies like Google, Yahoo!, and Microsoft could you actually find on Facebook. One of the cool things about the search engine on Facebook is that it shows you what “networks” the people who match the query are members of. Since the person has to have an email address from that domain (either a corporate email address or a college alumni email address) then you can be fairly certain that the profile isn’t fake. Here’s who I found after a few minutes of quick searches, you may have to be a member of Facebook to see the search results

Google Execs on Facebook

  1. Marissa Mayer (view friends): Found via
  2. Adam Bosworth (view friends): Found via
  3. Kai-Fu Lee (view friends): Found via

Yahoo! Execs on Facebook

  1. Brad Garlinghouse (view friends): Found via
  2. Jeff Weiner (view friends): Found via
  3. Qi Lu: (view friends): Found via

Microsoft Execs on Facebook

  1. Ray Ozzie (view friends): Found via
  2. Steven Sinofsky (view friends): Found via
  3. Steve Ballmer (friend's list marked private): Found via

How many of these folks do you think have a profile on MySpace? I think this is definitely another data point which validates danah boyd’s theory on the differences between the user base of both sites.


Categories: Social Software

July 16, 2007
@ 05:08 PM

I dreamt I bought an iPhone. It was one of those dreams that seems so real you wake up thinking it happened. I finally realized it was a dream after I found my old phone plugged into its charger and not a brand new phone.

How weird is that?


Categories: Personal

Yesterday I saw a blog post by John Battelle where he said he turned down a chance to be part of discussion on a television show about whether Facebook is the next Google. This seems like a pretty absurd assertion on the face of it and the reason is snuggled somewhere in the middle of Robert Scoble's post Why Facebook, why now? where he writes

Everything I do in Facebook is about interacting with people. For instance, at the top of my Facebook inbox right now is Ryan Coomer. The advertising next to him says “Try Forex Trading Today.” There is absolutely NO connection between who Ryan is and the advertising that’s put next to him.

Imagine if advertisers could “buy people.” I just clicked on Ryan’s profile, hes into Running and Golf. Why don’t ads for running and golf gear get put onto his profile? Wouldn’t that make sense? He’s also a software developer. Where’s the Visual Studio advertisement? He’s into video games. Where’s the Halo 3 advertisement?

Translation: Facebook needs an advertising platform and it needs one in the worst way. I’m not going to even look at the ads until the ads are tied to the people on Facebook. Facebook knows what we’re into, put ads for those things onto our profiles and messages.

Robert Scoble is both right and wrong. He is right that Facebook needs an advertising platform but he is wrong about how it should be used. If Facebook has detailed demographic data about all its users then it makes the most sense to show the user what they are most interested in and not what the person they are currently interacting with on the site is most interested in. That's counter productive. I hate running and golf, I like G-Unit and alcopops. Which ads does it make more sense to show me if I'm browsing Ryan Coomer's profile?

Anyway, that's besides the point. Let's go back and look at what made Google such a compelling investment when they had their IPO. The company had

  1. An extremely popular website that served a key need for its users. 
  2. A way to make a metric ton of money from their popularity via search ads.

#1 is obvious but #2 needs further clarification. Search advertising created a paradigm shift in the advertising market in several ways. For one, it was the first time in the history of advertising that advertisers had a way to conclusively calculate the ROI of their advertising campaigns compared to other media (TV, newspapers, radio, sponsorships, etc). More importantly, it allowed advertisers to target people when they were in the process of making a buying related decision (i.e. doing research). For the most part advertising is often intrusive, irrelevant and often just plain annoying. On the other hand, ads shown when you are doing research for a commercial transaction are exactly what you want. It is quite telling when you look at highest paying search terms and see that it is for terms like "mortgage refinance", "dui" and "consolidate loans". When searching for those terms I want to see ads, in fact the more ads the better.  What is most interesting is that even though the majority of searches on the Web are non-commercial, this was still a goldmine which could only get more lucrative as more people got on the Web and advertisers eventually realized that their dollars needed to follow the eyeballs and search advertising was actually an easier expense to justify than all their other ad campaigns.

Now we know what made Google such an attractive investment back in the day which has now turned itself into a major force in the software industry and on the Web. So what does Facebook have?

  1. An extremely popular website that served a key need for its users. 
  2. The hope that way will be able to make a metric ton of money from their popularity via highly targeted ads based on all the rich demographic data they have about their users.

The initial thrust of #2 is that Facebook hasn't figured out how to make money yet. More importantly, if they do figure out how to build an ad platform it will likely be a system that is more complex than Google's Adwords and AdSense combined. When you think about it Adwords is pretty simple, allow people to bid on search terms then show these people's ads when people use those search terms. AdSense is similarly straightforward, use term extraction to convert the content on the page to the equivalent of search terms and show ads from the people who bid on ads. Of course, the devil is in the details and is mainly about optimizing how much money can be extracted from their advertisers.

On the other hand, if you want to show display ads based on demographic data you'll also need to build something very similar to a recommendation system as well as everything else I've described because you want to know that if I like wearing G-Unit clothing that I probably wouldn't mind seeing ads for Ecko Unlimited wear either or that if I like music by Young Jeezy that I probably would like music from T.I. or that if I've read Freakonomics I probably wouldn't mind reading The Tipping Point.

Now let's assume that the developers at Facebook figure out how to build an advertising platform that is more complex than Google's Adwords and AdSense combined. There is still the question of whether the "spray and pray" approach that is the hallmark of display advertising [even if you are sure that the ads will be about the topics the user is interested in]  is a more lucrative model than showing people ads when they are actually looking for something via search ads. I personally don't think it will be but I'm no expert and I'm definitely no fortune teller.

I suspect that the folks at Facebook will eventually realize how hard a problem it is to monetize their users in a way that justifies the exorbitant valuation that has now been placed on them. When that time comes, I wouldn't be surprised if they find some sucker to buy them based on the promise that they present as opposed to the value that they actually bring. Almost like when Yahoo! paid $5 billion for which gave us the Mark Cuban we all know and love but also ended up as one of the top five worst billion dollar acquisitions of all time in the Internet space.