t 0.1.0 → 0.2.0

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,65 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+
4
+ describe T::CLI::List::Add do
5
+
6
+ before do
7
+ @t = T::CLI.new
8
+ @old_stderr = $stderr
9
+ $stderr = StringIO.new
10
+ @old_stdout = $stdout
11
+ $stdout = StringIO.new
12
+ end
13
+
14
+ after do
15
+ $stderr = @old_stderr
16
+ $stdout = @old_stdout
17
+ end
18
+
19
+ describe "#users" do
20
+ before do
21
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
22
+ stub_get("/1/account/verify_credentials.json").
23
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
24
+ stub_post("/1/lists/members/create_all.json").
25
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
26
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
27
+ end
28
+ it "should request the correct resource" do
29
+ @t.list("add", "users", "presidents", "sferik")
30
+ a_get("/1/account/verify_credentials.json").
31
+ should have_been_made
32
+ a_post("/1/lists/members/create_all.json").
33
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
34
+ should have_been_made
35
+ end
36
+ it "should have the correct output" do
37
+ @t.list("add", "users", "presidents", "sferik")
38
+ $stdout.string.should =~ /@testcli added 1 user to the list "presidents"\./
39
+ end
40
+ end
41
+
42
+ describe "#users" do
43
+ before do
44
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
45
+ stub_get("/1/account/verify_credentials.json").
46
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
47
+ stub_post("/1/lists/members/create_all.json").
48
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
49
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
50
+ end
51
+ it "should request the correct resource" do
52
+ @t.list("add", "users", "presidents", "sferik")
53
+ a_get("/1/account/verify_credentials.json").
54
+ should have_been_made
55
+ a_post("/1/lists/members/create_all.json").
56
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
57
+ should have_been_made
58
+ end
59
+ it "should have the correct output" do
60
+ @t.list("add", "users", "presidents", "sferik")
61
+ $stdout.string.should =~ /@testcli added 1 user to the list "presidents"\./
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,315 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+
4
+ describe T::CLI::List::Remove::All do
5
+
6
+ before do
7
+ @t = T::CLI.new
8
+ @old_stderr = $stderr
9
+ $stderr = StringIO.new
10
+ @old_stdout = $stdout
11
+ $stdout = StringIO.new
12
+ end
13
+
14
+ after do
15
+ $stderr = @old_stderr
16
+ $stdout = @old_stdout
17
+ end
18
+
19
+ describe "#friends" do
20
+ before do
21
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
22
+ stub_get("/1/account/verify_credentials.json").
23
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
24
+ end
25
+ context "no users" do
26
+ before do
27
+ stub_get("/1/lists/members.json").
28
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
29
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
30
+ stub_get("/1/friends/ids.json").
31
+ with(:query => {:cursor => "-1"}).
32
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
33
+ end
34
+ it "should request the correct resource" do
35
+ @t.list("remove", "all", "friends", "presidents")
36
+ a_get("/1/friends/ids.json").
37
+ with(:query => {:cursor => "-1"}).
38
+ should have_been_made
39
+ end
40
+ it "should have the correct output" do
41
+ @t.list("remove", "all", "friends", "presidents")
42
+ $stdout.string.chomp.should == "None of @testcli's friends are members of the list \"presidents\"."
43
+ end
44
+ end
45
+ context "one user" do
46
+ before do
47
+ stub_get("/1/lists/members.json").
48
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
49
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
50
+ stub_get("/1/friends/ids.json").
51
+ with(:query => {:cursor => "-1"}).
52
+ to_return(:body => fixture("friends_ids.json"), :headers => {:content_type => "application/json; charset=utf-8"})
53
+ stub_post("/1/lists/members/destroy.json").
54
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
55
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
56
+ end
57
+ it "should request the correct resource" do
58
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 friend from the list \"presidents\"? ")
59
+ $stdin.should_receive(:gets).and_return("yes")
60
+ @t.list("remove", "all", "friends", "presidents")
61
+ a_get("/1/account/verify_credentials.json").
62
+ should have_been_made
63
+ a_get("/1/lists/members.json").
64
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
65
+ should have_been_made
66
+ a_get("/1/friends/ids.json").
67
+ with(:query => {:cursor => "-1"}).
68
+ should have_been_made
69
+ a_post("/1/lists/members/destroy.json").
70
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
71
+ should have_been_made
72
+ end
73
+ context "yes" do
74
+ it "should have the correct output" do
75
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 friend from the list \"presidents\"? ")
76
+ $stdin.should_receive(:gets).and_return("yes")
77
+ @t.list("remove", "all", "friends", "presidents")
78
+ $stdout.string.should =~ /@testcli removed 1 friend from the list "presidents"\./
79
+ end
80
+ end
81
+ context "no" do
82
+ it "should have the correct output" do
83
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 friend from the list \"presidents\"? ")
84
+ $stdin.should_receive(:gets).and_return("no")
85
+ @t.list("remove", "all", "friends", "presidents")
86
+ $stdout.string.chomp.should == ""
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "#followers" do
93
+ before do
94
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
95
+ stub_get("/1/account/verify_credentials.json").
96
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
97
+ end
98
+ context "no users" do
99
+ before do
100
+ stub_get("/1/lists/members.json").
101
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
102
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
103
+ stub_get("/1/followers/ids.json").
104
+ with(:query => {:cursor => "-1"}).
105
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
106
+ end
107
+ it "should request the correct resource" do
108
+ @t.list("remove", "all", "followers", "presidents")
109
+ a_get("/1/followers/ids.json").
110
+ with(:query => {:cursor => "-1"}).
111
+ should have_been_made
112
+ end
113
+ it "should have the correct output" do
114
+ @t.list("remove", "all", "followers", "presidents")
115
+ $stdout.string.chomp.should == "None of @testcli's followers are members of the list \"presidents\"."
116
+ end
117
+ end
118
+ context "one user" do
119
+ before do
120
+ stub_get("/1/lists/members.json").
121
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
122
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
123
+ stub_get("/1/followers/ids.json").
124
+ with(:query => {:cursor => "-1"}).
125
+ to_return(:body => fixture("followers_ids.json"), :headers => {:content_type => "application/json; charset=utf-8"})
126
+ stub_post("/1/lists/members/destroy.json").
127
+ with(:body => {:user_id => "213747670", :slug => "presidents", :owner_screen_name => "sferik"}).
128
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
129
+ stub_post("/1/lists/members/destroy.json").
130
+ with(:body => {:user_id => "428004849", :slug => "presidents", :owner_screen_name => "sferik"}).
131
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
132
+ end
133
+ it "should request the correct resource" do
134
+ $stdout.should_receive(:print).with("Are you sure you want to remove 2 followers from the list \"presidents\"? ")
135
+ $stdin.should_receive(:gets).and_return("yes")
136
+ @t.list("remove", "all", "followers", "presidents")
137
+ a_get("/1/account/verify_credentials.json").
138
+ should have_been_made
139
+ a_get("/1/lists/members.json").
140
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
141
+ should have_been_made
142
+ a_get("/1/followers/ids.json").
143
+ with(:query => {:cursor => "-1"}).
144
+ should have_been_made
145
+ a_post("/1/lists/members/destroy.json").
146
+ with(:body => {:user_id => "213747670", :slug => "presidents", :owner_screen_name => "sferik"}).
147
+ should have_been_made
148
+ a_post("/1/lists/members/destroy.json").
149
+ with(:body => {:user_id => "428004849", :slug => "presidents", :owner_screen_name => "sferik"}).
150
+ should have_been_made
151
+ end
152
+ context "yes" do
153
+ it "should have the correct output" do
154
+ $stdout.should_receive(:print).with("Are you sure you want to remove 2 followers from the list \"presidents\"? ")
155
+ $stdin.should_receive(:gets).and_return("yes")
156
+ @t.list("remove", "all", "followers", "presidents")
157
+ $stdout.string.should =~ /@testcli removed 2 followers from the list "presidents"\./
158
+ end
159
+ end
160
+ context "no" do
161
+ it "should have the correct output" do
162
+ $stdout.should_receive(:print).with("Are you sure you want to remove 2 followers from the list \"presidents\"? ")
163
+ $stdin.should_receive(:gets).and_return("no")
164
+ @t.list("remove", "all", "followers", "presidents")
165
+ $stdout.string.chomp.should == ""
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ describe "#listed" do
172
+ before do
173
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
174
+ stub_get("/1/account/verify_credentials.json").
175
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
176
+ end
177
+ context "no users" do
178
+ before do
179
+ stub_get("/1/lists/members.json").
180
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
181
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
182
+ stub_get("/1/lists/members.json").
183
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "democrats"}).
184
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
185
+ end
186
+ it "should request the correct resource" do
187
+ @t.list("remove", "all", "listed", "democrats", "presidents")
188
+ a_get("/1/account/verify_credentials.json").
189
+ should have_been_made
190
+ a_get("/1/lists/members.json").
191
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
192
+ should have_been_made
193
+ a_get("/1/lists/members.json").
194
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "democrats"}).
195
+ should have_been_made
196
+ end
197
+ it "should have the correct output" do
198
+ @t.list("remove", "all", "listed", "democrats", "presidents")
199
+ $stdout.string.chomp.should == "None of the members of the list \"democrats\" are members of the list \"presidents\"."
200
+ end
201
+ end
202
+ context "one user" do
203
+ before do
204
+ stub_get("/1/lists/members.json").
205
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
206
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
207
+ stub_get("/1/lists/members.json").
208
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "democrats"}).
209
+ to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
210
+ stub_post("/1/lists/members/destroy.json").
211
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
212
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
213
+ end
214
+ it "should request the correct resource" do
215
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
216
+ $stdin.should_receive(:gets).and_return("yes")
217
+ @t.list("remove", "all", "listed", "democrats", "presidents")
218
+ a_get("/1/account/verify_credentials.json").
219
+ should have_been_made
220
+ a_get("/1/lists/members.json").
221
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
222
+ should have_been_made
223
+ a_get("/1/lists/members.json").
224
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "democrats"}).
225
+ should have_been_made
226
+ a_post("/1/lists/members/destroy.json").
227
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
228
+ should have_been_made
229
+ end
230
+ context "yes" do
231
+ it "should have the correct output" do
232
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
233
+ $stdin.should_receive(:gets).and_return("yes")
234
+ @t.list("remove", "all", "listed", "democrats", "presidents")
235
+ $stdout.string.should =~ /@testcli removed 1 member from the list "presidents"\./
236
+ end
237
+ end
238
+ context "no" do
239
+ it "should have the correct output" do
240
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
241
+ $stdin.should_receive(:gets).and_return("no")
242
+ @t.list("remove", "all", "listed", "democrats", "presidents")
243
+ $stdout.string.chomp.should == ""
244
+ end
245
+ end
246
+ end
247
+ end
248
+
249
+ describe "#members" do
250
+ before do
251
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
252
+ stub_get("/1/account/verify_credentials.json").
253
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
254
+ end
255
+ context "no users" do
256
+ before do
257
+ stub_get("/1/lists/members.json").
258
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
259
+ to_return(:body => fixture("empty_cursor.json"), :headers => {:content_type => "application/json; charset=utf-8"})
260
+ end
261
+ it "should request the correct resource" do
262
+ @t.list("remove", "all", "members", "presidents")
263
+ a_get("/1/account/verify_credentials.json").
264
+ should have_been_made
265
+ a_get("/1/lists/members.json").
266
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
267
+ should have_been_made
268
+ end
269
+ it "should have the correct output" do
270
+ @t.list("remove", "all", "members", "presidents")
271
+ $stdout.string.chomp.should == "The list \"presidents\" doesn't have any members."
272
+ end
273
+ end
274
+ context "one user" do
275
+ before do
276
+ stub_get("/1/lists/members.json").
277
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
278
+ to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
279
+ stub_post("/1/lists/members/destroy.json").
280
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
281
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
282
+ end
283
+ it "should request the correct resource" do
284
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
285
+ $stdin.should_receive(:gets).and_return("yes")
286
+ @t.list("remove", "all", "members", "presidents")
287
+ a_get("/1/account/verify_credentials.json").
288
+ should have_been_made
289
+ a_get("/1/lists/members.json").
290
+ with(:query => {:cursor => "-1", :include_entities => "false", :owner_screen_name => "sferik", :skip_status => "true", :slug => "presidents"}).
291
+ should have_been_made
292
+ a_post("/1/lists/members/destroy.json").
293
+ with(:body => {:user_id => "7505382", :slug => "presidents", :owner_screen_name => "sferik"}).
294
+ should have_been_made
295
+ end
296
+ context "yes" do
297
+ it "should have the correct output" do
298
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
299
+ $stdin.should_receive(:gets).and_return("yes")
300
+ @t.list("remove", "all", "members", "presidents")
301
+ $stdout.string.should =~ /@testcli removed 1 member from the list "presidents"\./
302
+ end
303
+ end
304
+ context "no" do
305
+ it "should have the correct output" do
306
+ $stdout.should_receive(:print).with("Are you sure you want to remove 1 member from the list \"presidents\"? ")
307
+ $stdin.should_receive(:gets).and_return("no")
308
+ @t.list("remove", "all", "members", "presidents")
309
+ $stdout.string.chomp.should == ""
310
+ end
311
+ end
312
+ end
313
+ end
314
+
315
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+
4
+ describe T::CLI::List::Remove do
5
+
6
+ before do
7
+ @t = T::CLI.new
8
+ @old_stderr = $stderr
9
+ $stderr = StringIO.new
10
+ @old_stdout = $stdout
11
+ $stdout = StringIO.new
12
+ end
13
+
14
+ after do
15
+ $stderr = @old_stderr
16
+ $stdout = @old_stdout
17
+ end
18
+
19
+ describe "#users" do
20
+ before do
21
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
22
+ stub_get("/1/account/verify_credentials.json").
23
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
24
+ stub_post("/1/lists/members/destroy.json").
25
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
26
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
27
+ end
28
+ it "should request the correct resource" do
29
+ @t.list("remove", "users", "presidents", "sferik")
30
+ a_get("/1/account/verify_credentials.json").
31
+ should have_been_made
32
+ a_post("/1/lists/members/destroy.json").
33
+ with(:body => {:screen_name => "sferik", :slug => "presidents", :owner_screen_name => "sferik"}).
34
+ should have_been_made
35
+ end
36
+ it "should have the correct output" do
37
+ @t.list("remove", "users", "presidents", "sferik")
38
+ $stdout.string.should =~ /@testcli removed 1 user from the list "presidents"\./
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+
4
+ describe T::CLI::List do
5
+
6
+ before do
7
+ @t = T::CLI.new
8
+ @old_stderr = $stderr
9
+ $stderr = StringIO.new
10
+ @old_stdout = $stdout
11
+ $stdout = StringIO.new
12
+ end
13
+
14
+ after do
15
+ $stderr = @old_stderr
16
+ $stdout = @old_stdout
17
+ end
18
+
19
+ describe "#create" do
20
+ before do
21
+ @t.options = @t.options.merge(:profile => fixture_path + "/.trc")
22
+ stub_post("/1/lists/create.json").
23
+ with(:body => {:name => "presidents"}).
24
+ to_return(:body => fixture("list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
25
+ end
26
+ it "should request the correct resource" do
27
+ @t.list("create", "presidents")
28
+ a_post("/1/lists/create.json").
29
+ with(:body => {:name => "presidents"}).
30
+ should have_been_made
31
+ end
32
+ it "should have the correct output" do
33
+ @t.list("create", "presidents")
34
+ $stdout.string.chomp.should == "@testcli created the list \"presidents\"."
35
+ end
36
+ end
37
+
38
+ describe "#timeline" do
39
+ before do
40
+ stub_get("/1/account/verify_credentials.json").
41
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
42
+ stub_get("/1/lists/statuses.json").
43
+ with(:query => {:owner_screen_name => "sferik", :per_page => "20", :slug => "presidents", :include_entities => "false"}).
44
+ to_return(:body => fixture("statuses.json"), :headers => {:content_type => "application/json; charset=utf-8"})
45
+ end
46
+ it "should request the correct resource" do
47
+ @t.list("timeline", "presidents")
48
+ a_get("/1/account/verify_credentials.json").
49
+ should have_been_made
50
+ a_get("/1/lists/statuses.json").
51
+ with(:query => {:owner_screen_name => "sferik", :per_page => "20", :slug => "presidents", :include_entities => "false"}).
52
+ should have_been_made
53
+ end
54
+ it "should have the correct output" do
55
+ @t.list("timeline", "presidents")
56
+ $stdout.string.should == <<-eos.gsub(/^/, ' ' * 6)
57
+ sferik: Ruby is the best programming language for hiding the ugly bits. (about 1 year ago)
58
+ sferik: There are 1.3 billion people in China; when people say there are 1 billion they are rounding off the entire population of the United States. (about 1 year ago)
59
+ sferik: The new Windows Phone campaign is the best advertising from Microsoft since "Start Me Up" (1995). Great work by CP+B. http://t.co/tIzxopI (about 1 year ago)
60
+ sferik: Fear not to sow seeds because of the birds. http://twitpic.com/2wg621 (about 1 year ago)
61
+ sferik: Speaking of things that are maddening: the interview with the Wall Street guys on the most recent This American Life http://bit.ly/af9pSD (about 1 year ago)
62
+ sferik: Holy cow! RailsAdmin is up to 200 watchers (from 100 yesterday). http://github.com/sferik/rails_admin (about 1 year ago)
63
+ sferik: Kind of cool that Facebook acts as a mirror for open-source projects that they use or like http://mirror.facebook.net/ (about 1 year ago)
64
+ sferik: RailsAdmin already has 100 watchers, 12 forks, and 6 contributors in less than 2 months. Let's keep the momentum going! http://bit.ly/cCMMqD (about 1 year ago)
65
+ sferik: This week's This American Life is amazing. @JoeLipari is an American hero. http://bit.ly/d9RbnB (about 1 year ago)
66
+ sferik: RT @polyseme: OH: shofars should be called jewvuzelas. (about 1 year ago)
67
+ sferik: Spent this morning fixing broken windows in RailsAdmin http://github.com/sferik/rails_admin/compare/ab6c598...0e3770f (about 1 year ago)
68
+ sferik: I'm a big believer that the broken windows theory applies to software development http://en.wikipedia.org/wiki/Broken_windows_theory (about 1 year ago)
69
+ sferik: I hope you idiots are happy with your piece of shit Android phones. http://www.apple.com/pr/library/2010/09/09statement.html (about 1 year ago)
70
+ sferik: Ping: kills MySpace dead. (about 1 year ago)
71
+ sferik: Crazy that iTunes Ping didn't leak a drop. (about 1 year ago)
72
+ sferik: The plot thickens http://twitpic.com/2k5lt2 (about 1 year ago)
73
+ sferik: 140 Proof Provides A Piece Of The Twitter Advertising Puzzle http://t.co/R2cUSDe via @techcrunch (about 1 year ago)
74
+ sferik: Try as you may http://www.thedoghousediaries.com/?p=1940 (about 1 year ago)
75
+ sferik: I know @SarahPalinUSA has a right to use Twitter, but should she? (over 1 year ago)
76
+ eos
77
+ end
78
+ end
79
+
80
+ end