UPDATE: Animoto just raised a round of investment from Amazon! Congrats Guys!
Animoto is a great idea. They take your photos and create a production quality video to the music of your choice. Its the end of those boring slide shows, for good.
We had the pleasure to work with the Animoto guys to launch their Facebook application, "Animoto Videos", which leveraged all of the existing photos on Facebook. The growth was amazing.
Scaling an application from a few hundred users to over a million in just a few days isnt easy, but we had a great team. Their backend rendering farm lived in Amazon's Cloud, and the growth was so impressive, Jeff Bezos even spoke about them at Y Combinator’s Startup School just a few weeks ago. From 50 EC2 instances to over 4k in only a few days. See the video below.
It was a pleasure working with the entire team from Animoto, RightScale, and Amazon. See their blog posts about the application here, here, and here.
I'm sure I'll cross paths with many of you at RailsConf. First round of beers is on me.
Since all canvas page views are proxied through POSTs, resource routes were hopelessly broken. The Facebook platform team was kind enough to add a new feature just for us rails folks: a new signed parameter that indicates the original request type (i.e. POST v. GET) against canvas pages.
Here's a small patch you can stick at the end of environment.rb to restore REST-ful routes.
UPDATE: Here's a slightly better implementation that allows the .get? and .post? helpers as well as a few other things to work (thanks Chris Nolan for reminding us to update this blog entry):
ActionController::AbstractRequest.class_eval do
def request_method_with_facebook_overrides
@request_method ||= begin
case
when parameters[:_method]
parameters[:_method].downcase.to_sym
when parameters[:fb_sig_request_method]
parameters[:fb_sig_request_method].downcase.to_sym
else
request_method_without_facebook_overrides
end
end
end
alias_method_chain :request_method, :facebook_overrides
end
This morning the Chicago Tribune had an article entitled “Facebook lets money flow”, which among otherrecent articles, outlines something Facebook got right. I spoke with the article’s author Eric Benderoff earlier in the week to discuss Hungry Machine’s monetization strategies on Facebook.
While MySpace has allowed third party companies to embed widgets for quite some time, Facebook took it a step further and allowed full featured applications to reside “within” the Facebook experience, like the Social Shopping experience in Visual Bookshelf. Most importantly, Facebook allowed these applications almost full control over the application experience.
Beyond selling our own display advertising across the social shopping suite and our 20+ other applications, we can provide advertisers the ability to leverage Social Data to target customers directly. Social Data Demographics includes what user’s watch, read, listen to, and use. Beyond the traditional demographics of age, sex, and location, social data takes that a step further.
For example, the Harry Potter Book 7 in Visual Bookshelf has 4x the number of book reviews as the same title on Amazon. Hundreds of thousands of users have added books from the Harry Potter series to their bookshelves. That community is active on Facebook. Why wouldn’t an advertiser want to target Harry Potter readers when the next Harry Potter movie comes out?
This is the next phase of advertising in the social application space.
Developing applications for Facebook is a pain. The tunnel approach helps a lot to ease that pain but even then I prefer to start a FB app as a regular application, polish the logic, and then convert it to the Facebook one by adding FBML and such. At the early stages of the development I have the mocked parameter in config/facebook.yml set to true and keep this code in config/initializers/facebook.rb:
Some facebook applications might have multiple entries. For example, a user might be adding an application (action – new) or replying to an invitation (action – reply, param – id). Since the UI for Facebook application configuration allows to provide only static Post-Add URL it might seem like there is no way to route users back to the original action if they tried to reach when the application has not been installed for them. Luckily, we have full control on the destination via the next paramater of the post install URL. All we need is to build a URL using the incoming call parameters with the exclusion of Facebook-specific ones.
This is an example for Facebook on Rails based code that might go to the application controller:
Sometimes it is useful to do some action on a Facebook user right after your application has been installed by the user. For example, you might want to push some default FBML to user’s profile in case he does not complete the action you expect him to do after installation. Facebook application configuration allows to provide Post-Add URL to route users to the destination url after the application install. It could be a dedicated post_add action or, in case of a default action where you have some code in the controller and since Facebook limits amount of redirects you can use, it could be a parameter to the url, like &init=true, used to identify that it was a post-install action and execute on it.
Hungry Machine is a full service web development group specializing in the design, development, and deployment of Ruby on Rails applications. Contact us at inquiries@hungrymachine.com