docparser 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +9 -1
  6. data/README.md +11 -4
  7. data/Rakefile +15 -0
  8. data/example.rb +9 -7
  9. data/lib/docparser.rb +1 -0
  10. data/lib/docparser/document.rb +18 -11
  11. data/lib/docparser/output.rb +8 -8
  12. data/lib/docparser/output/html_output.rb +53 -47
  13. data/lib/docparser/output/json_output.rb +8 -3
  14. data/lib/docparser/output/multi_output.rb +4 -8
  15. data/lib/docparser/output/nil_output.rb +21 -0
  16. data/lib/docparser/output/screen_output.rb +2 -1
  17. data/lib/docparser/output/xlsx_output.rb +12 -2
  18. data/lib/docparser/output/yaml_output.rb +6 -1
  19. data/lib/docparser/parser.rb +80 -49
  20. data/lib/docparser/version.rb +1 -1
  21. data/test/lib/docparser/blackbox_test.rb +29 -0
  22. data/test/lib/docparser/document_test.rb +134 -0
  23. data/test/lib/docparser/logging_test.rb +19 -0
  24. data/test/lib/docparser/output/csv_output_test.rb +51 -0
  25. data/test/lib/docparser/output/html_output_test.rb +57 -0
  26. data/test/lib/docparser/output/json_output_test.rb +65 -0
  27. data/test/lib/docparser/output/multi_output_test.rb +80 -0
  28. data/test/lib/docparser/output/nil_output_test.rb +27 -0
  29. data/test/lib/docparser/output/screen_output_test.rb +55 -0
  30. data/test/lib/docparser/output/xlsx_output_test.rb +53 -0
  31. data/test/lib/docparser/output/yaml_output_test.rb +76 -0
  32. data/test/lib/docparser/output_test.rb +85 -0
  33. data/test/lib/docparser/parser_test.rb +197 -0
  34. data/test/lib/docparser/version_test.rb +11 -0
  35. data/test/support/hackaday/dl.rb +4 -0
  36. data/test/support/hackaday/file_1.html +716 -0
  37. data/test/support/hackaday/file_10.html +791 -0
  38. data/test/support/hackaday/file_11.html +787 -0
  39. data/test/support/hackaday/file_12.html +715 -0
  40. data/test/support/hackaday/file_13.html +793 -0
  41. data/test/support/hackaday/file_14.html +718 -0
  42. data/test/support/hackaday/file_15.html +707 -0
  43. data/test/support/hackaday/file_16.html +713 -0
  44. data/test/support/hackaday/file_17.html +715 -0
  45. data/test/support/hackaday/file_18.html +725 -0
  46. data/test/support/hackaday/file_19.html +715 -0
  47. data/test/support/hackaday/file_2.html +793 -0
  48. data/test/support/hackaday/file_20.html +795 -0
  49. data/test/support/hackaday/file_21.html +804 -0
  50. data/test/support/hackaday/file_22.html +722 -0
  51. data/test/support/hackaday/file_23.html +793 -0
  52. data/test/support/hackaday/file_24.html +717 -0
  53. data/test/support/hackaday/file_25.html +715 -0
  54. data/test/support/hackaday/file_26.html +717 -0
  55. data/test/support/hackaday/file_27.html +723 -0
  56. data/test/support/hackaday/file_28.html +711 -0
  57. data/test/support/hackaday/file_29.html +711 -0
  58. data/test/support/hackaday/file_3.html +794 -0
  59. data/test/support/hackaday/file_30.html +715 -0
  60. data/test/support/hackaday/file_31.html +713 -0
  61. data/test/support/hackaday/file_32.html +714 -0
  62. data/test/support/hackaday/file_33.html +716 -0
  63. data/test/support/hackaday/file_34.html +714 -0
  64. data/test/support/hackaday/file_35.html +792 -0
  65. data/test/support/hackaday/file_36.html +719 -0
  66. data/test/support/hackaday/file_37.html +712 -0
  67. data/test/support/hackaday/file_38.html +709 -0
  68. data/test/support/hackaday/file_39.html +808 -0
  69. data/test/support/hackaday/file_4.html +814 -0
  70. data/test/support/hackaday/file_40.html +801 -0
  71. data/test/support/hackaday/file_5.html +715 -0
  72. data/test/support/hackaday/file_6.html +792 -0
  73. data/test/support/hackaday/file_7.html +714 -0
  74. data/test/support/hackaday/file_8.html +717 -0
  75. data/test/support/hackaday/file_9.html +719 -0
  76. data/test/support/test_encoding.html +12 -0
  77. data/test/support/test_encoding2.html +12 -0
  78. data/test/support/test_html.html +16 -0
  79. data/test/support/test_xml.xml +5 -0
  80. data/test/test_helper.rb +14 -0
  81. metadata +126 -3
@@ -0,0 +1,793 @@
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 288 seconds ago
5
+ generated in 0.425 seconds
6
+ served from batcache in 0.004 seconds
7
+ expires in 12 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&amp;host=hackaday.com&amp;id=4779443&amp;t=1366800839&amp;back=hackaday.com%2Fpage%2F2%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 &raquo; Feed" href="http://feeds2.feedburner.com/hackaday/LgoM" />
31
+ <link rel="alternate" type="application/rss+xml" title="Hack a Day &raquo; 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 paged paged-2 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 &hellip;" name="s" class="s" onfocus="if (this.value == 'Search this website &hellip;') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search this website &hellip;';}" />
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-97698 post type-post status-publish format-standard hentry category-hackaday-links tag-drill tag-floppy-drive tag-foosball tag-lego tag-lvds tag-midi tag-mill tag-neato tag-soldering tag-xv-11">
197
+
198
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/21/hackaday-links-sunday-april-21st-2013/" title="Hackaday Links: Sunday, April 21st,&nbsp;2013" rel="bookmark">Hackaday Links: Sunday, April 21st,&nbsp;2013</a></h2>
199
+
200
+ <div class="post-info"><span class="date published time" title="2013-04-21T14:01:11+00:00">April 21, 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/21/hackaday-links-sunday-april-21st-2013/#comments">10 Comments</a></span> </div> <div class="entry-content">
201
+ <p><img class="aligncenter size-full wp-image-97424" alt="hackaday-links-chain" src="http://hackadaycom.files.wordpress.com/2013/04/hackaday-links-chain.png?w=580&#038;h=32" width="580" height="32" /></p>
202
+ <p>Regular reader and master hacker [Bill Porter] got married. Congratulations [Bill] and [Mara]! The two of them just couldn&#8217;t leave their soldering irons at home. The actually swore their vows by <a href="http://www.billporter.info/2013/04/15/our-geeky-wedding-wedding-circuit-ceremony/">soldering together a circuit during the ceremony</a> (blinky wedding dress, el wire tuxedo, and all).</p>
203
+ <p>[Kevin] sent in a link to [Red Fathom's] <a href="http://www.youtube.com/watch?v=r_lm1kRa1Fs">hacked Wacom tablet</a>. It&#8217;s the screen from a Wacom-enabled laptop brought back to life with a Teensy and an LVDS interface module.</p>
204
+ <p>The Neato XV-11 is able to find its charging station when the batteries run low. [Derek] figured out that <a href="http://kered.org/blog/2013-04-13/diy-neato-xv-11-base-charging-station/">you can make a second station using some reflective tape</a>.</p>
205
+ <p>If you use your drill a lot you&#8217;ll eventually break the rubber thing that holds the key to the chuck. Here&#8217;s a way to <a href="http://xrobots.co.uk/chuck/">3D print a replacement</a>.</p>
206
+ <p>[Torxe] put eight floppy drives to use as <a href="http://www.youtube.com/watch?v=_AlXtXdFAOc">a polyphonic Arduino-controlled MIDI player</a>. And while we&#8217;re on the subject of Arduino controlled projects you should take a look at this <a href="http://spuder.wordpress.com/2013/04/15/arduino-powered-foosball-table/">web-interface to tell you if the foosball table is being used</a>.</p>
207
+ <p>And finally [Th3 Bad Wolf] sent in this link to <a href="http://www.youtube.com/watch?v=oF0pMILT7_Y">a milling machine built out of LEGO</a>. It is able to mill floral foam and uses a lathe-like setup for one of the table axes.</p>
208
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
209
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/hackaday-links/" title="View all posts in Hackaday links" rel="category tag">Hackaday links</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/drill/" rel="tag">drill</a>, <a href="http://hackaday.com/tag/floppy-drive/" rel="tag">floppy drive</a>, <a href="http://hackaday.com/tag/foosball/" rel="tag">foosball</a>, <a href="http://hackaday.com/tag/lego/" rel="tag">lego</a>, <a href="http://hackaday.com/tag/lvds/" rel="tag">lvds</a>, <a href="http://hackaday.com/tag/midi/" rel="tag">midi</a>, <a href="http://hackaday.com/tag/mill/" rel="tag">mill</a>, <a href="http://hackaday.com/tag/neato/" rel="tag">Neato</a>, <a href="http://hackaday.com/tag/soldering/" rel="tag">soldering</a>, <a href="http://hackaday.com/tag/xv-11/" rel="tag">XV-11</a></span> </div>
210
+ </div><!-- end .postclass -->
211
+ <div class="post-97644 post type-post status-publish format-standard hentry category-nintendo-hacks category-peripherals-hacks tag-atmega16u2 tag-four-score tag-hid tag-joystick tag-nintendo tag-usb">
212
+
213
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/21/drop-in-pcb-makes-nintendo-four-score-a-usb-joystick/" title="Drop-in pcb makes Nintendo Four Score a USB&nbsp;joystick" rel="bookmark">Drop-in pcb makes Nintendo Four Score a USB&nbsp;joystick</a></h2>
214
+
215
+ <div class="post-info"><span class="date published time" title="2013-04-21T12:01:33+00:00">April 21, 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/21/drop-in-pcb-makes-nintendo-four-score-a-usb-joystick/#comments">11 Comments</a></span> </div> <div class="entry-content">
216
+ <p><img class="aligncenter size-large wp-image-97645" alt="nintendo-four-score-usb-replacement" src="http://hackadaycom.files.wordpress.com/2013/04/nintendo-four-score-usb-replacement.png?w=580&#038;h=212" width="580" height="212" /></p>
217
+ <p>The Nintendo Four Score was a controller attachment for the original Nintendo Entertainment System which allowed you to use four controllers at one time. [Simon Inns] wanted to use some original NES controllers on his computer so he developed <a href="http://www.waitingforfriday.com/index.php/Nintendo_Four_Score_USB">a drop-in replacement board that converts the device to USB</a>.</p>
218
+ <p>As we&#8217;ve seen with other NES controller hacks, <a href="http://hackaday.com/2010/12/24/gaming-on-an-ibm-xt-using-an-nes-controller/">the hardware uses a simple parallel to serial shift register</a> to deliver key-presses to the console. This means that reading four controllers at a time is no different than shifting in data to a microcontroller from the four different sources. The remaining portion of the problem is providing a USB connection that enumerates the device as a joystick. We&#8217;ve seen a bunch of <a href="http://hackaday.com/2011/10/31/do-you-know-what-youre-doing-when-integrating-pc-side-apps-with-usb-microcontrollers/">USB projects</a> from [Simon] so it&#8217;s no surprise that he was able to pull it off.</p>
219
+ <p>He went with the ATmega16U2 which has built-in support for USB. [Simon] wrote the code so that although there is only one USB cable, each of the four controller ports will appear as a separate USB joystick on the computer. To button up the project he carefully measured the original board and laid out his own version so that it fits the footprint of all the original components as well as the mounting brackets on the case. Top notch [Simon]!</p>
220
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
221
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/nintendo-hacks/" title="View all posts in nintendo hacks" rel="category tag">nintendo hacks</a>, <a href="http://hackaday.com/category/peripherals-hacks/" title="View all posts in peripherals hacks" rel="category tag">peripherals hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/atmega16u2/" rel="tag">atmega16u2</a>, <a href="http://hackaday.com/tag/four-score/" rel="tag">four score</a>, <a href="http://hackaday.com/tag/hid/" rel="tag">hid</a>, <a href="http://hackaday.com/tag/joystick/" rel="tag">Joystick</a>, <a href="http://hackaday.com/tag/nintendo/" rel="tag">nintendo</a>, <a href="http://hackaday.com/tag/usb/" rel="tag">usb</a></span> </div>
222
+ </div><!-- end .postclass -->
223
+ <div class="post-97640 post type-post status-publish format-standard hentry category-3d-printer-hacks category-musical-hacks tag-g-code tag-lulzbot tag-midi tag-python">
224
+
225
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/21/3d-printing-some-sweet-music/" title="3D printing some sweet&nbsp;music" rel="bookmark">3D printing some sweet&nbsp;music</a></h2>
226
+
227
+ <div class="post-info"><span class="date published time" title="2013-04-21T06:01:46+00:00">April 21, 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/21/3d-printing-some-sweet-music/#comments">26 Comments</a></span> </div> <div class="entry-content">
228
+ <p><img class="aligncenter size-large wp-image-97641" alt="3d-printer-music" src="http://hackadaycom.files.wordpress.com/2013/04/3d-printer-music.jpg?w=580&#038;h=435" width="580" height="435" /></p>
229
+ <p>If you don&#8217;t mind ending up with oddly shaped 3D printed parts <a href="http://vimeo.com/63997136">you can get your printer to sing to you</a>. The exhibit shown above is doing just that. The Lulzbot is being driven specifically to produce a certain frequency of sound with its stepper motors. The results of a few different songs are what&#8217;s hanging on the wall to the right. You can hear it printing Bizet&#8217;s Carmen in the clip after the break.</p>
230
+ <p>[Rickard Dahlstrand] hacked together a Python script capable of parsing a MIDI file and outputting a G-code equivalent that will produce the frequencies and durations necessary to hear the audio on a stepper motor. As we mentioned, he uses a Lulzbot but the script appears to include setting for Cupcake, Thingomatic, Shapercube, and Ultimaker. The parser script as well as the example G-code files for a library of classical music <a href="https://github.com/rickarddahlstrand/MIDI-to-CNC">can be downloaded from his repository</a>.</p>
231
+ <p>Now if you&#8217;re looking for some other crazy CNC music ideas you can&#8217;t beat <a href="http://hackaday.com/2012/08/14/servo-controlled-wine-glass-plays-the-music-of-the-angels/">this wineglass music hack</a>.</p>
232
+ <p> <a href="http://hackaday.com/2013/04/21/3d-printing-some-sweet-music/#more-97640" class="more-link">[Read more...]</a></p>
233
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
234
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/3d-printer-hacks/" title="View all posts in 3d Printer hacks" rel="category tag">3d Printer hacks</a>, <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/g-code/" rel="tag">g-code</a>, <a href="http://hackaday.com/tag/lulzbot/" rel="tag">lulzbot</a>, <a href="http://hackaday.com/tag/midi/" rel="tag">midi</a>, <a href="http://hackaday.com/tag/python/" rel="tag">python</a></span> </div>
235
+ </div><!-- end .postclass -->
236
+ <div align="center">
237
+
238
+
239
+
240
+ <script type="text/javascript"><!--
241
+
242
+ google_ad_client = "ca-pub-1812638130783065";
243
+
244
+ /* Hackaday, 300x250, created 4/26/08, MedRect main column */
245
+
246
+ google_ad_slot = "3449215672";
247
+
248
+ google_ad_width = 300;
249
+
250
+ google_ad_height = 250;
251
+
252
+ //-->
253
+
254
+ </script>
255
+
256
+ <script type="text/javascript"
257
+
258
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
259
+
260
+ </script>
261
+
262
+
263
+
264
+ </div> <div class="post-97636 post type-post status-publish format-standard hentry category-led-hacks tag-teensy-2-0">
265
+
266
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/20/mood-lampnotifier-uses-neat-modular-pcb-design/" title="Mood lamp/notifier uses neat modular PCB&nbsp;design" rel="bookmark">Mood lamp/notifier uses neat modular PCB&nbsp;design</a></h2>
267
+
268
+ <div class="post-info"><span class="date published time" title="2013-04-20T14:01:47+00:00">April 20, 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/20/mood-lampnotifier-uses-neat-modular-pcb-design/#comments">28 Comments</a></span> </div> <div class="entry-content">
269
+ <p><img class="aligncenter size-large wp-image-97637" alt="mood-lamp-with-modular-electronics" src="http://hackadaycom.files.wordpress.com/2013/04/mood-lamp-with-modular-electronics.jpg?w=580&#038;h=341" width="580" height="341" /></p>
270
+ <p>Not only does <a href="http://www.jsutton.co.uk/wordpress/?p=190">this mood lamp</a> which [J. Sutton] built look great, but we love the modular design he adopted when building the circuit boards.</p>
271
+ <p>If you&#8217;re building something that is going to sit on your desk for some time it just has to look good. We think that he achieved that, using a small block of oak as the base, and a cloudy white cube of unknown origin as a diffuser. Notice that the different colors are not mixed. There&#8217;s a baffle inside the diffuser that keeps them separate as early testing showed any combination of intensities was resulting in nearly the same shade of color.</p>
272
+ <p>The part we really like is the modular design of his circuit boards. The project is based around a Teensy++ 2.0 board. He first built a PCB baseboard which feature two SIL sockets to accept the legs of the Teensy. There is a third SIL socket which accepts some long legs from the LED host board, letting it perch on top of the Teensy.</p>
273
+ <p> <a href="http://hackaday.com/2013/04/20/mood-lampnotifier-uses-neat-modular-pcb-design/#more-97636" class="more-link">[Read more...]</a></p>
274
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
275
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/led-hacks/" title="View all posts in led hacks" rel="category tag">led hacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/teensy-2-0/" rel="tag">teensy 2.0</a></span> </div>
276
+ </div><!-- end .postclass -->
277
+ <div class="post-97631 post type-post status-publish format-standard hentry category-microcontrollers category-video-hacks tag-atmega1284 tag-gui tag-mouse tag-vga tag-window-manager">
278
+
279
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/20/gui-window-manager-on-an-avr-chip/" title="GUI window manager on an AVR&nbsp;chip" rel="bookmark">GUI window manager on an AVR&nbsp;chip</a></h2>
280
+
281
+ <div class="post-info"><span class="date published time" title="2013-04-20T12:01:50+00:00">April 20, 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/20/gui-window-manager-on-an-avr-chip/#comments">30 Comments</a></span> </div> <div class="entry-content">
282
+ <p><img class="aligncenter size-large wp-image-97633" alt="avr-window-manager-gui" src="http://hackadaycom.files.wordpress.com/2013/04/avr-window-manager-gui.jpg?w=580&#038;h=386" width="580" height="386" /></p>
283
+ <p>This project is reminiscent of the old days when window managers were an amazing new idea. The difference is that this <a href="http://www.theresistornetwork.com/2013/04/designing-window-manager-for-avr.html">window-based GUI is running on an ATmega1284 microcontroller</a>. But the behavior and speed of the interface is pretty much exactly what you&#8217;d expect if working on an early 90&#8242;s home computer. It even uses a mouse as input.</p>
284
+ <p>So how is this even possible? The key to the project is a serial to VGA module which handles the heavy lifting involved with generating a VGA signal. We featured one of [Andrew's] past projects which <a href="http://hackaday.com/2013/03/29/avr-vga-generator/">used an AVR chip to generate the VGA signal</a>. But that doesn&#8217;t leave nearly enough cycles to implement something like a window manager, not to mention the fact that it got nowhere near the resolution shown here.</p>
285
+ <p>He uses a serial mouse with an RS-232 converter chip to interact with the windows. This is best shown in his video after the break. He&#8217;s able to generate and interact with new windows. He even implemented a set of rudimentary controls which allow him to adjust the theme of the windows and drive the audio playback feature included on that VGA controller he&#8217;s using.</p>
286
+ <p> <a href="http://hackaday.com/2013/04/20/gui-window-manager-on-an-avr-chip/#more-97631" class="more-link">[Read more...]</a></p>
287
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
288
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/microcontrollers/" title="View all posts in Microcontrollers" rel="category tag">Microcontrollers</a>, <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/atmega1284/" rel="tag">atmega1284</a>, <a href="http://hackaday.com/tag/gui/" rel="tag">gui</a>, <a href="http://hackaday.com/tag/mouse/" rel="tag">mouse</a>, <a href="http://hackaday.com/tag/vga/" rel="tag">vga</a>, <a href="http://hackaday.com/tag/window-manager/" rel="tag">window manager</a></span> </div>
289
+ </div><!-- end .postclass -->
290
+ <div class="post-97626 post type-post status-publish format-standard hentry category-lifehacks tag-coin tag-php tag-piggy-bank tag-stock tag-stock-market">
291
+
292
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/20/this-piggy-bank-is-our-stock-broker/" title="This piggy bank is our stock&nbsp;broker" rel="bookmark">This piggy bank is our stock&nbsp;broker</a></h2>
293
+
294
+ <div class="post-info"><span class="date published time" title="2013-04-20T06:01:26+00:00">April 20, 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/20/this-piggy-bank-is-our-stock-broker/#comments">39 Comments</a></span> </div> <div class="entry-content">
295
+ <p><img class="aligncenter size-large wp-image-97627" alt="piggy-bank-stock-buy" src="http://hackadaycom.files.wordpress.com/2013/04/piggy-bank-stock-buy.png?w=580&#038;h=398" width="580" height="398" /></p>
296
+ <p>[Johna and Justin] are working to take the emotion out of playing the market. They built this <a href="http://stockbank.coin-operated.com">piggy bank which automatically purchases stock</a> when your coinage totals the cost of a single share. That&#8217;s right, just turn the selector to one of your three chosen stocks (Google, Facebook, and Apple are used in this example) and plug in some coins. The bank counts your money, compares it to the current online stock price, and pulls the trigger if you have enough dough. You can check out a demo clip after the jump.</p>
297
+ <p>The hardware is rather simple thanks to Adafruit&#8217;s programmable multi-coin acceptor. It handles the cash and it&#8217;s pretty easy to interface with the Arduino which handles the rest of the work. It connects to a computer via USB, depending on a PHP script to poll the current price. We dug through <a href="https://github.com/jblinder/StockBank">the code repository</a> just a bit but didn&#8217;t find the snippet that does the actual stock purchase. Whether or not they actually implemented that, it&#8217;s certainly an interesting concept.</p>
298
+ <p> <a href="http://hackaday.com/2013/04/20/this-piggy-bank-is-our-stock-broker/#more-97626" class="more-link">[Read more...]</a></p>
299
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
300
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/lifehacks/" title="View all posts in lifehacks" rel="category tag">lifehacks</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/coin/" rel="tag">coin</a>, <a href="http://hackaday.com/tag/php/" rel="tag">php</a>, <a href="http://hackaday.com/tag/piggy-bank/" rel="tag">piggy bank</a>, <a href="http://hackaday.com/tag/stock/" rel="tag">stock</a>, <a href="http://hackaday.com/tag/stock-market/" rel="tag">stock market</a></span> </div>
301
+ </div><!-- end .postclass -->
302
+ <div class="post-97622 post type-post status-publish format-standard hentry category-led-hacks category-microcontrollers tag-attiny13 tag-capacitive tag-cr2032 tag-firefly">
303
+
304
+ <h2 class="entry-title"><a href="http://hackaday.com/2013/04/19/asynchronous-fireflies-use-few-parts/" title="Asynchronous fireflies use few&nbsp;parts" rel="bookmark">Asynchronous fireflies use few&nbsp;parts</a></h2>
305
+
306
+ <div class="post-info"><span class="date published time" title="2013-04-19T14:01:01+00:00">April 19, 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/19/asynchronous-fireflies-use-few-parts/#comments">38 Comments</a></span> </div> <div class="entry-content">
307
+ <p><img class="aligncenter size-large wp-image-97623" alt="led-firefly" src="http://hackadaycom.files.wordpress.com/2013/04/led-firefly.jpg?w=580&#038;h=435" width="580" height="435" /></p>
308
+ <p>[Karl Lunt] wrote in to share <a href="http://www.seanet.com/~karllunt/fireflyLED.html">his LED firefly project</a>. His goals for the project were to develop a low-power, low parts count module that can sense when it&#8217;s dark and then mimic the blinking patterns you&#8217;d associate with its biological namesake.</p>
309
+ <p>We like his design which uses a coin cell battery holder as the chassis for the project. The ATtiny13 driving the hardware is held in place by the two power wires. This lets him flash new firmware by rotating the chip and plugging in a little adapter he build. The LED connection might look a bit peculiar to you. It has a resistor in parallel, which doesn&#8217;t satisfy the normal role of a current limiting resistor. That&#8217;s by design. [Karl] is driving the LED without any current limiting, which should be just fine with the 3V battery and short illumination time of the diode. The resistor comes into play when he uses the LED as a light sensor. <a href="http://hackaday.com/2009/06/25/64-synchronizing-fireflies/">Past firefly projects included light dependent resistors</a> to detect light and synchronize multiple units. [Karl] is foregoing the LDR, using the LED with a resistor in parallel to combat the capacitive qualities of the diode. As we mentioned, this senses ambient light, but we&#8217;d love to see an update that also uses the LED to synchronize a set of the devices.</p>
310
+ <div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"></div> </div><!-- end .entry-content -->
311
+ <div class="post-meta"><span class="categories">Filed Under: <a href="http://hackaday.com/category/led-hacks/" title="View all posts in led hacks" rel="category tag">led hacks</a>, <a href="http://hackaday.com/category/microcontrollers/" title="View all posts in Microcontrollers" rel="category tag">Microcontrollers</a></span> <span class="tags">Tagged With: <a href="http://hackaday.com/tag/attiny13/" rel="tag">attiny13</a>, <a href="http://hackaday.com/tag/capacitive/" rel="tag">capacitive</a>, <a href="http://hackaday.com/tag/cr2032/" rel="tag">cr2032</a>, <a href="http://hackaday.com/tag/firefly/" rel="tag">firefly</a></span> </div>
312
+ </div><!-- end .postclass -->
313
+ <div class="navigation"><div class="alignleft"><a href="http://hackaday.com/page/3/" >&laquo; Older Posts</a></div><div class="alignright"><a href="http://hackaday.com/" >Newer Posts &raquo;</a></div></div><!-- end .navigation --> </div><!-- end #content -->
314
+ <div id="sidebar" class="sidebar widget-area">
315
+ <div id=tl_ad>
316
+ <script type="text/javascript"><!--
317
+ google_ad_client = "ca-pub-1812638130783065";
318
+ /* Hackaday, 300x250, created 4/26/08, MedRect sidebar */
319
+ google_ad_slot = "7800245928";
320
+ google_ad_width = 300;
321
+ google_ad_height = 250;
322
+ //-->
323
+ </script>
324
+ <script type="text/javascript"
325
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
326
+ </script>
327
+
328
+ </div>
329
+
330
+
331
+
332
+
333
+
334
+
335
+ <div class="widget">
336
+ <h4>Never Miss a Hack</h4>
337
+ <div class="textwidget">
338
+
339
+ <!-- Place this tag where you want the badge to render. -->
340
+ <div class="g-plus" data-width= "280" data-href="https://plus.google.com/114843073658390316652" data-rel="publisher" data-theme="dark"></div>
341
+ <!-- Place this tag after the last badge tag. -->
342
+ <script type="text/javascript">
343
+ (function() {
344
+ var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
345
+ po.src = 'https://apis.google.com/js/plusone.js';
346
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
347
+ })();
348
+ </script>
349
+
350
+ <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>
351
+
352
+ <a href="https://twitter.com/hackaday" class="twitter-follow-button" data-show-count="true" data-lang="en" data-size="large">Follow @twitter</a>
353
+ <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>
354
+
355
+ <a href="http://feeds2.feedburner.com/hackaday/LgoM" target="_blank"><img src="http://hackadaycom.files.wordpress.com/2012/11/orange.png" border="0"/></a>
356
+ <div class="clear"> </div>
357
+ <!-- Begin MailChimp Signup Form -->
358
+ <link href="http://cdn-images.mailchimp.com/embedcode/slim-081711.css" rel="stylesheet" type="text/css">
359
+
360
+ <div id="mc_embed_signup">
361
+ <form action="http://mahalo.us5.list-manage.com/subscribe/post?u=126b2ab712043075d9bd7210e&amp;id=cb1aa8bd16" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
362
+ <label for="mce-EMAIL">Subscribe to our mailing list for sneak previews and behind the scenes info</label>
363
+ <input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required>
364
+ <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
365
+ </form>
366
+ </div>
367
+
368
+ <!--End mc_embed_signup-->
369
+ </div>
370
+ </div>
371
+
372
+ <div id="categories-2" class="widget widget_categories"><div class="widget-wrap"><h4 class="widgettitle">Categories</h4>
373
+ <select name='cat' id='cat' class='postform' >
374
+ <option value='-1'>Select Category</option>
375
+ <option class="level-0" value="114554125">3d Printer hacks&nbsp;&nbsp;(116)</option>
376
+ <option class="level-0" value="18020710">android hacks&nbsp;&nbsp;(240)</option>
377
+ <option class="level-0" value="18020705">arduino hacks&nbsp;&nbsp;(1029)</option>
378
+ <option class="level-0" value="27981650">ARM&nbsp;&nbsp;(51)</option>
379
+ <option class="level-0" value="33199679">Ask Hackaday&nbsp;&nbsp;(29)</option>
380
+ <option class="level-0" value="64298109">ATtiny hacks&nbsp;&nbsp;(45)</option>
381
+ <option class="level-0" value="25122024">beer hacks&nbsp;&nbsp;(63)</option>
382
+ <option class="level-0" value="12115263">blackberry hacks&nbsp;&nbsp;(8)</option>
383
+ <option class="level-0" value="10969031">cellphones hacks&nbsp;&nbsp;(337)</option>
384
+ <option class="level-0" value="35745764">chemistry hacks&nbsp;&nbsp;(102)</option>
385
+ <option class="level-0" value="24483654">classic hacks&nbsp;&nbsp;(852)</option>
386
+ <option class="level-0" value="31677810">clock hacks&nbsp;&nbsp;(189)</option>
387
+ <option class="level-0" value="18755632">cnc hacks&nbsp;&nbsp;(341)</option>
388
+ <option class="level-0" value="568165">computer hacks&nbsp;&nbsp;(390)</option>
389
+ <option class="level-0" value="78428">cons&nbsp;&nbsp;(192)</option>
390
+ <option class="level-0" value="5738">contests&nbsp;&nbsp;(136)</option>
391
+ <option class="level-0" value="3923181">cooking hacks&nbsp;&nbsp;(72)</option>
392
+ <option class="level-0" value="10969032">digital audio hacks&nbsp;&nbsp;(422)</option>
393
+ <option class="level-0" value="10969033">digital cameras hacks&nbsp;&nbsp;(415)</option>
394
+ <option class="level-0" value="10969034">downloads hacks&nbsp;&nbsp;(101)</option>
395
+ <option class="level-0" value="107827385">drone hacks&nbsp;&nbsp;(10)</option>
396
+ <option class="level-0" value="63176382">Engine Hacks&nbsp;&nbsp;(31)</option>
397
+ <option class="level-0" value="35890">Featured&nbsp;&nbsp;(72)</option>
398
+ <option class="level-0" value="551890">firefox hacks&nbsp;&nbsp;(23)</option>
399
+ <option class="level-0" value="53446541">FPGA&nbsp;&nbsp;(1)</option>
400
+ <option class="level-0" value="18020562">g1 hacks&nbsp;&nbsp;(26)</option>
401
+ <option class="level-0" value="320557">google hacks&nbsp;&nbsp;(44)</option>
402
+ <option class="level-0" value="10969036">gps hacks&nbsp;&nbsp;(108)</option>
403
+ <option class="level-0" value="24535490">green hacks&nbsp;&nbsp;(152)</option>
404
+ <option class="level-0" value="27311668">Hackaday links&nbsp;&nbsp;(146)</option>
405
+ <option class="level-0" value="21755374">Hackerspaces&nbsp;&nbsp;(93)</option>
406
+ <option class="level-0" value="6310599">HackIt&nbsp;&nbsp;(101)</option>
407
+ <option class="level-0" value="10969037">handhelds hacks&nbsp;&nbsp;(189)</option>
408
+ <option class="level-0" value="79">hardware&nbsp;&nbsp;(249)</option>
409
+ <option class="level-0" value="144422905">High Voltage Hacks&nbsp;&nbsp;(5)</option>
410
+ <option class="level-0" value="66307084">Holiday Hacks&nbsp;&nbsp;(93)</option>
411
+ <option class="level-0" value="10969038">home entertainment hacks&nbsp;&nbsp;(516)</option>
412
+ <option class="level-0" value="5660882">home hacks&nbsp;&nbsp;(705)</option>
413
+ <option class="level-0" value="2708">how-to&nbsp;&nbsp;(135)</option>
414
+ <option class="level-0" value="908478">internet hacks&nbsp;&nbsp;(2)</option>
415
+ <option class="level-0" value="831">Interviews&nbsp;&nbsp;(13)</option>
416
+ <option class="level-0" value="1416772">iphone hacks&nbsp;&nbsp;(176)</option>
417
+ <option class="level-0" value="1275163">ipod hacks&nbsp;&nbsp;(144)</option>
418
+ <option class="level-0" value="344761">kickstarter&nbsp;&nbsp;(29)</option>
419
+ <option class="level-0" value="4157506">Kindle hacks&nbsp;&nbsp;(15)</option>
420
+ <option class="level-0" value="46717088">Kinect hacks&nbsp;&nbsp;(81)</option>
421
+ <option class="level-0" value="10969048">laptops hacks&nbsp;&nbsp;(111)</option>
422
+ <option class="level-0" value="10969055">laser hacks&nbsp;&nbsp;(167)</option>
423
+ <option class="level-0" value="18020716">led hacks&nbsp;&nbsp;(695)</option>
424
+ <option class="level-0" value="10626">lifehacks&nbsp;&nbsp;(54)</option>
425
+ <option class="level-0" value="729674">linux hacks&nbsp;&nbsp;(129)</option>
426
+ <option class="level-0" value="20732807">lockpicking hacks&nbsp;&nbsp;(11)</option>
427
+ <option class="level-0" value="10969060">macs hacks&nbsp;&nbsp;(135)</option>
428
+ <option class="level-0" value="144395979">Marijuana Hacks&nbsp;&nbsp;(2)</option>
429
+ <option class="level-0" value="11284667">Medical hacks&nbsp;&nbsp;(102)</option>
430
+ <option class="level-0" value="139916">Microcontrollers&nbsp;&nbsp;(512)</option>
431
+ <option class="level-0" value="5611793">misc hacks&nbsp;&nbsp;(1747)</option>
432
+ <option class="level-0" value="18020730">multitouch hacks&nbsp;&nbsp;(89)</option>
433
+ <option class="level-0" value="22652725">musical hacks&nbsp;&nbsp;(290)</option>
434
+ <option class="level-0" value="18020722">netbook hacks&nbsp;&nbsp;(50)</option>
435
+ <option class="level-0" value="6166512">Network Hacks&nbsp;&nbsp;(4)</option>
436
+ <option class="level-0" value="103">news&nbsp;&nbsp;(1091)</option>
437
+ <option class="level-0" value="1861880">nintendo ds hacks&nbsp;&nbsp;(34)</option>
438
+ <option class="level-0" value="114555425">nintendo gameboy hacks&nbsp;&nbsp;(90)</option>
439
+ <option class="level-0" value="18020685">nintendo hacks&nbsp;&nbsp;(261)</option>
440
+ <option class="level-0" value="4992726">nintendo wii hacks&nbsp;&nbsp;(78)</option>
441
+ <option class="level-0" value="118011206">Nook Hacks&nbsp;&nbsp;(1)</option>
442
+ <option class="level-0" value="114556430">palm pre hacks&nbsp;&nbsp;(6)</option>
443
+ <option class="level-0" value="245123">parts&nbsp;&nbsp;(72)</option>
444
+ <option class="level-0" value="10969081">peripherals hacks&nbsp;&nbsp;(648)</option>
445
+ <option class="level-0" value="16325149">phone hacks&nbsp;&nbsp;(17)</option>
446
+ <option class="level-0" value="10969088">playstation hacks&nbsp;&nbsp;(120)</option>
447
+ <option class="level-0" value="2060">podcasts&nbsp;&nbsp;(8)</option>
448
+ <option class="level-0" value="10969096">portable audio hacks&nbsp;&nbsp;(66)</option>
449
+ <option class="level-0" value="10969099">portable video hacks&nbsp;&nbsp;(57)</option>
450
+ <option class="level-0" value="588444">psp hacks&nbsp;&nbsp;(47)</option>
451
+ <option class="level-0" value="23971578">radio hacks&nbsp;&nbsp;(137)</option>
452
+ <option class="level-0" value="47">rants&nbsp;&nbsp;(28)</option>
453
+ <option class="level-0" value="69218551">Raspberry Pi&nbsp;&nbsp;(153)</option>
454
+ <option class="level-0" value="21870780">repair hacks&nbsp;&nbsp;(101)</option>
455
+ <option class="level-0" value="309">reviews&nbsp;&nbsp;(19)</option>
456
+ <option class="level-0" value="10969101">robots hacks&nbsp;&nbsp;(874)</option>
457
+ <option class="level-0" value="30302">roundup&nbsp;&nbsp;(35)</option>
458
+ <option class="level-0" value="10969111">security hacks&nbsp;&nbsp;(460)</option>
459
+ <option class="level-0" value="2301">Software Development&nbsp;&nbsp;(91)</option>
460
+ <option class="level-0" value="3796421">software hacks&nbsp;&nbsp;(47)</option>
461
+ <option class="level-0" value="10969116">solar hacks&nbsp;&nbsp;(46)</option>
462
+ <option class="level-0" value="10969121">tablet pcs hacks&nbsp;&nbsp;(40)</option>
463
+ <option class="level-0" value="3075183">teardown&nbsp;&nbsp;(31)</option>
464
+ <option class="level-0" value="10969130">tool hacks&nbsp;&nbsp;(657)</option>
465
+ <option class="level-0" value="25277004">toy hacks&nbsp;&nbsp;(360)</option>
466
+ <option class="level-0" value="10969134">transportation hacks&nbsp;&nbsp;(472)</option>
467
+ <option class="level-0" value="1">Uncategorized&nbsp;&nbsp;(332)</option>
468
+ <option class="level-0" value="3184456">video hacks&nbsp;&nbsp;(211)</option>
469
+ <option class="level-0" value="34942364">Virtual Reality&nbsp;&nbsp;(9)</option>
470
+ <option class="level-0" value="50802420">weapons hacks&nbsp;&nbsp;(63)</option>
471
+ <option class="level-0" value="12552193">wearable hacks&nbsp;&nbsp;(183)</option>
472
+ <option class="level-0" value="39510952">Weekly roundup&nbsp;&nbsp;(18)</option>
473
+ <option class="level-0" value="4891215">wireless hacks&nbsp;&nbsp;(333)</option>
474
+ <option class="level-0" value="7079455">xbox hacks&nbsp;&nbsp;(130)</option>
475
+ </select>
476
+
477
+ <script type='text/javascript'>
478
+ /* <![CDATA[ */
479
+ var dropdown = document.getElementById("cat");
480
+ function onCatChange() {
481
+ if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
482
+ location.href = "http://hackaday.com/?cat="+dropdown.options[dropdown.selectedIndex].value;
483
+ }
484
+ }
485
+ dropdown.onchange = onCatChange;
486
+ /* ]]> */
487
+ </script>
488
+
489
+ </div></div>
490
+ <div id="featured-post-2" class="widget featuredpost"><div class="widget-wrap"><h4 class="widgettitle">In case you missed it</h4>
491
+ <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&nbsp;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&nbsp;algae">Living night light with glowing&nbsp;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()-->
492
+
493
+ <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&nbsp;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&nbsp;Rift">3D Printing sensor mounts for the Oculus&nbsp;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()-->
494
+
495
+ <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&nbsp;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&nbsp;Oculight">Hacking the Oculus Rift: the&nbsp;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()-->
496
+
497
+ <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&nbsp;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&nbsp;movies">Top 10 best hacking scenes in&nbsp;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()-->
498
+
499
+ <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&#8217;s very first Kickstarter&nbsp;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&#8217;s very first Kickstarter&nbsp;campaign">Hackaday&#8217;s very first Kickstarter&nbsp;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()-->
500
+
501
+ <p class="more-from-category"><a href="http://hackaday.com/category/featured/" title="Featured">More Posts from this Category</a></p></div></div>
502
+ <div id="recent-comments-2" class="widget widget_recent_comments"><div class="widget-wrap"><h4 class="widgettitle">Recent comments</h4>
503
+ <ul id="recentcomments">
504
+ <li class="recentcomments">
505
+ 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&nbsp;bicycle</a> </li>
506
+ <li class="recentcomments">
507
+ <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&nbsp;retrofit</a> </li>
508
+ <li class="recentcomments">
509
+ 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&nbsp;source</a> </li>
510
+ <li class="recentcomments">
511
+ 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&nbsp;bicycle</a> </li>
512
+ <li class="recentcomments">
513
+ 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&nbsp;wristwatch</a> </li>
514
+ <li class="recentcomments">
515
+ 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&nbsp;bicycle</a> </li>
516
+ <li class="recentcomments">
517
+ 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&nbsp;bicycle</a> </li>
518
+ <li class="recentcomments">
519
+ <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&nbsp;bicycle</a> </li>
520
+ <li class="recentcomments">
521
+ <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&nbsp;wristwatch</a> </li>
522
+ <li class="recentcomments">
523
+ 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&nbsp;bicycle</a> </li>
524
+ </ul>
525
+ </div></div>
526
+ <div id="calendar-2" class="widget widget_calendar"><div class="widget-wrap"><h4 class="widgettitle">Find Hacks by Date</h4>
527
+ <div id="calendar_wrap"><table id="wp-calendar">
528
+ <caption>April 2013</caption>
529
+ <thead>
530
+ <tr>
531
+ <th scope="col" title="Sunday">S</th>
532
+ <th scope="col" title="Monday">M</th>
533
+ <th scope="col" title="Tuesday">T</th>
534
+ <th scope="col" title="Wednesday">W</th>
535
+ <th scope="col" title="Thursday">T</th>
536
+ <th scope="col" title="Friday">F</th>
537
+ <th scope="col" title="Saturday">S</th>
538
+ </tr>
539
+ </thead>
540
+
541
+ <tfoot>
542
+ <tr>
543
+ <td colspan="3" id="prev"><a href="http://hackaday.com/2013/03/" title="View posts for March 2013">&laquo; Mar</a></td>
544
+ <td class="pad">&nbsp;</td>
545
+ <td colspan="3" id="next" class="pad">&nbsp;</td>
546
+ </tr>
547
+ </tfoot>
548
+
549
+ <tbody>
550
+ <tr>
551
+ <td colspan="1" class="pad">&nbsp;</td><td><a href="http://hackaday.com/2013/04/01/" title="Hackaday&#8217;s very first Kickstarter&nbsp;campaign
552
+ Doctor Who-style&nbsp;WiFi
553
+ Kindle weather and recycling&nbsp;display
554
+ Windmill made from washing machine, 555&nbsp;chip
555
+ SNES headphones scream out for Bluetooth&nbsp;control
556
+ How-to: turn on a light&nbsp;bulb">1</a></td><td><a href="http://hackaday.com/2013/04/02/" title="An EQ display for a pedal&nbsp;board
557
+ Dual displays on a Playstation&nbsp;2
558
+ Ask Hackaday: Hacking lingo&nbsp;fails
559
+ Cooling a photomultiplier&nbsp;tube
560
+ Hackerspace tour: Arch Reactor in St. Louis&nbsp;Missouri
561
+ Adafruit launches educational show aimed at&nbsp;kids
562
+ CNC Tic Tac&nbsp;Toe
563
+ Building a vehicle parking&nbsp;camera
564
+ April Fools&#8217; project teaches coworkers not to touch your&nbsp;stuff
565
+ SenseLamp automates rooms by replacing light&nbsp;fixtures">2</a></td><td><a href="http://hackaday.com/2013/04/03/" title="Embedded web server is all about clever&nbsp;formatting
566
+ Powering the Oculus Rift with&nbsp;USB
567
+ Upgrading a router with impeccable soldering&nbsp;skills
568
+ Homebuilt Laser Cutter&nbsp;Ideas
569
+ Building a&nbsp;Theremincello
570
+ Microscope ring light with a number of different&nbsp;features
571
+ Hall effect limit switches for a 3D&nbsp;printer
572
+ Adding an optical mouse sensor to an autonomous&nbsp;vehicle">3</a></td><td><a href="http://hackaday.com/2013/04/04/" title="Retrotechtacular: The Fourier&nbsp;Series
573
+ MP3/USB/Aux hack hidden behind cassette&nbsp;facade
574
+ Pranking a hackerspace IRC for April Fool&#8217;s&nbsp;Day
575
+ Turning an easter egg hunt into a fox&nbsp;hunt
576
+ Wireless Temperature Control for a&nbsp;Microbrewery
577
+ Melting Metal with a DIY Foundry&nbsp;Furnace
578
+ Top 10 Hacking Failures in movies: part&nbsp;2
579
+ Steampunk theremin&nbsp;goggles
580
+ High speed circuit design for quantum physics light&nbsp;sensing
581
+ Home security hardware makes you the monitoring&nbsp;service">4</a></td><td><a href="http://hackaday.com/2013/04/05/" title="Snowboard goggle HUD displays critical data while falling down a&nbsp;mountain
582
+ Electric tricycle build log is like hacker&nbsp;crack
583
+ H-bot style 3D printer moves bed for&nbsp;Z-axis
584
+ Stapler hack fastens infinitely large sheets of&nbsp;paper
585
+ Light Graffiti with Servos and&nbsp;Python">5</a></td><td><a href="http://hackaday.com/2013/04/06/" title="Fixing the worst video game ever: E.T. for Atari&nbsp;2600
586
+ Rolling your own minimal USB to serial Arduino&nbsp;programmer
587
+ Making PLA stick to a 3D printer build platform by using hairspray or an acetone ABS&nbsp;slurry">6</a></td>
588
+ </tr>
589
+ <tr>
590
+ <td><a href="http://hackaday.com/2013/04/07/" title="Acoustic bass guitar uses water jug and two&nbsp;strings
591
+ Solar powered robot mows your lawn while you chill&nbsp;indoors
592
+ Hackaday Links: Sunday, April 7th,&nbsp;2013">7</a></td><td><a href="http://hackaday.com/2013/04/08/" title="Another way to look at&nbsp;Charlieplexing
593
+ Combo lock uses relays and logic&nbsp;gates
594
+ Yamaha SW60XG hack lets you use it as a standalone MIDI&nbsp;device">8</a></td><td><a href="http://hackaday.com/2013/04/09/" title="Synthesizing graphene in your basement&nbsp;laboratory
595
+ The RedBull creation contest&nbsp;begins!
596
+ Recurve bow make from wood and&nbsp;skis
597
+ Wall wart computer&nbsp;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&nbsp;process
598
+ MIDI pedal project looks as good as it&nbsp;sounds
599
+ Perpetual&nbsp;pong">10</a></td><td><a href="http://hackaday.com/2013/04/11/" title="Snowboard propulsion system motors you through the&nbsp;flats
600
+ Guitar EQ levels trigger the stage&nbsp;lights
601
+ Top 10 best hacking scenes in&nbsp;movies
602
+ Automating a mechanical&nbsp;typewriter
603
+ Hacking the Oculus Rift: the&nbsp;Oculight">11</a></td><td><a href="http://hackaday.com/2013/04/12/" title="Jeep Wrangler gets pressurized water right out of the&nbsp;bumper
604
+ Horribly complicated electric guitar&nbsp;keyboard
605
+ Generating electricity from&nbsp;alcohol">12</a></td><td><a href="http://hackaday.com/2013/04/13/" title="Network-controlled fireworks&nbsp;launcher
606
+ Working 3D printed stepper&nbsp;motor
607
+ SqueezeBerry: a Raspberri Pi powered Squeezebox&nbsp;appliance">13</a></td>
608
+ </tr>
609
+ <tr>
610
+ <td><a href="http://hackaday.com/2013/04/14/" title="Teaching a computer to play Mario&#8230; seemingly through&nbsp;voodoo
611
+ Building a replacement for a broken dehumidifier&nbsp;controller
612
+ Hackaday Links: Sunday, April 14th,&nbsp;2013">14</a></td><td><a href="http://hackaday.com/2013/04/15/" title="Glowing Easter eggs more fun than a dye&nbsp;job
613
+ [FlorianH] shows off MinimaBL, the next generation of his quadcopter&nbsp;project
614
+ Original hardware for fifteen consoles jammed into recently completed Project&nbsp;Unity">15</a></td><td><a href="http://hackaday.com/2013/04/16/" title="Tube radio husk gets a web radio&nbsp;transplant
615
+ Building a kegerator with visual&nbsp;style
616
+ Hacked together Mac isn&#8217;t a&nbsp;hackintosh">16</a></td><td><a href="http://hackaday.com/2013/04/17/" title="Hackerspace security system brings RFID, video feedback, and automatic&nbsp;doors
617
+ Apple MagSafe cord&nbsp;repair
618
+ 3D Printing sensor mounts for the Oculus&nbsp;Rift
619
+ Upgrade a toy keyboard&#8217;s tone&nbsp;production">17</a></td><td><a href="http://hackaday.com/2013/04/18/" title="Hidden servo automates slat-style window&nbsp;blinds
620
+ Semi-automatic pick and place&nbsp;machine
621
+ Living night light with glowing&nbsp;algae
622
+ Pulse Oximeter from LM324, LED, and&nbsp;Photodiode">18</a></td><td><a href="http://hackaday.com/2013/04/19/" title="Measuring the lifespan of&nbsp;LEGO
623
+ Replace your project power supplies with recycled Li-Ion cells and a switching&nbsp;regulator
624
+ Asynchronous fireflies use few&nbsp;parts">19</a></td><td><a href="http://hackaday.com/2013/04/20/" title="This piggy bank is our stock&nbsp;broker
625
+ GUI window manager on an AVR&nbsp;chip
626
+ Mood lamp/notifier uses neat modular PCB&nbsp;design">20</a></td>
627
+ </tr>
628
+ <tr>
629
+ <td><a href="http://hackaday.com/2013/04/21/" title="3D printing some sweet&nbsp;music
630
+ Drop-in pcb makes Nintendo Four Score a USB&nbsp;joystick
631
+ Hackaday Links: Sunday, April 21st,&nbsp;2013">21</a></td><td><a href="http://hackaday.com/2013/04/22/" title="Automatic tubular bells given a MIDI interface&nbsp;too
632
+ Connect a Retina display to a regular&nbsp;computer
633
+ 20 pounds and a gut feeling yields a configurable Rubidium atomic clock&nbsp;source">22</a></td><td><a href="http://hackaday.com/2013/04/23/" title="Console radio given new life with a WiFi router&nbsp;retrofit
634
+ What are the best hacking&nbsp;documentaries?
635
+ OTM-02 is a 3D printed&nbsp;wristwatch
636
+ Rattle generator is a new type of dynamo for a&nbsp;bicycle">23</a></td><td id="today">24</td><td>25</td><td>26</td><td>27</td>
637
+ </tr>
638
+ <tr>
639
+ <td>28</td><td>29</td><td>30</td>
640
+ <td class="pad" colspan="4">&nbsp;</td>
641
+ </tr>
642
+ </tbody>
643
+ </table></div></div></div>
644
+ <div id=virurl>
645
+ <!-- BEGIN - VIRURL Widget - iFrame Embed Code -->
646
+ <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"
647
+ width="300" height="600" scrolling="no" >
648
+ </iframe>
649
+ <!-- END - VIRURL Widget - iFrame Embed Code -->
650
+ </div>
651
+ <br />
652
+ <br />
653
+ <div id=tl_ad_bottom>
654
+ <script type="text/javascript"><!--
655
+ google_ad_client = "ca-pub-1812638130783065";
656
+ /* Hackaday sidebar wide skyscraper */
657
+ google_ad_slot = "1587378096";
658
+ google_ad_width = 160;
659
+ google_ad_height = 600;
660
+ google_ad_region = "test";
661
+ //-->
662
+ </script>
663
+ <script type="text/javascript"
664
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
665
+ </script>
666
+ </div>
667
+
668
+
669
+ <br />
670
+
671
+
672
+
673
+
674
+
675
+
676
+ </div> </div><!-- end #content-sidebar-wrap -->
677
+ </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 &copy; 2013 &middot; <a href="http://www.studiopress.com/" title="Genesis Framework">Genesis Framework</a> &middot; <a href="http://wordpress.org/" title="WordPress">WordPress</a> &middot; <a href="http://hackadaycom.wordpress.com/wp-login.php">Log in</a></p></div></div><!-- end .wrap --></div><!-- end #footer -->
678
+ <script type="text/javascript">
679
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
680
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
681
+ </script>
682
+ <script type="text/javascript">
683
+ var pageTracker = _gat._getTracker("UA-2201445-6");
684
+ pageTracker._trackPageview();
685
+ </script>
686
+ <!-- Start Quantcast tag -->
687
+ <script type="text/javascript">
688
+ _qoptions={
689
+ qacct:"p-cc6zkdHuZwUDM"
690
+ };
691
+ </script>
692
+ <script type="text/javascript"
693
+ src="http://edge.quantserve.com/quant.js"></script>
694
+ <noscript>
695
+ <img src="http://pixel.quantserve.com/pixel/p-cc6zkdHuZwUDM.gif"
696
+ style="display: none;" border="0" height="1" width="1"
697
+ alt="Quantcast"/>
698
+ </noscript></div><!-- end #wrap -->
699
+
700
+ <script type="text/javascript">
701
+ var _qevents = _qevents || [], wpcomQuantcastData = {"qacct":"p-18-mFEk4J448M","labels":",language.en,type.wpcom,vip.hackadaycom"};
702
+ function wpcomQuantcastPixel( labels, options ) {
703
+ var i, defaults = wpcomQuantcastData, data = { event: 'ajax' };
704
+
705
+ labels = labels || '';
706
+ options = options || {};
707
+
708
+ if ( typeof labels != 'string' )
709
+ options = labels;
710
+
711
+ for ( i in defaults ) {
712
+ data[i] = defaults[i];
713
+ }
714
+
715
+ for ( i in options ) {
716
+ data[i] = options[i];
717
+ }
718
+
719
+ if ( data.labels ) {
720
+ data.labels += ',' + labels;
721
+ } else {
722
+ data.labels = labels;
723
+ }
724
+
725
+ _qevents.push( data );
726
+ };
727
+ (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); })();
728
+ _qevents.push( wpcomQuantcastData );
729
+ </script>
730
+ <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>
731
+
732
+
733
+ <!-- /// LOAD CHARTBEAT /// -->
734
+ <script type="text/javascript">
735
+ var _sf_async_config={};
736
+ _sf_async_config.uid = 2021;
737
+ _sf_async_config.useCanonical = true;
738
+
739
+ (function(){
740
+ function loadChartbeat() {
741
+ window._sf_endpt=(new Date()).getTime();
742
+ var e = document.createElement('script');
743
+ e.setAttribute('language', 'javascript');
744
+ e.setAttribute('type', 'text/javascript');
745
+ e.setAttribute('src',
746
+ (("https:" == document.location.protocol) ? "https://s3.amazonaws.com/" : "http://") +
747
+ "static.chartbeat.com/js/chartbeat.js");
748
+ document.body.appendChild(e);
749
+ }
750
+ var oldonload = window.onload;
751
+ window.onload = (typeof window.onload != 'function') ?
752
+ loadChartbeat : function() { oldonload(); loadChartbeat(); };
753
+ })();
754
+ </script>
755
+ <div style="display:none">
756
+ </div>
757
+ <script type='text/javascript' src='http://s2.wp.com/_static/??-eJylzMsOREAQRuEXMoqgEwvxLC4/qjPVOl3dZh4fO3vrk+/Qz3+m3UW4SFZpxsET/D+3mtEjxQ0CJR8gnIRWOCgrfXm8lcAl0uQRFtbtlR3Cqtegl66smto0xhStPQEw5Dy+'></script>
758
+ <script type="text/javascript">
759
+ // <![CDATA[
760
+ (function() {
761
+ try{
762
+ if ( window.external &&'msIsSiteMode' in window.external) {
763
+ if (window.external.msIsSiteMode()) {
764
+ var jl = document.createElement('script');
765
+ jl.type='text/javascript';
766
+ jl.async=true;
767
+ jl.src='/wp-content/plugins/ie-sitemode/custom-jumplist.php';
768
+ var s = document.getElementsByTagName('script')[0];
769
+ s.parentNode.insertBefore(jl, s);
770
+ }
771
+ }
772
+ }catch(e){}
773
+ })();
774
+ // ]]>
775
+ </script><script src="http://s.stats.wordpress.com/w.js?21" type="text/javascript"></script>
776
+ <script type="text/javascript">
777
+ st_go({'blog':'4779443','v':'wpcom','tz':'-7','user_id':'0','subd':'hackadaycom'});
778
+ 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();}
779
+ ex_go({'crypt':'UE40eW5QN0p8M2Y/RE1BNmNJfGhxNCVxUDExYmtXRThKbHcwXTdETWI1alhvb1oseHImN101ZFpEakVpYjlQYVFLYzBaVHRtPz0wXS9bVlFpZ3c1Qn5KSThLNS9lSHNGOE1IJk9+N1BfZVJmakN3bE9ZeU9DRVMzV2pDNzJkN2p5T1o5a0JsVDNbT24xNjMxcF1ZcitPMXM2aUE3TVczcXEzWUhBQkU3amxUajFxam1oZl9BfnVPdEh4b2NkTm84ZV9oQ2MsVkdpJjZZeWFEam10b1VOOEtQLHhSV1YvWDZmWU0uXV1pelRmc2FWajdVdWc2WERzdn4vTD1RUQ=='});
780
+ addLoadEvent(function(){linktracker_init('4779443',0);});
781
+ </script>
782
+ <noscript><img src="http://stats.wordpress.com/b.gif?v=noscript" style="height:0px;width:0px;overflow:hidden" alt="" /></noscript>
783
+ <script type="text/javascript">
784
+ // Trigger Quantcast pixel for each Infinite Scroll post load
785
+ if ( 'function' === typeof( jQuery ) ) {
786
+ jQuery( document.body ).on( 'post-load', function() {
787
+ if ( 'function' === typeof( wpcomQuantcastPixel ) )
788
+ wpcomQuantcastPixel();
789
+ } );
790
+ }
791
+ </script>
792
+ </body>
793
+ </html>