facebook on rails

23
Facebook on Rails CardinalBlue Ruby Tuesday 2009.10.20 [email protected] Friday, October 23, 2009

Upload: cardinal-blue-software

Post on 29-Aug-2014

7.125 views

Category:

Technology


0 download

DESCRIPTION

Some observations on Facebook development using Ruby on Rails, Heroku, Facebooker, New Relic Presented at Ruby Tuesday, Taipei, 2009.10.20

TRANSCRIPT

Page 1: Facebook on Rails

Facebook on Rails

CardinalBlue

Ruby Tuesday 2009.10.20

[email protected]

Friday, October 23, 2009

Page 2: Facebook on Rails

300 million Facebook users around the world

40% of all Internet Users in North America

are on Facebook!

Friday, October 23, 2009

Page 3: Facebook on Rails

Facebook Trends (台灣)

73 天後*用戶者成長了三倍

*連續幾個禮拜成長率世界第一

女性使用者稍多

學生與白領階級居

Friday, October 23, 2009

Page 4: Facebook on Rails

Facebook Apps Boom

Friday, October 23, 2009

Page 5: Facebook on Rails

Friday, October 23, 2009

Page 6: Facebook on Rails

Demographic Trends

• More female gamers

• More younger (ages 8-15) gamers

• More older (ages 50+) gamers

Friday, October 23, 2009

Page 7: Facebook on Rails

FB Games are Social• Trend #1: Virtual Worlds

• e.g., YoVille, PetSociety

• Trend #2: Customization & Personalization

• e.g., Nintendo’s “Mii” avatars, Buddy Poke

• Trend #3: Collections and Wish Lists

• e.g., Mafia Wars

• Trend #4: Interaction and Engagement

• Farm Town, FarmVille, Barn Buddy

• Trend #5: Narrative and Missions

Friday, October 23, 2009

Page 8: Facebook on Rails

FB Games are Social• Trend #6: Gift Invites

• e.g., Lil Green Patch, Give a Heart

• Trend #7: Donations as Revenue

• e.g., SpareChange, PayPal

• Trend #8: Virtual Goods

• e.g., Mafia Wars, PetSociety

• Trend #9: Recruiting Users

• e.g., FarmVille, Restaurant City, Tycoons

• Trend #10: Capitalizing on Player Resources

• e.g., All that Glitters, Photo-of-the-Day

Friday, October 23, 2009

Page 9: Facebook on Rails

FBML Application Architecture

Friday, October 23, 2009

Page 10: Facebook on Rails

Facebook apps on Rails

• Rails 2.3.3

• Facebook API via Facebooker

• Hosted on Heroku

• Monitor via NewRelic

Friday, October 23, 2009

Page 11: Facebook on Rails

User model

Facebook UIDs are 64-bit, so need bigint for User#id

create_table :users, :id => false do |t|t.column :id, "bigint PRIMARY KEY", :null => false...t.timestamps

end

Associations can be done based on user_id

create_table :balloonst.column :user_id, :bigint...t.timestamps

end

Friday, October 23, 2009

Page 12: Facebook on Rails

Facebooker

• Wrapper for Facebook API

• Facebooker::User to query user data

• Facebooker::Publisher for feeds/notifications

Friday, October 23, 2009

Page 13: Facebook on Rails

Facebooker

• Wrapper for Facebook API

• Facebooker::User to query user data

• Facebooker::Publisher for feeds/notifications

Friday, October 23, 2009

Page 14: Facebook on Rails

Preload FQL• Facebooker::User to query user data

• Since query can take 500ms or more, use Preload FQL to pre-query the data

preload_fql = Hash.newpreload_fql[:preload_user_data] = { :pattern => ".*", :query => "SELECT name,birthday_date FROM user WHERE uid={*user*};"}

Facebooker::Admin.new(Facebooker::Session.create).set_app_properties({:preload_fql => preload_fql.to_json})

• Obtain the preloaded data on every page: params[:fb_sig_user_data]

Friday, October 23, 2009

Page 15: Facebook on Rails

Open Stream API

• Facebooker::Publisher for feeds/notifications

• Facebook has deprecated template bundles

• Instead use the Open Stream API:<script>var attachment = {'media':[{'type':'image', 'src':'http://cardinalblue.com/images/cblue_logo_white100.png', 'href':'http://cardinalblue.com'}]};Facebook.streamPublish('Hello Cardinal Blue', attachment);</script>

Friday, October 23, 2009

Page 16: Facebook on Rails

Functional tests with facebook_get

test "requires-login page, logged in" do facebook_get :install assert_response :success assert_nil facebook_redirect_url end

test "requires-login page, not logged in" do # access a page that requires login facebook_get :install, :fb_sig_user => nil assert_response :success assert_not_nil facebook_redirect_url assert facebook_redirect_url.match("http://www.facebook.com/install.php")end

Friday, October 23, 2009

Page 17: Facebook on Rails

Heroku

Friday, October 23, 2009

Page 18: Facebook on Rails

Scaled to over 10000 requests per minute

Friday, October 23, 2009

Page 19: Facebook on Rails

Heroku features• Uses nginx, thin, postgres, Amazon EC2

• Easy Deployment: git push heroku master

• Flexible Scaling: heroku dynos +1

• Free Memcache: Rails.cache

• Delayed Job: facebook_session.send_notification(...) facebook_session.send_later(:send_notification,...)

• New Relic

Friday, October 23, 2009

Page 20: Facebook on Rails

New Relic

Facebooker

Friday, October 23, 2009

Page 21: Facebook on Rails

Can set up custom tracers:

Facebook/query Facebook/notify Facebook/feed

class NewrelicTracer def self.query yield end class << self add_method_tracer :query, 'Custom/Facebook/query' endend

NewrelicTracer.query do location = facebook_session.user.current_locationend

Friday, October 23, 2009

Page 22: Facebook on Rails

Observations

• Facebook is growing

• Facebook games are social

• Rails + Facebooker = Facebook app

• Heroku is fun (and scalable)

Friday, October 23, 2009

Page 23: Facebook on Rails

Thank you. 謝謝觀賞

http://cardinalblue.com/about

[email protected]

Friday, October 23, 2009