docparser 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/.travis.yml +3 -0
- data/Gemfile +9 -1
- data/README.md +11 -4
- data/Rakefile +15 -0
- data/example.rb +9 -7
- data/lib/docparser.rb +1 -0
- data/lib/docparser/document.rb +18 -11
- data/lib/docparser/output.rb +8 -8
- data/lib/docparser/output/html_output.rb +53 -47
- data/lib/docparser/output/json_output.rb +8 -3
- data/lib/docparser/output/multi_output.rb +4 -8
- data/lib/docparser/output/nil_output.rb +21 -0
- data/lib/docparser/output/screen_output.rb +2 -1
- data/lib/docparser/output/xlsx_output.rb +12 -2
- data/lib/docparser/output/yaml_output.rb +6 -1
- data/lib/docparser/parser.rb +80 -49
- data/lib/docparser/version.rb +1 -1
- data/test/lib/docparser/blackbox_test.rb +29 -0
- data/test/lib/docparser/document_test.rb +134 -0
- data/test/lib/docparser/logging_test.rb +19 -0
- data/test/lib/docparser/output/csv_output_test.rb +51 -0
- data/test/lib/docparser/output/html_output_test.rb +57 -0
- data/test/lib/docparser/output/json_output_test.rb +65 -0
- data/test/lib/docparser/output/multi_output_test.rb +80 -0
- data/test/lib/docparser/output/nil_output_test.rb +27 -0
- data/test/lib/docparser/output/screen_output_test.rb +55 -0
- data/test/lib/docparser/output/xlsx_output_test.rb +53 -0
- data/test/lib/docparser/output/yaml_output_test.rb +76 -0
- data/test/lib/docparser/output_test.rb +85 -0
- data/test/lib/docparser/parser_test.rb +197 -0
- data/test/lib/docparser/version_test.rb +11 -0
- data/test/support/hackaday/dl.rb +4 -0
- data/test/support/hackaday/file_1.html +716 -0
- data/test/support/hackaday/file_10.html +791 -0
- data/test/support/hackaday/file_11.html +787 -0
- data/test/support/hackaday/file_12.html +715 -0
- data/test/support/hackaday/file_13.html +793 -0
- data/test/support/hackaday/file_14.html +718 -0
- data/test/support/hackaday/file_15.html +707 -0
- data/test/support/hackaday/file_16.html +713 -0
- data/test/support/hackaday/file_17.html +715 -0
- data/test/support/hackaday/file_18.html +725 -0
- data/test/support/hackaday/file_19.html +715 -0
- data/test/support/hackaday/file_2.html +793 -0
- data/test/support/hackaday/file_20.html +795 -0
- data/test/support/hackaday/file_21.html +804 -0
- data/test/support/hackaday/file_22.html +722 -0
- data/test/support/hackaday/file_23.html +793 -0
- data/test/support/hackaday/file_24.html +717 -0
- data/test/support/hackaday/file_25.html +715 -0
- data/test/support/hackaday/file_26.html +717 -0
- data/test/support/hackaday/file_27.html +723 -0
- data/test/support/hackaday/file_28.html +711 -0
- data/test/support/hackaday/file_29.html +711 -0
- data/test/support/hackaday/file_3.html +794 -0
- data/test/support/hackaday/file_30.html +715 -0
- data/test/support/hackaday/file_31.html +713 -0
- data/test/support/hackaday/file_32.html +714 -0
- data/test/support/hackaday/file_33.html +716 -0
- data/test/support/hackaday/file_34.html +714 -0
- data/test/support/hackaday/file_35.html +792 -0
- data/test/support/hackaday/file_36.html +719 -0
- data/test/support/hackaday/file_37.html +712 -0
- data/test/support/hackaday/file_38.html +709 -0
- data/test/support/hackaday/file_39.html +808 -0
- data/test/support/hackaday/file_4.html +814 -0
- data/test/support/hackaday/file_40.html +801 -0
- data/test/support/hackaday/file_5.html +715 -0
- data/test/support/hackaday/file_6.html +792 -0
- data/test/support/hackaday/file_7.html +714 -0
- data/test/support/hackaday/file_8.html +717 -0
- data/test/support/hackaday/file_9.html +719 -0
- data/test/support/test_encoding.html +12 -0
- data/test/support/test_encoding2.html +12 -0
- data/test/support/test_html.html +16 -0
- data/test/support/test_xml.xml +5 -0
- data/test/test_helper.rb +14 -0
- metadata +126 -3
@@ -0,0 +1,85 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
describe DocParser::Output do
|
4
|
+
before do
|
5
|
+
Log4r::Logger['docparser'].level = Log4r::ERROR
|
6
|
+
end
|
7
|
+
after do
|
8
|
+
Log4r::Logger['docparser'].level = Log4r::INFO
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'must create a file' do
|
12
|
+
Dir.mktmpdir do |dir|
|
13
|
+
filename = File.join(dir, 'test.csv')
|
14
|
+
DocParser::Output.new(filename: filename)
|
15
|
+
File.exists?(filename).must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'must call the header callback' do
|
20
|
+
Dir.mktmpdir do |dir|
|
21
|
+
filename = File.join(dir, 'test.csv')
|
22
|
+
output = DocParser::Output.new(filename: filename)
|
23
|
+
# :nocov: #
|
24
|
+
trace = TracePoint.trace(:call) do |tp|
|
25
|
+
if tp.method_id == :header
|
26
|
+
$method_id = tp.method_id
|
27
|
+
tp.disable
|
28
|
+
end
|
29
|
+
end
|
30
|
+
# :nocov: #
|
31
|
+
trace.enable do
|
32
|
+
output.header = 'test', 'the', 'header'
|
33
|
+
end
|
34
|
+
header = output.instance_variable_get(:@header)
|
35
|
+
header.must_equal ['test', 'the', 'header']
|
36
|
+
$method_id.must_equal :header
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'must call the open_file callback' do
|
41
|
+
Dir.mktmpdir do |dir|
|
42
|
+
filename = File.join(dir, 'test.csv')
|
43
|
+
# :nocov: #
|
44
|
+
trace = TracePoint.trace(:call) do |tp|
|
45
|
+
if tp.method_id == :open_file
|
46
|
+
$method_id = tp.method_id
|
47
|
+
tp.disable
|
48
|
+
end
|
49
|
+
end
|
50
|
+
# :nocov: #
|
51
|
+
trace.enable do
|
52
|
+
DocParser::Output.new(filename: filename)
|
53
|
+
end
|
54
|
+
$method_id.must_equal :open_file
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'must call the footer callback' do
|
59
|
+
Dir.mktmpdir do |dir|
|
60
|
+
filename = File.join(dir, 'test.csv')
|
61
|
+
# :nocov: #
|
62
|
+
trace = TracePoint.trace(:call) do |tp|
|
63
|
+
if tp.method_id == :footer
|
64
|
+
$method_id = tp.method_id
|
65
|
+
tp.disable
|
66
|
+
end
|
67
|
+
end
|
68
|
+
# :nocov: #
|
69
|
+
output = DocParser::Output.new(filename: filename)
|
70
|
+
trace.enable do
|
71
|
+
output.close
|
72
|
+
end
|
73
|
+
$method_id.must_equal :footer
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should raise a NotImplementedError on write_row' do
|
78
|
+
|
79
|
+
Dir.mktmpdir do |dir|
|
80
|
+
filename = File.join(dir, 'test.csv')
|
81
|
+
output = DocParser::Output.new(filename: filename)
|
82
|
+
-> { output.write_row([]) }.must_raise(NotImplementedError)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
describe DocParser::Parser do
|
3
|
+
before do
|
4
|
+
SimpleCov.at_exit { }
|
5
|
+
end
|
6
|
+
|
7
|
+
after do
|
8
|
+
SimpleCov.at_exit do
|
9
|
+
SimpleCov.result.format!
|
10
|
+
end
|
11
|
+
Log4r::Logger['docparser'].level = Log4r::INFO
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should initialize correctly' do
|
15
|
+
parser = DocParser::Parser.new(quiet: true)
|
16
|
+
parser.must_be_instance_of DocParser::Parser
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should define a new logger' do
|
20
|
+
DocParser::Parser.new(quiet: true)
|
21
|
+
logger = Log4r::Logger['docparser::parser']
|
22
|
+
logger.wont_be_nil
|
23
|
+
logger.must_be_instance_of Log4r::Logger
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should set logger level depending on the quiet setting' do
|
27
|
+
parser = DocParser::Parser.new(quiet: true)
|
28
|
+
logger = Log4r::Logger['docparser']
|
29
|
+
old_output = logger.outputters.pop
|
30
|
+
logger.level.must_equal Log4r::ERROR
|
31
|
+
parser = DocParser::Parser.new(quiet: false)
|
32
|
+
logger.level.must_equal Log4r::INFO
|
33
|
+
parser = DocParser::Parser.new()
|
34
|
+
logger.level.must_equal Log4r::INFO
|
35
|
+
logger.outputters.push old_output
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should only process the files in range' do
|
39
|
+
files = (0..20).map { |i| "file_#{i}" }
|
40
|
+
parser = DocParser::Parser.new(quiet: true,
|
41
|
+
files: files,
|
42
|
+
range: 0...10)
|
43
|
+
parser.files.length.must_equal 10
|
44
|
+
parser.files.must_equal files[0...10]
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should set the correct number of processes' do
|
48
|
+
parser = DocParser::Parser.new(quiet: true)
|
49
|
+
default = Parallel.processor_count + 1
|
50
|
+
parser.num_processes.must_equal(default)
|
51
|
+
parser = DocParser::Parser.new(quiet: true,
|
52
|
+
num_processes: 4,
|
53
|
+
parallel: false)
|
54
|
+
parser.num_processes.must_equal(1)
|
55
|
+
parser = DocParser::Parser.new(quiet: true,
|
56
|
+
num_processes: 4,
|
57
|
+
parallel: true)
|
58
|
+
parser.num_processes.must_equal(4)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should set the correct encoding' do
|
62
|
+
parser = DocParser::Parser.new(quiet: true)
|
63
|
+
parser.encoding.must_equal 'utf-8'
|
64
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1')
|
65
|
+
parser.encoding.must_equal 'iso-8859-1'
|
66
|
+
file = Tempfile.new('foo')
|
67
|
+
file.write('<html />')
|
68
|
+
file.close
|
69
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
70
|
+
files: [file.path],
|
71
|
+
parallel: false)
|
72
|
+
parser.parse! do
|
73
|
+
$encoding = self.encoding
|
74
|
+
end
|
75
|
+
$encoding.must_equal 'iso-8859-1'
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should give an Exception if output is not supported' do
|
79
|
+
-> do
|
80
|
+
DocParser::Parser.new(quiet: true, output: 1)
|
81
|
+
end.must_raise(ArgumentError)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should support one output' do
|
85
|
+
mock_output = SimpleMock.new DocParser::NilOutput.new
|
86
|
+
mock_output.expect :close, nil
|
87
|
+
mock_output.expect :is_a?, true, [DocParser::Output]
|
88
|
+
testfile = File.join($SUPPORT_DIR, 'test_html.html')
|
89
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
90
|
+
files: [testfile],
|
91
|
+
parallel: false,
|
92
|
+
output: mock_output)
|
93
|
+
parser.parse! do
|
94
|
+
# do nothing
|
95
|
+
end
|
96
|
+
mock_output.verify.must_equal true
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should support multiple outputs' do
|
100
|
+
mock_output = SimpleMock.new DocParser::NilOutput.new
|
101
|
+
mock_output.expect :close, nil
|
102
|
+
mock_output.expect :is_a?, true, [DocParser::Output]
|
103
|
+
mock_output2 = SimpleMock.new DocParser::NilOutput.new
|
104
|
+
mock_output2.expect :close, nil
|
105
|
+
mock_output2.expect :is_a?, true, [DocParser::Output]
|
106
|
+
testfile = File.join($SUPPORT_DIR, 'test_html.html')
|
107
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
108
|
+
files: [testfile],
|
109
|
+
parallel: false,
|
110
|
+
output: [mock_output, mock_output2])
|
111
|
+
parser.parse! do
|
112
|
+
# do nothing
|
113
|
+
end
|
114
|
+
parser.outputs.length.must_equal 2
|
115
|
+
mock_output.verify.must_equal true
|
116
|
+
mock_output2.verify.must_equal true
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should write to the outputs' do
|
120
|
+
mock_output = SimpleMock.new DocParser::NilOutput.new
|
121
|
+
mock_output.expect :close, nil
|
122
|
+
mock_output.expect :is_a?, true, [DocParser::Output]
|
123
|
+
mock_output.expect :add_row, true, [['output 0']]
|
124
|
+
mock_output2 = SimpleMock.new DocParser::NilOutput.new
|
125
|
+
mock_output2.expect :close, nil
|
126
|
+
mock_output2.expect :is_a?, true, [DocParser::Output]
|
127
|
+
mock_output2.expect :add_row, true, [['output 1']]
|
128
|
+
testfile = File.join($SUPPORT_DIR, 'test_html.html')
|
129
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
130
|
+
files: [testfile],
|
131
|
+
parallel: false,
|
132
|
+
output: [mock_output, mock_output2])
|
133
|
+
parser.parse! do
|
134
|
+
add_row 'output 0', output: 0
|
135
|
+
add_row 'output 1', output: 1
|
136
|
+
end
|
137
|
+
parser.outputs.length.must_equal 2
|
138
|
+
mock_output.verify.must_equal true
|
139
|
+
mock_output2.verify.must_equal true
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should write to the outputs directly' do
|
143
|
+
mock_output = SimpleMock.new DocParser::NilOutput.new
|
144
|
+
mock_output.expect :close, nil
|
145
|
+
mock_output.expect :is_a?, true, [DocParser::Output]
|
146
|
+
mock_output.expect :add_row, true, [['output 0']]
|
147
|
+
mock_output2 = SimpleMock.new DocParser::NilOutput.new
|
148
|
+
mock_output2.expect :close, nil
|
149
|
+
mock_output2.expect :is_a?, true, [DocParser::Output]
|
150
|
+
mock_output2.expect :add_row, true, [['output 1']]
|
151
|
+
testfile = File.join($SUPPORT_DIR, 'test_html.html')
|
152
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
153
|
+
files: [testfile],
|
154
|
+
parallel: false,
|
155
|
+
output: [mock_output, mock_output2])
|
156
|
+
parser.parse! do
|
157
|
+
add_row 'output 1', output: mock_output2
|
158
|
+
add_row 'output 0', output: mock_output
|
159
|
+
end
|
160
|
+
parser.outputs.length.must_equal 2
|
161
|
+
mock_output.verify.must_equal true
|
162
|
+
mock_output2.verify.must_equal true
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
it 'should support parallel processing' do
|
167
|
+
mock_output = SimpleMock.new DocParser::NilOutput.new
|
168
|
+
mock_output.expect :close, nil
|
169
|
+
mock_output.expect :is_a?, true, [DocParser::Output]
|
170
|
+
mock_output.expect :add_row, nil, [['Test HTML']]
|
171
|
+
mock_output.expect :add_row, nil, [['Test HTML']]
|
172
|
+
testfile = File.join($SUPPORT_DIR, 'test_html.html')
|
173
|
+
DocParser::Kernel = SimpleMock.new Kernel
|
174
|
+
|
175
|
+
parser = DocParser::Parser.new(quiet: true, encoding: 'iso-8859-1',
|
176
|
+
files: [testfile, testfile],
|
177
|
+
parallel: true,
|
178
|
+
output: mock_output)
|
179
|
+
# :nocov: #
|
180
|
+
trace = TracePoint.trace(:c_call) do |tp|
|
181
|
+
if tp.method_id == :fork
|
182
|
+
$method_id = tp.method_id
|
183
|
+
tp.disable
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
trace.enable do
|
188
|
+
parser.parse! do
|
189
|
+
add_row title
|
190
|
+
end
|
191
|
+
end
|
192
|
+
# :nocov: #
|
193
|
+
$method_id.must_equal :fork
|
194
|
+
mock_output.verify.must_equal true
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
@@ -0,0 +1,716 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
3
|
+
<!--
|
4
|
+
generated 160 seconds ago
|
5
|
+
generated in 0.498 seconds
|
6
|
+
served from batcache in 0.003 seconds
|
7
|
+
expires in 140 seconds
|
8
|
+
-->
|
9
|
+
<head profile="http://gmpg.org/xfn/11">
|
10
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
11
|
+
<title>Hack a Day — Fresh hacks every day</title>
|
12
|
+
<meta name="description" content="Fresh hacks every day" />
|
13
|
+
<meta name="robots" content="noodp,noydir" />
|
14
|
+
<link rel="Shortcut Icon" href="http://s1.wp.com/wp-content/themes/vip/hackaday2/images/favicon.ico?m=1353160633g" type="image/x-icon" />
|
15
|
+
<link rel="stylesheet" href="http://s1.wp.com/wp-content/themes/vip/hackaday2/style.css?m=1363789849g" type="text/css" media="screen" />
|
16
|
+
|
17
|
+
<meta name="description" content="Fresh hacks every day" />
|
18
|
+
<meta name="keywords" content="hall of fame, fpga, nook hacks, internet hacks, marijuana hacks, network hacks, high voltage hacks, palm pre hacks, blackberry hacks, podcasts, virtual reality, drone hacks, lockpicking hacks, interviews, kindle hacks, phone hacks, weekly roundup, reviews, firefox hacks, g1 hacks" />
|
19
|
+
<script src='http://r-login.wordpress.com/remote-login.php?action=js&host=hackaday.com&id=4779443&t=1366800965&back=hackaday.com%2F' type="text/javascript"></script>
|
20
|
+
<script type="text/javascript">
|
21
|
+
/* <![CDATA[ */
|
22
|
+
if ( 'function' === typeof WPRemoteLogin ) {
|
23
|
+
document.cookie = "wordpress_test_cookie=test; path=/";
|
24
|
+
if ( document.cookie.match( /(;|^)\s*wordpress_test_cookie\=/ ) ) {
|
25
|
+
WPRemoteLogin();
|
26
|
+
}
|
27
|
+
}
|
28
|
+
/* ]]> */
|
29
|
+
</script>
|
30
|
+
<link rel="alternate" type="application/rss+xml" title="Hack a Day » Feed" href="http://feeds2.feedburner.com/hackaday/LgoM" />
|
31
|
+
<link rel="alternate" type="application/rss+xml" title="Hack a Day » Comments Feed" href="http://hackaday.com/comments/feed/" />
|
32
|
+
<script type="text/javascript">
|
33
|
+
/* <![CDATA[ */
|
34
|
+
function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){oldonload();func();}}}
|
35
|
+
/* ]]> */
|
36
|
+
</script>
|
37
|
+
<link rel="canonical" href="http://hackaday.com/" />
|
38
|
+
<link rel='stylesheet' id='all-css-0' href='http://s0.wp.com/_static/??-eJzTLy/QTc7PK0nNK9HPLdUtyClNz8wr1s/JzE4t1s9KLSlITM7WBfP0kouLdfSxKy/ILy7RTctJzCzSLy6pzEklVm1GYlFmXjqMxtBVkpGaC3RGhol+ek5+UmIOSIF9rq2hsZmZuYmxqbFlFgANUUYu' type='text/css' media='all' />
|
39
|
+
<script type='text/javascript'>
|
40
|
+
/* <![CDATA[ */
|
41
|
+
var SafeCommentsAjax = {"ajaxurl":"http:\/\/hackaday.com\/wp-admin\/admin-ajax.php"};
|
42
|
+
/* ]]> */
|
43
|
+
</script>
|
44
|
+
<script type='text/javascript' src='http://s0.wp.com/_static/??-eJyFz0sKAjEMBuALWUsZpjvxLKXGmjp92KQz6umNogtRFAJZ5Et+opeqMPup74B0lDp1aJdnW0da6V9AJQzNMbygL5kh893VQpyAyIVv0/cYzDPC8pdF4Or8UTUgvH5c5QNInp6x6jr1gJk0uT2IrqWxsJSEPX5w0Z1lfZs2ZrB2NIOxY7wBpfljQw=='></script>
|
45
|
+
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://hackadaycom.wordpress.com/xmlrpc.php?rsd" />
|
46
|
+
<link rel="shortcut icon" type="image/x-icon" href="http://0.gravatar.com/blavatar/4f3e6b6daa090af416a1ba595885efd1?s=16" sizes="16x16" />
|
47
|
+
<link rel="icon" type="image/x-icon" href="http://0.gravatar.com/blavatar/4f3e6b6daa090af416a1ba595885efd1?s=16" sizes="16x16" />
|
48
|
+
<link rel="apple-touch-icon-precomposed" href="http://1.gravatar.com/blavatar/5560f98f805877b0e332f191cb9e0af3?s=114" />
|
49
|
+
<link rel='openid.server' href='http://hackadaycom.wordpress.com/?openidserver=1' />
|
50
|
+
<link rel='openid.delegate' href='http://hackadaycom.wordpress.com/' />
|
51
|
+
<link rel="search" type="application/opensearchdescription+xml" href="http://hackaday.com/osd.xml" title="Hack a Day" />
|
52
|
+
<link rel="search" type="application/opensearchdescription+xml" href="http://wordpress.com/opensearch.xml" title="WordPress.com" />
|
53
|
+
<style>
|
54
|
+
/* <![CDATA[ */
|
55
|
+
/* Block: reblog */
|
56
|
+
|
57
|
+
.reblog-from img { margin: 0 10px 0 0; vertical-align: middle; padding: 0; border: 0; }
|
58
|
+
.reblogger-note img.avatar { float: left; padding: 0; border: 0; }
|
59
|
+
.reblogger-note-content { margin: 0 0 20px; }
|
60
|
+
.reblog-post .wpcom-enhanced-excerpt-content { border-left: 3px solid #eee; padding-left: 15px; }
|
61
|
+
.reblog-post ul.thumb-list { display: block; list-style: none; margin: 2px 0; padding: 0; clear: both; }
|
62
|
+
.reblog-post ul.thumb-list li { display: inline; margin: 0; padding: 0 1px; border: 0; }
|
63
|
+
.reblog-post ul.thumb-list li a { margin: 0; padding: 0; border: 0; }
|
64
|
+
.reblog-post ul.thumb-list li img { margin: 0; padding: 0; border: 0; }
|
65
|
+
|
66
|
+
.reblog-post .wpcom-enhanced-excerpt { clear: both; }
|
67
|
+
|
68
|
+
.reblog-post .wpcom-enhanced-excerpt address,
|
69
|
+
.reblog-post .wpcom-enhanced-excerpt li,
|
70
|
+
.reblog-post .wpcom-enhanced-excerpt h1,
|
71
|
+
.reblog-post .wpcom-enhanced-excerpt h2,
|
72
|
+
.reblog-post .wpcom-enhanced-excerpt h3,
|
73
|
+
.reblog-post .wpcom-enhanced-excerpt h4,
|
74
|
+
.reblog-post .wpcom-enhanced-excerpt h5,
|
75
|
+
.reblog-post .wpcom-enhanced-excerpt h6,
|
76
|
+
.reblog-post .wpcom-enhanced-excerpt p { font-size: 100% !important; }
|
77
|
+
|
78
|
+
.reblog-post .wpcom-enhanced-excerpt blockquote,
|
79
|
+
.reblog-post .wpcom-enhanced-excerpt pre,
|
80
|
+
.reblog-post .wpcom-enhanced-excerpt code,
|
81
|
+
.reblog-post .wpcom-enhanced-excerpt q { font-size: 98% !important; }
|
82
|
+
|
83
|
+
|
84
|
+
/* ]]> */
|
85
|
+
</style>
|
86
|
+
|
87
|
+
<script type="text/javascript">var _sf_startpt=(new Date()).getTime()</script>
|
88
|
+
<style>
|
89
|
+
.wpcom-related-posts ul li {
|
90
|
+
list-style-type: none;
|
91
|
+
display: inline-block;
|
92
|
+
}
|
93
|
+
</style>
|
94
|
+
<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>
|
95
|
+
<style type="text/css">
|
96
|
+
.recentcomments a {
|
97
|
+
display: inline !important;
|
98
|
+
padding: 0 !important;
|
99
|
+
margin: 0 !important;
|
100
|
+
}
|
101
|
+
|
102
|
+
table.recentcommentsavatartop img.avatar, table.recentcommentsavatarend img.avatar {
|
103
|
+
border: 0px;
|
104
|
+
margin: 0;
|
105
|
+
}
|
106
|
+
|
107
|
+
table.recentcommentsavatartop a, table.recentcommentsavatarend a {
|
108
|
+
border: 0px !important;
|
109
|
+
background-color: transparent !important;
|
110
|
+
}
|
111
|
+
|
112
|
+
td.recentcommentsavatarend, td.recentcommentsavatartop {
|
113
|
+
padding: 0px 0px 1px 0px;
|
114
|
+
margin: 0px;
|
115
|
+
}
|
116
|
+
|
117
|
+
td.recentcommentstextend {
|
118
|
+
border: none !important;
|
119
|
+
padding: 0px 0px 2px 10px;
|
120
|
+
}
|
121
|
+
|
122
|
+
.rtl td.recentcommentstextend {
|
123
|
+
padding: 0px 10px 2px 0px;
|
124
|
+
}
|
125
|
+
|
126
|
+
td.recentcommentstexttop {
|
127
|
+
border: none !important;
|
128
|
+
padding: 0px 0px 0px 10px;
|
129
|
+
}
|
130
|
+
|
131
|
+
.rtl td.recentcommentstexttop {
|
132
|
+
padding: 0px 10px 0px 0px;
|
133
|
+
}
|
134
|
+
</style>
|
135
|
+
<meta name="application-name" content="Hack a Day" /><meta name="msapplication-window" content="width=device-width;height=device-height" /><meta name="msapplication-tooltip" content="Fresh hacks every day" /><meta name="msapplication-task" content="name=Subscribe;action-uri=http://feeds2.feedburner.com/hackaday/LgoM;icon-uri=http://0.gravatar.com/blavatar/4f3e6b6daa090af416a1ba595885efd1?s=16" /><style id="syntaxhighlighteranchor"></style>
|
136
|
+
|
137
|
+
<script>jQuery(document).ready(function($) {
|
138
|
+
$("cswap li a").click(function() {
|
139
|
+
$("link").attr("href",$(this).attr('rel'));
|
140
|
+
return false;
|
141
|
+
});
|
142
|
+
});</script>
|
143
|
+
<meta name="google-site-verification" content="v0_F4q2HixEv6wrQCEKBEbp2Wuj0oI9ywwaN6aoV0JE" />
|
144
|
+
</head>
|
145
|
+
<body class="home blog typekit-enabled header-image content-sidebar highlander-enabled highlander-light">
|
146
|
+
|
147
|
+
<div id="fb-root"></div>
|
148
|
+
<script>(function(d, s, id) {
|
149
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
150
|
+
if (d.getElementById(id)) return;
|
151
|
+
js = d.createElement(s); js.id = id;
|
152
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
|
153
|
+
fjs.parentNode.insertBefore(js, fjs);
|
154
|
+
}(document, 'script', 'facebook-jssdk'));</script>
|
155
|
+
<div id="wrap">
|
156
|
+
<div id="header"><div class="wrap"><div id="title-area"><h1 id="title"><a href="http://hackaday.com/" title="Hack a Day">Hack a Day</a></h1><p id="description">Fresh hacks every day</p></div><!-- end #title-area --><div class="widget-area"><div = "leaderboard">
|
157
|
+
<script type="text/javascript"><!--
|
158
|
+
google_ad_client = "ca-pub-1812638130783065";
|
159
|
+
/* Hackaday, 728x90, created 4/26/08, Leaderboard */
|
160
|
+
google_ad_slot = "4036713767";
|
161
|
+
google_ad_width = 728;
|
162
|
+
google_ad_height = 90;
|
163
|
+
//-->
|
164
|
+
</script>
|
165
|
+
<script type="text/javascript"
|
166
|
+
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
167
|
+
</script>
|
168
|
+
</div>
|
169
|
+
<div id="adslice">
|
170
|
+
|
171
|
+
<script type="text/javascript"><!--
|
172
|
+
google_ad_client = "pub-1812638130783065";
|
173
|
+
/* Hackaday, 728x15, created 4/26/08, AdSlice */
|
174
|
+
google_ad_slot = "0246324944";
|
175
|
+
google_ad_width = 728;
|
176
|
+
google_ad_height = 15;
|
177
|
+
//-->
|
178
|
+
</script>
|
179
|
+
|
180
|
+
<script type="text/javascript"
|
181
|
+
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
182
|
+
</script>
|
183
|
+
|
184
|
+
</div></div><!-- end .widget-area --></div><!-- end .wrap --></div><!--end #header--><div id="nav"><div class="wrap"><ul id="menu-main" class="menu menu-primary superfish"><li id="menu-item-90201" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-90201"><a href="http://www.hackaday.com">Home</a></li>
|
185
|
+
<li id="menu-item-77211" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-77211"><a href="http://hackaday.com/contact-hack-a-day/">Submit a tip</a></li>
|
186
|
+
<li id="menu-item-90210" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-90210"><a href="http://forums.hackaday.com">forums</a></li>
|
187
|
+
<li id="menu-item-94591" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-94591"><a href="http://hackaday.com/hackaday-staff/">Hackaday Staff</a></li>
|
188
|
+
<li class="right search">
|
189
|
+
<form method="get" class="searchform" action="http://hackaday.com/" >
|
190
|
+
|
191
|
+
<input type="text" value="Search this website …" name="s" class="s" onfocus="if (this.value == 'Search this website …') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search this website …';}" />
|
192
|
+
<input type="submit" class="searchsubmit" value="Search" />
|
193
|
+
</form>
|
194
|
+
</li></ul></div><!-- end .wrap --></div><div id="inner"><div class="wrap"> <div id="content-sidebar-wrap">
|
195
|
+
<div id="content" class="hfeed">
|
196
|
+
<div class="post-97721 post type-post status-publish format-standard hentry category-green-hacks tag-bicycle tag-current tag-generator tag-induction tag-relay">
|
197
|
+
|
198
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/" title="Rattle generator is a new type of dynamo for a bicycle" rel="bookmark">Rattle generator is a new type of dynamo for a bicycle</a></h2>
|
199
|
+
|
200
|
+
<div class="post-info"><span class="date published time" title="2013-04-23T14:01:10+00:00">April 23, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/#comments">41 Comments</a></span> </div> <div class="entry-content">
|
201
|
+
<p><img class="aligncenter size-large wp-image-97722" alt="rattle-generator-bicycle-spokes" src="http://hackadaycom.files.wordpress.com/2013/04/rattle-generator-bicycle-spokes.jpg?w=580&h=394" width="580" height="394" /></p>
|
202
|
+
<p>This project is in one of our favorite categories; the kind where asking “why?” is the wrong question. [Berto A.] built the device after observing some power generation by placing a large magnet next to a mechanical relay coil and quickly clicking the relay’s lever. From this humble beginning he built up <a href="http://www.youtube.com/watch?v=QwbCTU6-8jQ">the RattleGen, a bicycle spoke driven generator</a>.</p>
|
203
|
+
<p>To get the most power possible he searched around for a massive relay and found one which was originally meant for telephone exchanges. He cut the case open and strapped a big bar magnet to the side of the coil. Next he fabricated an arm which will press against the relay’s lever. To that he added a small wheel which is pressed each time a spoke from the bicycle passes by it. This repeated clicking of the relay lever generates a current (and a rattling sound) that is harvested by the joule thief circuit built on some protoboard. An LED is illuminated, with excess current stored in the capacitor bank. Don’t miss the build and demonstration video after the break.</p>
|
204
|
+
<p> <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/#more-97721" class="more-link">[Read more...]</a></p>
|
205
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
206
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/green-hacks/" title="View all posts in green hacks" rel="category tag">green hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/bicycle/" rel="tag">bicycle</a>, <a href="http://hackaday.com/tag/current/" rel="tag">current</a>, <a href="http://hackaday.com/tag/generator/" rel="tag">generator</a>, <a href="http://hackaday.com/tag/induction/" rel="tag">induction</a>, <a href="http://hackaday.com/tag/relay/" rel="tag">relay</a></span> </div>
|
207
|
+
</div><!-- end .postclass -->
|
208
|
+
<div class="post-97676 post type-post status-publish format-standard hentry category-clock-hacks tag-3d-printed tag-efm32 tag-usb tag-wristwatch">
|
209
|
+
|
210
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/23/otm-02-is-a-3d-printed-wristwatch/" title="OTM-02 is a 3D printed wristwatch" rel="bookmark">OTM-02 is a 3D printed wristwatch</a></h2>
|
211
|
+
|
212
|
+
<div class="post-info"><span class="date published time" title="2013-04-23T12:01:57+00:00">April 23, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/23/otm-02-is-a-3d-printed-wristwatch/#comments">11 Comments</a></span> </div> <div class="entry-content">
|
213
|
+
<p><img class="aligncenter size-large wp-image-97677" alt="3d-printed-wristwatch" src="http://hackadaycom.files.wordpress.com/2013/04/3d-printed-wristwatch.jpg?w=580&h=435" width="580" height="435" /></p>
|
214
|
+
<p>We love looking at roll-your-own wristwatch projects. Getting a project small enough to carry around on your wrist is a real challenge. But we think <a href="http://forum.energymicro.com/topic/582-otm-02-open-source-time-machine-2/">the OTM-02 wristwatch</a> really hit the form factor right on the mark.</p>
|
215
|
+
<p>OTM stands for Open source Time Machine. It’s the work of [Hairy Kiwi] and he managed to bring the guts of the watch in at a thickness between 6.5 and 7mm. That includes the LCD, PCB, piezo diaphragm, and the battery. The PCB itself is a four-layer board built on 1mm thick substrate. It’s running an EFM32 (ARM) microcontroller which comes with hardware USB support. The little door sitting open on the side of the 3D printed enclosure provides access to the micro USB connector which can be used to charge the 150 mAh battery inside. That may not sound like much juice, but if you set the display to show minutes only [Hairy] calculates a battery life approaching 175 days. If you just have to have the seconds displayed you can expect about two weeks between charges.</p>
|
216
|
+
<p>Like the name says, <a href="https://github.com/hairykiwi/OTM-02">this project is Open Source</a>.</p>
|
217
|
+
<p>[Thanks Liam]</p>
|
218
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
219
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/clock-hacks/" title="View all posts in clock hacks" rel="category tag">clock hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/3d-printed/" rel="tag">3d printed</a>, <a href="http://hackaday.com/tag/efm32/" rel="tag">efm32</a>, <a href="http://hackaday.com/tag/usb/" rel="tag">usb</a>, <a href="http://hackaday.com/tag/wristwatch/" rel="tag">wristwatch</a></span> </div>
|
220
|
+
</div><!-- end .postclass -->
|
221
|
+
<div class="post-97717 post type-post status-publish format-standard hentry category-ask-hackaday">
|
222
|
+
|
223
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/23/what-are-the-best-hacking-documentaries/" title="What are the best hacking documentaries?" rel="bookmark">What are the best hacking documentaries?</a></h2>
|
224
|
+
|
225
|
+
<div class="post-info"><span class="date published time" title="2013-04-23T06:15:09+00:00">April 23, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/calebkraft/" class="fn n" title="Caleb Kraft" rel="author">Caleb Kraft</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/23/what-are-the-best-hacking-documentaries/#comments">72 Comments</a></span> </div> <div class="entry-content">
|
226
|
+
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='470' height='295' src='http://www.youtube.com/embed/zzMpUtCyZGM?version=3&rel=1&fs=1&showsearch=0&showinfo=1&iv_load_policy=1&wmode=transparent' frameborder='0'></iframe></span></p>
|
227
|
+
<p>Continuing with our series of best and worst portrayals of hacking, we’re gathering our resources to bring you the top 10 Hacking Documentaries. Again, we feel the strongest resource is the hacking community, so lets hear what you think should qualify. While it would be fantastic to only have documentaries, if there is a hollywood movie that you feel fits, go ahead and let us know. If you’re up for a challenge, find us something dealing with hardware hacking instead of computers/phones!</p>
|
228
|
+
<p>Just for reference, here were the<a href="http://www.youtube.com/watch?v=Jb5ygQZVqgw"> top 10 worst portrayals of hacking in movies</a> as well as <a href="http://www.youtube.com/watch?v=EMCs8HSWoyQ">part 2</a>. What you see above were the top 10 best, though admittedly I screwed up #4.</p>
|
229
|
+
<p> </p>
|
230
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
231
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/ask-hackaday/" title="View all posts in Ask Hackaday" rel="category tag">Ask Hackaday</a></span> </div>
|
232
|
+
</div><!-- end .postclass -->
|
233
|
+
<div align="center">
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
<script type="text/javascript"><!--
|
238
|
+
|
239
|
+
google_ad_client = "ca-pub-1812638130783065";
|
240
|
+
|
241
|
+
/* Hackaday, 300x250, created 4/26/08, MedRect main column */
|
242
|
+
|
243
|
+
google_ad_slot = "3449215672";
|
244
|
+
|
245
|
+
google_ad_width = 300;
|
246
|
+
|
247
|
+
google_ad_height = 250;
|
248
|
+
|
249
|
+
//-->
|
250
|
+
|
251
|
+
</script>
|
252
|
+
|
253
|
+
<script type="text/javascript"
|
254
|
+
|
255
|
+
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
256
|
+
|
257
|
+
</script>
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
</div> <div class="post-97680 post type-post status-publish format-standard hentry category-digital-audio-hacks tag-console tag-radio tag-router tag-tube tag-wifi">
|
262
|
+
|
263
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/23/console-radio-given-new-life-with-a-wifi-router-retrofit/" title="Console radio given new life with a WiFi router retrofit" rel="bookmark">Console radio given new life with a WiFi router retrofit</a></h2>
|
264
|
+
|
265
|
+
<div class="post-info"><span class="date published time" title="2013-04-23T06:01:14+00:00">April 23, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/23/console-radio-given-new-life-with-a-wifi-router-retrofit/#comments">19 Comments</a></span> </div> <div class="entry-content">
|
266
|
+
<p><img class="aligncenter size-large wp-image-97681" alt="tube-radio-wifi-router-retrofit" src="http://hackadaycom.files.wordpress.com/2013/04/tube-radio-wifi-router-retrofit.png?w=580&h=267" width="580" height="267" /></p>
|
267
|
+
<p>[Craig] did a great job of restoring the case of his antique console radio. But he wanted to bring the guts up to modern standards. The fix ended up being rather easy when it comes to hardware. <a href="http://www.craigandheather.net/celeinternetradio2.html">He based his internet radio retrofit around a wireless router</a>.</p>
|
268
|
+
<p>We laughed when we heard that he removed about eighty pounds of original electronics from this beast. He then cut a piece of MDF to serve as a mounting platform for the replacement hardware. The WiFi router takes care of audio playback from several sources and offers him the ability to control the stereo from a smart phone or a computer. It has a USB port to which he connected a hub to make room for the USB sound card and a thumb drive which holds his music library. The black box in the upper right is an amp which feeds the NHT stereo speakers housed in the lower half of the cabinet.</p>
|
269
|
+
<p>It doesn’t make use of the original knobs like <a href="http://hackaday.com/2013/04/16/tube-radio-husk-gets-a-web-radio-transplant/">the recent tube-amp conversion</a> we looked at. But [Craig] did add some LEDs which illuminate the dial to help keep that stock look.</p>
|
270
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
271
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/digital-audio-hacks/" title="View all posts in digital audio hacks" rel="category tag">digital audio hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/console/" rel="tag">console</a>, <a href="http://hackaday.com/tag/radio/" rel="tag">radio</a>, <a href="http://hackaday.com/tag/router/" rel="tag">router</a>, <a href="http://hackaday.com/tag/tube/" rel="tag">tube</a>, <a href="http://hackaday.com/tag/wifi/" rel="tag">wifi</a></span> </div>
|
272
|
+
</div><!-- end .postclass -->
|
273
|
+
<div class="post-97708 post type-post status-publish format-standard hentry category-clock-hacks tag-aerospace tag-aircraft tag-airplane tag-clock-source tag-rubidium">
|
274
|
+
|
275
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/22/20-pounds-and-a-gut-feeling-yields-a-configurable-rubidium-atomic-clock-source/" title="20 pounds and a gut feeling yields a configurable Rubidium atomic clock source" rel="bookmark">20 pounds and a gut feeling yields a configurable Rubidium atomic clock source</a></h2>
|
276
|
+
|
277
|
+
<div class="post-info"><span class="date published time" title="2013-04-22T14:01:45+00:00">April 22, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/22/20-pounds-and-a-gut-feeling-yields-a-configurable-rubidium-atomic-clock-source/#comments">48 Comments</a></span> </div> <div class="entry-content">
|
278
|
+
<p><img class="aligncenter size-large wp-image-97709" alt="rubidium-source-for-twenty-pounds" src="http://hackadaycom.files.wordpress.com/2013/04/rubidium-source-for-twenty-pounds.jpg?w=580&h=435" width="580" height="435" /></p>
|
279
|
+
<p>So you see an image like this and the description “Aircraft stable oscillator” on an eBay listing for twenty pounds (about thirty bucks), what do you do? If you’re [Alecjw] you buy the thing and <a href="http://blog.m0tei.co.uk/post/2013/04/20/Mystery-Aircraft-Parts-and-Atomic-Clocks">crack it open to find an atomic clock source inside</a>. But he really went the distance with this one and figured out how to reconfigure the source from the way it was set up in the factory.</p>
|
280
|
+
<p>First off, the fact that it’s made for the aerospace industry means that the craftsmanship on it is simply fantastic. The enclosure is machined aluminum and all of the components are glued or otherwise attached to the boards to help them stand up to the high-vibrations often experienced on a plane. After quite a bit of disassembly [Alec] gets down to a black box which is labeled “Rubidium Frequency Standard”… jackpot! He had been hoping for a 10 MHz signal to use with his test equipment but when he hooked it up the source was putting out 800 kHz. With a bit more investigation he figured out how to reconfigure the support electronics to get that 10 Mhz source. We think you’re going to love reading about how he used a test crystal during the reconfiguration step.</p>
|
281
|
+
<p>Once he knew what he had he returned to the eBay seller and cleared out the rest of his stock.</p>
|
282
|
+
<p>[Thanks DIY DSP]</p>
|
283
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
284
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/clock-hacks/" title="View all posts in clock hacks" rel="category tag">clock hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/aerospace/" rel="tag">aerospace</a>, <a href="http://hackaday.com/tag/aircraft/" rel="tag">aircraft</a>, <a href="http://hackaday.com/tag/airplane/" rel="tag">airplane</a>, <a href="http://hackaday.com/tag/clock-source/" rel="tag">clock source</a>, <a href="http://hackaday.com/tag/rubidium/" rel="tag">rubidium</a></span> </div>
|
285
|
+
</div><!-- end .postclass -->
|
286
|
+
<div class="post-97703 post type-post status-publish format-standard hentry category-video-hacks tag-displayport tag-ipad tag-may-be tag-retina-display">
|
287
|
+
|
288
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/22/connect-a-retina-display-to-a-regular-computer/" title="Connect a Retina display to a regular computer" rel="bookmark">Connect a Retina display to a regular computer</a></h2>
|
289
|
+
|
290
|
+
<div class="post-info"><span class="date published time" title="2013-04-22T12:01:21+00:00">April 22, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/22/connect-a-retina-display-to-a-regular-computer/#comments">77 Comments</a></span> </div> <div class="entry-content">
|
291
|
+
<p><img class="aligncenter size-large wp-image-97704" alt="retina-display-as-auxiliary-pc-display" src="http://hackadaycom.files.wordpress.com/2013/04/retina-display-as-auxiliary-pc-display.jpg?w=580&h=386" width="580" height="386" /></p>
|
292
|
+
<p>You don’t have to search very long before you find someone raving about the Retina display used in Apple iPads. We’re not going to disagree. These 9.7″ panels pack in a whopping 2048×1536 resolution and the color is fantastic. But we were surprised to hear you can get one of these for a meager $55. That’s how [Andrzej] sourced the part when he set out to <a href="http://emerythacks.blogspot.com/2013/04/connecting-ipad-retina-lcd-to-pc.html">connect a Retina display to a regular PC</a>.</p>
|
293
|
+
<p>It turns out this isn’t all that hard. The display uses the eDisplayPort protocol. This is an extension of <a href="http://en.wikipedia.org/wiki/DisplayPort">DisplayPort</a> which is an alternative to LVDS that is gaining a foothold in the industry. An external DisplayPort adapter can already be found on higher-end laptops, which means this should be a snap to use as an external display if the signals can be routed correctly.</p>
|
294
|
+
<p>To do this, [Andrzej] figured out how to order the PCB connector for the panel’s ribbon cable. He then etched and populated his own board which serves as an adapter for a DisplayPort cable. It even powers the panel, but an external 20V supply is necessary for the backlight.</p>
|
295
|
+
<p>[Thanks Adam]</p>
|
296
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
297
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/video-hacks/" title="View all posts in video hacks" rel="category tag">video hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/displayport/" rel="tag">displayport</a>, <a href="http://hackaday.com/tag/ipad/" rel="tag">ipad</a>, <a href="http://hackaday.com/tag/may-be/" rel="tag">may be</a>, <a href="http://hackaday.com/tag/retina-display/" rel="tag">retina display</a></span> </div>
|
298
|
+
</div><!-- end .postclass -->
|
299
|
+
<div class="post-97669 post type-post status-publish format-standard hentry category-musical-hacks tag-bells tag-midi tag-solenoid tag-tubular-bells">
|
300
|
+
|
301
|
+
<h2 class="entry-title"><a href="http://hackaday.com/2013/04/22/automatic-tubular-bells-given-a-midi-interface-too/" title="Automatic tubular bells given a MIDI interface too" rel="bookmark">Automatic tubular bells given a MIDI interface too</a></h2>
|
302
|
+
|
303
|
+
<div class="post-info"><span class="date published time" title="2013-04-22T06:01:52+00:00">April 22, 2013</span> By <span class="author vcard"><span class="fn"><a href="http://hackaday.com/author/mikehackaday/" class="fn n" title="Mike Szczys" rel="author">Mike Szczys</a></span></span> <span class="post-comments"><a href="http://hackaday.com/2013/04/22/automatic-tubular-bells-given-a-midi-interface-too/#comments">16 Comments</a></span> </div> <div class="entry-content">
|
304
|
+
<p><img class="aligncenter size-large wp-image-97670" alt="automatic-tubular-bells" src="http://hackadaycom.files.wordpress.com/2013/04/automatic-tubular-bells.png?w=580&h=430" width="580" height="430" /></p>
|
305
|
+
<p>We’ve got to say it… these tubular bells sound awful! They don’t really have a tight pitch center so they sound <em>really</em> out of tune to us. But we think that’s the failing of the instrument itself and not the work which [Tolaemon] did to <a href="http://www.tolaemon.com/etb/">automate the instrument</a>.</p>
|
306
|
+
<p>There are three main parts to his project. The first, which is shown above, adds a hammer for each bell. The hammers are hinged, with one side being pulled by a solenoid in order to strike the bell. The second part of the hack also uses solenoids, dampening the bell’s ability to ring by pressing a felt pad up against the bottom of the tube. The final portion of the project brings it all home by adding MIDI control to the hardware.</p>
|
307
|
+
<p>The clip after the break gives a good overview of the different features including some preprogrammed playback as well as direct control of the instrument using an electric keyboard. This reminds us of <a href="http://hackaday.com/2010/12/02/make-your-own-solenoids-then-play-the-xylophone">that scratch-built solenoid xylophone</a>.</p>
|
308
|
+
<p> <a href="http://hackaday.com/2013/04/22/automatic-tubular-bells-given-a-midi-interface-too/#more-97669" class="more-link">[Read more...]</a></p>
|
309
|
+
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
|
310
|
+
<div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/musical-hacks/" title="View all posts in musical hacks" rel="category tag">musical hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/bells/" rel="tag">bells</a>, <a href="http://hackaday.com/tag/midi/" rel="tag">midi</a>, <a href="http://hackaday.com/tag/solenoid/" rel="tag">solenoid</a>, <a href="http://hackaday.com/tag/tubular-bells/" rel="tag">tubular bells</a></span> </div>
|
311
|
+
</div><!-- end .postclass -->
|
312
|
+
<div class="navigation"><div class="alignleft"><a href="http://hackaday.com/page/2/" >« Older Posts</a></div></div><!-- end .navigation --> </div><!-- end #content -->
|
313
|
+
<div id="sidebar" class="sidebar widget-area">
|
314
|
+
<div id=tl_ad>
|
315
|
+
<script type="text/javascript"><!--
|
316
|
+
google_ad_client = "ca-pub-1812638130783065";
|
317
|
+
/* Hackaday, 300x250, created 4/26/08, MedRect sidebar */
|
318
|
+
google_ad_slot = "7800245928";
|
319
|
+
google_ad_width = 300;
|
320
|
+
google_ad_height = 250;
|
321
|
+
//-->
|
322
|
+
</script>
|
323
|
+
<script type="text/javascript"
|
324
|
+
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
325
|
+
</script>
|
326
|
+
|
327
|
+
</div>
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
|
334
|
+
<div class="widget">
|
335
|
+
<h4>Never Miss a Hack</h4>
|
336
|
+
<div class="textwidget">
|
337
|
+
|
338
|
+
<!-- Place this tag where you want the badge to render. -->
|
339
|
+
<div class="g-plus" data-width= "280" data-href="https://plus.google.com/114843073658390316652" data-rel="publisher" data-theme="dark"></div>
|
340
|
+
<!-- Place this tag after the last badge tag. -->
|
341
|
+
<script type="text/javascript">
|
342
|
+
(function() {
|
343
|
+
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
344
|
+
po.src = 'https://apis.google.com/js/plusone.js';
|
345
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
346
|
+
})();
|
347
|
+
</script>
|
348
|
+
|
349
|
+
<div class="fb-like" data-href="https://www.facebook.com/pages/Hack-a-Day/136115233068429?ref=hl" data-send="true" data-width="280" data-show-faces="true" data-colorscheme="dark"></div>
|
350
|
+
|
351
|
+
<a href="https://twitter.com/hackaday" class="twitter-follow-button" data-show-count="true" data-lang="en" data-size="large">Follow @twitter</a>
|
352
|
+
<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>
|
353
|
+
|
354
|
+
<a href="http://feeds2.feedburner.com/hackaday/LgoM" target="_blank"><img src="http://hackadaycom.files.wordpress.com/2012/11/orange.png" border="0"/></a>
|
355
|
+
<div class="clear"> </div>
|
356
|
+
<!-- Begin MailChimp Signup Form -->
|
357
|
+
<link href="http://cdn-images.mailchimp.com/embedcode/slim-081711.css" rel="stylesheet" type="text/css">
|
358
|
+
|
359
|
+
<div id="mc_embed_signup">
|
360
|
+
<form action="http://mahalo.us5.list-manage.com/subscribe/post?u=126b2ab712043075d9bd7210e&id=cb1aa8bd16" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
|
361
|
+
<label for="mce-EMAIL">Subscribe to our mailing list for sneak previews and behind the scenes info</label>
|
362
|
+
<input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required>
|
363
|
+
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
|
364
|
+
</form>
|
365
|
+
</div>
|
366
|
+
|
367
|
+
<!--End mc_embed_signup-->
|
368
|
+
</div>
|
369
|
+
</div>
|
370
|
+
|
371
|
+
<div id="categories-2" class="widget widget_categories"><div class="widget-wrap"><h4 class="widgettitle">Categories</h4>
|
372
|
+
<select name='cat' id='cat' class='postform' >
|
373
|
+
<option value='-1'>Select Category</option>
|
374
|
+
<option class="level-0" value="114554125">3d Printer hacks (116)</option>
|
375
|
+
<option class="level-0" value="18020710">android hacks (240)</option>
|
376
|
+
<option class="level-0" value="18020705">arduino hacks (1029)</option>
|
377
|
+
<option class="level-0" value="27981650">ARM (51)</option>
|
378
|
+
<option class="level-0" value="33199679">Ask Hackaday (29)</option>
|
379
|
+
<option class="level-0" value="64298109">ATtiny hacks (45)</option>
|
380
|
+
<option class="level-0" value="25122024">beer hacks (63)</option>
|
381
|
+
<option class="level-0" value="12115263">blackberry hacks (8)</option>
|
382
|
+
<option class="level-0" value="10969031">cellphones hacks (337)</option>
|
383
|
+
<option class="level-0" value="35745764">chemistry hacks (102)</option>
|
384
|
+
<option class="level-0" value="24483654">classic hacks (852)</option>
|
385
|
+
<option class="level-0" value="31677810">clock hacks (189)</option>
|
386
|
+
<option class="level-0" value="18755632">cnc hacks (341)</option>
|
387
|
+
<option class="level-0" value="568165">computer hacks (390)</option>
|
388
|
+
<option class="level-0" value="78428">cons (192)</option>
|
389
|
+
<option class="level-0" value="5738">contests (136)</option>
|
390
|
+
<option class="level-0" value="3923181">cooking hacks (72)</option>
|
391
|
+
<option class="level-0" value="10969032">digital audio hacks (422)</option>
|
392
|
+
<option class="level-0" value="10969033">digital cameras hacks (415)</option>
|
393
|
+
<option class="level-0" value="10969034">downloads hacks (101)</option>
|
394
|
+
<option class="level-0" value="107827385">drone hacks (10)</option>
|
395
|
+
<option class="level-0" value="63176382">Engine Hacks (31)</option>
|
396
|
+
<option class="level-0" value="35890">Featured (72)</option>
|
397
|
+
<option class="level-0" value="551890">firefox hacks (23)</option>
|
398
|
+
<option class="level-0" value="53446541">FPGA (1)</option>
|
399
|
+
<option class="level-0" value="18020562">g1 hacks (26)</option>
|
400
|
+
<option class="level-0" value="320557">google hacks (44)</option>
|
401
|
+
<option class="level-0" value="10969036">gps hacks (108)</option>
|
402
|
+
<option class="level-0" value="24535490">green hacks (152)</option>
|
403
|
+
<option class="level-0" value="27311668">Hackaday links (146)</option>
|
404
|
+
<option class="level-0" value="21755374">Hackerspaces (93)</option>
|
405
|
+
<option class="level-0" value="6310599">HackIt (101)</option>
|
406
|
+
<option class="level-0" value="10969037">handhelds hacks (189)</option>
|
407
|
+
<option class="level-0" value="79">hardware (249)</option>
|
408
|
+
<option class="level-0" value="144422905">High Voltage Hacks (5)</option>
|
409
|
+
<option class="level-0" value="66307084">Holiday Hacks (93)</option>
|
410
|
+
<option class="level-0" value="10969038">home entertainment hacks (516)</option>
|
411
|
+
<option class="level-0" value="5660882">home hacks (705)</option>
|
412
|
+
<option class="level-0" value="2708">how-to (135)</option>
|
413
|
+
<option class="level-0" value="908478">internet hacks (2)</option>
|
414
|
+
<option class="level-0" value="831">Interviews (13)</option>
|
415
|
+
<option class="level-0" value="1416772">iphone hacks (176)</option>
|
416
|
+
<option class="level-0" value="1275163">ipod hacks (144)</option>
|
417
|
+
<option class="level-0" value="344761">kickstarter (29)</option>
|
418
|
+
<option class="level-0" value="4157506">Kindle hacks (15)</option>
|
419
|
+
<option class="level-0" value="46717088">Kinect hacks (81)</option>
|
420
|
+
<option class="level-0" value="10969048">laptops hacks (111)</option>
|
421
|
+
<option class="level-0" value="10969055">laser hacks (167)</option>
|
422
|
+
<option class="level-0" value="18020716">led hacks (695)</option>
|
423
|
+
<option class="level-0" value="10626">lifehacks (54)</option>
|
424
|
+
<option class="level-0" value="729674">linux hacks (129)</option>
|
425
|
+
<option class="level-0" value="20732807">lockpicking hacks (11)</option>
|
426
|
+
<option class="level-0" value="10969060">macs hacks (135)</option>
|
427
|
+
<option class="level-0" value="144395979">Marijuana Hacks (2)</option>
|
428
|
+
<option class="level-0" value="11284667">Medical hacks (102)</option>
|
429
|
+
<option class="level-0" value="139916">Microcontrollers (512)</option>
|
430
|
+
<option class="level-0" value="5611793">misc hacks (1747)</option>
|
431
|
+
<option class="level-0" value="18020730">multitouch hacks (89)</option>
|
432
|
+
<option class="level-0" value="22652725">musical hacks (290)</option>
|
433
|
+
<option class="level-0" value="18020722">netbook hacks (50)</option>
|
434
|
+
<option class="level-0" value="6166512">Network Hacks (4)</option>
|
435
|
+
<option class="level-0" value="103">news (1091)</option>
|
436
|
+
<option class="level-0" value="1861880">nintendo ds hacks (34)</option>
|
437
|
+
<option class="level-0" value="114555425">nintendo gameboy hacks (90)</option>
|
438
|
+
<option class="level-0" value="18020685">nintendo hacks (261)</option>
|
439
|
+
<option class="level-0" value="4992726">nintendo wii hacks (78)</option>
|
440
|
+
<option class="level-0" value="118011206">Nook Hacks (1)</option>
|
441
|
+
<option class="level-0" value="114556430">palm pre hacks (6)</option>
|
442
|
+
<option class="level-0" value="245123">parts (72)</option>
|
443
|
+
<option class="level-0" value="10969081">peripherals hacks (648)</option>
|
444
|
+
<option class="level-0" value="16325149">phone hacks (17)</option>
|
445
|
+
<option class="level-0" value="10969088">playstation hacks (120)</option>
|
446
|
+
<option class="level-0" value="2060">podcasts (8)</option>
|
447
|
+
<option class="level-0" value="10969096">portable audio hacks (66)</option>
|
448
|
+
<option class="level-0" value="10969099">portable video hacks (57)</option>
|
449
|
+
<option class="level-0" value="588444">psp hacks (47)</option>
|
450
|
+
<option class="level-0" value="23971578">radio hacks (137)</option>
|
451
|
+
<option class="level-0" value="47">rants (28)</option>
|
452
|
+
<option class="level-0" value="69218551">Raspberry Pi (153)</option>
|
453
|
+
<option class="level-0" value="21870780">repair hacks (101)</option>
|
454
|
+
<option class="level-0" value="309">reviews (19)</option>
|
455
|
+
<option class="level-0" value="10969101">robots hacks (874)</option>
|
456
|
+
<option class="level-0" value="30302">roundup (35)</option>
|
457
|
+
<option class="level-0" value="10969111">security hacks (460)</option>
|
458
|
+
<option class="level-0" value="2301">Software Development (91)</option>
|
459
|
+
<option class="level-0" value="3796421">software hacks (47)</option>
|
460
|
+
<option class="level-0" value="10969116">solar hacks (46)</option>
|
461
|
+
<option class="level-0" value="10969121">tablet pcs hacks (40)</option>
|
462
|
+
<option class="level-0" value="3075183">teardown (31)</option>
|
463
|
+
<option class="level-0" value="10969130">tool hacks (657)</option>
|
464
|
+
<option class="level-0" value="25277004">toy hacks (360)</option>
|
465
|
+
<option class="level-0" value="10969134">transportation hacks (472)</option>
|
466
|
+
<option class="level-0" value="1">Uncategorized (332)</option>
|
467
|
+
<option class="level-0" value="3184456">video hacks (211)</option>
|
468
|
+
<option class="level-0" value="34942364">Virtual Reality (9)</option>
|
469
|
+
<option class="level-0" value="50802420">weapons hacks (63)</option>
|
470
|
+
<option class="level-0" value="12552193">wearable hacks (183)</option>
|
471
|
+
<option class="level-0" value="39510952">Weekly roundup (18)</option>
|
472
|
+
<option class="level-0" value="4891215">wireless hacks (333)</option>
|
473
|
+
<option class="level-0" value="7079455">xbox hacks (130)</option>
|
474
|
+
</select>
|
475
|
+
|
476
|
+
<script type='text/javascript'>
|
477
|
+
/* <![CDATA[ */
|
478
|
+
var dropdown = document.getElementById("cat");
|
479
|
+
function onCatChange() {
|
480
|
+
if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
|
481
|
+
location.href = "http://hackaday.com/?cat="+dropdown.options[dropdown.selectedIndex].value;
|
482
|
+
}
|
483
|
+
}
|
484
|
+
dropdown.onchange = onCatChange;
|
485
|
+
/* ]]> */
|
486
|
+
</script>
|
487
|
+
|
488
|
+
</div></div>
|
489
|
+
<div id="featured-post-2" class="widget featuredpost"><div class="widget-wrap"><h4 class="widgettitle">In case you missed it</h4>
|
490
|
+
<div class="post-97657 post type-post status-publish format-standard hentry category-3d-printer-hacks category-featured tag-algae tag-bioluminescence tag-dinoflagellate tag-glowing tag-phosphorescence"><a href="http://hackaday.com/2013/04/18/living-night-light-with-glowing-algae/" title="Living night light with glowing algae" class="alignleft"><img width="90" height="61" src="http://hackadaycom.files.wordpress.com/2013/04/thumb1.jpg?w=90" class="attachment-thumbnail" alt="thumb" /></a><h2><a href="http://hackaday.com/2013/04/18/living-night-light-with-glowing-algae/" title="Living night light with glowing algae">Living night light with glowing algae</a></h2><p class="byline post-info"><br /> <span class="post-comments"><a href="http://hackaday.com/2013/04/18/living-night-light-with-glowing-algae/#comments">67 Comments</a></span></p></div><!--end post_class()-->
|
491
|
+
|
492
|
+
<div class="post-97648 post type-post status-publish format-standard hentry category-3d-printer-hacks category-featured category-virtual-reality-2 tag-3d-printing tag-lulzbot tag-oculus-rift tag-virtual-reality tag-vr"><a href="http://hackaday.com/2013/04/17/3d-printing-sensor-mounts-for-the-oculus-rift/" title="3D Printing sensor mounts for the Oculus Rift" class="alignleft"><img width="90" height="67" src="http://hackadaycom.files.wordpress.com/2013/04/thumb.jpg?w=90" class="attachment-thumbnail" alt="thumb" /></a><h2><a href="http://hackaday.com/2013/04/17/3d-printing-sensor-mounts-for-the-oculus-rift/" title="3D Printing sensor mounts for the Oculus Rift">3D Printing sensor mounts for the Oculus Rift</a></h2><p class="byline post-info"><br /> <span class="post-comments"><a href="http://hackaday.com/2013/04/17/3d-printing-sensor-mounts-for-the-oculus-rift/#comments">7 Comments</a></span></p></div><!--end post_class()-->
|
493
|
+
|
494
|
+
<div class="post-97564 post type-post status-publish format-standard hentry category-featured category-virtual-reality-2 tag-adaliight tag-ambilight tag-oculus-rift tag-virtual-reality tag-vr"><a href="http://hackaday.com/2013/04/11/hacking-the-oculus-rift-the-oculight/" title="Hacking the Oculus Rift: the Oculight" class="alignleft"><img width="90" height="54" src="http://hackadaycom.files.wordpress.com/2013/04/screen-shot-2013-04-14-at-9-52-43-am.png?w=90" class="attachment-thumbnail" alt="Screen Shot 2013-04-14 at 9.52.43 AM" /></a><h2><a href="http://hackaday.com/2013/04/11/hacking-the-oculus-rift-the-oculight/" title="Hacking the Oculus Rift: the Oculight">Hacking the Oculus Rift: the Oculight</a></h2><p class="byline post-info"><br /> <span class="post-comments"><a href="http://hackaday.com/2013/04/11/hacking-the-oculus-rift-the-oculight/#comments">20 Comments</a></span></p></div><!--end post_class()-->
|
495
|
+
|
496
|
+
<div class="post-97538 post type-post status-publish format-standard hentry category-featured category-news tag-top-10 tag-wins"><a href="http://hackaday.com/2013/04/11/top-10-best-hacking-scenes-in-movies/" title="Top 10 best hacking scenes in movies" class="alignleft"><img width="90" height="55" src="http://hackadaycom.files.wordpress.com/2013/04/screen-shot-2013-04-14-at-9-51-38-am.png?w=90" class="attachment-thumbnail" alt="Screen Shot 2013-04-14 at 9.51.38 AM" /></a><h2><a href="http://hackaday.com/2013/04/11/top-10-best-hacking-scenes-in-movies/" title="Top 10 best hacking scenes in movies">Top 10 best hacking scenes in movies</a></h2><p class="byline post-info"><br /> <span class="post-comments"><a href="http://hackaday.com/2013/04/11/top-10-best-hacking-scenes-in-movies/#comments">88 Comments</a></span></p></div><!--end post_class()-->
|
497
|
+
|
498
|
+
<div class="post-97094 post type-post status-publish format-standard hentry category-featured category-news tag-april-fools"><a href="http://hackaday.com/2013/04/01/hackadays-very-first-kickstarter-campaign/" title="Hackaday’s very first Kickstarter campaign" class="alignleft"><img width="90" height="54" src="http://hackadaycom.files.wordpress.com/2013/03/hackaday-kickstarter.jpg?w=90" class="attachment-thumbnail" alt="hackaday-kickstarter" /></a><h2><a href="http://hackaday.com/2013/04/01/hackadays-very-first-kickstarter-campaign/" title="Hackaday’s very first Kickstarter campaign">Hackaday’s very first Kickstarter campaign</a></h2><p class="byline post-info"><br /> <span class="post-comments"><a href="http://hackaday.com/2013/04/01/hackadays-very-first-kickstarter-campaign/#comments">58 Comments</a></span></p></div><!--end post_class()-->
|
499
|
+
|
500
|
+
<p class="more-from-category"><a href="http://hackaday.com/category/featured/" title="Featured">More Posts from this Category</a></p></div></div>
|
501
|
+
<div id="recent-comments-2" class="widget widget_recent_comments"><div class="widget-wrap"><h4 class="widgettitle">Recent comments</h4>
|
502
|
+
<ul id="recentcomments">
|
503
|
+
<li class="recentcomments">
|
504
|
+
echodelta on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-997083">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
505
|
+
<li class="recentcomments">
|
506
|
+
<a href='http://jsutton.co.uk' rel='external nofollow' class='url'>James</a> on <a href="http://hackaday.com/2013/04/23/console-radio-given-new-life-with-a-wifi-router-retrofit/comment-page-1/#comment-997080">Console radio given new life with a WiFi router retrofit</a> </li>
|
507
|
+
<li class="recentcomments">
|
508
|
+
nhede on <a href="http://hackaday.com/2013/04/22/20-pounds-and-a-gut-feeling-yields-a-configurable-rubidium-atomic-clock-source/comment-page-1/#comment-997074">20 pounds and a gut feeling yields a configurable Rubidium atomic clock source</a> </li>
|
509
|
+
<li class="recentcomments">
|
510
|
+
Dax on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-997071">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
511
|
+
<li class="recentcomments">
|
512
|
+
TacticalNinja on <a href="http://hackaday.com/2013/04/23/otm-02-is-a-3d-printed-wristwatch/comment-page-1/#comment-997070">OTM-02 is a 3D printed wristwatch</a> </li>
|
513
|
+
<li class="recentcomments">
|
514
|
+
Arlet on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-997017">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
515
|
+
<li class="recentcomments">
|
516
|
+
Arlet on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-997016">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
517
|
+
<li class="recentcomments">
|
518
|
+
<a href='http://smonson.com/' rel='external nofollow' class='url'>Smonson</a> on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-996997">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
519
|
+
<li class="recentcomments">
|
520
|
+
<a href='http://twitter.com/admsch' rel='external nofollow' class='url'>Adam Scheuring (@admsch)</a> on <a href="http://hackaday.com/2013/04/23/otm-02-is-a-3d-printed-wristwatch/comment-page-1/#comment-996993">OTM-02 is a 3D printed wristwatch</a> </li>
|
521
|
+
<li class="recentcomments">
|
522
|
+
JoSSte on <a href="http://hackaday.com/2013/04/23/rattle-generator-is-a-new-type-of-dynamo-for-a-bicycle/comment-page-1/#comment-996990">Rattle generator is a new type of dynamo for a bicycle</a> </li>
|
523
|
+
</ul>
|
524
|
+
</div></div>
|
525
|
+
<div id="calendar-2" class="widget widget_calendar"><div class="widget-wrap"><h4 class="widgettitle">Find Hacks by Date</h4>
|
526
|
+
<div id="calendar_wrap"><table id="wp-calendar">
|
527
|
+
<caption>April 2013</caption>
|
528
|
+
<thead>
|
529
|
+
<tr>
|
530
|
+
<th scope="col" title="Sunday">S</th>
|
531
|
+
<th scope="col" title="Monday">M</th>
|
532
|
+
<th scope="col" title="Tuesday">T</th>
|
533
|
+
<th scope="col" title="Wednesday">W</th>
|
534
|
+
<th scope="col" title="Thursday">T</th>
|
535
|
+
<th scope="col" title="Friday">F</th>
|
536
|
+
<th scope="col" title="Saturday">S</th>
|
537
|
+
</tr>
|
538
|
+
</thead>
|
539
|
+
|
540
|
+
<tfoot>
|
541
|
+
<tr>
|
542
|
+
<td colspan="3" id="prev"><a href="http://hackaday.com/2013/03/" title="View posts for March 2013">« Mar</a></td>
|
543
|
+
<td class="pad"> </td>
|
544
|
+
<td colspan="3" id="next" class="pad"> </td>
|
545
|
+
</tr>
|
546
|
+
</tfoot>
|
547
|
+
|
548
|
+
<tbody>
|
549
|
+
<tr>
|
550
|
+
<td colspan="1" class="pad"> </td><td><a href="http://hackaday.com/2013/04/01/" title="Hackaday’s very first Kickstarter campaign, Doctor Who-style WiFi, Kindle weather and recycling display, Windmill made from washing machine, 555 chip, SNES headphones scream out for Bluetooth control, How-to: turn on a light bulb">1</a></td><td><a href="http://hackaday.com/2013/04/02/" title="An EQ display for a pedal board, Dual displays on a Playstation 2, Ask Hackaday: Hacking lingo fails, Cooling a photomultiplier tube, Hackerspace tour: Arch Reactor in St. Louis Missouri, Adafruit launches educational show aimed at kids, CNC Tic Tac Toe, Building a vehicle parking camera, April Fools’ project teaches coworkers not to touch your stuff, SenseLamp automates rooms by replacing light fixtures">2</a></td><td><a href="http://hackaday.com/2013/04/03/" title="Embedded web server is all about clever formatting, Powering the Oculus Rift with USB, Upgrading a router with impeccable soldering skills, Homebuilt Laser Cutter Ideas, Building a Theremincello, Microscope ring light with a number of different features, Hall effect limit switches for a 3D printer, Adding an optical mouse sensor to an autonomous vehicle">3</a></td><td><a href="http://hackaday.com/2013/04/04/" title="Retrotechtacular: The Fourier Series, MP3/USB/Aux hack hidden behind cassette facade, Pranking a hackerspace IRC for April Fool’s Day, Turning an easter egg hunt into a fox hunt, Wireless Temperature Control for a Microbrewery, Melting Metal with a DIY Foundry Furnace, Top 10 Hacking Failures in movies: part 2, Steampunk theremin goggles, High speed circuit design for quantum physics light sensing, Home security hardware makes you the monitoring service">4</a></td><td><a href="http://hackaday.com/2013/04/05/" title="Snowboard goggle HUD displays critical data while falling down a mountain, Electric tricycle build log is like hacker crack, H-bot style 3D printer moves bed for Z-axis, Stapler hack fastens infinitely large sheets of paper, Light Graffiti with Servos and Python">5</a></td><td><a href="http://hackaday.com/2013/04/06/" title="Fixing the worst video game ever: E.T. for Atari 2600, Rolling your own minimal USB to serial Arduino programmer, Making PLA stick to a 3D printer build platform by using hairspray or an acetone ABS slurry">6</a></td>
|
551
|
+
</tr>
|
552
|
+
<tr>
|
553
|
+
<td><a href="http://hackaday.com/2013/04/07/" title="Acoustic bass guitar uses water jug and two strings, Solar powered robot mows your lawn while you chill indoors, Hackaday Links: Sunday, April 7th, 2013">7</a></td><td><a href="http://hackaday.com/2013/04/08/" title="Another way to look at Charlieplexing, Combo lock uses relays and logic gates, Yamaha SW60XG hack lets you use it as a standalone MIDI device">8</a></td><td><a href="http://hackaday.com/2013/04/09/" title="Synthesizing graphene in your basement laboratory, The RedBull creation contest begins!, Recurve bow make from wood and skis, Wall wart computer mouse">9</a></td><td><a href="http://hackaday.com/2013/04/10/" title="Hacker sends this through the mail to record a video of the process, MIDI pedal project looks as good as it sounds, Perpetual pong">10</a></td><td><a href="http://hackaday.com/2013/04/11/" title="Snowboard propulsion system motors you through the flats, Guitar EQ levels trigger the stage lights, Top 10 best hacking scenes in movies, Automating a mechanical typewriter, Hacking the Oculus Rift: the Oculight">11</a></td><td><a href="http://hackaday.com/2013/04/12/" title="Jeep Wrangler gets pressurized water right out of the bumper, Horribly complicated electric guitar keyboard, Generating electricity from alcohol">12</a></td><td><a href="http://hackaday.com/2013/04/13/" title="Network-controlled fireworks launcher, Working 3D printed stepper motor, SqueezeBerry: a Raspberri Pi powered Squeezebox appliance">13</a></td>
|
554
|
+
</tr>
|
555
|
+
<tr>
|
556
|
+
<td><a href="http://hackaday.com/2013/04/14/" title="Teaching a computer to play Mario… seemingly through voodoo, Building a replacement for a broken dehumidifier controller, Hackaday Links: Sunday, April 14th, 2013">14</a></td><td><a href="http://hackaday.com/2013/04/15/" title="Glowing Easter eggs more fun than a dye job, [FlorianH] shows off MinimaBL, the next generation of his quadcopter project, Original hardware for fifteen consoles jammed into recently completed Project Unity">15</a></td><td><a href="http://hackaday.com/2013/04/16/" title="Tube radio husk gets a web radio transplant, Building a kegerator with visual style, Hacked together Mac isn’t a hackintosh">16</a></td><td><a href="http://hackaday.com/2013/04/17/" title="Hackerspace security system brings RFID, video feedback, and automatic doors, Apple MagSafe cord repair, 3D Printing sensor mounts for the Oculus Rift, Upgrade a toy keyboard’s tone production">17</a></td><td><a href="http://hackaday.com/2013/04/18/" title="Hidden servo automates slat-style window blinds, Semi-automatic pick and place machine, Living night light with glowing algae, Pulse Oximeter from LM324, LED, and Photodiode">18</a></td><td><a href="http://hackaday.com/2013/04/19/" title="Measuring the lifespan of LEGO, Replace your project power supplies with recycled Li-Ion cells and a switching regulator, Asynchronous fireflies use few parts">19</a></td><td><a href="http://hackaday.com/2013/04/20/" title="This piggy bank is our stock broker, GUI window manager on an AVR chip, Mood lamp/notifier uses neat modular PCB design">20</a></td>
|
557
|
+
</tr>
|
558
|
+
<tr>
|
559
|
+
<td><a href="http://hackaday.com/2013/04/21/" title="3D printing some sweet music, Drop-in pcb makes Nintendo Four Score a USB joystick, Hackaday Links: Sunday, April 21st, 2013">21</a></td><td><a href="http://hackaday.com/2013/04/22/" title="Automatic tubular bells given a MIDI interface too, Connect a Retina display to a regular computer, 20 pounds and a gut feeling yields a configurable Rubidium atomic clock source">22</a></td><td><a href="http://hackaday.com/2013/04/23/" title="Console radio given new life with a WiFi router retrofit, What are the best hacking documentaries?, OTM-02 is a 3D printed wristwatch, Rattle generator is a new type of dynamo for a bicycle">23</a></td><td id="today">24</td><td>25</td><td>26</td><td>27</td>
|
560
|
+
</tr>
|
561
|
+
<tr>
|
562
|
+
<td>28</td><td>29</td><td>30</td>
|
563
|
+
<td class="pad" colspan="4"> </td>
|
564
|
+
</tr>
|
565
|
+
</tbody>
|
566
|
+
</table></div></div></div>
|
567
|
+
<div id=virurl>
|
568
|
+
<!-- BEGIN - VIRURL Widget - iFrame Embed Code -->
|
569
|
+
<iframe style="border: none; margin: 0; padding: 0; width: 300px; height: 600px;" src="https://www.virurl.com/iframe_widget?t=hackaday&l=5&category=Tech&w=23&u=147555"
|
570
|
+
width="300" height="600" scrolling="no" >
|
571
|
+
</iframe>
|
572
|
+
<!-- END - VIRURL Widget - iFrame Embed Code -->
|
573
|
+
</div>
|
574
|
+
<br />
|
575
|
+
<br />
|
576
|
+
<div id=tl_ad_bottom>
|
577
|
+
<script type="text/javascript"><!--
|
578
|
+
google_ad_client = "ca-pub-1812638130783065";
|
579
|
+
/* Hackaday sidebar wide skyscraper */
|
580
|
+
google_ad_slot = "1587378096";
|
581
|
+
google_ad_width = 160;
|
582
|
+
google_ad_height = 600;
|
583
|
+
google_ad_region = "test";
|
584
|
+
//-->
|
585
|
+
</script>
|
586
|
+
<script type="text/javascript"
|
587
|
+
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
588
|
+
</script>
|
589
|
+
</div>
|
590
|
+
|
591
|
+
|
592
|
+
<br />
|
593
|
+
|
594
|
+
|
595
|
+
|
596
|
+
|
597
|
+
|
598
|
+
|
599
|
+
</div> </div><!-- end #content-sidebar-wrap -->
|
600
|
+
</div><!-- end .wrap --></div><!-- end #inner --><div id="footer" class="footer"><div class="wrap"><div class="gototop"><p><a href="#wrap" rel="nofollow">Return to top of page</a></p></div><div class="creds"><p>Copyright © 2013 · <a href="http://www.studiopress.com/" title="Genesis Framework">Genesis Framework</a> · <a href="http://wordpress.org/" title="WordPress">WordPress</a> · <a href="http://hackadaycom.wordpress.com/wp-login.php">Log in</a></p></div></div><!-- end .wrap --></div><!-- end #footer -->
|
601
|
+
<script type="text/javascript">
|
602
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
603
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
604
|
+
</script>
|
605
|
+
<script type="text/javascript">
|
606
|
+
var pageTracker = _gat._getTracker("UA-2201445-6");
|
607
|
+
pageTracker._trackPageview();
|
608
|
+
</script>
|
609
|
+
<!-- Start Quantcast tag -->
|
610
|
+
<script type="text/javascript">
|
611
|
+
_qoptions={
|
612
|
+
qacct:"p-cc6zkdHuZwUDM"
|
613
|
+
};
|
614
|
+
</script>
|
615
|
+
<script type="text/javascript"
|
616
|
+
src="http://edge.quantserve.com/quant.js"></script>
|
617
|
+
<noscript>
|
618
|
+
<img src="http://pixel.quantserve.com/pixel/p-cc6zkdHuZwUDM.gif"
|
619
|
+
style="display: none;" border="0" height="1" width="1"
|
620
|
+
alt="Quantcast"/>
|
621
|
+
</noscript></div><!-- end #wrap -->
|
622
|
+
|
623
|
+
<script type="text/javascript">
|
624
|
+
var _qevents = _qevents || [], wpcomQuantcastData = {"qacct":"p-18-mFEk4J448M","labels":",language.en,type.wpcom,vip.hackadaycom"};
|
625
|
+
function wpcomQuantcastPixel( labels, options ) {
|
626
|
+
var i, defaults = wpcomQuantcastData, data = { event: 'ajax' };
|
627
|
+
|
628
|
+
labels = labels || '';
|
629
|
+
options = options || {};
|
630
|
+
|
631
|
+
if ( typeof labels != 'string' )
|
632
|
+
options = labels;
|
633
|
+
|
634
|
+
for ( i in defaults ) {
|
635
|
+
data[i] = defaults[i];
|
636
|
+
}
|
637
|
+
|
638
|
+
for ( i in options ) {
|
639
|
+
data[i] = options[i];
|
640
|
+
}
|
641
|
+
|
642
|
+
if ( data.labels ) {
|
643
|
+
data.labels += ',' + labels;
|
644
|
+
} else {
|
645
|
+
data.labels = labels;
|
646
|
+
}
|
647
|
+
|
648
|
+
_qevents.push( data );
|
649
|
+
};
|
650
|
+
(function() {var elem = document.createElement('script');elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";elem.async = true;elem.type = "text/javascript";var scpt = document.getElementsByTagName('script')[0];scpt.parentNode.insertBefore(elem, scpt); })();
|
651
|
+
_qevents.push( wpcomQuantcastData );
|
652
|
+
</script>
|
653
|
+
<noscript><div style="display: none;"><img src="//pixel.quantserve.com/pixel/p-18-mFEk4J448M.gif?labels=%2Clanguage.en%2Ctype.wpcom%2Cvip.hackadaycom" height="1" width="1" alt="" /></div></noscript>
|
654
|
+
|
655
|
+
|
656
|
+
<!-- /// LOAD CHARTBEAT /// -->
|
657
|
+
<script type="text/javascript">
|
658
|
+
var _sf_async_config={};
|
659
|
+
_sf_async_config.uid = 2021;
|
660
|
+
_sf_async_config.useCanonical = true;
|
661
|
+
|
662
|
+
(function(){
|
663
|
+
function loadChartbeat() {
|
664
|
+
window._sf_endpt=(new Date()).getTime();
|
665
|
+
var e = document.createElement('script');
|
666
|
+
e.setAttribute('language', 'javascript');
|
667
|
+
e.setAttribute('type', 'text/javascript');
|
668
|
+
e.setAttribute('src',
|
669
|
+
(("https:" == document.location.protocol) ? "https://s3.amazonaws.com/" : "http://") +
|
670
|
+
"static.chartbeat.com/js/chartbeat.js");
|
671
|
+
document.body.appendChild(e);
|
672
|
+
}
|
673
|
+
var oldonload = window.onload;
|
674
|
+
window.onload = (typeof window.onload != 'function') ?
|
675
|
+
loadChartbeat : function() { oldonload(); loadChartbeat(); };
|
676
|
+
})();
|
677
|
+
</script>
|
678
|
+
<div style="display:none">
|
679
|
+
</div>
|
680
|
+
<script type='text/javascript' src='http://s2.wp.com/_static/??-eJylzMsOREAQRuEXMoqgEwvxLC4/qjPVOl3dZh4fO3vrk+/Qz3+m3UW4SFZpxsET/D+3mtEjxQ0CJR8gnIRWOCgrfXm8lcAl0uQRFtbtlR3Cqtegl66smto0xhStPQEw5Dy+'></script>
|
681
|
+
<script type="text/javascript">
|
682
|
+
// <![CDATA[
|
683
|
+
(function() {
|
684
|
+
try{
|
685
|
+
if ( window.external &&'msIsSiteMode' in window.external) {
|
686
|
+
if (window.external.msIsSiteMode()) {
|
687
|
+
var jl = document.createElement('script');
|
688
|
+
jl.type='text/javascript';
|
689
|
+
jl.async=true;
|
690
|
+
jl.src='/wp-content/plugins/ie-sitemode/custom-jumplist.php';
|
691
|
+
var s = document.getElementsByTagName('script')[0];
|
692
|
+
s.parentNode.insertBefore(jl, s);
|
693
|
+
}
|
694
|
+
}
|
695
|
+
}catch(e){}
|
696
|
+
})();
|
697
|
+
// ]]>
|
698
|
+
</script><script src="http://s.stats.wordpress.com/w.js?21" type="text/javascript"></script>
|
699
|
+
<script type="text/javascript">
|
700
|
+
st_go({'blog':'4779443','v':'wpcom','tz':'-7','user_id':'0','subd':'hackadaycom'});
|
701
|
+
function st_vt() {var x=document.createElement("img");x.src="http://stats.wordpress.com/g.gif?blog=4779443&v=wpcomvt&tz=-7&user_id=0&subd=hackadaycom&rand="+Math.random();}
|
702
|
+
ex_go({'crypt':'UE40eW5QN0p8M2Y/RE1BNmNJfGhxNCVxUDExYmtXRThKbHcwXTdETWI1alhvb1oseHImN101ZFpEakVpYjlQYVFLYzBaVHRtPz0wXS9bVlFpZ3c1Qn5KSThLNS9lSHNGOE1IJk9+N2srY2F4NUlbQ0hqX2EmSFpVNVVFRDdbV29bU1RMNUdOLjRYbmtzaGV8TU1lMEI/fElTSUg1cFIreEtxRjdbSnFlX2dYN0FNNkJsS0dKJUowW3ktbGpYNytoYXV+cj1deTF+UCxpJTc4Zld6b1VOOEtQLHhSV1YvWDZmWU0uXV1pelRmc2FWajdVdWc2WFlDKzk/MmNQYQ=='});
|
703
|
+
addLoadEvent(function(){linktracker_init('4779443',0);});
|
704
|
+
</script>
|
705
|
+
<noscript><img src="http://stats.wordpress.com/b.gif?v=noscript" style="height:0px;width:0px;overflow:hidden" alt="" /></noscript>
|
706
|
+
<script type="text/javascript">
|
707
|
+
// Trigger Quantcast pixel for each Infinite Scroll post load
|
708
|
+
if ( 'function' === typeof( jQuery ) ) {
|
709
|
+
jQuery( document.body ).on( 'post-load', function() {
|
710
|
+
if ( 'function' === typeof( wpcomQuantcastPixel ) )
|
711
|
+
wpcomQuantcastPixel();
|
712
|
+
} );
|
713
|
+
}
|
714
|
+
</script>
|
715
|
+
</body>
|
716
|
+
</html>
|