Microblogging via XMPP

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    14 Favorites & 2 Groups

    Microblogging via XMPP - Presentation Transcript

    1. Microblogging with XMPP Real Time Web
    2. Who am I? • Name: Stoyan Zhekov • Private: married, 3 kids (boys) • Work: Software Engineer • Contact: xmpp: //zh@jabber.jp
    3. Today • XMPP (Jabber) • Microblogging • Microblogging with XMPP • My program - xmpp4r, ramaze, sequel • Questions
    4. Why? • Web 3.0 ? - Real Time Web? • RSS is not enough (SUP) • XMPP (Jabber) • Webhooks
    5. XMPP (Jabber)
    6. London-Calcutta, message + reply (Peter Saint-Andre) • 1800: 2 years (ship) • 1914: 1 month (steamship) • 1950: 1 week (airmail) • 1980: 2 days (overnight mail) • 1994: 10 min (email) • 1999: 1 sec (IM)
    7. XMPP (history) • 1998: Jeremie Miller - ICQ - AIM (perl) • 1999: First rellease • 2001: Jabber Software Fondation • 2004: XMPP RFCs (IETF)
    8. What is XMPP? • JID: node@server/Resource • Open Protocol • Decentralized - no central server • RFC 3290 (core), 3291 (messaging) • XMPP extension protocols (XEP)
    9. What is XMPP? (2) • Bidirectional, streaming XML • One first level tag: <stream> • 3 second level tags: • <presence> - presence, subscribtion • <message> - asynchronous • <iq> - synchronous
    10. XMPP Features • Build-in presence • One-to-one IM (u2u, a2u, a2a) • Groupchat • Geolocation • Security - SSL, TLS
    11. Not only for geeks • 50 000+ servers, 50+ million users • Wall Street • US Department of Defense • Cisco, Google, Apple • NTT ?
    12. You on XMPP • Free account - jabber.jp etc. • GTalk for domains • Install your own server: • ejabberd (erlang) - production • openfire (java) - easy to install / use
    13. Libraries • For a lot of OSes and languages • loudmouth (C) • xiff (flash) • smack (java) • xmpp4r (ruby)
    14. Microblogging
    15. Microblogging • Web 2.0 • What is it? • Status changes • Short notes (140 limit) • Media files
    16. Big players • Twitter • Jaiku • identi.ca (laconi.ca) - OSS • Tumblr - http://tt.zhekov.net/ • FriendFeed, Lifestream.fm
    17. Microblogging with XMPP http://www.microblog.org/
    18. Almost Real Time • XMPP bots (Jaiku, Identi.ca, FriendFeed) • GNIP - http://www.gnipcentral.com/ • RSS-to-XMPP • http://notify.me/ • http://notifixio.us/ (WP plugin)
    19. Microblogging with XMPP • Web 3.0 (Real Time Web) • PubSub - XEP-0060 • BOSH - XEP-0124 • XEP-XXXX • ....
    20. Too complicated :(
    21. Am I stupid...? :(
    22. My own program
    23. Design • XMPP bot • Simple API • Simple web frontend • Models: juick.com , kwippy.com
    24. Components • models.rb - connection to the DB • bot.rb - XMPP • api.rb - service, scaling • web.rb - browser view
    25. Models • “Things” • User • Micro • “Relations” • Subscribe - User-to-User • Subscribe - User-to-Micro • Like - User-to-Micro
    26. Relations (Sequel) class User < Sequel::Model(:users) one_to_many :micros do |ds| ds.filter(:parent_id => nil) end one_to_many :subs, :extend => UserFindOrCreate many_to_many :publishers, :class => :User, :join_table => :subs end
    27. Ruby XMPP Libraries • xmpp4r - Roster, vCard etc. • xmpp4r-simple - easy to use • jabber4r - Thread based :(
    28. XMPP Bot • http://tr.im/emxmpp (nutrun.com) • EventMachine - libevent, Deferrable • Plugins - http://tr.im/modular
    29. Concurrency EM.run do EM::PeriodicTimer.new(1) do ... EM.spawn do worker = Worker.new worker.callback {jabber.deliver(message.from, \"Done\")} worker.process end.notify ... end end class Worker include EM::Deferrable def process ... set_deferred_status :succeeded end end
    30. Plugins 1/3 PluginFactory.load \"plugins\" ... def PluginFactory.load( dirname ) Dir.open( dirname ).each do |fn| next unless ( fn =~ /[.]rb$/ ) require \"#{dirname}/#{fn}\" end end
    31. Plugins 2/3 class Plugin include EM::Deferrable def process( args = {} ) sleep(0.05) set_deferred_status :succeeded end end
    32. Plugins 3/3 class NickPlugin < Plugin def process(args = {}) begin ... set_deferred_status :succeeded rescue set_deferred_status :failed end end end class NickFactory < PluginFactory INFO=<<INFO verb: NICK author: Stoyan Zhekov description: Get or set the nickname for some user INFO def create() return NickPlugin.new() end end
    33. Simple API (json) • /users - list of users • /user/<nick>/<secret> - info for user • /status/<nick>/<secret> - presence • /micros/<page>/<format> - list of micros • /micro/<id>/<secret> - micro + comments
    34. Web (Ramaze) class MainController < Ramaze::Controller def u nick begin @user = User.find_by_user(nick) subset = @user.micros.reverse @micros, @pager = paginate(subset, :limit => PAGE) rescue Exception => e flash[:error] = \"Error: #{e.to_s}\" redirect :/, :status => 302 end end end
    35. <Demo>
    36. To Do • Commands parser - Ragel? • OAuth or http://xmppid.net/ • TokyoCabinet • XMPP Component - http://github.com/julien51/babylon • Real PubSub?
    37. Conclusion • XMPP - good, open protocol • xmpp4r-simple - good, easy to use • eventmachine - good network library • sequel - good ORM • ramaze - good web apps framework
    38. Questions?
    39. </stream:stream>

    + Stoyan ZhekovStoyan Zhekov, 9 months ago

    custom

    1956 views, 14 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1956
      • 1956 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 14
    • Downloads 34
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories