<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-25165863</id><updated>2008-11-13T14:36:30.017-05:00</updated><title type='text'>Jason Winters' Pico-Projects</title><subtitle type='html'>A place to organize all of my half-baked ideas and tinkerings.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.picobay.com/projects/atom.xml'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-25165863.post-116776663775039819</id><published>2007-01-02T13:54:00.000-05:00</published><updated>2007-01-20T23:08:45.195-05:00</updated><title type='text'>The Picodore 64 - a Commodore 64 PDA</title><content type='html'>This post is my first attempt to document the design and construction of my Picodore 64. It's a Commodore 64 based PDA / Palmtop. Really, all the hard stuff was already done before I joined the &lt;a href="http://galaxy22.dyndns.org/dtv/index.html"&gt;DTV hacking&lt;/a&gt; scene, I just stuck it all together in a nice small package.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/picodore64-1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/picodore64-1.jpg" border="0" /&gt;&lt;/a&gt; Here are the specs:&lt;br /&gt;&lt;br /&gt;Mainboard: Hummer DTV&lt;br /&gt;Construction: Hobby plywood covered in faux stainless steel contact paper&lt;br /&gt;Size: 6.5" x 6" x 1.5" (closed)&lt;br /&gt;Power: 7.5v wall adapter or 6 rechargable AA NiMH batteries&lt;br /&gt;Screen: 5" LCD Keyboard: 69-key QWERTY Sound: Ampilfied 1.5" 0.4W internal speaker&lt;br /&gt;&lt;br /&gt;Connections: power, userport/joystick, serial disk drive, audio/video output, headphone jack, external PS/2 keyboard, SD card slot.&lt;br /&gt;&lt;br /&gt;Addition peripherals: 1.75" x 1.5" mini Atari joystick.&lt;br /&gt;&lt;br /&gt;Features: on screen display for volume and brightness control, auto sensing of external keyboard connection, programmable funtion keys, video selector switch.&lt;br /&gt;&lt;br /&gt;Although I plan on posting a more length write-up, for now, I'll give you just the important details:&lt;br /&gt;&lt;br /&gt;The LCD screen is from a PSOne. I'm also using on LCD's board audio amp to drive the speaker.&lt;br /&gt;The LCD is what ultimately drove my power requirements. Almost the entire circuit for the LCD uses 5v except for one IC which needs between 7v and 8v to generate H-Sync.&lt;br /&gt;&lt;br /&gt;The keyboard was a bitch to figure out and will be the subject of a post of it's own. It's from a Jornada foldaway keyboard made by Micro Innovations. In terms of construction, I had cut away a lot of extra plastic and superglue the two halves together making a single solid keyboard. The keyboard normally interfaces with a HP Jornada via a RS-232 link and special driver. I was able to capture all the output codes and program a 16F88 PIC microcontroller to re-map and output with the appropriate PS/2 protocol. On power up, the PIC checks if there is an extrenal keyboard attached. If so, it ignores data from the onboard keyboard.&lt;br /&gt;&lt;br /&gt;If you more in depth details of the RS-232 to PS/2 keyboard hack check on &lt;a href="http://jledger.proboards19.com/index.cgi?board=dtvhacking&amp;action=display&amp;amp;thread=1167783024"&gt;this post&lt;/a&gt;.&lt;br /&gt;Some other general construction details can be found &lt;a href="http://jledger.proboards19.com/index.cgi?board=dtvhacking&amp;action=display&amp;amp;thread=1167546608"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have set up a DTV Hacking Wiki &lt;a href="http://www.picobay.com/dtv_wiki/"&gt;here&lt;/a&gt;.  Also, here is a &lt;a href="http://www.picobay.com/forum/"&gt;forum&lt;/a&gt; specifically geared toward answering basic questions about hardware hacking.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/picodore64-back.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/picodore64-back.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/picodore64-back.jpg"&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;a href="http://www.picobay.com/picodore64/hummer.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/hummer.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is what I started out with. I got it from Radio Shack on clearance for $17.99.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/wood_shell-1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/wood_shell-1.jpg" border="0" /&gt;&lt;/a&gt; After all the sawing, sanding and filing, I think I would have been better off just carving it out of a log.&lt;br /&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/picodore64-2.jpg" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/conponents-1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/conponents-1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;All the major components can be seen here.&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/LCD-1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/LCD-1.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.picobay.com/picodore64/keyboard_installed.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/keyboard_installed.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the backside of the keyboard panel. You can also see the speaker hot-glued into position.&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/picodore64-3.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/picodore64-3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/picodore64-5.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/picodore64-5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check out that sweet miniature Atari joystick! It's fully functional by the way.&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/IMG_1321_sm.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/IMG_1321_sm.JPG" border="0" /&gt;&lt;/a&gt;What project would be complete without an SD card slot.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/IMG_1327.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/IMG_1327.JPG" border="0" /&gt;&lt;/a&gt;The keyboard on the bottom is a normal sized PC keyboard. Initially, I was going to use the one in the middle since it was the smallest PS/2 keyboard I could find, but believe it or not, it wasn't small enough!&lt;br /&gt;&lt;a href="http://www.picobay.com/picodore64/IMG_1334_sm.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/IMG_1334_sm.JPG" border="0" /&gt;&lt;/a&gt;Here is a close up of the to show some of those awesome decals. Note the "C64 inside" logo on the right.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;a href="http://www.picobay.com/picodore64/IMG_1337_sm.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.picobay.com/picodore64/IMG_1337_sm.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's the view when closed.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/116776663775039819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=116776663775039819' title='43 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/116776663775039819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/116776663775039819'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2007/01/picodore-64-commodore-64-pda.html' title='The Picodore 64 - a Commodore 64 PDA'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>43</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-115284334046334761</id><published>2006-07-13T21:53:00.000-04:00</published><updated>2006-07-13T22:15:40.500-04:00</updated><title type='text'>Simple e-Passport safeguard: Aluminum Foil</title><content type='html'>Today, CNN.com is featuring an &lt;a href="http://money.cnn.com/2006/07/13/pf/rfid_passports/index.htm?cnn=yes"&gt;article&lt;/a&gt; about the vulnerabilities of e-Passports.  In case you don't know, beginning in August, new U.S. passports will contain an RFID tag.  An RFID tag is a little circuit and antenna that allows data to be read from it wirelessly.  The plan is to speed up check-in by automating the process of getting the indentification information from the traveler's passport.  Unfortunately, anyone with an RFID tag reader can read the data without you even knowing it.  Great...  just what we need, identity theft on a global scale.&lt;br /&gt;A simple and inexpensive way to defend against unwanted access to your e-Passport is to wrap it in aluminum foil.  RFID tags are designed to be used at close range, so it doesn't take much to interfere with them.  One layer of aluminum foil will attenuate the radio signal enough to stop any unwanted access of your information.  Though, you'll probably need to remove it from the foil before you hand it over to the customs official.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/115284334046334761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=115284334046334761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115284334046334761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115284334046334761'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/07/simple-e-passport-safeguard-aluminum.html' title='Simple e-Passport safeguard: Aluminum Foil'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-115147081040217290</id><published>2006-06-27T23:25:00.000-04:00</published><updated>2006-07-03T14:48:00.276-04:00</updated><title type='text'>How To Set Up a Webcam Server Behind a Proxy / Firewall / NAT/ Dymanic IP</title><content type='html'>My lastest addition to &lt;a href="http://www.picobay.com/fishcam/fishcam.html"&gt;Jason's Fishcam&lt;/a&gt; turned into quite a networking challenge.  I needed to stream video from a server behind a proxy server and a firewall.   Oh, and the webcam server had a dymanic IP.&lt;br /&gt;My first attempt was to transfer still webcam images via FTP (passive mode, of course) to an outside server.  To help speed things up, I saved the incoming images to a &lt;a href="http://www.picobay.com/projects/2006/06/how-to-make-windows-xp-ram-disk-drive.html"&gt;RAM Drive&lt;/a&gt; configured on the FTP server.  Although this method worked it still wasn't fast enough for my liking (about 1 frame every 2 seconds).  My other cams are streaming video and I didn't want this one to be anything less.  My second attempt, using a "tunneling" proxy server, yielded a much better result at over five frames per second.  If you're interesting in setting up something like this for yourself, the following explainantion may help.&lt;br /&gt;In order for this to work, you're going to need a few things first. So besides your helpless server that is insolated from the rest of the internet, you're going to need access to another server running on the outside and some tunneling software.  In my situation, I already had a server on the outside streaming video from my other webcams.  (And when I say server, I mean a crappy little PC running some webcam software... nothing special.)  The tunneling application will connect the two servers in a "port forwarding" arrangement.  Let me explain...&lt;br /&gt;From behind a firewall, a computer can still transmit data to the outside world.  The only catch is that it has to initiate the connection.  Unfortunately, that doesn't work very well when the computer behind the firewall is a server.  The whole point of a server is to sit there and wait from connection requests.  A server insolated from the internet by a firewall isn't going to hear any requests.  The tunneling proxy server approach overcomes this problem by having a little application (app) that runs on both the server behind the firewall  and the server on the outside.  The app on the outside server constantly listens for a connection originating from the app on the inside server.  Once the two are connected, the server behind the firewall can accept outside requests.  In practice, someone one wanting to connected to the inside server will actually type in the host name of the outside server.  The request will transmitted from one server to the other via the tunneling app.  Generally the entire process is transparent to the end user.&lt;br /&gt;I'm sure there are better application to use for this but I'm going to talk about a little gem called Java Proxy.  Go &lt;a href="http://www.me.lv/jp/manual.html"&gt;here&lt;/a&gt; to read what the developer has to say about it.  He has a few diagrams that might make this easier to understand.  You can download it there too, but good luck finding the well hidden link.  Java Proxy is written in JAVA (big surprise) and you'll need at least &lt;a href="http://java.sun.com/javase/downloads/index.html"&gt;J2SE 1.4&lt;/a&gt; installed to use it.  You can use it as is by typing "java -jar jp3.jar" at the command line.  Running it this way is great for setting it up, but unfortunately, it leaves a big ugly window in the middle of the screen that can't be minimized.  I've taken the liberty of making a &lt;a href="http://www.picobay.com/projects/JavaProxy.zip"&gt;custom wrapper&lt;/a&gt; that will allow Java Proxy to be run from a standard exe that can be hidden.&lt;br /&gt;Java Proxy is quite a powerful little program and although it can do a lot of cool stuff, I'm only going to explain how to use it in one configuration: forwarding mode.  This will allow a specific port on the outside server to pass along requests to the firewalled server.&lt;br /&gt;First set up Java Proxy on the server behind the firewall...  From this server, run Java Proxy and choose "Redirector client" from the first screen.  Now under "Connection options"  type in the location (Hostname or IP) of the outside server and choose a port. For this example lets say we're going to use port 202.  Now click Next and Start.   Also, go to the File menu and pick "save config as..."  Save the configuration as "settings.xml" (this is important if you want to use the hidden mode version).  Now load up your webcam server software.  Ok, that's it for this server now it's off to set up the outside server.&lt;br /&gt;Load up Java Proxy on the outside server.  This time choose "Connector server" and click next.  On the next screen, type in the same server port we used on the other server, port 202 in our example.  Now click the "Forwarding..." option.  In the "Forwarding configuraion" window, check the use forwarding option.  Type "localhost" in the remote host field.  This basically tells the other Java Proxy that it is on the same machine as the webcam server we want to contact.  Set the remote port to the port used by the webcam server software on the inside server.  (hopefully something other than 202).  For simplicity we'll set the local port to the same number but it can be different if you want.   Click Add and OK.  Click Next and Start.  Again save the configuration as "settings.xml".&lt;br /&gt;Now, hopefully within a minute or two, you'll see the "connected" indicator turn yellow on the window that pops up.  If not, check that Windows Firewall (or what firewall software you have) isn't blocking the Java Proxy port.  In our example that would be port 202.&lt;br /&gt;At this point you should be able to see your webcam.  To access it, use the address of the outside server with the local port number you used in the "Forwarding configuration" window.   Something like...  http://www.outsideserver.cat:8080&lt;br /&gt;If you get it working and you'd like Java Proxy to run hidden in the background, then use the jp3_silent.exe from the ZIP package.  It's important to point out that you'll need to have a "settings.xml" file in the same folder.  By placing a shortcut to jp3_silent.exe in the Start Menu, under Startup it will run hidden at startup.&lt;br /&gt;This write-up concentrates on webcam servers but really you could use Java Proxy for almost any kind of TCP/IP connection FTP, HTTP, VNC, etc.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.picobay.com/projects/JavaProxy.zip"&gt;Download JavaProxy.zip  (exe and hidden mode version)&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;  &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/115147081040217290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=115147081040217290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115147081040217290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115147081040217290'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/06/how-to-set-up-webcam-server-behind.html' title='How To Set Up a Webcam Server Behind a Proxy / Firewall / NAT/ Dymanic IP'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-115134848459398737</id><published>2006-06-26T13:23:00.000-04:00</published><updated>2006-06-26T15:03:47.493-04:00</updated><title type='text'>How To Make a Windows XP RAM Disk Drive (for free)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/ram_drive-753359.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.picobay.com/projects/uploaded_images/ram_drive-750162.jpg" alt="" border="0" /&gt;&lt;/a&gt;Need to make Windows think part of your memory is a hard drive?  Try making a RAMDrive (or RAM Disk some people call it).  This will dedicate a section of your computer's memory to the temporary storage of folders and files.  Why would you want to do such a thing?  Accessing time for files on a RAM Drive are about 1,000 times quicker than a conventional drive.  Also, if you have a situation where you're access the same files over and over again, a ram disk will help reduce wear and tear on your real hard drive.  Of course the down side of all this is that files on a RAM Drive are gone when the computer is shut down (or crashes).&lt;br /&gt;I use a RAM Drive on my "Jason's Fishcam" system.  One of my webcams is behind a proxy/firewall that I don't control.  I order to get images from that camera, I FTP the image files to a server sitting outside the firewall and restream them from there.   Since I didn't want my hard drive continuously writing and overwriting the same file, I save the image file onto the RAM Drive.   Not only does this let my save the image over and over again without the hard drive, but it allows me to do it quite a bit faster as well.&lt;br /&gt;There are some software packages out there that will configure a RAM Disk Drive automatically.  If you need more bells and whistles, check those out.  This method is free and allows a RAM Disk of up to 32MB.&lt;br /&gt;&lt;br /&gt;1.  Download &lt;a href="http://www.picobay.com/projects/ramdisk.inf"&gt;ramdisk.inf&lt;/a&gt; and &lt;a href="http://www.picobay.com/projects/ramdisk.sys"&gt;ramdisk.sys&lt;/a&gt; file and save them in the same folder (somewhere convenient).&lt;br /&gt;2. Go to the &lt;span style="font-weight: bold;"&gt;Control Panel&lt;/span&gt; and click &lt;span style="font-weight: bold;"&gt;Add Hardware&lt;/span&gt;&lt;br /&gt;3.  Click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt; and wait for the search to complete.&lt;br /&gt;4.  Choose "&lt;span style="font-weight: bold;"&gt;Yes, I have already connected the hardware&lt;/span&gt;" and click &lt;span style="font-weight: bold;"&gt;Next&lt;br /&gt;&lt;/span&gt;5.  Scroll to the very bottom and highlight "&lt;span style="font-weight: bold;"&gt;Add a new hardware device&lt;/span&gt;" and click &lt;span style="font-weight: bold;"&gt;Next&lt;br /&gt;&lt;/span&gt;6.  Choose "&lt;span style="font-weight: bold;"&gt;Install the hardware that I manually select from a list&lt;/span&gt;" and click &lt;span style="font-weight: bold;"&gt;Next&lt;br /&gt;&lt;/span&gt;7.  Wait for the search to complete and click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;&lt;br /&gt;8. Highlight "&lt;span style="font-weight: bold;"&gt;Show All Devices&lt;/span&gt;" and click &lt;span style="font-weight: bold;"&gt;Next &lt;/span&gt;(warning: this part may take a few minutes)&lt;br /&gt;9. Click &lt;span style="font-weight: bold;"&gt;Have Disk...&lt;/span&gt; (Important! Be sure not to click on anything else or scroll through the lists before you click &lt;span style="font-weight: bold;"&gt;Have Disk&lt;/span&gt;.  Doing so will screw up this process.)&lt;br /&gt;10. Click &lt;span style="font-weight: bold;"&gt;Browse&lt;/span&gt; and locate the folder you saved the ramdisk.inf file in, select ramdisk.inf and click &lt;span style="font-weight: bold;"&gt;Open&lt;/span&gt;&lt;br /&gt;11. Click &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;, then &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt; again.&lt;br /&gt;12. Click &lt;span style="font-weight: bold;"&gt;Continue Anyway&lt;/span&gt; if a warning pops up and then &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;&lt;br /&gt;Now for the fun part!&lt;br /&gt;13.  Under the &lt;span style="font-weight: bold;"&gt;Start menu&lt;/span&gt;, click &lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt;, type in &lt;span style="font-weight: bold;"&gt;regedit&lt;/span&gt; and click &lt;span style="font-weight: bold;"&gt;OK&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;14. Open the following:   &lt;span style="font-weight: bold;"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ramdisk\Parameters&lt;br /&gt;&lt;/span&gt;To set the size of the Ram Disk Drive, right click on &lt;span style="font-weight: bold;"&gt;DiskSize&lt;/span&gt; and choose &lt;span style="font-weight: bold;"&gt;Modify&lt;/span&gt;.  Type in the new size under &lt;span style="font-weight: bold;"&gt;Value data&lt;/span&gt;. The maximum is 3,200,000 (in hexadecimal) which equals 32MB&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;15. If you need to, modify the &lt;span style="font-weight: bold;"&gt;DriveLetter&lt;/span&gt; enrty too.  (the default is "Z")&lt;br /&gt;16. Now navigate to:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Fastfat&lt;br /&gt;&lt;/span&gt;change the value of &lt;span style="font-weight: bold;"&gt;Start&lt;/span&gt; from &lt;span style="font-weight: bold;"&gt;4&lt;/span&gt; to &lt;span style="font-weight: bold;"&gt;1&lt;br /&gt;&lt;/span&gt;17. Exit the Registry Editor and Reboot&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/115134848459398737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=115134848459398737' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115134848459398737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/115134848459398737'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/06/how-to-make-windows-xp-ram-disk-drive.html' title='How To Make a Windows XP RAM Disk Drive (for free)'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-114675082145671139</id><published>2006-05-04T09:35:00.000-04:00</published><updated>2007-01-11T19:23:38.730-05:00</updated><title type='text'>Controlling a Video Game with Brain Waves</title><content type='html'>This post describes two projects that involve controlling a video game (Quake II) via electrical signals generated by the body, otherwise known as a "Brian Machine Interface". The first project is an EOG (electro-oculography) video game controller. In an EOG system, electrical signals generated by eye movements are detected by electrodes placed on the surface of the skin near the eyes. The second project demonstrates game control via EEG (electroencephalogram). With EEG, electrodes are placed on the scalp and neural activity of the brain itself is monitored.&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:100%;" &gt;&lt;br /&gt;EOG: Video Game Control by Eye Movements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The EOG game control is much easier to implement as compared to EEG. This is partly because of the slightly larger signals generated by EOG. But more importantly, the analysis of EOG signals is straight forward. During eye movements, a voltage potential is generated. By placing electrodes over the muscles responsible for specific eye movements, these movements can be detected and mapped to various inputs of a video game controller.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/IMG_0780_sm-746309.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/IMG_0780_sm-741341.jpg" border="0" /&gt;&lt;/a&gt;Here you can see me placing the electrodes on the subject (Il Park). The black cap and chin strap are completely unnecessary in this EOG experiment but we thought it looked cool and decided to use in anyway.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/block_diagram-739644.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0pt 0pt 10px 10px; CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/block_diagram-735234.jpg" border="0" /&gt;&lt;/a&gt;This is a block diagram of the system used to control Quake II. A multi-channel Tucker Davis data acquisition system was used to get the EOG signals and provide a little noise filtering. The buffered and filtered signals were then passed along to a PC running MatLab. This is where a crude pattern matching scheme was used to discriminate between the five different eye movements assigned to game control. When Matlab detected an intended motion, the corresponding command was sent to the running Quake II game. The commands had to be sent via TCP/IP since the game was running on a separate computer.&lt;br /&gt;&lt;br /&gt;The results from this project were very good. There was little to no perceivable lag during game play and accuracy averaged 95%. Obviously you wouldn't want to play the entire game this way. With only five eye movements to choose from (left, right, up, down and blink), control was limited. I was able to shoot and kill some enemies in the game, which you can see in the &lt;a href="http://www.picobay.com/projects/EOG_game_play.wmv"&gt;video&lt;/a&gt;. If you are interested in knowing more about how this system works, check out this &lt;a href="http://www.picobay.com/projects/EOG%20Video%20Game%20Control.pdf"&gt;paper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Av_fBw9esWo"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Av_fBw9esWo" type="application/x-shockwave-flash" width="600" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This is a video of the system in action. The &lt;a href="http://www.picobay.com/projects/EOG_game_play.wmv"&gt;video&lt;/a&gt; shows the output of the Quake II game, the subject's (which would be me) eye movements and the real time data analysis that is happening on a separate computer. It's kind of eerie at the end of the video when the camera zooms out and you can see me controlling the game but I'm not moving my hands.&lt;br /&gt;&lt;br /&gt;Download video: &lt;a href="http://www.picobay.com/projects/EOG_game_play.wmv"&gt;EOG_game_play.wmv&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download project details: &lt;a href="http://www.picobay.com/projects/EOG%20Video%20Game%20Control.pdf"&gt;EOG Video Game Control.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:100%;" &gt;&lt;br /&gt;EEG: Video Game Control by Thought (Brian Machine Interface)&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;Unlike EOG signal detection, a brain machine interface using EEG signals isn't as straight forward. As mentioned earlier, EEG relies on an array of electrodes that contact the scalp. The electrodes are sewn into an elastic cap that is worn on the head (see the pictures) and a conductive gel is squirted around each electrode to get maximum conductivity between the data acquisition equipment and the subject. In contrast to an EOG interface which places an&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; electrode over a specific muscle or nerve, an EEG interface involves a little guesswork to find a control scheme that will work. Not only are the signals captured during EEG fairly noisy, but getting the electrodes in the same place for every experiment is a challenge in itself.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Please excuse me while I vent for a second here...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;br /&gt;&lt;/span&gt;Every few months various media outlets (CNN, MSNBC, etc) "re-discover" brain machine interfaces (BMI). Every time someone moves a cursor on a computer screen with their mind, the media covers it like the it's the best thing since sliced bread. I've got news for everyone: brain machine interfaces have been around for a long time. Recently CNN had an article about some engineers at Honda who hooked up a robotic hand to an MRI machine. When the subject made a peace sign, the robotic hand made the same motion a few seconds later. Big deal. They could have made the robotic hand play the piano when the subject makes a peace sign, as well... though, that wouldn't&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; have created the illusion that their system is actually decoding all the&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; subtle neural signals required to make such a complex hand movement. The CNN reporter not&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; only gave credit to Honda for invented brain machine interfacing (which has probably been around for 20 years now), but said that in the future this technology is going to replace keyboards and buttons on cellphones. Haha! Good one! There are some fundamental reasons this will never happen. If you attempt any kind of BMI experiment, they will become obvious to you. Maybe in a few months they'll do an article on me playing a video game with my mind.&lt;br /&gt;Back to the EEG video game control...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/electode_placement-759073.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/electode_placement-756747.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;A common misconception about brain machine interfacing is that you just stick an electrode over the part of the brain that controls&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; a particular movement and 'viola' you can detect any time&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; someone makes that movement. If it were only that easy. There are several reasons why this isn't the case. First, the human brain has billions of neurons versus the limited number electrodes of that can be placed on the subject's head (see the picture to the left for the electrode placement). Even if there was one neuron that was responsible for a certain hand movement, what are the chances an electrode (that is enormous in comparison) is going to be in exactly the right place to pick up that signal? Second, there is a lot of noise in a system like this. Trying to filter out all the other neural activity is a real challenge. Third, the truth is, we're not even sure how the brain works yet. Granted, there are some generalities we know about how intended physical movement originates in the premotor cortex and shifts into the motor cortex, but there is a still much to be learned in the area of&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt; motor control.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;The term "brain waves" refers to the different frequency bands of neural activity in the human brain. These frequency bands can be associated particular mental states. For example, delta waves occur between 0.5 and 4 Hz. Delta waves are seen during deep sleep. The brain wave band used for controlling the video game in the experiment is the &lt;/span&gt;&lt;/span&gt;&lt;?xml:namespace prefix = p /&gt;&lt;p:colorscheme colors="#003399,#ffffff,#000514,#e5e5ff,#0099cc,#a886e0,#ffcc00,#ffffcc"&gt;&lt;/p:colorscheme&gt;mu-band (between 8 and 12 Hz). mu-rhythms occur at the sensorimotor cortex and are associated with movement preparation and motor imagery, but suppressed during any actual motor activity. Meaning you can detect these signals when the subject is relaxed but not while the subject is actually moving a body part or even thinking about moving a body part.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/nothing-742563.jpg"&gt;&lt;img style="CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/nothing-736334.jpg" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/right-729498.jpg"&gt;&lt;img style="CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/right-722197.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;These plots show frequency power spectra during "no imagined movement" and "imagined movement. Notice the mu-rhythms at about 12 Hz.&lt;br /&gt;&lt;br /&gt;To control the computer with my mind, mu-rhythms were analyzed in this experiment. Again it is nearly impossible to discriminate signals from different parts of the motor cortex through surface electrodes placed on the scalp. BUT, the left and right hemispheres of the brain can be analyzed separately. This scheme gives two channels for computer control. Basically, the mu-rhythms were measured for each hemisphere of the brain and when a certain threshold was reached that equated to an "on" state. Two hemispheres multiplied by two control states gives four possible outputs for the game control. This was used to make the character in Quake II go left, right, forward (and fire) or stop.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/EEG_feedback-737822.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/EEG_feedback-735405.jpg" border="0" /&gt;&lt;/a&gt;Controlling the computer with your mind requires a little training. Training was done with a visual feedback system that allowed you to see you're brain waves in real time and try various things to modify them. The strategy that works the best involved small imagined movements. In practice this amounted to sitting in a chair perfectly relaxed and imagining moving a finger and therefore modifying the mu-rhythms for that hemisphere. So when I imagined moving my right finger, the video game character moved right. When I imagined moving my left finger, the computer moved the game to the left. The accuracy for this style of EEG computer control was about 60%. Clearly not as good as EOG.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: center"&gt;If you need a more technical description of this system read this paper:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/projects/EEG-Based_Game_Control.pdf"&gt;EEG Based Game Control.doc&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.picobay.com/projects/EOG%20Video%20Game%20Control.pdf"&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/114675082145671139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=114675082145671139' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114675082145671139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114675082145671139'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/05/controlling-video-game-with-brain.html' title='Controlling a Video Game with Brain Waves'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-114568601145367729</id><published>2006-04-22T01:23:00.000-04:00</published><updated>2006-04-22T16:25:02.196-04:00</updated><title type='text'>Essential Tremor Suppression via Viscous Damping</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/tremor_device-787644.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.picobay.com/projects/uploaded_images/tremor_device-785858.jpg" alt="" border="0" /&gt;&lt;/a&gt;This is a prototype of an essential tremor suppression device.  I built it for a biomedical engineering design contest (which I won).  Essential tremor is a neurological disease that causes uncontrollable shaking of the hands and arms.  A surgical treatment does exist, but it involves implanting an electrode into the thalamus of the brain.  Needless to say, not a surgery for everyone.  For some, tremor is only temporary and they are not good candidates for the $25,000 operation.&lt;br /&gt;This particular device uses dashpots to dampen out the high frequency tremor motion&lt;br /&gt;(4 to 8 Hz) and allow the slower intended movements.  Obviously this isn't a complete solution since it only addresses tremor at the wrist.  Check out the link to the presentation slides for more information.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.picobay.com/projects/Wearable%20Essential%20Tremor%20Suppression%20Device.pdf"&gt;Wearable Essential Tremor Suppression Device (pdf)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/114568601145367729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=114568601145367729' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114568601145367729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114568601145367729'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/04/essential-tremor-suppression-via.html' title='Essential Tremor Suppression via Viscous Damping'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25165863.post-114444414828430660</id><published>2006-04-07T16:53:00.000-04:00</published><updated>2007-01-20T22:07:20.178-05:00</updated><title type='text'>$7 Air Purifier</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.picobay.com/projects/uploaded_images/IMG_1108-730879.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://www.picobay.com/projects/uploaded_images/IMG_1108-725139.JPG" border="0" /&gt;&lt;/a&gt;I've been suffering from some allergy problems lately and while I was at Lowe's, I took a look at their selection of air purifiers. Much to my surprise, the cheapest one they had was $70. I took the liberty of taking apart the display model while I was there. It seems that there isn't much magic going on inside these things. It consisted of a squirrel cage fan and an air filter. Since I already had a box fan at home, I decided to walk down to aisle 20 and grab a furnace air filter to make my own. I picked the cheapest filter that could still filter pollen. I'm happy to report that with a little duct tape, I have constructed my very own air purifier at a fraction of the price. After using it for a week, I am amazed at how much dirt and pollen is in the air. It's that time of year here in Florida. The pollen is absolutely horrid for a few weeks in the spring. I think they forecast is in inches.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/114444414828430660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25165863&amp;postID=114444414828430660' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114444414828430660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25165863/posts/default/114444414828430660'/><link rel='alternate' type='text/html' href='http://www.picobay.com/projects/2006/04/7-air-purifier.html' title='$7 Air Purifier'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00764050001007131897</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry></feed>