├── 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 |
--------------------------------------------------------------------------------