<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7683703637063287904</id><updated>2012-02-16T16:55:20.728-08:00</updated><title type='text'>Gavin Black</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default?start-index=101&amp;max-results=100'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>104</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8021771530029397053</id><published>2009-09-02T06:23:00.000-07:00</published><updated>2009-09-02T06:26:45.742-07:00</updated><title type='text'>Genetic Conway's Game of Life</title><content type='html'>Full details and source code on &lt;a href="http://devrand.org/show_item.html?item=98&amp;amp;page=Project#"&gt;devrand.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/Sp5yee95UCI/AAAAAAAAApo/KHwF7fDLR_4/s1600-h/conwayHour1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 260px; height: 259px;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/Sp5yee95UCI/AAAAAAAAApo/KHwF7fDLR_4/s400/conwayHour1.png" alt="" id="BLOGGER_PHOTO_ID_5376860873161265186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Genetic algorithm on starting patterns of Conway automata.&lt;br /&gt;Total number of spaces occupied is used to determine what carries on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8021771530029397053?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8021771530029397053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8021771530029397053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8021771530029397053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8021771530029397053'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/09/genetic-conways-game-of-life.html' title='Genetic Conway&apos;s Game of Life'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QzrGDbxJnj8/Sp5yee95UCI/AAAAAAAAApo/KHwF7fDLR_4/s72-c/conwayHour1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7882860407523149899</id><published>2009-08-11T06:33:00.000-07:00</published><updated>2010-02-28T10:16:29.377-08:00</updated><title type='text'>Trackmate Software With PS3 Eye and Processing on Windows</title><content type='html'>Copy and pasted from &lt;a href="http://devrand.org/"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*PLEASE leave comments at devrand, I rarely check this blog*&lt;/span&gt;&lt;br /&gt;&lt;h3&gt;Overview&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;A very quick tutorial for the entire round trip of setting up the PS3Eye getting the Trackmate Tracker working and using it with Processing. It's mainly a collection of links to avoid googling everything :p&lt;/p&gt;&lt;h3&gt;Downloads&lt;br /&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.java.com/en/download/"&gt;Java Runtime Environment&lt;/a&gt; -- Install the latest JRE, it is needed for running standalone Processing apps&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://alexpopovich.wordpress.com/2008/10/02/sony-ps3eye-camera-directshow-capture-source-filter/"&gt;PS3Eye Driver&lt;/a&gt; -- Install the software.  You have to scroll way down on the page to find the link.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://trackmate.sourceforge.net/"&gt;Trackmate Tracker and Tagger&lt;/a&gt; -- Download both and unpack them.  No installation required, but it is handy to make shortcuts to the executables.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://processing.org/download/"&gt;Processing&lt;/a&gt; -- Download and extract.  Again, no installation needed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://lusidosc.sourceforge.net/"&gt;LusidOSC&lt;/a&gt; -- Download the simulator and Processing bundle.  Just extract the files, no need to install anything.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;h3&gt;Setting Up&lt;br /&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Start up Processing.  You can immediately close it, but you need to verify it works and let it register filetype handles.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open up the LusidOSC simulator, and then open any of the PDE files provided by the LusidOSC bundle.  You should be able to move the pieces in the simulator and have them work with the sample applications.  Close the simulator when you're ready to proceed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Go into a DOS prompt (Start Menu-&gt;run, type cmd and hit enter) and then navigate to where the PS3Eye test application was installed (For me it's: &lt;b&gt;cd C:\"Program Files"\AlexP&lt;/b&gt;)  Run the following command: &lt;b&gt;regsvr32 PS3Eye.ax&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open up Trackmate Tracker and verify that you can see video (Assuming the PS3 eye is connected).  Try hitting &lt;b&gt;s&lt;/b&gt; if you have multiple cameras and it's not working, or &lt;b&gt;v&lt;/b&gt; to change views.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To setup the Tracker follow &lt;a href="http://sourceforge.net/apps/mediawiki/trackmate/index.php?title=How_To_Setup"&gt;the guide&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now toggle the view(Press v) till it says it's in "Fast Mode", and rerun one of the sample apps in the LusidOSC Processing bundle.  And you're done.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;h3&gt;Conclusion&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;This was easy, but took me a while to figure out where to download everything (Especially the PS3Eye stuff :p).  The hardware has been much more of a pain, and I will include a write-up of it when I get it working 100%.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7882860407523149899?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7882860407523149899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7882860407523149899' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7882860407523149899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7882860407523149899'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/08/trackmate-software-with-ps3-eye-and.html' title='Trackmate Software With PS3 Eye and Processing on Windows'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3435374333222378526</id><published>2009-08-01T05:56:00.000-07:00</published><updated>2009-08-01T05:59:30.131-07:00</updated><title type='text'>Haskell Cipher Saber</title><content type='html'>Cipher Saber is an easily implementable form of strong encryption. It makes it so that if encryption programs are ever banned, people can simply write their own and use that. I decided to implement the algorithm in Haskell for practice.&lt;br /&gt;&lt;br /&gt;&lt;B&gt;Full description and source at &lt;a href="http://www.devrand.org/show_item.html?item=88"&gt;devrand.org&lt;/a&gt;&lt;/B&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3435374333222378526?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3435374333222378526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3435374333222378526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3435374333222378526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3435374333222378526'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/08/haskell-cipher-saber.html' title='Haskell Cipher Saber'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8812867799649455738</id><published>2009-06-06T14:23:00.001-07:00</published><updated>2009-06-06T14:24:17.592-07:00</updated><title type='text'>Simple Perl SDL Music Keyboard</title><content type='html'>Available at: &lt;a href="http://devrand.org/show_item.html?item=73&amp;page=Project"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/SiredZ352lI/AAAAAAAAApg/JZWe82q9Mes/s1600-h/keyb.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 110px;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/SiredZ352lI/AAAAAAAAApg/JZWe82q9Mes/s400/keyb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5344328504571451986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8812867799649455738?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8812867799649455738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8812867799649455738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8812867799649455738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8812867799649455738'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/06/simple-perl-sdl-music-keyboard.html' title='Simple Perl SDL Music Keyboard'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QzrGDbxJnj8/SiredZ352lI/AAAAAAAAApg/JZWe82q9Mes/s72-c/keyb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2611990912036728148</id><published>2009-06-06T14:20:00.000-07:00</published><updated>2009-06-06T14:22:52.450-07:00</updated><title type='text'>Dynamic Web Displayed Images: Python and PHP</title><content type='html'>Ripped from: &lt;a href="http://devrand.org/show_item.html?item=70&amp;page=Tutorial"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Overview&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dynamic images on the web can be a tad tricky.  The general procedure is to write out an image header as opposed to the standard html one.  Following that is the raw binary for the image.  Below are examples of doing this in Python and PHP.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Python using the PIL library&lt;/H4&gt;&lt;br /&gt;&lt;div id="code"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#!/path/to/python&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;from&lt;/strong&gt; &lt;font color="#2040a0"&gt;PIL&lt;/font&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;font color="#2040a0"&gt;Image&lt;/font&gt;, &lt;font color="#2040a0"&gt;ImageDraw&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;import&lt;/strong&gt; &lt;font color="#2040a0"&gt;sys&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;im&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Image&lt;/font&gt;.&lt;font color="#2040a0"&gt;new&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;"P"&lt;/font&gt;, &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#FF0000"&gt;200&lt;/font&gt;, &lt;font color="#FF0000"&gt;200&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;draw&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;ImageDraw&lt;/font&gt;.&lt;font color="#2040a0"&gt;Draw&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;im&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;draw&lt;/font&gt;.&lt;font color="#2040a0"&gt;rectangle&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;, &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;im&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;, &lt;font color="#2040a0"&gt;fill&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;"blue"&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#44AA44"&gt;# Any manipulation of the image&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;print&lt;/strong&gt; &lt;font color="#008000"&gt;"Content-Type: image/png&lt;font color="#77dd77"&gt;\r&lt;/font&gt;&lt;font color="#77dd77"&gt;\n&lt;/font&gt;"&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;im&lt;/font&gt;.&lt;font color="#2040a0"&gt;save&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;sys&lt;/font&gt;.&lt;font color="#2040a0"&gt;stdout&lt;/font&gt;, &lt;font color="#008000"&gt;"PNG"&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Python Debugging&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;This is incredibly fragile.  I originally tried a solution I found on a mailing list and had to make tons of modification to get it running.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Wrong content type: The image/type must match with the output&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Not including the python executable path: If the top line is not setup correctly(#!/path/to/python) or is missing, it may run correctly in the command line but fail on the web&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wrong newline setup: I found I had to have exactly the number of newlines I did, most people show an additional "\r\n", but this broke mine&lt;/li&gt;&lt;br /&gt;&lt;li&gt;sys.stdout.write: This didn't work for me.  It shows up fine on the command line, but doesn't work on the Apache webserver I was using.  Use print instead.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PIL not installed:  The machine it is running on needs the &lt;a href="http://www.pythonware.com/products/pil/"&gt;Python Imaging Library&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The bad thing about most of these bugs is that they look just fine on the command line, and only fail when run on a web server.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;PHP using the GD library&lt;/H4&gt;&lt;br /&gt;&lt;div id="code"&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;&amp;#63;php&lt;br /&gt;&lt;font color="#2040a0"&gt;$my_img&lt;/font&gt; = imagecreate( 200, 200 );&lt;br /&gt;imagecolorallocate( &lt;font color="#2040a0"&gt;$my_img&lt;/font&gt;, 0, 0, 255 );&lt;br /&gt;&lt;font color="#44AA44"&gt;# Any manipulations of the image&lt;/font&gt;&lt;br /&gt;header( "Content-type: image/png" );&lt;br /&gt;imagepng( &lt;font color="#2040a0"&gt;$my_img&lt;/font&gt; );&lt;br /&gt;imagedestroy( &lt;font color="#2040a0"&gt;$my_img&lt;/font&gt; );&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;PHP Debugging&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;The only problem I've had with this is &lt;a href="http://us.php.net/manual/en/book.image.php"&gt;GD&lt;/a&gt; not being installed properly. Other than that if you can run PHP scripts you shouldn't have issues.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;This is a usefull technique but was very hard to find relevant information online, especially for Python.  This is a much better solution than saving off pictures and then pushing that to the user like I've seen alot of online.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2611990912036728148?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2611990912036728148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2611990912036728148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2611990912036728148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2611990912036728148'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/06/dynamic-web-displayed-images-python-and.html' title='Dynamic Web Displayed Images: Python and PHP'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8827418407295494057</id><published>2009-06-06T14:15:00.000-07:00</published><updated>2009-06-06T14:18:58.958-07:00</updated><title type='text'>Quilting and Embroidery Stand</title><content type='html'>More at: &lt;a href="http://devrand.org/show_item.html?item=76&amp;page=Project"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QzrGDbxJnj8/SirdA2vMw6I/AAAAAAAAApY/OZgXmd_yoOM/s1600-h/stand1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_QzrGDbxJnj8/SirdA2vMw6I/AAAAAAAAApY/OZgXmd_yoOM/s400/stand1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5344326914591736738" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8827418407295494057?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8827418407295494057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8827418407295494057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8827418407295494057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8827418407295494057'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/06/quilting-and-embroidery-stand.html' title='Quilting and Embroidery Stand'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QzrGDbxJnj8/SirdA2vMw6I/AAAAAAAAApY/OZgXmd_yoOM/s72-c/stand1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2922021165086895057</id><published>2009-06-06T14:12:00.000-07:00</published><updated>2009-06-06T14:14:48.949-07:00</updated><title type='text'>Domain Coloring Movies and X11 Display</title><content type='html'>Available at: &lt;a href="http://devrand.org/show_item.html?item=72&amp;amp;page=Project"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;C program and scripts to make movies of algorithms using complex visualization techniques&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/r6N4Wv2Z3QI&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/r6N4Wv2Z3QI&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2922021165086895057?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2922021165086895057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2922021165086895057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2922021165086895057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2922021165086895057'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/06/domain-coloring-movies-and-x11-display.html' title='Domain Coloring Movies and X11 Display'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8203459061018758919</id><published>2009-06-06T14:09:00.000-07:00</published><updated>2009-06-06T14:10:53.432-07:00</updated><title type='text'>Online Python Domain Coloring</title><content type='html'>Available at: &lt;a href="http://devrand.org/show_item.html?item=68&amp;amp;page=Project"&gt;devrand&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Complex visualization tool that runs as a simple web service&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8203459061018758919?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8203459061018758919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8203459061018758919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8203459061018758919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8203459061018758919'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/06/online-python-domain-coloring.html' title='Online Python Domain Coloring'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4902506047843744614</id><published>2009-04-25T19:15:00.000-07:00</published><updated>2009-04-25T19:18:32.255-07:00</updated><title type='text'>Image to Spectrogram</title><content type='html'>Program to take an image, convert it into a wave file that has a spectrogram that looks like the original image.&lt;br /&gt;&lt;br /&gt;As always everything is available at &lt;a href="http://devrand.org/show_item.html?item=64&amp;amp;page=Project"&gt;devrand.org.&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SfPEVV36EiI/AAAAAAAAApE/j0yqfCjalxo/s1600-h/mandel.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 272px;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SfPEVV36EiI/AAAAAAAAApE/j0yqfCjalxo/s400/mandel.png" alt="" id="BLOGGER_PHOTO_ID_5328818655037362722" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/SfPEZ9naepI/AAAAAAAAApM/zAaW0WQcnqw/s1600-h/mandelSpect.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 317px;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/SfPEZ9naepI/AAAAAAAAApM/zAaW0WQcnqw/s400/mandelSpect.png" alt="" id="BLOGGER_PHOTO_ID_5328818734425078418" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4902506047843744614?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4902506047843744614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4902506047843744614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4902506047843744614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4902506047843744614'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/04/image-to-spectrogram.html' title='Image to Spectrogram'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_QzrGDbxJnj8/SfPEVV36EiI/AAAAAAAAApE/j0yqfCjalxo/s72-c/mandel.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8119007393115370216</id><published>2009-03-31T19:50:00.000-07:00</published><updated>2009-03-31T19:55:44.549-07:00</updated><title type='text'>x^y &lt; y^x</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QzrGDbxJnj8/SdLXctzJx2I/AAAAAAAAAo8/JhFzHZ4GkfU/s1600-h/complex2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 400px;" src="http://4.bp.blogspot.com/_QzrGDbxJnj8/SdLXctzJx2I/AAAAAAAAAo8/JhFzHZ4GkfU/s400/complex2.png" alt="" id="BLOGGER_PHOTO_ID_5319550998208431970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Full writeup at &lt;a href="http://devrand.org/show_item.html?item=56&amp;amp;page=Project"&gt;devrand.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Overview:&lt;br /&gt;&lt;p&gt;Consider the following simple function:&lt;/p&gt; &lt;div id="code"&gt; if x^y &gt; y^x then color1 else color2&lt;/div&gt;&lt;br /&gt;&lt;p&gt;It produces some very strange results when trying to graph it. Although the first quadrant looks like a fairly simple pattern defined by functions &lt;b&gt;y = 1/(ax^2)&lt;/b&gt; and &lt;b&gt;y = x&lt;/b&gt;, it's actually incredibly more complicated and shown in the conclusion. All other quadrants produce even stranger patterns due to having results in complex space.&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;Also the related function &lt;b&gt;x^y - y^x&lt;/b&gt; has it's own set of interesting properties, pictured below.&lt;/p&gt;...&lt;br /&gt;snip, too lazy to repost everything, check &lt;a href="http://devrand.org/show_item.html?item=56&amp;amp;page=Project"&gt;the site&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8119007393115370216?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8119007393115370216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8119007393115370216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8119007393115370216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8119007393115370216'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/03/xy-yx.html' title='x^y &lt; y^x'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QzrGDbxJnj8/SdLXctzJx2I/AAAAAAAAAo8/JhFzHZ4GkfU/s72-c/complex2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2463401119313700029</id><published>2009-03-16T05:49:00.000-07:00</published><updated>2009-03-16T05:50:55.826-07:00</updated><title type='text'>Gentoo Bugs: Audacious and Timidity</title><content type='html'>&lt;p&gt;Same as up on my &lt;a href="http://www.devrand.org/show_item.html?item=54&amp;amp;page=Blog"&gt;site&lt;/a&gt;, just put up here since this blog gets indexed by google more often&lt;br /&gt;&lt;/p&gt;&lt;p&gt;=====&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So a couple of irritating Gentoo bugs that I recently had to deal with. Posting here and on my old blog, so hopefully anyone with similar problems can get it resolved quicker, since the portage maintainers are often slow.&lt;/p&gt;  &lt;h3&gt;Audacious DBus Error: Issue&lt;/h3&gt; &lt;p&gt;starting Audacious gives the following: &lt;/p&gt; &lt;div id="code"&gt;process 11921: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open "/var/lib/dbus/machine-id": No such file or directory See the manual page for dbus-uuidgen to correct this issue.&lt;/div&gt;  &lt;h3&gt;Audacious DBus Error: Fix&lt;/h3&gt; &lt;p&gt;Use the following command as root:&lt;/p&gt; &lt;div id="code"&gt;uuidgen | tr -d - &gt; /var/lib/dbus/machine-id&lt;/div&gt;  &lt;h3&gt;Audacious DBus Error: Reason&lt;/h3&gt; &lt;p&gt;The music player inexplicably requires a unique id to actually start up. A normal dbus install on Gentoo doesn't create the machine-id file with the id in it.&lt;/p&gt;  &lt;h3&gt;Timidity++ Service Error: Issue&lt;/h3&gt; &lt;p&gt;When trying to start timidity++ you see:&lt;/p&gt; &lt;div id="code"&gt;* Starting TiMidity++ Virtual Midi Sequencer ...                         [ !! ]&lt;/div&gt;  &lt;h3&gt;Timidity++ Service Error: Fix&lt;/h3&gt; &lt;p&gt;In /etc/init.d/timidity delete the following text:&lt;/p&gt; &lt;div id="code"&gt;--chuid timidity:nobody&lt;/div&gt;  &lt;h3&gt;Timidity++ Service Error: Reason&lt;/h3&gt; &lt;p&gt;Emerging timidity failed to give proper privledges to the created Timidity user, so this just makes it run as root (Lazy, I know). You could also try to play with adding user permissions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2463401119313700029?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2463401119313700029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2463401119313700029' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2463401119313700029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2463401119313700029'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/03/gentoo-bugs-audacious-and-timidity.html' title='Gentoo Bugs: Audacious and Timidity'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8607093493917367255</id><published>2009-01-17T14:02:00.000-08:00</published><updated>2009-01-18T12:26:38.130-08:00</updated><title type='text'>OMGWTFRNG</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QzrGDbxJnj8/SXOQdwcNH8I/AAAAAAAAAog/cDjK8Lr2WfE/s1600-h/randomComparison.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_QzrGDbxJnj8/SXOQdwcNH8I/AAAAAAAAAog/cDjK8Lr2WfE/s400/randomComparison.jpg" alt="" id="BLOGGER_PHOTO_ID_5292732827984273346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A somewhat overboard set of tools to generate random numbers.&lt;br /&gt;&lt;br /&gt;Uses:&lt;br /&gt;* AES RNG&lt;br /&gt;* Clock Drift&lt;br /&gt;* Atmospheric Data from the web&lt;br /&gt;* /dev/random&lt;br /&gt;&lt;br /&gt;and XORs them all together.&lt;br /&gt;&lt;br /&gt;A detailed write-up and all the source code can be found on &lt;a href="http://devrand.org/show_item.html?item=46&amp;amp;page=Project"&gt;devrand.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8607093493917367255?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8607093493917367255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8607093493917367255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8607093493917367255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8607093493917367255'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2009/01/omgwtfrng.html' title='OMGWTFRNG'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QzrGDbxJnj8/SXOQdwcNH8I/AAAAAAAAAog/cDjK8Lr2WfE/s72-c/randomComparison.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4376123021625851100</id><published>2008-11-01T07:14:00.000-07:00</published><updated>2008-11-01T07:15:55.549-07:00</updated><title type='text'>Bitfield tutorial</title><content type='html'>How to use bitfields and alot of the problems with them.  Mainly focusing on endianess issues and internal memory management ( Such as padding to word boundaries ).&lt;br /&gt;&lt;br /&gt;Full writeup can be found at &lt;a href="http://devrand.org/show_item.html?item=42&amp;amp;page=Tutorial"&gt;devrand&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4376123021625851100?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4376123021625851100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4376123021625851100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4376123021625851100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4376123021625851100'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/11/bitfield-tutorial.html' title='Bitfield tutorial'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6682174121002153792</id><published>2008-08-31T09:15:00.000-07:00</published><updated>2009-05-25T05:06:22.307-07:00</updated><title type='text'>Electrolytic Brass Etching</title><content type='html'>Detailed writeup of how to etch brass using a galvanic etching process.  Full details and writeup can be found at &lt;a href="http://devrand.org/show_item.html?item=40&amp;amp;page=Project"&gt;devrand.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrOavWqDWI/AAAAAAAAAdc/xyL8Tl2pv3I/s1600-h/full_etch0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrOavWqDWI/AAAAAAAAAdc/xyL8Tl2pv3I/s400/full_etch0.jpg" alt="" id="BLOGGER_PHOTO_ID_5240728075182411106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrOV02bztI/AAAAAAAAAdU/jku3Z2dNTLw/s1600-h/full_etch1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrOV02bztI/AAAAAAAAAdU/jku3Z2dNTLw/s400/full_etch1.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727990758526674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QzrGDbxJnj8/SLrON1jyMRI/AAAAAAAAAdM/QOnsLdGieR0/s1600-h/full_etch2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_QzrGDbxJnj8/SLrON1jyMRI/AAAAAAAAAdM/QOnsLdGieR0/s400/full_etch2.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727853509783826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrOGu8E5xI/AAAAAAAAAdE/1Pz3hT0_2uM/s1600-h/full_etch3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrOGu8E5xI/AAAAAAAAAdE/1Pz3hT0_2uM/s400/full_etch3.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727731473540882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrN9pPantI/AAAAAAAAAc8/TS8CBZ6V4aE/s1600-h/full_etch4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrN9pPantI/AAAAAAAAAc8/TS8CBZ6V4aE/s400/full_etch4.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727575325220562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrN4HNkxkI/AAAAAAAAAc0/A72pnz1QpMM/s1600-h/full_etch5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrN4HNkxkI/AAAAAAAAAc0/A72pnz1QpMM/s400/full_etch5.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727480291345986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrNvIPYMqI/AAAAAAAAAcs/OTHYPEhNPV4/s1600-h/full_etch7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrNvIPYMqI/AAAAAAAAAcs/OTHYPEhNPV4/s400/full_etch7.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727325948523170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QzrGDbxJnj8/SLrNqML35pI/AAAAAAAAAck/DoGIGTAeQ4o/s1600-h/full_etch6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_QzrGDbxJnj8/SLrNqML35pI/AAAAAAAAAck/DoGIGTAeQ4o/s400/full_etch6.jpg" alt="" id="BLOGGER_PHOTO_ID_5240727241108219538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrMntgGnsI/AAAAAAAAAcc/u3w1fedVUQ0/s1600-h/full_etch8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrMntgGnsI/AAAAAAAAAcc/u3w1fedVUQ0/s400/full_etch8.jpg" alt="" id="BLOGGER_PHOTO_ID_5240726099000204994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrETiUAUuI/AAAAAAAAAcU/iq_BTjGGfyo/s1600-h/full_etch9.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_QzrGDbxJnj8/SLrETiUAUuI/AAAAAAAAAcU/iq_BTjGGfyo/s400/full_etch9.jpg" alt="" id="BLOGGER_PHOTO_ID_5240716956306264802" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6682174121002153792?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6682174121002153792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6682174121002153792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6682174121002153792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6682174121002153792'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/08/full-electrolytic-brass-etching.html' title='Electrolytic Brass Etching'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_QzrGDbxJnj8/SLrOavWqDWI/AAAAAAAAAdc/xyL8Tl2pv3I/s72-c/full_etch0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5338902635031254378</id><published>2008-05-04T08:35:00.000-07:00</published><updated>2008-05-04T08:39:20.436-07:00</updated><title type='text'>Irritating IKEA Light</title><content type='html'>More info can be found on &lt;a href="http://devrand.org/show_item.html?item=34&amp;amp;page=Blog"&gt;devrand.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YZ3rc4AI/AAAAAAAAAcM/QGHd9zo5plE/s1600-h/light2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YZ3rc4AI/AAAAAAAAAcM/QGHd9zo5plE/s400/light2.jpg" alt="" id="BLOGGER_PHOTO_ID_5196547484009947138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YU3rc3_I/AAAAAAAAAcE/YSoA-7wOaiM/s1600-h/light1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YU3rc3_I/AAAAAAAAAcE/YSoA-7wOaiM/s400/light1.jpg" alt="" id="BLOGGER_PHOTO_ID_5196547398110601202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YP3rc3-I/AAAAAAAAAb8/TjqSD-QU9D8/s1600-h/light0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/SB3YP3rc3-I/AAAAAAAAAb8/TjqSD-QU9D8/s400/light0.jpg" alt="" id="BLOGGER_PHOTO_ID_5196547312211255266" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5338902635031254378?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5338902635031254378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5338902635031254378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5338902635031254378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5338902635031254378'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/05/irritating-ikea-light.html' title='Irritating IKEA Light'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/SB3YZ3rc4AI/AAAAAAAAAcM/QGHd9zo5plE/s72-c/light2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4536774319846034177</id><published>2008-05-04T08:06:00.000-07:00</published><updated>2008-05-04T08:11:16.480-07:00</updated><title type='text'>rss feeds</title><content type='html'>Created some basic RSS feeds to monitor content and comments:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devrand.org/devrand.rss"&gt;devrand.rss&lt;/a&gt;&lt;br /&gt;&lt;a href="http://devrand.org/comments.rss"&gt;comments.rss&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More info can be found at &lt;a href="http://devrand.org/show_item.html?item=36&amp;page=News"&gt;devrand.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4536774319846034177?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4536774319846034177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4536774319846034177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4536774319846034177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4536774319846034177'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/05/rss-feeds.html' title='rss feeds'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-9089811264615819621</id><published>2008-04-13T13:50:00.000-07:00</published><updated>2008-04-13T13:51:47.438-07:00</updated><title type='text'>Dual Message Encryption</title><content type='html'>More information and the actual code can be found at &lt;a href="http://devrand.org/show_item.html?item=30&amp;amp;page=Project"&gt;devrand.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Overview&lt;/h3&gt; &lt;p&gt;This program will take 2 files and 2 keys and spits out one large encrypted file(It was made after a discussing &lt;a href="http://arstechnica.com/news.ars/post/20071001-uk-can-now-demand-data-decryption-on-penalty-of-jail-time.html"&gt;this article&lt;/a&gt; with a friend). You can use this data to retrieve either one file or the other depending on which key you give it. The encrypted data is interleaved with each other, so no message's encryption is stronger than the other. The secrecy of the message is determined by how strong the method is for hashing from the key given, in this implementation it should be equivalent to brute forcing a 128bit key. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-9089811264615819621?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/9089811264615819621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=9089811264615819621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/9089811264615819621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/9089811264615819621'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/04/dual-message-encryption.html' title='Dual Message Encryption'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2873970875714333275</id><published>2008-04-13T13:47:00.000-07:00</published><updated>2008-04-13T13:52:34.373-07:00</updated><title type='text'>Java Network File Transfer Tool</title><content type='html'>&lt;span style="font-size:100%;"&gt;Actual code and more details can be found at &lt;a href="http://devrand.org/show_item.html?item=29&amp;amp;page=Project"&gt;devrand.org&lt;/a&gt;&lt;/span&gt;&lt;h3&gt;Overview&lt;/h3&gt;&lt;p&gt;This is a program that allows transferring files over a network from the client to the server. It is part of my prep work for a P2P app I'm slowly working on. It tries to do everything 'correctly', such as buffered socket connections transfer and writing of large blocks at a time, etc. So it is larger than you'd think for a relatively simple task.&lt;/p&gt;&lt;p&gt;&lt;a href="http://devrand.org/show_item.html?item=29&amp;amp;page=Project"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2873970875714333275?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2873970875714333275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2873970875714333275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2873970875714333275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2873970875714333275'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/04/java-network-file-transfer-tool.html' title='Java Network File Transfer Tool'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2310078096403656364</id><published>2008-04-07T18:36:00.001-07:00</published><updated>2008-04-07T18:38:18.714-07:00</updated><title type='text'>Solenoid Lock</title><content type='html'>Updating writeup and schematic on &lt;a href="http://devrand.org/"&gt;devrand.org&lt;/a&gt; for the solenoid lock project&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R_rMXqDZfzI/AAAAAAAAAb0/XjAnj9WLi_E/s1600-h/solenoid.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R_rMXqDZfzI/AAAAAAAAAb0/XjAnj9WLi_E/s400/solenoid.jpg" alt="" id="BLOGGER_PHOTO_ID_5186682627668148018" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2310078096403656364?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2310078096403656364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2310078096403656364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2310078096403656364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2310078096403656364'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/04/solenoid-lock.html' title='Solenoid Lock'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R_rMXqDZfzI/AAAAAAAAAb0/XjAnj9WLi_E/s72-c/solenoid.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4823132174893277614</id><published>2008-03-21T14:38:00.000-07:00</published><updated>2008-03-21T14:53:17.750-07:00</updated><title type='text'>Ricky Retardo -- Basic Robot Undercarriage</title><content type='html'>Starting construction on my autonomous robot, more info can be found at &lt;a href="http://devrand.org/show_item.html?item=10&amp;amp;page=Blog"&gt;devrand.org&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R-Qrd6DZfvI/AAAAAAAAAbU/vosya3dq4Wk/s1600-h/RickyZero0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R-Qrd6DZfvI/AAAAAAAAAbU/vosya3dq4Wk/s400/RickyZero0.jpg" alt="" id="BLOGGER_PHOTO_ID_5180313264182623986" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R-QrlqDZfwI/AAAAAAAAAbc/FY8ZU22Tg4Q/s1600-h/RickyZero1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R-QrlqDZfwI/AAAAAAAAAbc/FY8ZU22Tg4Q/s400/RickyZero1.jpg" alt="" id="BLOGGER_PHOTO_ID_5180313397326610178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-05616055642861286 visible ontop" href="http://www.youtube.com/v/ZRDNruHumAM"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-05616055642861286 visible ontop" href="http://www.youtube.com/v/ZRDNruHumAM"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-05616055642861286 visible ontop" href="http://www.youtube.com/v/ZRDNruHumAM"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-05616055642861286 visible ontop" href="http://www.youtube.com/v/ZRDNruHumAM"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/ZRDNruHumAM"&gt;  &lt;embed src="http://www.youtube.com/v/ZRDNruHumAM" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4823132174893277614?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4823132174893277614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4823132174893277614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4823132174893277614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4823132174893277614'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/03/ricky-retardo-basic-robot-undercarriage.html' title='Ricky Retardo -- Basic Robot Undercarriage'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/R-Qrd6DZfvI/AAAAAAAAAbU/vosya3dq4Wk/s72-c/RickyZero0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3806000987300547055</id><published>2008-03-18T15:16:00.000-07:00</published><updated>2008-03-18T15:29:03.427-07:00</updated><title type='text'>Galvanic Etching Test</title><content type='html'>More about it on my blog on &lt;a href="http://devrand.org/show_item.html?item=8&amp;amp;page=Blog"&gt;devrand&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R-A_lLqsFOI/AAAAAAAAAbA/8OVFtT2Acxo/s1600-h/IMG_1850.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R-A_lLqsFOI/AAAAAAAAAbA/8OVFtT2Acxo/s400/IMG_1850.JPG" alt="" id="BLOGGER_PHOTO_ID_5179209479495619810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R-A_1bqsFPI/AAAAAAAAAbI/Xqdfxi5y5-g/s1600-h/IMG_1855.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R-A_1bqsFPI/AAAAAAAAAbI/Xqdfxi5y5-g/s400/IMG_1855.JPG" alt="" id="BLOGGER_PHOTO_ID_5179209758668494066" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3806000987300547055?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3806000987300547055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3806000987300547055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3806000987300547055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3806000987300547055'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/03/galvanic-etching-test.html' title='Galvanic Etching Test'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/R-A_lLqsFOI/AAAAAAAAAbA/8OVFtT2Acxo/s72-c/IMG_1850.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1159408212286403055</id><published>2008-03-13T12:48:00.000-07:00</published><updated>2008-03-16T04:29:14.568-07:00</updated><title type='text'>New website</title><content type='html'>I'm officially going to move operations over to my new site.  I plan to still update here, probably mirror the blog content.  Have alot to do like set up e-mail, actually put something up, etc, but shouldn't be too difficult.&lt;br /&gt;&lt;br /&gt;I went with &lt;a href="http://www.blogger.com/nearlyfreespeech.net"&gt;nearlyfreespeech&lt;/a&gt; for hosting and DNS management since I've heard really good things about them, I've not had an issue so far.&lt;br /&gt;&lt;br /&gt;The website is:&lt;br /&gt;&lt;a href="http://devrand.org/"&gt;devrand.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and alternately&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devrand.nfshost.com/"&gt;devrand.nfshost.com&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R9mJfrqsFLI/AAAAAAAAAaw/FCDSphBH60A/s1600-h/header.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1159408212286403055?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1159408212286403055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1159408212286403055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1159408212286403055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1159408212286403055'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/03/new-website.html' title='New website'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1415915963798353726</id><published>2008-03-05T03:35:00.000-08:00</published><updated>2008-03-05T04:04:08.226-08:00</updated><title type='text'>General Update</title><content type='html'>Another couple of busy weeks that have been hindering my project progress.  Finally got a video of Blinkenlight up though.  I've mainly been working on building a small autonomous robot.  I was able to get the following parts going:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;H-bridge based DC motor driver&lt;/li&gt;&lt;li&gt;Rechargeable power supply&lt;/li&gt;&lt;li&gt;Basic microcontroller setup&lt;/li&gt;&lt;li&gt;A chassis from an old lamp with a custom done under carriage made from a PSU's ventilation gratings for attaching parts.&lt;/li&gt;&lt;/ul&gt;I also made a wheel with a hole saw, and a coupler out of an oak dowel rod, but this seems to be where I'm currently stuck.  Hooking it up to the motor works fine, and it gets tons of speed, enough that if I put it on loosely it will actually get lift(The rotation is a tad uneven) and go flying off.  But if I put that on the ground it won't budge an inch.  My current guess is I need some sort of gearing to gradually step up the torque, but this is still a total guess.&lt;br /&gt;&lt;br /&gt;My current ideas are(From most reasonable to less reasonable):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Buy a cheapy RC car from Wally World or some other bargain store and grab it's wheel assembly(Just kinda seems like cheating to me)&lt;/li&gt;&lt;li&gt;Try to use a belt system to drive it.  (Seems like it would quickly get too big for the chassis)&lt;/li&gt;&lt;li&gt;Get a &lt;a href="http://www.harborfreight.com/cpi/ctaf/Displayitem.taf?itemnumber=44991"&gt;mill&lt;/a&gt; and try to machine a solution myself. (Mills are expensive and even if I had one it would take forever to be good enough to make anything useful if I didn't CNC it).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1415915963798353726?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1415915963798353726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1415915963798353726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1415915963798353726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1415915963798353726'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/03/general-update.html' title='General Update'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4475425425003157430</id><published>2008-02-18T15:51:00.000-08:00</published><updated>2008-03-07T03:53:17.309-08:00</updated><title type='text'>Blinkenlight</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Overview:&lt;/span&gt; Basically this is a PIC based light flasher that uses temperature as input.  It has several states it can drive the two lights(Power/HDD): Brightness/Random, Blink synchronously, Pulse synchronously, Blink Alternating, Pulse Alternating, Brightness Both, Pulse/Random, Trigger(1 light on if it's hot, 2 on if it's really hot).  A state is picked psuedo-randomly at startup based on the last 3 LSBs computed from the analog input of the thermistor.  The states can be cycled through by pressing the reset button on the computer, and every other one is off(So it's easy to stop the blinking).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Software:&lt;/span&gt;&lt;br /&gt;The program is pretty simple.  It has 2 threads, a main one to deal with the lights and convert analog values, the other is for monitoring switch presses(I didn't use button interrupts like I should have).  There is some bit fiddling to guestimate a speed, and this would change significantly with a different thermistor.  Also my alternating states suck, and I didn't feel like desoldering to fix them.  The problem is the computer's LEDs are bigger than the ones I was testing with, so the alternating algorithm always makes one weaker looking.   The random flashing patterns are made using some modulus magic and adding variations using the analog input.  The MCC18 code can be downloaded &lt;a href="http://rotngreentest.googlepages.com/mainBlinken.c"&gt;here&lt;/a&gt;, and the hex can be obtained &lt;a href="http://rotngreentest.googlepages.com/blinkenlight.hex"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Electronics:&lt;/span&gt;&lt;br /&gt;Parts:&lt;br /&gt;* &lt;a href="http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1335&amp;amp;dDocName=en010280"&gt;PIC18F2550&lt;/a&gt;&lt;br /&gt;* 4.7 Kohms Resistor&lt;br /&gt;* 1 Kohm resistor&lt;br /&gt;* 220 Ohm resistor -- should match close to the thermistor, give or take for adjustment&lt;br /&gt;* 7.200 Oscillator(Could be about any, although speeds would need adjusted)&lt;br /&gt;* 3 sets of pins to hook up connectors (Salvaged from an old computer)&lt;br /&gt;* &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=PNT109-ND"&gt;300 Ohm Thermistor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Schematic:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R7oT_L2ABjI/AAAAAAAAAaY/keRNbCVb5nY/s1600-h/blinkenlight.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R7oT_L2ABjI/AAAAAAAAAaY/keRNbCVb5nY/s400/blinkenlight.jpg" alt="" id="BLOGGER_PHOTO_ID_5168465498593035826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I ended up using 2 boards, one that just held the thermisistor and could plug into a spare slot under the CPU, picture below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R7oUdL2ABkI/AAAAAAAAAag/TJsHctZvvxc/s1600-h/IMG_1778.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R7oUdL2ABkI/AAAAAAAAAag/TJsHctZvvxc/s400/IMG_1778.JPG" alt="" id="BLOGGER_PHOTO_ID_5168466013989111362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Everything hooked up:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R7oUuL2ABlI/AAAAAAAAAao/pzYSDkfLEi0/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R7oUuL2ABlI/AAAAAAAAAao/pzYSDkfLEi0/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5168466306046887506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Running at a slightly warm temperature:&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vqwtzD5fQYI"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vqwtzD5fQYI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4475425425003157430?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4475425425003157430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4475425425003157430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4475425425003157430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4475425425003157430'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/blinkenlight.html' title='Blinkenlight'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/R7oT_L2ABjI/AAAAAAAAAaY/keRNbCVb5nY/s72-c/blinkenlight.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-952625740711579184</id><published>2008-02-08T09:00:00.000-08:00</published><updated>2008-02-08T12:02:06.876-08:00</updated><title type='text'>Solenoid Lock -- Overview</title><content type='html'>First let me preface this by saying if anyone stumbles upon this who isn't friends or family, this was my first attempt at a real hardware hack, so be gentle ;)&lt;br /&gt;&lt;br /&gt;Overview:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Basically it locks a door using a pull type solenoid.  Pretty simple, the only caveat is that I wanted to use the doorknob as a combo lock.  So it works by turning the knob until you see the appropriate number, holding it on that number(The period next to it lights up when it's considered inputted), and keep doing this for all numbers in the combo.  Once it's done correctly the lock opens.&lt;/li&gt;&lt;li&gt;I did make a much &lt;a href="http://gavinblack.blogspot.com/2008/01/wireless-solenoid-locked-door.html"&gt;simpler version&lt;/a&gt; as an intermediary, that I think anyone could do in a couple hours.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Parts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gavinblack.blogspot.com/2008/02/solenoid-lock-electronics.html"&gt;Electronics &lt;/a&gt;-- This consists mainly of the display, relay, power, solenoid, and a PIC to drive the whole thing.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gavinblack.blogspot.com/2008/02/solenoid-lock-hardware.html"&gt;Hardware &lt;/a&gt;-- This is a modification to the door handle to have it turn a trim-pot and an eye bolt used to catch the solenoid's piston.&lt;/li&gt;&lt;/ul&gt;The Good:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It works without any problems.  Doorknob is responsive, locks solidly, and will allow you to unlock it twice in succession with a single correct password(So it can be shut again)&lt;/li&gt;&lt;li&gt;Minimal damage to the door, only required 2 small screws into the frame to hold up the solenoid.&lt;/li&gt;&lt;/ul&gt;The Bad:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Three power supplies!  It could easily be done with 2, I just didn't find one lying around that matched what I needed.  I'm sure there is a way to do just 1, but I didn't spend enough time get it.&lt;/li&gt;&lt;li&gt;The trim-pot is held on with hot glue, which I don't trust but hasn't given me trouble so far&lt;/li&gt;&lt;/ul&gt;The Ugly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The wiring is horrendous, since it has wires sticking out from the door, to the wall, and too the door handle from the inside.  I used a phone jack even to plug the PIC into the trim-pot, adding to the mess further.  It's all tucked away fairly neatly now(Except the phone wire), but is still horrible.&lt;/li&gt;&lt;/ul&gt;Future Improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hook up the trim pot by using something that clamps to the sides, instead of keying a dowel and gluing it on.&lt;/li&gt;&lt;li&gt;Put everything inside the door itself so it looks much neater.  This would mean swapping the positions of the solenoid and the eye screw.  I didn't want to harm the door itself is why I didn't do this, since it is the 'correct' solution.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use 2 solenoids so it could be defeated by simple removing the hinges&lt;/li&gt;&lt;li&gt;Use one power supply&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There is a video of it running below, the password being used is 1B50.  It is hard to tell what's going on unfortunately since the control box is on the ground :(&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-08556799263475126 visible ontop" href="http://www.youtube.com/v/fSYXplhN-IU"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-08556799263475126 visible ontop" href="http://www.youtube.com/v/fSYXplhN-IU"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-09373579626522023 visible ontop" href="http://www.youtube.com/v/fSYXplhN-IU"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-004878900338682868 visible ontop" href="http://www.youtube.com/v/fSYXplhN-IU"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/fSYXplhN-IU"&gt;  &lt;embed src="http://www.youtube.com/v/fSYXplhN-IU" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-952625740711579184?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/952625740711579184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=952625740711579184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/952625740711579184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/952625740711579184'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/solenoid-lock-overview.html' title='Solenoid Lock -- Overview'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4341812784762202096</id><published>2008-02-07T20:59:00.000-08:00</published><updated>2008-02-07T16:02:44.075-08:00</updated><title type='text'>Solenoid Lock -- Hardware</title><content type='html'>The bulk of the hardware construction is covered in the &lt;a href="http://gavinblack.blogspot.com/2008/01/wireless-solenoid-locked-door.html"&gt;wireless lock writeup&lt;/a&gt;.  I'll only cover the additional steps needed below:&lt;br /&gt;&lt;br /&gt;New Parts:&lt;br /&gt;&gt; Square dowel that will fit into the door knob.&lt;br /&gt;&gt; Trim-pot(See &lt;a href="http://gavinblack.blogspot.com/2008/02/solenoid-lock-electronics.html"&gt;electronics section&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;New tools:&lt;br /&gt;&gt; Needle nosed pliers&lt;br /&gt;&gt; Hot glue gun&lt;br /&gt;&gt;  Sanding drum for Dremel&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The door handle must be modified, since it only allows 90 degrees of freedom, and a standard trim pot is usually just shy of a full 180. It's 'simply' bending anything that hits the side upwards till it doesn't hit.  This includes 2 spring ends and 2 metal tabs.  I used normal needle nosed pliers and a flat tip screwdriver and got it with not too much effort.  Pic below:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R6uUwhCYMiI/AAAAAAAAAaA/g6-Oq22nlco/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R6uUwhCYMiI/AAAAAAAAAaA/g6-Oq22nlco/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5164384958933381666" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Next a dowel needs to be cut to fit to the proper length.  Should be enough to mount the trimpot inside the metal and then have it be snug against  There is a picture further down when I discuss gluing that shows this better.  Below is a picture of the dowel in the door(I was retarded and had to shape a circular one to work), it's sticking out a little just so I could feel how tight it was in the handle:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R6uUnhCYMhI/AAAAAAAAAZ4/b3Wu7CRUoTo/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R6uUnhCYMhI/AAAAAAAAAZ4/b3Wu7CRUoTo/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5164384804314558994" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;This is the most difficult part IMO, since it's prone to screwing up, and helps if done correctly.  The end of the dowel needs to be carved to fit into the trim pot.  For example if your trim pot has a straight slit for a flat tip screwdriver then you need to carve something roughly resembling a flat tip head on the dowel.  I used a Dremel sanding tool to to this.  In the end you should be able to control the potentiometer with the dowel.&lt;/li&gt;&lt;li&gt;Next glue the Dowel onto the trimpot, you'll have to take off the door handle assembly entirely for this to get it straight.  I originally tried epoxy but it didn't stick to the trimpot plastic so I went with hot glue which worked well.  Picture of it 'clamped' up below:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6uarRCYMjI/AAAAAAAAAaI/4Z3FEL8ruNU/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6uarRCYMjI/AAAAAAAAAaI/4Z3FEL8ruNU/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5164391465808835122" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Solder up wiring to the trim pot for later use since it will be hard to get to after it's in place.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Finally put it all back on the door.  You can no longer put in the latch(The middle section) since it also hinders rotation.  The dowel should slide into the handle, and turning the handle should now turn the trim pot. &lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4341812784762202096?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4341812784762202096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4341812784762202096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4341812784762202096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4341812784762202096'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/solenoid-lock-hardware.html' title='Solenoid Lock -- Hardware'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R6uUwhCYMiI/AAAAAAAAAaA/g6-Oq22nlco/s72-c/3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8881853089019410044</id><published>2008-02-07T15:11:00.000-08:00</published><updated>2008-02-07T15:26:06.914-08:00</updated><title type='text'>Workshop</title><content type='html'>I think I've about finished up my workshop for at least the short-term future(Still need to add some little sorting drawers for small ECE parts though).   It's made from an Ikea storage shelving system(Cheaper and better material than buying the raw parts separately from a home improvement store).  I made some simple mitered angles to attach it to the banister, so it's sturdy and extended the main table using a couple of old bed slats as legs(Cut a groove down the middle to snap them into the metal part of the shelf).  Also added some pegs to the sides to hold stuff like wire, found a simple way   of doing it by just taking a dowel and rotating a circular Dremel sanding bit over one end till it was thin enough to be hammered in.&lt;br /&gt;&lt;br /&gt;Pics below:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R6uRfhCYMcI/AAAAAAAAAZQ/2WcmwYzVNfg/s1600-h/IMG_1767.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R6uRfhCYMcI/AAAAAAAAAZQ/2WcmwYzVNfg/s400/IMG_1767.JPG" alt="" id="BLOGGER_PHOTO_ID_5164381368340722114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6uR0RCYMdI/AAAAAAAAAZY/hBEqoQBJkBI/s1600-h/IMG_1768.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6uR0RCYMdI/AAAAAAAAAZY/hBEqoQBJkBI/s400/IMG_1768.JPG" alt="" id="BLOGGER_PHOTO_ID_5164381724823007698" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6uS1RCYMeI/AAAAAAAAAZg/XAYJPKe0zZc/s1600-h/IMG_1770.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6uS1RCYMeI/AAAAAAAAAZg/XAYJPKe0zZc/s400/IMG_1770.JPG" alt="" id="BLOGGER_PHOTO_ID_5164382841514504674" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6uTPRCYMfI/AAAAAAAAAZo/2Kbh0WWAkcM/s1600-h/IMG_1772.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6uTPRCYMfI/AAAAAAAAAZo/2Kbh0WWAkcM/s400/IMG_1772.JPG" alt="" id="BLOGGER_PHOTO_ID_5164383288191103474" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8881853089019410044?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8881853089019410044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8881853089019410044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8881853089019410044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8881853089019410044'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/workshop.html' title='Workshop'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R6uRfhCYMcI/AAAAAAAAAZQ/2WcmwYzVNfg/s72-c/IMG_1767.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8411131611104192904</id><published>2008-02-03T05:08:00.000-08:00</published><updated>2008-02-03T13:49:38.951-08:00</updated><title type='text'>Wireless Solenoid Locked Door</title><content type='html'>A cheaper($20-35 depending on what's lying around) and simpler version of my solenoid locked closet door:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parts:&lt;/span&gt; &lt;ul&gt;&lt;li&gt; &lt;a href="http://www.allelectronics.com/cgi-bin/item/SOL-58/search/24_VDC_PULL-TYPE_SOLENOID_.html"&gt;Cheap pull type solenoid&lt;/a&gt; -- $2&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.amazon.com/SVAT-WRC101-Wireless-Outdoor-Control/dp/B000HAVVKG"&gt;Wireless Control &lt;/a&gt;-- $15&lt;/li&gt;&lt;li&gt; Scrap wood(I used furring boards) -- $2&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.amazon.com/3-16X1-1-2-EYE-BOLT/dp/B0002FQK3O/ref=sr_1_3?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1201353326&amp;amp;sr=1-3"&gt;Eye bolt&lt;/a&gt;, 2 nuts, and 2 lock washers-- $2&lt;/li&gt;&lt;li&gt;Small machine screw and nut -- $1&lt;/li&gt;&lt;li&gt;Spare wire(I used speaker wire) -- Hopefully free or about $2&lt;br /&gt;&lt;/li&gt;&lt;li&gt; A pair of 2 inch wood screws -- Hopfully free, since they are hard to find without getting a $5 box&lt;/li&gt;&lt;li&gt; Scrap metal(I used the casing of an old PSU) -- Free hopefully&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&amp;amp;storeId=10001&amp;amp;catalogId=10001&amp;amp;productId=206957&amp;amp;pa=206957PS"&gt;12-24V 1A Power supply&lt;/a&gt; -- Hopefully free, salvaged mine from an old printer, else $10&lt;/li&gt;&lt;li&gt; Extension cord(Only needed if what you are adding the lock to doesn't have a power plugin inside) -- $2&lt;/li&gt;&lt;li&gt;Electrical tape -- $1&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-weight: bold;"&gt;Tools:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Powerful Hand Drill or Drill press&lt;/li&gt;&lt;li&gt; Soldering iron and solder&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Assorted drill bits&lt;/li&gt;&lt;li&gt; Dremel with metal cutting blades&lt;/li&gt;&lt;li&gt; Philips screw driver&lt;/li&gt;&lt;li&gt; Some sort of saw(Hack, back, miter, band, table any will work)&lt;/li&gt;&lt;li&gt; Clamp&lt;/li&gt;&lt;li&gt; Pliers&lt;/li&gt;&lt;li&gt;Flashlight&lt;/li&gt;&lt;li&gt; Marker or pencil&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Safety:&lt;ul&gt;&lt;li&gt; 1 Amp is more than enough current to kill a person.  Thankfully the voltage is low so it shouldn't penetrate the skin.  Don't be dumb and work with it while wet or &lt;a href="http://www.darwinawards.com/darwin/darwin1999-50.html"&gt;jam it into your body&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; Thin non-clamped metal + Powerful drill = Spinning razor blade of death.  Seriously clamp it down before drilling or the drill(Especially with larger bits) will grab it and spin it around.  Same goes for small pieces of wood, although they aren't nearly as dangerous.  This is from experience.&lt;/li&gt;&lt;li&gt; Solenoids can get hot enough to partially melt themselves!  Do not leave intermittent duty ones on, or repeatedly pump them.  Also don't put them near anything flammable.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Electronics&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Strip the ends of your speaker wire, and then solder it onto the solenoid's leads.  Secure with electrical tape.&lt;/li&gt;&lt;li&gt;Strip the ends of your power supply and solder on the speaker wire.  Secure with electrical tape.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Next cut a block of wood.  It should be big enough to put your solenoid onto, but not much bigger.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drill a large hole near the top, where you want the piston of the solenoid to stop.  This should be big enough for your machine screw to fit completely through(Including the head).&lt;/li&gt;&lt;li&gt;Put the machine screw on the solenoid loosely.&lt;/li&gt;&lt;li&gt;Mount the solenoid through the wood onto the door frame, leave off the piston for now.  Make sure you've already routed through the machine screw. There should be a total of three screws(2 into the wall and the machine screw to stop it).  A finished picture of the mount is below:&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6YzZhCYMbI/AAAAAAAAAZI/h9L9Oschl4w/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6YzZhCYMbI/AAAAAAAAAZI/h9L9Oschl4w/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5162870536284942770" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Now put in the piston(You will probably have to loosen the machine screw).  To tighten the machine screw, hold the tip of the thread with pliers and rotate the hex nut(Hand tight should be fine).  You have to do this since you can't reach the back of the screw anymore.&lt;/li&gt;&lt;li&gt;Finally plug everything into the wireless control, which should be inside the closet one way or another.  Turn it on and the solenoid should depress.  Turn it off fairly shortly afterwards to&lt;/li&gt;&lt;li&gt;Video of the electronics working:&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/JVVHqWXUHMs"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/JVVHqWXUHMs" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hardware&lt;/li&gt;&lt;ul&gt;&lt;li&gt;First take apart the door knob in question. There should be three parts the inside handle, outside handle, and latch. Also 4 screws, 2 for the latch and 2 for the knob. We won't be needing the the inside door knob so store it away.   Put the front and the latch back in place.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Take the scrap metal and bend it so it is across the doorknob hole and where the latch is.  Mark where the 4 screw holes are.&lt;/li&gt;&lt;li&gt;Drill out the 4 holes, then screw on the plate to the door.  Remember to clamp it down since it can easily spin around and cut you.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Next we need to figure out where to mount the eye screw.  I found it easiest to put it on the solenoid piston, then go in and shut the closet(With the flashlight and a pencil) and then mark where the eye beam would hit the metal.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Take back off the metal and drill the new hole.&lt;/li&gt;&lt;li&gt;Put in the eye screw and lock it down with the bolts and lock washers.  If you are like me and don't have lock washers, or just want to make sure it stays you can use epoxy instead.&lt;/li&gt;&lt;li&gt;Remount the metal piece.  It may bend a bit due to the bolt sticking out a tad behind it.  Picture of it mounted(Note: The large center hole isn't needed) :&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;               &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R6YygBCYMaI/AAAAAAAAAZA/JIUDw8qEwLs/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R6YygBCYMaI/AAAAAAAAAZA/JIUDw8qEwLs/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5162869548442464674" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Get inside the closet again to make any final adjustments so it will latch properly when shut.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After that you are finished.  Simply hit On to open or close the door and Off to relock it.&lt;/li&gt;&lt;li&gt;Below is a video of everything working together:&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07207118772134894 visible ontop" href="http://www.youtube.com/v/x1i0JPS41bs"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07207118772134894 visible ontop" href="http://www.youtube.com/v/x1i0JPS41bs"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07207118772134894 visible ontop" href="http://www.youtube.com/v/x1i0JPS41bs"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07207118772134894 visible ontop" href="http://www.youtube.com/v/x1i0JPS41bs"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07207118772134894 visible ontop" href="http://www.youtube.com/v/x1i0JPS41bs"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/x1i0JPS41bs"&gt;  &lt;embed src="http://www.youtube.com/v/x1i0JPS41bs" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8411131611104192904?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8411131611104192904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8411131611104192904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8411131611104192904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8411131611104192904'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/wireless-solenoid-locked-door.html' title='Wireless Solenoid Locked Door'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/R6YzZhCYMbI/AAAAAAAAAZI/h9L9Oschl4w/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4003711579528516027</id><published>2008-02-02T20:49:00.000-08:00</published><updated>2008-02-08T03:57:54.120-08:00</updated><title type='text'>Solenoid Lock -- Electronics</title><content type='html'>The construction of the solenoid lock electronics.  Cost under $10 with part of a bigger order(Unless you can't scrounge up your own power supplies).  The most expensive part is the relay.&lt;br /&gt;&lt;br /&gt;Parts:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/TPK-100/search/100_OHM_TRIMPOT_.html"&gt;Cheap Trimpot&lt;/a&gt;, ohm rating doesn't matter as long as it goes from zero resistance to pretty much a short&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=LM7805CT-ND"&gt;LM7805 -- Linear regulator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/PS-537/480/5VDC_3.7A_SWITCHING_POWER_SUPPLY_.html"&gt;Power supply for the microcontroller&lt;/a&gt;, needs to have around 300 mA of current.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&amp;amp;storeId=10001&amp;amp;catalogId=10001&amp;amp;productId=206957&amp;amp;pa=206957PS"&gt;Power supply for solenoid&lt;/a&gt;, needs about an amp of current and roughly 18V give or take&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/SOL-58/search/24_VDC_PULL-TYPE_SOLENOID_.html"&gt;Pull type solenoid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=P802-ND"&gt;47 uF electrolytic capacitor,&lt;/a&gt; to clean up the power signal&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/TDC-565/search/.56%22#34;_DUAL_7-SEGMENT_DISPLAY,_RED_C.C._.html"&gt;Dual seven segment display&lt;/a&gt; -- &lt;a href="http://www.allelectronics.com/cgi-bin/item/TDC-565/search/.56%22#34;_DUAL_7-SEGMENT_DISPLAY,_RED_C.C._.html"&gt;&lt;/a&gt;&lt;a href="http://gavinblack.blogspot.com/1990/02/dual-display-pinout.html"&gt;pinout&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=2N3904FS-ND"&gt;NPN Transistor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/SRLY-19/search/1A_SOLID-STATE_RELAY,_3-8VDC_CONTROL_.html"&gt;Electromagnetic Relay&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.allelectronics.com/cgi-bin/item/CRY-9830/197/9.8304_MHZ_CRYSTAL_.html"&gt;Crystal Oscillator&lt;/a&gt;(I used 10 MHZ, but it doesn't matter)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1335&amp;amp;dDocName=en010297"&gt;PIC18F4520,&lt;/a&gt; could be any PIC with enough IO, this is just what I started with.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Below is the basic schematic.  One thing to note is constant power is given to light up a C(For closed) on the second display, and one of the output pins on the pic is shorted to several to create the O(For open) when needed.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R6TUVRCYMXI/AAAAAAAAAYo/B6oFpVFy1Bc/s1600-h/solenoid.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R6TUVRCYMXI/AAAAAAAAAYo/B6oFpVFy1Bc/s400/solenoid.jpeg" alt="" id="BLOGGER_PHOTO_ID_5162484534689149298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The circuit was quite easy, although I did have to plus up my microcontroller power supply with a 9V, to get enough current to drive the relay(I originally had a smaller display that broke, and adding the larger one sucked just enough amps to stop the relay from reliably switching).&lt;br /&gt;&lt;br /&gt;The code for the PIC is in MCC18 and was compiled in MPLab. Source code can be downloaded &lt;a href="http://rotngreentest.googlepages.com/mainSolenoid.c"&gt;here&lt;/a&gt;.  Also the hex file for PIC18F4520 is &lt;a href="http://rotngreentest.googlepages.com/solenoidLock.hex"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a pretty simple analog to digital conversion, then chop off all but the upper bits to get the proper hex value.  It uses a separate thread to monitor how long the number was held for.  One issue that took me forever to debug is the conversion takes several cycles and the number you are storing to has no definite value at that time.  Meaning if another thread interrupts in the middle and tries to read that value it will get garbage.  This is easily mitigated with a temporary variable being used during the conversion.&lt;br /&gt;&lt;br /&gt;Soldering it up was hassle free, although I had a lot of wires that were required.  2 Power supplies to the control box, then 4 wires of power to the solenoid and microcontroller, 9 wires from the microcontoller to the control box for the display, and then a phone cord was used to hook up the trim pot to the microcontroller.  If I had been willing to, it would have been *much* nicer to have embedded everything into the door, control box and all, so there were only the power wires.&lt;br /&gt;&lt;br /&gt;Picture of the spaghetti wiring:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R6YJRBCYMYI/AAAAAAAAAYw/_X6oRXpPS7s/s1600-h/IMG_1740.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R6YJRBCYMYI/AAAAAAAAAYw/_X6oRXpPS7s/s400/IMG_1740.JPG" alt="" id="BLOGGER_PHOTO_ID_5162824210767688066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Rehashed video from an earlier post of the electronics running(Note: I'm manipulating a potentiometer offscreen to scroll through the numbers):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-09373579626522023 visible ontop" href="http://www.youtube.com/v/9pJawzp_tko"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/9pJawzp_tko"&gt;  &lt;embed src="http://www.youtube.com/v/9pJawzp_tko" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4003711579528516027?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4003711579528516027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4003711579528516027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4003711579528516027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4003711579528516027'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/solenoid-lock-electronics.html' title='Solenoid Lock -- Electronics'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R6TUVRCYMXI/AAAAAAAAAYo/B6oFpVFy1Bc/s72-c/solenoid.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5660294023196789880</id><published>2008-02-02T09:00:00.002-08:00</published><updated>2008-02-02T11:15:48.095-08:00</updated><title type='text'>Frankenbench</title><content type='html'>Finally finished up my Frankenbench, which took several weeks since I kind of just nailed on parts when I  was bored.  Basically a while back I  put together a work desk(Which I'll put up when it's all done), but I didn't buy anything to sit on.  Looking through my scraps of junk furring wood(From the failed rabbit pen, since they aren't straight at all), I decided to try to make a bench to sit on.&lt;br /&gt;&lt;br /&gt;First I made a simple sawhorse design like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6S78BCYMSI/AAAAAAAAAYA/6vlopWTLifs/s1600-h/bench0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6S78BCYMSI/AAAAAAAAAYA/6vlopWTLifs/s400/bench0.jpg" alt="" id="BLOGGER_PHOTO_ID_5162457712618385698" border="0" /&gt;&lt;/a&gt;But it was uncomfortable due to the wood on top, and was like a teeter totter if you sat right on either edge since the legs are in the middle(They really are on upside down).  So since it looked like crap anyway I decided to add more legs to make it sturdier and add some more ledges underneath to hold parts.  Then I decided that those extra legs might as well hold some parts and drilled holes and added nails.  Afterwards it looked like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R6S8zhCYMTI/AAAAAAAAAYI/vO4BiZp25Kw/s1600-h/bench1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R6S8zhCYMTI/AAAAAAAAAYI/vO4BiZp25Kw/s400/bench1.jpg" alt="" id="BLOGGER_PHOTO_ID_5162458666101125426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next I spray painted it black and then had my wife help me upholster(We screwed up a bit on one side with all the pliers).   Some pics of the finished product:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6S-mBCYMUI/AAAAAAAAAYQ/qkzfK3QWdeU/s1600-h/bench3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6S-mBCYMUI/AAAAAAAAAYQ/qkzfK3QWdeU/s400/bench3.jpg" alt="" id="BLOGGER_PHOTO_ID_5162460633196147010" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R6S-yRCYMVI/AAAAAAAAAYY/5RwPymB0JwI/s1600-h/bench4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R6S-yRCYMVI/AAAAAAAAAYY/5RwPymB0JwI/s400/bench4.jpg" alt="" id="BLOGGER_PHOTO_ID_5162460843649544530" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R6S-8BCYMWI/AAAAAAAAAYg/9j-PzGwFFME/s1600-h/bench5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R6S-8BCYMWI/AAAAAAAAAYg/9j-PzGwFFME/s400/bench5.jpg" alt="" id="BLOGGER_PHOTO_ID_5162461011153269090" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5660294023196789880?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5660294023196789880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5660294023196789880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5660294023196789880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5660294023196789880'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/02/frankenbench.html' title='Frankenbench'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/R6S78BCYMSI/AAAAAAAAAYA/6vlopWTLifs/s72-c/bench0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3368156271486050190</id><published>2008-01-28T14:52:00.000-08:00</published><updated>2008-01-29T03:05:17.396-08:00</updated><title type='text'>Solenoid Update</title><content type='html'>Just a quick update, I finished the solenoid lock...pretty much.  It still has a logic error in the code I haven't yet fixed, which is even more pathetic given the fact that I'm a programmer by trade.   I also want to bind up the wires a little better.  It's a tad ugly, due to short sighted planning, but who cares, it's functional.  I also made a much simpler version for testing midway through.  I plan to put up details to it as well, since it's much more practical to make.&lt;br /&gt;&lt;br /&gt;I'm moving my *sigh* Windows computer up there tomorrow so I can reprogram the chip.  I'm getting a wireless PCI card so I can just leave it there.&lt;br /&gt;&lt;br /&gt;Also I'm working on finishing up the little bit of wood-working for my workshop.  The main part is Frankenbench(A simple sawhorse style bench I made that I've been slowly 'augmenting'), which I still need to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Attach 2 more legs ( There will be 8 total ;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify those new legs to hold more tools&lt;/li&gt;&lt;li&gt;Modify the underside to hold books better&lt;/li&gt;&lt;li&gt;Round the edges where I sit&lt;/li&gt;&lt;li&gt;Add some cushioning.&lt;/li&gt;&lt;/ul&gt;Hopefully by this weekend I can be done with both finishing my work area, and the solenoid lock writeup and can move on to my next project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3368156271486050190?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3368156271486050190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3368156271486050190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3368156271486050190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3368156271486050190'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/solenoid-update.html' title='Solenoid Update'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2298806813926201908</id><published>2008-01-24T14:47:00.000-08:00</published><updated>2008-01-24T15:56:47.097-08:00</updated><title type='text'>Soldering &amp;= Control Box Redux; // DC</title><content type='html'>Just repaired a crappy Western Digital(Although not as shit made as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Maxtor&lt;/span&gt;) external hard drive, that happened to break itself when I was touching it.  I refuse to say I broke it since the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;POS&lt;/span&gt; *never* had it's connections soldered for the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;USB&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;plugin&lt;/span&gt;, instead it was a surface mount part that had 4 surrounding feet lightly soldered in place, on the main piece you repeatedly put force onto!  I took the time to do it right(IE solder the actual connections), which was painful since the pins didn't stick out, they were instead underneath it, and that they were hair-pins.  At least I learned &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;alot&lt;/span&gt; from my repeated(It took me 6 tries till I was happy with it) attempts:&lt;br /&gt;* It helps to place solder on the contact first then heat up the pin on top of the solder&lt;br /&gt;* A light touch with the soldering tip, and then drag it along the contact seems to work the best&lt;br /&gt;* A completely cleaned up soldering tip is the best thing at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;desoldering&lt;/span&gt; bridges between hair-pins&lt;br /&gt;&lt;br /&gt;I also epoxied the fucker in place afterwards so it will never come loose again.  Picture below, although there's nothing to see since the pins are in epoxy and underneath the actual plug-in:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R5kYxhCYMBI/AAAAAAAAAV4/mJCR_ggCp_E/s1600-h/IMG_1699.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R5kYxhCYMBI/AAAAAAAAAV4/mJCR_ggCp_E/s400/IMG_1699.JPG" alt="" id="BLOGGER_PHOTO_ID_5159182087090614290" border="0" /&gt;&lt;/a&gt;(UPDATE: The computer can't read the bastard, although I can hear it trying to spin, damnit)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also I did take the effort/spend the $1 on spray paint to fix up my control box a little more for the solenoid lock.  I did it outside on my balcony in a cardboard box, since I didn't want the neighbors seeing some random black electronic counter looking thing with wires sticking out sitting around ;)&lt;br /&gt;Still not perfect due to the electrical tape covering the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Dremel&lt;/span&gt; flaws I introduced by being to lazy to switch to a smaller cutting wheel, and the fact that it's crooked:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R5kZ2xCYMDI/AAAAAAAAAWI/A_2Cft7XofQ/s1600-h/bar0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R5kZ2xCYMDI/AAAAAAAAAWI/A_2Cft7XofQ/s400/bar0.jpg" alt="" id="BLOGGER_PHOTO_ID_5159183276796555314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last I never did put my pictures up of our latest downtown DC excursion for my family, so here they are(Barring anything with our faces):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R5karRCYMEI/AAAAAAAAAWQ/a05jpGm3fE0/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R5karRCYMEI/AAAAAAAAAWQ/a05jpGm3fE0/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184178739687490" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R5ka0hCYMFI/AAAAAAAAAWY/h5LpMT6zMgQ/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R5ka0hCYMFI/AAAAAAAAAWY/h5LpMT6zMgQ/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184337653477458" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R5ka7xCYMGI/AAAAAAAAAWg/tLV5zr2iWAE/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R5ka7xCYMGI/AAAAAAAAAWg/tLV5zr2iWAE/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184462207529058" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R5kbEhCYMHI/AAAAAAAAAWo/EsX533b94Ls/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R5kbEhCYMHI/AAAAAAAAAWo/EsX533b94Ls/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184612531384434" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R5kbaxCYMJI/AAAAAAAAAW4/JSIjzU4ssIM/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R5kbaxCYMJI/AAAAAAAAAW4/JSIjzU4ssIM/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184994783473810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R5kbQBCYMII/AAAAAAAAAWw/d6w1OoCubTY/s1600-h/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R5kbQBCYMII/AAAAAAAAAWw/d6w1OoCubTY/s400/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5159184810099880066" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R5kcrxCYMPI/AAAAAAAAAXo/PcW6ttSC1O0/s1600-h/13.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R5kcrxCYMPI/AAAAAAAAAXo/PcW6ttSC1O0/s400/13.jpg" alt="" id="BLOGGER_PHOTO_ID_5159186386352877810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R5kcyBCYMQI/AAAAAAAAAXw/MCUI0wkEq_M/s1600-h/12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R5kcyBCYMQI/AAAAAAAAAXw/MCUI0wkEq_M/s400/12.jpg" alt="" id="BLOGGER_PHOTO_ID_5159186493727060226" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R5kb3RCYMKI/AAAAAAAAAXA/tasn_pUK0Ug/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R5kb3RCYMKI/AAAAAAAAAXA/tasn_pUK0Ug/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5159185484409745570" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R5kcbhCYMNI/AAAAAAAAAXY/qLtHE4Ne2_Y/s1600-h/11.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R5kcbhCYMNI/AAAAAAAAAXY/qLtHE4Ne2_Y/s400/11.jpg" alt="" id="BLOGGER_PHOTO_ID_5159186107180003538" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R5kcCRCYMLI/AAAAAAAAAXI/YfVHKR7OU8c/s1600-h/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R5kcCRCYMLI/AAAAAAAAAXI/YfVHKR7OU8c/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5159185673388306610" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R5kcMBCYMMI/AAAAAAAAAXQ/YFPEPQ8OIEs/s1600-h/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R5kcMBCYMMI/AAAAAAAAAXQ/YFPEPQ8OIEs/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5159185840892031170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unsurprisingly only college aged kids were at the Colbert portrait, at least when we were there.  We got there right at the opening of the Portrait Gallery(11:30) and there was a line within a few minutes in front of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2298806813926201908?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2298806813926201908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2298806813926201908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2298806813926201908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2298806813926201908'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/soldering-control-box-redux-dc.html' title='Soldering &amp;= Control Box Redux; // DC'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/R5kYxhCYMBI/AAAAAAAAAV4/mJCR_ggCp_E/s72-c/IMG_1699.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6710346384431190238</id><published>2008-01-20T13:13:00.000-08:00</published><updated>2008-01-21T03:44:49.162-08:00</updated><title type='text'>Solenoid lock -- Still not done</title><content type='html'>I was held up this weekend because we went to downtown D.C. on Saturday(Mainly to see the Colbert portrait).  But did spend the majority of Sunday working on it.  I had to redo the main control box since my homemade seven segment ended up looking like crap.  I used a dual seven segment I had laying around, but it caused another issue: it draws more current and thus the relay doesn't have enough power to switch :(  Right now I just added a 9V battery to the circuit to give it the extra juice, I will see if I have a better transformer laying around later.&lt;br /&gt;&lt;br /&gt;Right now the control box is done, with all the parts soldered, hot glued, and epoxied in place.  It turned out pretty crappy looks wise, but I wasn't expecting too much since it's made from junk lying around my workshop(A pen box to be exact), I may get a wild hair and spray paint it one solid color so it can't be seen through, but probably not:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R5PJx9eiyxI/AAAAAAAAAVw/Xs9W9GD0eKI/s1600-h/14.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R5PJx9eiyxI/AAAAAAAAAVw/Xs9W9GD0eKI/s400/14.jpg" alt="" id="BLOGGER_PHOTO_ID_5157687858422795026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's a better video of the circuit working than last time, basically I'm adjusting the trim-pot to display the hex-numbers, waiting till the input is accepted, then when the code(1B50) is complete the solenoid opens up(The C changes to O as well), when the user goes away from zero it closes and they can open it one more time by going back to zero before having to reinput the code(So the door can be closed):&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/9pJawzp_tko"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/9pJawzp_tko" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What I have left to do:&lt;br /&gt;* Solder up the microchip itself with a DB9 connector.  I plan to hook up all the wires directly to the pins on the chip and then hot glue the entire mess to a piece of wood.&lt;br /&gt;* Fix the logic bug in the microchip code, since I still haven't debugged the issue where an incorrect input is needed beforehand.  I'm waiting till I solder the trim pot on, since it is loose and may be causing it's own problems.&lt;br /&gt;* Mount all the components to the door, this includes: The solenoid, the metal the solenoid locks into, the microchip, the trim-pot, and running the wires.&lt;br /&gt;* See if I have a power supply with enough power to run the relay and display&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6710346384431190238?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6710346384431190238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6710346384431190238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6710346384431190238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6710346384431190238'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/solenoid-lock-still-not-done.html' title='Solenoid lock -- Still not done'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/R5PJx9eiyxI/AAAAAAAAAVw/Xs9W9GD0eKI/s72-c/14.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6406367800910898320</id><published>2008-01-13T14:14:00.000-08:00</published><updated>2008-01-13T15:25:58.086-08:00</updated><title type='text'>General Project Info</title><content type='html'>I've decided that for larger projects I will start breaking them up into logical sections, then writing an overview and linking to the other sections from it.  So for example on the solenoid lock it will be how the electronics were done, how the physical construction was done, followed by an overview of what it is and how it runs.&lt;br /&gt;&lt;br /&gt;Right now I'm very close to the electronics being done for the solenoid lock.  I have a bug in my code that makes it so an incorrect input has to be given before you can put in the password.  Also the top light of my seven segment display died completely, I've decided to make my own jumbo sized 7 segment display with foam, which is close to being done already(Need to solder in and hot glue the actual lights).&lt;br /&gt;&lt;br /&gt;I spent several hours Saturday trying to figure out how to use the NPN transistors correctly to power the relay.  Turns out it had to be between the ground and not the power source, go figure.&lt;br /&gt;&lt;br /&gt;I hope to get it completely done next weekend, but right now I think we're going to downtown DC on Saturday so I may not have enough time.&lt;br /&gt;&lt;br /&gt;Picture of it on the breadboard, with really sloppy wiring:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R4qcGteiywI/AAAAAAAAAVo/tRdE7uLV5Xw/s1600-h/IMG_1609.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R4qcGteiywI/AAAAAAAAAVo/tRdE7uLV5Xw/s400/IMG_1609.JPG" alt="" id="BLOGGER_PHOTO_ID_5155104362579806978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Video of it running with the broken light, so it's kind of hard to tell what the numbers are.  The test code is 1B50.  Also apologies for the Happy playing, I forgot to turn it off and didn't feel like making another video:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/ujgX74C6tpo"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/ujgX74C6tpo" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6406367800910898320?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6406367800910898320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6406367800910898320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6406367800910898320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6406367800910898320'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/general-project-info.html' title='General Project Info'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/R4qcGteiywI/AAAAAAAAAVo/tRdE7uLV5Xw/s72-c/IMG_1609.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-404977552785945216</id><published>2008-01-08T12:55:00.000-08:00</published><updated>2008-01-08T13:49:27.958-08:00</updated><title type='text'>Allelectronics Order</title><content type='html'>The rest of my ECE parts came from &lt;a href="http://allelectronics.com/"&gt;allelectronics&lt;/a&gt; today.  Packaged just fine, no problems with anything I've tested.  I got mainly LEDs, motors, connectors, and magnets.  The only thing I guess I forgot to get was a lock switch...ohh well no biggie.  The magnets are ridiculously strong, they can hold together through my hand, and I've taken to flipping them across the room towards the fridge.  The super cap is cool, I made a quick circuit from my piezo tester from yesterday that will keep making irritating noises for about 5 minutes after the power is cut ;)  The motors I got for my electric car have really tiny places to connect to...I have no clue how I will attach wheels, probably just use some epoxy and drill holes in a couple pennies.&lt;br /&gt;&lt;br /&gt;Picture of all the new parts in my workshop:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R4PlENeiytI/AAAAAAAAAVQ/tlmBLON79qM/s1600-h/IMG_1588.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R4PlENeiytI/AAAAAAAAAVQ/tlmBLON79qM/s400/IMG_1588.JPG" alt="" id="BLOGGER_PHOTO_ID_5153214259141987026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's  one of the solenoids hooked up.   I just used four 9Vs to get enough power(Way over the 24V it's rated at), and hooked it to a little momentary switch.   Will be kind of hard to make into a lock with how it works(Needs to be in a tad to start, but there is a place to mount an ending point), which I will overcome when I get to that project.  Note that later I hooked the 9Vs up properly(In series not parallel) and was to the point that the switch would sizzle and produce visible sparks when pressed :-D Also the solenoid gets hot with repeated usage, regardless of voltage, which I already knew would happen with these(They were only $1 a piece):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R4PmUteiyuI/AAAAAAAAAVY/TH_9_vyddJY/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R4PmUteiyuI/AAAAAAAAAVY/TH_9_vyddJY/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5153215642121456354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's a video of me shooting it by releasing the momentary switch.  I accidently put a small dent in my wall the first time I did this by accident:&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-03049769683869402 visible ontop" href="http://www.youtube.com/v/KS-cNoVazpQ"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-03049769683869402 visible ontop" href="http://www.youtube.com/v/KS-cNoVazpQ"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-03049769683869402 visible ontop" href="http://www.youtube.com/v/KS-cNoVazpQ"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/KS-cNoVazpQ"&gt;  &lt;embed src="http://www.youtube.com/v/KS-cNoVazpQ" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-404977552785945216?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/404977552785945216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=404977552785945216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/404977552785945216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/404977552785945216'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/allelectronics-order.html' title='Allelectronics Order'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R4PlENeiytI/AAAAAAAAAVQ/tlmBLON79qM/s72-c/IMG_1588.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-558260980916310175</id><published>2008-01-07T13:41:00.000-08:00</published><updated>2008-01-08T02:45:51.233-08:00</updated><title type='text'>Digikey Order</title><content type='html'>Recent order from &lt;a href="http://digikey.com/"&gt;digikey&lt;/a&gt;, everything came quick, and well packaged.  Anything I've had a chance to test has worked so far, except I can't get the piezo buzzers to work :(  Which should have been easy.   I got a crap load of sensors(Heat, light, IR, humidity), basic stuff(Transistors, caps, more diodes), voltage regs, and general ICs(H-bridge, AtoD converter, digital potentiometer) and alot of other stuff.  Still waiting on the other part of my order from &lt;a href="http://www.blogger.com/allelectronics.com"&gt;allelectronics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Below is a high-res picture of it laid out on my workbench.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/R4KdVdeiysI/AAAAAAAAAVI/WDEiHkVB5dI/s1600-h/IMG_1576.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/R4KdVdeiysI/AAAAAAAAAVI/WDEiHkVB5dI/s400/IMG_1576.JPG" alt="" id="BLOGGER_PHOTO_ID_5152853915680819906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One of the lights, which is really, really bright and the actual light is the size of a pinhead(The rest is just for connecting/mounting it):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R4KdD9eiyrI/AAAAAAAAAVA/GD7lBmYNMt0/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R4KdD9eiyrI/AAAAAAAAAVA/GD7lBmYNMt0/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5152853615033109170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Edit: Got the piezo buzzers working, turns out the ones I got you have to generate your own frequency to drive them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-558260980916310175?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/558260980916310175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=558260980916310175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/558260980916310175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/558260980916310175'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2008/01/digikey-order.html' title='Digikey Order'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/R4KdVdeiysI/AAAAAAAAAVI/WDEiHkVB5dI/s72-c/IMG_1576.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4232878803072049434</id><published>2007-12-31T13:00:00.000-08:00</published><updated>2007-12-31T13:23:25.498-08:00</updated><title type='text'>Homemade motor  -- Part 1</title><content type='html'>While at my parents for XMas, I made a trip to the local Rat Shack.  The one in their town was going away, and had 20% off everything.  I ended up with some magnet wire(Since it's hard to buy small quantities online), helping hands/soldering stand combo, some POTS, and desoldering braid.   I've always wanted to try to make some motors, and wanted to start with something simple.  I decided to follow the instructions found &lt;a href="http://sci-toys.com/scitoys/scitoys/electro/electro.html"&gt;here for the 10 minute motor&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The 10 minutes part is crap, it took over half an hour for me to do it, even though I think it's geared more towards kids :(   The main problem I had was the insulation scraping and it took me forever to debug.  The issue was that I scraped off only the top, but it really needs to be 50% of it, like the picture on the site shows.  I used an LED to figure out that is was rarely hitting and generating an EM field.  Also the entire thing is a balancing act till it's set up.  My motor kept sliding or sagging in the middle, but I eventually got it pretty sturdy using a breadboard to 'mount' it.  This is more an issue with me sucking at fine motor skills than anything else.&lt;br /&gt;&lt;br /&gt;Pics and a video:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R3lcZNeiypI/AAAAAAAAAUw/lt30HLlK1-w/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R3lcZNeiypI/AAAAAAAAAUw/lt30HLlK1-w/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5150249237059127954" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/R3lcfdeiyqI/AAAAAAAAAU4/0-_MBm_CxTY/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/R3lcfdeiyqI/AAAAAAAAAU4/0-_MBm_CxTY/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5150249344433310370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a style="left: 338px ! important; top: 11px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-09210619710490188 visible ontop" href="http://www.youtube.com/v/kVY5Y3_WPY4"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/kVY5Y3_WPY4"&gt;  &lt;embed src="http://www.youtube.com/v/kVY5Y3_WPY4" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now I've got to think of something more complicated to make for part 2, I was thinking maybe a buzzer or something similar, but we'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4232878803072049434?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4232878803072049434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4232878803072049434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4232878803072049434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4232878803072049434'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/12/homemade-motor-part-1.html' title='Homemade motor  -- Part 1'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/R3lcZNeiypI/AAAAAAAAAUw/lt30HLlK1-w/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3419269191439861893</id><published>2007-12-31T12:32:00.000-08:00</published><updated>2008-06-07T18:37:07.012-07:00</updated><title type='text'>iMac G5 Fan Modification</title><content type='html'>My father has an iMac G5, and these machines are notorious for emitting horrible high pitched noises caused by the CPU fan, and his was no different.  Since I was there for XMas I decided to work with him to modify it to use a different fan.  I followed the basic premise found &lt;a href="http://www.scienceman.com/pgs/00_imacG5_macmod.html"&gt;here&lt;/a&gt;.  The major difference was there was NOT a CPU fan hookup on the motherboard in his G5(Trust me I looked and unplugged everything ;)  So instead we ripped out the CPU fan, cut the wires, found the 2 with the biggest voltage difference, and used that for the new fan.  Also we were able to completely get the heatsink cover off, although I suspect this was because we got rid of the entire fan assembly.&lt;br /&gt;&lt;br /&gt;The only issue was that the lines for cutting were drawn too large and we ended up with a slightly larger hole than it should have been(About a millimeter off).  Also I tried one of those new-fangled liquid bearing fans.  I used a &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16835185005"&gt;1200 RPM one&lt;/a&gt;, which isn't completely inaudible, but definitely less noisy than similar ones I have.&lt;br /&gt;&lt;br /&gt;Anywho, pics or it didn't happen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/R3lUl9eiynI/AAAAAAAAAUg/OV3m6bV2kwc/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/R3lUl9eiynI/AAAAAAAAAUg/OV3m6bV2kwc/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5150240660009437810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/R3lUsNeiyoI/AAAAAAAAAUo/RHmtBhSIdOs/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/R3lUsNeiyoI/AAAAAAAAAUo/RHmtBhSIdOs/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5150240767383620226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also a side rant against Apple.  First it was impossible(Yes I said impossible!) to figure out fan speed or system heat in software.  Nothing was for his version of OSX(10.39 AKA: Hello Kitty) and as far I can tell there is no basic BIOS to look at.  Also I couldn't find it in /proc.  On the hardware side, the original CPU fan design was utterly retarded.   It pushed air through a sealed up copper heatsink.  This wouldn't be bad, except that the area the fan blows out is incredibly small(About 1/3 the size of a normal CPU fan).  This obviously means the fan has insanely high RPMs and thus an insane amount of high pitched noise.  I realize they wanted a slim form factor to look 'stylish' but did they fail to test the thing?  They could easily have used multiple fans, or bigger fans on the back, but it wouldn't be Apple if it didn't suck.&lt;br /&gt;&lt;br /&gt;Edit:  To Rachel, your processor definitely should not slow down when the fan comes on.  There is such a thing as variable speed processors, but those are almost exclusively used for mobile computers.   I'd think it would error out if there was somehow a problem with your PSU that was draining off power from the CPU.  My guess(Without knowing more) is that the fan noise is so irritating that everything just seems to be taking longer :)&lt;br /&gt;&lt;br /&gt;Edit:  If anyone else finds this a little less 'ranty' write-up is at: &lt;a href="http://devrand.org/show_item.html?item=15&amp;amp;page=Project"&gt;devrand&lt;/a&gt; and if there are questions or comments I will see them there, since it's rare I check this blog nowadays.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3419269191439861893?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3419269191439861893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3419269191439861893' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3419269191439861893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3419269191439861893'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/12/imac-g5-fan-modification.html' title='iMac G5 Fan Modification'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/R3lUl9eiynI/AAAAAAAAAUg/OV3m6bV2kwc/s72-c/0.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-280946846895588469</id><published>2007-12-27T12:48:00.000-08:00</published><updated>2007-12-30T04:33:10.086-08:00</updated><title type='text'>Mp3 Splitter</title><content type='html'>Often times I download songs that run in the hundreds of minutes, or from a station that doesn't ever separate songs when ripped.  The problem with this is that these songs obviously can't be burned to a normal audio CD, and my new MP3 player won't scroll through them when they are past about 500 minutes.  Obviously you could go into an editor like Audacity and do it by hand, or on the command line using head and such, but neither are particularly quick.  The solution is a simple Perl script, which can be downloaded &lt;a href="http://rotngreentest.googlepages.com/mp3Split.pl"&gt;HERE&lt;/a&gt;.  Basically it will take an mp3 file and split it up into segments of a time you specify.  It can be off by under 1 second per segment, which isn't a big deal IMO. Also some corrupted MP3 files won't register the length properly and so the script allows the user to specify the length in minutes and seconds if it wasn't able to do it automatically.   It requires the MP3::Info CPAN module which can be installed by doing:&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="j"&gt;&lt;span style=""&gt;&lt;b&gt;       perl&lt;/b&gt; -&lt;b&gt;MCPAN&lt;/b&gt; -e '&lt;b&gt;install&lt;/b&gt; MP3::Info'&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I may in the future update it to be a more user friendly and put it up somewhere properly, but I doubt it.  Also it is really simple and just takes the total size divided by the time to get segment size.&lt;br /&gt;&lt;br /&gt;Also I started doing it in C, and studying MP3 data headers.  The result of this effort is &lt;a href="http://rotngreentest.googlepages.com/mp3B.c"&gt;HERE&lt;/a&gt;.  The problem is that you have to strip the ID3 tags first or it won't work, other than that it is fine, although quite messy.  Also it doesn't handle corrupted MP3s at all, although it would be easy to allow the user to enter the bitrate and sampling frequency to figure out the size of each MP3 frame.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-280946846895588469?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/280946846895588469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=280946846895588469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/280946846895588469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/280946846895588469'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/12/mp3-splitter.html' title='Mp3 Splitter'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2747455719530618601</id><published>2007-11-30T09:55:00.000-08:00</published><updated>2007-11-30T10:20:13.893-08:00</updated><title type='text'>Not V&amp;</title><content type='html'>I've not been doing anything project related for almost a month due to health issues(Foot AIDS), making it difficult to go up to my workshop.  Meanwhile I've dreamt up a ton of new projects I'll never get done, and I thought I'd write them down so I remember what I won't accomplish:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Digital Timer/Temperature Probe)  For my wife since I broke her old egg-timer&lt;/li&gt;&lt;li&gt;Blinkenlights) Computer LEDs that pulse faster depending on system heat&lt;/li&gt;&lt;li&gt;Line following car) Just for practice building a basic robot&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.inventgeek.com/Projects/lockpick/Overview.aspx"&gt;Oral-B Lock pick&lt;/a&gt;) Just for the hell of it&lt;/li&gt;&lt;li&gt;Electronically locked box) To practice using solenoids for doors&lt;/li&gt;&lt;li&gt;Small Automatic greenhouse) Because real greenhouse control systems are expensive and under featured&lt;/li&gt;&lt;li&gt;Homemade Motor)  To practice hand spinning coils&lt;/li&gt;&lt;li&gt;Remote controlled lamp) For those of us to lazy to turn on a switch&lt;/li&gt;&lt;li&gt;Radio transmitter) To get a grasp on sending RF signals&lt;/li&gt;&lt;li&gt;Benchtop PSU) Because it's nice to have alot of different power supplies to test with&lt;/li&gt;&lt;li&gt;Simple vacuum forming setup) To see if making plastic molds is at all useful to me&lt;/li&gt;&lt;li&gt;Wall fountain) Because it's hard to sleep without white noise&lt;/li&gt;&lt;li&gt;Random Tables) It's hard to saw and drill exclusively on a small side table, and whatever scrap wood is lying around.&lt;/li&gt;&lt;/ul&gt;I plan to order everything for these projects in one go after Xmas, mostly from all-electronics and digikey, and I'll talk more on them as I build them.  Some are really easy(LED Heat pulser) and some are pretty hard(Line following car).  I promise not to cheat and use any predone parts either(Like LEGO motors), mainly because I'm a cheapskate.&lt;br /&gt;&lt;br /&gt;I have done some other small projects in the past couple of days but they are small stuff like making a couple of quick clamps and such.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2747455719530618601?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2747455719530618601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2747455719530618601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2747455719530618601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2747455719530618601'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/11/not-v.html' title='Not V&amp;'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5106714049334909445</id><published>2007-10-30T09:52:00.000-07:00</published><updated>2007-10-31T14:20:28.987-07:00</updated><title type='text'>Pumpkins</title><content type='html'>That time of year for pumpkin carving again. My lazy ass made a Dremel tool to do all the work for me, and spent more time making that then actually carving the &lt;a href="http://en.wikipedia.org/wiki/Sierpinski_Triangle"&gt;Sierpinski triangle&lt;/a&gt; into the pumpkin. My wife on the other hand spent several hours using hand tools to get hers, which turned out really well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pics or it didn't happen:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RyjxINZUTgI/AAAAAAAAAUI/F3FAXonECYg/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RyjxINZUTgI/AAAAAAAAAUI/F3FAXonECYg/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5127613299098406402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RyeXMtZUTeI/AAAAAAAAAT8/nFm_e3lsGW4/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RyeXMtZUTeI/AAAAAAAAAT8/nFm_e3lsGW4/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5127232945384607202" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RyjxUNZUThI/AAAAAAAAAUQ/BcsqMISpXOg/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RyjxUNZUThI/AAAAAAAAAUQ/BcsqMISpXOg/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5127613505256836626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RyeXG9ZUTdI/AAAAAAAAAT0/H-vJzXwmQFs/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RyeXG9ZUTdI/AAAAAAAAAT0/H-vJzXwmQFs/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5127232846600359378" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/Ryjxf9ZUTiI/AAAAAAAAAUY/k8qK1iuPmvI/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/Ryjxf9ZUTiI/AAAAAAAAAUY/k8qK1iuPmvI/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5127613707120299554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RyeWy9ZUTcI/AAAAAAAAATs/w0U1HDhtZic/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RyeWy9ZUTcI/AAAAAAAAATs/w0U1HDhtZic/s400/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5127232503002975682" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5106714049334909445?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5106714049334909445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5106714049334909445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5106714049334909445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5106714049334909445'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/10/pumpkins.html' title='Pumpkins'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RyjxINZUTgI/AAAAAAAAAUI/F3FAXonECYg/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1748540916929607668</id><published>2007-10-15T13:30:00.000-07:00</published><updated>2007-10-15T14:06:09.149-07:00</updated><title type='text'>Motor PWM Redux</title><content type='html'>Okay, so after talking to Nick I found that there was a major, yet very simple, flaw in my circuit.  Basically there should be two separate power supplies, one for the motor and one for the microcontroller, and bridge these using a transistor.  The only change was directly connecting the V+ of one battery directly to the motor, instead of putting both on a common rail with a voltage regulator.  Below is an updated schematic,  I forgot to add the cap last time too(BTW I really want to fix dia's sheets to include more schematic symbols, but I suck at vector graphics, maybe one day):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RxPV3ZmKGuI/AAAAAAAAATk/qEJ0dYyXv5M/s1600-h/motorpwm.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RxPV3ZmKGuI/AAAAAAAAATk/qEJ0dYyXv5M/s400/motorpwm.png" alt="" id="BLOGGER_PHOTO_ID_5121672348990839522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The microcontroller takes in input from a dip switch and then converts it from binary to a number and uses that as how often the motor should be on.  So if it is set to 0001 then the motor is on 1 out of 16 cycles, and 0110 would be on 6/16 cycles.  The code although really simple can be found  &lt;a href="http://rotngreentest.googlepages.com/mainMotor.c"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm still noticing that rapid switching(Having the transistor switch every cycle) still causes it to overheat, so I have a 10,000 cycle wait in between each switch.   All the other problems, such as everything overheating when stuck, have been fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1748540916929607668?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1748540916929607668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1748540916929607668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1748540916929607668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1748540916929607668'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/10/motor-pwm-redux.html' title='Motor PWM Redux'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/RxPV3ZmKGuI/AAAAAAAAATk/qEJ0dYyXv5M/s72-c/motorpwm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3955481540565683255</id><published>2007-10-14T04:49:00.001-07:00</published><updated>2007-10-14T05:22:00.693-07:00</updated><title type='text'>Motor PWM</title><content type='html'>For a long time I have had trouble controlling motor speed using a microcontroller.  It seemed that either the motor would pull so much current and completely stop everything else, or there wasn't enough power and the motor would crawl, or the transistor used would get extremely hot and burn me.&lt;br /&gt;&lt;br /&gt;After alot of playing around I've finally got something that has worked(Although my guess is I'm still doing something dumb).  Below is the schematic...I didn't bother posting a video since it would just be a motor going slow and then fast, and the source code is really simplistic as well for the microcontroller.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RxICepmKGtI/AAAAAAAAATc/2n89fUu-KEE/s1600-h/motor.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RxICepmKGtI/AAAAAAAAATc/2n89fUu-KEE/s400/motor.png" alt="" id="BLOGGER_PHOTO_ID_5121158451858905810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some things I found, that may or may not be correct:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Needed two 9V batteries to get enough current to power the motor at full speed and keep the circuit operational.  I'm running them in parallel although this may be incorrect.  Running with one battery lets me only get about 1/3 of the top speed till the rest of the circuit dies.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Switching and current work together to make transistors become incredibly hot.  So for example I tried doing something like switch the transistor on one cycle, off the next cycle, and repeat forever to achieve half power.  Bad mistake that resulted in a minor burn, the constant switching with current to drive the motor about blew the transistor.  Now I'm switching twice per 10000 cycles, so if I want half power I do 5000 consecutive cycles on, and 5000 consecutive off.&lt;/li&gt;&lt;li&gt;Motors can get stuck, with very negative consequences!  If you use really low power the motor will jam until either it's getting enough current to break free or until you rotate it into working.  This doesn't seem at all bad, until you realize it sucks in heroic amounts of current trying to turn itself in the meantime.  This causes the power on everything else to go out, the transistor to burn up, and even the power source to get overheated.  Lesson is, unless it's a stepper motor, it should be going a decent speed to be in use.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3955481540565683255?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3955481540565683255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3955481540565683255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3955481540565683255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3955481540565683255'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/10/motor-pwm.html' title='Motor PWM'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/RxICepmKGtI/AAAAAAAAATc/2n89fUu-KEE/s72-c/motor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5501166048995337448</id><published>2007-10-02T15:35:00.000-07:00</published><updated>2007-10-02T15:52:55.785-07:00</updated><title type='text'>Mandelbrot Programs</title><content type='html'>Some old programs I wrote back in college I wanted to post so I wouldn't lose them.  They are the result of a full day of tinkering with the mandelbrot set in bizarre ways.  There are three programs in the order they were written.  The only really dependencies are the math C libraries, X11 windowing system, and /dev/audio is writable. *snip--nm*&lt;br /&gt;&lt;br /&gt;mandelWTF -- Randomly changes the mandelbrot set and outputs sound based on the images...don't ask ;)&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RwLJbjmvSMI/AAAAAAAAAS8/5wRROarEjjg/s1600-h/mandelWTF.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RwLJbjmvSMI/AAAAAAAAAS8/5wRROarEjjg/s400/mandelWTF.jpg" alt="" id="BLOGGER_PHOTO_ID_5116873601897679042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;mandelSound -- Slowly permutes the the mandelbrot set and then generates sound from the inside out&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RwLJ-TmvSNI/AAAAAAAAATE/W6St7nKQgiI/s1600-h/mandelSound.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RwLJ-TmvSNI/AAAAAAAAATE/W6St7nKQgiI/s400/mandelSound.jpg" alt="" id="BLOGGER_PHOTO_ID_5116874198898133202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;mandelUpdate -- Uses the escape time as a weight, and then updates surrounding 'nodes' based on the new weight.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RwLKyTmvSPI/AAAAAAAAATU/9wH8gtY4Tso/s1600-h/mandelUpdate.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RwLKyTmvSPI/AAAAAAAAATU/9wH8gtY4Tso/s400/mandelUpdate.jpg" alt="" id="BLOGGER_PHOTO_ID_5116875092251330802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;All source code can be found &lt;a href="http://rotngreentest.googlepages.com/mandel.tar"&gt;here&lt;/a&gt;.  Run &lt;span style="font-weight: bold;"&gt;make run&lt;/span&gt; to see them in action.  And for some reason I can't get mandelWTF to work outside of a script, it segfaults....which is just weird.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5501166048995337448?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5501166048995337448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5501166048995337448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5501166048995337448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5501166048995337448'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/10/mandelbrot-programs.html' title='Mandelbrot Programs'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/RwLJbjmvSMI/AAAAAAAAAS8/5wRROarEjjg/s72-c/mandelWTF.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6431340797328548530</id><published>2007-09-28T10:44:00.000-07:00</published><updated>2007-09-30T07:10:48.855-07:00</updated><title type='text'>Coding 101</title><content type='html'>Why do something difficult to read, and completely ineffiecient like:&lt;br /&gt;&lt;text&gt;&lt;br /&gt;   int i = 0;&lt;br /&gt;   int j = 0;&lt;br /&gt;&lt;br /&gt;   for(i = 0; i &lt; 6; i ++)&lt;br /&gt;   {&lt;br /&gt;&amp;nbsp&amp;nbsp     for(j = 0; j &lt; 5; j ++)&lt;br /&gt;&amp;nbsp&amp;nbsp     {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       if( j &lt; i )&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp          printf("i - j = %d\n", i - j );&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       }&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       else if ( i &lt; j )&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp          printf("j - i = %d\n", j - i);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       }&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       else&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp          printf("j == %d == i\n", j );&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp       }&lt;br /&gt;&amp;nbsp&amp;nbsp     }&lt;br /&gt;   }&lt;br /&gt;&lt;/text&gt;&lt;br /&gt;&lt;br /&gt;When you can cut the entire thing down to two logical lines(Yes I know the second line spill over into multiple ones, but it's still just one while loop statement).  This greatly enhances readibility, since there are less lines to look over, and enhances performance somehow :-D&lt;br /&gt;&lt;br /&gt;&lt;text&gt;&lt;br /&gt;   int i=0, j=-1;&lt;br /&gt;&lt;br /&gt;   while( (j++ &lt; 10) &amp;&amp; ( j &lt; 5 || ( (i ++ &lt; 5 ) &amp;&amp; ((j=0) || 1) )) &amp;&amp; ( j &lt; i || j == i || printf("j - i = %d\n", j - i) ) &amp;&amp;&lt;br /&gt;( j &gt; i || j == i || printf("i - j = %d\n", i - j) ) &amp;&amp; ( j &gt; i || j &lt; i || printf("j == %d == i\n", j)) ) ;&lt;br /&gt;&lt;/text&gt;&lt;br /&gt;&lt;br /&gt;And yes these are exactly equivalent, and the second one will compile in ANSI C.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6431340797328548530?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6431340797328548530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6431340797328548530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6431340797328548530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6431340797328548530'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/09/coding-101.html' title='Coding 101'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4922365536602378665</id><published>2007-09-16T07:02:00.000-07:00</published><updated>2007-09-16T16:17:59.959-07:00</updated><title type='text'>Remote Speakers</title><content type='html'>A smaller project I've spent a couple days on is modifying an old receiver for wireless headphones to work with normal RCA plugins and using power from the wall instead of batteries.  The proof of concept was very easy and took less than an hour.   Basically cut out the headphone speakers and hooked up  male RCA cables to each.  Also for the power I checked it with a multimeter(It was 4.5 V) and then found a wall plugin that matched.  For the current I started by trying to use the current of one AAA battery(Roughly 1000mA) and found that worked fine so left it at that.  I did have problems opening them up and made some dremel cuts on it till I figured out where the screws were.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/Ru2wFCGuwtI/AAAAAAAAAS0/6pjTRrSbQOw/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/Ru2wFCGuwtI/AAAAAAAAAS0/6pjTRrSbQOw/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5110934752646316754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next the long part was compressing it down into a smaller package.  This involved taking out the wires that went between the headphones and replacing them with shorter wires, and eliminating wires not needed anymore(Like the headphone's internal amp to the headphone cup).  Also hooking up the power to the switch and cutting out the battery pack holder.  Picture below is about 1/3 of the way through:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/Ru2v7yGuwsI/AAAAAAAAASs/ydwc3rzSd1Y/s1600-h/7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/Ru2v7yGuwsI/AAAAAAAAASs/ydwc3rzSd1Y/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5110934593732526786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The finished product turned out okay.  The two cups didn't quite match up, so there is a large gap on one side.  Also the tool marks from the original attempt at opening the headphones.  Hot glue was use to hold the wires in place(And avoid any shorts from moving wires) as well as keep the cups together.  All the buttons(Power, amp, freq) and LEDs still work and are easily accessible.  I also ran the antennae wire to the outside so I could improve reception and avoid it contacting any of my wires on the inside.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/Ru2v1SGuwrI/AAAAAAAAASk/WjpTI5d1GWw/s1600-h/10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/Ru2v1SGuwrI/AAAAAAAAASk/WjpTI5d1GWw/s400/10.jpg" alt="" id="BLOGGER_PHOTO_ID_5110934482063377074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The finished 'setup' is an old torn apart stereo system, with speakers positioned to project sound below(This is all up in my work shop in the loft).  I'm using my vaulted ceiling to try and redirect the sound to hit both ears, which has been working pretty well, except the left speaker sounds like it's coming from directly above instead of to the side.  I've been using it all day with no problems, and it sounds much clearer and better than the crappy TV speakers, even with them being on a different floor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/Ru2voiGuwqI/AAAAAAAAASc/2MgS3vi9XEE/s1600-h/11.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/Ru2voiGuwqI/AAAAAAAAASc/2MgS3vi9XEE/s400/11.jpg" alt="" id="BLOGGER_PHOTO_ID_5110934263020044962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the future I want to splice out the IR receiver on the stereo and position it so I can change the volume downstairs without moving(Right now I'm using the transmitter's amp).  Also I need to change around speaker position to get better left and right separation, as well as tweak all the amps.  There are now 4 amps that come into play which is the TV, the transmitter, the receiver, and the stereo, so it takes a fair amount of fine tuning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4922365536602378665?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4922365536602378665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4922365536602378665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4922365536602378665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4922365536602378665'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/09/remote-speakers.html' title='Remote Speakers'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/Ru2wFCGuwtI/AAAAAAAAAS0/6pjTRrSbQOw/s72-c/6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6634984441463851857</id><published>2007-08-27T15:30:00.000-07:00</published><updated>2007-09-04T15:17:18.733-07:00</updated><title type='text'>‫‬‭‮‪‫‬‭‮҉Incontinent Iguana</title><content type='html'>‫‬Anywho, I haven't really worked on much lately since work has been kicking my ass, and &lt;a href="http://jaysherby.blogspot.com/"&gt;Jay&lt;/a&gt; has been gone for a while.   I had a 4 day weekend, but didn't end up doing much of anything productive(Read, Hike, play Metroid).  The only thing I really got accomplished was redoing my work area(Note: My background is of my wife, and I don't post identifiable pics online, so I've shopped the photo to cover it, see if you can guess where :-)‬‭‮‪‫‬‭&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/Rt3Vi6JoFhI/AAAAAAAAASE/McXM89x70Q8/s1600-h/IMG_1396pie.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/Rt3Vi6JoFhI/AAAAAAAAASE/McXM89x70Q8/s400/IMG_1396pie.JPG" alt="" id="BLOGGER_PHOTO_ID_5106472348209911314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I also worked on trying to get the MAX232 chip working, but with no avail.  Below is a picture of my great soldering job, actually seeing it close up makes me realize how pathetic it is...ohh well:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/Rt3WuaJoFiI/AAAAAAAAASM/--WX6WtYfcY/s1600-h/IMG_1395.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/Rt3WuaJoFiI/AAAAAAAAASM/--WX6WtYfcY/s400/IMG_1395.JPG" alt="" id="BLOGGER_PHOTO_ID_5106473645290034722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Another slight thing of interest is that typing &lt;span style="font-weight: bold;"&gt;Gavin Black&lt;/span&gt; into Google lists this in spot 7 on the first page.  Not bad,  since I think I've only pushed it to friends and family.   And finally for no apparent reason, my rabbit sleeping on a lamb skin rug, because really I have nothing of interest(I suppose I could have posted my linoleum story for safe keeping ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/Rt3ZUqJoFjI/AAAAAAAAASU/Smh3h66gx24/s1600-h/IMG_1382.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/Rt3ZUqJoFjI/AAAAAAAAASU/Smh3h66gx24/s400/IMG_1382.JPG" alt="" id="BLOGGER_PHOTO_ID_5106476501443286578" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6634984441463851857?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6634984441463851857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6634984441463851857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6634984441463851857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6634984441463851857'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/08/incontinent-iguana.html' title='‫‬‭‮‪‫‬‭‮҉Incontinent Iguana'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/Rt3Vi6JoFhI/AAAAAAAAASE/McXM89x70Q8/s72-c/IMG_1396pie.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8587305412956716576</id><published>2007-08-15T15:12:00.001-07:00</published><updated>2007-08-15T15:42:28.670-07:00</updated><title type='text'>PIC Analog and Interrupts</title><content type='html'>Well first, I've figured out how to get analog input finally.  There are special calls in MPLab C18 that set up most of it for you.  I still have to play around some since it turns out sensitivity can be changed.  Anyway, the code can be found &lt;a href="http://rotngreentest.googlepages.com/mainAnalog.c"&gt;here&lt;/a&gt;.  All it does is change the speed of one of leds depending on the POT's value, and also displays bits [3,11] of the integer representing the value. The two tasks are made independant by having a small delay and just counting foo cycles to pretend their are bigger delays.  IE the delay is only 25 but if I want the light to slow down flashing to say 50 I have it wait 2 cycles before toggling, meanwhile the value is still being updated.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My practice of basic interrupts took quite a while.  The code is &lt;a href="http://rotngreentest.googlepages.com/mainInterrupt.c"&gt;here&lt;/a&gt;.  Basically it counts down, from input garnered from the dip switches and then when the button is pressed it toggles between being paused and not.  Below is a video of it running, note that there is a slight delay since I wait for the button to come up, and it starts of with 2 LEDs lit because of the DIP switch settings:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/6rA6P4wi53c"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/6rA6P4wi53c" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8587305412956716576?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8587305412956716576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8587305412956716576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8587305412956716576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8587305412956716576'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/08/pic-analog-and-interrupts.html' title='PIC Analog and Interrupts'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7669913950986320597</id><published>2007-08-10T17:42:00.000-07:00</published><updated>2007-08-10T18:09:40.080-07:00</updated><title type='text'>LED Chaser Redux</title><content type='html'>Okay, so to put it elegantly this is absolutely butt-fucking pointless.  On the other hand it was good practice and I learned a few things.   Anywho the source code can be found &lt;a href="http://rotngreentest.googlepages.com/mainModes.c"&gt;here&lt;/a&gt;, it is suprisingly commented for once. &lt;br /&gt;&lt;br /&gt;Basically it has modes, that can be set with switches, that dictate how the lights will move(Sweep back and forth, go one way pause and loop, go one way and immediately loop, flash between colors), and has push buttons to increase or decrease the speed.&lt;br /&gt;&lt;br /&gt;Below is a video of it running in the dark, I kept it at high speed so I could fit all the modes in a brief amount of time, so it looks a little psychotic:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/MKo1s7aoWAc"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/MKo1s7aoWAc" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7669913950986320597?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7669913950986320597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7669913950986320597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7669913950986320597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7669913950986320597'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/08/led-chaser-redux.html' title='LED Chaser Redux'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7946883156005757927</id><published>2007-08-09T14:39:00.000-07:00</published><updated>2007-08-10T03:29:46.865-07:00</updated><title type='text'>PICKIT 2 Programming</title><content type='html'>I finally got my hands on a decent PIC programmer, and have finally gotten it working. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Surprisingly&lt;/span&gt; I had more trouble with the compiling of programs than I did with hooking it up physically. The first is figuring out the header files to use, I've always been using &lt;span style="FONT-WEIGHT: bold"&gt;p18cxxx.h&lt;/span&gt;(For the pic18F chips) and &lt;span style="FONT-WEIGHT: bold"&gt;delays.h&lt;/span&gt;(This is just for adding waits) which are both needed for any sort of toy programs. The main problem though was pragmas, which took me a while to figure out. The three that I've always been using since it's been working are:&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;#pragma config WDT = OFF // No clue, but always needed&lt;br /&gt;#pragma config OSC = HS // Use external oscillator&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;#pragma config LVP = OFF // Turn off LVP Programming&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:+0;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;br /&gt;&lt;/span&gt;My toy program is a simple LED chaser that goes back and forth and gets progressively faster until it goes so fast it's just flashing all of the LEDs. The source can be found &lt;a href="http://rotngreentest.googlepages.com/main.c"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;&lt;br /&gt;Here's a picture of the breadboard...really only 5 of the LEDs and the microcontroller are used to run it, as well as the oscillator, the rest is just other tinkering.  I just left the pickit2 plugged in since I was reprogramming it alot, except I've always been having to swap the voltage on the pickit2 with the voltage on the breadboard:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrutbAVem1I/AAAAAAAAAOc/h0SNRsbjfQI/s1600-h/0.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5096858082758007634" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrutbAVem1I/AAAAAAAAAOc/h0SNRsbjfQI/s400/0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7946883156005757927?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7946883156005757927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7946883156005757927' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7946883156005757927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7946883156005757927'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/08/pickit-2-programming.html' title='PICKIT 2 Programming'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RrutbAVem1I/AAAAAAAAAOc/h0SNRsbjfQI/s72-c/0.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6219961266329614436</id><published>2007-08-04T05:15:00.001-07:00</published><updated>2007-08-04T05:50:16.489-07:00</updated><title type='text'>/dev/pts/1</title><content type='html'>First some pictures of wood. In the photo they are  completely lined up at the top, but this is how they looked at the bottom:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRuYwVemgI/AAAAAAAAAL0/4gjza-lXAUE/s1600-h/34.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRuYwVemgI/AAAAAAAAAL0/4gjza-lXAUE/s400/34.jpg" alt="" id="BLOGGER_PHOTO_ID_5094818450033777154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So that's why nothing matched up particularly well, and I never ended up with squares.&lt;br /&gt;&lt;br /&gt;Next on the agenda is downtown D.C.   I didn't take a ton of photos, but here's some of what I did take(Note: a lot of  rabbit stuff):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RrRxkgVemqI/AAAAAAAAANE/U_x5kYFX9lk/s1600-h/68.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RrRxkgVemqI/AAAAAAAAANE/U_x5kYFX9lk/s400/68.jpg" alt="" id="BLOGGER_PHOTO_ID_5094821950432123554" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRzwwVemzI/AAAAAAAAAOM/E1WFsoIsJjg/s1600-h/58.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRzwwVemzI/AAAAAAAAAOM/E1WFsoIsJjg/s400/58.jpg" alt="" id="BLOGGER_PHOTO_ID_5094824359908776754" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RrRz1gVem0I/AAAAAAAAAOU/J9sImWGg_cs/s1600-h/61.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RrRz1gVem0I/AAAAAAAAAOU/J9sImWGg_cs/s400/61.jpg" alt="" id="BLOGGER_PHOTO_ID_5094824441513155394" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RrRy4AVemvI/AAAAAAAAANs/TUGxIzjj6m4/s1600-h/77.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RrRy4AVemvI/AAAAAAAAANs/TUGxIzjj6m4/s400/77.jpg" alt="" id="BLOGGER_PHOTO_ID_5094823384951200498" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRzdwVemyI/AAAAAAAAAOE/sdTrWa-4ZBU/s1600-h/51.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRzdwVemyI/AAAAAAAAAOE/sdTrWa-4ZBU/s400/51.jpg" alt="" id="BLOGGER_PHOTO_ID_5094824033491262242" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RrRyjQVemtI/AAAAAAAAANc/ZZQosjNlKqQ/s1600-h/74.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RrRyjQVemtI/AAAAAAAAANc/ZZQosjNlKqQ/s400/74.jpg" alt="" id="BLOGGER_PHOTO_ID_5094823028468914898" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RrRzWQVemxI/AAAAAAAAAN8/yGYlRSIAZbw/s1600-h/45.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RrRzWQVemxI/AAAAAAAAAN8/yGYlRSIAZbw/s400/45.jpg" alt="" id="BLOGGER_PHOTO_ID_5094823904642243346" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RrRyPgVemsI/AAAAAAAAANU/XpbkWBy6NiE/s1600-h/73.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RrRyPgVemsI/AAAAAAAAANU/XpbkWBy6NiE/s400/73.jpg" alt="" id="BLOGGER_PHOTO_ID_5094822689166498498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RrRvAAVemhI/AAAAAAAAAL8/3eipKVktVZY/s1600-h/42.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RrRvAAVemhI/AAAAAAAAAL8/3eipKVktVZY/s400/42.jpg" alt="" id="BLOGGER_PHOTO_ID_5094819124343642642" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RrRwkQVemmI/AAAAAAAAAMk/JpEx6kUpN0Q/s1600-h/36.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RrRwkQVemmI/AAAAAAAAAMk/JpEx6kUpN0Q/s400/36.jpg" alt="" id="BLOGGER_PHOTO_ID_5094820846625528418" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RrRvlAVemjI/AAAAAAAAAMM/gIgnB6bOeMs/s1600-h/57.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RrRvlAVemjI/AAAAAAAAAMM/gIgnB6bOeMs/s400/57.jpg" alt="" id="BLOGGER_PHOTO_ID_5094819759998802482" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRwxwVemnI/AAAAAAAAAMs/qoM0zdArUCc/s1600-h/39.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRwxwVemnI/AAAAAAAAAMs/qoM0zdArUCc/s400/39.jpg" alt="" id="BLOGGER_PHOTO_ID_5094821078553762418" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRvYwVemiI/AAAAAAAAAME/89RvycRXADk/s1600-h/48.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRvYwVemiI/AAAAAAAAAME/89RvycRXADk/s400/48.jpg" alt="" id="BLOGGER_PHOTO_ID_5094819549545404962" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRw_wVemoI/AAAAAAAAAM0/0LsNS0I3X_M/s1600-h/41.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRw_wVemoI/AAAAAAAAAM0/0LsNS0I3X_M/s400/41.jpg" alt="" id="BLOGGER_PHOTO_ID_5094821319071931010" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RrRv2AVemkI/AAAAAAAAAMU/HBGSbKjSqps/s1600-h/67.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RrRv2AVemkI/AAAAAAAAAMU/HBGSbKjSqps/s400/67.jpg" alt="" id="BLOGGER_PHOTO_ID_5094820052056578626" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RrRxQQVempI/AAAAAAAAAM8/Wx7fDGhILDA/s1600-h/63.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RrRxQQVempI/AAAAAAAAAM8/Wx7fDGhILDA/s400/63.jpg" alt="" id="BLOGGER_PHOTO_ID_5094821602539772562" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRwKwVemlI/AAAAAAAAAMc/rP9DavHX9sk/s1600-h/60.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRwKwVemlI/AAAAAAAAAMc/rP9DavHX9sk/s400/60.jpg" alt="" id="BLOGGER_PHOTO_ID_5094820408538864210" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RrRxyAVemrI/AAAAAAAAANM/k-eZ1NFWZEA/s1600-h/69.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RrRxyAVemrI/AAAAAAAAANM/k-eZ1NFWZEA/s400/69.jpg" alt="" id="BLOGGER_PHOTO_ID_5094822182360357554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The only thing worthwhile at the  incredibly boring Air and Space Museum(I've seen more interesting things places I've interviewed at) was in the gift shop(This was an original model, not for sale unfortunately ;)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRyswVemuI/AAAAAAAAANk/3JR_7qQi5ug/s1600-h/75.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRyswVemuI/AAAAAAAAANk/3JR_7qQi5ug/s400/75.jpg" alt="" id="BLOGGER_PHOTO_ID_5094823191677672162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My sucker I got from the natural history museum, yes you can taste the scorpion :( &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RrRy-wVemwI/AAAAAAAAAN0/9cMnouwZuvY/s1600-h/81.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RrRy-wVemwI/AAAAAAAAAN0/9cMnouwZuvY/s400/81.jpg" alt="" id="BLOGGER_PHOTO_ID_5094823500915317506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And that's it, mostly we just went to the Natural History museum, and walked around, so that's why almost everything is animal related.  I liked the sculpture garden but didn't get to see too much of it since we came across it towards the end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6219961266329614436?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6219961266329614436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6219961266329614436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6219961266329614436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6219961266329614436'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/08/devpts1.html' title='/dev/pts/1'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RrRuYwVemgI/AAAAAAAAAL0/4gjza-lXAUE/s72-c/34.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8695722653159007364</id><published>2007-07-28T03:04:00.000-07:00</published><updated>2007-07-28T03:19:29.418-07:00</updated><title type='text'>ROTN Development Setup</title><content type='html'>So right now I'm working on setting up my local environment to be very similar to my work environment.  So far I've got up a code repository at &lt;a href="http://sourceforge.net/projects/rotn/"&gt;sourceforge&lt;/a&gt; and can use CVS(I've only got up the algorithm for encoding and decoding written in C++ up for now).   After the environment is set up my next task is deconstructing Phex, to see what is reusable and make an API for it.  I think the first real release will more or less be &lt;a href="http://sourceforge.net/projects/phex/"&gt;Phex&lt;/a&gt; with a Web GUI and that is easily cross platform and when you receive an incoming file it obfuscates it and shares that on normal Gnutella networks.&lt;br /&gt;&lt;br /&gt;Just a note to myself what else is needed to finish my dev setup:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Regression testing scripts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Aliasing my environment to have the same commands as work&lt;/li&gt;&lt;li&gt;Setting up different baselines to work in&lt;/li&gt;&lt;/ul&gt;Also I have a silly little program I wrote that I will post later that shares a joystick over a network.  I originally made it so my wife and  I could play games together on her new computer, which only has one USB plugin(Now we are just using the netplay feature of ZSNES).  But I think it could also be handy for something like controlling playing DVDs or Games remotely if you have a computer acting as a media center.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8695722653159007364?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8695722653159007364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8695722653159007364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8695722653159007364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8695722653159007364'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/07/rotn-development-setup.html' title='ROTN Development Setup'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7230358182455641849</id><published>2007-07-05T15:21:00.000-07:00</published><updated>2007-07-07T18:00:05.409-07:00</updated><title type='text'>Eggcellent</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/Ro1vKOKE-JI/AAAAAAAAALc/Lrd7HTKaAaQ/s1600-h/eggs.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/Ro1vKOKE-JI/AAAAAAAAALc/Lrd7HTKaAaQ/s400/eggs.jpg" alt="" id="BLOGGER_PHOTO_ID_5083841775760898194" border="0" /&gt;&lt;/a&gt;It's not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;eggactly&lt;/span&gt;(The puns will stop over my dead body!!!) finished yet, I'll work on it more this weekend.  I wish I had a jumbo sized one.  (Note the red hue is artificial but  close to how it looks, the flash on my camera completely rapes the glow of the egg).&lt;br /&gt;&lt;br /&gt;(Edit: More info)&lt;br /&gt;Basically what I was originally trying to do was have an egg flash while the alarm went off.  My plan was to just hook it up to sync with the beep by splicing off the wires to the clock's speakers.  This didn't work as is since the voltage coming out was too small, so I tried using transistors(I have no clue what type.  I plugged some in till I got the desired behavior), which worked but was too dim.  I ended up chaining the transistors together and came up with something extremely sensitive.  So sensitive that just approaching it would set it off.  So then I decided screw the alarm clock I'll just have it glow brighter the closer someone gets.  Below is the very basic circuit I used, note I don't know if I have the transistors properly done in it(ECB and all that), but it gets the point across:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RpA2p-KE-LI/AAAAAAAAALs/zWQZDmPGCHo/s1600-h/thing.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RpA2p-KE-LI/AAAAAAAAALs/zWQZDmPGCHo/s400/thing.png" alt="" id="BLOGGER_PHOTO_ID_5084624073989093554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well the weird thing is if the light source is inside the egg  it stops working completely, which I don't know hardly anything about EM fields or whatever is involved to even hazard a guess as to why this is.  The original picture is just an antenna in one egg and the light in another, which worked as expected(Getting near the unlit egg lit the other one).&lt;br /&gt;&lt;br /&gt;Right now I have no clue what I'm doing with it, I'm trying to use spare parts I have to make an egg do something interesting, but I'm missing a lot of essential stuff(Timers, op-amps, etc).  One thought was maybe make an EMI sensor, where the egg glows brighter the more there is....I'll just have to see if I can find another handfull of transistors to get it that sensitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7230358182455641849?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7230358182455641849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7230358182455641849' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7230358182455641849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7230358182455641849'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/07/eggcellent.html' title='Eggcellent'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/Ro1vKOKE-JI/AAAAAAAAALc/Lrd7HTKaAaQ/s72-c/eggs.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8381034485106486503</id><published>2007-06-27T03:58:00.000-07:00</published><updated>2007-07-05T07:26:45.748-07:00</updated><title type='text'>Bunny Pen :(</title><content type='html'>Unfortunately I've decided to completely scrap the bunny pen. Several reasons for this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We would never lock her in, since she is fully trained and accustomed to having run of the apartment (Edit: We've taken to locking her up at night, and I've made a crude but much more functional pen for this purpose)&lt;/li&gt;&lt;li&gt;The thing would be huge and use up even more space than her designated area already uses&lt;/li&gt;&lt;li&gt;The main reason is the wood is shit. It's bowed and bent, and when trying to make frames this doesn't go well at all :( I've learned not to buy cheap wood, unless you plan to plane it yourself.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;(NOTE WILL PUT UP PICS LATER)&lt;/p&gt;&lt;p&gt;Also another woodworking blow this week: IKEA!! I was thinking about making some very simplistic furniture to replace some of our old stuff, and then looked at IKEA for ideas. It seems nuts to spend $30 on wood to make a simple shelf when something like &lt;a href="http://www.ikea.com/us/en/catalog/products/90114752"&gt;this&lt;/a&gt; exists. Or chairs like &lt;a href="http://www.ikea.com/us/en/catalog/products/60100879"&gt;this&lt;/a&gt;. The thing is $100 may seem like you could make it cheaper(And hell you could probably find one for $20 at walmart), until you consider all of IKEAs wooden furniture is made with solid pine, as opposed to garbage like particle board. So even for a simple chair like that you can figure probably $35 for wood, $30 for batting and foam, and $25 for fabric if you made it yourself. So you may save $10, but would probably go over from screw ups and just the hardware needed. Some of their stuff isn't as god-awful cheap(sofas mainly), but they are still very competitive to building it yourself. More elaborate furniture would be much better to make yourself, but since I live in an apartment I can't really use the big power tools that would be needed. &lt;/p&gt;&lt;p&gt;Right now I'm just working on making some sawhorses and such for my workshop using the crappy wood, since who cares how that looks as long as it works. After that I'm not really sure, I may work on a couple of my electronics projects.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8381034485106486503?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8381034485106486503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8381034485106486503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8381034485106486503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8381034485106486503'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/bunny-pen.html' title='Bunny Pen :('/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4217709574629492503</id><published>2007-06-22T06:00:00.000-07:00</published><updated>2007-06-22T10:22:38.771-07:00</updated><title type='text'>Busy</title><content type='html'>Well my work week has been insanely busy this week. I've spent almost all day every day in the lab, and am currently working 3 critical tasks. One is kinda done, at least enough to not be critical anymore, the other is major and my code is being tested on the real equipment right now :( It was originally supposed to be done by someone else on my team(Everyone else has 10+ years of experience on this stuff), but he got something even more severe and it fell on me. While this isn't bad, the task is slightly over my head, but everyone has helped me a lot, which is the only way I've managed to get very far with it. The problem isn't the programming, the problem is how the test system is set up, and tricking it into working similar to a real system. My 3rd task is really simple, but with the other 2 I haven't hardly looked at it yet. This isn't even including non-critical tasks, of which I have 4, but those can wait for now.&lt;br /&gt;&lt;br /&gt;The only plus side to being busy is I can 100% ignore documentation, at least for a couple weeks :-D The even better thing is we have new hires also stuck on documentation. This doesn't get me out of doing it(I'm so close it would be silly to pawn it off), but I can tell them to relay that I can't attend the meetings, thus entirely avoiding direct contact with the 'coordinator'(Which is an entirely other story).&lt;br /&gt;&lt;br /&gt;You may be wondering why if I'm so busy I'm writing this. Truth of the matter is I'm really tired and needed a break. Plus I have something compiling in the lab right now that will take at least 15 minutes. On top of that it's Friday and so I'm even less motivated than normal. Ohhh well, back to work :P&lt;br /&gt;&lt;br /&gt;Edit: Languages I've worked with this week:&lt;br /&gt;1) C/C++&lt;br /&gt;2) Shell Scripting&lt;br /&gt;3) Some Perl&lt;br /&gt;4) A Fortran-like scripting language(Name may be too specific)&lt;br /&gt;5) A markup-like language for &lt;a href="http://www.sl.com/sl_gms_draw.html"&gt;GMSDraw&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4217709574629492503?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4217709574629492503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4217709574629492503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4217709574629492503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4217709574629492503'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/busy.html' title='Busy'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4230410305047034413</id><published>2007-06-16T15:51:00.000-07:00</published><updated>2007-06-17T12:35:38.281-07:00</updated><title type='text'>ROTN Look and Feel</title><content type='html'>Okay, I know it's bad to work on the front-end before the backend.  But I've went ahead and done some of the basic stylistic stuff, just for fun.  This is far from done, but shows how easily themeable the thing is(Each theme took less than 5 minutes).  Also it is slow due to google pages, it will be blindingly fast when run locally as it is meant to.&lt;br /&gt;&lt;br /&gt;Here are 3 themes I whipped up(Using public domain images of course):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tuxrotntheme.googlepages.com/index.html"&gt;Tux&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rotngreentest.googlepages.com/index.html"&gt;Green&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://flowerrotntheme.googlepages.com/index.html"&gt;Flower&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;(Edit: These in no way reflect my personal preferences, just attempts to make very different styles.  Tux was the test theme, green was a 'teen' theme, flower was a feminine theme)&lt;br /&gt;&lt;br /&gt;The only image differences are the top image and the status bars on the download page.  Obviously this will mostly be dynamically generated(Save for the css and images) by the local web server gui monstrosity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4230410305047034413?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4230410305047034413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4230410305047034413' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4230410305047034413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4230410305047034413'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/rotn-look-and-feel.html' title='ROTN Look and Feel'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7476327975433966652</id><published>2007-06-15T09:40:00.000-07:00</published><updated>2007-06-16T02:54:34.105-07:00</updated><title type='text'>P2P Apps</title><content type='html'>Seems like lately I've been talking alot about P2P applications and looking into some of the internals of them, for various reasons.  Basically I'm just posting my thoughts for anyone to refute/confirm them, and also if there are any major contenders I'm not thinking of.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Napster&lt;/strong&gt;&lt;br /&gt;Pros:   Easy to use, lots of users with lots of content. &lt;br /&gt;Cons:  Died due to centralized servers being the target of litigation&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Gnutella/decentralized P2P apps&lt;/strong&gt;&lt;br /&gt;Pros:  Easy to use, lots of content, no centralized server to litigate out of existence. &lt;br /&gt;Cons: Arms race between hostiles and developers, as well as a legal liability that encourages leeching, with no barrier to prevent it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Usenet&lt;/strong&gt;&lt;br /&gt;Pros:  Incredibly fast, lots of content, legal problems are very minimal right now. &lt;br /&gt;Cons:  ISP dependant, and legal troubles are only minimal due to the small user base arising from difficulty for the average idi...user&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bittorrent&lt;/strong&gt;&lt;br /&gt;Pros:  Can be very fast for popular content, no centralized servers to attack.&lt;br /&gt;Cons:  Large legal worries for protected content.  Unpopular content can be very slow. Edit: Central servers to host trackers&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Direct Streaming&lt;/strong&gt;&lt;br /&gt;Pros:  Fast, safe legally for users&lt;br /&gt;Cons:  Requires a central server with large bandwidth and paying royalties&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;P2P Streaming&lt;/strong&gt;&lt;br /&gt;Pros:  Grey legal area compared to normal P2P, can be very fast for popular content&lt;br /&gt;Cons:  Requires a lot of collective bandwidth or video quality reduction, unpopular content would lag or take hours to start playing&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WASTE/Darknets/Etc.&lt;/strong&gt;&lt;br /&gt;Pros: Can be completely safe legally&lt;br /&gt;Cons: Always slow and usually a technical barrier that's too high for average users thus causing a  lack of content&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IRC&lt;/strong&gt;&lt;br /&gt;Pros: None&lt;br /&gt;Cons: It's IRC :-D&lt;br /&gt;&lt;br /&gt;Really I think any new P2P app that would be successfull needs to be:&lt;br /&gt;(1) At least as fast as gnutella&lt;br /&gt;(2) Madly user friendly to keep from frightening the great unwashed&lt;br /&gt;(3) Have content already in place&lt;br /&gt;(4) Have legal protection to make it safer to share&lt;br /&gt;&lt;br /&gt;I'm trying to make ROTN to address each of these:&lt;br /&gt;(1) Cut out the deniability to begin with to keep speed&lt;br /&gt;(2) Web Server GUI to keep people in their browser&lt;br /&gt;(3) Have it able to leech off of existing Gnutella networks&lt;br /&gt;(4) Use headless random data in blocks so that no person is sharing files&lt;br /&gt;&lt;br /&gt;The only main problem I've found is that to do 4 will require at least 2 other parties to be involved(One to distribute the head, and the other to distribute content).&lt;br /&gt;&lt;br /&gt;Also I had a cool idea for even further headless data randomness, make the head variable length, which if you use that as an encryption method makes it even harder to crack.&lt;br /&gt;&lt;br /&gt;For example lets say you have a seed from 0 to 100,000 for the RNG so if you know the size of the chunk you are missing you can still get away with trying 100,000 times if there is known text from what you are retrieving.  BUT!  With a randomly variable sized head you could improve upon this by how many ever bytes the head is.  For example if a head can be between 1kb to 101kb,  you get 100kb*100,000 seeds = 100,000 ^2 = 10,000,000,000  possible combinations of seeds and header sizes.  You could do alot more fun stuff too, like make the head also have itself be an XOR key, driving this up into an insane number of tries needed to break it.  The big problem with this as encryption is that it's a shared secret.  Really though I'm just talking about cryptography academically as opposed to anything particularly practical.  Also this assumes that the psuedo RNG is NP hard to determine the next bit of output...I have no clue if this is true or not for normal RNG algos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7476327975433966652?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7476327975433966652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7476327975433966652' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7476327975433966652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7476327975433966652'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/p2p-apps.html' title='P2P Apps'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-503510415708568518</id><published>2007-06-13T07:44:00.000-07:00</published><updated>2007-06-14T08:00:10.000-07:00</updated><title type='text'>OMFGBBQ!</title><content type='html'>This will be a tad more personal than normal but not too much.&lt;br /&gt;&lt;br /&gt;Okay so I've been busy, and already am burnt out for the week even though it's Wednesday. Part of the problem is I've been trying to roll over my sleeping hours(I want to sleep from 5-12), which has not been going well( I got caught up playing Odin Sphere till 7pm and then ended up getting distracted until midnight ), so I've been severly deficient in sleep. Also work has been very busy, although today I can't get motivated to get much done.&lt;br /&gt;&lt;br /&gt;But I have been working on my projects regardless(Mostly software stuff), and so here's list to myself what I need to for the software things I'm working on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reverse FTP&lt;/strong&gt;(This allows the TCP client to act as an FTP Server, provided the FTP Client can act as a TCP server)&lt;strong&gt;:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow it to transfer in blocks and not in one big chunk&lt;/li&gt;&lt;li&gt;Be a little nicer to the memory usage&lt;/li&gt;&lt;li&gt;Bug &lt;a href="http://jaysherby.blogspot.com/"&gt;Jay&lt;/a&gt; until he agrees to help me test that it works :-D&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Web GUI Design&lt;/strong&gt;(Yes I'm actually taking the time to do CSS and all that fluff, right now I'm doing samples to get it looking correct then going to have the HTML generated by Web Server code, but have CSS and the images handled elsewhere)&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Finish up the download operations screen sample&lt;/li&gt;&lt;li&gt;Do a better test sample for Library screen&lt;/li&gt;&lt;li&gt;Completely do the search screens&lt;/li&gt;&lt;li&gt;Decide on options and make configuration screens&lt;/li&gt;&lt;li&gt;Clean up my CSS so it's easily skinnable&lt;/li&gt;&lt;li&gt;Make a couple of new proof of concept skins&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Other things to start:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Gnutella wrapper, which looks like it will be more difficult than I originally thought when considering hostiles, robots, known-hosts, etc. This is fine since it looks like I will need to figure out the same thing for my network as well&lt;/li&gt;&lt;li&gt;Overall design specification, and more formal protocol write-up&lt;/li&gt;&lt;li&gt;Hand done RNG to avoid platform/versioning issues, but is still fast&lt;/li&gt;&lt;li&gt;ROTN backend coding&lt;/li&gt;&lt;li&gt;Coding Web Server for GUI(Which looks like it will almost be as hard as Swing would have been ;)&lt;/li&gt;&lt;li&gt;Make a Windows box, so I can learn how to run Java programs on one, yes this will be difficult for me&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I've also decided that the first version probably won't be 100% deniable, and will focus on speed to make sure it even works(There needs to be a decent user base before deniabilty is even feasible). But I plan to make the protocol in such a way so that in the future deniability could easily be added(IE just cut a few steps from the deniable one and add them later).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-503510415708568518?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/503510415708568518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=503510415708568518' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/503510415708568518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/503510415708568518'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/omfgbbq.html' title='OMFGBBQ!'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3816326473000725748</id><published>2007-06-09T10:10:00.001-07:00</published><updated>2007-06-09T10:28:14.668-07:00</updated><title type='text'>Local Web Server GUI</title><content type='html'>Here is simple proof of concept for using a local web server as a GUI.  The code is &lt;a href="http://black.gavin.googlepages.com/WebServer.java"&gt;here&lt;/a&gt; and yes I know it's &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;freakin&lt;/span&gt;' Java.  The reason being is that socket stuff in C and C++ isn't cross platform(Windows throws away standards and uses garbage like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;WinSock&lt;/span&gt;, and yes it is completely stupid and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;anti-competitive&lt;/span&gt; of them).  To run it simply do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;javac WebServer.java&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;java WebServer&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Then point your browser to localhost&lt;/li&gt;&lt;li&gt;To kill the server type &lt;span style="font-weight: bold;"&gt;murder &lt;/span&gt;in the text box&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;It's a very silly little program, but at least it does what it's supposed to(Take input locally from the browser).  Below is a screenshot of it running in all it's glory:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RmrgreICUtI/AAAAAAAAALU/aBSH0OR15V0/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RmrgreICUtI/AAAAAAAAALU/aBSH0OR15V0/s400/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5074114967612052178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another nice thing about this setup as opposed to a normal application, that instead of minimizing, iconifying, or putting it in the system tray to get rid of it but still have it running, you can simply navigate away from the page and then come back later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3816326473000725748?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3816326473000725748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3816326473000725748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3816326473000725748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3816326473000725748'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/local-web-server-gui.html' title='Local Web Server GUI'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RmrgreICUtI/AAAAAAAAALU/aBSH0OR15V0/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8235327585052844917</id><published>2007-06-04T14:51:00.001-07:00</published><updated>2007-06-04T14:52:46.870-07:00</updated><title type='text'>A picture is worth 1000 words</title><content type='html'>3 of those words could easily be WTF:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RmSJm27NJNI/AAAAAAAAALM/Ownm6SYxrL8/s1600-h/IMG_1281.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RmSJm27NJNI/AAAAAAAAALM/Ownm6SYxrL8/s400/IMG_1281.JPG" alt="" id="BLOGGER_PHOTO_ID_5072330380997895378" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8235327585052844917?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8235327585052844917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8235327585052844917' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8235327585052844917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8235327585052844917'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/picture-is-worth-1000-words.html' title='A picture is worth 1000 words'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RmSJm27NJNI/AAAAAAAAALM/Ownm6SYxrL8/s72-c/IMG_1281.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2412421459126064660</id><published>2007-06-02T11:44:00.001-07:00</published><updated>2007-06-02T12:37:52.823-07:00</updated><title type='text'>Perhaps a tad ROTN</title><content type='html'>Okay so I've put my ROT code &lt;a href="http://black.gavin.googlepages.com/rot.html"&gt;here&lt;/a&gt;, just for future reference.  I think I'll try my hand at making a full featured P2P app(Randomly Obfuscated Transfer Network) that I want to meet the following criteria:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cross Platform&lt;/li&gt;&lt;li&gt;Easy to use GUI interface&lt;/li&gt;&lt;li&gt;Random unidentifiable data transmissions&lt;/li&gt;&lt;li&gt;Unable to tell who is uploading/downloading files&lt;/li&gt;&lt;li&gt;Efficiency(IE no algo over n*log(n), nor weird pathways for data)&lt;/li&gt;&lt;li&gt;No central server of any sort&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I have written a protocol that should accomplish all this(It is more than slightly complicated so I'm not putting up all the details), but the main problem is it is very taxing on disk space on the client's machine(I'm currently thinking around 2GB).&lt;br /&gt;&lt;br /&gt;Let me tell you the very basic story of a very similar system, and what I think is wrong with it.   &lt;a href="http://tor.eff.org/overview.html.en"&gt;Tor&lt;/a&gt; is meant to accomplish a very similar feat, but is incredibly slow.  From there website:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tor.eff.org/images/htw2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://tor.eff.org/images/htw2.png" alt="" border="0" /&gt;&lt;/a&gt;Basically all communications are sent through a random chain of clients to perform communication, so no one client can figure out either the source or the destination.  Also it uses end to end encryption so that no one in between can see what is being sent.  Really a great idea except one fatal flaw: it's SLOW!!!  With setting up a link, sending every packet through many computers, and using strong encryption things start to get complicated.&lt;br /&gt;&lt;br /&gt;My idea is pictorially:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RmHDhm7NJMI/AAAAAAAAALE/UdX1XlAAnDA/s1600-h/Diagram1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RmHDhm7NJMI/AAAAAAAAALE/UdX1XlAAnDA/s400/Diagram1.jpg" alt="" id="BLOGGER_PHOTO_ID_5071549637547861186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Basically every client has some of the data on it, and passes them off periodically.  If someone wants the data it just gets passed to them, since everything is being passed around it impossible to know if data is being transferred for the purpose of reconstruction or just to keep the network going.  Bandwidth shouldn't be a huge issue since the data chunks would be small and transmission would be fairly intermittent.&lt;br /&gt;&lt;br /&gt;The major idea that allows this to work though is my idea of headless random data.  For example with ROT we has some thing like (&lt;span style="font-weight: bold;"&gt;KNOWN_PLAINTEXT + DATA) XOR RAND(SEED)  &lt;/span&gt;but instead if we break data into chunks we get:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;( (KNOWN_PLAINTEXT + DATA1) + DATA2 + DATA3 ...  + DATAN) XOR RAND(SEED)&lt;/span&gt;&lt;br /&gt;So the only way to know what data is being transmitted is to have the first block, due to the nature of XOR it is theoretically(In the real science sense) impossible to ever figure out what is in DATA2 ... DATAN.  So instead of complicated encryption you use headless random data and just gather the pieces.  There are alot of tricks to getting this to work, but I've already worked them out, and will talk about them more when I get further along.&lt;br /&gt;&lt;br /&gt;One major drawback is that this depends on the number of nodes present, if there isn't many nodes than you may end up downloading an entire file from one person, and it would slow down since you'd have to rate limit you're requests. &lt;br /&gt;&lt;br /&gt;The REAL problem though is that if someone who is the only one left with a middle segment of data goes away suddenly and never comes back that file would be hopelessly corrupted.  I have a plan to deal with this but haven't worked it out thoroughly on paper(Redundancy of data based on network size, and garbage collection of dead data).&lt;br /&gt;&lt;br /&gt;We'll see if this ever reaches fruition or not, since it's such a major undertaking I assume I'll run into more than a handful of problems.  My first being how to do client server style coding that gets around stuff like firewall setup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2412421459126064660?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2412421459126064660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2412421459126064660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2412421459126064660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2412421459126064660'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/perhaps-tad-rotn.html' title='Perhaps a tad ROTN'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RmHDhm7NJMI/AAAAAAAAALE/UdX1XlAAnDA/s72-c/Diagram1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7042443956597803240</id><published>2007-06-02T06:02:00.000-07:00</published><updated>2007-06-02T11:39:36.214-07:00</updated><title type='text'>On candles &amp; rabbit eyes</title><content type='html'>Well first off, for my wife's birthday I got her stuff to make candles(Molds, scents, additives, wax, wicks, dyes, etc).   Here's her first attempt using just a plain pillar mold, seemed to have turned out well:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RmFrVW7NJHI/AAAAAAAAAKc/elryzZItCE0/s1600-h/candle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RmFrVW7NJHI/AAAAAAAAAKc/elryzZItCE0/s400/candle.jpg" alt="" id="BLOGGER_PHOTO_ID_5071452670071219314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second off, here's a bunny photo I tried to get rid of the red-eye on, didn't go great as you can see:&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RmG4q27NJKI/AAAAAAAAAK0/i6GT7IfLEBM/s1600-h/bunz.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RmG4q27NJKI/AAAAAAAAAK0/i6GT7IfLEBM/s400/bunz.jpg" alt="" id="BLOGGER_PHOTO_ID_5071537701833745570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The problem is two fold: First their eyes are really huge , but the main problem is it's not &lt;span style="font-weight: bold;"&gt;red&lt;/span&gt; eye,  instead they get rainbow eye.   I put a zoomed in photo of it before doctoring it and the original undoctored photo.  You can see all the colors except green get reflected.  I do know that bunnies can distinguish colors(They've done tests, and she loves red pajama pants), so I don't know if it has something to do with that, but it's very difficult to correct none-the-less&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RmFrp27NJJI/AAAAAAAAAKs/wIkUqRmlDv4/s1600-h/bunEye.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RmFrp27NJJI/AAAAAAAAAKs/wIkUqRmlDv4/s400/bunEye.jpg" alt="" id="BLOGGER_PHOTO_ID_5071453022258537618" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RmG5BW7NJLI/AAAAAAAAAK8/fiQ0kz90Sic/s1600-h/bunz2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RmG5BW7NJLI/AAAAAAAAAK8/fiQ0kz90Sic/s400/bunz2.jpg" alt="" id="BLOGGER_PHOTO_ID_5071538088380802226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And as a note about the bunny pen...I've ran into a snag because the wood is cheap and not perfectly straight, so the bottoms won't go flush.  I've made a design change to correct this, but now need to goto Lowes to get some bolts,  nuts, and lock washers...but the driving is so god-awful here I've been putting it off, after that it's just a matter of attaching the fencing and hauling it downstairs, and putting it together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7042443956597803240?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7042443956597803240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7042443956597803240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7042443956597803240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7042443956597803240'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/on-candles-rabbit-eyes.html' title='On candles &amp; rabbit eyes'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/RmFrVW7NJHI/AAAAAAAAAKc/elryzZItCE0/s72-c/candle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-329169675221741743</id><published>2007-06-01T09:22:00.000-07:00</published><updated>2007-06-01T09:45:22.415-07:00</updated><title type='text'>Work</title><content type='html'>I don't know what is worse: having too much work or being bored to tears. I spent the better part of my day in the lab trying to massage data from a transmission emulator into being accepted into a control station. Both of these are separate machines, with a 3rd machine inbetween.&lt;br /&gt;&lt;br /&gt;The problem is, with what I was working on, the emulator transmits garbage data that fails on pretty much all levels(Check sums, memory addresses, etc). The *fun* thing is you can only change up to 5 bytes at a time! The check sum takes 2, the memory ranges take at least 2 as well to fix...leaving me with 1 whole byte to actually use. Which if you switch the processor type the emulator is using, that byte needs to be used for saying the processor is different! So you're screwed without tedious manipulation of the bytes used to fix the memory.&lt;br /&gt;&lt;br /&gt;And this isn't even to begin with the complexity of the software on the control station, and massive amounts of time it takes for things to actually run. Also amusing is the emulator runs in Windows of all things, even though the rest of the lab is Unix! This actually isn't a huge problem, except Windows is shit about freeing up abandoned socket connections so it usually requires a system restart to change some key things(That I won't mention ;)&lt;br /&gt;&lt;br /&gt;As always I don't want to get into real specifics, and without personally knowing me you probably can't even guess what the system is emulating. This isn't even starting on my other fixes/additions, and working on getting my changes peer reviewed, as well as filling out alot of paper work since this change is a direct change to the main build...bleh, breaks over, back to work :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-329169675221741743?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/329169675221741743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=329169675221741743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/329169675221741743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/329169675221741743'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/06/work.html' title='Work'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1163342779420830529</id><published>2007-05-28T12:20:00.000-07:00</published><updated>2007-05-28T12:23:19.923-07:00</updated><title type='text'>Random Obfuscation Tool</title><content type='html'>---snip---&lt;br /&gt;&lt;br /&gt;With current companies seeking to extort money from anyone sharing files, it's always a good idea to try finding ways around their BS.  One thought I've been mulling over is sending computer based random data. The original idea was that of a one time pad, where you XOR a message with random data and then use this new set of data with the random data you used earlier to retrieve the message.&lt;br /&gt;&lt;br /&gt;To break it up into steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sender:  message  XOR  rand_data = pad&lt;/li&gt;&lt;li&gt;receiver:  rand_data  XOR  pad = message&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The problem with this is that any data you wanted to get you'd need twice as much to reconstruct it, so it becomes terribly inefficient with large files. But assume instead of true random data used to XOR you used computer generated random data. This type of random data can be reconstructed given a seed value. So instead of the above scenerio:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sender:  message XOR rand(seed) = pad&lt;br /&gt;&lt;/li&gt;&lt;li&gt;receiver:  pad XOR rand(seed) = message&lt;/li&gt;&lt;/ol&gt;But this seems troublesome too, not because of inefficiency but since now one would be saying that the random data isn't actually random by giving the seed value. So instead what if we had a mechanism to guess the seed without being given it. Lets say &lt;span style="font-weight: bold;"&gt;pad&lt;/span&gt; in the example above has a md5sum of &lt;span style="font-weight: bold;"&gt;chksum&lt;/span&gt; then lets assume that the first values of &lt;span style="font-weight: bold;"&gt;message&lt;/span&gt; are &lt;span style="font-weight: bold;"&gt;chksum&lt;/span&gt;, we can then try all possible &lt;span style="font-weight: bold;"&gt;seed&lt;/span&gt; values until we get that the first few bytes are equal to &lt;span style="font-weight: bold;"&gt;chksum&lt;/span&gt;.  So in steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sender:  message XOR rand(seed) = pad&lt;/li&gt;&lt;li&gt;sender:  md5sum(pad) = chksum&lt;/li&gt;&lt;li&gt;sender:  (chksum XOR rand(seed) ) = rand_chksum&lt;/li&gt;&lt;li&gt;sender: rand_chksum + pad = new_pad&lt;/li&gt;&lt;li&gt;receiver: md5sum(new_pad - rand_chksum) = chksum&lt;/li&gt;&lt;li&gt;receiver: rand(all_seed) XOR rand_chksum  until equals chksum&lt;/li&gt;&lt;li&gt;receiver: Now knows seed that sender used&lt;/li&gt;&lt;li&gt;receover: Mptes tjat pad = new_pad - rand_chksum&lt;br /&gt;&lt;/li&gt;&lt;li&gt;reciever: pad XOR rand(seed) = message&lt;/li&gt;&lt;/ol&gt;A little more complicated, but still efficient, and keeps it so sender is transmitting random bits and no additional information.&lt;br /&gt;&lt;br /&gt;Currently I have a working prototype that does the same thing except the chksum is replaced by known plaintext. I want to finish it in it's entirety before publishing it. Below is a list of what I need to do before it's done:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Check that user input is correct, very simple 5 minutes of coding&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use checksums instead of plaintext for the known text&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write a couple of layers to run underneath popular P2P apps to automatically accomplish this&lt;/li&gt;&lt;/ul&gt;Thankfully the main program was easy to write after I brushed up on binary I/O, it can transfer large files moderately quickly although it does use a decent amount of memory, which I might eliminate if I find it is too big a problem.&lt;br /&gt;&lt;br /&gt;The main reason I think this is better than encryption is that there is deniability over the contents of the data since any piece of data coupled with other data crafted through XOR can be made into any other piece of data. So saying that the random data is a song is really baseless from a technical standpoint since it could just as easily be a copy of Firefox. Another plus is that even if it was decided to be an encryption method anyone attempting to sue would have violated criminal law since they circumvented a protection mechanism thus violating the completely fucking retarded DMCA(No need to mince words).&lt;br /&gt;&lt;br /&gt;One other thing I have been thinking about is perhaps multiple, easy to render, legitimate reconstructions of the same random data. This may not fool anyone, but may make it easier to show the down syndrome patients that run the courts that random data truly can be made into anything. For example if they say that you could brute force a seed value to retrieve a song, you could also say that using a built in hash function it creates an animated picture. There are obviously major hurtles to this, without getting back into the whole redundant data problem, so for now it's just an idea.&lt;br /&gt;&lt;br /&gt;Finally this is all a moot issue if the thought crime law ever passes.  Basically it says that &lt;span style="font-weight: bold;"&gt;attempted&lt;/span&gt;    copyright infringement is  illegal, so if a large media conglomerate puts up&lt;span style="font-weight: bold;"&gt; popular_song.mp3&lt;/span&gt;, and someone downloads it, even if it's a garbage file that doesn't have the song in it, you're still legally liable as if you had downloaded the song. Although IIRC downloading songs is still a legally gray area, so they may just wait for you to be sharing it, so then they can say you were attempting to distribute copyrighted material.&lt;br /&gt;&lt;br /&gt;---snip---&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1163342779420830529?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1163342779420830529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1163342779420830529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1163342779420830529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1163342779420830529'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/05/random-obfuscation-tool_28.html' title='Random Obfuscation Tool'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2593372575627333963</id><published>2007-05-11T08:42:00.000-07:00</published><updated>2007-05-12T12:29:45.924-07:00</updated><title type='text'>Documentation</title><content type='html'>*snip*&lt;br /&gt;&lt;br /&gt;Just for safety,  I archived away the old post since it was a little too detailed and made me sound slightly crazy(I'd been comparing about a 1000 pages of documentation for a solid a week, which apparently melted my brain).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2593372575627333963?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2593372575627333963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2593372575627333963' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2593372575627333963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2593372575627333963'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/05/documentation.html' title='Documentation'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-945542788393515763</id><published>2007-05-04T11:14:00.000-07:00</published><updated>2007-05-06T14:46:57.660-07:00</updated><title type='text'>09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0</title><content type='html'>Been working on my AI programs again.  Lets see, I scrapped my old design and have since found something that was very similar to what I was doing, but much more elegant  and less complex.  Actually it's at &lt;a href="http://www.cs.bham.ac.uk/%7Ejxb/NN/nn.html"&gt;this site&lt;/a&gt;, but I have since modified it to get past limits in input and output(I've tested it with about 35 in both directions) as well as graphically display the output.   The main change I need to make is for it to be interactive, IE right now to train it you have to hardcode in what it should learn.  Modification should be straight forward to allow this, but will take a little while since the code is very centered around the preexisting arrays that will have to go.  There is one worry however since it currently runs by reinforcing all things at once(IE 1,2,3,4,5,6...1,2,3,4,5,6...etc as opposed to 1,1,1,1,1,1,1....2,2,2,2,2,2....3,3,3,3....etc).  I guess I'll see when I try.&lt;br /&gt;&lt;br /&gt;Right now it is set up to simply take binary in and then spit out the seven segment equivalent.  My short term goal is to have it take in binary and the encoding of a seven segment display and if both are going at once then it tries to memorize that, if it encounters a special character it will spit out what it knows.&lt;br /&gt;&lt;br /&gt;So right now the following needs to be completed:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Allow dynamically changing parameters to the algorithm, just to further optimize it at runtime&lt;/li&gt;&lt;li&gt;Have it be interactive instead of hardcoded values&lt;/li&gt;&lt;li&gt;Write less rigid code for getting around IO limits.  As of right now it is completely hand done, and to change the amount of output would require alot of work each time.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I've decided to just stay with a terminal interface.  Below is the great "graphics" I'm using(This is just some of the output of it counting back what it knows in 7-segment form):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/Rj5MsY0R90I/AAAAAAAAAJM/bl_8onQmE9w/s1600-h/foo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/Rj5MsY0R90I/AAAAAAAAAJM/bl_8onQmE9w/s400/foo.png" alt="" id="BLOGGER_PHOTO_ID_5061567356670703426" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-945542788393515763?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/945542788393515763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=945542788393515763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/945542788393515763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/945542788393515763'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/05/09-f9-11-02-9d-74-e3-5b-d8-41-56-c5-63.html' title='09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/Rj5MsY0R90I/AAAAAAAAAJM/bl_8onQmE9w/s72-c/foo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-648868568950570265</id><published>2007-05-02T08:14:00.000-07:00</published><updated>2007-05-03T10:48:08.454-07:00</updated><title type='text'>Documentation is teh horror</title><content type='html'>Since my group is inbetween cycles, and I'm the new guy at work I'm stuck doing documentation, which is *really* boring. I obviously can't get into non-technical specifics for a plethora of reasons, but long story short the project was forked in two different directions and code was consolidated, but not the documentation. Anywho so I'm stuck on a part of this trying to merge the two versions. This is kinda a note to myself exactly what my plan of attack is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Identify differences between the two in the textual documentation, make my suggestions, and go ahead and make the probable changes&lt;/li&gt;&lt;li&gt;Fix any changes I was clueless on or just plain wrong&lt;/li&gt;&lt;li&gt;Identify the difference between the graphical documentation and make my suggestions&lt;/li&gt;&lt;li&gt;Fix any diagrams, etc. in the graphical documentation&lt;/li&gt;&lt;li&gt;Add documentation to anything missing still missing it after the merge&lt;/li&gt;&lt;li&gt;Generate new reports based on these changes&lt;/li&gt;&lt;li&gt;Beautify the diagrams generated if they get screwed up and regenerate &lt;/li&gt;&lt;li&gt;Get my version approved and move it to the official version&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;That's it in a nutshell, hopefully won't take that long(I've got a month + 3 week buffer). I'm almost done with part 1(By tommorrow), step 2 will only take a couple hours when I get to it, step 3 will take 2 or 3 days, and step 4 taking another day. 5,6, and 7 will probably take a day or two as well. So really about 2 weeks of work, and probably a week of communication issues/versioning problems.&lt;/p&gt;&lt;p&gt;Another weird thing is everyone here pronounces /etc as et-see, I guess I've never really heard it pronounced, but it seems weird to me. I always assumed it stood for et cetera so I pronounce it as E.T.C or ex or just say et cetera, who knows but it really confused me WTF directory anyone was talking about until they said "Open the password file in et-see".&lt;/p&gt;&lt;p&gt;Edit:  OMFGBBQ!  The graphical documentation that gets dynamically plugged in is insane...so at least another week and a half onto my figures :-(  Ohh well at least it's not an actual deadline just in case I need an extra week, although I don't think I will.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-648868568950570265?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/648868568950570265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=648868568950570265' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/648868568950570265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/648868568950570265'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/05/documentation-is-teh-horror.html' title='Documentation is teh horror'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-920726631235566588</id><published>2007-04-26T13:19:00.000-07:00</published><updated>2007-04-26T13:32:20.606-07:00</updated><title type='text'>Adium and Work</title><content type='html'>This is just really quick response to Michael(?) who posted on my  about using Adium for Mac OSX, since I have no way to contact him.  I didn't think Adium supported encryption, and that was the main thing I wanted to use.  I just checked it's plugins and didn't see anything.  If I'm being dumb and overlooking something, like that it supports Gaim plugins, then let me know(Assuming you ever check back).&lt;br /&gt;&lt;br /&gt;Also a very brief venting session about work.  I actually have something to do(Although it's Systems Engineering stuff for now since we're in between cycles), but I'm not 100% set up on my Solaris account so I can't work on it till that's done...ohh well I only have to be in 7 hours tomorrow and hopefully it'll be straightened out completely before next week.&lt;br /&gt;&lt;br /&gt;Also I had a kinda crazy day since we were all evacuated.  They brought in police in bullet proof vests and tactical 12 gauges, and made us go behind a hill about a quarter mile away, blocked off a major highway in fron of my area, every exit guarded, and I saw no fewer than 20 police cars...but it was a false alarm.  The consensus before I left today is that someone saw a toy gun or something, since it was bring your child to work day and it obviously wasn't a bomb threat(Since it took about 10 minutes with no dogs to clear once they were in).  Who knows...but at least it killed about an hour and a half of boredom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-920726631235566588?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/920726631235566588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=920726631235566588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/920726631235566588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/920726631235566588'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/adium-and-work.html' title='Adium and Work'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7607377694014317135</id><published>2007-04-25T10:29:00.000-07:00</published><updated>2007-04-25T10:36:32.251-07:00</updated><title type='text'>Haikus</title><content type='html'>Here in my office&lt;br /&gt;I sit completely alone&lt;br /&gt;Listening to trance&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bored eight hours a day&lt;br /&gt;In a windowless office&lt;br /&gt;At least I get paid&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My brain will go numb&lt;br /&gt;If soon I do not escape&lt;br /&gt;Far away from here&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wandering the halls&lt;br /&gt;Trying to pass the slow time&lt;br /&gt;An aimless persuit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yes I am that bored&lt;br /&gt;That I sit and write haikus&lt;br /&gt;Since I am still here&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7607377694014317135?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7607377694014317135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7607377694014317135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7607377694014317135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7607377694014317135'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/haikus.html' title='Haikus'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2242237414886137677</id><published>2007-04-25T09:23:00.000-07:00</published><updated>2007-04-25T09:42:03.485-07:00</updated><title type='text'>More software stuff</title><content type='html'>Re-reading what I wrote yesterday(I'm forced to be incredibly bored for 8 hours a day) I found alot of errors and clarifications to make. So if I work on anything like this again I don't want to get screwed up because my notes were erroneous.&lt;br /&gt;&lt;br /&gt;First off all but the loginf.c thing was the wrong source...go figure. Below are all three&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://black.gavin.googlepages.com/runRolef.c"&gt;runRolef.c&lt;/a&gt; -- Source for binary&lt;/li&gt;&lt;li&gt;awaitKey -- init.d script(At home, will put later)&lt;/li&gt;&lt;li&gt;&lt;a href="http://black.gavin.googlepages.com/runRole"&gt;runRole&lt;/a&gt; -- Bash script&lt;/li&gt;&lt;/ul&gt;Also login isn't exactly the problem with forking. The problem is actually exec, which works by replacing the current shell process with the given command. Login uses exec for obvious reasons, so thus sending a process to the background is impossible since that would cause there to be no shell. But using fork we can get around this since it will just be a copy of the current state of the shell when login/exec was called originally. The only problem is this seems to screw up keyboard mappings in that terminal a tad(Backspace mostly). This isn't a problem for me since I put everything I have RBACed off in a menu or GUI, but would be an irritation from a straight terminal(&lt;strong&gt;reset&lt;/strong&gt; doesn't fix it).&lt;br /&gt;&lt;br /&gt;Also my &lt;a href="http://black.gavin.googlepages.com/touchAll"&gt;touchAll script&lt;/a&gt;, to fix the blasted timestamps when you install with portage(Or really any ports system) and set the time wrong like I always do. Especially pertinant for any kernel compiling. I always end up writing a quickie script but never save it. So here it is for me to forget about again.&lt;br /&gt;&lt;br /&gt;I realize 2 of the scripts are trivial...but it just saves me the trouble of remembering if something worked or not(IE putting a whole bunch of non-existent args together, or for loops on the output of find).  Really the only non-trivial thing that's worthwhile is the runRolef.c, since it took a little finesse to conjure up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2242237414886137677?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2242237414886137677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2242237414886137677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2242237414886137677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2242237414886137677'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/more-software-stuff.html' title='More software stuff'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3960867902946376080</id><published>2007-04-24T12:25:00.000-07:00</published><updated>2007-04-24T17:34:56.645-07:00</updated><title type='text'>New computer -- The software perspective</title><content type='html'>First I learned something madly important about Gentoo!  Use etc-update from gentoolkit, or else &lt;span style="font-weight: bold;"&gt;emerge --deep --update --newuse world&lt;/span&gt; will potentially demolish your system due to conflicts in the conf files for udev stuff.   Also don't do it manually, I screwed up a couple and now have problems with some 3D support(glcore to be exact) and login(Which generates a warning about asteriks?).  I will probably just wait till the related packages are updated to fix it since it's not a biggie, but still kinda a PITA.&lt;br /&gt;&lt;br /&gt;First the easy stuff...from my previous &lt;a href="http://gavinblack.blogspot.com/2007/03/aes-encryption-suprisingly-fast-results.html"&gt;encryption tests&lt;/a&gt; I learned that encryption really doesn't do much to system performance, especially AES 128 bit.  So right now everything is AES 128 bit SHA-1(Since it's the default), with varying ways the keys are.  The exception is / with all the apps and stuff, or I'd have to deal with initrd images, which I've successfully avoided so far.  Also I don't really care if someone who gets my system sees what software I installed.  A new problem I learned about is doing scripts with dependencies in /etc/init.d/.   In many distros, you can set the order the run with priority numbers.  Well in Gentoo you are supposed to use depend stuff(Like &lt;span style="font-weight: bold;"&gt;needs&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;before&lt;/span&gt;,&lt;span style="font-weight: bold;"&gt; after&lt;/span&gt;) in the script.  It turns out this is madly counterintuitive, and seems broken, although there must be a way to do it.  I spent a good hour on it, before I gave up.  Right now I just wrote a very cluster-fscked script that takes care of everything, and then does the crypto mappings manually.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://black.gavin.googlepages.com/awaitKey"&gt;The script&lt;/a&gt; basically just waits for the USB token to be inserted and then reads the key from it, mounts /home with encryption, and then frees up the key.  It has some tolerance to screw-ups in naming(sdb, sdc, sdd).&lt;br /&gt;&lt;br /&gt;Also I wrote another special program that will lock the computer from use without encryption...basically it monitors when input devices are attempted to be used and murders everything if certain conditions aren't met.  This way the system can stay up without being able to be tampered with locally.&lt;br /&gt;&lt;br /&gt;The main pièce de résistance, is my RBAC setup.  RBAC stands for Role Based Access Control(I think ;), and basically says a subject(IE User of the system), can perform tasks in a particular capacity.  The advantage is that say you have a role for listening to music, and another for looking at pictures, if the music part gets broken into, or goes haywire, it can only effect the music stuff and nothing else like the pictures. Right now anything that touches the network is into a role, and anything that logically goes with one of those roles.  For example music has xmms, wmusic(xmms dock app), streamripper, and firefox set to shoutcast.   The main subject though has to be UID O(AKA root privledges), since you have to effectively login with different UIDs to make it work.&lt;br /&gt;&lt;br /&gt;Actually before I get into the specs, let me do the pros and cons of this over conventional methods:&lt;br /&gt;--- PROS ---&lt;br /&gt;* Data is more secure since it's segmented from each other&lt;br /&gt;* Automatic sorting since things will be stored according to their role&lt;br /&gt;* System more secure from outside attacks, since no need for wheel(su) and can't access any other programs&lt;br /&gt;* As much control as you need over the system files&lt;br /&gt;&lt;br /&gt;--- CONS ---&lt;br /&gt;* Can have data crossover problems without planning.  For Example:  Uploading pictures, but internet role can't access picture role files&lt;br /&gt;* Nothing immune from user screw ups.  rm -rf *, murders system and not just data like it normally would, although you could make a role for the terminal if you really wanted to&lt;br /&gt;* More complicated to run programs:  For example: &lt;span style="font-weight: bold;"&gt;wmusic&lt;/span&gt; now becomes &lt;span style="font-weight: bold;"&gt;runRole rMusicer wmusic&lt;br /&gt;&lt;/span&gt;IMO this isn't a big deal, since you'd normally do this once when making menus and aliases&lt;br /&gt;* X display managers don't play nice with multiple users sending things to one server&lt;br /&gt;&lt;br /&gt;Actually implementing it was more complicated than need be.  I'm just going to run through the steps needed to get it work, with the source linked so it's trivial to do it again:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First you have to have a simple program to just run a command.  This will be used by &lt;span style="font-weight: bold;"&gt;/etc/passwd&lt;/span&gt; to run a login script for the roles.  Just calling a script won't work since it requires a binary, so basically a &lt;span style="font-weight: bold;"&gt;system("scriptPath");&lt;/span&gt; in a C program works.&lt;/li&gt;&lt;li&gt;Then when creating the roles just use that binary as the login: &lt;span style="font-weight: bold;"&gt;adduser -m -G users, audio -s /opt/bin/rbacSh rineter&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Now just a very &lt;a href="http://black.gavin.googlepages.com/runRolef.c"&gt;small script&lt;/a&gt; to force a login with the role given and set it up to execute the program on login&lt;/li&gt;&lt;li&gt;One major problem was that login cannot be forked.  So no &lt;span style="font-weight: bold;"&gt;&amp;&lt;/span&gt; will work for running programs.  I wrote a &lt;a href="http://black.gavin.googlepages.com/runRolef.c"&gt;program&lt;/a&gt; to remedy that which uses a trick of running an instance of login, then forking that instance to a new instance and killing the original.  I'm pretty sure that's the only way to fork login without modifying it's code...which I didn't want to deal with.&lt;/li&gt;&lt;li&gt;After that it's just a matter of setting up the roles and adding them to menus and such.  For example on the screenshot below the instance of XMMS and it's dockapp are in the rmusicer role, where as the minimized firefox and gaim stuff is the rineter role.  The stuff in the menu(Which has more stuff now) all also has it's roles, except for the terminal app.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Really overly complicated, considering the intentional lack of features.   The terminal is the desktop(IE always in background) and there is a different term for each desktop.  Other than that it's just a whole bunch of dockapps, and setting up lm_sensors which I'd never done before.  A list of dockapps I'm using so I can remember them:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;wmupmon -- monitor how long the system is up&lt;/li&gt;&lt;li&gt;wmSMPmon -- SMP and memory usage&lt;/li&gt;&lt;li&gt;wmgtemp  -- Gets temperature of CPU and mobo&lt;/li&gt;&lt;li&gt;wmnd -- Displays network usage&lt;/li&gt;&lt;li&gt;wmusic -- Controls XMMS&lt;/li&gt;&lt;li&gt;wmix -- Controls the volume, and does a nice TV-like volume display&lt;/li&gt;&lt;li&gt;docker -- Allows the little mini icons for stuff like gaim(Err...pidgin, fucking AOL!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;wmdrawer -- The menu with a list of my common apps&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;  Anywho, a screenshot to slap a bow on this turd.  The rainbow thingie is just a music visualization program, and desktops are changed by using the scroll wheel in the upper-right area:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RiwjUxXf0jI/AAAAAAAAAJE/H0NghooTOfI/s1600-h/sc.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RiwjUxXf0jI/AAAAAAAAAJE/H0NghooTOfI/s400/sc.jpg" alt="" id="BLOGGER_PHOTO_ID_5056455321386471986" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3960867902946376080?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3960867902946376080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3960867902946376080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3960867902946376080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3960867902946376080'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/new-computer-software-perspective.html' title='New computer -- The software perspective'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/RiwjUxXf0jI/AAAAAAAAAJE/H0NghooTOfI/s72-c/sc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2332268448376853352</id><published>2007-04-23T14:24:00.000-07:00</published><updated>2007-04-23T14:45:30.399-07:00</updated><title type='text'>Work Day One -- A maze of twisty passages all alike</title><content type='html'>After doing nothing for 4 months, I finally started work.  Actually I was just bored to tears all day.  First came the ridiculously common sense lectures, like ethics and whole bunch of stuff that nobody cares about.  With the exception of benefits of course, since those aren't terribly straight forward.  Unfortunately I don't get my3 weeks per year vacation straight away :(  but I do get it accrued each month.  Also apparently I get 48 hours a year floating holidays, which is more or less the same thing, although it's based on months(Use it or lose it sort of thing) so I only have 36 right now.  Also I can forward a week when I want.  So if I play it right I *should* be able to take a month off during X-mas.  If not then around March next year.   Another odd thing is infinite sick days(Within reason).  So if your sick it doesn't cut into anything, so that's at least a good thing.  The last obscure benefit thing is that I'm covered medically and everything even though I haven't signed up.  Basically you just keep your receipts and submit them when you finally do get signed up.&lt;br /&gt;&lt;br /&gt;Then after that I met my manager, who seems nice enough, and shoved into my office.  The offices are shared, two people to each(They are fairly big so it's not at all cramped), but mine has someone who works from home part-time and is away from everything else.  So I just set in my office alone filling out paperwork for about 2 hours, and then staring blankly at my desk for another hour.  The remaining hour or so was spent navigating the insane halls to accomplish: Getting my parking pass, seeing my manger, getting supplies, and going to the bathroom.  Everything is arranged in a block, so you will just wander aimlessly around having everything look exactly the same, thankfully there were maps and I could use them to get a little closer to my office each time I saw one.&lt;br /&gt;&lt;br /&gt;One thing that's upsetting is my main computer is Windows :-(  and I have to tunnel into do any coding.  Although I won't be coding anything for a while since I'm stuck doing the documentation since they are inbetween cycles and I'm not cleared yet.&lt;br /&gt;&lt;br /&gt;Another thing is my manager seemed obsessed with driving and parking, or at least was worried about me using 270, which is understandable since the traffic is horrible since it's right before the beltway.  I've decided to start around 6am everyday to avoid the traffic, and so I can get off early to get a good parking spot.  It took roughly 20 minutes to go the 5 miles I have to go this morning, but was thankfully much quicker coming back during normal hours(7:30 and 4:30).&lt;br /&gt;&lt;br /&gt;I got one polite correction today when I answered the phone.  It's one of those monstrous entities with all the little flashy red lights and buttons, and I had no clue if I had actually answered it or not and just said "Umm...hello?".  Apparently I need to answer "Hi this is Gavin" :-D&lt;br /&gt;&lt;br /&gt;That's about it, I still need to set up my Citrix accounts and learn to use the phone, as well as enter my time  worked online, but I'll deal with that tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2332268448376853352?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2332268448376853352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2332268448376853352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2332268448376853352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2332268448376853352'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/work-day-one-maze-of-twisty-passages.html' title='Work Day One -- A maze of twisty passages all alike'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3348783132644365250</id><published>2007-04-22T12:15:00.001-07:00</published><updated>2007-04-22T19:36:36.405-07:00</updated><title type='text'>New Computer</title><content type='html'>First to keep track of what I'm doing: The bunny pen is *almost* done, just gluing the joints together, which is a little more painful then it should be.&lt;br /&gt;&lt;br /&gt;Now onto my new computer...what originally was going to be a cheapy sub $100 encryption backend, has now ended up costing over $300($80 HD, $85 CPU, $25 RAM, $80 MOBO, $35 Case) and is insanely overpowered and now replacing my old computer. Dual Core Pentium D processor, with .5GB 800mhz DDR2 RAM, and SATA 300 harddrive. Couple that with buying the most expensive DSL service available, and it's a completely different computing experience. I had really doubted whether or not it would make a big difference, but I've noticed on average really system intensive stuff like emerge goes roughly 6 times faster than it used to. Also I couldn't imagine not having a multi-core/cpu system anymore, since that seems to make the biggest difference in performance. Basically, any new process picks the core with the least load on it, so for example if you are generating a big encryption key you won't notice any sluggishness when opening other applications since it's running on a completely different core. This more or less eliminates the need for a separate machine for encryption like I originally wanted to do.&lt;br /&gt;&lt;br /&gt;One weird thing with SMP(Symmetric Multi-Processing) is with emerge.  It uses both cores simultaneously.  I think I figured out what it's doing though.  It seems to calculate the dependencies for compiling and pick any 2 that aren't dependent on one another and ready to be compiled and do both simultaneously.  You can tell when it runs out of these since there will be large gaps in one core while it waits on the compilation of the other to complete.    &lt;br /&gt;&lt;br /&gt;There are a few problems with having bleeding edge equipment though. The biggest dissappointment is the SATA 300 harddrive, which is what I originally based the system around. It's speed is definitely faster then the fastest PATA devices, but not by leaps and bounds. After some research it just appears that not everything is 100% supported yet since they are so new, so hopefully in a couple months I can get a little more speed out of it. Another thing is that the built in NIC refuses to be seen by any version of Linux. My assumption is that the chip isn't supported yet, or at least not in any stable branches. This isn't a big deal since I have tons of PCI NICs, but only the newest kernel versions can support my PCI bus. I've had to use alot of things marked &lt;span style="font-style: italic;"&gt;Experimental&lt;/span&gt; in the kernel, since they are recent additions. The hardware sensor monitor, just supports temp and fan speeds, but the kernel notes that it supports alot more info that will soon be supported. Also another weird thing, that I don't know if it's common, is a dedicated random number generator chip, which I'm currently not using, but is still interesting. The onboard soundcard, seems to be anti-supported...very few versions of Linux I tried hit it properly(They see it, but everything generates a horrible high pitched noise), and their are very few channels available to adjust in ALSA, another thing I hope is better in a few months.&lt;br /&gt;&lt;br /&gt;Eventually I'd like to put in a little more memory, since I use about 80% of it now, and *maybe* a new graphics card, although they are so expensive and moderately unecessary(Since the onboard one seems to do everything just fine).&lt;br /&gt;&lt;br /&gt;Onto the pics:&lt;br /&gt;&lt;br /&gt;All the pieces(Except I didn't use the graphics card I layed out):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RiwYtBXf0fI/AAAAAAAAAIk/M9Q5k3N7boM/s1600-h/img1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RiwYtBXf0fI/AAAAAAAAAIk/M9Q5k3N7boM/s320/img1.jpg" alt="" id="BLOGGER_PHOTO_ID_5056443643370394098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Everything together:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RiwZEhXf0hI/AAAAAAAAAI0/LGEOLfTmMaw/s1600-h/img2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RiwZEhXf0hI/AAAAAAAAAI0/LGEOLfTmMaw/s320/img2.jpg" alt="" id="BLOGGER_PHOTO_ID_5056444047097319954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Temporary Work area(Obviously will remove the extra monitor, keyboard, and mouse soon):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RiwZThXf0iI/AAAAAAAAAI8/vG8Jjnt7UgA/s1600-h/img3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RiwZThXf0iI/AAAAAAAAAI8/vG8Jjnt7UgA/s320/img3.jpg" alt="" id="BLOGGER_PHOTO_ID_5056444304795357730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And to the 3 whole readers besides myself: Next installment you can look forward to exceedingly technical babble about the ridiculous way the system is set up.  Think tin-foil hat levels of encryption and programs/scripts to smoothly perform RBAC control, as well as dockapps galore!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3348783132644365250?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3348783132644365250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3348783132644365250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3348783132644365250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3348783132644365250'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/new-computer.html' title='New Computer'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/RiwYtBXf0fI/AAAAAAAAAIk/M9Q5k3N7boM/s72-c/img1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2095240107530908833</id><published>2007-04-05T23:17:00.000-07:00</published><updated>2007-04-06T18:26:00.828-07:00</updated><title type='text'>Bunny Ben A Prior</title><content type='html'>Well I finally started work on the bunny pen.  I found really cheap wood called furring boards that were roughly the right width, fairly thin(3/4") and 8' tall(Which is why they don't fit in the picture).  I got a dozen ones of 1.5" width and then three 2.5" ones.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RhXnxy703AI/AAAAAAAAAIc/sYBB546zn8I/s1600-h/foo2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RhXnxy703AI/AAAAAAAAAIc/sYBB546zn8I/s320/foo2.jpg" alt="" id="BLOGGER_PHOTO_ID_5050197399838186498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I also ended up getting a big double headed bar clamp which has been ridiculously helpful.  Below is the sad collection of tools I used, except for the tape measure and the Dremel(Which I only used to carve out latches):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RhXncy702_I/AAAAAAAAAIU/KPr0X1SB52I/s1600-h/foo1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RhXncy702_I/AAAAAAAAAIU/KPr0X1SB52I/s320/foo1.jpg" alt="" id="BLOGGER_PHOTO_ID_5050197039060933618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The basic design was two 46" single mitre boards that are fastened with dowel joints to a 4' base(Which is composed of the 2.5" board), on top is a 4' double mitre piece that joins with the single miters.  On the sides of some of the single mitered pieces is a set of 4 holes to connect the panels with dowels(I may need to put one in each baseboard too), and was done with a kinda frustrating jig I made.  The jig was 4' piece of furring board with a miter at the top to line things up.  The cutting was fairly straight forward, with the only problem being I cut my miter box in half by accident, I think I may buy &lt;a href="http://www.amazon.com/Shop-Fox-H3399-Aluminum-Miter/dp/B0000DD5AB/ref=pd_bbs_sr_6/002-8131997-2973662?ie=UTF8&amp;s=hi&amp;amp;qid=1175908949&amp;sr=8-6"&gt;this one&lt;/a&gt; for my next project though(Since it seems retarded to make them from plastic).   I've learned that measuring is overrated, I have a ton more accuracy measuring once and then using the first piece cut as a template, overall I think I measured 5 times for about 50 cuts.&lt;br /&gt;&lt;br /&gt;Also my drill is really scaring me as it has injured me once already by spinning a piece of wood that ripped through my pants and cut up my leg, and it emits a blinding spark if thrown into hard reverse after extended drilling.  It's really really bright(The spark that is), I have been looking down at my shirt and just seen a little brief glow like a really bright flashlight is being shone on it(This is in a well lit room).  Also it was at one point moving the large workbench I was working on about an inch back and forth, while drilling through a  thick hardwood board clamped to it.    So if anyone actually read this far you'll be glad to know that eventually on Mythbusters they will test the myth of whether or not a piece of sheet metal spinning on a hand drill disemboweled a young engineer while simultaneously electrocuting him to death.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2095240107530908833?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2095240107530908833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2095240107530908833' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2095240107530908833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2095240107530908833'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/bunny-ben-prior.html' title='Bunny Ben A Prior'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RhXnxy703AI/AAAAAAAAAIc/sYBB546zn8I/s72-c/foo2.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2587207955060867373</id><published>2007-04-05T22:59:00.000-07:00</published><updated>2007-04-05T23:15:25.283-07:00</updated><title type='text'>Fish stuff</title><content type='html'>First off the lighter fish stuff...which is a hose.  Actually it's a siphon hose, with gravel/small fish gaurd, starting bulb, and stopcock.  Anyone who has ever cleaned a fish tank knows what a PITA siphoning can be: shake it up and down or suck it to start, make sure gravel doesn't get stuck inside, bend and hold up the hose to empty the water.  This completely eliminates all these problems:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.petco.com/Assets/product_images/6/6924781212718C.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 223px; height: 223px;" src="http://www.petco.com/Assets/product_images/6/6924781212718C.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But the main reason I'm writing is that my loach(The only fish I cared about) is now dead.  Basically we bought a frog a few months ago that had dropsy(Probably bacterial), which killed it and every other fish.  Dojo finally contracted it(Probably delayed since he's scaleless), and we had to get rid of him and the ramshore snail(In case it was a carrier).  I guess the lesson learned is to always quarantine new fish before introducing them to the community, which we now have the equipment to do for the next time.  My wife disposed of all filters and gravel as well as bleaching everything else to eliminate any traces of the bacteria, so hopefully no more tankfuls of dying fish.  Below is a short clip of [a somewhat blurry] Dojo and Tiger from a long time ago:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/C4SZjPFakws"&gt;&lt;/a&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/C4SZjPFakws"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/C4SZjPFakws" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2587207955060867373?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2587207955060867373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2587207955060867373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2587207955060867373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2587207955060867373'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/fish-stuff.html' title='Fish stuff'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7315264229057965846</id><published>2007-04-01T20:25:00.000-07:00</published><updated>2007-04-01T21:09:59.398-07:00</updated><title type='text'>Mac OS X</title><content type='html'>Recently I wanted to install GAIM(So I could use encryption) on a Mac OS X Panther machine.  If I were to equate it to a physical sensation I'd say it's like being burned alive with a bic lighter, ridiculously slow, painful, and mind boggling amounts of needless torture.  So from my research(30 seconds on google)I figured out that you have to install DarwinPorts(Just like the BSD ports, or Gentoo portage, only less stuff).  Actually this is going to one big long paragraph, so I'll just break it into bullet points:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Downloaded DarwinPorts -- No Problem&lt;/li&gt;&lt;li&gt;Install DarwinPorts -- libcurl doesn't exist&lt;/li&gt;&lt;li&gt;Google search to find out that some versions of Mac you have to compile DarwinPorts from source&lt;/li&gt;&lt;li&gt;Compile DarwinPorts -- gcc doesn't exist(Why the hell Apple would take gcc off a Unix based system is way beyond me)&lt;/li&gt;&lt;li&gt;Download XCode to get gcc&lt;/li&gt;&lt;li&gt;Realize it's the wrong XCode version(For a different cat) after a 1GB download :(&lt;/li&gt;&lt;li&gt;Download the XCode thing that says Mac OS X 10.3&lt;/li&gt;&lt;li&gt;Realize it's only the documentation&lt;/li&gt;&lt;li&gt;Download the proper 1/2GB version finally, and install it&lt;/li&gt;&lt;li&gt;Realize it fscked up installing gcc, and that gcc is now present but can't make binaries :(&lt;/li&gt;&lt;li&gt;Figure out the gcc team releases their own Mac version called cctools&lt;/li&gt;&lt;li&gt;Install this to find it working perfectly, and curse Apple for being retarded&lt;/li&gt;&lt;li&gt;Compile DarwinPorts, and install it&lt;/li&gt;&lt;li&gt;Watch DarwinPorts crash on update, fix it by installing another package with DarwinPorts then update&lt;/li&gt;&lt;li&gt;Watch DarwinPorts start vomiting on the terminal that it needs X11&lt;/li&gt;&lt;li&gt;Find it really easy to install X11 from the XCode package&lt;/li&gt;&lt;li&gt;Watch midway through as DarwinPorts yells about not having command_exec&lt;/li&gt;&lt;li&gt;Check all the environment variables(PATH, etc) to make sure you're not being stupid&lt;/li&gt;&lt;li&gt;Check google for something, and find that it comes back with about 10 non-relevent hits&lt;/li&gt;&lt;li&gt;QUIT!&lt;/li&gt;&lt;/ol&gt;Really I blame Apple more than the Darwin Ports, why I can't easily install something that runs fine on BSD on something that is essentially BSD is beyond me.  I wrote a paragraph originally of some 'Why' questions, but it was too bulky:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Why their downloads are worded confusing and are insanely big(1GB is way too much for anything but movies)&lt;/li&gt;&lt;li&gt;Why they use nonstandard connectors(Another issue from the past)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Why does Safari suck so much cock&lt;/li&gt;&lt;li&gt;Why does AppleTalk have no way to define a different subnet(Can't chain routers and use AppleTalk)&lt;/li&gt;&lt;li&gt;Why strip basic tools and libraries, like gcc and libcurl&lt;/li&gt;&lt;li&gt;Why do 3rd party installers work 100% better than Apple made ones&lt;/li&gt;&lt;/ul&gt;So in closing some slander:  Apple is for tea-bagging fu***....&lt;br /&gt;Urmm on second thought, more constructively: Apple is only good for the average idiot who wouldn't know the difference between their arse and the hard drive, and would never need to do anything more complicated than watching &lt;a href="http://youtube.com/watch?v=u7a3ByQjDY4"&gt;adorable bunnies on YouTube&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7315264229057965846?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7315264229057965846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7315264229057965846' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7315264229057965846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7315264229057965846'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/04/mac-os-x.html' title='Mac OS X'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6130219544463765582</id><published>2007-03-28T00:39:00.000-07:00</published><updated>2007-03-28T01:02:07.132-07:00</updated><title type='text'>General Tidbits</title><content type='html'>First off &lt;a href="http://jaysherby.blogspot.com"&gt;Jay&lt;/a&gt; made a very professional looking &lt;a href="http://jaysherby.blogspot.com/2007/03/yubnub-command-line-firefox-extension.html"&gt;firefox extension for yubnub&lt;/a&gt;.  It's got a decent feature set, is bug free(Unlike my helloHell program which I will talk about later), and very lean.  I personally don't think I could stick with the horrid documentation and all the hoops to jump through for building an extension with XUL and such, so hats off to him for actually seeing it through.&lt;br /&gt;&lt;br /&gt;Secondly, a neat little trick I found is that you can make any file act as a block device.  Simply make the file the desired size( &lt;span style="font-weight: bold;"&gt;cat /dev/urandom &gt; foo&lt;/span&gt; ) then just set the file to map to the desired loopback device (&lt;span style="font-weight: bold;"&gt; losetup /dev/loop/1 foo&lt;/span&gt; ).  And that's it, you can then make a filesystem or whatever you want with /dev/loop/1 as the device.  Another neat thing is that changes to /dev/loop/1 instantly show up in foo.  Not a terrible lot of use for this, maybe doing encryption if you're out of partitions, or setting up a filesystem to dump onto something else.&lt;br /&gt;&lt;br /&gt;Third, I found out that in Gentoo without installing either gnome or kde each package is compiled with the absolute minimum by default.  So for example gtk+ without anything specified for USE won't handle jpeg images(Much to my confusion when running gtkam).  I've run into a ton of these problems and have taken to checking the new &lt;a href="http://gentoo-portage.com"&gt;Gentoo portage website&lt;/a&gt;  to see what USE flags are possible for a package and adding anything that may be needed into /etc/make, and if something doesn't work seeing what the dependencies are and reemerging them with different use flags(To avoid doing a deep emerge yet, till I backup my system).  My guess is that when you specify gnome or kde in USE that it handles a plethora of other flags besides just doing what you'd think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6130219544463765582?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6130219544463765582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6130219544463765582' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6130219544463765582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6130219544463765582'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/general-tidbits.html' title='General Tidbits'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1882662572201461137</id><published>2007-03-24T18:02:00.000-07:00</published><updated>2007-03-27T22:59:01.362-07:00</updated><title type='text'>Blue Smoke</title><content type='html'>I've been working on getting an old crappy laptop working.  It had alot of problems, CD-ROM drive doesn't work, transformer doesn't work, battery doesn't work, hard drive doesn't work, and I'm sure other problems I can't think of at this moment.  I was going to just set it up to remotely manipulate the X server on my main computer, so I could have access to my computer in 2 rooms.  I swapped out parts from my wifes computer temporarily to at least get it to boot into LiveCD, and couldn't get the Wireless PCMCIA card working, but my wife's PCMCIA card did.  I assumed that the Wifi card had somehow died, without considering the fact that I have a Wireless MAC whitelist, and hadn't added the MAC address of the card.  With that fixed my plan was to install onto a USB key and have that run the OS and basic X, but first I needed to fix the transformer.  I thought it was a loose cable and accidently broke the wire trying to jiggle it.  I couldn't open the transformer besides using my dremel to remove part of the side.  I then proceeded to rehook up the wire, and was very careful to avoid a potential short.  I plugged it in, and waited.  After a few seconds the light came on like it should...a few seconds later I was ready to plug it into the computer, but the moment I started to reach down I heard a loud pop and a fizzling sound.  I jumped back to see smoke pouring out of it, it wasn't really blue but smelled very strange(IE not burning plastics or anything)with a bizarre Windexish quality. I recently found a transformer that is really close and spliced in the plugin, which all seems to be working.&lt;br /&gt;&lt;br /&gt;Below is a picture of the destroyed transformer just for fun:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RgoDhxDVLzI/AAAAAAAAAII/NK4cxhNdl68/s1600-h/transf.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RgoDhxDVLzI/AAAAAAAAAII/NK4cxhNdl68/s320/transf.jpg" alt="" id="BLOGGER_PHOTO_ID_5046850211059937074" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1882662572201461137?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1882662572201461137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1882662572201461137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1882662572201461137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1882662572201461137'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/blue-smoke.html' title='Blue Smoke'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/RgoDhxDVLzI/AAAAAAAAAII/NK4cxhNdl68/s72-c/transf.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6243531991284595233</id><published>2007-03-20T19:35:00.000-07:00</published><updated>2007-03-28T00:36:15.783-07:00</updated><title type='text'>Writing to video memory</title><content type='html'>&lt;a href="http://jaysherby.blogspot.com/"&gt;Jay&lt;/a&gt; and I were having a discussion about directly writing to video memory. Being the adventurous type I ordained to try it. The device I had to use to accomplish anything was &lt;span style="font-weight: bold;"&gt;/dev/fb0current&lt;/span&gt;. The first picture is simply &lt;span style="font-weight: bold;"&gt;/dev/mem &gt; /dev/fb0current&lt;/span&gt;. The second one is from writing the video memory to a file and then rewriting it back after moving around windows...it pretty much restored the state it was in including the AIM conversation. The third one is of something weird I found...I loaded a picture during one of these runs and found that it was permanently screwed up...even after restoring everything(By going to a VT and back to X), and refreshing the image it stayed the same, no clue why. The last one was simply switching to a vt and issuing &lt;span style="font-weight: bold;"&gt;sleep 3; cat /dev/urandom &gt; /dev/fb0current; DISPLAY="0:0" ksnapshot&lt;/span&gt; and then switching to X(Rather bland but I put up anyway). All this was done in a Knoppix live CD. As always click pictures for higher res photos:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RgCbxql6rVI/AAAAAAAAAHo/DoNrEwWAWIg/s1600-h/snapshot1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RgCbxql6rVI/AAAAAAAAAHo/DoNrEwWAWIg/s320/snapshot1.png" alt="" id="BLOGGER_PHOTO_ID_5044202860204174674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RgCb8al6rWI/AAAAAAAAAHw/dfSOV0plHeA/s1600-h/snapshot2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RgCb8al6rWI/AAAAAAAAAHw/dfSOV0plHeA/s320/snapshot2.png" alt="" id="BLOGGER_PHOTO_ID_5044203044887768418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RgCcIql6rXI/AAAAAAAAAH4/tB9NOAWoE9E/s1600-h/snapshot4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RgCcIql6rXI/AAAAAAAAAH4/tB9NOAWoE9E/s320/snapshot4.png" alt="" id="BLOGGER_PHOTO_ID_5044203255341165938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RgCghKl6rYI/AAAAAAAAAIA/FeYlS_t9Fk8/s1600-h/snapshot5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RgCghKl6rYI/AAAAAAAAAIA/FeYlS_t9Fk8/s320/snapshot5.png" alt="" id="BLOGGER_PHOTO_ID_5044208074294472066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Edit:  Jay pointed out to me that the last picture is gigantic(~2MB) compared to the other files (~0.2MB).  This is due to the fact that since the data is random there is no way to compress it down, so every single pixel has to be accounted for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6243531991284595233?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6243531991284595233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6243531991284595233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6243531991284595233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6243531991284595233'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/writing-to-video-memory.html' title='Writing to video memory'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RgCbxql6rVI/AAAAAAAAAHo/DoNrEwWAWIg/s72-c/snapshot1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2276541061336768047</id><published>2007-03-15T19:15:00.000-07:00</published><updated>2007-03-15T21:24:58.741-07:00</updated><title type='text'>WV &amp;&amp; MD</title><content type='html'>Well I'm back from Maryland, and *should* have an apartment. It's only 4 miles from work but will probably take 15min to get to since the traffic is awful there. Today I'm doing nothing since I drove for about 13 straight hours last night through 2 large storms, massive fog(About 2 feet of visibility, not exaggerating) , and running on almost no sleep. I left on Tuesday and came back at 1am Thursday, driving at least 26 hours inbetween, which in retrospect was idiotic, since I was about falling asleep at the wheel by the time it was over.&lt;br /&gt;&lt;br /&gt;I stayed in West Virginia for a night on the way there, and it's everything you'd think it would be. First when you enter the state the slogan on the big welcome billboard is "West Virginia: Open for Business", and every county has a little sign that says "Zoned for Business". I guess they are trying to lose the hillbilly image and attract business, but something tells me that's not happening. Also all the speed limit signs say "Radar Enforced" underneath them, which is just strange. The whole state seems to be a speed trap with cops everywhere on the interstate, thankfully I never got stopped somehow. You'll sometimes see roads go at almost 90 degree angles up mountains, which I couldn't imagine anyone driving on. And the intersate is really sinuous and has warning signs at almost every turn, not to mention all the falling rock warnings. We went to a grocery store there, and I can only say that the locals were 'colorful'. The were very nice, the girl behind me offered to let me use her shopping card since I didn't have one, and the guy behind her was helping her get things she couldn't reach in her cart. Out in the parking lot people were talking to each other and really friendly. But...well I don't like to be mean, but they are all incrediculously ugly, and look very poor. Long dirty hair seems to be a must for both men and women, not to mention a beer belly. Teeth are optional of course and clothing need not be cleaned or taken off until they are so tattered they don't stay on. I realize their is no work in the middle of West Virginia, except logging, but the level of poverty is really bad. Anywho, I've now added another state to avoid to my list( Along with Texas, the entire South, Missouri, Florida, Kansas, and of course Indiana ;)&lt;br /&gt;&lt;br /&gt;Maryland was kinda weird.  I figured it would be all city, but alot of it is woods with nothing around.  Gaithersburg was the &lt;span style="font-weight: bold;"&gt;worst&lt;/span&gt;driving experience I've ever had. Speed limit signs are vague suggestions with no bearing on reality. 55 mph is quite obviously a synonym for 90mph, and may god help you if you need to change lanes or pull out onto a road since everyone is a madly aggressive driver. The one grocery store we went to there actually had decent prices and the best produce I've seen outside of a farmers market. There are *tons* of stores and apartments. We only really went to one apartment place, since we'd researched beforehand, and none of the others looked as nice driving around. We ended up getting the most expensive one bedroom they had(Since it was the only vacany they had), which hopefully will be nice since it's got a fireplace, loft, vaulted ceilings, 1.5 bathrooms, washer and dryer(Unfortunately I can't hook up my own since there's not enough space where the hookups are), balcony, and is on the top floor(Which should reduce noise). Another thing is I don't have to put down a pet deposit because they don't consider rabbits a house pet :( Ohh well it saves money. Another weird thing was minimum income brackets, you had to have at least $40k for the cheapest one bedroom apartment, and it ranged all the way up to about $57k for the most expensive 2 bedroom apartment. I guess I kinda understand that since they are so incredibly expensive($1000 to $1500) and I dunno how anyone making much under $40k could afford one. I have to put off my move for a week since there were no vacancies for the date I wanted, but will still get there in time.&lt;br /&gt;&lt;br /&gt;The Lockheed site was really big, although not as big as Owego's.  I had expected it to be smaller since they have several sites around DC.  I only drove around the parking lot since I was worried about the security and humvees on the premise.  It has it's own mini-hospital even which was odd IMO.  Everyone had to have their ID cards on a lanyard around their neck, I'm wondering how painful it will be to get in every day.&lt;br /&gt;&lt;br /&gt;Another odd thing is I got a call from Lockheed in New York offering me the job(Automated mail systems) even though it's been 4 months since I interviewed.  So out of the 6 jobs I interviewed with completely I've gotten 5 offers, and 3 others have offered to fly me out for the final interviews but I've declined, and 2 of those pretty much said I had a job if I wanted it.   So if this branch of Lockheed doesn't work out I should have alot of options.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2276541061336768047?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2276541061336768047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2276541061336768047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2276541061336768047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2276541061336768047'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/wv-md.html' title='WV &amp;&amp; MD'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7787096628003157506</id><published>2007-03-10T06:41:00.000-08:00</published><updated>2007-03-10T08:05:52.092-08:00</updated><title type='text'>Bad Week</title><content type='html'>I'm having really bad luck with electronics stuff this week. First my Wii-mote stopped working, turned out the gyroscope was stuck and had to be wacked. I can't for the life of me find a 555 timer, although I can't imagine I don't have one somewhere. I need to make a big order at &lt;a href="http://mouser.com/"&gt;mouser&lt;/a&gt; soon and get a couple of those plus the parts for my USB interface. Also right before I ordered my mobo and such the one I wanted went out of stock. I figured out that I think my set of use flags was axing every gentoo install I did...not XFS so I have to be more careful with issuing -option. Plus I can get my ATI Radeon 9000 card working but its still way too slow(Only about 1500 FPS in glxgears). I've been putting off working on my computer(Partly frustration and partly WarioWare ;) so it does next to nothing right now. I have to take a trip to Maryland for a week so it'll be a long time till I get back to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7787096628003157506?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7787096628003157506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7787096628003157506' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7787096628003157506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7787096628003157506'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/graphics-card-woe.html' title='Bad Week'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-7246365280615615381</id><published>2007-03-06T06:32:00.000-08:00</published><updated>2007-03-06T17:59:15.788-08:00</updated><title type='text'>XMMS in Gentoo</title><content type='html'>The Gentoo maintainers in media-snd decided to hard mask *everything*(Including plugins etc) for XMMS recently.  Well, since I like XMMS and it's the only thing that handles the plugins I like, I spent a little while getting it working. I didn't really want to do make install just to keep it from screwing with anything, but for now this works just fine:&lt;br /&gt;&lt;br /&gt;1) Go &lt;a href="ftp://ftp.gtk.org/pub/gtk/v1.2/"&gt;here&lt;/a&gt; and download both gtk1.2.10 and glib.1.2.10 tarballs&lt;br /&gt;2) Untar the packages and cd into the new glib directory&lt;br /&gt;3) run &lt;span style="font-weight: bold;"&gt;./configure &lt;/span&gt;for glib&lt;br /&gt;4) Fire up your favorite text editor(vi of course ;) and open up &lt;span style="font-weight: bold;"&gt;gstrfuncs.c&lt;br /&gt;&lt;/span&gt;5) Find every instance of &lt;span style="font-weight: bold;"&gt;g_warning&lt;/span&gt; and add a comma(&lt;span style="font-weight: bold;"&gt;,&lt;/span&gt;) after every instance of &lt;span style="font-weight: bold;"&gt;G_GNUC_PRETTY_FUNCTION&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;....&lt;/span&gt;so for example you will have:   &lt;span style="font-weight: bold;"&gt;g_warning (G_GNUC_PRETTY_FUNCTION ,&lt;/span&gt;&lt;br /&gt;6) There should be 4 of these in total&lt;br /&gt;7) Now run &lt;span style="font-weight: bold;"&gt;make&lt;/span&gt;, and if that goes well &lt;span style="font-weight: bold;"&gt;make install&lt;/span&gt;&lt;br /&gt;8) Now set your LD_LIBRARY_PATH to /usr/local/lib&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;....&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;LD_LIBRARY_PATH="/usr/local/lib"&lt;/span&gt;&lt;br /&gt;9) Now run the &lt;span style="font-weight: bold;"&gt;ldconfig &lt;/span&gt;command&lt;br /&gt;10) Go out of the glib directory and over to the gtk directory&lt;br /&gt;12) Run &lt;span style="font-weight: bold;"&gt;./configure&lt;/span&gt; for gtk&lt;br /&gt;13) Now do a &lt;span style="font-weight: bold;"&gt;make&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;make install&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;14) Finally grab the xmms tarball &lt;a href="http://www.xmms.org/download.php"&gt;here&lt;/a&gt;&lt;br /&gt;15) Untar it and cd into the directory&lt;br /&gt;16) Run &lt;span style="font-weight: bold;"&gt;./configure&lt;/span&gt;&lt;br /&gt;17) Open up your editor and goto &lt;span style="font-weight: bold;"&gt;General/ir/ir.h&lt;/span&gt;&lt;br /&gt;18) Comment out the lines for extern of pthread_t and gboolean(Line 52 and 53 in my version)&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;....&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;//extern pthread_t irapp_thread&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;....&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;//extern gboolean keepGoing&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;19) And finally run &lt;span style="font-weight: bold;"&gt;make&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;make install&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;For me none of these steps were superfluous, even the final make install. Eventually I want to make a tarball for my own future use that will take care of this automatically as well as do something like isolating these(gtk1.2, glib1.2, xmms) to their own space in opt automatically(Which IMO seems like what the Gentoo maintainers should have done).&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-7246365280615615381?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/7246365280615615381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=7246365280615615381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7246365280615615381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/7246365280615615381'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/xmms-in-gentoo.html' title='XMMS in Gentoo'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5776773370297526052</id><published>2007-03-05T11:47:00.000-08:00</published><updated>2007-03-05T12:03:07.957-08:00</updated><title type='text'>XMS Horror Story?</title><content type='html'>So I've been trying to redo my main front end computer...right now I want to have it to be as simplistic as possible, with the following criteria met:&lt;br /&gt;- Run fluxbox&lt;br /&gt;- Play games&lt;br /&gt;- Play music&lt;br /&gt;- RBACish security(More on that when I'm done)&lt;br /&gt;- Be insanely fast for everyday tasks&lt;br /&gt;- Automatic backups&lt;br /&gt;&lt;br /&gt;Well I was *almost* done yesterday, I had Gentoo installed and booting, alsa set up, some of the roles defined, and X11 working. The only thing I didn't have was OpenGL support for X working yet. Somewhere along the way I was doing a &lt;span style="font-weight: bold;"&gt;emerge --deep world &lt;/span&gt;&lt;span&gt;and ended up completely freezing everything while trying to load flgrx(ATI closed source driver) and having to hard-off the machine.  Well, udev stopped working properly upon reboot, and emerge wouldn't go to try to repair anything.  I tried a few things such as xfs_repair&lt;/span&gt; but to no avail.  Right now I'm reinstalling from scratch :(  I'm not sure if this was the infamous problem with xfs zeroing data on unclean mounts during a write, or if my emerge was in a state of limbo.  I'm still sticking with XFS but may change to JFS if this ends up being a regular problem.  Thinking back I should have tried chrooting in a LiveCD and see if emerge could fix it, hopefully there is no next time to try it.  I haven't had a hard crash that wasn't heat related for at least 2 years now, so probably once everything is set up it will be okay especially after my backup stuff is done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5776773370297526052?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5776773370297526052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5776773370297526052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5776773370297526052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5776773370297526052'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/xms-horror-story.html' title='XMS Horror Story?'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2589605357442292406</id><published>2007-03-03T16:47:00.000-08:00</published><updated>2007-03-03T17:17:44.847-08:00</updated><title type='text'>Travel Bunny Cage</title><content type='html'>I made it a long time ago but keep forgetting to post the details.&lt;br /&gt;First the materials used were:&lt;ul&gt;&lt;li&gt;a cheap piece of 2'x2' plywood for the base&lt;/li&gt;&lt;li&gt;rabbit fencing for gardens&lt;/li&gt;&lt;li&gt;pre-cut boards for the runners(Which was a mistake)&lt;/li&gt;&lt;li&gt;Carpeting&lt;/li&gt;&lt;li&gt;Wood staples&lt;/li&gt;&lt;li&gt;Wood screws&lt;/li&gt;&lt;/ul&gt;I had my wife stain and paint the runners as well as put in the carpeting.  Originally tried to use carpet tacks but they kept coming out of the plywood too easily, ended up using a staple gun with wood staples which worked perfectly(You can't see them in their or anything, and pretty sturdy).  Construction was simply drilling guide holes for the wood screws, I just made marking for the runners to baseboard, but should have made a jig, even though that went okay.  One thing is that the plywood was only 3/4" thick so my slightly unstraight holes were a problem since they bowed the wood.  I need to make a jig sometime just for doing straight down holes.  I was thinking of maybe taking 3 boards attached to a block with a drill hole in it, the boards would stick up and act as a guide for the drill body, and to use it you could just keep it flush against the back and work it down through the hole.  One good idea that came from this was attaching the fencing to the baseboard with staples first and then sandwiching it with the runner using woodscrews.  It makes it seem very solid and I can't imagine the fencing coming off, even though the baseboard is crap wood.  Another problem was the pre-cut boards, they aren't  precise and left a small gap...I now own a decent hand saw(For $7) that I use which would have been perfect.  The door isn't attached since when it's not in use as a travel cage we cover it with an old yoga mat so it provides a hiding spot and a place to climb.  I will probably attach the door with just some cable ties and maybe 'lock' it with velcro(Since during travel my rabbit doesn't attempt escape), so I can take off the door easy later on.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;The pics, although not the best since they were taken as an afterthought:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/Reob67t63bI/AAAAAAAAAGs/r0ASFFLcKic/s1600-h/3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 45%; height: 240px;" src="http://bp1.blogger.com/_QzrGDbxJnj8/Reob67t63bI/AAAAAAAAAGs/r0ASFFLcKic/s320/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5037869832443977138" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/ReocU7t63cI/AAAAAAAAAG0/0ZKSUv6cwLE/s1600-h/4.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 45%; height: 240px;" src="http://bp1.blogger.com/_QzrGDbxJnj8/ReocU7t63cI/AAAAAAAAAG0/0ZKSUv6cwLE/s320/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5037870279120575938" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/Reod_bt63eI/AAAAAAAAAHU/zj7VG3pswxQ/s1600-h/0.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_QzrGDbxJnj8/Reod_bt63eI/AAAAAAAAAHU/zj7VG3pswxQ/s320/0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5037872108776644066" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2589605357442292406?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2589605357442292406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2589605357442292406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2589605357442292406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2589605357442292406'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/travel-bunny-cage.html' title='Travel Bunny Cage'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/Reob67t63bI/AAAAAAAAAGs/r0ASFFLcKic/s72-c/3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1220968191813939264</id><published>2007-03-02T17:16:00.000-08:00</published><updated>2008-01-09T03:21:39.168-08:00</updated><title type='text'>AES Encryption -- Suprisingly fast results</title><content type='html'>This is a continuation of my &lt;a href="http://gavinblack.blogspot.com/2007/03/filesystem-benchmarks.html"&gt;filesystem benchmark&lt;/a&gt; test that I did previously.  Only this time it is using encrypted partitions for testing.&lt;br /&gt;&lt;br /&gt;First let me preface this by saying what the relevant system specs are: 3GHZ Athalon XP with 333FSB to .5GB RAM which should be the key players in encrytpion. There was no hardware encryption, but all relevant kernel stuff compiled in. The results were somewhat expected, that it took a little longer on average with the cpuProg times being hit the heaviest. But I was guessing on around a 5% to 10% increase, but for most filesystems I ended up with less than a 1% increase. Also looking in detail at the output, Reiser still had the same bizarre jumping behavior that kept it's averages somewhat low but was unreliable in general. Below are some charts(No I can't use GNUplot!) that measure the difference between averages with and without encryption on various filesystems with some different AES types for the total times as well as the average times between all types of tests for each fs. Click for a larger version:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RejsBrt63ZI/AAAAAAAAAGE/VWci2UcCx30/s1600-h/fu1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RejsBrt63ZI/AAAAAAAAAGE/VWci2UcCx30/s320/fu1.jpg" alt="" id="BLOGGER_PHOTO_ID_5037535696873250194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/Rejrz7t63YI/AAAAAAAAAF8/bo5NDWEXbSM/s1600-h/fu2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/Rejrz7t63YI/AAAAAAAAAF8/bo5NDWEXbSM/s320/fu2.jpg" alt="" id="BLOGGER_PHOTO_ID_5037535460650048898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As always JFS and XFS are the clear winners, with XFS slightly better in all the tests. And in conclusion I think I will be using XFS since it seems to be the fastest, is consistent, and has a bit more support(Official for BSD IIRC) than JFS. Also encrytpion is suprisingly quick even with all out 256 bit AES the increase is less than a percent(Except for Reiser). Also after several runs I could never see a big difference with or without SHA256 hashing and sector salt, so no reason to not use it. Personally I think I will use 128 bit AES with salt and SHA256 hash with XFS on everything and see how it goes.&lt;br /&gt;&lt;br /&gt;Everything was done using dm-crypt(Which is a loopback encryption scheme) without LUKS. The script used cyptsetup commands such as:&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;echo pass | cryptsetup -c aes-cbc-essiv :sha256 --key-size 128 /dev/hdc5 mountPoint&lt;/span&gt;&lt;br /&gt;to appropriately set up the mappings.&lt;br /&gt;&lt;br /&gt;A general quick rant...WTF is wrong with reiser? It does seem to do much worse with encryption than the others, and it is always WAY varied, it's almost impossible to guess how long disk IO will take with it. It would be mind boggling to use in real life, it would seem too quick and you'd worry if it really got copied or take too long and you'd worry it froze. Heuristically determined IO is a cool idea, but seems half retarded if anyone ever used it in a production server since you can make no gaurantees! For me I'm staying the hell away with anything labeled Reiser for quite a while. Other benchmark things I've read talk about how after multiple trials Reiser4 is slow on average too(Some rate it worse than normal Reiser), so I don't feel the need to dick with it . Reiser should be ashamed of itself for completely being schooled by FAT..maybe if I close my eyes it will just go away.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1220968191813939264?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1220968191813939264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1220968191813939264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1220968191813939264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1220968191813939264'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/aes-encryption-suprisingly-fast-results.html' title='AES Encryption -- Suprisingly fast results'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RejsBrt63ZI/AAAAAAAAAGE/VWci2UcCx30/s72-c/fu1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5568092961987237078</id><published>2007-03-01T13:17:00.001-08:00</published><updated>2007-03-01T13:22:24.194-08:00</updated><title type='text'>Filesystem benchmarks</title><content type='html'>I'm redoing my main computer and have decided to see if it would behoove me to use a different filesystem.  After reading a couple of very good articles &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.debian-administration.org/articles/388"&gt;here&lt;/a&gt; and &lt;a href="http://linuxgazette.net/122/TWDT.html#piszcz"&gt;here&lt;/a&gt;(Which BTW seem to conclude to use either JFS or XFS).  I decided to do my own benchmarking.  While not terribly rigorous it did seem to pretty much follow their findings.  The results below are from an average of 3 runs per each type of test.  Also I didn't try Reiser4 but instead included FAT ;)&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;br /&gt;Copying from other drive:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 16s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 11s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 14s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 8s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 18.2s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 8.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = xfs&lt;br /&gt;&lt;br /&gt;CPU usage after the copying:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 1m 23s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 1m 27s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 1m 13s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 1m 24s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 1m 19.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 1m 29.6s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = jfs&lt;br /&gt;&lt;br /&gt;Copying a file to same drive:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 12s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 13.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 20.6s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 11s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 18s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 2.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = reiser&lt;br /&gt;&lt;br /&gt;Removing data&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 0.21s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 0.20s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 0.19s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 0.22s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 0.57s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 1.78&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = jfs&lt;br /&gt;&lt;br /&gt;CpuProg time during copying:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 1m 36s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 1m 37s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 1m 25s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 1m 30s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 1m 37s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 1m 36.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = jfs&lt;br /&gt;&lt;br /&gt;Copy time with CpuProg running:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 16.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 15s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 17.87s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 16s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 19s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 12.1s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = xfs/reiser&lt;br /&gt;&lt;br /&gt;Total to run benchmark tests:&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext2 = 5m 5.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;ext3 = 5m 7s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;jfs  = 4m 49.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;xfs  = 4m 44s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;fat  = 5m 11.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;reiser = 4m 55.5s&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;..&lt;/span&gt;Winner = xfs&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The program to run the cpu just made a huge 2D array and moved stuffback and forth...alone without any disk activity before or during it took almost exactly 1m 4s each run.  Also it may seem odd to check the CPU reduction after the copying was complete, but in practice this always seems to be where the most occurs(Probably due to buffered IO delaying the actual work).   Another weird thing was removing files(Which granted was too small a set), that most had times under a tenth second consistently(And an outlier), except for FAT which  always had times over half a second.  In conclusion I think I'm going to use xfs, although it's a little worse on CPU than jfs it does seem to noticably copy faster.  Also FAT was worse in about every aspect compared to any other system...couple that with external fragmentation, I can't imagine using it for anything but compatibility reasons.&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;ReiserFS deserves it's own section due to it's bizarre nature.  All the others were very consistent between runs with usually around a second difference in results...but Reiser was completely random, sometimes a copy would take half a second, other times 30 seconds...I could find no rhyme or reason to why(IE not the first time was slow and the rest faster or any pattern).  Overall though it was usually slower than most of the others.  Especially on removing things it was incredibly slow compared to even FAT.  Also the &lt;span style="font-weight: bold;"&gt;copy time with cpuProg running&lt;/span&gt; I put xfs/reiser because reiser was much slower usually but always had a couple ridiculously fast runs(Fractions of a second) that made the average low.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5568092961987237078?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5568092961987237078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5568092961987237078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5568092961987237078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5568092961987237078'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/03/filesystem-benchmarks.html' title='Filesystem benchmarks'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8422685401068867362</id><published>2007-02-17T02:26:00.000-08:00</published><updated>2007-02-18T21:12:22.109-08:00</updated><title type='text'>wmwol</title><content type='html'>wmwol is a simple dockapp I made to automate doing stuff on the beast.  Clicking it starts it spinning while it waits for the computer to come up, then it mounts the partition, thekn if clicked on again it turns off the computer and spins while it shuts down.  The states are represented graphically as follows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RdfG-f-Vg-I/AAAAAAAAAFI/9u-4pOK9bdE/s1600-h/states.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RdfG-f-Vg-I/AAAAAAAAAFI/9u-4pOK9bdE/s320/states.png" alt="" id="BLOGGER_PHOTO_ID_5032709885646963682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(1)Off -&gt; (2)WOL -&gt; (3)Ping -&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)Ping -&gt;  (5)Up -&gt; (6)Ping -&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(7)Ping-&gt;(8)Mount-&gt;(9)Unused&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The symbol was ripped from part of the Cisco SAN symbol in Dia, I picked it since the arrows are spaced every 45 degrees so 3 rotations at 15 degrees suffices to make the spinning look smooth.  &lt;a href="http://jaysherby.blogspot.com/"&gt;Jay&lt;/a&gt; thought it was a sun to represent WOL, which is a good idea so I'll say that's another reason ;-)  It's only allowed to be clicked on in states (1) and (8), the rest of the time is just status indicators for ping.  The only real problem is the spinning one pinging for startup is a little too slow because when ping fails it takes at least 1 second(The minimum timeout you can set) to exit, and I didn't feel like doing anything fancy like threading to make it smooth.&lt;br /&gt;&lt;br /&gt;I need to put the code up sometime, but am still working on making it a cohesive package that's easy to config.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8422685401068867362?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8422685401068867362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8422685401068867362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8422685401068867362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8422685401068867362'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/02/wmwol.html' title='wmwol'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RdfG-f-Vg-I/AAAAAAAAAFI/9u-4pOK9bdE/s72-c/states.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3292851160701504260</id><published>2007-02-15T17:39:00.000-08:00</published><updated>2007-02-15T19:56:52.547-08:00</updated><title type='text'>The Beast That Shouted 'I' At The Heart Of The World</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RdUL4_-Vg6I/AAAAAAAAAEg/TOXNLPtvhPo/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RdUL4_-Vg6I/AAAAAAAAAEg/TOXNLPtvhPo/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5031941232529867682" border="0" /&gt;&lt;/a&gt; My battle tested, borg-like, 75-pound, 12 fan, [almost] decade old, 550 Watt monster.  It has long ago lost it's face plate...&lt;a href="http://www.circotech.com/ccmincubser.html"&gt;here&lt;/a&gt; is one for sale to see how it should look.  It's sports a whopping 700mhz processor(Clocked down from 1Ghz), and 512 MB of memory I found lying around.  Obviously it works like shit, it's got a ton of harddrives in there that add up to about 200GB, and some sort of a bus problem that causes intermitten catastrophic failure.  I used to have it set up as RAID 0 I redid it, and just have a normal setup in fstab since it kept attempting autoerotic asphyxiation when trying to do mke2fs on /dev/md0.   It has WOL, and some nifty scripts I wrote that murder it remotely by polling a killfile(Assuming it didn't crash).  Actually I'm making it out worse than it is, only one of buses is unstable, so it's usable as a remote home directory which I've been tinkering with.  One day I will probably buy a cheapy mobo, CPU, and Memory to fix whatever is wrong with and maybe get some actual harddrives to store stuff on, and then maybe make some bastardized shuttle computer that doesn't have a harddrive, but instead a usb key with a bootloader and just enough stuff to hit the network....or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3292851160701504260?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3292851160701504260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3292851160701504260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3292851160701504260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3292851160701504260'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/02/blog-post.html' title='The Beast That Shouted &apos;I&apos; At The Heart Of The World'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RdUL4_-Vg6I/AAAAAAAAAEg/TOXNLPtvhPo/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-3694483979048507318</id><published>2007-02-15T14:37:00.000-08:00</published><updated>2007-02-15T15:23:29.557-08:00</updated><title type='text'>Fluxbox Desktops</title><content type='html'>Since I never did post my wife's desktop screenshot here's one finally:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RdTqxv-Vg5I/AAAAAAAAAEU/lkO3uEwZkl0/s1600-h/sreenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RdTqxv-Vg5I/AAAAAAAAAEU/lkO3uEwZkl0/s320/sreenshot.png" alt="" id="BLOGGER_PHOTO_ID_5031904824092099474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's pretty unadorned, no dockapps or anything, but it works and seems to go fast enough. Mine so far has just been picking docapps, this is far from the final version:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RdTibv-Vg4I/AAAAAAAAAEE/r4iA9I9Jp5Y/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RdTibv-Vg4I/AAAAAAAAAEE/r4iA9I9Jp5Y/s320/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5031895650041955202" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-3694483979048507318?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/3694483979048507318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=3694483979048507318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3694483979048507318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/3694483979048507318'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/02/fluxbox-desktops.html' title='Fluxbox Desktops'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_QzrGDbxJnj8/RdTqxv-Vg5I/AAAAAAAAAEU/lkO3uEwZkl0/s72-c/sreenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-2015509181169489293</id><published>2007-02-13T20:28:00.000-08:00</published><updated>2007-02-15T13:47:33.943-08:00</updated><title type='text'>Old Bunny Cage</title><content type='html'>I realized I never did document the original cage I made, so here it is.  The construction was done with simply a hammer and pair of pliers.  The materials were rabbit fencing, thumbscrews to act as pegs, eye-screws, chicken staples, and an 4'x2' piece of oak.  Here is a picture of it completed:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RdTTiP-Vg1I/AAAAAAAAADk/f6BVC-KgJ_g/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RdTTiP-Vg1I/AAAAAAAAADk/f6BVC-KgJ_g/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5031879269036688210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;With hindsight I realize there are several flaws...the major one is rabbits don't like hardwood, so we eventually had to put down a blanket.  Also buying really nice wood was pointless since it pretty much got ruined from the water bottle dripping and urine before the rabbit was trained.  Another thing is that it has no runners, so all manner of rabbit waste and hay get kicked out.  Here it is a lot later with an old shower curtain under it, some toys, and a pillow(Hay stuffed) and blanket my wife made:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RdTUaf-Vg2I/AAAAAAAAADs/bosm7sM6_p0/s1600-h/f0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RdTUaf-Vg2I/AAAAAAAAADs/bosm7sM6_p0/s320/f0.jpg" alt="" id="BLOGGER_PHOTO_ID_5031880235404329826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-2015509181169489293?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/2015509181169489293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=2015509181169489293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2015509181169489293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/2015509181169489293'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/02/pics.html' title='Old Bunny Cage'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RdTTiP-Vg1I/AAAAAAAAADk/f6BVC-KgJ_g/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6915613442979529013</id><published>2007-02-09T03:00:00.000-08:00</published><updated>2007-02-09T03:38:24.815-08:00</updated><title type='text'>Basic Update</title><content type='html'>Just to keep tabs on my work.  I finished the bunny travel cage, I just don't have pics of the finished product, and keep forgetting to do it.  Also I'm almost done with my RAID box, it's set up except the drives won't go into the RAID configuration for some reason.  I wrote some really neat scripts for my wife's laptop and the raidbox that will get their own posts a little later.  The main thing is the USB Breadboard.  I had to put Windows 2k on my testing box, and then put Microchip's MPLAB IDE and WINPIC800 for what I need.  This was kind of a pain because Windows:&lt;br /&gt;1) Couldn't handle the configuration of my main router&lt;br /&gt;2) Couldn't install MPLab without a service pack upgrade&lt;br /&gt;3) Wouldn't recognize my very standard ethernet card&lt;br /&gt;4) Didn't recognize my standard PS/2 mouse till a couple reboots&lt;br /&gt;5) Wasn't able to use my graphics card in anything but the lowest setting&lt;br /&gt;&lt;br /&gt;Anywho now I figure out I need to make an ICSP to be able to install a bootloader onto the chip, and the recommended one is $100.  I think I can make my own cheapy version, except the schematic I found uses an odd transistor that I've never seen and need to look around for.&lt;br /&gt;&lt;br /&gt;So my plan of attack:&lt;br /&gt;1) Build a ICSP device&lt;br /&gt;2) Build the CUI device&lt;br /&gt;3) Add a bootloader&lt;br /&gt;4) Add a program to run it&lt;br /&gt;&lt;br /&gt;Sounds easy, but I know it won't be.  Ohh and not counting the weird transistor yet I figure this project is going to cost me about $1 in parts, since most is salvaged from old computer parts or was lying around.&lt;br /&gt;&lt;br /&gt;Ohh and good news for once, my main computer that I modified has been running for 20 consecutive days with no sign of trouble...which is pretty good news to me, we'll see how it does in summer though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6915613442979529013?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6915613442979529013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6915613442979529013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6915613442979529013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6915613442979529013'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/02/basic-update.html' title='Basic Update'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-251361989197710166</id><published>2007-01-22T11:28:00.000-08:00</published><updated>2007-01-22T14:21:57.458-08:00</updated><title type='text'>Computer Cooling Mod</title><content type='html'>Finally fixed the massive overheating issue on my main computer, I hope. I took a small high speed fan and added it to the side. Some things to note: First I had no easy way to cut a hole, or series of even small holes and ended up using a large circular drill bit with teeth(Like the router bits for making wheels). The case was insanely thick and had a layer of thin sheet metal, what looked like graphite in the middle, and an aluminum coating on the outside. Very tough to get through, but thankfully I have a really powerful drill. Secondly I had no room in the case, so had to make room by using a dremel to cut off part of what holds the drives. Below is a picture of the uncut side followed by the cut side:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RbUSaYnLnGI/AAAAAAAAACU/j1cSQtJFfCg/s1600-h/1.jpg"&gt;&lt;img style="cursor: pointer; width: 45%; height: 45%;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RbUSaYnLnGI/AAAAAAAAACU/j1cSQtJFfCg/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5022941203894344802" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RbU0iInLnHI/AAAAAAAAACc/itKMPXPx1eU/s1600-h/2.jpg"&gt;&lt;img style="cursor: pointer; width: 45%; height: 45%;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RbU0iInLnHI/AAAAAAAAACc/itKMPXPx1eU/s320/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5022978720433675378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Here's the drilled holes, I added the second smaller hole for the potentiometer on the fan, which I borke trying to put it in the case :(  I think I will add a nice one with a knob when I feel up to scrounging for parts and opening my computer again.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_QzrGDbxJnj8/RbU1N4nLnII/AAAAAAAAACk/xGCrFTBz4E4/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_QzrGDbxJnj8/RbU1N4nLnII/AAAAAAAAACk/xGCrFTBz4E4/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5022979472052952194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One final irritation, was I didn't want to mess with trying to put in screws to hold the fan(I decided for several reasons to put the grill on the inside too), so I ended up screwing fencing wire into the fan itself and then securing the wire with good old fashioned duct tape, I forgot to take a picture unfortunately.  Here's a couple pics of the finished product, no noticable heat problems yet.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RbU2HYnLnJI/AAAAAAAAACs/abVSt0Z0hEI/s1600-h/3.jpg"&gt;&lt;img style="cursor: pointer; width: 45%; height: 45%;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RbU2HYnLnJI/AAAAAAAAACs/abVSt0Z0hEI/s320/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5022980459895430290" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RbU2WInLnKI/AAAAAAAAAC0/vBxeAsCUKyU/s1600-h/4.jpg"&gt;&lt;img style="cursor: pointer; width: 45%; height: 45%;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RbU2WInLnKI/AAAAAAAAAC0/vBxeAsCUKyU/s320/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5022980713298500770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Also note to self: I had to after playing around with it reset the FSB speed, and of course my dumbass self set it wrong and had bizarre errors since the memory and bus from the processor were going at different speeds ;-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-251361989197710166?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/251361989197710166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=251361989197710166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/251361989197710166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/251361989197710166'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/01/computer-cooling-mod.html' title='Computer Cooling Mod'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RbUSaYnLnGI/AAAAAAAAACU/j1cSQtJFfCg/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-6799099551041074608</id><published>2007-01-13T03:54:00.000-08:00</published><updated>2007-01-13T05:42:37.808-08:00</updated><title type='text'>Satan Uses a Dell</title><content type='html'>A Dell Latitude CPi to be exact, I have been struggling for over a week to get a few basic things working on it.  It is finally finished, though, and seems to work pretty good.  Here's a picture of the machine:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RajhqtkDXhI/AAAAAAAAABg/oWIbXWgZaac/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RajhqtkDXhI/AAAAAAAAABg/oWIbXWgZaac/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5019509908605984274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before I begin my anti-Dell, anti-Debian, anti-Computer, and probably somehow anti-semetic rant to remind my future self not to FSCKING touch the goddamn kernel no matter how pathetic it seems, a quick backstory on it.  My dad bought 2 of the exact same laptops for about $50 two years ago at a military auction.  They sport a whopping 300mhz processor, and one of the harddrives died shortly after.  Ever since I have used the remaining one for various things, without major problems...except the sound never worked ever.   Well my wife has been wanting a computer to type recipes and play old SNES games on(No way she's using mine ;), what better use for a semi-portable laptop than that.  I currently have it set up to be able to do almost any normal task, albeit it slower.&lt;br /&gt;&lt;br /&gt;So let me come out and say it...I used...that is...it's kinda embarrassing...but...&lt;br /&gt;I used knoppix-installer set to beginner :( Their I said it!&lt;br /&gt;This wasn't from lack of trying the right way, and all stems from the god forsaken built-in soundcard, that I can only guess was built at the NSA in an elaborate scheme to break RSA encryption using the power of my seething hatred against it.  How I hate CS4237B, let me count the ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First off it's considered an ISA card...umm WTF.  I would have never guessed to turn on a non-existant ISA bus had I not looked it up on the net.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Gentoo Install&lt;/span&gt; -- Worked fine, the soundcard seemed to initialize and when I restarted the computer after adding alsa to the default run-level...everything in /dev/ related to sound went missing!  I tried *FOREVER* to get something back, to no avail.  I have no clue what happened, and don't give a shit anymore, I spent too long on that!&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Debian Install&lt;/span&gt; -- Debian has never worked for me, this is the 3rd earnest attempt in my lifetime to install Debian.  Regardless of whether it's the 2.4 or 2.6 kernel it just goes tits up when it starts copying files from the CD, it complains there is no CD in the drive, even though it just fucking booted and configured itself from the CD.  Another fun 'feature' of Debian, is no checksum with the CD, so after downloading and burning it several times to make sure it wasn't my computer, burner, or CDRs.  I concluded Debian's install software was written by piping NetTalk's output into NASM and then making an ISO of the result.  Actually I think the problem is poor choice of picking kernel modules and such to load.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Knoppix-Installer(Standard Debian System)&lt;/span&gt; -- I figured out that running alsaconf in Knoppix actually made the soundcard work!  So decided why not try to have Knoppix install Debian, since surely if it works off live-cd it'll work on the hard-drive.  Nope, almost the same problem as in Gentoo, except it never made any of the entries for sound in /dev, whereas Gentoo did and deleted them somehow.  The weird thing is that loading the kernel modules caused the soundcards to pop, but still wouldn't detect it.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Knoppix-Installer(Knoppix)&lt;/span&gt; -- Same as with standard Debian from knoppix-installer&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Knoppix-Installer(Beginner)&lt;/span&gt; --  Same exact problem the first time...running alsaconf bitched and moaned that there was no soundcard, all the while the speakers are making a ton of noise...after screens of errors it worked!  No clue why.  Ever since it works absolutely fine, no hang ups...so I'm not touching it.&lt;/li&gt;&lt;/ul&gt;After that is was smooth sailing, I used Fluxbox, since I wanted some sort of WM, but nothing to eat up the CPU(There is no GPU).  The only other qualm is that I had to set the resolution on ZSNES to the lowest possible to get it to not lag. Ohh and the one and only USB port, somehow got it's pins bent.  My dumb self, fixed it with surgical tweazers without removing the battery.  So after a handful of small sparks and worrying that I screwed up the only port to use a gamepad on, I was relieved when /dev/input/js0 worked without a hitch, even though I can now insert a USB plug either way into the slot.&lt;br /&gt;&lt;br /&gt;Screenshot of fluxbox running:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-6799099551041074608?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/6799099551041074608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=6799099551041074608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6799099551041074608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/6799099551041074608'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/01/satan-uses-dell.html' title='Satan Uses a Dell'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RajhqtkDXhI/AAAAAAAAABg/oWIbXWgZaac/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5935840758540148263</id><published>2007-01-13T03:04:00.000-08:00</published><updated>2007-01-13T05:45:22.923-08:00</updated><title type='text'>Back From The Dead</title><content type='html'>I have been out of commission for nearly a month, due to moving, computer problems, and just not being near my stuff.  The main thing is that I have little to do on my main computer, most of my computer projects have been involving my laptop.&lt;br /&gt;&lt;br /&gt;A brief rundown of my last month:&lt;br /&gt; For X-Mas my wife got a pasta machine.  When trying to make noodles they didn't dry properly, due to inadequate hanging(They were on hangers and kept sliding off), so ever the dutifull husband I went to Lowes to buy lumber to rectify her drying quandry.  I ended up getting two 4'x2"x1" boards and two 1/4" dowel rods for under $4.  Unfortunately my tool selection is lacking to say the least, but I was able to make something decent using just wood glue, my new ridiculously overpowered hand drill, and a hand circular saw.  The saw was borrowed from my dad, and seems to be crap: no cutting table, so near impossible to get a straight cut, and about as sharp as a banana so it chews the wood on entrance and exit.  Also obviously I don't have a router or anything to make good joints with, so I just drilled holes and used dowel rod pieces, which worked pretty well.  Here is the finished thing, it's actually suprisingly sturdy, I set a whole bunch of books on it while the glue was drying with no problems, my wife stained and painted it:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RajiEtkDXiI/AAAAAAAAABs/yh5lLO1jtB8/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RajiEtkDXiI/AAAAAAAAABs/yh5lLO1jtB8/s320/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5019510355282583074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Also I bought some stuff to make a small bunny travel cage, which I will talk about more when I start building it.  Another thing that took some time was sorting through old computer equipment at my parents' house.  Out of four I found only one good computer(200 MhZ Pentium with MMX :-), which does seem suprisingly fast.  I stripped the rest of anything usefull and threw the rest away.  Here's a picture of my wife helping 'fix' a broken motherboard the engineer way:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RajiQ9kDXjI/AAAAAAAAAB0/pALtPQIFqfk/s1600-h/0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RajiQ9kDXjI/AAAAAAAAAB0/pALtPQIFqfk/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5019510565735980594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Also been doing some AI programs, as always.  I deleted some stuff by semi-accident, and will probably make a separate AI post when I remake it.  Another thing has been the laptop from hell, which gets it's own post after this.  Fixed an old microphone and modified it to plug into my computer, which works since my soundcard has a mic pre-amp, which is pretty cool.  Also, setting up all my electronic equipment and bunny-proofing it has taken a long time.  Ohh and I've been having massive heating issues with my computer since I moved, since it's kept warmer here than my old house, I think I have a solution involving a drill and a fan I had bought a long time ago for this purpose, more on that when it's fixed/hopeless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5935840758540148263?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5935840758540148263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5935840758540148263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5935840758540148263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5935840758540148263'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2007/01/back-from-dead.html' title='Back From The Dead'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RajiEtkDXiI/AAAAAAAAABs/yh5lLO1jtB8/s72-c/4.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-5320188460927813344</id><published>2006-12-15T09:29:00.000-08:00</published><updated>2006-12-15T09:51:23.722-08:00</updated><title type='text'>DBase Project -- Grade</title><content type='html'>Just got my grade for my DBase, project: 108/100&lt;br /&gt;Which tells me the TA was *very* lax in grading.  Here are some screenshots(As always, click for full size pictures).&lt;br /&gt;&lt;br /&gt;This is of a student logged in:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_QzrGDbxJnj8/RYLbyKiAoVI/AAAAAAAAABI/DiKdUlmI1RU/s1600-h/Screenshot1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_QzrGDbxJnj8/RYLbyKiAoVI/AAAAAAAAABI/DiKdUlmI1RU/s320/Screenshot1.png" alt="" id="BLOGGER_PHOTO_ID_5008807390456357202" border="0" /&gt;&lt;/a&gt;Notes:&lt;ul&gt;&lt;li&gt;The messages, holatest1 and Hitest2, were done by the TA and not me.&lt;/li&gt;&lt;li&gt;All of them are titled class report, since I forgot to change the name when I copied classReport.java to make everything else for the student.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here's another one of the faculty side:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RYLcfqiAoWI/AAAAAAAAABQ/6PoBrWvk8nA/s1600-h/Screenshot-2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RYLcfqiAoWI/AAAAAAAAABQ/6PoBrWvk8nA/s320/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5008808172140405090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Actually nothing wrong with it by the picture(Except both forms with table are called Class Report)...but it wouldn't calculate student grades always.&lt;br /&gt;&lt;br /&gt;Anywho, one funny loop I had was of the form(This was written very late at night, so it's somewhat forgivable):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;try{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    for(int i = 0; true; i ++)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;        // DO_STUFF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;catch(exception e){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    // DONE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Basically I didn't have an easy way to get the size of a list from the database, so I did an infinite loop and just caught it when it crashed on an out of bounds error, and continued normally.  Definitely not the best coding practices :-D&lt;br /&gt;&lt;br /&gt;Ohh, and the class names in the lists in the pictures, the ": :" between them is actually used to tokenize it back out and pass it into another function.   So if you ever used : : in a class name it would crash and burn.&lt;br /&gt;&lt;br /&gt;Also to return multiple values from any function, I just concatenated them all as strings with #&gt;&lt;# as a delimiter returned the string and then used Integer.parseInt(part[x]) for any number.   So putting #&gt;&lt;# in anything would have murdered my program. &lt;br /&gt;&lt;br /&gt;By the end of this project my code was making me physically ill to look at it was so bad.  I just ran &lt;span style="font-weight: bold;"&gt;wc -l *.java&lt;/span&gt; and found that I had 2442 lines of code, all of pure horribleness.&lt;br /&gt;&lt;br /&gt;Just glad to be done with it...back to studying for security now :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-5320188460927813344?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/5320188460927813344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=5320188460927813344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5320188460927813344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/5320188460927813344'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/12/dbase-project-grade.html' title='DBase Project -- Grade'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_QzrGDbxJnj8/RYLbyKiAoVI/AAAAAAAAABI/DiKdUlmI1RU/s72-c/Screenshot1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-9171501491250534725</id><published>2006-12-06T10:44:00.000-08:00</published><updated>2006-12-06T10:59:11.933-08:00</updated><title type='text'>Texting Script</title><content type='html'>Something pretty cool I didn't know is that e-mailing to:&lt;br /&gt;CellPhoneNum@teleflip.com  will send a text message to that number.&lt;br /&gt;&lt;br /&gt;I made a small script to notify me if the Wii ever comes up again at Amazon(Inserted a picture due to irritating editing by the website, and being too lazy to fix it:&lt;br /&gt;-------------&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RXcSiwaCSLI/AAAAAAAAAA8/wOdAG1sj1U4/s1600-h/wiiSc.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 417px; height: 329px;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RXcSiwaCSLI/AAAAAAAAAA8/wOdAG1sj1U4/s320/wiiSc.jpg" alt="" id="BLOGGER_PHOTO_ID_5005489899164551346" border="0" /&gt;&lt;/a&gt;I shoulnd't need to point out that's not the complete URL for the Amazon Wii page.&lt;br /&gt;-------------&lt;br /&gt;&lt;br /&gt;With the script obviously as .scriptName and in it's own directory so it doesn't murder itself or others.&lt;br /&gt;&lt;br /&gt;Sometime I'll probably augment it to do something more interesting...maybe like pass on important e-mail or something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-9171501491250534725?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/9171501491250534725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=9171501491250534725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/9171501491250534725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/9171501491250534725'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/12/texting-script.html' title='Texting Script'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RXcSiwaCSLI/AAAAAAAAAA8/wOdAG1sj1U4/s72-c/wiiSc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-742585485180913598</id><published>2006-12-05T05:41:00.000-08:00</published><updated>2006-12-05T05:52:47.442-08:00</updated><title type='text'>DBase Project</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_QzrGDbxJnj8/RXV5m2OAKSI/AAAAAAAAAAY/6aB3-NFaqqE/s1600-h/Screenshot-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 383px; height: 307px;" src="http://bp2.blogger.com/_QzrGDbxJnj8/RXV5m2OAKSI/AAAAAAAAAAY/6aB3-NFaqqE/s320/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5005040269188409634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bleh, just posting a screenshot(Click for full image) of my dbase project to postpone working on it for now.  It's more-or-less a webct clone, this is from the faculty part, there is a student part too.  The GUI is the horribly long part, but I think I'm about done, now to work on more of the Oracle interface.  Alot of it is just debug info that's populating everything now, IE glorwell is the faculty member's ID, and classes in the drop down box would be of the form:&lt;br /&gt;ClassName :: Semester :: Year&lt;br /&gt;So for example)    CS348 :: Fall :: 2006&lt;br /&gt;And obviously the room in the table wouldn't be the faculty member's ID&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-742585485180913598?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/742585485180913598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=742585485180913598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/742585485180913598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/742585485180913598'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/12/dbase-project.html' title='DBase Project'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_QzrGDbxJnj8/RXV5m2OAKSI/AAAAAAAAAAY/6aB3-NFaqqE/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-4524470355062287261</id><published>2006-12-01T06:18:00.000-08:00</published><updated>2006-12-06T10:35:18.935-08:00</updated><title type='text'>Personal Note</title><content type='html'>I'm going on 26 straight hours of pretty much constant school work without sleep.  I'm averaging about a pot of coffee every 3 hours.  I did watch an episode of Star Trek TNG last night while I ate...and maybe spent an hour on the computer recreationally.  Other than that it has been classes, math homework, security project, and driving...&lt;br /&gt;I noticed I haven't even changed my clothes or showered either, since the previous night(34 hours ago)! Just 3 more hours and I can go home and rest a bit.&lt;br /&gt;&lt;br /&gt;(Edit:  I ended up being up for a grand total of 40 hrs, from about 7 am till 11 pm the next day)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-4524470355062287261?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/4524470355062287261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=4524470355062287261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4524470355062287261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/4524470355062287261'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/12/personal-note.html' title='Personal Note'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-1246461244758605790</id><published>2006-11-27T06:35:00.000-08:00</published><updated>2006-12-06T10:40:50.077-08:00</updated><title type='text'>Image tricks</title><content type='html'>Hmmm...I was working on a toy AI program last night and ran into an interesting problem, I hadn't thought of.  Basically the program was setup to display series of 'neurons' that had the following graphical representation:&lt;br /&gt;&lt;br /&gt;B  W W B&lt;br /&gt;W A A  W&lt;br /&gt;W A A  W&lt;br /&gt;B  W W B&lt;br /&gt;&lt;br /&gt;Where B = Black, W = Connection Weight, and A = Activity&lt;br /&gt;Well when testing I had all the W, set to be red, and was alternating the A&lt;br /&gt;&lt;br /&gt;Here is segment with A with yellow:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_QzrGDbxJnj8/RXcOlAaCSKI/AAAAAAAAAAs/wlXXJr5uvlw/s1600-h/m1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_QzrGDbxJnj8/RXcOlAaCSKI/AAAAAAAAAAs/wlXXJr5uvlw/s320/m1.jpg" alt="" id="BLOGGER_PHOTO_ID_5005485539772745890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here it is again with A = black:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1120/937952104133702/1600/678851/m2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1120/937952104133702/320/772836/m2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is both zoomed in, obviously no orange:&lt;br /&gt;Active:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1120/937952104133702/1600/722921/one.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1120/937952104133702/320/795092/one.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Inactive:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1120/937952104133702/1600/178555/two.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1120/937952104133702/320/348059/two.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I should have figured this due to on-center off-surround cells for our optical processing, but it's still a pain, since I configured 4x4 pixels for each 'neuron'.  I've decided to change it to:&lt;br /&gt;&lt;br /&gt;B  W W W W B&lt;br /&gt;W B  B   B   B W&lt;br /&gt;W B  A   A  B W&lt;br /&gt;W B  A   A  B W&lt;br /&gt;W B  B   B  B W&lt;br /&gt;B  W W W W B&lt;br /&gt;&lt;br /&gt;Which should fix it since the edges between colors would be static.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-1246461244758605790?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/1246461244758605790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=1246461244758605790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1246461244758605790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/1246461244758605790'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/11/image-tricks.html' title='Image tricks'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_QzrGDbxJnj8/RXcOlAaCSKI/AAAAAAAAAAs/wlXXJr5uvlw/s72-c/m1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7683703637063287904.post-8202416738810172626</id><published>2006-11-15T11:54:00.000-08:00</published><updated>2006-11-15T12:04:10.319-08:00</updated><title type='text'>Fishy Experiments</title><content type='html'>Hmm...well I'll be moving soon.  The big problem is my fish.  I want to keep at least the dojo loach.  I plan to start an experiment this week with using rubbermaid containers and the lesser liked fish to work out a good long distance transportation method.&lt;br /&gt;&lt;br /&gt;Some considerations:&lt;br /&gt;&gt; Cycling the makeshift tank&lt;br /&gt;&gt; Doing without filtration&lt;br /&gt;&gt; Amount of O2 if it's sealed&lt;br /&gt;&gt; Chemicals from the plastics&lt;br /&gt;&lt;br /&gt;Current experiment idea:&lt;br /&gt;&gt; Scrub with acetic acid(Vinegar) to try to get off any organics&lt;br /&gt;&gt; Calculate average O2 consumption of the fish&lt;br /&gt;&gt; Calculate O2 amount in closed container&lt;br /&gt;&gt; Fill with water, and let cycle&lt;br /&gt;&gt; Put in fish and see if they live&lt;br /&gt;&lt;br /&gt;Major problem, I have no clue how to tell if their are chemicals leeching in from the plastic.  I will probably put in the red tetra for a test, since he goes pale if there is a water quality problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7683703637063287904-8202416738810172626?l=gavinblack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gavinblack.blogspot.com/feeds/8202416738810172626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7683703637063287904&amp;postID=8202416738810172626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8202416738810172626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7683703637063287904/posts/default/8202416738810172626'/><link rel='alternate' type='text/html' href='http://gavinblack.blogspot.com/2006/11/fishy-experiments.html' title='Fishy Experiments'/><author><name>Gavin Black</name><uri>http://www.blogger.com/profile/05607751895913986709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
