ostatus 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ module OStatus
2
+ VERSION = "0.0.1"
3
+ end
data/ostatus.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ostatus/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ostatus"
7
+ s.version = OStatus::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Hackers of the Severed Hand']
10
+ s.email = ['hotsh@xomb.org']
11
+ s.homepage = "http://github.com/hotsh/ostatus"
12
+ s.summary = %q{Implementations of the OStatus data stream objects.}
13
+ s.description = %q{This project is to be used to jumpstart OStatus related projects that implement the PubSubHubbub protocols by providing the common fundamentals of Atom parsing and OStatus object creation.}
14
+
15
+ s.rubyforge_project = "ostatus"
16
+
17
+ s.add_dependency "oauth"
18
+ s.add_dependency "nokogiri"
19
+ s.add_dependency "tinyatom"
20
+ s.add_development_dependency "rspec"
21
+
22
+ s.files = `git ls-files`.split("\n")
23
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
+ s.require_paths = ["lib"]
26
+ end
@@ -0,0 +1,53 @@
1
+ require_relative '../lib/ostatus/feed.rb'
2
+ require_relative '../lib/ostatus/entry.rb'
3
+ require_relative '../lib/ostatus/activity.rb'
4
+
5
+ describe OStatus::Activity do
6
+ before(:each) do
7
+ feed = OStatus::Feed.from_url('test/example_feed.atom')
8
+ entry = feed.entries[0]
9
+ @activity = entry.activity
10
+ entry = feed.entries[1]
11
+ @activity_empty = entry.activity
12
+ end
13
+
14
+ describe "#object" do
15
+ it "should give a String containing the content of the activity:object tag" do
16
+ @activity.object.should eql('Foobar')
17
+ end
18
+
19
+ it "should give nil when no activity:object was given" do
20
+ @activity_empty.object.should eql(nil)
21
+ end
22
+ end
23
+
24
+ describe "#object-type" do
25
+ it "should give a String containing the content of the activity:object-type tag" do
26
+ @activity.object_type.should eql('http://activitystrea.ms/schema/1.0/note')
27
+ end
28
+
29
+ it "should give nil when no activity:object-type was given" do
30
+ @activity_empty.object_type.should eql(nil)
31
+ end
32
+ end
33
+
34
+ describe "#verb" do
35
+ it "should give a String containing the content of the activity:verb tag" do
36
+ @activity.verb.should eql('http://activitystrea.ms/schema/1.0/post')
37
+ end
38
+
39
+ it "should give nil when no activity:verb was given" do
40
+ @activity_empty.verb.should eql(nil)
41
+ end
42
+ end
43
+
44
+ describe "#target" do
45
+ it "should give a String containing the content of the activity:target tag" do
46
+ @activity.target.should eql('Barbaz')
47
+ end
48
+
49
+ it "should give nil when no activity:target was given" do
50
+ @activity_empty.target.should eql(nil)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../lib/ostatus/feed.rb'
2
+ require_relative '../lib/ostatus/author.rb'
3
+ require_relative '../lib/ostatus/portable_contacts.rb'
4
+
5
+ describe OStatus::Author do
6
+ before(:each) do
7
+ feed = OStatus::Feed.from_url('test/example_feed.atom')
8
+ @author = feed.author
9
+ feed = OStatus::Feed.from_url('test/example_feed_empty_author.atom')
10
+ @author_empty = feed.author
11
+ end
12
+
13
+ describe "#activity" do
14
+ it "should return an Activity instance" do
15
+ @author.activity.class.should eql(OStatus::Activity)
16
+ end
17
+
18
+ it "should give an Activity instance that is relevant to the author subtree" do
19
+ @author.activity.object_type.should eql('http://activitystrea.ms/schema/1.0/person')
20
+ end
21
+ end
22
+
23
+ describe "#portable_contacts" do
24
+ it "should return an PortableContacts instance" do
25
+ @author.portable_contacts.class.should eql(OStatus::PortableContacts)
26
+ end
27
+
28
+ it "should give an PortableContacts instance that is relevant to the author subtree" do
29
+ @author.portable_contacts.preferred_username.should eql('greenmanspirit')
30
+ end
31
+ end
32
+
33
+ describe "#uri" do
34
+ it "should give a String containing the content of the uri tag" do
35
+ @author.uri.should eql('http://identi.ca/user/141464')
36
+ end
37
+
38
+ it "should give nil when no uri is given" do
39
+ @author_empty.uri.should eql(nil)
40
+ end
41
+ end
42
+
43
+ describe "#name" do
44
+ it "should give a String containing the content of the name tag" do
45
+ @author.name.should eql('greenmanspirit')
46
+ end
47
+
48
+ it "should give nil when no name is given" do
49
+ @author_empty.name.should eql(nil)
50
+ end
51
+ end
52
+
53
+ describe "email" do
54
+ it "should give a String containing the content of the email tag" do
55
+ @author.email.should eql('foo@example.com')
56
+ end
57
+
58
+ it "should give nil when no email is given" do
59
+ @author_empty.email.should eql(nil)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,97 @@
1
+ require_relative '../lib/ostatus/feed.rb'
2
+ require_relative '../lib/ostatus/entry.rb'
3
+ require_relative '../lib/ostatus/activity.rb'
4
+
5
+ describe OStatus::Entry do
6
+ before(:each) do
7
+ @feed = OStatus::Feed.from_url('test/example_feed.atom')
8
+ @entry = @feed.entries[0]
9
+ end
10
+
11
+ describe "#activity" do
12
+ it "should return an Activity instance" do
13
+ @entry.activity.class.should eql(OStatus::Activity)
14
+ end
15
+ end
16
+
17
+ describe "#title" do
18
+ it "should give a String containing the content of the title tag" do
19
+ @entry.title.should eql("staples come out of the head tomorrow, oh yeah")
20
+ end
21
+ end
22
+
23
+ describe "#content" do
24
+ it "should give a String containing the content of the content tag" do
25
+ @entry.content.should eql("staples come out of the head tomorrow, oh yeah")
26
+ end
27
+ end
28
+
29
+ describe "#content_type" do
30
+ it "should give a String containing the content of the type attribute on the content tag" do
31
+ @entry.content_type.should eql("html")
32
+ end
33
+ end
34
+
35
+ describe "#updated" do
36
+ it "should return a DateTime instance" do
37
+ @entry.updated.instance_of?(DateTime).should eql(true)
38
+ end
39
+
40
+ it "should return a DateTime representing the time given in the updated tag" do
41
+ @entry.updated.strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-03-22T02:15:14+0000')
42
+ end
43
+ end
44
+
45
+ describe "#published" do
46
+ it "should return a DateTime instance" do
47
+ @entry.published.instance_of?(DateTime).should eql(true)
48
+ end
49
+
50
+ it "should return a DateTime representing the time given in the published tag" do
51
+ @entry.published.strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-02-21T02:15:14+0000')
52
+ end
53
+ end
54
+
55
+ describe "#id" do
56
+ it "should return the id given in the id tag" do
57
+ @entry.id.should eql('http://identi.ca/notice/64991641')
58
+ end
59
+ end
60
+
61
+ describe "#info" do
62
+ it "should give a Hash" do
63
+ @entry.info.instance_of?(Hash).should eql(true)
64
+ end
65
+
66
+ it "should contain the id" do
67
+ @entry.info[:id].should eql('http://identi.ca/notice/64991641')
68
+ end
69
+
70
+ it "should contain the content" do
71
+ @entry.info[:content].should eql("staples come out of the head tomorrow, oh yeah")
72
+ end
73
+
74
+ it "should contain the title" do
75
+ @entry.info[:title].should eql("staples come out of the head tomorrow, oh yeah")
76
+ end
77
+
78
+ it "should contain the content_type" do
79
+ @entry.info[:content_type].should eql("html")
80
+ end
81
+
82
+ it "should contain a Nokogiri NodeSet for the link" do
83
+ @entry.info[:link].class.should eql(Nokogiri::XML::NodeSet)
84
+ @entry.info[:link][0].class.should eql(Nokogiri::XML::Element)
85
+ end
86
+
87
+ it "should contain the published DateTime" do
88
+ @entry.info[:published].class.should eql(DateTime)
89
+ @entry.info[:published].strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-02-21T02:15:14+0000')
90
+ end
91
+
92
+ it "should contain the updated DateTime" do
93
+ @entry.info[:updated].class.should eql(DateTime)
94
+ @entry.info[:updated].strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2011-03-22T02:15:14+0000')
95
+ end
96
+ end
97
+ end
data/spec/feed_spec.rb ADDED
@@ -0,0 +1,34 @@
1
+ require_relative '../lib/ostatus/feed.rb'
2
+ require_relative '../lib/ostatus/entry.rb'
3
+
4
+ describe OStatus::Feed do
5
+ before(:each) do
6
+ @feed = OStatus::Feed.from_url('test/example_feed.atom')
7
+ end
8
+
9
+ describe "#atom" do
10
+ it "should return a String containing the atom information" do
11
+ @feed.atom.start_with?("<?xml").should eql(true)
12
+ end
13
+ end
14
+
15
+ describe "#hubs" do
16
+ it "should return a String containing the hub url given in the link tag" do
17
+ @feed.hubs.should eql(['http://identi.ca/main/push/hub', 'http://identi.ca/main/push/hub2'])
18
+ end
19
+ end
20
+
21
+ describe "#salmon" do
22
+ it "should return a String containing the salmon url given in the link tag" do
23
+ @feed.salmon.should eql('http://identi.ca/main/salmon/user/141464')
24
+ end
25
+ end
26
+
27
+ describe "#entries" do
28
+ it "should return an Array of Entry instances" do
29
+ @feed.entries.each do |entry|
30
+ entry.instance_of?(OStatus::Entry).should eql(true)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,157 @@
1
+ require_relative '../lib/ostatus/feed.rb'
2
+ require_relative '../lib/ostatus/entry.rb'
3
+ require_relative '../lib/ostatus/activity.rb'
4
+
5
+ describe OStatus::PortableContacts do
6
+ before(:each) do
7
+ feed = OStatus::Feed.from_url('test/example_feed.atom')
8
+ author = feed.author
9
+ @poco = author.portable_contacts
10
+ feed = OStatus::Feed.from_url('test/example_feed_false_connected.atom')
11
+ author = feed.author
12
+ @poco_false = author.portable_contacts
13
+ feed = OStatus::Feed.from_url('test/example_feed_empty_author.atom')
14
+ author = feed.author
15
+ @poco_empty = author.portable_contacts
16
+ end
17
+
18
+ describe "#id" do
19
+ it "should give a String containing the content of the title tag" do
20
+ @poco.id.should eql('foobar')
21
+ end
22
+
23
+ it "should give nil if the id tag does not exist" do
24
+ @poco_empty.id.should eql(nil)
25
+ end
26
+ end
27
+
28
+ describe "#display_name" do
29
+ it "should give a String containing the content of the displayName tag" do
30
+ @poco.display_name.should eql('Adam Hobaugh')
31
+ end
32
+
33
+ it "should give nil if the displayName tag does not exist" do
34
+ @poco_empty.display_name.should eql(nil)
35
+ end
36
+ end
37
+
38
+ describe "#name" do
39
+ it "should give a String containing the content of the name tag" do
40
+ @poco.name.should eql('barbaz')
41
+ end
42
+
43
+ it "should give nil if the name tag does not exist" do
44
+ @poco_empty.name.should eql(nil)
45
+ end
46
+ end
47
+
48
+ describe "#nickname" do
49
+ it "should give a String containing the content of the nickname tag" do
50
+ @poco.nickname.should eql('spaz')
51
+ end
52
+
53
+ it "should give nil if the nickname tag does not exist" do
54
+ @poco_empty.nickname.should eql(nil)
55
+ end
56
+ end
57
+
58
+ describe "#published" do
59
+ it "should give a DateTime instance" do
60
+ @poco.published.class.should eql(DateTime)
61
+ end
62
+
63
+ it "should give a DateTime containing the content of the published tag" do
64
+ @poco.published.strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2012-02-21T02:15:14+0000')
65
+ end
66
+
67
+ it "should give nil if the published tag does not exist" do
68
+ @poco_empty.published.should eql(nil)
69
+ end
70
+ end
71
+
72
+ describe "#updated" do
73
+ it "should give a DateTime instance" do
74
+ @poco.updated.class.should eql(DateTime)
75
+ end
76
+
77
+ it "should give a DateTime containing the content of the updated tag" do
78
+ @poco.updated.strftime("%Y-%m-%dT%I:%M:%S%z").should eql('2013-02-21T02:15:14+0000')
79
+ end
80
+
81
+ it "should give nil if the updated tag does not exist" do
82
+ @poco_empty.updated.should eql(nil)
83
+ end
84
+ end
85
+
86
+ describe "#birthday" do
87
+ it "should give a Date instance" do
88
+ @poco.birthday.class.should eql(Date)
89
+ end
90
+
91
+ it "should give a Date containing the content of the birthday tag" do
92
+ @poco.birthday.strftime("%Y-%m-%d").should eql('2014-02-21')
93
+ end
94
+
95
+ it "should give nil if the birthday tag does not exist" do
96
+ @poco_empty.birthday.should eql(nil)
97
+ end
98
+ end
99
+
100
+ describe "#anniversary" do
101
+ it "should give a Date instance" do
102
+ @poco.anniversary.class.should eql(Date)
103
+ end
104
+
105
+ it "should give a Date containing the content of the anniversary tag" do
106
+ @poco.anniversary.strftime("%Y-%m-%d").should eql('2015-02-21')
107
+ end
108
+
109
+ it "should give nil if the anniversary tag does not exist" do
110
+ @poco_empty.anniversary.should eql(nil)
111
+ end
112
+ end
113
+
114
+ describe "#gender" do
115
+ it "should give a String containing the content of the gender tag" do
116
+ @poco.gender.should eql('male')
117
+ end
118
+
119
+ it "should give nil if the gender tag does not exist" do
120
+ @poco_empty.gender.should eql(nil)
121
+ end
122
+ end
123
+
124
+ describe "#note" do
125
+ it "should give a String containing the content of the note tag" do
126
+ @poco.note.should eql("foo\nbar")
127
+ end
128
+
129
+ it "should give nil if the note tag does not exist" do
130
+ @poco_empty.note.should eql(nil)
131
+ end
132
+ end
133
+
134
+ describe "#preferred_username" do
135
+ it "should give a String containing the content of the preferred_username tag" do
136
+ @poco.preferred_username.should eql("greenmanspirit")
137
+ end
138
+
139
+ it "should give nil if the preferred_username tag does not exist" do
140
+ @poco_empty.preferred_username.should eql(nil)
141
+ end
142
+ end
143
+
144
+ describe "#connected" do
145
+ it "should give a boolean true when the content of the connected tag is 'true'" do
146
+ @poco.connected.should eql(true)
147
+ end
148
+
149
+ it "should give a boolean false when the content of the connected tag is 'false'" do
150
+ @poco_false.connected.should eql(false)
151
+ end
152
+
153
+ it "should give nil if the connected tag does not exist" do
154
+ @poco_empty.connected.should eql(nil)
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,360 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
3
+ <generator uri="http://status.net" version="0.9.7beta3">StatusNet</generator>
4
+ <id>http://identi.ca/api/statuses/user_timeline/141464.atom</id>
5
+ <title>greenmanspirit timeline</title>
6
+ <subtitle>Updates from greenmanspirit on Identi.ca!</subtitle>
7
+ <logo>http://avatar.identi.ca/141464-96-20100607212940.jpeg</logo>
8
+ <updated>2011-03-12T22:10:24+00:00</updated>
9
+ <author>
10
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
11
+ <uri>http://identi.ca/user/141464</uri>
12
+ <name>greenmanspirit</name>
13
+ <email>foo@example.com</email>
14
+ <link rel="alternate" type="text/html" href="http://identi.ca/greenmanspirit"/>
15
+ <link rel="avatar" type="image/jpeg" media:width="480" media:height="480" href="http://avatar.identi.ca/141464-480-20100607212940.jpeg"/>
16
+ <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar.identi.ca/141464-96-20100607212940.jpeg"/>
17
+ <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://avatar.identi.ca/141464-48-20100607212940.jpeg"/>
18
+ <link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="http://avatar.identi.ca/141464-24-20100607212940.jpeg"/>
19
+ <georss:point>0 0</georss:point>
20
+ <poco:preferredUsername>greenmanspirit</poco:preferredUsername>
21
+ <poco:displayName>Adam Hobaugh</poco:displayName>
22
+ <poco:id>foobar</poco:id>
23
+ <poco:name>barbaz</poco:name>
24
+ <poco:nickname>spaz</poco:nickname>
25
+ <poco:published>2012-02-21T02:15:14+00:00</pico:published>
26
+ <poco:updated>2013-02-21T02:15:14+00:00</pico:updated>
27
+ <poco:birthday>2014-02-21</pico:birthday>
28
+ <poco:anniversary>2015-02-21</pico:anniversary>
29
+ <poco:gender>male</pico:gender>
30
+ <poco:note>foo
31
+ bar</poco:note>
32
+ <poco:utcOffset>-08:00</poco:utcOffset>
33
+ <poco:connected>true</poco:connected>
34
+ <poco:urls>
35
+ <poco:type>homepage</poco:type>
36
+ <poco:value>http://adamhobaugh.com</poco:value>
37
+ <poco:primary>true</poco:primary>
38
+
39
+ </poco:urls>
40
+ <statusnet:profile_info local_id="141464"></statusnet:profile_info>
41
+ </author>
42
+ <!--Deprecation warning: activity:subject is present only for backward compatibility. It will be removed in the next version of StatusNet.-->
43
+ <activity:subject>
44
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
45
+ <id>http://identi.ca/user/141464</id>
46
+ <title>Adam Hobaugh</title>
47
+ <link rel="alternate" type="text/html" href="http://identi.ca/greenmanspirit"/>
48
+ <link rel="avatar" type="image/jpeg" media:width="480" media:height="480" href="http://avatar.identi.ca/141464-480-20100607212940.jpeg"/>
49
+ <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://avatar.identi.ca/141464-96-20100607212940.jpeg"/>
50
+ <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://avatar.identi.ca/141464-48-20100607212940.jpeg"/>
51
+ <link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="http://avatar.identi.ca/141464-24-20100607212940.jpeg"/>
52
+ <georss:point>0 0</georss:point>
53
+ <poco:preferredUsername>greenmanspirit</poco:preferredUsername>
54
+ <poco:displayName>Adam Hobaugh</poco:displayName>
55
+ <poco:urls>
56
+ <poco:type>homepage</poco:type>
57
+ <poco:value>http://adamhobaugh.com</poco:value>
58
+ <poco:primary>true</poco:primary>
59
+
60
+ </poco:urls>
61
+ <statusnet:profile_info local_id="141464"></statusnet:profile_info>
62
+ </activity:subject>
63
+ <link href="http://identi.ca/greenmanspirit" rel="alternate" type="text/html"/>
64
+ <link href="http://identi.ca/main/sup#141464" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
65
+ <link href="http://identi.ca/api/statuses/user_timeline/141464.atom?max_id=51327114" rel="next" type="application/atom+xml"/>
66
+ <link href="http://identi.ca/main/push/hub" rel="hub"/>
67
+ <link href="http://identi.ca/main/push/hub2" rel="hub"/>
68
+ <link href="http://identi.ca/main/salmon/user/141464" rel="salmon"/>
69
+ <link href="http://identi.ca/main/salmon/user/141464" rel="http://salmon-protocol.org/ns/salmon-replies"/>
70
+ <link href="http://identi.ca/main/salmon/user/141464" rel="http://salmon-protocol.org/ns/salmon-mention"/>
71
+ <link href="http://identi.ca/api/statuses/user_timeline/141464.atom" rel="self" type="application/atom+xml"/>
72
+ <entry>
73
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
74
+ <activity:object>Foobar</activity:object>
75
+ <activity:target>Barbaz</activity:object>
76
+ <id>http://identi.ca/notice/64991641</id>
77
+ <title>staples come out of the head tomorrow, oh yeah</title>
78
+ <content type="html">staples come out of the head tomorrow, oh yeah</content>
79
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/64991641"/>
80
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
81
+ <published>2011-02-21T02:15:14+00:00</published>
82
+ <updated>2011-03-22T02:15:14+00:00</updated>
83
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/64239058"/>
84
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/64991641.atom"/>
85
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/64991641.atom"/>
86
+ <statusnet:notice_info local_id="64991641" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
87
+
88
+ </entry>
89
+ <entry>
90
+ <id>http://identi.ca/notice/64985575</id>
91
+ <title>getting back into applying for jobs now that I have my debt back under control from unemployment</title>
92
+ <content type="html">getting back into applying for jobs now that I have my debt back under control from unemployment</content>
93
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/64985575"/>
94
+ <published>2011-02-21T00:41:24+00:00</published>
95
+ <updated>2011-03-22T00:41:24+00:00</updated>
96
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/64233166"/>
97
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/64985575.atom"/>
98
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/64985575.atom"/>
99
+ <statusnet:notice_info local_id="64985575" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
100
+
101
+ </entry>
102
+ <entry>
103
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
104
+ <id>http://identi.ca/notice/61452377</id>
105
+ <title>It's times like this I wish I had sleepytime tea</title>
106
+ <content type="html">It's times like this I wish I had sleepytime tea</content>
107
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/61452377"/>
108
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
109
+ <published>2011-01-03T05:11:50+00:00</published>
110
+ <updated>2011-01-03T05:11:50+00:00</updated>
111
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/60809276"/>
112
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/61452377.atom"/>
113
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/61452377.atom"/>
114
+ <statusnet:notice_info local_id="61452377" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
115
+
116
+ </entry>
117
+ <entry>
118
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
119
+ <id>http://identi.ca/notice/61441098</id>
120
+ <title>My latest accomplishment - http://ravel.me/greenmanspirit/ro20b</title>
121
+ <content type="html">My latest accomplishment - &lt;a href=&quot;http://ravel.me/greenmanspirit/ro20b&quot; title=&quot;http://www.ravelry.com/projects/greenmanspirit/reversible-strands-for-men-and-women-too&quot; rel=&quot;nofollow external&quot;&gt;http://ravel.me/greenmanspirit/ro20b&lt;/a&gt;</content>
122
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/61441098"/>
123
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
124
+ <published>2011-01-02T22:49:44+00:00</published>
125
+ <updated>2011-01-02T22:49:44+00:00</updated>
126
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/60798524"/>
127
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/61441098.atom"/>
128
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/61441098.atom"/>
129
+ <statusnet:notice_info local_id="61441098" source="web" favorite="false" repeated="false"></statusnet:notice_info>
130
+
131
+ </entry>
132
+ <entry>
133
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
134
+ <id>http://identi.ca/notice/60190679</id>
135
+ <title>First field trip today, and its to the mall</title>
136
+ <content type="html">First field trip today, and its to the mall</content>
137
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/60190679"/>
138
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
139
+ <published>2010-12-10T18:50:20+00:00</published>
140
+ <updated>2010-12-10T18:50:20+00:00</updated>
141
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/59590921"/>
142
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/60190679.atom"/>
143
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/60190679.atom"/>
144
+ <statusnet:notice_info local_id="60190679" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
145
+
146
+ </entry>
147
+ <entry>
148
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
149
+ <id>http://identi.ca/notice/59612332</id>
150
+ <title>bacon makes everything better</title>
151
+ <content type="html">bacon makes everything better</content>
152
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/59612332"/>
153
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
154
+ <published>2010-12-02T02:33:38+00:00</published>
155
+ <updated>2010-12-02T02:33:38+00:00</updated>
156
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/59031019"/>
157
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/59612332.atom"/>
158
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/59612332.atom"/>
159
+ <statusnet:notice_info local_id="59612332" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
160
+
161
+ </entry>
162
+ <entry>
163
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
164
+ <id>http://identi.ca/notice/57207676</id>
165
+ <title>I am now a professional driver, will post my cdl once I'm not to lazy to scratch off personal info</title>
166
+ <content type="html">I am now a professional driver, will post my cdl once I'm not to lazy to scratch off personal info</content>
167
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/57207676"/>
168
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
169
+ <published>2010-10-23T00:53:05+00:00</published>
170
+ <updated>2010-10-23T00:53:05+00:00</updated>
171
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/56711855"/>
172
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/57207676.atom"/>
173
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/57207676.atom"/>
174
+ <statusnet:notice_info local_id="57207676" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
175
+
176
+ </entry>
177
+ <entry>
178
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
179
+ <id>http://identi.ca/notice/56394008</id>
180
+ <title>Has anyone ever used a pedometer to guide a workout plan, I have one laying around but need a workout plan to go with it and if its worth it</title>
181
+ <content type="html">Has anyone ever used a pedometer to guide a workout plan, I have one laying around but need a workout plan to go with it and if its worth it</content>
182
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/56394008"/>
183
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
184
+ <published>2010-10-16T20:29:50+00:00</published>
185
+ <updated>2010-10-16T20:29:50+00:00</updated>
186
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/55912537"/>
187
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/56394008.atom"/>
188
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/56394008.atom"/>
189
+ <statusnet:notice_info local_id="56394008" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
190
+
191
+ </entry>
192
+ <entry>
193
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
194
+ <id>http://identi.ca/notice/56176750</id>
195
+ <title>Stargate Universe is by far my favorite show, its what Voyager should have been</title>
196
+ <content type="html">Stargate Universe is by far my favorite show, its what Voyager should have been</content>
197
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/56176750"/>
198
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
199
+ <published>2010-10-14T23:24:48+00:00</published>
200
+ <updated>2010-10-14T23:24:48+00:00</updated>
201
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/55699029"/>
202
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/56176750.atom"/>
203
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/56176750.atom"/>
204
+ <statusnet:notice_info local_id="56176750" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
205
+
206
+ </entry>
207
+ <entry>
208
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
209
+ <id>http://identi.ca/notice/54276991</id>
210
+ <title>Anyone have 500 I can borrow to cover till my bus job pays, I will to pay $50 in interest, payments 45 for 11, 55 month 12, will pay notary</title>
211
+ <content type="html">Anyone have 500 I can borrow to cover till my bus job pays, I will to pay $50 in interest, payments 45 for 11, 55 month 12, will pay notary</content>
212
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/54276991"/>
213
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
214
+ <published>2010-10-05T15:48:37+00:00</published>
215
+ <updated>2010-10-05T15:48:37+00:00</updated>
216
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/53821805"/>
217
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/54276991.atom"/>
218
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/54276991.atom"/>
219
+ <statusnet:notice_info local_id="54276991" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
220
+
221
+ </entry>
222
+ <entry>
223
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
224
+ <id>http://identi.ca/notice/54003337</id>
225
+ <title>First day of bus driver training</title>
226
+ <content type="html">First day of bus driver training</content>
227
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/54003337"/>
228
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
229
+ <published>2010-10-04T11:33:04+00:00</published>
230
+ <updated>2010-10-04T11:33:04+00:00</updated>
231
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/53550533"/>
232
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/54003337.atom"/>
233
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/54003337.atom"/>
234
+ <statusnet:notice_info local_id="54003337" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
235
+
236
+ </entry>
237
+ <entry>
238
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
239
+ <id>http://identi.ca/notice/53268824</id>
240
+ <title>my car is 300 pounds lighter, just returned all my asbestos stuff!</title>
241
+ <content type="html">my car is 300 pounds lighter, just returned all my asbestos stuff!</content>
242
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/53268824"/>
243
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
244
+ <published>2010-09-30T18:47:35+00:00</published>
245
+ <updated>2010-09-30T18:47:35+00:00</updated>
246
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/52822605"/>
247
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/53268824.atom"/>
248
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/53268824.atom"/>
249
+ <statusnet:notice_info local_id="53268824" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
250
+
251
+ </entry>
252
+ <entry>
253
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
254
+ <id>http://identi.ca/notice/53053891</id>
255
+ <title>Got the job as a school bus driver, I start cdl class next week</title>
256
+ <content type="html">Got the job as a school bus driver, I start cdl class next week</content>
257
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/53053891"/>
258
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
259
+ <published>2010-09-29T16:34:59+00:00</published>
260
+ <updated>2010-09-29T16:34:59+00:00</updated>
261
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/52610163"/>
262
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/53053891.atom"/>
263
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/53053891.atom"/>
264
+ <statusnet:notice_info local_id="53053891" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
265
+
266
+ </entry>
267
+ <entry>
268
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
269
+ <id>http://identi.ca/notice/52674737</id>
270
+ <title>My bro is selling a nook and kindle for a friend, much fun shall be had by me</title>
271
+ <content type="html">My bro is selling a nook and kindle for a friend, much fun shall be had by me</content>
272
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/52674737"/>
273
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
274
+ <published>2010-09-27T16:04:44+00:00</published>
275
+ <updated>2010-09-27T16:04:44+00:00</updated>
276
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/52235564"/>
277
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52674737.atom"/>
278
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52674737.atom"/>
279
+ <statusnet:notice_info local_id="52674737" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
280
+
281
+ </entry>
282
+ <entry>
283
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
284
+ <id>http://identi.ca/notice/52400602</id>
285
+ <title>Made mozzarella today, woot, next step, Swiss or Cheddar? Hmm</title>
286
+ <content type="html">Made mozzarella today, woot, next step, Swiss or Cheddar? Hmm</content>
287
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/52400602"/>
288
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
289
+ <published>2010-09-25T23:54:10+00:00</published>
290
+ <updated>2010-09-25T23:54:10+00:00</updated>
291
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/51964154"/>
292
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52400602.atom"/>
293
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52400602.atom"/>
294
+ <statusnet:notice_info local_id="52400602" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
295
+
296
+ </entry>
297
+ <entry>
298
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
299
+ <id>http://identi.ca/notice/52201233</id>
300
+ <title>RT @candrews #Facebook went down yesterday, taking 1,000s of sites down with it. Is this single point of failure really worth it? http:/ ...</title>
301
+ <content type="html">RT @&lt;span class=&quot;vcard&quot;&gt;&lt;a href=&quot;http://identi.ca/user/12287&quot; class=&quot;url&quot; title=&quot;Craig Andrews&quot;&gt;&lt;span class=&quot;fn nickname&quot;&gt;candrews&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://identi.ca/tag/facebook&quot; rel=&quot;tag&quot;&gt;Facebook&lt;/a&gt;&lt;/span&gt; went down yesterday, taking 1,000s of sites down with it. Is this single point of failure really worth it? http:/ ...</content>
302
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/52201233"/>
303
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
304
+ <published>2010-09-24T18:40:10+00:00</published>
305
+ <updated>2010-09-24T18:40:10+00:00</updated>
306
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/51766744"/>
307
+ <ostatus:forward ref="http://identi.ca/notice/52180213" href="http://identi.ca/notice/52180213"></ostatus:forward>
308
+ <category term="facebook"></category>
309
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52201233.atom"/>
310
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52201233.atom"/>
311
+ <statusnet:notice_info local_id="52201233" source="web" favorite="false" repeated="false" repeat_of="52180213"></statusnet:notice_info>
312
+
313
+ </entry>
314
+ <entry>
315
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
316
+ <id>http://identi.ca/notice/52198476</id>
317
+ <title>anyone with an iphone want to trade a 15 dollar gift card for 15 cash, I got this as a gift and it is useless to me</title>
318
+ <content type="html">anyone with an iphone want to trade a 15 dollar gift card for 15 cash, I got this as a gift and it is useless to me</content>
319
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/52198476"/>
320
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
321
+ <published>2010-09-24T18:20:10+00:00</published>
322
+ <updated>2010-09-24T18:20:10+00:00</updated>
323
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/51764033"/>
324
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52198476.atom"/>
325
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52198476.atom"/>
326
+ <statusnet:notice_info local_id="52198476" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
327
+
328
+ </entry>
329
+ <entry>
330
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
331
+ <id>http://identi.ca/notice/52078750</id>
332
+ <title>everytime the compressor for my air conditioner shuts off, my dog jumps thinking someone is at the door</title>
333
+ <content type="html">everytime the compressor for my air conditioner shuts off, my dog jumps thinking someone is at the door</content>
334
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/52078750"/>
335
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
336
+ <published>2010-09-24T02:40:22+00:00</published>
337
+ <updated>2010-09-24T02:40:22+00:00</updated>
338
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/51645609"/>
339
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52078750.atom"/>
340
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/52078750.atom"/>
341
+ <statusnet:notice_info local_id="52078750" source="xmpp" favorite="false" repeated="false"></statusnet:notice_info>
342
+
343
+ </entry>
344
+ <entry>
345
+ <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
346
+ <id>http://identi.ca/notice/51893773</id>
347
+ <title>5.5 hours without power</title>
348
+ <content type="html">5.5 hours without power</content>
349
+ <link rel="alternate" type="text/html" href="http://identi.ca/notice/51893773"/>
350
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
351
+ <published>2010-09-23T02:15:02+00:00</published>
352
+ <updated>2010-09-23T02:15:02+00:00</updated>
353
+ <link rel="ostatus:conversation" href="http://identi.ca/conversation/51462564"/>
354
+ <link rel="self" type="application/atom+xml" href="http://identi.ca/api/statuses/show/51893773.atom"/>
355
+ <link rel="edit" type="application/atom+xml" href="http://identi.ca/api/statuses/show/51893773.atom"/>
356
+ <statusnet:notice_info local_id="51893773" source="&lt;a href=&quot;http://mustard.macno.org&quot; rel=&quot;nofollow&quot;&gt;mustard&lt;/a&gt;" source_link="http://mustard.macno.org" favorite="false" repeated="false"></statusnet:notice_info>
357
+
358
+ </entry>
359
+ </feed>
360
+