Thursday, July 24, 2008

BaconMarathon was at F8 yesterday...

...and here are the take aways.

The BaconMarathon opinion of the state of the Facebook Partner Platform:

Year 1 = a ton of abusive applications taking advantage of the fb tools that were provided

Year 2 = will be about creating engaging 'real' applications by playing by the rules to build user trust and focusing on engagement

Year 3 = making money. So much talk about needed payment systems, etc.

The new Facebook user experience is all about the 'news feeds'. When we started top3Clicks the news feed was really the 'third' option behind the emails and notifications for getting the word out to friends on what is going on.

In the business track, Mark Pinkus and panel had some great advice for the young entrepreneurs:

1. If you are building an app on Facebook today you are way ahead of everyone out there today.

2. F8 feels like the first Internet World back in 1995 (we were there and agree!)

3. If you go to Yahoo's front page there will probably be an fb app for every link on that page by next year.

4. Make something engaging and use the social graph as a 'tool' to achieve viral-ness. don't make something viral then figure out engagement.

5. Good VC's focus on the team first and the idea second.

6. Ship often and learn <-- something we learned many many years ago.

Wednesday, July 2, 2008

Great EC2/S3 Tool

Tim Kay of ActiveBuddy fame has been working on aws, which he says provides “simple access to Amazon EC2 and S3”. I ran into Tim a while ago and we chatted about aws – around the same time, I also heard about it from Mike.

As all the BaconMarathon apps are running on EC2 and using S3 for storage, I’ve been looking for an easier way to interface with S3 in particular. I finally got around to trying out aws the other day and found it be more than advertised. Finally, I had one simple command to examine buckets on S3:

aws ls

That was it. Creating buckets, puts and gets are just as simple:

aws mkdir BUCKET
aws put BUCKET/[OBJECT] [FILE]
aws get BUCKET

We’re now using aws to push our MySQL backups to S3 on a scheduled basis – a simple change to our existing backup jobs

Monday, June 30, 2008

How do you distribute a ton of dynamic iTunes online coupon codes?

That is the question we were recently asked by our good friend Heidi Roizen.

BaconMarathon Labs took a step back and thought about how we are tackling scalability and delivery of dynamic content with top3Clicks and applied these concepts to help Heidi distribute a large number of redeemable iTunes coupons.

To see it in action, go to: http://www.skinnysongs.com/greathealth/
and take a look at the upper right corner of the page for the "Get a free download of 'Skinny Jeans' on iTunes".

The Bacon portion of the BaconMarathon Labs testimonial:

"While working on getting this feature live, I downloaded 'Skinny Jeans', put it on my iPod, went to the Potrero Hill 24hr fitness and proceeded to listen to the song while getting my butt kicked during my daily painful 30 minutes of running in place...


...and the 30 minutes flew by."


Stay tuned for some hot new top3Clicks features coming down the pike!

Friday, June 13, 2008

Dialogs and Asychronous Calls in Facebook

One feature of BaconMarathon's Top3Clicks Facebook application allows users to construct free-form item searches. The search queries are augmented and are used as we attempt to find items that are relevant to the user. To make this work, lots of things are going on in the back-end. The UI output is a list of items displayed in the rotator.

Like any application, we need to make this process as fast as possible, while providing the user visual cues to let them know the application is working quickly to provide a result. One of the strongest pieces of feedback we have had is in this area - and something we've tried to tackle in several different ways.

Our design goals were as follows:

  • call the back-end asynchronously
  • provide cues to the user via a UI dialog
  • tear-down (hide) the dialog when the back-end has completed its' tasks and refresh the UI with the latest information
Yesterday, we rolled out our latest iteration (shown below), which utilizes FBJS and Ajax.

Facebook dialog with Ajax post

Using this post as a basis, we made a number of tweaks, most notably the ondone function of the asynchronous call (via ajax.post) handles the form submission and actual tear-down of the dialog. Implementing it was non-trivial as the FBML Test Console didn't seem to like any ajax.post calls we made. Unfortunately, the onerror function does not provide any information about the cause of failure. Firebug was a large help -- make sure to use it if you are debugging FBJS.

Our current implementation looks something like this:


FBJS
function showItemDialog() {
var title = 'Add Item'
var ok = 'Cancel'
//create dialog
var dialog = new Dialog().showMessage(title,add_dialog_fbml,ok);
var ajax = new Ajax();
ajax.responseType = Ajax.FBML;
ajax.requireLogin = true;
//ondone function, called when post returns
ajax.ondone = function(data) {
frm = document.getElementById(searchForm);
if (frm) { frm.submit(); }
dialog.hide();
};

//onconfirm actually does nothing
dialog.onconfirm = function() { };
//grab input value and use in ajax.post call
var item = document.getElementById('item').getValue();
var params={'item':item};
ajax.post("http://www.yourdomain.com/index.php",params);
}
FBML
<form method="get" action=http://apps.facebook.com/yourappname/search.php name="search" id="searchForm">
<input type=text name=item id=item>
<a href="http://apps.facebook.com/yourappname/#" onclick="showItemDialog(); return false;">
<img src="http://www.yourdomain.com/submit.gif" border="0"></a>
</form>
<fb:js_string var="add_dialog_fbml">
<div id="add_dialog">
<div class="dialog_loading">
<img src="http://www.yourdomain.com/loader.gif"/> Retrieving item info ...
</div>
</div>
</fb:js_string>
Try it out and let us know what you think!

Thursday, June 12, 2008

3 Good Books for Facebook Developers

If you are building an app for Facebook, good information can be hard to find. The Developer Docs do a decent job at getting you up to speed, but don't dive too deep.
A few of my favorite books at the moment are:

1. Facebook Application Development - most heavily used book in my collection. Solid examples, minimal errata.



2. Facebook Applications - Good sample app in the last third of the book that goes beyond simple implementation.




3. Facebook API Developers Guide - Great kick-starter, super quick read. Doesn't dive deep, but lays it out in a readily consumable fashion.


One overall issue - I haven't found a book that uses anything other than PHP. As we're using Java for our BaconMarathon apps, we've had to do a bit of "translation", but it hasn't slowed things down much.

Optimizing -- On our minds all the time!

One of the things we are consistently hearing from the early feedback is when adding the app for the first time, "there are 'no items' appearing right away... and if I come back in a bit then I see many products (from my profile)"

Well to be honest... the app was taking significant time to grab suggestion items from Amazon. Presenting, depending on the items searched, a really bad first time experience.
So after much thought, perspiration and of course genius intellect, we just went live with an 'under the covers' optimization that speeds up product adds for new users of top3Clicks by 75%!!!

Also note, we added some feedback (screenshot below) when we're taking some time to load items into top3Clicks. It feels a ton better...


As always, thanks again for all the wonderful feedback. If you find top3Clicks to be useful, please pass it along to your friends. -- the BaconMarathon team