ruby-readability 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +2 -0
- data/Guardfile +9 -0
- data/README.md +5 -0
- data/bin/readability +9 -7
- data/lib/readability.rb +82 -81
- data/ruby-readability.gemspec +1 -1
- data/spec/fixtures/boing_boing.html +876 -0
- data/spec/readability_spec.rb +33 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7452ade635ade3314c5eb992de803b2ed6d103e0
|
4
|
+
data.tar.gz: 90c7b2d34dd4d6070e06c589d5e01f5ebb5e76db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09a7bfef009fdc001749a2695876d0c0adfcb12ca7cdce31ef494227cd9712133b6ba7a18ffd8340b7a2f233954f6e1cf83e1470b70052d9cb64ad66db24d0c8
|
7
|
+
data.tar.gz: cf7b9884f2339f8e2cc99c0a17fc4170a3a97e7f59c9c1e0a0b40417f45c059d2df31d54253b6535f942915096b11e0592d2f8cd2ff735c0bb9edd5ae465afe8
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -51,6 +51,7 @@ You may provide options to `Readability::Document.new`, including:
|
|
51
51
|
`:ignore_image_format => ["gif", "png"]`;
|
52
52
|
* `:min_image_height`: set a minimum image height for `#images`;
|
53
53
|
* `:min_image_width`: set a minimum image width for `#images`.
|
54
|
+
* `:blacklist` and `:whitelist` allow you to explicitly scope to, or remove, CSS selectors.
|
54
55
|
|
55
56
|
|
56
57
|
Command Line Tool
|
@@ -74,6 +75,10 @@ feature requires that the `fastimage` gem be installed.
|
|
74
75
|
rbody = Readability::Document.new(body, :tags => %w[div p img a], :attributes => %w[src href], :remove_empty_nodes => false)
|
75
76
|
rbody.images
|
76
77
|
|
78
|
+
Related Projects
|
79
|
+
----------------
|
80
|
+
|
81
|
+
* [newspaper](https://github.com/codelucas/newspaper) is an advanced news extraction, article extraction, and content curation library for Python.
|
77
82
|
|
78
83
|
Potential Issues
|
79
84
|
----------------
|
data/bin/readability
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
3
|
require 'open-uri'
|
4
4
|
require 'optparse'
|
@@ -29,11 +29,13 @@ if ARGV.length != 1
|
|
29
29
|
end
|
30
30
|
|
31
31
|
text = open(ARGV.first).read
|
32
|
-
if options[:images]
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
params = if options[:images]
|
33
|
+
{ :tags => %w[div p img a],
|
34
|
+
:attributes => %w[src href],
|
35
|
+
:remove_empty_nodes => false,
|
36
|
+
:debug => options[:debug] }
|
37
37
|
else
|
38
|
-
|
38
|
+
{ :debug => options[:debug] }
|
39
39
|
end
|
40
|
+
|
41
|
+
puts Readability::Document.new(text, params).content
|
data/lib/readability.rb
CHANGED
@@ -15,7 +15,9 @@ module Readability
|
|
15
15
|
:remove_empty_nodes => true,
|
16
16
|
:min_image_width => 130,
|
17
17
|
:min_image_height => 80,
|
18
|
-
:ignore_image_format => []
|
18
|
+
:ignore_image_format => [],
|
19
|
+
:blacklist => nil,
|
20
|
+
:whitelist => nil
|
19
21
|
}.freeze
|
20
22
|
|
21
23
|
attr_accessor :options, :html, :best_candidate, :candidates, :best_candidate_has_image
|
@@ -35,18 +37,42 @@ module Readability
|
|
35
37
|
@clean_conditionally = @options[:clean_conditionally]
|
36
38
|
@best_candidate_has_image = true
|
37
39
|
make_html
|
40
|
+
handle_exclusions!(@options[:whitelist], @options[:blacklist])
|
38
41
|
end
|
39
42
|
|
40
43
|
def prepare_candidates
|
41
44
|
@html.css("script, style").each { |i| i.remove }
|
42
45
|
remove_unlikely_candidates! if @remove_unlikely_candidates
|
43
46
|
transform_misused_divs_into_paragraphs!
|
44
|
-
|
47
|
+
|
45
48
|
@candidates = score_paragraphs(options[:min_text_length])
|
46
49
|
@best_candidate = select_best_candidate(@candidates)
|
47
50
|
end
|
48
51
|
|
49
|
-
def
|
52
|
+
def handle_exclusions!(whitelist, blacklist)
|
53
|
+
return unless whitelist || blacklist
|
54
|
+
|
55
|
+
if blacklist
|
56
|
+
elems = @html.css(blacklist)
|
57
|
+
if elems
|
58
|
+
elems.each do |e|
|
59
|
+
e.remove
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if whitelist
|
65
|
+
elems = @html.css(whitelist).to_s
|
66
|
+
|
67
|
+
if body = @html.at_css('body')
|
68
|
+
body.inner_html = elems
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
@input = @html.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
def make_html(whitelist=nil, blacklist=nil)
|
50
76
|
@html = Nokogiri::HTML(@input, nil, @options[:encoding])
|
51
77
|
# In case document has no body, such as from empty string or redirect
|
52
78
|
@html = Nokogiri::HTML('<body />', nil, @options[:encoding]) if @html.css('body').length == 0
|
@@ -78,16 +104,16 @@ module Readability
|
|
78
104
|
url = element["src"].value
|
79
105
|
height = element["height"].nil? ? 0 : element["height"].value.to_i
|
80
106
|
width = element["width"].nil? ? 0 : element["width"].value.to_i
|
81
|
-
|
107
|
+
|
82
108
|
if url =~ /\Ahttps?:\/\//i && (height.zero? || width.zero?)
|
83
|
-
image = get_image_size(url)
|
109
|
+
image = get_image_size(url)
|
84
110
|
next unless image
|
85
111
|
else
|
86
112
|
image = {:width => width, :height => height}
|
87
113
|
end
|
88
|
-
|
114
|
+
|
89
115
|
image[:format] = File.extname(url).gsub(".", "")
|
90
|
-
|
116
|
+
|
91
117
|
if tested_images.include?(url)
|
92
118
|
debug("Image was tested: #{url}")
|
93
119
|
next
|
@@ -105,14 +131,12 @@ module Readability
|
|
105
131
|
end
|
106
132
|
|
107
133
|
def get_image_size(url)
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
nil
|
115
|
-
end
|
134
|
+
w, h = FastImage.size(url)
|
135
|
+
raise "Couldn't get size." if w.nil? || h.nil?
|
136
|
+
{:width => w, :height => h}
|
137
|
+
rescue => e
|
138
|
+
debug("Image error: #{e}")
|
139
|
+
nil
|
116
140
|
end
|
117
141
|
|
118
142
|
def image_meets_criteria?(image)
|
@@ -148,9 +172,7 @@ module Readability
|
|
148
172
|
author_elements = @html.xpath('//meta[@name = "dc.creator"]')
|
149
173
|
unless author_elements.empty?
|
150
174
|
author_elements.each do |element|
|
151
|
-
if element['content']
|
152
|
-
return element['content'].strip
|
153
|
-
end
|
175
|
+
return element['content'].strip if element['content']
|
154
176
|
end
|
155
177
|
end
|
156
178
|
|
@@ -160,9 +182,7 @@ module Readability
|
|
160
182
|
author_elements = @html.xpath('//*[contains(@class, "vcard")]//*[contains(@class, "fn")]')
|
161
183
|
unless author_elements.empty?
|
162
184
|
author_elements.each do |element|
|
163
|
-
if element.text
|
164
|
-
return element.text.strip
|
165
|
-
end
|
185
|
+
return element.text.strip if element.text
|
166
186
|
end
|
167
187
|
end
|
168
188
|
|
@@ -172,18 +192,14 @@ module Readability
|
|
172
192
|
author_elements = @html.xpath('//a[@rel = "author"]')
|
173
193
|
unless author_elements.empty?
|
174
194
|
author_elements.each do |element|
|
175
|
-
if element.text
|
176
|
-
return element.text.strip
|
177
|
-
end
|
195
|
+
return element.text.strip if element.text
|
178
196
|
end
|
179
197
|
end
|
180
198
|
|
181
199
|
author_elements = @html.xpath('//*[@id = "author"]')
|
182
200
|
unless author_elements.empty?
|
183
201
|
author_elements.each do |element|
|
184
|
-
if element.text
|
185
|
-
return element.text.strip
|
186
|
-
end
|
202
|
+
return element.text.strip if element.text
|
187
203
|
end
|
188
204
|
end
|
189
205
|
end
|
@@ -230,10 +246,10 @@ module Readability
|
|
230
246
|
node_content = sibling.text
|
231
247
|
node_length = node_content.length
|
232
248
|
|
233
|
-
if node_length > 80 && link_density < 0.25
|
234
|
-
|
249
|
+
append = if node_length > 80 && link_density < 0.25
|
250
|
+
true
|
235
251
|
elsif node_length < 80 && link_density == 0 && node_content =~ /\.( |$)/
|
236
|
-
|
252
|
+
true
|
237
253
|
end
|
238
254
|
end
|
239
255
|
|
@@ -302,40 +318,28 @@ module Readability
|
|
302
318
|
return weight unless @weight_classes
|
303
319
|
|
304
320
|
if e[:class] && e[:class] != ""
|
305
|
-
if e[:class] =~ REGEXES[:negativeRe]
|
306
|
-
|
307
|
-
end
|
308
|
-
|
309
|
-
if e[:class] =~ REGEXES[:positiveRe]
|
310
|
-
weight += 25
|
311
|
-
end
|
321
|
+
weight -= 25 if e[:class] =~ REGEXES[:negativeRe]
|
322
|
+
weight += 25 if e[:class] =~ REGEXES[:positiveRe]
|
312
323
|
end
|
313
324
|
|
314
325
|
if e[:id] && e[:id] != ""
|
315
|
-
if e[:id] =~ REGEXES[:negativeRe]
|
316
|
-
|
317
|
-
end
|
318
|
-
|
319
|
-
if e[:id] =~ REGEXES[:positiveRe]
|
320
|
-
weight += 25
|
321
|
-
end
|
326
|
+
weight -= 25 if e[:id] =~ REGEXES[:negativeRe]
|
327
|
+
weight += 25 if e[:id] =~ REGEXES[:positiveRe]
|
322
328
|
end
|
323
329
|
|
324
330
|
weight
|
325
331
|
end
|
326
332
|
|
333
|
+
ELEMENT_SCORES = {
|
334
|
+
'div' => 5,
|
335
|
+
'blockquote' => 3,
|
336
|
+
'form' => -3,
|
337
|
+
'th' => -5
|
338
|
+
}.freeze
|
339
|
+
|
327
340
|
def score_node(elem)
|
328
341
|
content_score = class_weight(elem)
|
329
|
-
|
330
|
-
when "div"
|
331
|
-
content_score += 5
|
332
|
-
when "blockquote"
|
333
|
-
content_score += 3
|
334
|
-
when "form"
|
335
|
-
content_score -= 3
|
336
|
-
when "th"
|
337
|
-
content_score -= 5
|
338
|
-
end
|
342
|
+
content_score += ELEMENT_SCORES.fetch(elem.name.downcase, 0)
|
339
343
|
{ :content_score => content_score, :elem => elem }
|
340
344
|
end
|
341
345
|
|
@@ -373,7 +377,7 @@ module Readability
|
|
373
377
|
end
|
374
378
|
end
|
375
379
|
|
376
|
-
def sanitize(node, candidates, options = {})
|
380
|
+
def sanitize(node, candidates, options = {})
|
377
381
|
node.css("h1, h2, h3, h4, h5, h6").each do |header|
|
378
382
|
header.remove if class_weight(header) < 0 || get_link_density(header) > 0.33
|
379
383
|
end
|
@@ -450,38 +454,35 @@ module Readability
|
|
450
454
|
|
451
455
|
content_length = el.text.strip.length # Count the text length excluding any surrounding whitespace
|
452
456
|
link_density = get_link_density(el)
|
453
|
-
to_remove = false
|
454
|
-
reason = ""
|
455
|
-
|
456
|
-
if counts["img"] > counts["p"]
|
457
|
-
reason = "too many images"
|
458
|
-
to_remove = true
|
459
|
-
elsif counts["li"] > counts["p"] && name != "ul" && name != "ol"
|
460
|
-
reason = "more <li>s than <p>s"
|
461
|
-
to_remove = true
|
462
|
-
elsif counts["input"] > (counts["p"] / 3).to_i
|
463
|
-
reason = "less than 3x <p>s than <input>s"
|
464
|
-
to_remove = true
|
465
|
-
elsif content_length < (options[:min_text_length] || TEXT_LENGTH_THRESHOLD) && (counts["img"] == 0 || counts["img"] > 2)
|
466
|
-
reason = "too short a content length without a single image"
|
467
|
-
to_remove = true
|
468
|
-
elsif weight < 25 && link_density > 0.2
|
469
|
-
reason = "too many links for its weight (#{weight})"
|
470
|
-
to_remove = true
|
471
|
-
elsif weight >= 25 && link_density > 0.5
|
472
|
-
reason = "too many links for its weight (#{weight})"
|
473
|
-
to_remove = true
|
474
|
-
elsif (counts["embed"] == 1 && content_length < 75) || counts["embed"] > 1
|
475
|
-
reason = "<embed>s with too short a content length, or too many <embed>s"
|
476
|
-
to_remove = true
|
477
|
-
end
|
478
457
|
|
479
|
-
|
458
|
+
reason = clean_conditionally_reason?(counts, content_length, options, weight, link_density)
|
459
|
+
if reason
|
480
460
|
debug("Conditionally cleaned #{name}##{el[:id]}.#{el[:class]} with weight #{weight} and content score #{content_score} because it has #{reason}.")
|
481
461
|
el.remove
|
482
462
|
end
|
483
463
|
end
|
484
464
|
end
|
485
465
|
end
|
466
|
+
|
467
|
+
def clean_conditionally_reason?(counts, content_length, options, weight, link_density)
|
468
|
+
if counts["img"] > counts["p"]
|
469
|
+
"too many images"
|
470
|
+
elsif counts["li"] > counts["p"] && name != "ul" && name != "ol"
|
471
|
+
"more <li>s than <p>s"
|
472
|
+
elsif counts["input"] > (counts["p"] / 3).to_i
|
473
|
+
"less than 3x <p>s than <input>s"
|
474
|
+
elsif content_length < (options[:min_text_length] || TEXT_LENGTH_THRESHOLD) && (counts["img"] == 0 || counts["img"] > 2)
|
475
|
+
"too short a content length without a single image"
|
476
|
+
elsif weight < 25 && link_density > 0.2
|
477
|
+
"too many links for its weight (#{weight})"
|
478
|
+
elsif weight >= 25 && link_density > 0.5
|
479
|
+
"too many links for its weight (#{weight})"
|
480
|
+
elsif (counts["embed"] == 1 && content_length < 75) || counts["embed"] > 1
|
481
|
+
"<embed>s with too short a content length, or too many <embed>s"
|
482
|
+
else
|
483
|
+
nil
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
486
487
|
end
|
487
488
|
end
|
data/ruby-readability.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "ruby-readability"
|
6
|
-
s.version = '0.6.
|
6
|
+
s.version = '0.6.1'
|
7
7
|
s.authors = ["Andrew Cantino", "starrhorne", "libc", "Kyle Maxwell"]
|
8
8
|
s.email = ["andrew@iterationlabs.com"]
|
9
9
|
s.homepage = "http://github.com/cantino/ruby-readability"
|
@@ -0,0 +1,876 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>Tick, tick, tick - Boing Boing</title><meta charset="utf-8">
|
5
|
+
<meta property="twitter:account_id" content="5971922" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=1" />
|
7
|
+
<link rel="stylesheet" href="http://media.boingboing.net/wp-content/themes/2012/style.css?v=33" type="text/css" charset="utf-8" />
|
8
|
+
<!--[if lt IE 9]> <link rel="stylesheet" href="http://media.boingboing.net/wp-content/themes/2012/style_IE.css?v=3" type="text/css" charset="utf-8" /><![endif]-->
|
9
|
+
<script type="text/javascript" src="//use.typekit.net/its8tor.js"></script>
|
10
|
+
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
11
|
+
|
12
|
+
<meta property="fb:admins" content="1219680052" />
|
13
|
+
<meta property="og:site_name" content="Boing Boing" />
|
14
|
+
<link rel="apple-touch-icon" href="/wp-content/themes/2012/sundries/apple-touch-icon.png"/>
|
15
|
+
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
|
16
|
+
<script type="text/javascript" charset="utf-8">
|
17
|
+
document.domain = 'boingboing.net';
|
18
|
+
</script>
|
19
|
+
|
20
|
+
|
21
|
+
<!-- Begin DoubleClick For Publishers code -->
|
22
|
+
<script type='text/javascript'>
|
23
|
+
var googletag = googletag || {};
|
24
|
+
googletag.cmd = googletag.cmd || [];
|
25
|
+
(function() {
|
26
|
+
var gads = document.createElement('script');
|
27
|
+
gads.async = true;
|
28
|
+
gads.type = 'text/javascript';
|
29
|
+
var useSSL = 'https:' == document.location.protocol;
|
30
|
+
gads.src = (useSSL ? 'https:' : 'http:') +
|
31
|
+
'//www.googletagservices.com/tag/js/gpt.js';
|
32
|
+
var node = document.getElementsByTagName('script')[0];
|
33
|
+
node.parentNode.insertBefore(gads, node);
|
34
|
+
})();
|
35
|
+
</script>
|
36
|
+
|
37
|
+
<script type='text/javascript'>
|
38
|
+
googletag.cmd.push(function() {
|
39
|
+
googletag.defineSlot('/6203160/400x300_home_footer', [[400, 267], [300, 250]], 'div-gpt-ad-1348031780431-0').addService(googletag.pubads());
|
40
|
+
googletag.defineSlot('/6203160/300x250_temp_top_sidebar', [300, 250], 'div-gpt-ad-1388426870729-0').addService(googletag.pubads());
|
41
|
+
googletag.pubads().collapseEmptyDivs();
|
42
|
+
googletag.enableServices();
|
43
|
+
});
|
44
|
+
</script>
|
45
|
+
|
46
|
+
<script type='text/javascript'>
|
47
|
+
(function() {
|
48
|
+
var useSSL = 'https:' == document.location.protocol;
|
49
|
+
var src = (useSSL ? 'https:' : 'http:') +
|
50
|
+
'//www.googletagservices.com/tag/js/gpt_mobile.js';
|
51
|
+
document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
|
52
|
+
})();
|
53
|
+
</script>
|
54
|
+
<script type='text/javascript'>
|
55
|
+
googletag.cmd.push(function() {
|
56
|
+
googletag.defineSlot('/6203160/320x50', [320, 50], 'div-gpt-ad-1356214036289-0').addService(googletag.pubads());
|
57
|
+
googletag.enableServices();
|
58
|
+
});
|
59
|
+
</script>
|
60
|
+
<!-- End DoubleClick For Publishers Code -->
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
<link rel="stylesheet" href="http://media.boingboing.net/wp-content/themes/2012/style_single.css?v=21" type="text/css" charset="utf-8" />
|
65
|
+
<!--[if lt IE 9]> <link rel="stylesheet" href="http://media.boingboing.net/wp-content/themes/2012/style_IE_single.css?v=18" type="text/css" charset="utf-8" /><![endif]-->
|
66
|
+
|
67
|
+
|
68
|
+
<meta property="og:type" content="article" />
|
69
|
+
<meta property="og:title" content="Tick, tick, tick" />
|
70
|
+
<meta property="og:description" content="No idea who made this, but it's wonderful. If you know, post in the comments, please.
|
71
|
+
|
72
|
+
|
73
|
+
Update: It's from Bees and Bombs, to which I have just subscribed." />
|
74
|
+
<meta property="og:url" content="http://boingboing.net/2014/04/13/tick-tick-tick.html" />
|
75
|
+
<meta property="og:image" content="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001.gif" />
|
76
|
+
|
77
|
+
|
78
|
+
<meta itemprop="name" content="Tick, tick, tick" />
|
79
|
+
<meta itemprop="headline" content="Tick, tick, tick" />
|
80
|
+
<meta itemprop="author" content="Cory Doctorow" />
|
81
|
+
<meta itemprop="description" content="No idea who made this, but it's wonderful. If you know, post in the comments, please.
|
82
|
+
|
83
|
+
|
84
|
+
Update: It's from Bees and Bombs, to which I have just subscribed." />
|
85
|
+
<link itemprop="url" href="http://boingboing.net/2014/04/13/tick-tick-tick.html" />
|
86
|
+
<link itemprop="thumbnailUrl" href="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001.gif" />
|
87
|
+
|
88
|
+
|
89
|
+
<meta name="twitter:card" content="summary_large_image">
|
90
|
+
<meta name="twitter:site" content="@BoingBoing">
|
91
|
+
<meta name="twitter:creator" content="@doctorow">
|
92
|
+
<meta name="twitter:title" content="Tick, tick, tick">
|
93
|
+
<meta name="twitter:description" content="No idea who made this, but it's wonderful. If you know, post in the comments, please.
|
94
|
+
|
95
|
+
|
96
|
+
Update: It's from Bees and Bombs, to which I have just subscribed.">
|
97
|
+
<meta name="twitter:image:src" content="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001.gif">
|
98
|
+
|
99
|
+
|
100
|
+
<link rel='stylesheet' id='discourse_comments-css' href='http://media.boingboing.net/wp-content/plugins/wp-discourse/css/style.css?ver=3.4.1' type='text/css' media='all' />
|
101
|
+
<link rel='stylesheet' id='kindle-style-css' href='http://media.boingboing.net/wp-content/plugins/sendtokindle/media/kindle.css?ver=3.4.1' type='text/css' media='all' />
|
102
|
+
<script type='text/javascript'>
|
103
|
+
/* <![CDATA[ */
|
104
|
+
(function k(){window.$SendToKindle&&window.$SendToKindle.Widget?$SendToKindle.Widget.init({"title":".entry-title","published":".entry-date","content":".post","exclude":".sharedaddy"}):setTimeout(k,500);})();
|
105
|
+
/* ]]> */
|
106
|
+
</script>
|
107
|
+
<script type='text/javascript' src='http://d1xnn692s7u6t6.cloudfront.net/widget.js'></script>
|
108
|
+
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://boingboing.net/xmlrpc.php?rsd" />
|
109
|
+
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://media.boingboing.net/wp-includes/wlwmanifest.xml" />
|
110
|
+
<link rel='prev' title='This Day in Blogging History: Google's adds dead-man's switch; Hyperbolic Bronnerianism; Amex can't take a joke' href='http://boingboing.net/2014/04/13/this-day-in-blogging-history-195.html' />
|
111
|
+
<link rel='next' title='TV recap: Game Of Thrones 'The Lion And The Rose' [season 4, episode 2]' href='http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html' />
|
112
|
+
<meta name="generator" content="WordPress 3.4.1" />
|
113
|
+
<link rel='canonical' href='http://boingboing.net/2014/04/13/tick-tick-tick.html' />
|
114
|
+
<link rel='shortlink' href='http://boingboing.net/?p=297258' />
|
115
|
+
<link rel='stylesheet' type='text/css' href='http://media.boingboing.net/wp-content/plugins/embedly/css/embedly.css' />
|
116
|
+
<script type="text/javascript" src="http://media.boingboing.net/wp-content/plugins/oembed-manager/oembed-html-style-scripts.js?v=1"> </script><link rel="stylesheet" type="text/css" href="http://media.boingboing.net/wp-content/plugins/oembed-manager/oembed-html-style.css?v=1" /> </head>
|
117
|
+
|
118
|
+
<body class="single single-post postid-297258 single-format-standard" itemscope='' itemtype='http://schema.org/Blog'
|
119
|
+
>
|
120
|
+
|
121
|
+
<div id="adskin"></div>
|
122
|
+
|
123
|
+
<div id="dickbar2" style="">
|
124
|
+
|
125
|
+
<div id="dickbar2-inner">
|
126
|
+
<span style="float:left">
|
127
|
+
<a href="http://boingboing.net/suggest.html">Submit <span style="mobile-hide">a link</span></a>
|
128
|
+
</span>
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
<!-- Google search box. -->
|
133
|
+
|
134
|
+
|
135
|
+
<div id="cse-search-box" class="tablet-hide">
|
136
|
+
<form action="http://www.google.com/cse">
|
137
|
+
<input name="cx" value="partner-pub-2170174688585464:d58nno-rqp8" type="hidden">
|
138
|
+
<input name="ie" value="ISO-8859-1" type="hidden">
|
139
|
+
<input name="q" id="searchInputField" size="18" class="" value="" type="text" style="background-image:url('http://media.boingboing.net/wp-content/uploads/2013/07/searchback.png')!important;background-position:right center!important;background-repeat:no-repeat!important">
|
140
|
+
<input value="" name="siteurl" type="hidden">
|
141
|
+
</form>
|
142
|
+
</div>
|
143
|
+
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en"></script>
|
144
|
+
|
145
|
+
|
146
|
+
<script>
|
147
|
+
function navdrop()
|
148
|
+
{
|
149
|
+
if (document.getElementById('drop').style.display=='none') { document.getElementById('drop').style.display='block'; }
|
150
|
+
else {document.getElementById('drop').style.display='none'}
|
151
|
+
}
|
152
|
+
</script>
|
153
|
+
|
154
|
+
<span style="float:right;margin-right:1em">
|
155
|
+
<a href="http://boingboing.net/category/feature/" style="color:#ff638c">Features</a>
|
156
|
+
<a href="http://boingboing.net/category/review/" style="color:#e761fd">Reviews</a>
|
157
|
+
<a href="http://boingboing.net/category/podcasts" style="color:#6b70ff">Podcasts</a>
|
158
|
+
<a href="http://boingboing.net/category/video/" style="color:#61f1fc">Video</a>
|
159
|
+
<a class="mobile-hide" href="http://bbs.boingboing.net/" style="color:#61fe99">Forums</a>
|
160
|
+
<a class="mobile-hide" href="javascript:void(0)" onClick="navdrop()" style="color:#80eb59">More ▾</a>
|
161
|
+
</span>
|
162
|
+
|
163
|
+
|
164
|
+
<div id="drop" style="border-left:15px solid white;border-right:15px solid white;border-bottom:15px solid white;position:absolute;top:54px;padding:0px 15px 15px 15px;right:87px;background-color:black;opacity:1;z-index:999;display:none;">
|
165
|
+
<a class="mobile-hide" href="http://shop.boingboing.net/" style="color:#fff">Shop</a>
|
166
|
+
<br><a class="mobile-hide" href="http://boingboing.net/about" style="color:#fff">About Us</a>
|
167
|
+
<br><a class="mobile-hide" href="http://boingboing.net/contact" style="color:#fff">Contact</a>
|
168
|
+
<br><a class="mobile-hide" href="mailto:inquiries@boingboing.net" style="color:#fff">Advertise</a>
|
169
|
+
<br><a class="mobile-hide" href="http://boingboing.net/privacy" style="color:#fff">Privacy</a>
|
170
|
+
<br><a class="mobile-hide" href="http://boingboing.net/tos" style="color:#fff">TOS</a>
|
171
|
+
<br><br><span style="font-size:13px;color:gray;">Follow Us</span>
|
172
|
+
<br><a href="http://facebook.com/boingboing" style="color:#fff">Facebook</a>
|
173
|
+
<br><a href="http://twitter.com/boingboing" style="color:#fff">Twitter</a>
|
174
|
+
<br><a href="http://feeds.boingboing.net/boingboing/iBag" style="color:#fff">RSS</a>
|
175
|
+
<br><a href="http://boingboing.us2.list-manage.com/subscribe?u=0e91f8e7df61da4bff2bd9b1f&id=fa324756a4" style="color:#fff">Email</a>
|
176
|
+
</div>
|
177
|
+
</div>
|
178
|
+
</div>
|
179
|
+
|
180
|
+
|
181
|
+
<h2 id="JKAnchor"><img src="http://media.boingboing.net/wp-content/themes/2012/sundries/boingboing.jpg"></h2> <!-- top anchor for j/k navigation -->
|
182
|
+
|
183
|
+
<div id="container">
|
184
|
+
|
185
|
+
|
186
|
+
<div id="mobile_includes">
|
187
|
+
<noscript id="mobile_includes_noscript">
|
188
|
+
<style type="text/css">
|
189
|
+
@media screen and (max-width:400px){
|
190
|
+
body{
|
191
|
+
overflow-x:hidden;
|
192
|
+
background:#ffffff !important;
|
193
|
+
}
|
194
|
+
#posts-loop *{
|
195
|
+
max-width:100% !important;
|
196
|
+
}
|
197
|
+
*{
|
198
|
+
max-width:320px;
|
199
|
+
}
|
200
|
+
#mobile_includes{
|
201
|
+
width:320px;
|
202
|
+
margin-left:-16px;
|
203
|
+
}
|
204
|
+
#container{
|
205
|
+
padding-top:0px;
|
206
|
+
}
|
207
|
+
#cse-search-box {
|
208
|
+
margin-right: 5px !important;
|
209
|
+
}
|
210
|
+
#dickbar {
|
211
|
+
width:310px;
|
212
|
+
}
|
213
|
+
#mobile-logo {
|
214
|
+
padding:20px 0px 10px 0px;
|
215
|
+
}
|
216
|
+
#metadataBox {
|
217
|
+
overflow-x:hidden;
|
218
|
+
}
|
219
|
+
#ad_500 {
|
220
|
+
max-height:400px;
|
221
|
+
overflow:hidden;
|
222
|
+
}
|
223
|
+
}
|
224
|
+
</style>
|
225
|
+
|
226
|
+
<!-- 320x50-Mobile-Leaderboard -->
|
227
|
+
<div id='div-gpt-ad-1356214036289-0'>
|
228
|
+
<script type='text/javascript'>
|
229
|
+
googletag.cmd.push(function() { googletag.display('div-gpt-ad-1356214036289-0')});
|
230
|
+
</script>
|
231
|
+
</div>
|
232
|
+
<!-- end 320x50-Mobile-Leaderboard -->
|
233
|
+
</noscript>
|
234
|
+
|
235
|
+
<script type="text/javascript">
|
236
|
+
function isMobile(){
|
237
|
+
return (function(a){
|
238
|
+
if(/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))){
|
239
|
+
return true;
|
240
|
+
}
|
241
|
+
else {
|
242
|
+
return false;
|
243
|
+
}
|
244
|
+
})(navigator.userAgent||navigator.vendor||window.opera);
|
245
|
+
}
|
246
|
+
|
247
|
+
if(isMobile()){
|
248
|
+
console.log('Mobile or tablet detected for mobile ad');
|
249
|
+
if($('#mobile_includes') && $('#mobile_includes_noscript')) {
|
250
|
+
console.log('Populating mobile-specific styles');
|
251
|
+
document.write($('#mobile_includes_noscript').text());
|
252
|
+
}
|
253
|
+
}
|
254
|
+
</script>
|
255
|
+
</div>
|
256
|
+
|
257
|
+
|
258
|
+
<div id="mobile-logo"><a href="http://boingboing.net"><img src="http://media.boingboing.net/wp-content/themes/2012/sundries/logo1.png"></a></div>
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
|
264
|
+
<!-- The main content area of the site -->
|
265
|
+
|
266
|
+
<div id="mainbar" style="">
|
267
|
+
|
268
|
+
<!-- Masthead and Leaderboard ad -->
|
269
|
+
<div id="masthead">
|
270
|
+
<div id="logobox" style="">
|
271
|
+
<a href="http://boingboing.net">
|
272
|
+
<img id="logo" src="http://media.boingboing.net/wp-content/themes/2012/sundries/logo_bounce2012_static.gif" name="MyImage" alt="Jill" onmouseover="document.MyImage.src='http://media.boingboing.net/wp-content/themes/2012/sundries/logo_bounce2012.gif';" onmouseout="document.MyImage.src='http://media.boingboing.net/wp-content/themes/2012/sundries/logo_bounce2012_static.gif';">
|
273
|
+
</a>
|
274
|
+
</div>
|
275
|
+
|
276
|
+
<div id="ad_leaderboard">
|
277
|
+
<!--[if !IE]> -->
|
278
|
+
<noscript id="ad_leaderboard_noscript">
|
279
|
+
<!-- <![endif]-->
|
280
|
+
<center>
|
281
|
+
<iframe src="http://boingboing.net/wp-content/themes/2012/ads/ad_leaderboard.html?v=1&fm_url=http://boingboing.net/2014/04/13/tick-tick-tick.html&fm_custom_kvs=category%3Dpost" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="100%" onload="console.log('ad_leaderboard iframe loaded');"></iframe>
|
282
|
+
</center>
|
283
|
+
<!--[if !IE]> -->
|
284
|
+
</noscript>
|
285
|
+
<!-- <![endif]-->
|
286
|
+
</div>
|
287
|
+
|
288
|
+
</div>
|
289
|
+
|
290
|
+
|
291
|
+
<!-- IF IT'S AN AD, DISCLOSE IT-->
|
292
|
+
|
293
|
+
|
294
|
+
<!-- A LARGE HEADLINE AND THE BYLINE -->
|
295
|
+
|
296
|
+
<div id="headline-297258" class="headlineBox">
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
<h1 class="bigHeadline" id="theHeadline">Tick, tick, tick</h1>
|
301
|
+
|
302
|
+
|
303
|
+
<div id="share_post_small">
|
304
|
+
|
305
|
+
<span class="emailDiv">
|
306
|
+
<a href="mailto:type%20email%20address%20here?subject=Shared%20from%20Boing Boing&body=Tick, tick, tick - http://boingboing.net/2014/04/13/tick-tick-tick.html" title="Email to a friend/colleague" target="_blank">
|
307
|
+
<img src="http://media.boingboing.net/wp-content/themes/2012/sundries/share.png" style="margin-left:-60px;">
|
308
|
+
</a>
|
309
|
+
</span>
|
310
|
+
|
311
|
+
<span class="fbDiv">
|
312
|
+
<a href="http://www.facebook.com/sharer.php?u=http://boingboing.net/2014/04/13/tick-tick-tick.html" target='_blank'>
|
313
|
+
<img src="http://media.boingboing.net/wp-content/themes/2012/sundries/share.png" style="margin-left:-42px;">
|
314
|
+
</a>
|
315
|
+
</span>
|
316
|
+
|
317
|
+
<span class="twitterDiv">
|
318
|
+
<a href="http://twitter.com/home?status=Tick%2C+tick%2C%26nbsp%3Btick: http://boingboing.net/2014/04/13/tick-tick-tick.html" target='_blank' title='Click to Tweet this page'>
|
319
|
+
<img src="http://media.boingboing.net/wp-content/themes/2012/sundries/share.png" style="margin-left:-27px;">
|
320
|
+
</a>
|
321
|
+
</span>
|
322
|
+
|
323
|
+
</div>
|
324
|
+
<p class="byline permalink"><a href="http://boingboing.net/author/cory_doctorow_1" title="Posts by Cory Doctorow" rel="author">Cory Doctorow</a> at 8:00 pm Sun, Apr 13, 2014 </p>
|
325
|
+
|
326
|
+
|
327
|
+
</div>
|
328
|
+
|
329
|
+
<!-- RIGHT HAND ADS -->
|
330
|
+
|
331
|
+
<div id="sidebar">
|
332
|
+
<div class="sidebar_item">
|
333
|
+
<!-- 300x250_temp_top_sidebar -->
|
334
|
+
<div id='div-gpt-ad-1388426870729-0' style='width:300px; height:250px;'>
|
335
|
+
<script type='text/javascript'>
|
336
|
+
googletag.cmd.push(function() { googletag.display('div-gpt-ad-1388426870729-0'); });
|
337
|
+
</script>
|
338
|
+
</div>
|
339
|
+
</div>
|
340
|
+
|
341
|
+
<div id="wrap300">
|
342
|
+
<p id="featuretitle">— FEATURED —
|
343
|
+
|
344
|
+
<div id="features" >
|
345
|
+
|
346
|
+
|
347
|
+
<div class="features-item">
|
348
|
+
|
349
|
+
<a href="http://boingboing.net/2014/04/14/a-vindication-for-the-public.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/snow1.jpg"></a>
|
350
|
+
|
351
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/14/a-vindication-for-the-public.html" style="color:#C00">THE LATEST</a></p>
|
352
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/14/a-vindication-for-the-public.html">A Vindication for the Public: Guardian and Washington Post Win Pulitzer Prize (A statement from Edward Snowden)</a>
|
353
|
+
|
354
|
+
|
355
|
+
</div>
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
<div class="features-item">
|
362
|
+
|
363
|
+
<a href="http://boingboing.net/2014/04/14/77-fun-ways-to-play-fast-movin.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/tenzi-pattern.jpg"></a>
|
364
|
+
|
365
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/14/77-fun-ways-to-play-fast-movin.html" style="color:#C00">Family</a></p>
|
366
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/14/77-fun-ways-to-play-fast-movin.html">77 fun ways to play fast-moving Tenzi dice game</a>
|
367
|
+
|
368
|
+
|
369
|
+
</div>
|
370
|
+
|
371
|
+
<div class="features-item">
|
372
|
+
|
373
|
+
<a href="http://boingboing.net/2014/04/14/diableries-stereoscopic-adven.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/Screen-Shot-2014-04-13-at-7.41.53-PM.jpg"></a>
|
374
|
+
|
375
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/14/diableries-stereoscopic-adven.html" style="color:#C00">Book Review</a></p>
|
376
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/14/diableries-stereoscopic-adven.html">Diableries: Stereoscopic Adventures in Hell (book review)</a>
|
377
|
+
|
378
|
+
|
379
|
+
</div>
|
380
|
+
|
381
|
+
<div class="features-item">
|
382
|
+
|
383
|
+
<a href="http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/gotth1.jpg"></a>
|
384
|
+
|
385
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html" style="color:#C00">Recap</a></p>
|
386
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html">TV recap: Game Of Thrones 'The Lion And The Rose' [season 4, episode 2]</a>
|
387
|
+
|
388
|
+
|
389
|
+
</div>
|
390
|
+
|
391
|
+
|
392
|
+
</div>
|
393
|
+
|
394
|
+
<div id="sidebar_adblock">
|
395
|
+
|
396
|
+
<!--[if !IE]> -->
|
397
|
+
<noscript id="adblock_noscript">
|
398
|
+
<p style="text-align:center;margin-top:0px"><small><a href="mailto:inquiries@boingboing.net">ADVERTISE AT BOING BOING!</a></small>
|
399
|
+
<!-- <![endif]-->
|
400
|
+
|
401
|
+
<div class="sidebar_item">
|
402
|
+
<iframe id="ad_squares_frame" class="ad" src="http://boingboing.net/wp-content/themes/2012/ads/ad_squares.html?v=11&fm_url=http://boingboing.net/2014/04/13/tick-tick-tick.html" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="300px" height="300px"> </iframe>
|
403
|
+
</div>
|
404
|
+
|
405
|
+
<div class="sidebar_item">
|
406
|
+
|
407
|
+
<iframe id="ad_300_frame" src="http://boingboing.net/wp-content/themes/2012/ads/ad_300.html?fm_url=http://boingboing.net/2014/04/13/tick-tick-tick.html&fm_custom_kvs=category%3Dpost&v=0" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="300px"> </iframe>
|
408
|
+
|
409
|
+
</div>
|
410
|
+
|
411
|
+
|
412
|
+
|
413
|
+
|
414
|
+
|
415
|
+
<p id="featuretitle">— COMICS —
|
416
|
+
<div id="features" >
|
417
|
+
|
418
|
+
<div class="features-item">
|
419
|
+
|
420
|
+
<a href="http://boingboing.net/2014/04/09/tom-the-dancing-bug-learning.html"><img class="sidebarThumb" src="http://media.boingboing.net/wp-content/uploads/2014/04/1183cbTHUMB-twitter-events.jpg"></a>
|
421
|
+
|
422
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/09/tom-the-dancing-bug-learning.html" style="color:#C00">Tom the Dancing Bug</a></p>
|
423
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/09/tom-the-dancing-bug-learning.html">TOM THE DANCING BUG: Learning Big News on Twitter, Through the Ages</a>
|
424
|
+
|
425
|
+
</div>
|
426
|
+
|
427
|
+
<div class="features-item">
|
428
|
+
|
429
|
+
<a href="http://boingboing.net/2014/04/08/brain-rot-hip-hop-family-tree-97.html"><img class="sidebarThumb" src="http://media.boingboing.net/wp-content/uploads/2014/04/hip-hop-strip-99-thumb.jpg"></a>
|
430
|
+
|
431
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/08/brain-rot-hip-hop-family-tree-97.html" style="color:#C00">Brain Rot</a></p>
|
432
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/08/brain-rot-hip-hop-family-tree-97.html">Brain Rot: Hip Hop Family Tree, The Infamous Style Wars Film Screening</a>
|
433
|
+
|
434
|
+
</div>
|
435
|
+
|
436
|
+
<div class="features-item">
|
437
|
+
|
438
|
+
<a href="http://boingboing.net/2014/04/02/tom-the-dancing-bug-hobby-lob.html"><img class="sidebarThumb" src="http://media.boingboing.net/wp-content/uploads/2014/04/1182cbTHUMB-news-hobby-lobby.jpg"></a>
|
439
|
+
|
440
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/02/tom-the-dancing-bug-hobby-lob.html" style="color:#C00">Tom the Dancing Bug</a></p>
|
441
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/02/tom-the-dancing-bug-hobby-lob.html">TOM THE DANCING BUG: Hobby Lobby, Inc., Changes Its Religion</a>
|
442
|
+
|
443
|
+
</div>
|
444
|
+
|
445
|
+
</div>
|
446
|
+
|
447
|
+
|
448
|
+
<p id="featuretitle">— RECENTLY —
|
449
|
+
|
450
|
+
<div id="features" >
|
451
|
+
<div class="features-item">
|
452
|
+
|
453
|
+
<a href="http://boingboing.net/2014/04/10/a-canticle-for-leibowitz-vene.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/Screen-Shot-2014-04-10-at-8.49.13-AM.png"></a>
|
454
|
+
|
455
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/10/a-canticle-for-leibowitz-vene.html" style="color:#C00">Book Review</a></p>
|
456
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/10/a-canticle-for-leibowitz-vene.html">A Canticle for Leibowitz, venerated science fiction masterpiece</a>
|
457
|
+
|
458
|
+
|
459
|
+
</div>
|
460
|
+
|
461
|
+
<div class="features-item">
|
462
|
+
|
463
|
+
<a href="http://boingboing.net/2014/04/08/the-adjacent-by-christopher-p.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/christpherpreist.jpg"></a>
|
464
|
+
|
465
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/08/the-adjacent-by-christopher-p.html" style="color:#C00">Review</a></p>
|
466
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/08/the-adjacent-by-christopher-p.html">The Adjacent, by Christopher Priest [exclusive excerpt]</a>
|
467
|
+
|
468
|
+
|
469
|
+
</div>
|
470
|
+
|
471
|
+
<div class="features-item">
|
472
|
+
|
473
|
+
<a href="http://boingboing.net/2014/04/08/the-unthinkable-blooms-on-hann.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/hanth.jpg"></a>
|
474
|
+
|
475
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/08/the-unthinkable-blooms-on-hann.html" style="color:#C00">Recap</a></p>
|
476
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/08/the-unthinkable-blooms-on-hann.html">The unthinkable blooms on Hannibal "Futomono" [s2,e6]</a>
|
477
|
+
|
478
|
+
|
479
|
+
</div>
|
480
|
+
|
481
|
+
<div class="features-item">
|
482
|
+
|
483
|
+
<a href="http://boingboing.net/2014/04/08/doubleclicks-celebrate-the-pap.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/mqdefault6.jpg"></a>
|
484
|
+
|
485
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/08/doubleclicks-celebrate-the-pap.html" style="color:#C00">Science</a></p>
|
486
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/08/doubleclicks-celebrate-the-pap.html">Doubleclicks celebrate the paperback of Scatter, Adapt, and Remember with a new song</a>
|
487
|
+
|
488
|
+
|
489
|
+
</div>
|
490
|
+
|
491
|
+
<div class="features-item">
|
492
|
+
|
493
|
+
<a href="http://boingboing.net/2014/04/07/restoring-cc-attribution-to-fl.html"><img class="sidebarThumb" style="margin-top:2px;" src="http://media.boingboing.net/wp-content/uploads/2014/04/nohotlinking63.jpg"></a>
|
494
|
+
|
495
|
+
<p style="margin:0px 0px 3px 0px;text-transform:uppercase;font-size:12px;font-weight:bold;"><a href="http://boingboing.net/2014/04/07/restoring-cc-attribution-to-fl.html" style="color:#C00">Feature</a></p>
|
496
|
+
<p style="margin: 0px;font-size:13px;line-height:1"><a href="http://boingboing.net/2014/04/07/restoring-cc-attribution-to-fl.html">Restoring CC attribution to Flickr, because Yahoo broke it</a>
|
497
|
+
|
498
|
+
|
499
|
+
</div>
|
500
|
+
|
501
|
+
|
502
|
+
</div>
|
503
|
+
|
504
|
+
<div class="sidebar_item">
|
505
|
+
|
506
|
+
<iframe id="ad_t-shirts_frame" src="http://media.boingboing.net/wp-content/themes/2012/ads/ad_t-shirts.html?v=1" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="300px" height="300px"> </iframe>
|
507
|
+
|
508
|
+
</div>
|
509
|
+
|
510
|
+
|
511
|
+
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
<div id="ad_skyscraper" style="">
|
516
|
+
<div class="sidebar_item">
|
517
|
+
<!-- FM Wide Skyscraper 1 Zone -->
|
518
|
+
<iframe src="http://boingboing.net/wp-content/themes/2012/ads/ad_skyscraper.html?fm_url=http://boingboing.net/2014/04/13/tick-tick-tick.html&fm_custom_kvs=category%3Dpost" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="160px" height="600px"> </iframe>
|
519
|
+
<!-- FM Wide Skyscraper 1 Zone -->
|
520
|
+
</div>
|
521
|
+
</div>
|
522
|
+
</div>
|
523
|
+
|
524
|
+
<p id="featuretitle">— FOLLOW US —
|
525
|
+
<p style="text-align:center;"><small>Find us on <a href="http://twitter.com/boingboing">Twitter</a>, <a href="https://plus.google.com/+BoingBoing" rel="publisher">Google+</a>, <a href="irc://irc.freenode.net/boingboing">IRC</a>, and <a href="http://facebook.com/boingboing">Facebook</a>. Subscribe to our <a href="http://feeds.boingboing.net/boingboing/iBag">RSS feed</a> or <a href="http://boingboing.us2.list-manage.com/subscribe?u=0e91f8e7df61da4bff2bd9b1f&id=fa324756a4">daily email</a>.</small>
|
526
|
+
<p>
|
527
|
+
|
528
|
+
<p id="featuretitle">— POLICIES —
|
529
|
+
<p style="text-align:center;"><small>Please read our <a href="http://boingboing.net/tos">Terms of Service</a>, <a href="http://boingboing.net/privacy">Privacy Policy</a>, and <a href="http://boingboing.net/community">Community Guidelines</a>. Except where indicated, Boing Boing is licensed under a Creative Commons License permitting <a href="http://creativecommons.org/licenses/by-nc/2.5/">non-commercial sharing with attribution</a></small>
|
530
|
+
|
531
|
+
<p>
|
532
|
+
<p id="featuretitle">— FONTS —
|
533
|
+
<p style="text-align:center;"><a href="https://typekit.com"><img src="http://media.boingboing.net/wp-content/uploads/2013/04/typekit-logo.jpg"></a>
|
534
|
+
|
535
|
+
<!--[if !IE]> -->
|
536
|
+
</noscript>
|
537
|
+
<!-- <![endif]-->
|
538
|
+
</div>
|
539
|
+
</div>
|
540
|
+
|
541
|
+
|
542
|
+
</div>
|
543
|
+
|
544
|
+
|
545
|
+
<!-- MAIN POST -->
|
546
|
+
|
547
|
+
<div id="posts-loop">
|
548
|
+
|
549
|
+
<div id="post-297258" class="post">
|
550
|
+
|
551
|
+
|
552
|
+
|
553
|
+
|
554
|
+
|
555
|
+
<!-- SHARING BUTTONS -->
|
556
|
+
<div id="sidebarPinPoint" style="height:0px;">
|
557
|
+
</div>
|
558
|
+
<div id="sidebarsticky">
|
559
|
+
<div style="" id="newShareBox">
|
560
|
+
<div class="sharebutton">
|
561
|
+
<div id="fb-root"></div>
|
562
|
+
<script>(function(d, s, id) {
|
563
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
564
|
+
if (d.getElementById(id)) return;
|
565
|
+
js = d.createElement(s); js.id = id;
|
566
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=403820626333734";
|
567
|
+
fjs.parentNode.insertBefore(js, fjs);
|
568
|
+
}(document, 'script', 'facebook-jssdk'));</script>
|
569
|
+
<div class="fb-like" data-href="http://boingboing.net/2014/04/13/tick-tick-tick.html" data-send="false" data-layout="box_count" data-width="90" data-show-faces="false"></div>
|
570
|
+
</div>
|
571
|
+
|
572
|
+
<div class="sharebutton">
|
573
|
+
<a href="https://twitter.com/share" class="twitter-share-button" data-via="BoingBoing" data-count="vertical">Tweet</a>
|
574
|
+
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
575
|
+
</div>
|
576
|
+
|
577
|
+
<div class="sharebutton">
|
578
|
+
<!-- Place this tag where you want the su badge to render -->
|
579
|
+
<su:badge layout="5"></su:badge>
|
580
|
+
|
581
|
+
<!-- Place this snippet wherever appropriate -->
|
582
|
+
<script type="text/javascript">
|
583
|
+
(function() {
|
584
|
+
var li = document.createElement('script'); li.type = 'text/javascript'; li.async = true;
|
585
|
+
li.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + '//platform.stumbleupon.com/1/widgets.js';
|
586
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(li, s);
|
587
|
+
})();
|
588
|
+
</script>
|
589
|
+
</div>
|
590
|
+
|
591
|
+
<div class="sharebutton">
|
592
|
+
<!-- Place this tag where you want the +1 button to render. -->
|
593
|
+
<div class="g-plusone" data-size="tall"></div>
|
594
|
+
|
595
|
+
<!-- Place this tag after the last +1 button tag. -->
|
596
|
+
<script type="text/javascript">
|
597
|
+
(function() {
|
598
|
+
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
599
|
+
po.src = 'https://apis.google.com/js/plusone.js';
|
600
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
601
|
+
})();
|
602
|
+
</script>
|
603
|
+
</div>
|
604
|
+
|
605
|
+
<div class="sharebutton">
|
606
|
+
<div class='kindleWidget kindleLight' style='font-family: sans-serif;'><img src="http://media.boingboing.net/wp-content/plugins/sendtokindle/media/white-15.png" /><span>Kindle</span></div> </div>
|
607
|
+
</div>
|
608
|
+
</div>
|
609
|
+
<div class="post-content sharebuttons">
|
610
|
+
|
611
|
+
<!-- CONTENT OF THE POST -->
|
612
|
+
|
613
|
+
<p>
|
614
|
+
<img src="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001-300x300.gif" original="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001.gif" mobile="http://media.boingboing.net/wp-content/uploads/2014/04/tumblr_n3wstblgoN1socbkko1_5001-300x300.gif" class="bordered"><br />
|
615
|
+
No idea who made this, but it's wonderful. If you know, post in the comments, please.
|
616
|
+
|
617
|
+
<p>
|
618
|
+
<b>Update:</b> It's from <a href="http://beesandbombs.tumblr.com/post/82429759407/this-is-a-bees-bombs-original-accept-no">Bees and Bombs</a>, to which I have just subscribed.
|
619
|
+
|
620
|
+
<!-- METADATA AND COMMENTS -->
|
621
|
+
<div id="metadataBox">
|
622
|
+
|
623
|
+
<!-- PODCAST EMBEDS/LINKS, IF APPLICABLE -->
|
624
|
+
|
625
|
+
|
626
|
+
|
627
|
+
|
628
|
+
|
629
|
+
|
630
|
+
<!-- AUTHOR INFORMATION -->
|
631
|
+
|
632
|
+
<div id="authorbox">
|
633
|
+
<p><a href="http://craphound.com/homeland/buy"> <img src="http://craphound.com/images/homelandbio.jpg" class="bordered" align="left"></a>I write books. My latest is a YA science fiction novel called <a href="http://craphound.com/homeland">Homeland</a> (it's the sequel to <a href="http://craphound.com/littlebrother">Little Brother</a>). More books: <a href="http://craphound.com/rotn">Rapture of the Nerds</a> (a novel, with Charlie Stross); <a href="http://craphound.com/walh">With a Little Help</a> (short stories); and <a href="http://craphound.com/gbbt">The Great Big Beautiful Tomorrow</a> (novella and nonfic). I <a href="https://craphound.com/?page_id=4667">speak all over the place</a> and I <a href="https://twitter.com/doctorow">tweet</a> and <a href="http://mostlysignssomeportents.tumblr.com/">tumble</a>, too. </div>
|
634
|
+
|
635
|
+
<!-- TAGS -->
|
636
|
+
|
637
|
+
<div id="tagbox">
|
638
|
+
<p>MORE: <a href="http://boingboing.net/tag/animation" rel="tag">animation</a></p>
|
639
|
+
</div>
|
640
|
+
|
641
|
+
|
642
|
+
|
643
|
+
|
644
|
+
<!-- MORE AT BOING BOING from FEATURES -->
|
645
|
+
|
646
|
+
<div id="moreatboingboing">
|
647
|
+
|
648
|
+
<h3>More at Boing Boing</h3>
|
649
|
+
|
650
|
+
|
651
|
+
|
652
|
+
<div class="moreitem">
|
653
|
+
<p><a href="http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html?utm_campaign=moreatbbmetadata&utm_medium=referral&utm_source=boingboing.net" rel="bookmark"><img class="bordered" src="http://media.boingboing.net/wp-content/uploads/2014/04/gotth1.jpg"></a>
|
654
|
+
|
655
|
+
<p><a href="http://boingboing.net/2014/04/13/tv-recap-game-of-thrones-th.html?utm_campaign=moreatbbmetadata&utm_medium=referral&utm_source=boingboing.net" rel="bookmark">TV recap: Game Of Thrones 'The Lion And The Rose' [season 4, episode 2]</a></p>
|
656
|
+
</div>
|
657
|
+
|
658
|
+
|
659
|
+
|
660
|
+
<div class="moreitem">
|
661
|
+
<p><a href="http://boingboing.net/2014/04/08/the-unthinkable-blooms-on-hann.html?utm_campaign=moreatbbmetadata&utm_medium=referral&utm_source=boingboing.net" rel="bookmark"><img class="bordered" src="http://media.boingboing.net/wp-content/uploads/2014/04/hanth.jpg"></a>
|
662
|
+
|
663
|
+
<p><a href="http://boingboing.net/2014/04/08/the-unthinkable-blooms-on-hann.html?utm_campaign=moreatbbmetadata&utm_medium=referral&utm_source=boingboing.net" rel="bookmark">The unthinkable blooms on Hannibal "Futomono" [s2,e6]</a></p>
|
664
|
+
</div>
|
665
|
+
|
666
|
+
|
667
|
+
</div>
|
668
|
+
|
669
|
+
<div id="ad_500">
|
670
|
+
<noscript id="ad_500_noscript">
|
671
|
+
<script type="text/javascript">
|
672
|
+
function convosuiteLabeling(){
|
673
|
+
console.log('convosuiteLabeling');
|
674
|
+
google_ad_500_code = "<center><iframe src='http://media.boingboing.net/wp-content/themes/2012/ads/ad_google_rect.html' width='410' height='290' scrolling='no' frameborder='no' style='margin:0;'></iframe><center>";
|
675
|
+
|
676
|
+
$('#ad_500').css('border-top', '1px solid #CCC');
|
677
|
+
$('#ad_500').css('border-bottom', '1px solid #CCC');
|
678
|
+
$('#ad_500').css('margin-bottom', '20px');
|
679
|
+
$('#ad_500').css('margin-top', '40px');
|
680
|
+
$('#ad_500_label').show();
|
681
|
+
|
682
|
+
if($('#ad_500').height() < 50){
|
683
|
+
$('#convosuite_ad').hide();
|
684
|
+
$('#google_ad_500').append(google_ad_500_code);
|
685
|
+
console.log('Appending google ad code: '+google_ad_500_code);
|
686
|
+
}
|
687
|
+
}
|
688
|
+
$(document).ready(function(){
|
689
|
+
// convosuiteLabeling();
|
690
|
+
setTimeout('convosuiteLabeling();', 3000);
|
691
|
+
});
|
692
|
+
</script>
|
693
|
+
<style type="text/css">
|
694
|
+
.fm-cs-ad {
|
695
|
+
margin:18px 0px 18px 0px !important;
|
696
|
+
max-width:514px;
|
697
|
+
}
|
698
|
+
</style>
|
699
|
+
<div id="ad_500_label" style="display:none;margin-top:-22px;text-align:center;font-family: 'proxima-nova-condensed', 'Helvetica Neue', Arial, sans-serif;color: #666;">ADVERTISEMENT</div>
|
700
|
+
<div id="convosuite_ad">
|
701
|
+
<!-- FM Convosuite 650x300 Zone -->
|
702
|
+
<script type='text/javascript' src='http://static.fmpub.net/zone/7234'></script>
|
703
|
+
<!-- FM Convosuite 650x300 Zone -->
|
704
|
+
</div>
|
705
|
+
<div id="google_ad_500"></div>
|
706
|
+
</noscript>
|
707
|
+
<script type="text/javascript">
|
708
|
+
if($('#ad_500').is(':visible')) {
|
709
|
+
console.debug('Populating desktop 500 spot with document.write');
|
710
|
+
document.write($('#ad_500_noscript').text());
|
711
|
+
}
|
712
|
+
</script>
|
713
|
+
</div>
|
714
|
+
|
715
|
+
|
716
|
+
|
717
|
+
</div>
|
718
|
+
|
719
|
+
<div id="comments-container">
|
720
|
+
|
721
|
+
<div id="comments">
|
722
|
+
|
723
|
+
<div class="respond">
|
724
|
+
<h3 class="reply-title"><a href="http://bbs.boingboing.net/t/tick-tick-tick/28470">Continue the discussion</a> at bbs.boingboing.net</h3>
|
725
|
+
<p class='more-replies'>22 replies</p>
|
726
|
+
<p>
|
727
|
+
<img alt="" src="//www.gravatar.com/avatar/bdd2b71f7e0f6b5e4e2fdf809cd8e3dc.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
728
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/ce6/573/7c77555a28/25.JPG" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
729
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/d13/c17/ebaa887f16/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
730
|
+
<img alt="" src="//www.gravatar.com/avatar/dd477586d6b8bb0b5e25838985ed24cb.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
731
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/bfe/e7a/10ea6f18f4/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
732
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/859/95b/fef8e18140/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
733
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/9c9/c8d/983343ab8b/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
734
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/dbd/003/583512792e/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
735
|
+
<img alt="" src="//www.gravatar.com/avatar/54052b273cc682b884d2f6151faf8207.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
736
|
+
<img alt="" src="//www.gravatar.com/avatar/297418cf750e0c88035cf26cb430111a.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
737
|
+
<img alt="" src="//www.gravatar.com/avatar/c1c83f628971c4bd7fc0be6e92ebdc42.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
738
|
+
<img alt="" src="//www.gravatar.com/avatar/90ab94a6731be923785e4229028c1a86.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
739
|
+
<img alt="" src="//www.gravatar.com/avatar/98bbaa880662d351e021d2f5fb5e40fe.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
740
|
+
<img alt="" src="//www.gravatar.com/avatar/b82895a8423e72e133b679d4911045a7.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
741
|
+
<img alt="" src="//www.gravatar.com/avatar/899a8a98c0788669af2ca0faba0d12d1.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
742
|
+
<img alt="" src="//www.gravatar.com/avatar/f56c317566802c0d69809e2147507d38.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
743
|
+
<img alt="" src="//scdn-discourse.r.worldssl.net/uploads/boingboing/avatars/88a/a82/211f2d102d/25.jpg" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
744
|
+
<img alt="" src="//www.gravatar.com/avatar/78d185ccd8b98d3b38f1e4a2ca88796c.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
745
|
+
<img alt="" src="//www.gravatar.com/avatar/749e54555e08d2831cdfc817bbcd99dd.png?s=25&r=pg&d=identicon" class="avatar avatar-25 photo avatar-default" height="25" width="25">
|
746
|
+
</p>
|
747
|
+
</div><!-- #respond -->
|
748
|
+
|
749
|
+
</div>
|
750
|
+
</div>
|
751
|
+
</div>
|
752
|
+
|
753
|
+
</div>
|
754
|
+
</div>
|
755
|
+
|
756
|
+
|
757
|
+
<div style="text-align:center;margin-top:25px;">
|
758
|
+
|
759
|
+
</div>
|
760
|
+
<div style="clear:both;"></div>
|
761
|
+
</div>
|
762
|
+
|
763
|
+
|
764
|
+
|
765
|
+
<p style="clear:both;">
|
766
|
+
</div>
|
767
|
+
|
768
|
+
|
769
|
+
|
770
|
+
<div id="debugger"></div>
|
771
|
+
|
772
|
+
<!-- Sitewide javascript -->
|
773
|
+
<script type="text/javascript" src="http://media.boingboing.net/wp-content/themes/2012/boingboing.js?v=7"></script>
|
774
|
+
<!-- JK Nav by Yu-Jie Lin -->
|
775
|
+
<script src="http://media.boingboing.net/wp-content/themes/2012/jquery.jknav.min.js?v=1"></script>
|
776
|
+
<!-- Infinite Scroll -->
|
777
|
+
<script type="text/javascript" src="http://media.boingboing.net/wp-content/themes/2012/infinitescroll.init.js?v=9"> </script>
|
778
|
+
|
779
|
+
<!-- Google Plus -->
|
780
|
+
<script type="text/javascript">
|
781
|
+
(function() {
|
782
|
+
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
783
|
+
po.src = 'https://apis.google.com/js/plusone.js';
|
784
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
785
|
+
})();
|
786
|
+
</script>
|
787
|
+
|
788
|
+
|
789
|
+
<!-- Disqus javascript -->
|
790
|
+
<script type="text/javascript">
|
791
|
+
var disqus_shortname = 'boingboing'; // required: replace example with your forum shortname
|
792
|
+
/* * * DON'T EDIT BELOW THIS LINE * * */
|
793
|
+
(function () {
|
794
|
+
var s = document.createElement('script'); s.async = true;
|
795
|
+
s.type = 'text/javascript';
|
796
|
+
s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
|
797
|
+
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
|
798
|
+
}());
|
799
|
+
</script>
|
800
|
+
|
801
|
+
<!-- Day We Fight Back campaign -->
|
802
|
+
<!--[if !(lte IE 8)]><!-->
|
803
|
+
<script type="text/javascript">
|
804
|
+
(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src=document.location.protocol+"//d1agz031tafz8n.cloudfront.net/thedaywefightback.js/widget.min.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})()
|
805
|
+
</script>
|
806
|
+
<!--<![endif]-->
|
807
|
+
|
808
|
+
<!-- Analytics-->
|
809
|
+
<!-- FM Tracking Pixel -->
|
810
|
+
<script type='text/javascript' src='http://static-cf.fmpub.net/site/boingboing'></script>
|
811
|
+
<!-- FM Tracking Pixel -->
|
812
|
+
|
813
|
+
<!-- Mint internal analytics include -->
|
814
|
+
<script src="http://mint.boingboing.net/?js" type="text/javascript"></script>
|
815
|
+
|
816
|
+
<!-- Google Analytics include -->
|
817
|
+
<script type="text/javascript">
|
818
|
+
|
819
|
+
var _gaq = _gaq || [];
|
820
|
+
_gaq.push(['_setAccount', 'UA-3839311-1']);
|
821
|
+
<!-- Categories -->
|
822
|
+
_gaq.push(['_trackEvent', 'Permalink View', 'Category', 'Post']);
|
823
|
+
|
824
|
+
<!-- Tags -->
|
825
|
+
_gaq.push(['_trackEvent', 'Permalink View', 'Tag', 'animation']);
|
826
|
+
|
827
|
+
_gaq.push(['_setCustomVar', 1, 'MTAuthor', 'Cory Doctorow', 3]);
|
828
|
+
_gaq.push(['_trackEvent', 'Permalink View', 'Author', 'Cory Doctorow']);
|
829
|
+
_gaq.push(['_trackPageview']);
|
830
|
+
|
831
|
+
(function() {
|
832
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
833
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
834
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
835
|
+
})();
|
836
|
+
|
837
|
+
</script>
|
838
|
+
<!-- end Google Analytics include -->
|
839
|
+
|
840
|
+
<!-- Blockmetrics include -->
|
841
|
+
<script type="text/javascript">
|
842
|
+
(function() {
|
843
|
+
function async_load(){
|
844
|
+
var protocol = ('https:' == document.location.protocol ? 'https://' : 'http://');
|
845
|
+
var s = document.createElement('script');
|
846
|
+
s.src = protocol + 'blockmetrics.com/static/adblock_detection/js/d.min.js';
|
847
|
+
var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
|
848
|
+
}
|
849
|
+
bm_website_code = 'D3D06F828B4511E2';
|
850
|
+
jQuery(document).ready(async_load);
|
851
|
+
})();
|
852
|
+
</script>
|
853
|
+
<!-- end Blockmetrics include -->
|
854
|
+
<!-- Ads -->
|
855
|
+
<div id="ads">
|
856
|
+
|
857
|
+
<!-- FM AD SKIN Zone -->
|
858
|
+
<script type='text/javascript' src='http://static-cf.fmpub.net/zone/3992'></script>
|
859
|
+
<!-- FM AD SKIN Zone -->
|
860
|
+
|
861
|
+
</div>
|
862
|
+
|
863
|
+
|
864
|
+
|
865
|
+
</body>
|
866
|
+
</html>
|
867
|
+
|
868
|
+
<div style="clear:both;"></div>
|
869
|
+
|
870
|
+
</div> <!-- Ends container DIV -->
|
871
|
+
|
872
|
+
|
873
|
+
|
874
|
+
<!-- Dynamic page generated in 0.281 seconds. -->
|
875
|
+
<!-- Cached page generated by WP-Super-Cache on 2014-04-14 16:47:33 -->
|
876
|
+
<!-- super cache -->
|