├── VERSION ├── spec ├── spec.opts ├── spec_helper.rb ├── myspace.json ├── activity_streams_spec.rb ├── lastfm.xml └── twitter.xml ├── .document ├── lib ├── activity_streams │ ├── version.rb │ ├── portable_contact.rb │ ├── feedzirra_patches.rb │ └── common_fields.rb └── activity_streams.rb ├── Gemfile ├── .gitignore ├── Rakefile ├── Gemfile.lock ├── LICENSE ├── activity_streams.gemspec └── README.rdoc /VERSION: -------------------------------------------------------------------------------- 1 | 0.2.1 2 | -------------------------------------------------------------------------------- /spec/spec.opts: -------------------------------------------------------------------------------- 1 | --color 2 | -------------------------------------------------------------------------------- /.document: -------------------------------------------------------------------------------- 1 | README.rdoc 2 | lib/**/*.rb 3 | bin/* 4 | features/**/*.feature 5 | LICENSE 6 | -------------------------------------------------------------------------------- /lib/activity_streams/version.rb: -------------------------------------------------------------------------------- 1 | module ActivityStreams 2 | VERSION = "0.2.2" 3 | end 4 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source :gemcutter 2 | 3 | group :development do 4 | gem 'rspec', '~> 1.2.9' 5 | gem 'yard' 6 | end 7 | 8 | gem 'sax-machine', '~> 0.0.15' 9 | gem 'feedzirra' 10 | gem 'json' 11 | gem 'hashie' 12 | 13 | -------------------------------------------------------------------------------- /lib/activity_streams/portable_contact.rb: -------------------------------------------------------------------------------- 1 | module ActivityStreams 2 | class PortableContact 3 | include SAXMachine 4 | element :"poco:givenName", :as => :given_name 5 | element :"poco:familyName", :as => :family_name 6 | end 7 | end -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift(File.dirname(__FILE__)) 2 | $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) 3 | require 'activity_streams' 4 | require 'spec' 5 | require 'spec/autorun' 6 | 7 | Spec::Runner.configure do |config| 8 | 9 | end 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## MAC OS 2 | .DS_Store 3 | 4 | ## TEXTMATE 5 | *.tmproj 6 | tmtags 7 | 8 | ## EMACS 9 | *~ 10 | \#* 11 | .\#* 12 | 13 | ## VIM 14 | *.swp 15 | 16 | ## PROJECT::GENERAL 17 | coverage 18 | rdoc 19 | pkg 20 | 21 | ## PROJECT::SPECIFIC 22 | .yardoc 23 | doc/ 24 | -------------------------------------------------------------------------------- /lib/activity_streams/feedzirra_patches.rb: -------------------------------------------------------------------------------- 1 | # Monkey patching feedzirra to support defining multiple elements on existing Entry classes 2 | module Feedzirra 3 | class Feed 4 | def self.add_common_feed_entry_elements(element_tag, options = {}) 5 | feed_classes.map{|k| eval("#{k}Entry") }.each do |klass| 6 | klass.send(:elements, element_tag, options) 7 | end 8 | end 9 | end 10 | end -------------------------------------------------------------------------------- /lib/activity_streams/common_fields.rb: -------------------------------------------------------------------------------- 1 | module ActivityStreams 2 | module CommonFields 3 | def self.included(klass) 4 | klass.class_eval do 5 | include SAXMachine 6 | include Feedzirra::FeedEntryUtilities 7 | 8 | elements :"activity:object-type", :as => :object_types 9 | element :id 10 | element :title, :with => {:type => "text"} 11 | element :content 12 | elements :link, :as => :links, :value => :href 13 | element :"poco:name", :as => :poco_name, :class => ActivityStreams::PortableContact 14 | element :name, :as => :author 15 | end 16 | end 17 | end 18 | end -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler' 2 | Bundler::GemHelper.install_tasks 3 | 4 | require 'spec/rake/spectask' 5 | Spec::Rake::SpecTask.new(:spec) do |spec| 6 | spec.libs << 'lib' << 'spec' 7 | spec.spec_files = FileList['spec/**/*_spec.rb'] 8 | end 9 | 10 | Spec::Rake::SpecTask.new(:rcov) do |spec| 11 | spec.libs << 'lib' << 'spec' 12 | spec.pattern = 'spec/**/*_spec.rb' 13 | spec.rcov = true 14 | end 15 | 16 | task :default => :spec 17 | 18 | begin 19 | require 'yard' 20 | YARD::Rake::YardocTask.new 21 | rescue LoadError 22 | task :yardoc do 23 | abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard" 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | activesupport (3.0.0) 5 | builder (2.1.2) 6 | curb (0.7.8) 7 | feedzirra (0.0.24) 8 | activesupport (>= 2.3.8) 9 | builder (>= 2.1.2) 10 | curb (>= 0.2.3) 11 | loofah (>= 0.3.1) 12 | nokogiri (> 0.0.0) 13 | sax-machine (>= 0.0.12) 14 | hashie (0.4.0) 15 | json (1.4.6) 16 | loofah (0.4.7) 17 | nokogiri (>= 1.3.3) 18 | nokogiri (1.4.3.1) 19 | rspec (1.2.9) 20 | sax-machine (0.0.15) 21 | nokogiri (> 0.0.0) 22 | yard (0.6.1) 23 | 24 | PLATFORMS 25 | ruby 26 | 27 | DEPENDENCIES 28 | feedzirra 29 | hashie 30 | json 31 | rspec (~> 1.2.9) 32 | sax-machine (~> 0.0.15) 33 | yard 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009 Ruben Fonseca 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /activity_streams.gemspec: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | require File.expand_path("../lib/activity_streams/version", __FILE__) 3 | 4 | Gem::Specification.new do |s| 5 | s.name = %q{activity_streams} 6 | s.rubyforge_project = %q{activity_streams} 7 | s.version = ActivityStreams::VERSION 8 | s.platform = Gem::Platform::RUBY 9 | 10 | s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= 11 | s.authors = ["Ruben Fonseca"] 12 | s.date = %q{2010-09-10} 13 | s.description = %q{Ruby module to eat and parse ActivityStreams in various formats} 14 | s.summary = %q{Ruby module to eat and parse ActivityStreams in various formats} 15 | s.email = %q{root@cpan.org} 16 | 17 | s.extra_rdoc_files = [ 18 | "LICENSE", 19 | "README.rdoc" 20 | ] 21 | s.files = `git ls-files`.split("\n") 22 | s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact 23 | s.test_files = `git ls-files`.split("\n").map{|f| f =~ /(^spec\/.*)/ ? $1 : nil}.compact 24 | s.require_path = 'lib' 25 | 26 | s.homepage = %q{http://github.com/webcracy/activity_streams} 27 | s.rdoc_options = ["--charset=UTF-8"] 28 | s.require_paths = ["lib"] 29 | s.rubygems_version = %q{1.3.7} 30 | 31 | s.add_development_dependency "bundler", ">= 1.0.0" 32 | end 33 | 34 | -------------------------------------------------------------------------------- /spec/myspace.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "entry": { 4 | "title": "Someone posted a photo", 5 | "id": "11923759128375912735912", 6 | "published": "2010-02-14T17:01:29.000Z" 7 | }, 8 | "activity": { 9 | "actor": { 10 | "id": "tag:myspace.com,2009:/Person/81472123", 11 | "links": [ 12 | "http://www.myspace.com/bmblack34" 13 | ], 14 | "objectTypes": [ 15 | "http://activitystrea.ms/schema/1.0/person" 16 | ], 17 | "title": "Brandon Black" 18 | }, 19 | "objects": [ 20 | { 21 | "id": "tag:myspace.com,2009:/Photo/1816998/76453118", 22 | "links": [ 23 | "http://c2.ac-images.myspacecdn.com/images02/6/s_be8bb90eebb4c8725724f66dcb9414f1.png" 24 | ], 25 | "source": { 26 | "id": "tag:myspace.com,2009:/Photo_Album/1816998", 27 | "title": "Misc" 28 | }, 29 | "objectTypes": [ 30 | "http://activitystrea.ms/schema/1.0/photo" 31 | ], 32 | "title": "" 33 | } 34 | ], 35 | "target": { 36 | "id": "tag:myspace.com,2009:/Photo_Album/1816998", 37 | "title": "Misc" 38 | }, 39 | "verbs": [ 40 | "http://activitystrea.ms/schema/1.0/post" 41 | ] 42 | } 43 | } 44 | ] -------------------------------------------------------------------------------- /README.rdoc: -------------------------------------------------------------------------------- 1 | = activity_streams 2 | 3 | Very early activitystream parser (http://activitystrea.ms/). The goal is to eat XML or JSON 4 | descriptions of ActivityStreams and give a common interface to query the information on them. 5 | More source formats may be included in the future. 6 | 7 | Example usage: 8 | require 'rubygems' 9 | require 'activity_streams' 10 | require 'open-uri' 11 | 12 | twitter = 'http://api.cliqset.com/feed/?svcuser=rubenfonseca&feedid=twitternotesposted' 13 | feed = ActivityStreams::Feed.from_xml(open(twitter).read) 14 | feed.entries.size #=> 20 15 | feed.entries.first.id = "http://twitter.com/rubenfonseca/statuses/10075665287" 16 | feed.entries.first.verbs.size #=> 1 17 | feed.entries.first.verbs.first #=> "http://activitystrea.ms/schema/1.0/post" 18 | ... 19 | 20 | This module is in the very early stages, alpha quality :) Have fun! 21 | 22 | If you have any question, start by looking into the _spec_ directory. 23 | 24 | == Note on Patches/Pull Requests 25 | 26 | * Fork the project. 27 | * Make your feature addition or bug fix. 28 | * Add tests for it. This is important so I don't break it in a 29 | future version unintentionally. 30 | * Commit, do not mess with rakefile, version, or history. 31 | (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) 32 | * Send me a pull request. Bonus points for topic branches. 33 | 34 | == Copyright 35 | 36 | Copyright (c) 2010 Ruben Fonseca. See LICENSE for details. 37 | -------------------------------------------------------------------------------- /lib/activity_streams.rb: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | require 'feedzirra' 3 | require 'json' 4 | require 'hashie' 5 | 6 | require 'activity_streams/feedzirra_patches' 7 | require 'activity_streams/common_fields' 8 | require 'activity_streams/portable_contact' 9 | 10 | module ActivityStreams 11 | class Object 12 | include CommonFields 13 | end 14 | 15 | class Actor 16 | include CommonFields 17 | end 18 | 19 | class Target 20 | include CommonFields 21 | end 22 | 23 | class Context 24 | include CommonFields 25 | end 26 | 27 | class Feed < Hashie::Dash 28 | attr_accessor :entries 29 | attr_accessor :raw_structure 30 | 31 | # Creates a new Feed instance by parsing the XML string as an Atom feed with ActivityStreams 32 | # extensions. 33 | # 34 | # @param [String] xml string representing an Atom feed with ActivityStreams extensions 35 | # @return [Feed] a new instance filled with the data found on the XML string 36 | def self.from_xml(xml) 37 | unless defined?(@@_feedzirra_init) 38 | @@_feedzirra_init = true 39 | Feedzirra::Feed.add_common_feed_entry_elements("activity:verb", :as => :activity_verbs) 40 | Feedzirra::Feed.add_common_feed_entry_elements("activity:object", :as => :activity_objects, :class => ActivityStreams::Object) 41 | Feedzirra::Feed.add_common_feed_entry_element("activity:actor", :as => :activity_actor, :class => ActivityStreams::Actor) 42 | Feedzirra::Feed.add_common_feed_entry_element("activity:target", :as => :activity_target, :class => ActivityStreams::Target) 43 | Feedzirra::Feed.add_common_feed_entry_element("activity:context", :as => :activity_context, :class => ActivityStreams::Context) 44 | end 45 | 46 | res = Feed.new 47 | res.raw_structure = Feedzirra::Feed.parse(xml) 48 | res.entries = [] 49 | 50 | res.raw_structure.entries.each do |entry| 51 | e = Hashie::Mash.new 52 | 53 | # entry atom fields 54 | e[:id] = entry.id 55 | e[:published] = entry.published 56 | e[:title] = entry.title 57 | 58 | # verbs 59 | e.verbs = [] 60 | entry.activity_verbs.each do |verb| 61 | e.verbs << verb 62 | end 63 | 64 | # actor, target, context 65 | [:actor, :target, :context].each do |area| 66 | e[:actor] ||= Hashie::Mash.new 67 | e[:target] ||= Hashie::Mash.new 68 | e[:context] ||= Hashie::Hash.new 69 | 70 | [:id, :links, :object_types, :title, :author, :content].each do |attr| 71 | unless entry.send("activity_#{area}").nil? 72 | e.send(:[], area).send(:[]=, attr, entry.send("activity_#{area}").send(attr)) 73 | end 74 | end 75 | end 76 | 77 | # objects 78 | e.objects = [] 79 | entry.activity_objects.each do |object| 80 | o = Hashie::Mash.new 81 | [:id, :links, :object_types, :title, :author, :content].each do |attr| 82 | o[attr] = object.send(attr) 83 | end 84 | e.objects << o 85 | end 86 | 87 | res.entries << e 88 | end 89 | 90 | return res 91 | end 92 | 93 | # Creates a new Feed instance by parsing the JSON string a list of JSON encoded ActivityStreams 94 | # 95 | # @param [String] json string representing a list of JSON encoded ActivityStreams 96 | # @return [Feed] a new instance filled with the data found on the JSON string 97 | def self.from_json(json) 98 | res = Feed.new 99 | res.raw_structure = JSON.parse(json) 100 | res.entries = [] 101 | 102 | res.raw_structure.delete_if { |x| x['activity'].nil? }.each do |item| 103 | e = Hashie::Mash.new 104 | 105 | # id, title, published 106 | if(entry = item['entry']) 107 | e.id = entry['id'] 108 | e.title = entry['title'] 109 | e.published = DateTime.parse(entry['published']).feed_utils_to_gm_time rescue nil 110 | end 111 | 112 | if(entry = item['activity']) 113 | # verbs 114 | e.verbs = [] 115 | entry['verbs'] && entry['verbs'].each do |verb| 116 | e.verbs << verb 117 | end 118 | 119 | # actor, target, context 120 | [:actor, :target, :context].each do |area| 121 | e[:actor] ||= Hashie::Mash.new 122 | e[:target] ||= Hashie::Mash.new 123 | e[:context] ||= Hashie::Hash.new 124 | 125 | [:id, :links, :object_types, :title, :author, :content].each do |attr| 126 | unless entry.send(:[], area.to_s).nil? 127 | json_attr = attr.to_s.gsub(/\_(\w)/) { $1.upcase } 128 | e.send(:[], area).send(:[]=, attr, entry.send(:[], area.to_s).send(:[], json_attr)) 129 | end 130 | end 131 | end 132 | 133 | # objects 134 | e.objects = [] 135 | entry['objects'] && entry['objects'].each do |object| 136 | o = Hashie::Mash.new 137 | [:id, :links, :object_types, :title, :author, :content].each do |attr| 138 | json_attr = attr.to_s.gsub(/\_(\w)/) { $1.upcase } 139 | o[attr] = object.send(:[], json_attr) 140 | end 141 | e.objects << o 142 | end 143 | end 144 | 145 | res.entries << e 146 | end 147 | 148 | return res 149 | end 150 | end 151 | end 152 | -------------------------------------------------------------------------------- /spec/activity_streams_spec.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path(File.dirname(__FILE__) + '/spec_helper') 2 | 3 | describe "ActivityStreams", "twitter" do 4 | before :all do 5 | @twitter_xml = IO.read(File.expand_path(File.dirname(__FILE__) + "/twitter.xml")) 6 | @feed = ActivityStreams::Feed.from_xml(@twitter_xml) 7 | end 8 | 9 | it "should parse twitter example" do 10 | @feed.should_not be_nil 11 | end 12 | 13 | it "should have 20 entries" do 14 | @feed.entries.size.should == 20 15 | end 16 | 17 | it "should have id, title and published on the first entry" do 18 | entry = @feed.entries.first 19 | entry.id.should == "http://twitter.com/rubenfonseca/statuses/9108531677" 20 | entry.title.should == "rubenfonseca: @microft humm what about dropbox?" 21 | entry.published.class.should == Time 22 | end 23 | 24 | it "should have a list of activity:verb on the first entry" do 25 | verbs = @feed.entries.first.verbs 26 | verbs.class.should == Array 27 | verbs.size.should == 1 28 | verbs.first.should =~ /post/ 29 | end 30 | 31 | it "should have a list of activity:object on the first entry" do 32 | objects = @feed.entries.first.objects 33 | objects.class.should == Array 34 | objects.size.should == 1 35 | end 36 | 37 | it "should parse a proper activity:object" do 38 | object = @feed.entries.first.objects.first 39 | object.object_types.size.should == 1 40 | object.object_types.first.should =~ /note/ 41 | object.content.should == "rubenfonseca: @microft humm what about dropbox?" 42 | 43 | object.links.size.should == 1 44 | object.links.first.should == "http://twitter.com/rubenfonseca/statuses/9108531677" 45 | end 46 | 47 | it "should have an activity:actor on the first entry" do 48 | object = @feed.entries.first.actor 49 | object.should_not be_nil 50 | end 51 | 52 | it "should parse a proper activity:actor" do 53 | object = @feed.entries.first.actor 54 | object.object_types.size.should == 1 55 | object.object_types.first.should =~ /person/ 56 | object.title.should == "rubenfonseca" 57 | end 58 | end 59 | 60 | describe "ActivityStreams", "lastfm" do 61 | before :all do 62 | @lastfm_xml = IO.read(File.expand_path(File.dirname(__FILE__) + "/lastfm.xml")) 63 | @feed = ActivityStreams::Feed.from_xml(@lastfm_xml) 64 | end 65 | 66 | it "should parse lastfm example" do 67 | @feed.should_not be_nil 68 | end 69 | 70 | it "should have 10 entries" do 71 | @feed.entries.size.should == 10 72 | end 73 | 74 | it "should have tite, id and published on each entry" do 75 | @feed.entries.first.title.should == "Alicia Keys – Sure Looks Good To Me" 76 | @feed.entries.first.id.should == "http://www.last.fm/user/krani1#1266166889" 77 | @feed.entries.first.published.class.should == Time 78 | end 79 | 80 | it "should have a list of activity:verb on the first entry" do 81 | verbs = @feed.entries.first.verbs 82 | verbs.class.should == Array 83 | verbs.size.should == 1 84 | verbs.first.should =~ /play/ 85 | end 86 | 87 | it "should have a list of activity:object on the first entry" do 88 | objects = @feed.entries.first.objects 89 | objects.class.should == Array 90 | objects.size.should == 1 91 | end 92 | 93 | it "should parse a proper activity:object" do 94 | object = @feed.entries.first.objects.first 95 | object.object_types.size.should == 1 96 | object.object_types.first.should =~ /song/ 97 | object.title.should == "Sure Looks Good To Me" 98 | object.author.should == "Alicia Keys" 99 | 100 | object.links.size.should == 1 101 | object.links.first.should == "http://www.last.fm/music/Alicia+Keys/_/Sure+Looks+Good+To+Me" 102 | end 103 | 104 | it "should have an activity:actor on the first entry" do 105 | object = @feed.entries.first.actor 106 | object.should_not be_nil 107 | end 108 | 109 | it "should parse a proper activity:actor" do 110 | object = @feed.entries.first.actor 111 | object.object_types.size.should == 1 112 | object.object_types.first.should =~ /person/ 113 | object.title.should == "krani1" 114 | end 115 | end 116 | 117 | describe ActivityStreams, "myspace" do 118 | before :all do 119 | @myspace_json = IO.read(File.expand_path(File.dirname(__FILE__) + "/myspace.json")) 120 | @feed = ActivityStreams::Feed.from_json(@myspace_json) 121 | end 122 | 123 | it "should parse myspace example" do 124 | @feed.should_not be_nil 125 | end 126 | 127 | it "should have 1 entry" do 128 | @feed.entries.size.should == 1 129 | end 130 | 131 | it "should have tite, id and published on each entry" do 132 | @feed.entries.first.title.should == "Someone posted a photo" 133 | @feed.entries.first.id.should == "11923759128375912735912" 134 | @feed.entries.first.published.class.should == Time 135 | end 136 | 137 | it "should have a list of activity:verb on the first entry" do 138 | verbs = @feed.entries.first.verbs 139 | verbs.class.should == Array 140 | verbs.size.should == 1 141 | verbs.first.should =~ /post/ 142 | end 143 | 144 | it "should have a list of activity:object on the first entry" do 145 | objects = @feed.entries.first.objects 146 | objects.class.should == Array 147 | objects.size.should == 1 148 | end 149 | 150 | it "should parse a proper activity:object" do 151 | object = @feed.entries.first.objects.first 152 | object.object_types.size.should == 1 153 | object.object_types.first.should =~ /photo/ 154 | object.title.should == "" 155 | object.author.should == nil 156 | 157 | object.links.size.should == 1 158 | object.links.first.should == "http://c2.ac-images.myspacecdn.com/images02/6/s_be8bb90eebb4c8725724f66dcb9414f1.png" 159 | end 160 | 161 | it "should have an activity:actor on the first entry" do 162 | object = @feed.entries.first.actor 163 | object.should_not be_nil 164 | end 165 | 166 | it "should parse a proper activity:actor" do 167 | object = @feed.entries.first.actor 168 | object.object_types.size.should == 1 169 | object.object_types.first.should =~ /person/ 170 | object.title.should == "Brandon Black" 171 | end 172 | end -------------------------------------------------------------------------------- /spec/lastfm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | krani1's Recently Played Tracks 4 | http://www.last.fm/user/krani1 5 | 6 | http://activitystrea.ms/schema/1.0/play 7 | 2010-02-14T17:01:29.000Z 8 | 2010-02-14T17:01:29.000Z 9 | http://www.last.fm/user/krani1#1266166889 10 | Alicia Keys – Sure Looks Good To Me 11 | Alicia Keys – Sure Looks Good To Me 12 | 13 | lastfm 14 | http://lastfm 15 | http://cliqset-services.s3.amazonaws.com/lastfm.png 16 | 17 | 18 | http://activitystrea.ms/schema/1.0/song 19 | Sure Looks Good To Me 20 | 21 | Alicia Keys 22 | 23 | 24 | 25 | 26 | http://activitystrea.ms/schema/1.0/person 27 | krani1 28 | 29 | 30 | 31 | 32 | http://activitystrea.ms/schema/1.0/play 33 | 2010-02-14T16:57:00.000Z 34 | 2010-02-14T16:57:00.000Z 35 | http://www.last.fm/user/krani1#1266166620 36 | Alicia Keys – Tell You Something (Nana's Reprise) 37 | Alicia Keys – Tell You Something (Nana's Reprise) 38 | 39 | lastfm 40 | http://lastfm 41 | http://cliqset-services.s3.amazonaws.com/lastfm.png 42 | 43 | 44 | http://activitystrea.ms/schema/1.0/song 45 | Tell You Something (Nana's Reprise) 46 | 47 | Alicia Keys 48 | 49 | 50 | 51 | 52 | http://activitystrea.ms/schema/1.0/person 53 | krani1 54 | 55 | 56 | 57 | 58 | http://activitystrea.ms/schema/1.0/play 59 | 2010-02-14T16:54:52.000Z 60 | 2010-02-14T16:54:52.000Z 61 | http://www.last.fm/user/krani1#1266166492 62 | Alicia Keys – Prelude To A Kiss 63 | Alicia Keys – Prelude To A Kiss 64 | 65 | lastfm 66 | http://lastfm 67 | http://cliqset-services.s3.amazonaws.com/lastfm.png 68 | 69 | 70 | http://activitystrea.ms/schema/1.0/song 71 | Prelude To A Kiss 72 | 73 | Alicia Keys 74 | 75 | 76 | 77 | 78 | http://activitystrea.ms/schema/1.0/person 79 | krani1 80 | 81 | 82 | 83 | 84 | http://activitystrea.ms/schema/1.0/play 85 | 2010-02-14T16:50:42.000Z 86 | 2010-02-14T16:50:42.000Z 87 | http://www.last.fm/user/krani1#1266166242 88 | Alicia Keys – Where Do We Go From Here 89 | Alicia Keys – Where Do We Go From Here 90 | 91 | lastfm 92 | http://lastfm 93 | http://cliqset-services.s3.amazonaws.com/lastfm.png 94 | 95 | 96 | http://activitystrea.ms/schema/1.0/song 97 | Where Do We Go From Here 98 | 99 | Alicia Keys 100 | 101 | 102 | 103 | 104 | http://activitystrea.ms/schema/1.0/person 105 | krani1 106 | 107 | 108 | 109 | 110 | http://activitystrea.ms/schema/1.0/play 111 | 2010-02-14T16:45:32.000Z 112 | 2010-02-14T16:45:32.000Z 113 | http://www.last.fm/user/krani1#1266165932 114 | Alicia Keys – I Need You 115 | Alicia Keys – I Need You 116 | 117 | lastfm 118 | http://lastfm 119 | http://cliqset-services.s3.amazonaws.com/lastfm.png 120 | 121 | 122 | http://activitystrea.ms/schema/1.0/song 123 | I Need You 124 | 125 | Alicia Keys 126 | 127 | 128 | 129 | 130 | http://activitystrea.ms/schema/1.0/person 131 | krani1 132 | 133 | 134 | 135 | 136 | http://activitystrea.ms/schema/1.0/play 137 | 2010-02-14T16:42:22.000Z 138 | 2010-02-14T16:42:22.000Z 139 | http://www.last.fm/user/krani1#1266165742 140 | Alicia Keys – Teenage Love Affair 141 | Alicia Keys – Teenage Love Affair 142 | 143 | lastfm 144 | http://lastfm 145 | http://cliqset-services.s3.amazonaws.com/lastfm.png 146 | 147 | 148 | http://activitystrea.ms/schema/1.0/song 149 | Teenage Love Affair 150 | 151 | Alicia Keys 152 | 153 | 154 | 155 | 156 | http://activitystrea.ms/schema/1.0/person 157 | krani1 158 | 159 | 160 | 161 | 162 | http://activitystrea.ms/schema/1.0/play 163 | 2010-02-14T16:38:32.000Z 164 | 2010-02-14T16:38:32.000Z 165 | http://www.last.fm/user/krani1#1266165512 166 | Alicia Keys – The Thing About Love 167 | Alicia Keys – The Thing About Love 168 | 169 | lastfm 170 | http://lastfm 171 | http://cliqset-services.s3.amazonaws.com/lastfm.png 172 | 173 | 174 | http://activitystrea.ms/schema/1.0/song 175 | The Thing About Love 176 | 177 | Alicia Keys 178 | 179 | 180 | 181 | 182 | http://activitystrea.ms/schema/1.0/person 183 | krani1 184 | 185 | 186 | 187 | 188 | http://activitystrea.ms/schema/1.0/play 189 | 2010-02-14T16:34:39.000Z 190 | 2010-02-14T16:34:39.000Z 191 | http://www.last.fm/user/krani1#1266165279 192 | Alicia Keys – Wreckless Love 193 | Alicia Keys – Wreckless Love 194 | 195 | lastfm 196 | http://lastfm 197 | http://cliqset-services.s3.amazonaws.com/lastfm.png 198 | 199 | 200 | http://activitystrea.ms/schema/1.0/song 201 | Wreckless Love 202 | 203 | Alicia Keys 204 | 205 | 206 | 207 | 208 | http://activitystrea.ms/schema/1.0/person 209 | krani1 210 | 211 | 212 | 213 | 214 | http://activitystrea.ms/schema/1.0/play 215 | 2010-02-14T16:30:25.000Z 216 | 2010-02-14T16:30:25.000Z 217 | http://www.last.fm/user/krani1#1266165025 218 | Alicia Keys – Lesson Learned (featuring John Mayer) 219 | Alicia Keys – Lesson Learned (featuring John Mayer) 220 | 221 | lastfm 222 | http://lastfm 223 | http://cliqset-services.s3.amazonaws.com/lastfm.png 224 | 225 | 226 | http://activitystrea.ms/schema/1.0/song 227 | Lesson Learned (featuring John Mayer) 228 | 229 | Alicia Keys 230 | 231 | 232 | 233 | 234 | http://activitystrea.ms/schema/1.0/person 235 | krani1 236 | 237 | 238 | 239 | 240 | http://activitystrea.ms/schema/1.0/play 241 | 2010-02-14T16:25:10.000Z 242 | 2010-02-14T16:25:10.000Z 243 | http://www.last.fm/user/krani1#1266164710 244 | Alicia Keys – Like You'll Never See Me Again 245 | Alicia Keys – Like You'll Never See Me Again 246 | 247 | lastfm 248 | http://lastfm 249 | http://cliqset-services.s3.amazonaws.com/lastfm.png 250 | 251 | 252 | http://activitystrea.ms/schema/1.0/song 253 | Like You'll Never See Me Again 254 | 255 | Alicia Keys 256 | 257 | 258 | 259 | 260 | http://activitystrea.ms/schema/1.0/person 261 | krani1 262 | 263 | 264 | 265 | 266 | -------------------------------------------------------------------------------- /spec/twitter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Twitter / rubenfonseca 4 | http://twitter.com/rubenfonseca 5 | 6 | http://activitystrea.ms/schema/1.0/post 7 | 2010-02-14T19:09:52.000Z 8 | 2010-02-14T19:09:52.000Z 9 | http://twitter.com/rubenfonseca/statuses/9108531677 10 | rubenfonseca: @microft humm what about dropbox? 11 | rubenfonseca: @microft humm what about dropbox? 12 | 13 | twitter 14 | http://twitter.com 15 | http://cliqset-services.s3.amazonaws.com/twitter.png 16 | 17 | 18 | http://activitystrea.ms/schema/1.0/note 19 | rubenfonseca: @microft humm what about dropbox? 20 | 21 | 22 | 23 | http://activitystrea.ms/schema/1.0/person 24 | rubenfonseca 25 | 26 | Ruben 27 | Fonseca 28 | 29 | 30 | 31 | 32 | 33 | http://activitystrea.ms/schema/1.0/post 34 | 2010-02-14T18:51:52.000Z 35 | 2010-02-14T18:51:52.000Z 36 | http://twitter.com/rubenfonseca/statuses/9107967864 37 | rubenfonseca: @microft timemachine over a network drive? works for me :) 38 | rubenfonseca: @microft timemachine over a network drive? works for me :) 39 | 40 | twitter 41 | http://twitter.com 42 | http://cliqset-services.s3.amazonaws.com/twitter.png 43 | 44 | 45 | http://activitystrea.ms/schema/1.0/note 46 | rubenfonseca: @microft timemachine over a network drive? works for me :) 47 | 48 | 49 | 50 | http://activitystrea.ms/schema/1.0/person 51 | rubenfonseca 52 | 53 | Ruben 54 | Fonseca 55 | 56 | 57 | 58 | 59 | 60 | http://activitystrea.ms/schema/1.0/post 61 | 2010-02-13T21:56:07.000Z 62 | 2010-02-13T21:56:07.000Z 63 | http://twitter.com/rubenfonseca/statuses/9071665676 64 | rubenfonseca: RT @whys: selenium testing on the cloud by saucelabs http://dl.dropbox.com/u/3415837/SauceRC1_0.m4v 65 | rubenfonseca: RT @whys: selenium testing on the cloud by saucelabs http://dl.dropbox.com/u/3415837/SauceRC1_0.m4v 66 | 67 | twitter 68 | http://twitter.com 69 | http://cliqset-services.s3.amazonaws.com/twitter.png 70 | 71 | 72 | http://activitystrea.ms/schema/1.0/note 73 | rubenfonseca: RT @whys: selenium testing on the cloud by saucelabs http://dl.dropbox.com/u/3415837/SauceRC1_0.m4v 74 | 75 | 76 | 77 | http://activitystrea.ms/schema/1.0/person 78 | rubenfonseca 79 | 80 | Ruben 81 | Fonseca 82 | 83 | 84 | 85 | 86 | 87 | http://activitystrea.ms/schema/1.0/post 88 | 2010-02-13T15:11:52.000Z 89 | 2010-02-13T15:11:52.000Z 90 | http://twitter.com/rubenfonseca/statuses/9058447610 91 | rubenfonseca: @luismreis just trying hadoop and mahout status, already given up :/ 92 | rubenfonseca: @luismreis just trying hadoop and mahout status, already given up :/ 93 | 94 | twitter 95 | http://twitter.com 96 | http://cliqset-services.s3.amazonaws.com/twitter.png 97 | 98 | 99 | http://activitystrea.ms/schema/1.0/note 100 | rubenfonseca: @luismreis just trying hadoop and mahout status, already given up :/ 101 | 102 | 103 | 104 | http://activitystrea.ms/schema/1.0/person 105 | rubenfonseca 106 | 107 | Ruben 108 | Fonseca 109 | 110 | 111 | 112 | 113 | 114 | http://activitystrea.ms/schema/1.0/post 115 | 2010-02-13T14:58:47.000Z 116 | 2010-02-13T14:58:47.000Z 117 | http://twitter.com/rubenfonseca/statuses/9057982874 118 | rubenfonseca: $ mvn install, and waiting for the whole universe to download... 119 | rubenfonseca: $ mvn install, and waiting for the whole universe to download... 120 | 121 | twitter 122 | http://twitter.com 123 | http://cliqset-services.s3.amazonaws.com/twitter.png 124 | 125 | 126 | http://activitystrea.ms/schema/1.0/note 127 | rubenfonseca: $ mvn install, and waiting for the whole universe to download... 128 | 129 | 130 | 131 | http://activitystrea.ms/schema/1.0/person 132 | rubenfonseca 133 | 134 | Ruben 135 | Fonseca 136 | 137 | 138 | 139 | 140 | 141 | http://activitystrea.ms/schema/1.0/post 142 | 2010-02-13T14:17:21.000Z 143 | 2010-02-13T14:17:21.000Z 144 | http://twitter.com/rubenfonseca/statuses/9056640185 145 | rubenfonseca: smartd: Device: /dev/sdb, 1 Offline uncorrectable sectors #oops #fail 146 | rubenfonseca: smartd: Device: /dev/sdb, 1 Offline uncorrectable sectors #oops #fail 147 | 148 | twitter 149 | http://twitter.com 150 | http://cliqset-services.s3.amazonaws.com/twitter.png 151 | 152 | 153 | http://activitystrea.ms/schema/1.0/note 154 | rubenfonseca: smartd: Device: /dev/sdb, 1 Offline uncorrectable sectors #oops #fail 155 | 156 | 157 | 158 | http://activitystrea.ms/schema/1.0/person 159 | rubenfonseca 160 | 161 | Ruben 162 | Fonseca 163 | 164 | 165 | 166 | 167 | 168 | http://activitystrea.ms/schema/1.0/post 169 | 2010-02-12T19:18:22.000Z 170 | 2010-02-12T19:18:22.000Z 171 | http://twitter.com/rubenfonseca/statuses/9021935460 172 | rubenfonseca: @bragarules eh o vorkat... 173 | rubenfonseca: @bragarules eh o vorkat... 174 | 175 | twitter 176 | http://twitter.com 177 | http://cliqset-services.s3.amazonaws.com/twitter.png 178 | 179 | 180 | http://activitystrea.ms/schema/1.0/note 181 | rubenfonseca: @bragarules eh o vorkat... 182 | 183 | 184 | 185 | http://activitystrea.ms/schema/1.0/person 186 | rubenfonseca 187 | 188 | Ruben 189 | Fonseca 190 | 191 | 192 | 193 | 194 | 195 | http://activitystrea.ms/schema/1.0/post 196 | 2010-02-12T18:41:54.000Z 197 | 2010-02-12T18:41:54.000Z 198 | http://twitter.com/rubenfonseca/statuses/9020619992 199 | rubenfonseca: RT @nunoveloso: RT @schroder: facebook account closed for real! :D if i get 20 retweets i'll close my twitter account to! :D 200 | rubenfonseca: RT @nunoveloso: RT @schroder: facebook account closed for real! :D if i get 20 retweets i'll close my twitter account to! :D 201 | 202 | twitter 203 | http://twitter.com 204 | http://cliqset-services.s3.amazonaws.com/twitter.png 205 | 206 | 207 | http://activitystrea.ms/schema/1.0/note 208 | rubenfonseca: RT @nunoveloso: RT @schroder: facebook account closed for real! :D if i get 20 retweets i'll close my twitter account to! :D 209 | 210 | 211 | 212 | http://activitystrea.ms/schema/1.0/person 213 | rubenfonseca 214 | 215 | Ruben 216 | Fonseca 217 | 218 | 219 | 220 | 221 | 222 | http://activitystrea.ms/schema/1.0/post 223 | 2010-02-12T11:12:52.000Z 224 | 2010-02-12T11:12:52.000Z 225 | http://twitter.com/rubenfonseca/statuses/9004371457 226 | rubenfonseca: @tiagosa definitely, it is on my todo list :/ 227 | rubenfonseca: @tiagosa definitely, it is on my todo list :/ 228 | 229 | twitter 230 | http://twitter.com 231 | http://cliqset-services.s3.amazonaws.com/twitter.png 232 | 233 | 234 | http://activitystrea.ms/schema/1.0/note 235 | rubenfonseca: @tiagosa definitely, it is on my todo list :/ 236 | 237 | 238 | 239 | http://activitystrea.ms/schema/1.0/person 240 | rubenfonseca 241 | 242 | Ruben 243 | Fonseca 244 | 245 | 246 | 247 | 248 | 249 | http://activitystrea.ms/schema/1.0/post 250 | 2010-02-12T11:02:02.000Z 251 | 2010-02-12T11:02:02.000Z 252 | http://twitter.com/rubenfonseca/statuses/9004108144 253 | rubenfonseca: Another pair of AA batteries for the Magic Mouse please! 254 | rubenfonseca: Another pair of AA batteries for the Magic Mouse please! 255 | 256 | twitter 257 | http://twitter.com 258 | http://cliqset-services.s3.amazonaws.com/twitter.png 259 | 260 | 261 | http://activitystrea.ms/schema/1.0/note 262 | rubenfonseca: Another pair of AA batteries for the Magic Mouse please! 263 | 264 | 265 | 266 | http://activitystrea.ms/schema/1.0/person 267 | rubenfonseca 268 | 269 | Ruben 270 | Fonseca 271 | 272 | 273 | 274 | 275 | 276 | http://activitystrea.ms/schema/1.0/post 277 | 2010-02-12T10:43:12.000Z 278 | 2010-02-12T10:43:12.000Z 279 | http://twitter.com/rubenfonseca/statuses/9003670777 280 | rubenfonseca: @changelogshow sure! will do, thank you :) 281 | rubenfonseca: @changelogshow sure! will do, thank you :) 282 | 283 | twitter 284 | http://twitter.com 285 | http://cliqset-services.s3.amazonaws.com/twitter.png 286 | 287 | 288 | http://activitystrea.ms/schema/1.0/note 289 | rubenfonseca: @changelogshow sure! will do, thank you :) 290 | 291 | 292 | 293 | http://activitystrea.ms/schema/1.0/person 294 | rubenfonseca 295 | 296 | Ruben 297 | Fonseca 298 | 299 | 300 | 301 | 302 | 303 | http://activitystrea.ms/schema/1.0/post 304 | 2010-02-12T10:34:51.000Z 305 | 2010-02-12T10:34:51.000Z 306 | http://twitter.com/rubenfonseca/statuses/9003486173 307 | rubenfonseca: RT @pedro_mg: will have to speed up solar energy production at home. See... I have a wireless apple mouse and keyboard; perhaps a nuclea ... 308 | rubenfonseca: RT @pedro_mg: will have to speed up solar energy production at home. See... I have a wireless apple mouse and keyboard; perhaps a nuclea ... 309 | 310 | twitter 311 | http://twitter.com 312 | http://cliqset-services.s3.amazonaws.com/twitter.png 313 | 314 | 315 | http://activitystrea.ms/schema/1.0/note 316 | rubenfonseca: RT @pedro_mg: will have to speed up solar energy production at home. See... I have a wireless apple mouse and keyboard; perhaps a nuclea ... 317 | 318 | 319 | 320 | http://activitystrea.ms/schema/1.0/person 321 | rubenfonseca 322 | 323 | Ruben 324 | Fonseca 325 | 326 | 327 | 328 | 329 | 330 | http://activitystrea.ms/schema/1.0/post 331 | 2010-02-11T22:08:00.000Z 332 | 2010-02-11T22:08:00.000Z 333 | http://twitter.com/rubenfonseca/statuses/8979943279 334 | rubenfonseca: @changelogshow is there an API or Firehose for the Github timeline? Can you give us more details about the tail implementation? thank you! 335 | rubenfonseca: @changelogshow is there an API or Firehose for the Github timeline? Can you give us more details about the tail implementation? thank you! 336 | 337 | twitter 338 | http://twitter.com 339 | http://cliqset-services.s3.amazonaws.com/twitter.png 340 | 341 | 342 | http://activitystrea.ms/schema/1.0/note 343 | rubenfonseca: @changelogshow is there an API or Firehose for the Github timeline? Can you give us more details about the tail implementation? thank you! 344 | 345 | 346 | 347 | http://activitystrea.ms/schema/1.0/person 348 | rubenfonseca 349 | 350 | Ruben 351 | Fonseca 352 | 353 | 354 | 355 | 356 | 357 | http://activitystrea.ms/schema/1.0/post 358 | 2010-02-11T21:38:43.000Z 359 | 2010-02-11T21:38:43.000Z 360 | http://twitter.com/rubenfonseca/statuses/8978850067 361 | rubenfonseca: RT @fosdem: Video's coming online: http://video.fosdem.org/2010/ 362 | rubenfonseca: RT @fosdem: Video's coming online: http://video.fosdem.org/2010/ 363 | 364 | twitter 365 | http://twitter.com 366 | http://cliqset-services.s3.amazonaws.com/twitter.png 367 | 368 | 369 | http://activitystrea.ms/schema/1.0/note 370 | rubenfonseca: RT @fosdem: Video's coming online: http://video.fosdem.org/2010/ 371 | 372 | 373 | 374 | http://activitystrea.ms/schema/1.0/person 375 | rubenfonseca 376 | 377 | Ruben 378 | Fonseca 379 | 380 | 381 | 382 | 383 | 384 | http://activitystrea.ms/schema/1.0/post 385 | 2010-02-11T20:57:10.000Z 386 | 2010-02-11T20:57:10.000Z 387 | http://twitter.com/rubenfonseca/statuses/8977340054 388 | rubenfonseca: (clara de sousa)-- (#moura #guedes #wannabe) 389 | rubenfonseca: (clara de sousa)-- (#moura #guedes #wannabe) 390 | 391 | twitter 392 | http://twitter.com 393 | http://cliqset-services.s3.amazonaws.com/twitter.png 394 | 395 | 396 | http://activitystrea.ms/schema/1.0/note 397 | rubenfonseca: (clara de sousa)-- (#moura #guedes #wannabe) 398 | 399 | 400 | 401 | http://activitystrea.ms/schema/1.0/person 402 | rubenfonseca 403 | 404 | Ruben 405 | Fonseca 406 | 407 | 408 | 409 | 410 | 411 | http://activitystrea.ms/schema/1.0/post 412 | 2010-02-11T16:43:30.000Z 413 | 2010-02-11T16:43:30.000Z 414 | http://twitter.com/rubenfonseca/statuses/8968055841 415 | rubenfonseca: @alcides pah isso cheira mesmo a treta de quem so la foi encaixar o cabo, e portanto inventou alta cena "frequencias" pra parecer dificíl :P 416 | rubenfonseca: @alcides pah isso cheira mesmo a treta de quem so la foi encaixar o cabo, e portanto inventou alta cena "frequencias" pra parecer dificíl :P 417 | 418 | twitter 419 | http://twitter.com 420 | http://cliqset-services.s3.amazonaws.com/twitter.png 421 | 422 | 423 | http://activitystrea.ms/schema/1.0/note 424 | rubenfonseca: @alcides pah isso cheira mesmo a treta de quem so la foi encaixar o cabo, e portanto inventou alta cena "frequencias" pra parecer dificíl :P 425 | 426 | 427 | 428 | http://activitystrea.ms/schema/1.0/person 429 | rubenfonseca 430 | 431 | Ruben 432 | Fonseca 433 | 434 | 435 | 436 | 437 | 438 | http://activitystrea.ms/schema/1.0/post 439 | 2010-02-11T16:22:50.000Z 440 | 2010-02-11T16:22:50.000Z 441 | http://twitter.com/rubenfonseca/statuses/8967222405 442 | rubenfonseca: @alcides encaixou melhor o cabo foi? :P 443 | rubenfonseca: @alcides encaixou melhor o cabo foi? :P 444 | 445 | twitter 446 | http://twitter.com 447 | http://cliqset-services.s3.amazonaws.com/twitter.png 448 | 449 | 450 | http://activitystrea.ms/schema/1.0/note 451 | rubenfonseca: @alcides encaixou melhor o cabo foi? :P 452 | 453 | 454 | 455 | http://activitystrea.ms/schema/1.0/person 456 | rubenfonseca 457 | 458 | Ruben 459 | Fonseca 460 | 461 | 462 | 463 | 464 | 465 | http://activitystrea.ms/schema/1.0/post 466 | 2010-02-11T15:32:44.000Z 467 | 2010-02-11T15:32:44.000Z 468 | http://twitter.com/rubenfonseca/statuses/8965196963 469 | rubenfonseca: feeling sick :/ 470 | rubenfonseca: feeling sick :/ 471 | 472 | twitter 473 | http://twitter.com 474 | http://cliqset-services.s3.amazonaws.com/twitter.png 475 | 476 | 477 | http://activitystrea.ms/schema/1.0/note 478 | rubenfonseca: feeling sick :/ 479 | 480 | 481 | 482 | http://activitystrea.ms/schema/1.0/person 483 | rubenfonseca 484 | 485 | Ruben 486 | Fonseca 487 | 488 | 489 | 490 | 491 | 492 | http://activitystrea.ms/schema/1.0/post 493 | 2010-02-11T14:07:50.000Z 494 | 2010-02-11T14:07:50.000Z 495 | http://twitter.com/rubenfonseca/statuses/8961937819 496 | rubenfonseca: @sergio definitely! also the "privacy flaw" that shows the people I email the most is a huge #fail for google :/ 497 | rubenfonseca: @sergio definitely! also the "privacy flaw" that shows the people I email the most is a huge #fail for google :/ 498 | 499 | twitter 500 | http://twitter.com 501 | http://cliqset-services.s3.amazonaws.com/twitter.png 502 | 503 | 504 | http://activitystrea.ms/schema/1.0/note 505 | rubenfonseca: @sergio definitely! also the "privacy flaw" that shows the people I email the most is a huge #fail for google :/ 506 | 507 | 508 | 509 | http://activitystrea.ms/schema/1.0/person 510 | rubenfonseca 511 | 512 | Ruben 513 | Fonseca 514 | 515 | 516 | 517 | 518 | 519 | http://activitystrea.ms/schema/1.0/post 520 | 2010-02-11T14:05:13.000Z 521 | 2010-02-11T14:05:13.000Z 522 | http://twitter.com/rubenfonseca/statuses/8961842488 523 | rubenfonseca: I'm convinced that in some companies, you are required to nag your friends every month to work for the company to receive your salary 524 | rubenfonseca: I'm convinced that in some companies, you are required to nag your friends every month to work for the company to receive your salary 525 | 526 | twitter 527 | http://twitter.com 528 | http://cliqset-services.s3.amazonaws.com/twitter.png 529 | 530 | 531 | http://activitystrea.ms/schema/1.0/note 532 | rubenfonseca: I'm convinced that in some companies, you are required to nag your friends every month to work for the company to receive your salary 533 | 534 | 535 | 536 | http://activitystrea.ms/schema/1.0/person 537 | rubenfonseca 538 | 539 | Ruben 540 | Fonseca 541 | 542 | 543 | 544 | 545 | 546 | --------------------------------------------------------------------------------