tag:blogger.com,1999:blog-27269527214368087932024-03-05T23:23:35.179-05:00Diary of a Mad OverlordBeing a compendium of musings about my extremely subtle plan for world domination, for both the edification of my friends, and to spread confusion amongst those foolish enough to oppose me.MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-2726952721436808793.post-45073295232459125302016-08-11T17:09:00.000-04:002016-08-11T17:09:16.694-04:00No Man's Patience<h2 style="text-align: left;">
How I very much want to like No Man's Sky, but it sure isn't making it easy!</h2>
<div>
Notes from a grumpy old ex-game coder.</div>
<div>
<br /></div>
<div>
I've probably put in a dozen hours or more playing NMS on the PS4 the last few days, and there's a lot about the game that I like, in terms of the atmosphere and just the general idea of procedural generation.</div>
<div>
<br /></div>
<div>
It's such a great pity that the flaws in the interface make it so hard to just sit back and flow through the game; you're always fighting it. After bashing my head against it for a while, I think the designers fell afoul a very common cognitive blind-spot -- they didn't spend enough time thinking about how players (especially casual, older players like myself) would actually play the game. And after all, if it was easy for them (the developers) to play, it should be easy for everyone else, right?</div>
<div>
<br /></div>
<div>
Wrong. We are at a huge experience and skills deficit. We don't have all the implicit knowledge built up as they developed the game. It really feels like they either didn't test with naive players, didn't test deep enough into the game, or didn't want to hear the results.</div>
<div>
<br /></div>
<div>
Here's a short list of outrageously annoying and really simple-to-fix problems with the game and interface.</div>
<div>
<br /></div>
<div>
<ul>
<li>The cursor is often a single pixel and invisible. There's often also UI icons near the center of the screen that distract you and give you a false impression of where the aimpoint is.</li>
<li>When you turn in space and stop, you keep turning a bit. This means it's damn near impossible to put the aimpoint where you want it, which makes space combat much more difficult. And BTW, there's no learning curve on space combat, you're almost always up against multiple enemies who will quickly slaughter you. The "sensitivity" controls are simplistic and don't do much.</li>
<li>When you want to find something specific, you just have to wander around until you stumble upon it. You can scan when you're on the ground, but that just tells you the general class of a target. If you're looking for Copper and don't know it's the big floaty chunks, you will wander for hours. I know I did.</li>
<li>Often the major differentiation between two types of minerals is color. I can imagine that color-blind players are not amused one whit.</li>
<li>The only way to tell for sure what an asteroid or monolith is made of is to mine it. I've got a warp-capable starship that can't tell the difference between Iron and Copper.</li>
<li>This wouldn't be so bad if the Galactic Market was well-stocked. But it isn't; the chances it will have what you need in the quantities you need it, esp. for raw materials, is just about zero.</li>
<li>Only raw materials stack, which is not pleasant in a game with limited inventory. I've ended up spending almost all my money on Exosuit upgrades.</li>
<li>On the subject of the market interface, your options are two; sell all units of a commodity, or scroll the number down to sell partial -- both of which are things a player will rarely want to do. What they want to do, in a game where inventory slots matter, is sell one full stack at a time or the partial stack.</li>
<li>While we're bitching about stacks, when you mine, you get shown what you are mining and how much you've mined since you started mining (and you can only mine 10-15 seconds at a time). What you really want to know is how full is your current partial stack of that commodity!</li>
</ul>
<div>
I could go on, but I feel a need to save some things up for future cathartic posts...</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<br />
<br />
<br />
<br />MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com2tag:blogger.com,1999:blog-2726952721436808793.post-47679279440819126422016-06-28T13:02:00.000-04:002016-06-28T13:02:26.650-04:00Intelligent US Address formattingI recently needed to have a good solution for parsing US postal addresses into a standard format. After a bit of quick googling I found a neat <a href="https://github.com/datamade/usaddress">github project</a> that does most of what I needed. A big shout-out to the <a href="https://datamade.us/blog/parsing-addresses-with-usaddress">Atlanta Journal Constitition</a> newspaper for doing this.<br />
<br />
If you're running python, all you have to do is 'pip install usaddress' and you're up and running.<br />
<br />
I then wrote a quick python script to convert usaddress output to a standard format, like this:<br />
<br />
[Optional Name, though you really shouldn't pass it]<br />
Address line 1<br />
[Optional Address Line 2]<br />
City<br />
State<br />
Zipcode<br />
#<br />
<br />
Here's the usaddr.py script (python 3.x):<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">#!/usr/bin/python</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">import sys</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">import usaddress</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">for addr in sys.argv[1:]:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> try:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> c = usaddress.tag(addr)[0]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> l = []</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> breakfields = [</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'Recipient',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'BuildingName',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'LandmarkName',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'CornerOf',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'USPSBoxType',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'AddressNumber',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'AddressNumberPrefix',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'PlaceName',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'StateName',</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'ZipCode'</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> ]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> multikill = {</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> 'AddressNumberPrefix' : [ 'AddressNumber' ]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> for k,v in c.items():</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if k in breakfields:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> breakfields.remove(k)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if k in multikill:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> for mk in multikill[k]:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if mk in breakfields:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> breakfields.remove(mk)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> l = [i for i in l if i]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if l != []:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> print(' '.join(l))</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> l = [v]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> else:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> l.append(v)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> l = [i for i in l if i]</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if l != []:</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> print(' '.join(l))</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> print('#')</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> except usaddress.RepeatedLabelError as e :</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> print('Error: cannot parse address')</span><br />
<div>
<br /></div>
<div>
Since I'm running a LAMP stack on one of my servers that happens to have python also installed, I wrote a quick usaddr.php script to implement an API:</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">< ?php</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">foreach (explode('&', $_SERVER['QUERY_STRING']) as $chunk) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> $param = explode("=", $chunk);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if ($param) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> $cmd = urldecode($param[0]);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> $arg = urldecode($param[1]);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> if ($cmd === 'addr') {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> $command = 'python /path/to/your/script/usaddr.py ' . escapeshellarg($arg);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> $output = shell_exec($command);</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> echo $output;</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">}</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">?></span></div>
</div>
<div>
<br /></div>
<div>
So this meant I could access http://myserver.com/myapi/usaddr.php?addr=[address to reformat] from other apps (like FileMaker) to do address reformatting.</div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-76619078588627959492016-06-10T11:34:00.000-04:002016-06-10T13:31:10.113-04:00Setting up Mail Relay behind NAT for local network on OS XI recently had a need to set up an outbound mail relay on my home network so local machines behind the NAT, (ie: machines with 192.168.x.x addresses) could send an occasional status email.<br />
<br />
It turns out that OSX has a built-in postfix mail server, and it's pretty easy to turn it on. Here are some step-by-step instructions.<br />
<br />
1) Create a domain alias that points to the external IP address of your network (ie: what http://whatismyipaddress.com/ says is your IP address). If this address is static and unchanging, then you can just set up a CNAME in the DNS of some domain you own. If it tends to change because your ISP reallocates them from time to time, then use a service like http://dyn.com/ to maintain a dynamic dns listing. Many routers support dyn address updating, and there are also apps that will run on an internal machine to do it.<br />
<br />
2) For any domain that you want to send mail for, make sure this new dns entry is listed in the SPF record in the DNS. See http://www.openspf.org/ for more information. This will help ensure that other mailservers will consider the mail to be legitimate.<br />
<br />
3) On the machine that will be doing the forwarding, you now need to edit a few system files. You'll need a text editor for this -- if you've done any mucking around in the shell, you'll know how to do this.<br />
<br />
<b>/System/Library/LaunchDaemons/org.postfix.master.plist</b><br />
<br />
This config file controls how postfix is launched. Here's a simple one that should work with OSX 10.5 or later. If the AbandonProcessGroup key does not appear in the original .plist file, you can delete those two lines (17-18):<br />
<br />
<div>
<script src="https://gist.github.com/RJWoodhead/7949290f416fa267d5b1b58f49ec3183.js"></script>
</div>
<b>/private/etc/postfix/main.cf</b><br />
<br />
This config file describes how postfix does its business. We need to lock it down so it will only accept mail from machines in our local network. It's a long file, but there are two configuration lines you will need to change:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">inet_interfaces = all</span><br />
<br />
This tells the server to listen on all the network interfaces, not just the internal "loopback" one.<br />
<br />
127.0.0.1/32 is the default "localhost" address for your current machine. If you only want to relay mail for your current machine (the one postfix is running on), you set mynetworks to be just that:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">mynetworks = 127.0.0.1/32</span><br />
<br />
If you also want to relay mail for other machines in your local network, you need to know what the network range is. Typically that is something like 192.168.1.xxx, in which case you'd add 192.168.1.0/24 as the network range (the 24 is the network mask, it says how many bits out of the 32 bits are fixed). So for example:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">mynetworks = 127.0.0.1/32, 192.168.1.0/24</span><br />
<br />
Finally, you need to restart postfix and let the system know about the changed configurations. In Terminal, do this:<br />
<br />
<br />
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">sudo launchctl stop org.postfix.master</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">sudo launchctl start org.postfix.master</span></span><br />
<span class="s1"><span style="font-family: Courier New, Courier, monospace;"><span style="background-color: white; color: #242729; font-size: 15px; line-height: 19.5px;">sudo postfix start</span></span></span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Test that it's working by trying to connect to the mailserver:</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">telnet 127.0.0.1 25</span></span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">You should see something like this:</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">Trying 127.0.0.1...</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">Connected to localhost.</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">Escape character is '^]'.</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">
</span></span></div>
<div class="p1">
<span class="s1"><span style="font-family: "courier new" , "courier" , monospace;">220 Trebor.local ESMTP Postfix</span></span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Now test your mail sending by, for example, trying to send mail to a gmail account. Hopefully you'll be good to go.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-14342975589458656482016-03-08T18:29:00.001-05:002019-09-26T21:53:02.206-04:00Conway's Game of Life in the Nand2Tetris Hack Machine<a href="http://nand2tetris.org/">Nand2Tetris</a> is a very interesting course that steps you all the way from simple logic gates up to an operating system. One of my sons is taking the course this semester, so I decided to shadow the assignments and ended up having a lot of fun.<br />
<br />
I've posted a video on Vimeo of an implementation of <a href="https://vimeo.com/182868063">Conway's Life for the Hack machine</a>.<br />
<br />
You can find the source code <a href="https://www.dropbox.com/s/0ekyao0arv0f0j2/Nand2Tetris-Life.zip?dl=0">here</a>. Enjoy!MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-76395398241181246302015-04-30T18:54:00.000-04:002015-05-02T16:48:35.861-04:00Mac OS / Linux : Finding all the files that meet some criteria and returning an escaped list of the paths, sorted by lengthThis is another post "for the next poor bastard"<br />
<br />
One of the side effects of running AnimEigo is that I end up with a lot of video on hard disc -- terabytes and terabytes of it. This is amusing when you consider my first hard drive cost $5000, stored 20MB, and shook the table when the disc heads moved.<br />
<br />
When projects are finished, we archive all the video and project files just in case we need them later, and rather than just copying the files onto an archive disc (easy and fast), since much of the original source materials are uncompressed audio and video, compressing these files before archiving means we can save a few bucks and free up some hard drives for reuse <b>and</b> replicate the files on multiple drives as insurance.<br />
<br />
The Mac finder has a built-in feature that lets you compress files and folders, but it occurred to me recently to check to see if there were better options.<br />
<br />
After doing a little research, I settled on using <a href="http://compression.ca/pbzip2/">pbzip2</a>, the multicore implementation of bzip2, which seems to do a good job of compressing uncompressed video files -- often down to 20-25% of the original size. If you're using a Mac, the easiest way to install it is by using the <a href="http://www.finkproject.org/">fink</a> package manager.<br />
<br />
As pbzip2 is a command-line tool, you invoke it using the Terminal app, by typing something like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">pbzip2 -v "path to the first file you want to compress" "path to the next file" ...</span><br />
<br />
and pbzip happily goes off and (slowly) compresses the file for you. All fine and good, and you can just type the <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">pbzip2 -v</span> part and then drag files in from a folder window to enter the paths.<br />
<br />
However, because I'm lazy and thus willing to spend many hours automating things to save myself a few seconds of drudgery, I started playing around in the default Bash shell that Terminal provides; it had been a while since I'd done more than trivial things in it and a refresher couldn't hurt.<br />
<br />
The basic philosophy of Unix shell tools is "lots of little tools that do a small number of things well that you can hook up to do something complicated". You send the output of one tool into the next tool using a pipe, represented by the | character. Here's the command sequence I came up with:<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">find . \( -iname '*.aiff' -or -iname '*.aif' -or -iname '*.wav' -or \( -size +500000 -iname '*.mov' -not -iname '*ProRes*' -not -iname '*H264*' \) \) -print0 2> /dev/null | xargs -0 du -s | sort -n | cut -f 2 | while read line; do printf "%q " "$line" ; done ; echo</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: inherit;">Here's what it does. The first part invokes the find command; this finds any file that ends in .aiff, .aif, .wav or .mov, with the added restriction that .mov files need to be at least 5GB long and have a name that doesn't include the strings ProRes or H264; this eliminates most if not all of the compressed video files. The -print0 command says to separate the output file paths with a nul character instead of a linefeed (needed so the next tool doesn't get confused by spaces in filenames), and the 2> /dev/null redirects any error messages to the great bit bucket in the sky.</span><br />
<br />
<div>
<span style="font-family: inherit;">Each path gets processed by xargs, which is a tool that lets you run other tools on each line. The -0 means use nul as the line delimiter, and it runs du -s (disk usage) on the file paths.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">The output of that is a set of lines, each containing the length of the file in disk blocks plus the path, separated by a tab. This gets piped into the sort tool, which is told to sort the lines by their numeric value by using the -n flag; </span><span style="font-family: inherit;">I want them in this order so pbzip2 can compress the smallest files first, freeing up space for the larger ones; often an archive drive will be almost full when I start to compress it.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Next the cut tool is used to extract the second field, which gets us back our list of paths, now sorted smallest to largest.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Finally, I need to put all these paths on a single line, separated by spaces, and properly escaped (spaces changed to "\ ", for example). There is a printf (print formatted) tool for this, but the "%q" formatting code that does the escaping is not implemented in the MacOS version of printf (bitch moan bitch moan). However, <u>printf is also implemented as a built-in command in the Bash shell, and that version does implement "%q"</u>, so a little inline shell script will do what I need - it reads each line, prints it out escaped with a space after it, and then echos a blank line. The final result is a single long line containing all the file paths, w</span><span style="font-family: inherit;">hich admittedly looks like crap but I can just copy it, type in </span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">pbzip2 -v</span><span style="font-family: inherit;"> (or any other compression command) and paste it in. Actually, given how pbzip2 spawns multiple threads and can chew up a lot of your cpu resources, you probably want to do something like </span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">nice -5 pbzip2 -v</span><span style="font-family: inherit;"> to make it a bit more polite.</span></div>
<div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">This won't work if the filename has really weird characters in it, like carriage returns, but that isn't a problem for me.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Let me end with a big shoutout to all the contributors to the many postings on <a href="http://stackoverflow.com/">stackoverflow</a> that helped me find the right tools and combinations.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">PS: I later stumbled upon this <a href="http://dbahire.com/which-compression-tool-should-i-use-for-my-database-backups/">excellent comparison of various compression tools which includes an efficiency/time tradeoff chart</a>. Of course, depending on what you are compressing, your mileage may vary!</span></div>
<div>
<br /></div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-17991440212808016632015-02-20T12:34:00.000-05:002015-02-20T12:34:17.289-05:00The anagram of Samarang is AnagramsA few days ago I randomly stumbled upon the "check if two strings are anagrams" interview question, and it piqued my interest.<br />
<br />
While it is immediately obvious there is an O(n-logn) algorithm for this -- sort the character arrays and compare them -- after a few moments I flashed on the O(n) algorithm for comparing two strings and determining if they are anagrams of each other.<br />
<br />
This got me thinking, and I remembered the fun I had about 15 years ago assembling a huge list of english words and checking to see if the .com domain names were available. A little quick googling found some <a href="http://www.keithv.com/software/wlist/">interesting word lists</a> and I was off to the races.<br />
<br />
I ended up implementing the O(n) comparison algorithm along with a data structure that chops up the word list by word length and then hashes the words using a hashing algorithm that causes potential anagrams to hash to the same bucket. However, checking all the words in each hash bucket is O(n^2)<br />
<br />
Thus, it is typically much slower than the simpler nlogn algorithm in Python, because the lengths of the strings and the typical hash bucket are small, the python list.sort() function is highly optimized, and once you do have the strings and bucket sorted, the search for anagrams is O(n).<br />
<br />
And O(n^2-logn) < O(n^2-n)<br />
<br />
The moral of this story is, in order to figure out the best algorithm, you need to consider the whole problem. I fell in love with the O(n) comparison, but didn't notice for a while that changing the problem from "check if two strings are anagrams" to "find all the anagrams in a word list" made a big difference.<br />
<br />
Still, it was a fun evening of coding, and my python is getting marginally less horrible.<br />
<br />
<a href="https://dl.dropboxusercontent.com/u/7492184/Python/Anagrams.zip">You can find the python code, word lists and sample output here</a>.<br />
<br />
PS: Samarang is a place in IndonesiaMadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-52016702602146652972015-01-07T07:10:00.000-05:002015-01-07T07:10:07.610-05:00Troubleshooting a Brother DCPL2540DW Wifi ConfigurationThis is one of those posts I'm mostly doing for the benefit of "The Next Poor Bastard". My Mom got a new DCPL2540DW printer the other day and it took a little headbanging to get it talking to the other devices in the house.<br />
<br />
It's a fairly nice printer: built in scanner/copier, two-sided printing, WiFi with autoconfiguration, etc. Initial setup was easy, including one-touch wifi configuration.<br />
<br />
Just one problem: you could see the printer on the network, but attempts to print to it just died -- nothing could talk to it. Connecting a machine to it via USB worked fine, so there was a problem with the configuration.<br />
<br />
Condensing down about two hours of troubleshooting:<br />
<br />
<ul>
<li>The Wifi status printout page doesn't tell you anything useful, but the Network menus have a status option that does -- stuff like IP address.</li>
<li>The Printer was connecting to the WiFi router fine, but instead of getting an address in the 192.168.2.X range like all the other devices, it was showing a 169.X.X.X address -- a self-assigned IP address.</li>
<li>My guess is that the WiFi router doesn't like to route packets to 169.X.X.X addresses, but probably accepts packets from them. So all the local devices could see the printer's "hey guys, open for business" announcement, but not do anything with it.</li>
<li>OK, several possible ways to fix this: tweak the router so it routes between 192.168.X.X and 169.X.X.X, force the printer to get its IP from the router, or the brute-force solution: give the printer a fixed IP address in the 192.168.2.X range.</li>
<li>So brute-force it is: go into the router configuration DHCP settings, and adjust the range of IP addresses it gives out to connected devices. It was 192.168.2.2-254, I changed it to .2-249. Then go into the printer's settings, and there's an option for setting the IP address -- set it to 192.168.2.250.</li>
</ul>
<br />
Bing! Printing now works from everywhere; Macs, iPads (Airprint), even the phones.<br />
<br />
Some other minor tidbits:<br />
<br />
<ul>
<li>The Mac drivers package only installs on Mac OS 10.7 and higher, but Mom had an older 10.6.8 machine. However, you can download individual components (CUPS printer driver and Twain scanner driver) and they do install.</li>
<li>With the scanner driver installed, you can use Image Capture to control the printer and scan, even from a 10.6.8 machine.</li>
<li>You can print from a 10.5.X machine using the generic PCL 6 CUPS driver, but not over the network; you have to use the USB connection.</li>
</ul>
<br />
I'm probably going to try and get remote email printing working at some point, if so I'll update this post.<br />
<br />
<a href="http://support.brother.com/g/b/producttop.aspx?c=us&lang=en&prod=dcpl2540dw_us_as">Brother Support Pages for Printer</a><br />
<br />MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com19tag:blogger.com,1999:blog-2726952721436808793.post-45200840298417402632014-12-28T18:17:00.000-05:002014-12-28T18:17:15.899-05:00The Compex Cubes Puzzle<div class="separator" style="clear: both; text-align: left;">
Often during the holidays, I do a little programming project based on something that just strikes my fancy. For example, one year I merged a bunch of dictionaries and then ran the words through DNS to see if they were available as domain names.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This year, my Mother -- Provider of Perfect Presents -- gave one of my sons an interesting puzzle called the "Complex Cube". It has 54 T-shaped wooden parts, each made of 4 unit cubes, and the challenge is to assemble them into a 6x6x6 cube.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSnZNINmDiOEl-TnXZaM2UCDNOGnU4PTkdpbDEq7u6mmsO5hIvnimiLxDVfUMWkEGq8SEFx96-nehOy-a2EIGGnMDWLmIoeAb8LU240V_gqW4UEr7CgWQQe3AJYQdrDkNcqPNlobipZddP/s1600/Screen+Shot+2014-12-28+at+5.38.43+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSnZNINmDiOEl-TnXZaM2UCDNOGnU4PTkdpbDEq7u6mmsO5hIvnimiLxDVfUMWkEGq8SEFx96-nehOy-a2EIGGnMDWLmIoeAb8LU240V_gqW4UEr7CgWQQe3AJYQdrDkNcqPNlobipZddP/s1600/Screen+Shot+2014-12-28+at+5.38.43+PM.png" height="320" width="320" /></a></div>
<br />
I played with it a little bit, and soon got to the point where I realized it might be faster to write a program to analyse the problem, so given that I am a lazy person, I wrote a python script to solve it. It's really pretty simple, you just start at the bottom and scan across the rows and columns in each row, placing blocks in each empty position.<br />
<br />
There are some easy optimizations you can do, like realizing there are only 12 possible block rotations you need to try because of assumptions you can make about positions you have already filled in, but the script still took anywhere from 5 minutes to 5 hours to generate a solution, even after doing some cute hacks to make it faster (like not using recursion, but keeping track of things with a state stack).<br />
<br />
Then I realized that if I limit the search to solutions that are reflectively symmetric, the search space becomes much smaller, because I'm only solving a puzzle with 27 blocks instead of 54. Solution time goes down to under a minute and the solution looks nicer.<br />
<br />
However, the output left a little to be desired...<br />
<br />
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">Level 1</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">+-------------+</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| P I N N N Q |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| L I M N H O |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| E I J K H H |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| E E G F H D |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| E A F F F D |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| A A A B C D |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">+-------------+</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">Level 2</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">+-------------+</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| P P M Z Q Q |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| L I M K X O |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| L J J K X O |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| V W G K X Y |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| T U G B C D |</span></div>
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">| R R R B C S |</span></div>
<br />
<div style="font-size: 10px;">
<span style="font-family: Courier New, Courier, monospace;">+-------------+</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> </span></div>
<div>
...and so on. So I got the idea of playing around with the <a href="https://www.processing.org/">Processing</a> language to see if I could visualize it better. The result was a little script that displays the cube in 3D, lets you rotate and zoom it, and animates the solutions.</div>
<div>
<br /></div>
<div>
Needless to say, it took me twice as long to write the Processing visualization script as it did to write the Python solvers, and it probably took me twice as long to write the solvers as it would have taken to just solve the puzzle by hand.</div>
<div>
<br /></div>
<div>
But then, as I said above, I'm lazy... :)</div>
<div>
<br /></div>
<div>
You can <a href="https://dl.dropboxusercontent.com/u/7492184/Apps/Block%20Puzzle.zip">find the scripts here</a> if you'd like to play with them. Processing is built on top of Java and quite fun to play with.</div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-88847779310498142812014-09-07T07:58:00.001-04:002014-09-07T07:58:31.432-04:00A Google Apps Sheet for STV ElectionsI've been using Google apps like Sheets in my Kickstarter project, but one thing Sheets doesn't do is complex surveys. While you can link a survey to a sheet, the survey question types are pretty basic, and in particular it does not let you do a ranked survey (in other words, "here are N options, pick any number of them that you like and place them in order of preference.")<br />
<br />
When I was on the EVE Online Council of Stellar Management, I became quite the election-systems nerd, because I was pushing hard for a reform of the election system. So just for fun, I decided to see if I could implement a Multiple-Choice Ballot in Google Apps.<br />
<br />
What I ended up was a sheet with a bunch of embedded scripts that lets you:<br />
<br />
<ul>
<li>Create a Multiple-Choice Ballot with optional additional questions (radios, dropdowns and fields) and voter validation.</li>
<li>Store the results in a sheet.</li>
<li>Export the results in the standard .blt ballot format used by many election systems.</li>
<li>And best of all, run the election using the Simple-STV and Wright-STV systems.</li>
</ul>
<div>
You can find the template sheet at <a href="http://stv.madoverlord.com/">http://stv.madoverlord.com/</a>. Just make a copy of it in your own Google Drive and start playing with it.</div>
<div>
<br /></div>
<div>
Enjoy!</div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-70719709629723671492014-02-05T16:48:00.001-05:002014-11-29T23:54:36.807-05:00Clever Combining CSV Files to Cure KickStarter ConundrumsI recently ran a successful KickStarter for a <a href="https://www.kickstarter.com/projects/madoverlord/bubblegum-crisis-ultimate-edition-blu-ray-set">Bubblegum Crisis Ultimate Edition</a> (you can still <a href="http://www.bgcue.com/">sign up here</a>), and in the aftermath ran into an annoying problem.<br />
<br />
KickStarter lets you run a Backer Survey after the project is funded, and that's how backers tell you things like their names, addresses and so on. A typical KickStarter will have many different "support levels" providing different benefits.<br />
<br />
Annoyingly, KickStarter forces you to design a survey format for each individual support level, with no way of cloning surveys. But what really got me steamed was the discovery that when you export the survey results, you get a CSV file for each survey, and the format of that CSV file depends on the items in each individual survey.<br />
<br />
That makes it a royal pain in the ass to import the data into your own database -- I mean, I had 38 CSV files, each with its own ordering of fields. Plus given that people take their time filling out the surveys (2 months later and they're still trickling in), I was going to be doing the import multiple times.<br />
<br />
To solve this, I wrote a quick little python script, combine-csv.py, that reads in an entire directory of CSV files, extracts all the unique field names from them, and then outputs a single file containing all the rows of data, with a column for each unique field. In cases where a row does not have an entry for a particular field, it gets a blank entry. Also, if a file contains multiple columns that have the same name, the data in them is combined into a single column, separated by the | delimiter.<br />
<br />
Added: optional count field name; if present, each unique line is emitted only once, with the last field being a count of the number of occurrences. If not present, the source file name is appended.<br />
<br />
You can find it here: <a href="https://dl.dropboxusercontent.com/u/7492184/Python/combine-csv.py.zip">combine-csv.py.zip</a><br />
<br />
You use it like this:<br />
<br />
python combine-csv.py [source directory] [destination csv file] {optional count field name}<br />
<br />
Enjoy!<br />
<br />
Update: I also whipped up a standalone AllCSV app that does the same thing; available for both <a href="https://dl.dropboxusercontent.com/u/7492184/Apps/AllCSV-Mac.zip">Mac</a> and <a href="https://dl.dropboxusercontent.com/u/7492184/Apps/AllCSV-Windows.zip">Windows</a>. It does not currently do the occurrence counting.MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com14tag:blogger.com,1999:blog-2726952721436808793.post-46811663300508568232013-09-03T17:12:00.001-04:002013-09-03T17:16:00.904-04:00Voronoi-tesselated Klein BottleOK, I admit I've caught the bug of messing around with Math objects and making pretty printable objects from them.<br />
<br />
This is my take on the Klein Bottle, inspired in large part by Dizingof's perforated bottle. Mine, however, uses the Voronoi tesselation to perforate the bottle. The various files are <a href="http://www.thingiverse.com/thing:145694">available on Thingiverse</a> if you'd like to mess with it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNAw-q7gpyaA9UzkRoiJWq4qD1rpZzCibs-YGf_pz2IMi79_ajLtp6ngz2erqIbPDlQzKOpujvgvKWpX66OQmphEsNRmrmv5SNGqULQtRMVl6exNZhlR728PePzuwqJZdAxSQUVH3fCoX/s1600/Screen+Shot+2013-09-03+at+5.09.16+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNAw-q7gpyaA9UzkRoiJWq4qD1rpZzCibs-YGf_pz2IMi79_ajLtp6ngz2erqIbPDlQzKOpujvgvKWpX66OQmphEsNRmrmv5SNGqULQtRMVl6exNZhlR728PePzuwqJZdAxSQUVH3fCoX/s400/Screen+Shot+2013-09-03+at+5.09.16+PM.png" width="395" /></a></div>
<br />
It was made by using ViaCad and MeshLab, as follows:<br />
<br />
* In Viacad, I created 3 surfaces: the bottle body, the neck, and a patch that covers the intersection of the bottle and the neck. The bottle and neck were exported as very fine meshes, the patch as a regular resolution mesh.<br />
<br />
* In MeshLab, I imported the bottle and the patch.<br />
<br />
* Filters > Color... > Disk Vertex Coloring to color the Bottle using the points in the patch, adjusting the parameter until the patch was fully colored.<br />
<br />
* Render > Color > None and then Filters > Selection > Select Faces by Color. Select RGB mode, set the sliders all to 1, turn on Preview, and then tune down the R value until you get everything selected but the patch area.<br />
<br />
* Filters > Selection > Invert Selection, then Filters > Selection > Delete Selected Faces and Vertices to make the hole. It will be a bit bigger than the patch, but this is what you want, it makes for a nice effect.<br />
<br />
* This is a good point to save your work. MeshLab gets crashy if you do too much, so make a lot of checkpoints. As a general rule, if something is crashing MeshLab -- or not giving proper results -- get things to the point just before the crash, save, then restart MeshLab and import the saved mesh.<br />
<br />
* Turn off display of the patch, then Import the Neck. If the neck has a different shade from the bottle, then Filters > Normals > Invert Faces... to change the normals.<br />
<br />
* Filters > Mesh > Flatten... to combine the two meshes.<br />
<br />
* One problem you may run into is that the Voronoi Tesselation seems to mess up at the join between the neck and the bottle. To avoid this, use Filters > Cleaning > Merge Close... and set a pct of 8-10 (Try 8, if it doesn't work, backtrack and try bigger numbers.<br />
<br />
* Save the results and then do the Voronoi tesselation. See my <a href="http://rjwoodhead.blogspot.com/2013/08/voronoi-tesselated-tetrahedron.html">Voronoi Tetrahedron</a> for the details on how to do that.MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-71675333981030706292013-08-26T08:22:00.002-04:002013-09-03T17:15:08.752-04:00Voronoi-tesselated Tetrahedron<span style="font-family: inherit;">I'm enjoying playing with mathematical objects and printing them. Yesterday I created a <a href="http://en.wikipedia.org/wiki/Voronoi_diagram">Voronoi-tesselated</a> tetrahedron. Halfway through the print I dropped some bells into the central cavity to make a baby-rattle. The object is now on <a href="http://www.thingiverse.com/thing:140277">Thingiverse</a> if you want to make one.</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrhGer6WRV98QXymKDctPiYLD49ytL-L8Xcs79Twg5IxPzoB7FwgLnUa84tQbnAt61spre2SJFD2fWPld6vU_AJBBiKB1RTZVYewtxiWDjezWXEDilD6Qk59wUMXdXMCMsQjUM4v0ysTNq/s1600/Screen+Shot+2013-08-26+at+8.19.08+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrhGer6WRV98QXymKDctPiYLD49ytL-L8Xcs79Twg5IxPzoB7FwgLnUa84tQbnAt61spre2SJFD2fWPld6vU_AJBBiKB1RTZVYewtxiWDjezWXEDilD6Qk59wUMXdXMCMsQjUM4v0ysTNq/s400/Screen+Shot+2013-08-26+at+8.19.08+AM.png" width="400" /></a></div>
<span style="color: #343638; font-family: inherit; line-height: 20px;"><br /></span>
<span style="color: #343638; font-family: inherit; line-height: 20px;">My starting point was a <a href="http://meshlabstuff.blogspot.com/2009/03/creating-voronoi-sphere.html">blog post showing how to do Voronoi Tesselations in Meshlab</a>. </span>However, Meshlab is a bit crashy, so I had to do some experimentation. Here is the general procedure I came up with -- hope it helps you create some nice objects.<br />
<br />
Launch Meshlab<br />
<br />
Make sure Selected Face Rendering is on.. It's the icon with red in it to the right of the light bulb icon.<br />
<br />
File > Import Mesh to import your nice fine WATERTIGHT mesh (otherwise, expect bad things to happen), or Filters > Create Mesh Layer > ... to start with a primitive (like the Tetrahedron)<br />
<br />
Before you go further, you need to make sure that your object is properly aligned to the XY plane. Click the Wireframe icon (next to the dots icon, then rotate the model (left-click drag it) until there are 3 points that you want to be on the base of your model located where you can drag a marquee over just those points, then click the Select Points icon (next to the Rabbit icon) and do just that. Then use Filters > Normals... > Transform: Rotate to fit on a plane, check both options and apply.<br />
<br />
If you don't have enough vertexes (100-300k is good), use Filters > Remeshing > Subdivision: Midpoint (for primitives) or Filters > Remeshing > Sudivision: Butterfly (for more complex objects) to add triangles. Always set Iterations to 1, you don't want to get too many triangles. Also Edge Threshold to 0.<br />
<br />
Click Layers icon (looks like a stack of paper) to show layers.<br />
<br />
Filters > Sampling > Poisson-disk Sampling. Number of Samples = 50 to 60. Click Apply, and a new layer will appear in the layers list.<br />
<br />
Click on your mesh object in the Layers list so that it is hilighted in yellow. After the sampling, it won't be.<br />
<br />
Filters > Color Creation > Voroni Vertex Coloring. Check BackDistance. Click Apply. Your object will get nicely colored with Voroni cells.<br />
<br />
Render > Color > None. The colors will disappear. You do this so that the next step is easier to see.<br />
<br />
Filters > Selection > Select Faces by Vertex Quality. Check Preview. Slide Max Quality all the way to the right. Slide Min Quality left until you get nice thin borders -- but not too thin. Click Apply.<br />
<br />
If the lines are not GREY, use Filters > Selection > Invert Selection. Click Apply. Lines will go grey, areas between them will be red.<br />
<br />
Filters > Selection > Delete selected Faces. Now you have a holed, but flat, object.<br />
<br />
Filters > Smoothing > Laplacian Smooth with Iterations = 3 to 5 will give you much smoother lines.<br />
<br />
This is good place to save a checkpoint. File > Export Mesh AS... NOT File > Export Mesh, which will copy over your old file!!! Save it as a .stl.<br />
<br />
Filters > Remeshing > Uniform Mesh Resampling. Precision 1%, Offset 53%, check Absolute Distance. Now wait a bit, and you'll get your thick version of the object. If Meshlab crashes, you probably had a bad initial mesh, it's quirky -- and you're screwed.<br />
<br />
In the Layers panel, click on the eyes next to your original object and your Poisson samples to turn them off. You'll only see your new offset mesh.<br />
<br />
Filters > Remeshing > Quadric Edge Collapse Decimation. Set the target to be .75 of the original number of vertexes. This smooths things out.<br />
<br />
Repeatedly apply Filters > Remeshing > Curvature Flipping Optimization until the object is not getting any better (it may settle down to toggling between two states).<br />
<br />
Now you want to increase the number of triangles and make them smooth. Alternate between these two:<br />
<br />
Filters > Remeshing > Subdivision: Butterfly, Iterations = 1, Edge Threshold = 0.<br />
<br />
then,<br />
<br />
Filters > Smoothing > Taubin Smooth<br />
<br />
When you get to the number of vertices you think you need, Export As... and save your STL.<br />
<br />
Oh, in the case of primitives, they will only be 1mm in size, so use Filters > Normals... > Transform: Scale to make them bigger before saving. The limit is 10x, so maybe do a 10x and a 2x = 20x.<br />
<div>
<br /></div>
<br />
<div style="background-color: white; color: #343638; line-height: 20px; margin-bottom: 10px;">
<div>
<br /></div>
</div>
MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-80113752181013871172013-04-19T07:10:00.000-04:002013-04-19T07:10:09.799-04:00Embossing of Text and Graphics for 3D printingSo I have a new toy, an <a href="http://www.ultimaker.com/" target="_blank">Ultimaker</a> 3D printer, and I'm climbing the learning curve of how to use the printer and related software.<br />
<br />
As some of you may know, I'm a 3-term member of the EVE Online <a href="http://community.eveonline.com/community/csm/" target="_blank">Council of Stellar Management</a>, and as it happens I'm about to go to Iceland for EVE's yearly FanFest. So I thought it would be an interesting project to make some embossed cards for my fellow CSM delegates.<br />
<br />
The task at hand is this: take this image, a bitmap...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9C_ZrIHL2bagJqtDDqFiZgaXjTnTycHsafXcFEyh7Do6nFVqJUcoBt8JxuILmZ-ivf3RZyTpQmLpW30XXX3J-1YT2_N57rjIQmzdaXbkZUsq2nXMXSf9ZYRMzIwSPnqxC9c1z-dLEIzvw/s1600/CSM+LOGO-Black.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9C_ZrIHL2bagJqtDDqFiZgaXjTnTycHsafXcFEyh7Do6nFVqJUcoBt8JxuILmZ-ivf3RZyTpQmLpW30XXX3J-1YT2_N57rjIQmzdaXbkZUsq2nXMXSf9ZYRMzIwSPnqxC9c1z-dLEIzvw/s400/CSM+LOGO-Black.png" width="400" /></a></div>
<br />
...and use it to create an embossed 3D model of the card itself. The CSM logo is a parody of the CCP Games logo, and shows the progression of a CSM delegate from blissfully elected (2-o'clock) to veteran interstellar policitian (center).<br />
<br />
Our first step is to change the bitmap into a vector representation. A little websearching found an excellent tool, <a href="http://image.online-convert.com/convert-to-svg">Online-Convert.com</a>, that will do just this. The result is a SVG vector version of the bitmap.<br />
<br />
Next, I have to import it into my 3D CAD program. I am using <a href="http://www.punchcad.com/p-9-viacad-2d3d-v8.aspx">ViaCAD 2D/3D</a> from <a href="http://www.punchcad.com/">PunchCad</a>. It's $99 but there is a free trial.<br />
<br />
Unfortunately, ViaCAD can't import SVG! But one of the formats it can import is Adobe Illustrator 8, and a <a href="http://www.adobe.com/cfusion/tdrc/index.cfm?product=illustrator&loc=en_us">free trial of Adobe Illustrator is available</a>. So converting is easy: Open the SVG in Illustrator, then Save As... an Illustrator .ai file, making sure to save it as an Illustrator 8 file. <i>ProTip: You can also use Illustrator to create some text, turn it into a path, and export it for embossing!</i><br />
<br />
Now for the fun part! I'm not going to go into a huge amount of tutorial detail about how ViaCAD works, I'm still learning it and I'm lazy. But here are the steps.<br />
<br />
ViaCAD has 2D and 3D modes. Get into 2D mode, and Import the Illustrator file. I found I had to uncheck all the Import Options in order to just get the raw curves and line segments. I needed to do this because the little stick-out-the-tongue face was too small to vectorize during the first step, so it came out as a circle -- by keeping everything separate, I was able to select and delete it. Also at this point, you want to measure your drawing and use the Scale tool to get it to the size you really want.<br />
<br />
Go into 3D mode, go into Isometric view (or rotate the viewpoint) and use the Extrude Solid tool to create an extruded object. With nothing selected, click on the tool, then click-drag a rectangle around the stuff you want to extrude, wait for it to select, click on one of the lines, and then wiggle the mouse until you see that it'll be extruding in Z. Click again, and what do you know...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-mjrJ4r67sxT9JGMkw9UTBwFsWdKwPt9WcJJJIK17KHPoSxgFVuM027FT5kDi3kVabTTNEFG17rqJHKaW1rj5lXEC3_9Qvb5pYmXYIWD78XkAd2IqVSP6qwcJ9cnQapuYXXa_7QiQAsCJ/s1600/Screen+Shot+2013-04-19+at+6.25.01+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-mjrJ4r67sxT9JGMkw9UTBwFsWdKwPt9WcJJJIK17KHPoSxgFVuM027FT5kDi3kVabTTNEFG17rqJHKaW1rj5lXEC3_9Qvb5pYmXYIWD78XkAd2IqVSP6qwcJ9cnQapuYXXa_7QiQAsCJ/s400/Screen+Shot+2013-04-19+at+6.25.01+AM.png" width="387" /></a></div>
<br />
Now back to 2D mode. The next step is to add the perimeter of the card, and also the small hole where a lanyard clip might attach.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JFd8300fe0eGuiby46GnKcO0AjR52mGKdtfK0AVTfi8cIZYpR2mYEuMlowN6pnhuSVpq53lawJGFx38QW_LlJvaXTHPDNFmGzGfWY_NPdAz8I6C8dbvzNOZQBZthjmnqjm5Qw3jufqJs/s1600/Screen+Shot+2013-04-19+at+6.32.17+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JFd8300fe0eGuiby46GnKcO0AjR52mGKdtfK0AVTfi8cIZYpR2mYEuMlowN6pnhuSVpq53lawJGFx38QW_LlJvaXTHPDNFmGzGfWY_NPdAz8I6C8dbvzNOZQBZthjmnqjm5Qw3jufqJs/s400/Screen+Shot+2013-04-19+at+6.32.17+AM.png" width="400" /></a></div>
<br />
Then we extrude them as well. The one thing to be careful about is to extrude the base plate only 1.5 mm -- the thickness of your card. The initial thickness is set by how far you move the mouse when selecting the axis of extrusion, but there's a modeless dialog you can use to set it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbmNx2sPV6_PEJNJ5FulQs1Hqz6pMSHeZfpuT-60AajlIIJX5u0YRPok_8FIGd369qAzegEAIZYzkE1ERggCqOgw8xn-G-H8qlU9hD_nc31nHoRkj_ht68B2_AI1F4RG34Hau48bgRklZL/s1600/Screen+Shot+2013-04-19+at+6.32.59+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbmNx2sPV6_PEJNJ5FulQs1Hqz6pMSHeZfpuT-60AajlIIJX5u0YRPok_8FIGd369qAzegEAIZYzkE1ERggCqOgw8xn-G-H8qlU9hD_nc31nHoRkj_ht68B2_AI1F4RG34Hau48bgRklZL/s400/Screen+Shot+2013-04-19+at+6.32.59+AM.png" width="400" /></a></div>
<br />
Next, we use the translate tool to move the logo and hole in Z. We move the logo up 0.05 mm so that the bottom of the logo is 2/3rds embedded in the card, and the lanyard hole down 1 mm so that it fully intersects.<br />
<br />
Finally, we use the Subtract Solid tool to subtract the two solids from the card, and we have our finished 3D model.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzFVsa7kltwdddsL1tku8Ndr_Fq_aC6EWClmDlZrmDgcW0bCxhEBjDbtXts4wH4g24pxUGFD7k8Rj-SZmDHNaUyG1gFNVQYCFcMlVx2MccS-V0gIWjFM0yUumHYtDpzfpL-qOFNE8HzIRM/s1600/Screen+Shot+2013-04-19+at+6.50.04+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzFVsa7kltwdddsL1tku8Ndr_Fq_aC6EWClmDlZrmDgcW0bCxhEBjDbtXts4wH4g24pxUGFD7k8Rj-SZmDHNaUyG1gFNVQYCFcMlVx2MccS-V0gIWjFM0yUumHYtDpzfpL-qOFNE8HzIRM/s400/Screen+Shot+2013-04-19+at+6.50.04+AM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now we can export a STL file and load it into our slicing software. In the Mesh Parameters dialog that appears after you select a file name, I checked STL Facets but I have no idea if that's needed.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I am using Cura to do my slicing for me. So far, the best results come from using a raft (to prevent warping), the thinnest possible wall thickness, and 100% fill density.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI-bisGzuZulNJnP_-uT7Clchqyc5o57Nz-3j_lQgZOtfMgwm1AislfqnjBx8bu6X20PVBDBsMzSVTEgyFcFu8iGkOs4yprVJBxwd5KRfCfZyRgrPUwpCSKxHEtkvpxS2kiugNmvVQsYxS/s1600/Screen+Shot+2013-04-19+at+6.59.10+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI-bisGzuZulNJnP_-uT7Clchqyc5o57Nz-3j_lQgZOtfMgwm1AislfqnjBx8bu6X20PVBDBsMzSVTEgyFcFu8iGkOs4yprVJBxwd5KRfCfZyRgrPUwpCSKxHEtkvpxS2kiugNmvVQsYxS/s400/Screen+Shot+2013-04-19+at+6.59.10+AM.png" width="400" /></a></div>
<br />
Here's the final result.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjKrtyLMTVvAuQJFPrWDaB0q40FxPCzHH_FLmlblH20FHBfZ_UJy57e1-jO_O3UFu27F5174jMy2MSkiuKcuARI5ZovOiKzTZ4FbuEefnUwkRr5bGGjBtYp5pSBF49-cZxorRRyvxokNuk/s1600/IMG_0436.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjKrtyLMTVvAuQJFPrWDaB0q40FxPCzHH_FLmlblH20FHBfZ_UJy57e1-jO_O3UFu27F5174jMy2MSkiuKcuARI5ZovOiKzTZ4FbuEefnUwkRr5bGGjBtYp5pSBF49-cZxorRRyvxokNuk/s400/IMG_0436.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="text-align: -webkit-auto;">My next task is to find some sort of infill material I can put into the emboss to give it a different color. There are many possibilities, <a href="http://www.passionatelyartistic.com/2009/03/monday-rendezvous-make-your-own.html">like this</a>.</span></div>
<br />MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-12548847699333157682012-12-19T20:36:00.000-05:002012-12-19T20:38:40.455-05:00Add a rear-view camera to a 2012-2013 Hyundai Elantra for $80 and a couple hours of laborWe recently bought a 2013 Hyundai Elantra as an extra car for She Who Must Be Obeyed, and in particular, for Sarcastic #2 Son to use to drive to school. My wife loves the rear-view camera in our <a href="http://ampeater.blogspot.com/" target="_blank">Chevy Volt</a> and wanted one in the Elantra, but the factory camera is only available in a particular option package we didn't need. The dealer told us that aftermarket installs cost $800 or so, which I felt was a bit excessive.<br />
<br />
So I did some research, and ended up at <a href="http://www.aliexpress.com/" target="_blank">AliExpress</a>, the consumer portal for the big Chinese B2B site Alibaba. What I found was quite interesting; if you're willing to do a little research, you can obtain and install your own camera system for about $80, and install it in about 2 hours.<br />
<br />
What you need are:<br />
<br />
<ul>
<li>A rear-view camera with wireless transmitter and receiver (otherwise you'll be stringing cable from your trunk to the front of the car). I found <a href="http://www.aliexpress.com/item/CCD-Night-vision-Wireless-Car-rear-view-Camera-For-HYUNDAI-ELANTRA-Parking-assistance-Car-backup-camera/660765360.html" target="_blank">this one for $40 that is specifically made for the 2012-2013 Elantra</a>. If you have a different car, you can find one that fits yours and adapt these instructions.</li>
<li>A small LCD panel you can mount in the front of the car. There are zillions of them; I picked <a href="http://www.aliexpress.com/item/4-3-4-3-inch-TFT-LCD-Sucker-fixed-Color-Car-Rearview-Monitor-for-Car-Reverse/530461817.html" target="_blank">this one for $35</a> because it would fit nicely into the dashboard in the pocket which contained the cigar lighter socket and also had a suction mount, in case I changed my mind.</li>
<li>A cigar lighter adapter plug that terminated in a standard jack. I happened to have one in my junk box. If you have one that doesn't have the right jack, you can just splice it directly into the LCD power connector. Make sure it's a basic one that isn't doing any voltage conversion!</li>
<li>A couple of <a href="http://www.lowes.com/pd_133105-12704-770320_0__?productId=3363042&Ntt=tap+splice&pl=1&currentURL=%3FNtt%3Dtap%2Bsplice&facetInfo=" target="_blank">tap splices</a> for grabbing power from the rear backup lights.</li>
<li>Two pair of wire connectors of some sort.</li>
</ul>
You will also need some basic tools:<br />
<br />
<ul>
<li>A Philipps screwdriver.</li>
<li>Wirecutters and strippers.</li>
<li>Pliers.</li>
<li>A soldering iron.</li>
<li>A multimeter.</li>
</ul>
Expect that the parts coming from China will take about 3 weeks to arrive. Did I mention postage is included? When they do come in the mail, check them to make sure they work, and then log on to AliExpress to confirm receipt (the seller does not get paid until you're happy).<br />
<br />
Here's my breadboard setup, using a 12v battery.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5LHdE6BxbFohIsCXN9GBbXODQ6deGVxE-yB4TViCpYZ1Y3pSEKnjvJ5epy5ACNeb1j-UWMHOi9i_OWY73vei5_7EVZ0MTi7ZGnY3LvzqTX5hzEFkLcs83TNOLt0djAnMx49v_cDZ_4WYX/s1600/IMG_0378.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5LHdE6BxbFohIsCXN9GBbXODQ6deGVxE-yB4TViCpYZ1Y3pSEKnjvJ5epy5ACNeb1j-UWMHOi9i_OWY73vei5_7EVZ0MTi7ZGnY3LvzqTX5hzEFkLcs83TNOLt0djAnMx49v_cDZ_4WYX/s400/IMG_0378.jpg" width="400" /></a></div>
<br />
The center nipple on the cigar adapter is positive (+), and the springy things on the side are negative (-). To assemble the LCD screen and video receiver, you cut one of the wires coming out of the plug, strip both ends, and test it to see if it connects to the center nipple. If so, you twist the two ends together again, along with the red power wire from the receiver. If not, you twist them together with the black wire. If you get it right, when you apply 12v of power to the cigar adapter, the green light on the receiver will light up. The LCD screen may brighten a bit, but it won't show a picture unless the transmitter is on and sending something.<br />
<br />
Solder the wires together and insulate them with tape, plug the cigar adapter plug into the red power plug of the LCD, and the receiver output into one of the video inputs (most of these LCDs have two inputs, it doesn't really matter which you use unless you also want to use the screen for other things).<br />
<br />
When you're all done, you'll have something that looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpooCs7gbZtQh68f-V_cB7OmaS0NqD88tOZtiUra8A-LYOxRTzqobG669sZ4t8EH4cm_aehCSoJ1qTynktUwn9VnuR5tZa2xeTN3Q8Z0yybQbCsOVGnv6yC-UuFgSnzia870yyjZ2fWS_e/s1600/IMG_0382.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpooCs7gbZtQh68f-V_cB7OmaS0NqD88tOZtiUra8A-LYOxRTzqobG669sZ4t8EH4cm_aehCSoJ1qTynktUwn9VnuR5tZa2xeTN3Q8Z0yybQbCsOVGnv6yC-UuFgSnzia870yyjZ2fWS_e/s400/IMG_0382.jpg" width="400" /></a></div>
<br />
Now out to the car. Pop open the trunk and take a look at the plastic bolts holding the top liner to the trunk lid. Unscrew them most of the way and then they pull right out. They consist of a central bolt and an outer flange. To replace them when you're all done, just unscrew them completely, squeeze the outer flange tabs a bit, insert it through the liner into the trunk lid, and push the bolt back in -- no screwing required!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-VknH3KrShrYDNv-YAV_gHfXjtzVrjz1v6wRZf9KyIpfob9UWGlyXohtbogg1cTzX0Eu2KhI_bIHfygW4jPfXqSsJ_5j7OEz1X2kWQiaG5SPTjTGlXpj-87gALwk8luG8VM1ODcrwDNNf/s1600/IMG_0384.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-VknH3KrShrYDNv-YAV_gHfXjtzVrjz1v6wRZf9KyIpfob9UWGlyXohtbogg1cTzX0Eu2KhI_bIHfygW4jPfXqSsJ_5j7OEz1X2kWQiaG5SPTjTGlXpj-87gALwk8luG8VM1ODcrwDNNf/s400/IMG_0384.jpg" width="400" /></a></div>
<br />
You'll have to twist around to see the square cover that hides the hole where the camera goes. Just squeeze the tabs one at a time and wiggle and it'll come out. Remember to save it in case you need to restore the car to factory condition (such as at the end of a lease).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZnJsXbp588kyp02aYSh9UTBp9w_TJVup0mWdT4bkKLZ04j6HVWkmrYSXOpNwydsImQVCuHserDvGxYvCm-zxVwYD3y31pWPn1WKyj-Zg0C-UrqEHsjhoXo9zjmgJnIqN4VQiXzLFIsYM/s1600/IMG_0389.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaZnJsXbp588kyp02aYSh9UTBp9w_TJVup0mWdT4bkKLZ04j6HVWkmrYSXOpNwydsImQVCuHserDvGxYvCm-zxVwYD3y31pWPn1WKyj-Zg0C-UrqEHsjhoXo9zjmgJnIqN4VQiXzLFIsYM/s400/IMG_0389.jpg" width="400" /></a></div>
<br />
Here you can see the hole from the outside. When the trunk is closed, the hole is parallel to the ground.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoxR7WQG22z4UENdDxY8Q_ktyKwkDIlyUkQP6uLUXGfVdsDcb5jJvqP45J7xQzQL0hlTMOJnH8scJ7V5ISDDymTzNbq1PJ1SrtPOki9iu3EKLIwXwRG2wsEj0D2a5YKdir4uGr5Qmfir-m/s1600/IMG_0390.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoxR7WQG22z4UENdDxY8Q_ktyKwkDIlyUkQP6uLUXGfVdsDcb5jJvqP45J7xQzQL0hlTMOJnH8scJ7V5ISDDymTzNbq1PJ1SrtPOki9iu3EKLIwXwRG2wsEj0D2a5YKdir4uGr5Qmfir-m/s400/IMG_0390.jpg" width="400" /></a></div>
<br />
The camera has two small tabs on one edge and a big spring-tab on the other edge. You just feed the wires through the hole and click the camera into place.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiibOocSRsuwEyCu6DArwctOk1KHCaQGSxFfInv9O2R2nePtJU9JH1cGXBG2TSUeGk59TtH5rYV8OTkbHWqOc8XXLlOlDIVI9UGsHq3n32ek76hOymjLHG22VtVvJaN5pnJCLhmMCZ0H4Pt/s1600/IMG_0394.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiibOocSRsuwEyCu6DArwctOk1KHCaQGSxFfInv9O2R2nePtJU9JH1cGXBG2TSUeGk59TtH5rYV8OTkbHWqOc8XXLlOlDIVI9UGsHq3n32ek76hOymjLHG22VtVvJaN5pnJCLhmMCZ0H4Pt/s400/IMG_0394.jpg" width="400" /></a></div>
<br />
Now for the slightly tricky part. Find the connector that powers the white backup and red brake lights. It has 3 wires, black, green and blue. Remove it by squeezing a tab and pulling it gently -- a small pair of pliers makes this much easier, because it's in an awkward position.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCQ4tfFHmtFwoXdkyDdljwXkPS7cxl3Pywu68IrmvdaYoZeMhX533_McBTFvpgMDlOMd5qi3jFb6EcOGbG2o9F3XYRxgmbDmXKHiojOg6LTubppkzmytZQgHP8pcBQ7YN5sqN2bMimp3eL/s1600/IMG_0402.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCQ4tfFHmtFwoXdkyDdljwXkPS7cxl3Pywu68IrmvdaYoZeMhX533_McBTFvpgMDlOMd5qi3jFb6EcOGbG2o9F3XYRxgmbDmXKHiojOg6LTubppkzmytZQgHP8pcBQ7YN5sqN2bMimp3eL/s400/IMG_0402.jpg" width="400" /></a></div>
<br />
Use your multimeter to figure out which wires feed the backup lights (not the brake lights!). These lights are on anytime the car is in reverse. On the Elantra, the blue wire is positive (+) and the black wire is negative (-). Check carefully; I got it wrong the first time, which is why I connected a red wire to the negative lead. Get a couple of short lengths of 14-gauge wire and use the tap splices to connect into the car's wires. Don't connect the transmitter power wires directly; they are too small and you may not get a good connection!<br />
<br />
To use a tap splice, your new wire goes in the completely closed hole in the splice, and the existing wire slots into the half-open slot, then you push down on the metal tab with pliers.<br />
<br />
Once you've done this, put connectors on the other ends of the wires, and also on the power wires coming from the transmitter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_lfkjuU7PW_rqwX5byAHH-GMhJkSi6bpYb3ac4o9Sa6nX1WoVkryd43MxPGsUv16Mck3uHf-d5ncOxS3CdjgqmG6X5Gm3IjmqCX_CsCjuwb8o4nYg2VJHvSoEUHnbjsCQ91Idrur2r85J/s1600/IMG_0403.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_lfkjuU7PW_rqwX5byAHH-GMhJkSi6bpYb3ac4o9Sa6nX1WoVkryd43MxPGsUv16Mck3uHf-d5ncOxS3CdjgqmG6X5Gm3IjmqCX_CsCjuwb8o4nYg2VJHvSoEUHnbjsCQ91Idrur2r85J/s400/IMG_0403.jpg" width="400" /></a></div>
<br />
<br />
Plug the transmitter into the camera (video and power), and connect it up to your new power wires. Then get someone to turn on the car and put it into reverse; you should see the power light on the transmitter come on.<br />
<br />
If at this point you get run over, either you're an idiot or someone doesn't like you very much.<br />
<br />
Now go and plug your receiver assembly into the cigar plug in the dashboard. If all is well, a second or two after you put the car into reverse, the LCD will light up and show you what's behind your car.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2I8_9ZOmsE3Q8GPpdXFyHK-oWShRxOvwbR4-nkjMwfb_knrMQmveCBkYHKgjfiYVMaexFjhbkT1A5G4oF-WVLghppbij56hwsoJIDKB6rshHA1YjVTrr12uJ97ZzACU2eiRU7NvOS8YH/s1600/IMG_0408.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2I8_9ZOmsE3Q8GPpdXFyHK-oWShRxOvwbR4-nkjMwfb_knrMQmveCBkYHKgjfiYVMaexFjhbkT1A5G4oF-WVLghppbij56hwsoJIDKB6rshHA1YjVTrr12uJ97ZzACU2eiRU7NvOS8YH/s400/IMG_0408.jpg" width="400" /></a></div>
<br />
Assuming all is OK, go back and thread all the wires in the trunk lid nicely, and use cable-ties to keep everything neat and in place. In particular, position the transmitter so that when the trunk is closed, the little antenna has good line-of-sight to the receiver in the front of the car. Conveniently, there are two small holes in just the right place to make this easy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIGdtsZiqxqyaqf0CrfMq8RCrw3DpbJMEE36ssbswZNrFBf9rYNdZmFj-mI8TiJWbj4yI8GH_Cu2TjOsdBHRFB8FlT9rLRUg6vcgo915rxn5vDzXQdnFaiG1z1D0ElDWKRhPzxCuoyMycS/s1600/IMG_0406.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIGdtsZiqxqyaqf0CrfMq8RCrw3DpbJMEE36ssbswZNrFBf9rYNdZmFj-mI8TiJWbj4yI8GH_Cu2TjOsdBHRFB8FlT9rLRUg6vcgo915rxn5vDzXQdnFaiG1z1D0ElDWKRhPzxCuoyMycS/s400/IMG_0406.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Oh, and don't forget to plug that connector back into the lamp assembly before you put the put the trunk cover back on! And to test it to make sure you haven't messed up the lights.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Then all that remains is to tidy up the cables in the front of the car. For now, I'm just tucking them behind the LCD screen, which just fits in the little compartment in front of the gearshift, but next year I plan to get a 3D printer and may fool around with making a custom mount.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfY3ZOFFaVY7oqM66OW12FcBnozpJ-TPQ7SvDeDU_MtrVKlI9HW8rnSJubROYuItKJWcjvSoiTiHTfLyb-vkaiVbWQOpLTkYCIbH2-Nj7CdmrOM46DB7LCL36gSdzPYfJLwumF7lNcSEB4/s1600/IMG_0412.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfY3ZOFFaVY7oqM66OW12FcBnozpJ-TPQ7SvDeDU_MtrVKlI9HW8rnSJubROYuItKJWcjvSoiTiHTfLyb-vkaiVbWQOpLTkYCIbH2-Nj7CdmrOM46DB7LCL36gSdzPYfJLwumF7lNcSEB4/s400/IMG_0412.jpg" width="400" /></a></div>
<br />
The only thing that isn't quite perfect about this setup is that the camera seems to be tilted a few degrees off the horizontal. I may be able to fix that by fiddling with it a bit, but for now it's perfectly acceptable.<br />
<br />
Hope this little tutorial helps a few people out!MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com21tag:blogger.com,1999:blog-2726952721436808793.post-18257260655094589432011-11-26T08:29:00.001-05:002011-11-26T08:35:13.941-05:00Experimental flight results!Here are two videos showing the results of the high-speed videography. My thanks to Michelle Peters and the rest of the Zero-G crew for their help in getting everything to work.<br />
<br />
I'll be posting videos of the basic physics experiments in a couple of weeks, lots of editing and graphics to add to them.<br />
<br />
First up, liquid deployment tests...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/-3ztFcZYGrk?feature=player_embedded' frameborder='0'></iframe></div>
<br />
And last but not least, the ever-popular Mentos in Space!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/Jsojv1hibhE?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-21713149983474013232011-11-14T18:25:00.001-05:002011-11-14T19:47:21.445-05:00Revised High Speed Liquid Observation PlatformWell, after several days, we have a new launch date - if all goes well, I'll be in Florida Nov 19-20 to fly on a Zero-G Experimental Flight. These differ from the regular tourist flights in that you get more parabolas (25) and can bring significant equipment onboard.<br />
<br />
I had originally planned a simple apparatus (see <a href="http://rjwoodhead.blogspot.com/2010/07/high-speed-liquid-observation-platform.html">this earlier entry</a>) but as preparations were made for the flight, it became clear than an enclosed experiment box would be much preferable. So I whipped up a simple setup using <a href="http://www.microrax.com/">MicroRax</a> miniature t-slot. Here's some build photos:<br />
<br />
First, here's the general concept. An enclosed box that mounts the Exlim EX-F1 camera and the macrophotography lighting rig.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOTY59x3IgH8STXdTnCRVgm2qQGiQizNt7_dYdX-CJDhzSXxEMJ197ZXCvGW7_cB-z13n-qFdPPX_l_g0gEfwzcBpoCSAL9MoAs_YzJEUeBnv5W_hBU4mwlTZaYMEuv-8K0VdNV2MKO0xw/s1600/CIMG2962.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOTY59x3IgH8STXdTnCRVgm2qQGiQizNt7_dYdX-CJDhzSXxEMJ197ZXCvGW7_cB-z13n-qFdPPX_l_g0gEfwzcBpoCSAL9MoAs_YzJEUeBnv5W_hBU4mwlTZaYMEuv-8K0VdNV2MKO0xw/s400/CIMG2962.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here are some closeups of the camera mount, a combination of Microrax connectors and old-fashioned bent metal.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcOMtD8Eq1fiy4r3mnGKZ3MUgiJEjMeLy-ZVT1Lo7UpF-hfFdAWpoLBTeUfEg0G6E3JPvRit-blW2klfxCBsnmS0VDgDeCEuqpI7YXGRg0M24JLhyphenhypheniDP2dqjo5KkMQkxMad9xHOHd9zSYN/s1600/IMG_0218.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcOMtD8Eq1fiy4r3mnGKZ3MUgiJEjMeLy-ZVT1Lo7UpF-hfFdAWpoLBTeUfEg0G6E3JPvRit-blW2klfxCBsnmS0VDgDeCEuqpI7YXGRg0M24JLhyphenhypheniDP2dqjo5KkMQkxMad9xHOHd9zSYN/s400/IMG_0218.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdp0HoqwT3lSxbXjhk_H4Ndid5cCtZmgZh_jIh3Di95HbX16z52Xa8-KjHtXv_y33JTvSkHBW1p9MNmFkNxlJOVPObuNUA3lG-aUCvOzGCv0hgdJuXdKt3vI7UyvvsdA2AVhrjFh9nuONl/s1600/IMG_0221.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdp0HoqwT3lSxbXjhk_H4Ndid5cCtZmgZh_jIh3Di95HbX16z52Xa8-KjHtXv_y33JTvSkHBW1p9MNmFkNxlJOVPObuNUA3lG-aUCvOzGCv0hgdJuXdKt3vI7UyvvsdA2AVhrjFh9nuONl/s400/IMG_0221.jpg" width="400" /></a></div>
<br />
The sides of the box are paneled using TwinWall plastic sheet. It's basically corrugated cardboard, but made out of plastic, and weighs almost nothing. You can find it at Lowes or Home Depot, it's typically found with the Lexan and Acrylic plastic sheets.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFX16Mhwf3SlD873AtihS9WxUVEQxIPM9tMnsI4j153EbvzB57l6rNCuG9F1yRhyphenhyphen8evFyEGl8Ch-xR2IamipXTfyPo7FYRFBHjMynpz8YoyjnrdgNBmMmGDdBXgxSD98CJhArdljjVTrm1/s1600/IMG_0225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFX16Mhwf3SlD873AtihS9WxUVEQxIPM9tMnsI4j153EbvzB57l6rNCuG9F1yRhyphenhyphen8evFyEGl8Ch-xR2IamipXTfyPo7FYRFBHjMynpz8YoyjnrdgNBmMmGDdBXgxSD98CJhArdljjVTrm1/s400/IMG_0225.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7POSNswREQL4YgzsHv__WwtXhBfLYtauIzLsCg_ax5uo90E4HuF6WPj1S6eGjKhS4guSrVRp3ez4myJc5NxeCT38JGiTaLDqjBqx7Pp9ubayCWQjaE5VIvHzcHMFsaNNOrE0doOFAoRV/s1600/IMG_0226.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7POSNswREQL4YgzsHv__WwtXhBfLYtauIzLsCg_ax5uo90E4HuF6WPj1S6eGjKhS4guSrVRp3ez4myJc5NxeCT38JGiTaLDqjBqx7Pp9ubayCWQjaE5VIvHzcHMFsaNNOrE0doOFAoRV/s400/IMG_0226.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv4OyCupVm-fShuiAK-w6RZgK_hYANO_YV3m5hZclrUUt7QMsJr_tBL73Ag_1kvdLCqUVDz38mcLV5kZ6xnJRBPgSWU5hsUS1AqtWyvix2uwtudFpQ0SOZYInBrxPGxOOdfQ-8kk4Iqn8U/s1600/IMG_0227.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv4OyCupVm-fShuiAK-w6RZgK_hYANO_YV3m5hZclrUUt7QMsJr_tBL73Ag_1kvdLCqUVDz38mcLV5kZ6xnJRBPgSWU5hsUS1AqtWyvix2uwtudFpQ0SOZYInBrxPGxOOdfQ-8kk4Iqn8U/s400/IMG_0227.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
When in use, the open parts of the device are sealed with a glove bag. This attaches to the perimeter of the device with velcro strips, and has built in plastic gloves. You can find these at Lab Supply outlets. I also test-fit some pipe insulation around exposed MicroRax channel to provide a better grip.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXR_0X8VO26eEVwqD5GbNHIQ-eP1m1GMEpXAi-XEjZrGNgq0j9xwKVO90NxxQiLUwoolEy9wPof-4p9-dcDw8soe_YTPkV9sVLsnZBLzSaANqfncCbgnVXbJTAWkBduZj8Cp7QH2hNuBsD/s1600/IMG_0230.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXR_0X8VO26eEVwqD5GbNHIQ-eP1m1GMEpXAi-XEjZrGNgq0j9xwKVO90NxxQiLUwoolEy9wPof-4p9-dcDw8soe_YTPkV9sVLsnZBLzSaANqfncCbgnVXbJTAWkBduZj8Cp7QH2hNuBsD/s400/IMG_0230.jpg" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here you can see the entire device in action. I am holding it with my hand in one of the gloves.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLwkan27iSXhPIX87wzgwe7tpXRITOPsWiGMnADEqmX8-bms3K_VyefP3ZqhC5P3XZVzWA9oIpXHbylCKIjlqlU7Z66WVHBmSCycIKl96sS5ySivuE2tRmRG0C55nTeUQJi4OMwpC7SXr4/s1600/IMG_0231.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLwkan27iSXhPIX87wzgwe7tpXRITOPsWiGMnADEqmX8-bms3K_VyefP3ZqhC5P3XZVzWA9oIpXHbylCKIjlqlU7Z66WVHBmSCycIKl96sS5ySivuE2tRmRG0C55nTeUQJi4OMwpC7SXr4/s400/IMG_0231.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Various liquid deployment devices are attached to the inside with (you guessed it) Velcro. They are all out of the field of view of the camera.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNXXZVGSR_64TdgAiRVqrVxahPR2QghB_1Bf83SwgyPyfAcKZX4U_pWxfoQV4ECvlj4P_JXNskF_WWle0_ZWeUYYZDbljOo5BqOXURIGQMdalMNz7YzrPW-vHUOTipVt9_0HrI4NPfkUlt/s1600/IMG_0232.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNXXZVGSR_64TdgAiRVqrVxahPR2QghB_1Bf83SwgyPyfAcKZX4U_pWxfoQV4ECvlj4P_JXNskF_WWle0_ZWeUYYZDbljOo5BqOXURIGQMdalMNz7YzrPW-vHUOTipVt9_0HrI4NPfkUlt/s400/IMG_0232.jpg" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The main devices are <a href="http://www.stevespanglerscience.com/product/test-tubes">Baby Soda Bottles</a> from <a href="http://www.stevespanglerscience.com/">Steve Spangler Science</a>. These are 2-liter soda bottle preforms, and are practically unbreakable. Each has a rubber stopper on the top that is secured to the bottle with a pipe-cleaner; they can be opened and closed with one hand. Each tube has a hole drilled in the bottom and a vinyl tube inserted into it; air entering the tube will eject the water from the bottle (I hope!)</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZsynyCvb-g3ZE1M2hhRAm2VNX3d2M7DYxW7HLbdefvl1GqbuHLv_7ogtf8Gc9V_BZm4Bm2usIv33eYksIvEcpBUDsaQO0eQLjIa-OB0bK-1NU3DYebKft8Ad_oCpVgHri6TfmYXTrQAQl/s1600/IMG_0233.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZsynyCvb-g3ZE1M2hhRAm2VNX3d2M7DYxW7HLbdefvl1GqbuHLv_7ogtf8Gc9V_BZm4Bm2usIv33eYksIvEcpBUDsaQO0eQLjIa-OB0bK-1NU3DYebKft8Ad_oCpVgHri6TfmYXTrQAQl/s400/IMG_0233.jpg" width="300" /></a></div>
<br />
At the top of the device is a plenum that connects to all 5 test-tubes, with an input tube that I will hold in my mouth. When I puff, air will flow into any uncapped test-tubes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN62qsyOjNephLWtxUz-E74nKFEUSuk4XgxUw7AYVo-KyZhcc-vazQXPYaqJjotNvdeWwwO_wcQDzcuypAXJbQdXNm-1hVuGXMUw55qU8SP1Vu3Af7FAW5Jma3BPXhrGg4OKRTcWpeU7rh/s1600/IMG_0234.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN62qsyOjNephLWtxUz-E74nKFEUSuk4XgxUw7AYVo-KyZhcc-vazQXPYaqJjotNvdeWwwO_wcQDzcuypAXJbQdXNm-1hVuGXMUw55qU8SP1Vu3Af7FAW5Jma3BPXhrGg4OKRTcWpeU7rh/s400/IMG_0234.jpg" width="300" /></a></div>
<br />
Also in the device are several other devices. I have two alternate water deployment devices, a foam cube (5 sides covered in duct tape) and a squeeze bottle filled with foam discs. I also have an agitator made from a <a href="http://www.tamiya.com/english/products/70178motor_mini/index.htm">Tamiya Submarine Mini Motor</a> onto which I hacked an extended shaft. This will let me insert it into a water sphere and set up fluid flow. I will also (I hope!) be able to use it to insert a Mento into a sphere of Diet Tonic Water.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiodeDK1C7lwXMCSP4y3K1bvNJmVIAwJKsZiStG6OYKi8XFHEhwqT32MYcofBsD6YAqw6ew3wLtC7BQ_jC9sMwMSCx8NeiT6yVzjl1fdn-o2VPmrHQ0Y0RzASTDyU4oB1_jXAZBxxVy_cbN/s1600/IMG_0235.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiodeDK1C7lwXMCSP4y3K1bvNJmVIAwJKsZiStG6OYKi8XFHEhwqT32MYcofBsD6YAqw6ew3wLtC7BQ_jC9sMwMSCx8NeiT6yVzjl1fdn-o2VPmrHQ0Y0RzASTDyU4oB1_jXAZBxxVy_cbN/s400/IMG_0235.jpg" width="400" /></a></div>
<br />
I still have a few tweaks to do to the device, but it's about 95% complete.<br />
<br />
In addition to the high speed video, I am hoping to do several experiments that will form the basis for a set of educational videos for kids. My current list of experiments is:<br />
<br />
<ul>
<li>Would a grandfather clock work on the Moon or Mars? (Pendulums)</li>
<li>Can you sleep a YoYo on the Moon or in Outer Space?</li>
<li>Can you slink a Slinky in Zero G?</li>
<li>Would the famous <a href="http://www.technovelgy.com/ct/content.asp?Bnum=1368">Pan Am Grip Shoes</a> from <a href="http://en.wikipedia.org/wiki/2001:_A_Space_Odyssey_(film)">2001: A Space Odyssey</a> actually work? I don't think so, but I think I know how they could be made to work. So I've made some Mad Overlord Grip Socks and I'm going to give it a try!</li>
</ul>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-66547430244256674522010-09-25T18:34:00.004-04:002010-09-28T10:22:29.880-04:00Just a little Mad Kitchen Electrochemistry...Recently, I ran across an interesting Instructable on <a href="http://www.instructables.com/id/Anodizing-Titanium-Rings/">Anodizing Titanium</a>. Now, as anyone who has read my website knows, I build combat robots, so I have Ti (or as robot builders call it, "the other white meat") coming out the wazoo. So I thought it would be interesting to try and see how it worked.<br /><div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQijUfeoGJ8b6vC3gPjc-J-AKKDlQDalwodYK8E2SHez4EfSfAjdyK1Oh4lTwu33oy7WwuJWqYPHMVPBiTp9is5Kj9NDzqqzj6q22Lp59jwa-tKXzdnhUkHnvmqcqQ8IT0o0Y7N1aF_io/s1600/CIMG2762.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQijUfeoGJ8b6vC3gPjc-J-AKKDlQDalwodYK8E2SHez4EfSfAjdyK1Oh4lTwu33oy7WwuJWqYPHMVPBiTp9is5Kj9NDzqqzj6q22Lp59jwa-tKXzdnhUkHnvmqcqQ8IT0o0Y7N1aF_io/s400/CIMG2762.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The setup is pretty simple. You have a tub filled with an electrolyte solution (I tried 5% White Vinegar, and a saturated solution of baking soda in warm water -- the baking soda works much faster and gives better results IMHO). You then hack together a couple of 9V battery clips so one of them has the black (negative) end connected to a clip, and the other has the red (positive) end connected to another clip.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In my setup, the negative size of the circuit is connected to a large metal plate (it can be any conductive metal; steel, aluminum or even titanium) wrapped in a couple of layers of paper towel. The electrolyte can soak through this, but it prevents a short circuit.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzwGUnoe7oyTmE8ZcWlznHVM3_36GGSSPjcZD3T-xxF12O3DOOkmfGbtVb5sDf8R8WrHch_klh3CJgstuDIfsIZls67LDcWr9pwKK5KD56UX5sVSbsYQTqnVkVj7yP_friwosp5j_tFnj/s1600/CIMG2767.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzwGUnoe7oyTmE8ZcWlznHVM3_36GGSSPjcZD3T-xxF12O3DOOkmfGbtVb5sDf8R8WrHch_klh3CJgstuDIfsIZls67LDcWr9pwKK5KD56UX5sVSbsYQTqnVkVj7yP_friwosp5j_tFnj/s400/CIMG2767.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">You then connect any number of 9V batteries together in a zigzag manner, and connect the two clips to the exposed ends. This gives you a source of 9V, 18V, 27V and so on. Use rubber gloves and care, because the voltages can get up there!</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEknhdq6zAOheoE9Lx1cOkHuidBgekCNpQG2xOxmA_xpEz0IFXsSUGEiZOaVr_hFNMWkrMkPSTvMl1l8cLmDeOb4mG7s9NRshv_jMRZdavd8CCFC4MTrdrPRdU0nUtttejBoO6PYdxfpWu/s1600/CIMG2768.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEknhdq6zAOheoE9Lx1cOkHuidBgekCNpQG2xOxmA_xpEz0IFXsSUGEiZOaVr_hFNMWkrMkPSTvMl1l8cLmDeOb4mG7s9NRshv_jMRZdavd8CCFC4MTrdrPRdU0nUtttejBoO6PYdxfpWu/s400/CIMG2768.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">You then connect the red (positive) side to the item you want to anodize, drop it into the electrolyte, and wait. Bubbles will form; what is happening is that the current is breaking the water up into hydrogen and oxygen, and the oxygen travels to the positive side of the circuit and builds up an oxide layer on the titanium. The more voltage, the deeper the oxide layer gets, and different depths = different colors.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSclylzk-XRqnoq6i4xgx1l_bF6FP4stY9aLV2er5SZA2qqBwrh_0a0BYNkugm_BwWVeVXbrXs-rIfS5sbennKzO_D7ZGUwFzxPRWs7h5rJEeCm0aLHMKJcGpJZPDOiZnsDq6xNVeg3wGw/s1600/CIMG2769.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSclylzk-XRqnoq6i4xgx1l_bF6FP4stY9aLV2er5SZA2qqBwrh_0a0BYNkugm_BwWVeVXbrXs-rIfS5sbennKzO_D7ZGUwFzxPRWs7h5rJEeCm0aLHMKJcGpJZPDOiZnsDq6xNVeg3wGw/s400/CIMG2769.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here are some color results I got; the top row is vinegar, and the bottom row is baking soda. Baking soda is much more conductive, so you get results much more quickly (and the batteries will get warm). I also think it gives a better finished result. Even though I did my tests for 2 minutes with vinegar and one minute with baking soda, you need much less time to get to the point where the color is no longer changing.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-UcPtKNCLU4ZA9vJtSTtYwba4HXZmsfl3QGVTWH4UjTL6V5kYjoTrVJcOCQoqIO1no-7HyUKHd45cmAeUBsQPXIQY1mwVKpt6MwXxDYi7-wcQwSNTqiYupRZgcxFurTcHTTULp-a2kLtY/s1600/CIMG2770.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-UcPtKNCLU4ZA9vJtSTtYwba4HXZmsfl3QGVTWH4UjTL6V5kYjoTrVJcOCQoqIO1no-7HyUKHd45cmAeUBsQPXIQY1mwVKpt6MwXxDYi7-wcQwSNTqiYupRZgcxFurTcHTTULp-a2kLtY/s400/CIMG2770.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">As it happens I had some <a href="http://www.amazon.com/MY-Ti-Folding-Spork-by-Brunton/dp/B001DBHDNW/">Brunton MY-TI folding sporks</a> lying around. The bowl is made of titanium, and the wire handle is steel. So I decided to see what would happen...</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAcJz46R6aqZO0HPQhgmuZhVkruVp9GeIFnR58lLIpYVIOA1sGD98ske7p6eVgLWYeSv_PUCf8cdj9KZebhWgAE8qEmwuBI7s5gfQsKoD8uu8lRuSN9-IOUHQyd4mPhdAXYpf9wUXUIach/s1600/CIMG2771.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAcJz46R6aqZO0HPQhgmuZhVkruVp9GeIFnR58lLIpYVIOA1sGD98ske7p6eVgLWYeSv_PUCf8cdj9KZebhWgAE8qEmwuBI7s5gfQsKoD8uu8lRuSN9-IOUHQyd4mPhdAXYpf9wUXUIach/s400/CIMG2771.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The leftmost spork is untreated, the center one is the result of using 2 9V batteries (slightly used, so about 16v), and the rightmost one required 4 9V batteries (also slightly used, about 34v). Interestingly enough, the titanium stem with the Brunton logo on it has a surface treatment that greatly slows the anodizing process; you can just barely see a hint of color in the purple spork.</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">All in all, I think a tastefully anodized titanium spork is "an elegant utensil, for a more civilized age" -- and if you sharpen the tines, it's also a weapon!</div><br /></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com3tag:blogger.com,1999:blog-2726952721436808793.post-55175376748085610052010-07-22T19:52:00.005-04:002010-07-22T21:53:09.253-04:00High Speed Liquid Observation Platform - Fluid Deployment BusAs part of my preparations for the September Zero-G flight, I started thinking about improvements to the High Speed Liquid Observation Platform (see 2 posts prior to this one for details on how it works. In particular, I became concerned about the problems of quickly deploying the water globes during the microgravity cycles.<div><br /></div><div>My problem is this: each phase of the flight consists of 5 cycles of microgravity followed by double-gravity. Each half-cycle is about 20 seconds long, so I have 20 seconds to deploy, film, and recover water globes, followed by 20 seconds flat on my back in 2G to reset for the next cycle.</div><div><br /></div><div>This presents a significant problem, since the reset involves stowing the deployment devices used in the previous cycle, and prepping the new devices (including unsealing them so the water can be released). Not only that, during microgravity, I have to be able to position myself, control the camera, and deploy up to 2 water globes (so I can hopefully collide them).</div><div><br /></div><div>Yikes. That's a lot of logistics, and since one hand has to control the camera rig, I only have 1 hand and 2 legs remaining with which to do all this.</div><div><br /></div><div>After a lot of thought, here's what I came up with:</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy_OgAbAkonYX6O5dQ4Mh0ZSSuMXIisKQmq-1DFeZF5po27-g1jEWdDKOy70HalWzq9Vl42xZ_1elJdud8wee4irx7bIdo7Rymtw_pspYaTKnLIkMULKunWWRHZqcJ2u3BSxOdQb9_zYkL/s400/CIMG2750.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy_OgAbAkonYX6O5dQ4Mh0ZSSuMXIisKQmq-1DFeZF5po27-g1jEWdDKOy70HalWzq9Vl42xZ_1elJdud8wee4irx7bIdo7Rymtw_pspYaTKnLIkMULKunWWRHZqcJ2u3BSxOdQb9_zYkL/s400/CIMG2750.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5496884067288441170" /></a><br /></div><div>The steel ring is where the diaper-lined plastic bag that collects the water globes will go, and the <a href="http://www.stevespanglerscience.com/product/1389">baby soda bottles</a> are the deployment devices.<br /><div style="text-align: center;"><br /></div><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFO-4DR3FqAAimCv3KecNsokLbS-1x842XpUM6LB1HPZM12WYJcDtHOzt8soPolnrAPVVkb5U3hkbqjHJJcYFLjjH7VeHBffu0eyYaEFQ6cDFlc-obXbjbEAlED24mvB0zATYeNeFacHMt/s400/CIMG2753.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5496884084068006114" /></div><div><div style="text-align: left;">Each BSB (these are 2-liter soda bottle preforms, damn near unbreakable) has a rubber stopper in it that has a tube running through it. The tube runs down to the bottom of the tube. The way it works is simple -- you uncork the BSB, and stick the tube that extends past the stopper into your mouth. Gentle puffs then push the water out of the tube.</div><div style="text-align: left;"><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEWQuR-awpuYii2ZyMBHbud3vFegroMaJKCxkFcpdbyaAc1Yx9zPsCunAjpX_2qDe_BnsSmbPIYrBwB8XfyxD6arIjtlqzsKEELCOfwen7VQmhPsVcaRKBpBM1dJXs9J0eAImJzfjZsD40/s400/CIMG2754.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEWQuR-awpuYii2ZyMBHbud3vFegroMaJKCxkFcpdbyaAc1Yx9zPsCunAjpX_2qDe_BnsSmbPIYrBwB8XfyxD6arIjtlqzsKEELCOfwen7VQmhPsVcaRKBpBM1dJXs9J0eAImJzfjZsD40/s400/CIMG2754.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5496884093388825538" /></a></div><div>The tubes are angled and positioned so that a water globe, after being deployed, should float on a path that takes it right through the camera's field of view at the proper distance. And if all goes well, two simultaneously deployed globes should hit each other at just the right place.</div><div><br /></div><div>During the 2G period, reset involves either restoppering the tube or tucking it through a loop to keep it from floating loose, then unstoppering 1 or 2 bottles and putting the tubes in my mouth. I have timed this process and my first attempt took only 12 seconds.</div><div><br /></div><div>Of course, I have no guarantee that this deployment method will actually work, so I'll have other methods available just in case. And I also need to think about how to keep myself stabilized and still be able to easily position myself in order to track the wandering globes of water.</div><div><br /></div><div>But that is the subject of another post.<br /><div><br /></div><div><br /></div></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-48005886466941702532010-05-30T05:46:00.002-04:002010-05-30T05:58:15.925-04:00T-4 Months and CountingIt's been a long time since I've had anything to report on the blog, but the wait is over.<div><br /></div><div>As readers will know, I have a standby ticket-to-ride on G-Force One. Well, I got a email from ZeroG the other day offering me a slot on one of their upcoming Research flights. These are special flights with fewer people on board, and<a href="http://www.gozerog.com/index.cfm?fuseaction=Research_Programs.welcome"> the ability to deploy significant experimental apparatus.</a> They also do more parabolas than a standard flight (25 vs. 15).</div><div><br /></div><div>This means I'm going to be able to do more interesting stuff than on a regular flight. The hard part is going to be figuring out how best to use the time.</div><div><br /></div><div>Which is where you come in.</div><div><br /></div><div>I talked to the ZeroG folks and they have agreed that I can invite people to build experiments, and if they pass muster with ZeroG, I will fly them for you and film the results. I am particularly looking for projects that involve science outreach to young folks, so this would be perfect for an engineering summer camp project.</div><div><br /></div><div>If you are interested, please email me (trebor@animeigo.com) -- and pass this on to anyone you think might be interested.</div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-16916353634695440832009-05-09T21:03:00.003-04:002009-05-09T21:28:36.187-04:00The High Speed Liquid Observation Platform - V2.0<div>As you know from the previous posting, I solved the problem of getting enough light to do high speed videography using a new LED light ring that just became available.</div><div><br /></div><div>It then occurred to me that this new lighting form-factor would allow me to radically simplify the experimental platform I had previously built. In the previous design, I used a rectangular cage because I was expecting to have to mount linear light strips to the device. However, the light ring mounts directly to the camera itself, which means that the platform now only has to perform two functions:</div><div><br /></div><div>1) Allow me to easily point the camera at what I want to record.</div><div><br /></div><div>2) Collect the water globes at the end of each Zero-G cycle.</div><div><br /></div><div>This permits a much more elegant design, as follows:</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihnXyi6x6fXFH7t8snITr3BbESARtCnsPY0uOeIzGd5ZJi-Dn_9rTgOXhyphenhyphen9H-r255wZnRArF8uhI-M-HJFYYIKrhM5LGlM17bO5ds32sOsezKlzSkwwJkIDXAa0ZLEogUmGw0zK23P0Yay/s1600-h/IMG_1069.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihnXyi6x6fXFH7t8snITr3BbESARtCnsPY0uOeIzGd5ZJi-Dn_9rTgOXhyphenhyphen9H-r255wZnRArF8uhI-M-HJFYYIKrhM5LGlM17bO5ds32sOsezKlzSkwwJkIDXAa0ZLEogUmGw0zK23P0Yay/s400/IMG_1069.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5333995473590807426" /></a>Basically, the new device is a pistol-grip for the camera, with an extension that holds an open Zip-Lock bag (optionally with a diaper in the bottom to absorb water). The grip is made out of two short sections of aluminum t-slot, and the ring that holds the bag is made out of thin, flexible UHMW plastic, with some velcro to hold the bag in place. Everything is wrapped in adhesive-backed foam.<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmY3byNW-qDjbvO2rUpLFOgDlfA4yB1OslZ9cvS2nv03g11CsDsPdZlHudC0MwBflg4BuoP5yvlkuCGmyL3YeOFxu9f1a4Fr52KYoKXVyN_Ove2-kS2ktYzotygSkLXsHCSir-cvk3DNX0/s1600-h/IMG_1070.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmY3byNW-qDjbvO2rUpLFOgDlfA4yB1OslZ9cvS2nv03g11CsDsPdZlHudC0MwBflg4BuoP5yvlkuCGmyL3YeOFxu9f1a4Fr52KYoKXVyN_Ove2-kS2ktYzotygSkLXsHCSir-cvk3DNX0/s400/IMG_1070.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5333995483438357026" /></a></div><div>Another nice touch in this design is that the far edge of the collection bag ring is a visual reference that can be used to keep the camera the correct distance away from the water globes; all I have to do is prefocus the camera to the correct distance and everything will work out just fine.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oyYME-s9wHDxyXGrsHTSVnEan3v5c2TigBfkPzZaVgsL7nC1VB3a_1XhySwz-538IcUbp_Vo4blziAbjJx3fiiRXOWgM9gOSSrnmZIpzvfVBuHXnSvszAkNPjbaMCLXMKZWDBX_Gkprr/s1600-h/IMG_1071.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oyYME-s9wHDxyXGrsHTSVnEan3v5c2TigBfkPzZaVgsL7nC1VB3a_1XhySwz-538IcUbp_Vo4blziAbjJx3fiiRXOWgM9gOSSrnmZIpzvfVBuHXnSvszAkNPjbaMCLXMKZWDBX_Gkprr/s400/IMG_1071.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5333995485376617442" /></a>It isn't easy to see but the camera is actually mounted slightly to the rear of the pistol grip, which improves the balance a bit.<br /></div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3d-38ABujkEK8W0N_YfyEW7DYp7G-Q2-lma0cOBUitZHt2Jdl1R8VnTeS0B0MnyGGEi3LncvVejTlX6rVHct4_MRwMV4Od8cmbEjouOB8yf6C3I9R4JZ4qlFypye2BlOkIphslCwXMHf6/s1600-h/IMG_1074.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3d-38ABujkEK8W0N_YfyEW7DYp7G-Q2-lma0cOBUitZHt2Jdl1R8VnTeS0B0MnyGGEi3LncvVejTlX6rVHct4_MRwMV4Od8cmbEjouOB8yf6C3I9R4JZ4qlFypye2BlOkIphslCwXMHf6/s400/IMG_1074.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5333995491711170738" /></a></div><div>One thing I'd really like to do is get a prototype of the <a href="http://www.tuvie.com/on-orbit-coffee-cup-design-to-use-in-spacecraft">Zero-G Coffee Cup</a> and test it out. But first I have to get one, and then I have to bamboozle the Zero-G folks into letting me try it. Hey Starbucks, can I get a grant for Zero-G Latte Research?</div><div><br /></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com2tag:blogger.com,1999:blog-2726952721436808793.post-12123516296431747672009-04-10T20:20:00.002-04:002009-04-10T20:22:30.153-04:00Nerds in Space!I finally got around to cutting together a little music video from the footage of our first ZeroG flight. If you go to the Vimeo site you can see it in HD. Enjoy!<br /><br /><object width="400" height="300"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4097805&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=4097805&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-36077949885140424652009-03-17T11:23:00.004-04:002009-03-17T11:34:25.937-04:00Let there be light!It has been a while since my last posting, but I have been busy researching lighting sources for my next Zero-G flight. You will recall that my concern was that I could not get sufficient light inside the cabin to get good video except when next to a window, and I was looking to either buy or build something to deal with that problem.<div><br /></div><div>As luck would have it, a posting on <a href="http://www.gizmodo.com/">Gizmodo</a> lead me to a new product, the <a href="http://www.srelectronics.com/fr6400.html">Digi-Slave Flex Ring 6400 LED Macrophotography Light</a>. After some consultation with the manufacturer, I purchased one for testing.</div><div><br /></div><div>To my great surprise and pleasure, this little beast pumps out enough light to permit videography not just at 300 fps, but also 600 and 1200 as well! Check out the video below, the shots were taken in a totally dark room, lit only by the Digi-Slave.</div><div><br /></div><div>The trick to getting the maximum light out of this device is to use rechargeable Nickle-Metal-Hydride (NiMH) AA batteries. While these do not provide as much voltage as regular AA cells (1.2 vs. 1.5v), they have lower internal resistance and can provide higher current flows than even "high-discharge" Lithium batteries. Enjoy!</div><div><br /></div><div><br /></div><div style="text-align: center;"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/QpFhIF7APgs&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/QpFhIF7APgs&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-55039799586579260982008-11-20T17:01:00.005-05:002008-11-21T06:23:38.044-05:00Back to Basics<div>After the abysmal failure of my carbonated soda tests, I went back to the drawing board and rethought the whole concept. I finally realized that I'd been a bit too ambitious, and needed to get back to basics.</div><div><br /></div><div>Since plain old bottled water is already deployed in the cabin during ZeroG flights, I decided to build an experimental platform that would permit me to get good video (both regular and high-speed) of water spheres. I needed something that would let me get good images of fairly large blobs of water that were floating freely in the cabin, and also let me collect the water at the end of the free-fall segment. Here's what I came up with...</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMdug7wVMF_dlHFTpeqKmcZpRDfmy_obQoAwFgKTPaH-PrmGP_lKY9to1pJgqmdz6xt1qK-LhpQQMUcqUb3sd3lp2DC9YnfLDcXKMVCJ8RYFFHCfQ7SrUxc1e5HD0vSkPiHZNVReVWfpBK/s1600-h/CIMG1080.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMdug7wVMF_dlHFTpeqKmcZpRDfmy_obQoAwFgKTPaH-PrmGP_lKY9to1pJgqmdz6xt1qK-LhpQQMUcqUb3sd3lp2DC9YnfLDcXKMVCJ8RYFFHCfQ7SrUxc1e5HD0vSkPiHZNVReVWfpBK/s400/CIMG1080.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5270863607113988690" /></a>The vertical frame mounts the camera and operator handles, and will also contain a set of high-intensity <a href="http://www.ledsupply.com/06007.php">LuxStrip LED light bars</a> to provide the light needed for the high-speed camera. The horizontal frame is the liquid-collection device, which is constructed out of plastic sheeting, the remains of 5 disposable diapers, and, of course, duct tape.<div><br /></div><div>Everything is constructed out of T-slot extrusions and connectors from <a href="http://www.amazingrobotics.com/index.php">Amazing Robotics</a> plus a few bits that I hacked together in my workshop.</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9AW1aTdobT1mltpAdMzbqgLdBsUqEvCqwB2rmcLa1ldXNmyfupWdR8VK4ebXpDCNrzGunYy9Q35-8o2fjsj5frdPwKbVPp6gWL4fIhHpnbc3EklnJJsjS9pD6yLWYIYpGRMq-sboM8Qdw/s1600-h/CIMG1081.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9AW1aTdobT1mltpAdMzbqgLdBsUqEvCqwB2rmcLa1ldXNmyfupWdR8VK4ebXpDCNrzGunYy9Q35-8o2fjsj5frdPwKbVPp6gWL4fIhHpnbc3EklnJJsjS9pD6yLWYIYpGRMq-sboM8Qdw/s400/CIMG1081.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5270863607070443410" /></a>The nice big red handles are perfect for controlling the device, pointing the camera, and wicking up the water afterwards.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb0o4cfnUWAuge7vXv8rHKbAdSaoFnoYE0sytAp7J7Dj0W5_jq0_z5YyY5gfxTtt_ZQ7pjHPupYf1u2wdDCtPxInpYg0_rjZFac1xJdR4VfRg4y6yecMfpKw-CByTm7ISEgs6L9aRtWQtZ/s1600-h/CIMG1084.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb0o4cfnUWAuge7vXv8rHKbAdSaoFnoYE0sytAp7J7Dj0W5_jq0_z5YyY5gfxTtt_ZQ7pjHPupYf1u2wdDCtPxInpYg0_rjZFac1xJdR4VfRg4y6yecMfpKw-CByTm7ISEgs6L9aRtWQtZ/s400/CIMG1084.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5270863613450351378" /></a>The diaper+plastic sheet can be removed and replaced in flight; it attaches to a UHMW base plate via some velcro tabs.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_jShEbJSjJsHdKaRfJnIWW2rjChKWdvdFHu7nk7HcatpQ-y0swU7omuF2nObuyq18S1NCR2i3W1SnCvXuHloPMZDj_2lmAzXAFgwV3xdBM3ZdSYf_A3HSZgb0ga04iArn6c-orZlba9lE/s1600-h/CIMG1085.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_jShEbJSjJsHdKaRfJnIWW2rjChKWdvdFHu7nk7HcatpQ-y0swU7omuF2nObuyq18S1NCR2i3W1SnCvXuHloPMZDj_2lmAzXAFgwV3xdBM3ZdSYf_A3HSZgb0ga04iArn6c-orZlba9lE/s400/CIMG1085.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5270863615426920210" /></a>Finally, the whole thing folds flat; locking and unlocking is controlled by two wing-nuts; no tools required!</div><div><br /></div><div>Needless to say, if I can come up with an acronym for this device that matches a major diaper brand, the sponsorship opportunities are literally out of this world ("<span class="Apple-style-span" style="font-style: italic;">4 out of 5 incontinent free-falling mad scientists prefer Depends</span>").</div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">PS: Some things I learned while abuilding...</span></div><div><span class="Apple-style-span" style="font-weight: bold;"><br /></span></div><div><span class="Apple-style-span" style="font-weight: bold;"><span class="Apple-style-span" style="font-weight: normal;">T-slot extrusion is great for these kind of prototyping projects; here are a few things I learned along the way.</span></span></div><div><ul><li>Most of the supplied nuts and bolts are 10-32. I happen to love 10-32 cap screws so I replaced them with some nice buttonheads.<br /><p></p></li><li>The big red handles use 1/4 bolts; the problem is that 1/4 nuts won't fit in the extrusion. The solution is to use flat automotive speed nuts and a little hackery. Speed nuts are weird spring-steel flat plate devices, and the 1/4 ones almost but not quite fit in the slots. To get them to fit, you do the following: thread a junk 1/4 bolt onto it (the bolt may get a little mangled), clamp one end in a vice, and use a tightened-up adjustable wrench to take the bow out of the nut, so it's pretty much flat. Once you've got it to where it will slide easily in the slot, remove the bolt and test out another one to make sure that the little fingers that grasp the bolt are not too loose, and not too tight. You may have to adjust them with the vise or pliers.<br /><p></p></li><li>A length of piano hinge with holes that are the right size for 10-32 bolts (any hardware store will have some, you can cut it to the length you need) will fold so that the sides are close to parallel if you secure it by alternating 10-32 buttonheads + a small washer (so that each buttonhead touches an empty hole on the other half of the hinge). The buttonheads act as spacers.<p></p></li><li>The plastic corner connectors have fingers that have starter holes for small set-screws (you will understand what I mean if you get some). However, the cube-corner connectors (not actually used in my device) have one set of fingers that don't have the starter holes, probably because of a limitation in their manufacturing process. Just stuff the no-hole fingers into a bit of the t-slot extrusion and drill your own in using a #41 or so drill bit. <span class="Apple-style-span" style="font-weight: bold;">Update</span>: I've been told that you can also screw the set-screws into the ends of the fingers without drilling.<p></p></li><li>One of the big pains with T-slot extrusion is when you realize that you need an extra square nut in a section to mount something, because this means you have to take things apart -- unless you know about a trick. It turns out that the 10-32 square nuts have enough variability in their size that some of them can be inserted directly into a slot. To find nuts with this property, slide a bunch of them into a slot, turn the extrusion so that slot is on the bottom, and shake the nuts back and forth; the special secret nuts will drop out. Repeat the process with the remaining nuts rotation 90-degrees, as usually only one axis is short. Set these nuts aside for emergencies. To insert a nut, put it into the slot, put your finger on it, turn so the slot is on the bottom, and slide the nut back and forth; it'll seat itself quite easily (assuming you've got the orientation correct, a 50-50 shot).<br /></li></ul><br /><br /></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-23382967496347627532008-11-02T11:48:00.002-05:002008-11-02T12:18:25.919-05:00High-speed video LED lighting testsOne of the important supporting projects I have been working on is developing a better light source for the Exilim EX-F1 camera. As you may recall, on our first flight, we depended on getting light from a cabin window, but this placed a lot of restrictions on freedom of movement, which is important because if you are strapped down, your apparatus isn't always in microgravity; it depends on how good the pilot is at flying the parabola. If you are freely floating, on the other hand, any variations just cause everything to wobble together, so other than some minor effects due to friction with the air, everything will be very close to zero-g as long as you don't hit a wall, and nobody hits you!<div><br /></div><div>Therefore my plan is to build a portable light source for the camera. Typical video camera lighting systems start at over $100 for a 10watt halogen system, so I figured it would be more fun to build my own using multiple <a href="http://www.sparkfun.com/datasheets/Components/Luxeon-III.pdf">3watt luxeon white LEDs</a> from <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=563">SparkFun</a> (they also have some nice <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8475">heatsinks</a> for these nasty little critters).</div><div><br /></div><div>Here's some video of the first test runs, which are very encouraging. I soldered up 8 3watt LEDs to heatsinks, put them on a styrofoam ring, and wired them up in parallel to 3 1.2v NiMH cells (so I'm actually undervolting them a bit). You have to use NiMH or NiCd for this kind of application because non-rechargable cells just can't source the current needed - probably 5 or 6 amps total.</div><div><br /></div><div style="text-align: center;"><object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/ntstJwSEbOk"> <embed src="http://www.youtube.com/v/ntstJwSEbOk" type="application/x-shockwave-flash" width="425" height="350"></embed> </object><br /></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com0tag:blogger.com,1999:blog-2726952721436808793.post-85476800875140641752008-11-02T08:12:00.003-05:002008-11-02T08:29:15.681-05:00Epic Fail!The initial tests of my 2D Menticulator device failed in so many ways, it's just not funny!<div><br /></div><div>To start with, the pneumatic cola dispensing system doesn't work -- because the bladder used to force the cola out of the bottle acts as a massive nexus of nucleation sites. As soon as you try and put the bladder into the coke bottle, all the CO2 comes out of solution! Foom! So unless I can come up with a system that either avoids the problem or can repressurize the bottle with C02 to put it back into solution, all the lovely pneumatic gear I cobbled together is useless, at least for the purposes I originally intended.</div><div><br /></div><div>And to make matters worse, even careful attempts to decant the soda into the 2-D menticulator failed miserably. Despite being made with panels of carefully cleaned acrylic, it is rough enough that most of the CO2 comes out of solution and sticks to the walls, both reducing the amount of CO2 available for menticulation and obscuring the view of the convection process. Again, I'd have to repressurize the apparatus to force the gas back into solution.</div><div><br /></div><div>I think the video I shot of the final test says it all. What happens at the end is just icing on the fail cake, so to speak.<br /><div style="text-align: center;"><br /></div><div style="text-align: center;"><object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/ycdvxc5l7Wo"> <embed src="http://www.youtube.com/v/ycdvxc5l7Wo" type="application/x-shockwave-flash" width="425" height="350"></embed> </object><br /></div><div style="text-align: center;"><br /></div><div style="text-align: left;">I therefore find myself compelled to choke out the hateful lines, "<span class="Apple-style-span" style="font-weight: bold;"><span class="Apple-style-span" style="font-style: italic;">Curses! Foiled again!</span></span>"</div><div><br /></div><div>On the bright side, I have yet to have to utter the deathless lines that doom an Overlord to eternal ignominy -- "<span class="Apple-style-span" style="font-weight: bold;"><span class="Apple-style-span" style="font-style: italic;">I would've have gotten away with it if it wasn't for those meddling kids!</span></span>"</div><div><br /></div><div>In other news, work on a LED-based lighting apparatus for the Exilim camera is proceeding fairly well; I'll be posting on that soon.</div></div>MadOverlordhttp://www.blogger.com/profile/01204905457718170827noreply@blogger.com1