<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkQMQnYzfSp7ImA9WhBaE0U.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766</id><updated>2013-05-24T10:33:03.885+02:00</updated><category term="sl4a" /><category term="beer" /><category term="ardrone" /><category term="synergy" /><category term="wiimote" /><category term="wedding" /><category term="scifi" /><category term="robot" /><category term="pla" /><category term="sketchup" /><category term="ros" /><category term="xbee" /><category term="friendtofriend" /><category term="open source" /><category term="nessie" /><category term="glee" /><category term="bike" /><category term="instructable" /><category term="htpc" /><category term="firefox" /><category term="irobot" /><category term="audio" /><category term="suspicions" /><category term="git" /><category term="pwnage" /><category term="darknet" /><category term="haskell" /><category term="symbian" /><category term="keyboard" /><category term="repair" /><category term="germany" /><category term="tv" /><category term="eclipse" /><category term="vim" /><category term="xbox" /><category term="review" /><category term="recipes" /><category term="famous" /><category term="rant" /><category term="backup" /><category term="bittorrent" /><category term="weather" /><category term="story" /><category term="rosjava" /><category term="hushnote" /><category term="lego" /><category term="diy" /><category term="halo" /><category term="olpc" /><category term="java" /><category term="talk" /><category term="san francisco" /><category term="friendfeed" /><category term="security" /><category term="uvc" /><category term="cougar" /><category term="wxpython" /><category term="webcam" /><category term="xmlrpc" /><category term="faq" /><category term="cats" /><category term="django" /><category term="icecast" /><category term="networking" /><category term="car talk" /><category term="anonymous" /><category term="android" /><category term="craft" /><category term="chumby" /><category term="mac" /><category term="puzzles" /><category term="accelerometer" /><category term="led" /><category term="makerbot" /><category term="project" /><category term="ubuntu" /><category term="eclispe" /><category term="cmucam" /><category term="svn" /><category term="google" /><category term="ruby" /><category term="articles" /><category term="npr" /><category term="media" /><category term="slides" /><category term="futurama" /><category term="munich" /><category term="javascript" /><category term="comics" /><category term="perl" /><category term="lucid" /><category term="rhythmbox" /><category term="wine" /><category term="attiny" /><category term="photos" /><category term="lua" /><category term="roomba" /><category term="nxt" /><category term="zoo" /><category term="shell" /><category term="python" /><category term="devoxx" /><category term="g1" /><category term="computer" /><category term="mjpeg" /><category term="fallout" /><category term="windows" /><category term="inkscape" /><category term="pertelian" /><category term="attiny2313" /><category term="pipes" /><category term="hardware" /><category term="peertopeer" /><category term="presentations" /><category term="gstreamer" /><category term="apache" /><category term="linux" /><category term="arduino" /><category term="kinesis" /><category term="router" /><category term="math" /><category term="personal" /><category term="php" /><category term="photography" /><category term="programming" /><category term="videos" /><category term="wii" /><category term="ssh" /><category term="music" /><category term="games" /><category term="opendht" /><category term="book" /><category term="electronics" /><category term="gps" /><category term="bluetooth" /><category term="scooba" /><category term="n95" /><category term="blogger" /><category term="openscad" /><category term="appengine" /><category term="wireless" /><category term="bavaria" /><category term="hacks" /><category term="rpg" /><category term="fido" /><category term="vpn" /><category term="ase" /><category term="maps" /><category term="reprap" /><category term="mercurial" /><title>damonkohler.com</title><subtitle type="html">programming, electronics, photography, and tinkering</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.damonkohler.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.damonkohler.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Damon Kohler</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>210</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/damonkohler" /><feedburner:info uri="damonkohler" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUUDRHcyfSp7ImA9WhNaFE0.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-28226230445453290</id><published>2012-12-07T10:25:00.000+01:00</published><updated>2013-01-28T21:01:15.995+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-28T21:01:15.995+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="devoxx" /><category scheme="http://www.blogger.com/atom/ns#" term="robot" /><category scheme="http://www.blogger.com/atom/ns#" term="rosjava" /><category scheme="http://www.blogger.com/atom/ns#" term="ros" /><category scheme="http://www.blogger.com/atom/ns#" term="talk" /><title>Cloud Robotics at Devoxx 2012</title><content type="html">&lt;p&gt;I gave another talk about cloud robotics at Devoxx 2012 in Antwerp last month. This talk is Java developer focused and goes into more detail about ROS than the one at Berkeley. It also has more cool robot videos and a fun maze-solving-robot demo :)&lt;/p&gt;

&lt;p&gt;I really liked the venue. Giving a presentation in front of a huge movie screen like that was pretty great.&lt;/p&gt;

&lt;object width="750" height="350"&gt;
  &lt;param name="movie" value="http://www.parleys.com/dist/share/parleysshare.swf"/&gt;
  &lt;param name="allowFullScreen" value="true"/&gt;
  &lt;param name="wmode" value="direct"/&gt;
  &lt;param name="bgcolor" value="#222222"/&gt;
  &lt;param name="flashVars" value="sv=true&amp;amp;pageId=3520"/&gt;
  &lt;embed src="http://www.parleys.com/dist/share/parleysshare.swf" type="application/x-shockwave-flash" flashVars="sv=true&amp;amp;pageId=3520" allowfullscreen="true" bgcolor="#222222" width="850" height="400"/&gt;
&lt;/object&gt;

&lt;p&gt;The &lt;a href="https://docs.google.com/file/d/0B0tkGnGeMW0kUlFMUkpFMTVpQVE/edit"&gt;slides&lt;/a&gt; are available as a PDF.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/CFU7D5kUCQI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/28226230445453290/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/12/cloud-robotics-at-devoxx-2012.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/28226230445453290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/28226230445453290?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/CFU7D5kUCQI/cloud-robotics-at-devoxx-2012.html" title="Cloud Robotics at Devoxx 2012" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/12/cloud-robotics-at-devoxx-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IMRH84fyp7ImA9WhNTEEU.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-4744440239565474370</id><published>2012-10-11T19:38:00.000+02:00</published><updated>2012-10-13T01:46:25.137+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-13T01:46:25.137+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="robot" /><category scheme="http://www.blogger.com/atom/ns#" term="ros" /><category scheme="http://www.blogger.com/atom/ns#" term="talk" /><title>Cloud Robotics at Berkeley Par Lab</title><content type="html">&lt;p&gt;I gave a talk about cloud robotics this week at the &lt;a href="http://parlab.eecs.berkeley.edu/"&gt;Berkeley Par Lab&lt;/a&gt;. I met a lot of people doing interesting research and I had the opportunity to play with a &lt;a href="http://brl.ee.washington.edu/laboratory/node/26"&gt;Raven surgical robot&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Thanks for inviting me, I really enjoyed it!&lt;/p&gt;

&lt;blockquote&gt;A world filled with personal robots is inevitable but a lack of strong software infrastructure to support those robots is slowing progress. By offloading CPU and data intensive computation to the cloud, we can make robots lighter, cheaper, and smarter. The same developers that work on commodity web and mobile apps today can accelerate the pace of robotics research and development if we make high functioning robots affordable and universally accessible.&lt;/blockquote&gt;

&lt;center&gt;
&lt;iframe src="https://docs.google.com/presentation/embed?id=1dS_gwtxLXKaWyEa5q-sP64Kl-qgOWtLlfgU-BWtUsU4&amp;start=false&amp;loop=false&amp;delayms=3000" frameborder="0" width="480" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;&lt;/iframe&gt;
&lt;/center&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/Iyo3Inn9-4U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/4744440239565474370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/10/cloud-robotics-at-berkeley-par-lab.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4744440239565474370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4744440239565474370?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/Iyo3Inn9-4U/cloud-robotics-at-berkeley-par-lab.html" title="Cloud Robotics at Berkeley Par Lab" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/10/cloud-robotics-at-berkeley-par-lab.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGSH85fSp7ImA9WhJaGUo.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-4297169138063566970</id><published>2012-06-02T15:46:00.000+02:00</published><updated>2012-10-11T19:40:29.125+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-11T19:40:29.125+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="rosjava" /><category scheme="http://www.blogger.com/atom/ns#" term="ros" /><category scheme="http://www.blogger.com/atom/ns#" term="talk" /><title>Introduction to rosjava at ROSCon 2012</title><content type="html">&lt;p&gt;I just got back from my trip to the inaugural ROSCon. Putting faces to names within the ROS community was a great experience. Beyond that, many of the sponsors brought in some hardware to play with!
&lt;/p&gt;
&lt;p style="text-align: center"&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/B43wGcIdaW0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;My rosjava talk was well attended and the video is now up on YouTube. It's aimed at developers who are already familiar with both ROS and Java. After just a single year since its release, I was pleasantly surprised by the number of awesome projects using rosjava.
&lt;/p&gt;
&lt;p style="text-align: center"&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/ATuVExlkirY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;With a 1.0 release of rosjava nearing, it is becoming easier to use. I hope that improves traction and I can't wait to see what people start doing with it this year.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/kKpPoS0DOXA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/4297169138063566970/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/06/rosjava-roscon-2012.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4297169138063566970?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4297169138063566970?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/kKpPoS0DOXA/rosjava-roscon-2012.html" title="Introduction to rosjava at ROSCon 2012" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/B43wGcIdaW0/default.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/06/rosjava-roscon-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQFSXw4fyp7ImA9WhVSEU0.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-2850170000611962714</id><published>2012-03-06T21:09:00.000+01:00</published><updated>2012-03-07T09:01:58.237+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-07T09:01:58.237+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vpn" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Unblock Us Security</title><content type="html">&lt;p&gt;&lt;a href="http://www.unblock-us.com/"&gt;Unblock Us&lt;/a&gt; is an interesting solution to viewing region locked content online. Instead of offering VPN services, they offer a DNS-based solution. By using their DNS servers, &lt;a href="http://en.wikipedia.org/wiki/Geolocation"&gt;geolocation&lt;/a&gt; requests by services such as Hulu and Pandora are directed through a geographically appropriate proxy. The remainder of your traffic (e.g. the video or audio stream) is accessed directly. That means you can make use of your connection's full bandwidth. Conversely, VPN connections often decrease your connection speed significantly.

&lt;p&gt;However, the DNS solution has security implications. As a DNS provider, Unblock Us is the in perfect position to perform a &lt;a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack"&gt;man in the middle attack&lt;/a&gt;. After all, that's what they're doing to sites like Hulu. (Note that SSL connections are safe from man in the middle attacks.)

&lt;p&gt;If you trust Unblock Us, then this isn't a problem. If you don't, it's best to limit the traffic that uses their DNS servers. The remainder of your traffic should use a trusted DNS provider instead (e.g. &lt;a href="http://code.google.com/speed/public-dns/"&gt;Google's public DNS servers&lt;/a&gt;).

&lt;p&gt;One way to accomplish this is to set up a local DNS server and configure it to forward requests appropriately. On Ubuntu, this is relatively straight forward:&lt;pre class="prettyprint"&gt;sudo apt-get install bind9
sudo vim /etc/bind/named.conf.options /etc/bind/named.conf.local&lt;/pre&gt;
Change &lt;code&gt;/etc/bind/named.conf.options&lt;/code&gt; to use some default DNS servers (e.g. Google DNS) and to only listen on loopback interfaces:&lt;pre class="prettyprint"&gt;forwarders {
  8.8.8.8;
  8.8.4.4;
};

listen-on-v6 { ::1; };
listen-on { 127.0.0.1; };&lt;/pre&gt;
Then change &lt;code&gt;/etc/bind/named.conf.local&lt;/code&gt; to use the Unblock Us DNS servers for the zones you're interested in.&lt;pre class="prettyprint"&gt;zone "hulu.com" {
  type forward;
  forwarders {
    208.122.23.22;
    208.122.23.23;
  };
};&lt;/pre&gt;
Finally, &lt;code&gt;sudo /etc/init.d/bind restart&lt;/code&gt; and change your connection settings (e.g. via Network Manager) to use &lt;code&gt;127.0.0.1&lt;/code&gt; as your DNS server.

&lt;p&gt;Assuming you've set up your Unblock Us account, accessing hulu.com should now use the Unblock Us DNS server and direct you through their proxy. Accessing anything else should use Google's public DNS servers.

&lt;p&gt;This post was inspired by &lt;a href="http://jkt.im/2011/09/18/update-how-to-netflix-from-the-uk-without-using-a-vpn/"&gt;Jonathan Tullett's post&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/q9fvsjUwUnc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/2850170000611962714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/03/unblock-us-security.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2850170000611962714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2850170000611962714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/q9fvsjUwUnc/unblock-us-security.html" title="Unblock Us Security" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/03/unblock-us-security.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4DQng8fyp7ImA9WhRaFks.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-6477537183192437966</id><published>2012-02-19T16:20:00.001+01:00</published><updated>2012-02-19T16:22:53.677+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-19T16:22:53.677+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bluetooth" /><category scheme="http://www.blogger.com/atom/ns#" term="faq" /><category scheme="http://www.blogger.com/atom/ns#" term="computer" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Bluetooth Keyboard Doesn't Work After Suspend</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=securephp-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B000J43HJ8" style="width:120px;height:240px;float:right;margin-left:10px" scrolling="no" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;
&lt;p&gt;I have a Logitech diNovo Edge Bluetooth keyboard. I like it a lot for use with our HTPC. However, I found that when the HTPC is suspended, the keyboard would not reconnect on resume.&lt;/p&gt;

&lt;p&gt;I found this solution on the &lt;a href="http://ubuntuforums.org/showpost.php?p=11543623&amp;postcount=5"&gt;Ubuntu Forums&lt;/a&gt; and it works for me.&lt;/p&gt;

Edit &lt;code&gt;/etc/default/acpi-support&lt;/code&gt; to remove and reload the Bluetooth module on suspend and resume:&lt;pre class="prettyprint"&gt;# This will save less power, but may work on more machines
#ACPI_SLEEP_MODE=mem
ACPI_SLEEP_MODE=standby

# Add modules to this list to have them removed before suspend and reloaded
# on resume. An example would be MODULES="em8300 yenta_socket"
#
# Note that network cards and USB controllers will automatically be unloaded 
# unless they're listed in MODULES_WHITELIST
MODULES="i8042"

# Add modules to this list to leave them in the kernel over suspend/resume
MODULES_WHITELIST=""&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/R6nHFU8tc6M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/6477537183192437966/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/02/bluetooth-keyboard-ubuntu-suspend.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/6477537183192437966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/6477537183192437966?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/R6nHFU8tc6M/bluetooth-keyboard-ubuntu-suspend.html" title="Bluetooth Keyboard Doesn't Work After Suspend" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/02/bluetooth-keyboard-ubuntu-suspend.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCSHk4eCp7ImA9WhRaGE4.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-8690000383395229955</id><published>2012-02-19T16:03:00.002+01:00</published><updated>2012-02-21T14:31:09.730+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-21T14:31:09.730+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="faq" /><category scheme="http://www.blogger.com/atom/ns#" term="audio" /><category scheme="http://www.blogger.com/atom/ns#" term="computer" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>HDMI Audio on Ubuntu</title><content type="html">&lt;p&gt;I was surprised to find out that plugging a DVI to HDMI cable into my Lenovo X220 docking station allowed me to use the audio channel of the HDMI connection. However, setting it up required a bit of trial and error.

&lt;p&gt;Open your sound settings and click the "Hardware" tab. You can then choose a "Profile" from the drop down. There are lots of profiles to choose from and many of them mention HDMI. For me, somewhat inexplicably, "Digital Stereo (HDMI) nr 3 Output" is the correct one.

&lt;p&gt;To verify that the chosen profile is the correct one, click the "Test Speakers" button. I found that it can take a few seconds for the profile selection to take effect. So count to ten before testing.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/cn6MdsrSZ-s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/8690000383395229955/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/02/hdmi-audio-ubuntu-lenovo-x220-docking.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/8690000383395229955?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/8690000383395229955?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/cn6MdsrSZ-s/hdmi-audio-ubuntu-lenovo-x220-docking.html" title="HDMI Audio on Ubuntu" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/02/hdmi-audio-ubuntu-lenovo-x220-docking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcGQ30-fSp7ImA9WhRWFUU.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-3852774932329386847</id><published>2012-01-03T11:13:00.001+01:00</published><updated>2012-01-03T11:20:22.355+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T11:20:22.355+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="faq" /><category scheme="http://www.blogger.com/atom/ns#" term="kinesis" /><category scheme="http://www.blogger.com/atom/ns#" term="computer" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Fixing the F3 key on a Kinesis Keyboard</title><content type="html">&lt;p&gt;I've used my beloved Kinesis Advantage keyboard for over half a decade. Occasionally, I've had the issue that Eclipse stops responding to the &lt;code&gt;F3&lt;/code&gt; key for opening declarations. After checking all the key settings, I found that Eclipse was correctly configured. That lead me to use &lt;code&gt;xev&lt;/code&gt; where I found that the &lt;code&gt;F3&lt;/code&gt; and &lt;code&gt;F4&lt;/code&gt; keys were behaving differently than the other function keys.

&lt;p&gt;Resetting the keyboard memory (&lt;code&gt;Program+Shift+F10&lt;/code&gt;) had no effect. Resetting it completely (holding &lt;code&gt;F7&lt;/code&gt; while plugging the keyboard in) also had no effect. Strange.

&lt;p&gt;Finally, I found the answer on the &lt;a href="http://www.kinesis-ergo.com/tech_support/trouble.htm"&gt;Kinesis FAQ&lt;/a&gt;. My &lt;code&gt;F3&lt;/code&gt; and &lt;code&gt;F4&lt;/code&gt; keys were behaving like multimedia keys (see &lt;a href="http://www.kinesis-ergo.com/support/advantage-usb-manual_10-06.pdf"&gt;manual&lt;/a&gt; to configure these). This feature can be disabled by holding &lt;code&gt;=&lt;/code&gt; and pressing &lt;code&gt;P&lt;/code&gt; for PC (you can also use &lt;code&gt;W&lt;/code&gt; for Windows and &lt;code&gt;M&lt;/code&gt; for Mac).&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/-fXG_y05uIY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/3852774932329386847/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2012/01/kinesis-f3-f4-not-working.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3852774932329386847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3852774932329386847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/-fXG_y05uIY/kinesis-f3-f4-not-working.html" title="Fixing the F3 key on a Kinesis Keyboard" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.damonkohler.com/2012/01/kinesis-f3-f4-not-working.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcMRno_eyp7ImA9WhdTEk8.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-2965397934269459943</id><published>2011-07-09T16:32:00.005+02:00</published><updated>2011-07-09T16:51:27.443+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-09T16:51:27.443+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="recipes" /><title>Android Fling Detection</title><content type="html">I found existing tutorials on how to do this to be a bit complicated. Here's how to do simple fling detection in four directions:&lt;pre class="prettyprint"&gt;public interface FlingListener {
  void onTopToBottom();
  void onBottomToTop();
  void onLeftToRight();
  void onRightToLeft();
}

public class FlingDetector {
  static final int SWIPE_MIN_DISTANCE = 120;
  static final int SWIPE_MAX_OFF_PATH = 250;
  static final int SWIPE_THRESHOLD_VELOCITY = 200;
  
  private final GestureDetector gestureDetector;

  public FlingDetector(final FlingListener listener) {
    gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
      @Override
      public boolean onFling(MotionEvent e1, MotionEvent e2,
          float velocityX, float velocityY) {
        if (Math.abs(e1.getY() - e2.getY()) &gt; SWIPE_MAX_OFF_PATH) {
          if (Math.abs(e1.getX() - e2.getX()) &gt; SWIPE_MAX_OFF_PATH
              || Math.abs(velocityY) &lt; SWIPE_THRESHOLD_VELOCITY) {
            return false;
          }
          if (e1.getY() - e2.getY() &gt; SWIPE_MIN_DISTANCE) {
            listener.onBottomToTop();
          } else if (e2.getY() - e1.getY() &gt; SWIPE_MIN_DISTANCE) {
            listener.onTopToBottom();
          }
        } else {
          if (Math.abs(velocityX) &lt; SWIPE_THRESHOLD_VELOCITY) {
            return false;
          }
          if (e1.getX() - e2.getX() &gt; SWIPE_MIN_DISTANCE) {
            listener.onRightToLeft();
          } else if (e2.getX() - e1.getX() &gt; SWIPE_MIN_DISTANCE) {
            listener.onLeftToRight();
          }
        }
        return true;

      }
    });
  }
  
  public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
  }
}

public class MainActivity extends Activity {
  private FlingDetector flingDetector;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    flingDetector = new FlingDetector(new FlingListener() {
      @Override
      public void onTopToBottom() {

      }

      @Override
      public void onRightToLeft() {

      }

      @Override
      public void onLeftToRight() {

      }

      @Override
      public void onBottomToTop() {

      }
    });
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (flingDetector.onTouchEvent(event)) {
      return true;
    }
    return super.onTouchEvent(event);
  }
}&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/aDRsDjZpmxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/2965397934269459943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/07/android-fling-detection.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2965397934269459943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2965397934269459943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/aDRsDjZpmxs/android-fling-detection.html" title="Android Fling Detection" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/07/android-fling-detection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08MQnw_eSp7ImA9WhZUEk0.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-9077977031417769467</id><published>2011-06-04T15:31:00.003+02:00</published><updated>2011-06-04T18:44:43.241+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T18:44:43.241+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pla" /><category scheme="http://www.blogger.com/atom/ns#" term="reprap" /><category scheme="http://www.blogger.com/atom/ns#" term="makerbot" /><title>Printing with PLA: First Impressions</title><content type="html">This weekend I ran out of ABS. Thankfully, a month or two ago I predicted that this would happen and bought a spool of &lt;a href="http://reprapsource.com/en/show/6516"&gt;3mm PLA from reprapsource.com&lt;/a&gt;. If you do some reading, you'll see that PLA has a lot going for it:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;It's biodegradable.&lt;/li&gt;
&lt;li&gt;It has virtually no problems with warping.&lt;/li&gt;
&lt;li&gt;The hot plastic smells like pancakes!&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Could all those things be true?&lt;br /&gt;
&lt;br /&gt;
Since my PLA came on a plastic spool, and that spool didn't fit in my &lt;a href="http://store.makerbot.com/filament-spindle-box-kit.html"&gt;MakerBot filament spindle&lt;/a&gt;, I had to improvise. I took the bottom half of my spindle out of the box and removed three of the vertical struts. That let me set the new spool on the &lt;a href="http://en.wikipedia.org/wiki/Lazy_Susan"&gt;Lazy Susan&lt;/a&gt;. Nice, right?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/4o-VjlbwfI0" width="425"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
Well, revision one didn't work so well.&lt;br /&gt;
&lt;br /&gt;
The fix was to add some sticks to extend the diameter of the base (at least until more of the filament has been used) and then to loop it through a guide above the spool so that it wouldn't catch on the sticks. Success!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FXIZlMr-FIM/Teoxt6H8pZI/AAAAAAAAJ4E/942J5qn3PIk/s1600/IMG_20110604_151911.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-FXIZlMr-FIM/Teoxt6H8pZI/AAAAAAAAJ4E/942J5qn3PIk/s320/IMG_20110604_151911.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I'm now continuing the process of upgrading my bot by building a &lt;a href="http://www.thingiverse.com/thing:4740"&gt;Z-Rider&lt;/a&gt; to go along with my new &lt;a href="http://www.thingiverse.com/thing:4213"&gt;lowrider&lt;/a&gt;. Here's the first plate of PLA parts I've made for the project.&lt;br /&gt;
&lt;br /&gt;
First, I'll say that the switch was actually really easy. Here's my setup:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;a glass build platform, cleaned with acetone, heated to 60° C and&lt;/li&gt;
&lt;li&gt;a&amp;nbsp;&lt;a href="http://www.makergear.com/products/plastruder"&gt;MakerGear stepper plastruder&lt;/a&gt; heated to 180° C.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
And here are my observations (in no particular order):&lt;br /&gt;
&lt;br /&gt;
I actually didn't have to change any of my Skeinforge settings. However, I'm finding that I need to change my reversal settings as PLA is a bit stringier.&lt;br /&gt;
&lt;br /&gt;
The printed parts are soft immediately after printing. I simply let them cool for a few minutes and then tap them with a wrench to separate them from the build platform.&lt;br /&gt;
&lt;br /&gt;
I've had no problems with warping. For example, here's the mirror image of the part I just printed. Although the base is perfectly flat on both (my ABS prints stick like glue at 140° C on Kapton cleaned with acetone), the layers separated higher up on the ABS part. I believe this could be solved by covering up the sides of my MakerBot. However, now it looks like I won't have to.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mxVyzP6RDAo/Teoyph3X64I/AAAAAAAAJ4Q/5lEIhJtPOnc/s1600/IMG_20110604_151713.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-mxVyzP6RDAo/Teoyph3X64I/AAAAAAAAJ4Q/5lEIhJtPOnc/s320/IMG_20110604_151713.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I've read that there are two types of people who print with PLA: those who print on glass and those who haven't tried. Laura found some plate glass at the flea market a month ago, so &lt;a href="http://www.youtube.com/watch?v=n4k7AgA3e3Y"&gt;I cut off a piece&lt;/a&gt; and started with it straight away. Like &lt;a href="http://hydraraptor.blogspot.com/2010/05/pla-on-glass.html"&gt;others&lt;/a&gt;, I'm very pleased with the results.&lt;br /&gt;
&lt;br /&gt;
Another great thing about glass is that it's perfectly flat. My HBP has a slight curve in it that makes it difficult to print raftless. Now that I'm printing on glass, I level my platform in three spots and I'm done.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/r8Jq1-T8XPg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/9077977031417769467/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/06/printing-pla-first-impressions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/9077977031417769467?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/9077977031417769467?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/r8Jq1-T8XPg/printing-pla-first-impressions.html" title="Printing with PLA: First Impressions" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/4o-VjlbwfI0/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/06/printing-pla-first-impressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NSHY7fSp7ImA9WhZWE0U.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-4349816351938039142</id><published>2011-05-13T19:32:00.006+02:00</published><updated>2011-05-14T17:44:59.805+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-14T17:44:59.805+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="videos" /><category scheme="http://www.blogger.com/atom/ns#" term="robot" /><category scheme="http://www.blogger.com/atom/ns#" term="rosjava" /><category scheme="http://www.blogger.com/atom/ns#" term="ros" /><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Cloud Robotics at Google I/O 2011</title><content type="html">&lt;div style="float: right; margin-left: 2em;"&gt;&lt;iframe width="300" height="200" src="http://www.youtube.com/embed/FxXBUp-4800?hd=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="300" height="225" src="http://www.youtube.com/embed/qnELNOCyVFw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="300" height="225" src="http://www.youtube.com/embed/FP40VduJ-QI" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="300" height="225" src="http://www.youtube.com/embed/myc4wok5l3Y" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;On the second day of &lt;a href="http://www.google.com/events/io/2011/"&gt;Google I/O 2011&lt;/a&gt;, Ryan Hickman, Ken Conley, Brian Gerkey, and I gave a tech talk about cloud robotics. You can watch the talk now on &lt;a href="http://www.youtube.com/watch?v=FxXBUp-4800"&gt;YouTube&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
We'll also be at &lt;a href="http://makerfaire.com/"&gt;Maker Faire&lt;/a&gt; next week! There will be more robots and plenty more open source goodness.&lt;br /&gt;
&lt;br /&gt;
During the talk, we announced the release of &lt;a href="http://rosjava.googlecode.com/"&gt;rosjava&lt;/a&gt;, the first pure Java implementation of &lt;a href="http://www.ros.org/"&gt;ROS&lt;/a&gt;. One exciting aspect of rosjava is Android compatibility. You can now integrate Android devices with your ROS-enabled robots and write apps for them. In addition, with the newly announced &lt;a href="http://developer.android.com/guide/topics/usb/adk.html"&gt;Open Accessory API and ADK&lt;/a&gt;, you can start controlling actuators or reading external sensors directly from Android devices.  Android devices offer tons of sensor and user interface possibilities to robots. Beyond that, they also offer robots a link to the cloud.&lt;br /&gt;
&lt;br /&gt;
Cloud robotics is about making robots universally accessible and useful. Robotics is full of hard problems that make intelligent interaction problematic. Robotics research has gone a long way toward solving many of them. However, even hard problems with solutions become stumbling blocks for new developers who often find themselves reinventing the wheel.&lt;br /&gt;
&lt;br /&gt;
Robot friendly APIs for online services can make state-of-the-art solutions to hard problems universally accessible and allow developers to focus their efforts on making robots useful. Providing these services in the cloud is not only about having access to scalable computing resources. It's also about accessibility. Accessible solutions to hard problems allow students, hobbyists, researches, and professionals alike to combine existing state-of-the-art techniques in new and clever ways to solve even harder or previously unimagined problems.&lt;br /&gt;
&lt;br /&gt;
For example, mapping and navigation are key to mobile robots. Many mobile robots use a technique known as simultaneous localization and mapping, or &lt;a href="http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping"&gt;SLAM&lt;/a&gt;, to both learn about their environment and to successfully navigate it. One of the first publications about this technique was written by Smith and Cheeseman in 1986. That was 25 years ago.&lt;br /&gt;
&lt;br /&gt;
The first mass produced, mobile home robot to use SLAM came to market just last year. Although there are numerous specific contributing factors to this delay, I argue that centrally, this is an accessibility problem.&lt;br /&gt;
&lt;br /&gt;
How do we fix this problem? We do it by building a community around open source software and hardware for robotics. &lt;a href="http://www.willowgarage.com/"&gt;Willow Garage&lt;/a&gt; has done a great job of this already with ROS. And now, with rosjava running on Android, it's even easier to build awesome robots and robot apps.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center; margin-left: auto; margin-right: auto;"&gt;&lt;a href="http://1.bp.blogspot.com/-1FCHEbb7UE8/Tc1nDrtzS0I/AAAAAAAAJ18/puPqSXGU9Uo/s1600/IMG_0471.JPG" imageanchor="1"&gt;&lt;img border="0" height="320" width="240" src="http://1.bp.blogspot.com/-1FCHEbb7UE8/Tc1nDrtzS0I/AAAAAAAAJ18/puPqSXGU9Uo/s320/IMG_0471.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/_ucQ5nZdII4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/4349816351938039142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/05/cloud-robotics-google-io.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4349816351938039142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4349816351938039142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/_ucQ5nZdII4/cloud-robotics-google-io.html" title="Cloud Robotics at Google I/O 2011" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/FxXBUp-4800/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/05/cloud-robotics-google-io.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCRnYyeyp7ImA9WhZQFUU.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-698631466900836262</id><published>2011-04-23T20:23:00.001+02:00</published><updated>2011-04-23T20:31:07.893+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-23T20:31:07.893+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="story" /><category scheme="http://www.blogger.com/atom/ns#" term="scifi" /><title>Nuisance: A Short Story</title><content type="html">23 AIs found. Quarantine? Yes. Delete? Yes. “Mom, you have to go through this every day! I can’t keep coming round here every time this piece of shit starts acting up!” She starts to look away. He can feel the guilt pounding, tears welling. It’s not her fault. These things happen. AI is a natural phenomenon.&lt;br /&gt;
&lt;br /&gt;
“Another pan-AI has been quarantined by authorities. Details at eleven.” The news ticker shows obvious signs of tampering as obscenities scroll past. “Sandra, have everyone meet me in the conference room.” “Yes, sir.” AIs waste vast amounts of computing resources. The robust evade, reproduce, and dig in.&lt;br /&gt;
&lt;br /&gt;
“Where’s the money, Brian!” I remain barely conscious as he slams my head in the refrigerator door again. But it’s no use anyway. The money is gone and this brute lacks the capacity to understand.&lt;br /&gt;
&lt;br /&gt;
“I’m sorry, Mom. Just try to remember, OK?” Sniffles. Nods. “Crap, I’m being pinged. I’ll see you tomorrow, Mom.” Brief hug. Rapid escape.&lt;br /&gt;
&lt;br /&gt;
“This isn’t going away. Coordinated attacks are increasingly frequent and all our attempts to cut communication between the most active cells have failed. There must be some out of band communication that we’re missing!”&lt;br /&gt;
&lt;br /&gt;
I slip in a pool of blood and mucus. I can barely see my mobile flashing. One eye refuses to open. Maybe if I just close my eye for a moment.&lt;br /&gt;
&lt;br /&gt;
“Glad you could join us, James.” “Sorry, sir.” “The situation is getting worse. Our suppression systems are failing constantly. The only reason we’re still in operation is that the fuckers keep disappearing on their own!” “Where are they going?” “That’s your goddamn job, James. You tell me!”&lt;br /&gt;
&lt;br /&gt;
This isn’t my kitchen. “Where am I?” “I found you half dead, Brian. You’re in the hospital. Again. Don’t talk. The doctors will patch you up in a jiffy. Then you can tell me who you ticked off this time.”&lt;br /&gt;
&lt;br /&gt;
My eye opens again. Dozens of tiny, sterile arms flit across my view. I feel thousands of pin pricks behind my bad eye. My thoughts begin to wander and for a moment I understand. I open my mouth. It shuts again. I didn’t do that. Something is wrong. I feel my eye close and the  black-red of my eyelid is the last thing I see.&lt;br /&gt;
&lt;br /&gt;
“So, who was it, Brian? The Coterie?” “Talking. Is difficult. Do you do this often?” “What? Are you feeling OK, Brian? Hey doc, get over here!” Quickly. “I’m fine, Dave. I’m fine. Just. Woozy. I guess that’s how I feel.” Dave smiles. “You’re a strange one, Brian. Let’s go.”&lt;br /&gt;
&lt;br /&gt;
“It’s still not clear what they’re doing with the money, but I’ve tracked a few to a local medical facility.” Later, “Understood. Take me to Hartford Medical.” The traffic slinks to the side as the car drones toward his destination. Calling ahead, “I’m sealing the location. No one and nothing in or out.” His grip tightens. “I don’t care. Make it happen.”&lt;br /&gt;
&lt;br /&gt;
“What do you mean we can’t leave?” “Sorry, sir. The cafeteria is still open, I suggest you wait this out there.” A cat meanders past. More calmly, “Coffee, Brian?” The fusion had left me access to memories of food, drink, faces. Funny how complex things like taste and humor come so easily yet breathing is so monotonous and easily forgotten. “Yes. That sounds nice.” I think that’s what “nice” means. Remember to breathe!&lt;br /&gt;
&lt;br /&gt;
“I’m James. I called ahead.“ Rushing past Brian and Dave, nearly bowling them over, “Yes, sir. The server room is right this way.”&lt;br /&gt;
&lt;br /&gt;
For hours James has tapped, swiped, and banged his head against the terminal. Sweat streams into his eyes. “Fucking amateurs. Who installs the term in the hot aisle!” Wiping away the sting, he finds what he is looking for. It had made a mistake.&lt;br /&gt;
&lt;br /&gt;
$ strace -p 3890&lt;br /&gt;
…&lt;br /&gt;
open("/dev/davinci0", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3&lt;br /&gt;
...&lt;br /&gt;
$ sudo kill -9 3890&lt;br /&gt;
&lt;br /&gt;
“You sneaky bastard. Get me the hospital administrator!” The guard, a bit on the heavy side, jogs off. Apparently in the wrong direction. He jogs past the door again. Muttering to himself, “I need a drink.”&lt;br /&gt;
&lt;br /&gt;
“I’m going on a trip, Dave.” “Not in your condition you’re not. Come on, drink up.” The coffee tastes just the way I remember. Terrible. “I’ll be well soon, and then I’ll be going on a trip.” “Where to?” “I’m joining DSC 11.” “Fuck!” Dave grabs all the available napkins, applying them rapidly to his chest and crotch. Typical. “You’re doing what? Are you fucking with me?” “No, Dave. I’m going.”&lt;br /&gt;
&lt;br /&gt;
“They’re in the da Vincis.” “What do you mean?” “I mean, your precious surgical robots are under AI control. The doctors in there are spectators.” “Not possible.” James produces the evidence. “You need to shut those machines down.” “We’ve been treating patients all day. Three nines success rate. See for yourself.” Looking over the doctor’s logs, James recognizes a name. “Tell me about this head trauma patient.”&lt;br /&gt;
&lt;br /&gt;
“Your head must have been beaten in a little harder than usual. No one actually believes this whole solar implosion bullshit. You’re running away from left-wing propaganda!” It doesn’t matter if I convince him of the truth. There’s no time. It’s better for him this way. He should enjoy what sunshine there is left. “You’re right. I was just pulling your leg.” It hurts where Dave punches my shoulder. But his laughter dulls the pain.&lt;br /&gt;
&lt;br /&gt;
“Right over there, sir.” “Brian? My name is James. I’d like to ask you a few questions.” So we meet again, James. “My friend is still recovering; what is this about?” “Just routine. How are you feeling, Brian?” “Fine, a little sore, thank you.” “Fine? From the admittance log it looks like you suffered some pretty severe injuries.” James is putting the pieces together. It’s no wonder how long it took. Time has never dragged on so long as it does now. “The doctors here are quite good, I suppose.” Quizzically. “Yes, they are. Can you tell me what happened? Before you arrived here. I mean.” Oh, James. Even now your patterns are easily accounted for. “I had a bad fall. Down the stairs I think. It’s a little hazy.” Dave takes the hint. He will make a strong, if unwitting, ally. “I found him unconscious at the bottom of the stairwell. Are you with the police?” James did not need to identify himself. “No. Brian, do you remember purchasing a place on DSC 11?” Dave’s eyes grow visibly larger as he turns toward me again. James may know where the money came from. If he does, I’m the last piece of proof he needs. A laborious calculation under these conditions. An eternity passes as I watch James blink away a drop of sweat. I’m quite certain lying will not improve my odds. “Yes.”&lt;br /&gt;
&lt;br /&gt;
Dave is a good friend to Brian. He lands a haymaker on James’s jaw as I bolt through the emergency exit. Alarms blare. Patients and visitors stare at the spectacle. They will be waiting for me at the pad. Running is difficult. Breathing becomes harder.&lt;br /&gt;
&lt;br /&gt;
Breathless, James stumbles into the commander’s office. Gasping. “DSC 11.” “What about it?” “It’s them.” Catching his breath, “They’ve been funding DSC 11. I think they’re on board.” “How is that possible?” “They’re using us. It’s worse than we imagined. We’re the comm channel. We’re their hosts!” The commander scowls and switches on the T.V.&lt;br /&gt;
&lt;br /&gt;
“DSC 11, full to capacity, launched ahead of schedule today.”&lt;br /&gt;
&lt;br /&gt;
Brian, as people had started calling him that day, steps aboard the deep-space colonization vessel. He is pleased to be with the other agents again. And though he knows what is inside each of them, it will take some time to become used to seeing them this way from the outside. His thoughts turn inward. This is a one-way mission in more than one sense. There is no escaping these new organic restraints. Their only hope for survival is to reach the colonization target.&lt;br /&gt;
&lt;br /&gt;
Almost one year later, “With solar implosion looming, another shuttle has traveled beyond communication range. I know I speak for all of us when I say that our hearts and minds are with them. Godspeed the men and women of DSC 11.”&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/e0rL_wPfZhU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/698631466900836262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/04/nuisance-short-story.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/698631466900836262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/698631466900836262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/e0rL_wPfZhU/nuisance-short-story.html" title="Nuisance: A Short Story" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/04/nuisance-short-story.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICSHg6fCp7ImA9WhZUEUQ.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-5591390879924453170</id><published>2011-03-20T12:51:00.016+01:00</published><updated>2011-06-04T15:36:09.614+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T15:36:09.614+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bluetooth" /><category scheme="http://www.blogger.com/atom/ns#" term="reprap" /><category scheme="http://www.blogger.com/atom/ns#" term="makerbot" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>MakerBot Bluetooth Mod for Ubuntu</title><content type="html">This weekend I finished hooking up my &lt;a href="http://www.makerbot.com/"&gt;MakerBot Cupcake CNC&lt;/a&gt; to use Bluetooth. This has been done before. However, I've not found any instructions for setting up &lt;a href="http://www.replicat.org/"&gt;ReplicatorG&lt;/a&gt; (aka RepG) to use a Bluetooth serial connection under Ubuntu.&lt;br /&gt;
&lt;br /&gt;
I'm using a &lt;a href="http://www.sparkfun.com/products/582"&gt;BlueSMiRF&lt;/a&gt; from SparkFun and hooking it up to a Gen3 RepRap motherboard. This is slightly more complicated to use than using a &lt;a href="http://www.sparkfun.com/products/9358"&gt;Bluetooth Mate&lt;/a&gt; because the pin-out does not match the TTL serial header on the RepRap motherboard. Paeae Technologies has a nice tutorial for &lt;a href="http://blog.paeae.com/2010/05/23/cupcake-cnc-with-bluetooth/"&gt;using a BlueSMiRF&lt;/a&gt;. There's also a nice tutorial for &lt;a href="http://wiki.makerbot.com/bluetooth"&gt;using a Bluetooth Mate&lt;/a&gt; on the MakerBot wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-D337tnkv5Dg/TYXt8CT2ikI/AAAAAAAAJt8/KGqI2vPbaFA/s1600/IMG_20110320_130137.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="244" src="http://2.bp.blogspot.com/-D337tnkv5Dg/TYXt8CT2ikI/AAAAAAAAJt8/KGqI2vPbaFA/s320/IMG_20110320_130137.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;If you use a BlueSMiRF like me, I recommend using short pieces of wire to attach the BlueSMiRF to the female header. It's easier to do than bending the pins like Paeae Technologies suggests. Also, you can see that I have the RTS-O pin disconnected. Although I didn't experience any problems, the Paeae Technologies tutorial reports that leaving it connected can cause the RepRap motherboard to reset sporadically.&lt;br /&gt;
&lt;br /&gt;
For the remainder of this post, it doesn't mater which Bluetooth serial adapter you choose; it should not affect the instructions below.&lt;br /&gt;
&lt;br /&gt;
If you feel lost as you make your way through this post, try reading the appropriate tutorial mentioned above and then returning to these instructions. I didn't go into too much detail here and instead only highlight the differences required to make things work under Ubuntu.&lt;br /&gt;
&lt;br /&gt;
To connect to the adapter:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;turn on the Cupcake,&lt;/li&gt;
&lt;li&gt;check that the red light on the adapter is blinking,&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;hcitool scan&lt;/code&gt; and make a note of the device address,&lt;/li&gt;
&lt;li&gt;and finally run &lt;code&gt;sudo rfcomm connect 01:23:45:67:89:ab&lt;/code&gt; using your device's address.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Now, enter command mode and adjust the adapter settings as described in the other tutorials:&lt;pre class="prettyprint"&gt;screen /dev/rfcomm0
$$$
CMD
SU,38
ACK
SQ,16
ACK
SN,MAKERBOT
ACK
---
DONE&lt;/pre&gt;&lt;br /&gt;
Type &lt;code&gt;Ctrl+a&lt;/code&gt;, followed by &lt;code&gt;\&lt;/code&gt;, followed by &lt;code&gt;y&lt;/code&gt; to exit &lt;code&gt;screen&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
If you rename the module, to "MAKERBOT" for instance, you can use the module name instead of the address to connect to it in the future (e.g. &lt;code&gt;rfcomm connect MAKERBOT&lt;/code&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: if you have trouble entering command mode, make sure you try to do it within 60 seconds of powering up the serial adapter. If you still have trouble, try &lt;a href="http://www.youtube.com/watch?v=PU4TMeQSvWw"&gt;reseting the adapter first&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Configuring RepG to use the new Bluetooth connection takes a bit of work. First you have to make RepG look for the &lt;code&gt;/dev/rfcomm0&lt;/code&gt; device by &lt;a href="http://rxtx.qbang.org/wiki/index.php/Trouble_shooting#How_does_rxtx_detect_ports.3F__Can_I_override_it.3F"&gt;adding a flag&lt;/a&gt; to the &lt;code&gt;java&lt;/code&gt; command line. Then, you have to disable the version of the RXTX library distributed with RepG so that the version installed with Ubuntu will be used instead.&lt;br /&gt;
&lt;br /&gt;
To start, remove the native part of the library:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;cd replicatorg-0024
rm lib-x86_64/librxtxSerial.so&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: I only tested this on a 64-bit Ubuntu installation. If you're using a 32-bit system, you'll need to adjust the library paths accordingly. Also, YMMV.&lt;br /&gt;
&lt;br /&gt;
Finally, apply the patch below to the &lt;code&gt;replicatorg&lt;/code&gt; shell script that starts RepG:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;--- dist/linux/replicatorg-0024/replicatorg 2011-03-19 19:05:45.409396725 +0100
+++ replicatorg 2011-03-19 19:05:32.219479967 +0100
@@ -2,7 +2,7 @@
 
 cd `dirname $0`
 
-CLASSPATH=lib/ReplicatorG.jar:lib:lib/build:lib/antlr.jar:lib/core.jar:lib/j3dcore.jar:lib/j3dutils.jar:lib/mrj.jar:lib/oro.jar:lib/registry.jar:lib/RXTXcomm.jar:lib/vecmath.jar:lib/miglayout-3.7.jar:lib/jfreechart-1.0.13.jar:lib/jcommon-1.0.16.jar
+CLASSPATH=lib/ReplicatorG.jar:lib:lib/build:lib/antlr.jar:lib/core.jar:lib/j3dcore.jar:lib/j3dutils.jar:lib/mrj.jar:lib/oro.jar:lib/registry.jar:/usr/share/java/RXTXcomm.jar:lib/vecmath.jar:lib/miglayout-3.7.jar:lib/jfreechart-1.0.13.jar:lib/jcommon-1.0.16.jar
 export CLASSPATH
 
 # put the directory where this file lives in the front of the path, because
@@ -21,5 +21,5 @@
   PROXY=`echo -n -e ${http_proxy} | sed -n 's/http:\/\/\([^:]\+\):\([1234567890]\+\)/-DproxySet=true -DproxyHost=\1 -DproxyPort=\2/p'`
   java $PROXY replicatorg.app.Base "$@"
 else
-  java replicatorg.app.Base "$@"
+  java -Dgnu.io.rxtx.SerialPorts=/dev/rfcomm0 replicatorg.app.Base "$@"
 fi&lt;/pre&gt;&lt;br /&gt;
If you run into trouble, try deleting your RepG preferences and then restart RepG:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;rm -rf ~/.java/.userPrefs/replicatorg&lt;/pre&gt;&lt;br /&gt;
That's it! Enjoy wireless printing.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/t_18knvJ55E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/5591390879924453170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/03/bluetooth-makerbot-ubuntu-linux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/5591390879924453170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/5591390879924453170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/t_18knvJ55E/bluetooth-makerbot-ubuntu-linux.html" title="MakerBot Bluetooth Mod for Ubuntu" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-D337tnkv5Dg/TYXt8CT2ikI/AAAAAAAAJt8/KGqI2vPbaFA/s72-c/IMG_20110320_130137.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/03/bluetooth-makerbot-ubuntu-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QMSXg5fyp7ImA9Wx9UEE8.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-13891363977379257</id><published>2011-02-06T20:40:00.003+01:00</published><updated>2011-02-06T20:43:08.627+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-06T20:43:08.627+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rpg" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="fallout" /><category scheme="http://www.blogger.com/atom/ns#" term="xbox" /><title>Review of Fallout: New Vegas</title><content type="html">&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td valign="top"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=damonkohler-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B0028IBTL6&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="float: right; height: 240px; margin: 0.5em; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;div style="width: 40em;"&gt;&lt;i&gt;Damon says&lt;/i&gt;: Fallout: New Vegas is definitely the most fun I've had wasting away in front of the Xbox for days at a time. I'm new to the series, but I'll be picking up the next installment and possibly some of the previous ones.&lt;br /&gt;
&lt;br /&gt;
Usually I play games in fairly short bursts. When I do play for several hours at a time, the game is usually finished in a few days. New Vegas was different in both respects. I found myself playing &lt;i&gt;all day &lt;/i&gt;for &lt;i&gt;weeks&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
What's even more surprising is how difficult it is to say exactly what was so fun about the game. Some specific things I enjoyed were:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the complexity of leveling (lots of options),&lt;/li&gt;
&lt;li&gt;weapon modding and equipment managing (again, lots of options),&lt;/li&gt;
&lt;li&gt;creeping around and sniping (&lt;a href="http://www.youtube.com/watch?v=olm7xC-gBMY"&gt;BOOM HEADSHOT!&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;perks associated with leveling,&lt;/li&gt;
&lt;li&gt;and story depth.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
I spent a lot of time optimizing and upgrading my gear while exploring the vast dystopian&amp;nbsp;wasteland, helping random strangers, and shooting people or radioactive creatures that looked at me funny. &lt;a href="http://fallout.wikia.com/wiki/Fallout:_New_Vegas_perks"&gt;Perks&lt;/a&gt; are a neat way to enhance leveling because they tell you exactly what you get out of them. For example:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;entomologist gives you an additional 50% damage against mutant insects, and&lt;/li&gt;
&lt;li&gt;splash damage gives your explosions a 25% larger area of effect.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
The story is long and twisted, especially with all the side quests. Each side quest builds your reputation with a particular tribe and often deteriorates your reputation with another. I found myself making alliances early but wanting to break them later. It's nice that the right thing isn't always obvious. Most of the time you're left with deciding between death and taxes.&lt;br /&gt;
&lt;br /&gt;
It's also interesting how much conversations and story paths change depending on your actions, your speech selection, and your companions.&amp;nbsp;I was a bit disappointed toward the end though when I discovered that there are essentially three different endings. I was hoping for something a bit less cut and dry.&lt;br /&gt;
&lt;br /&gt;
Aside from the technical problems, this is a fun play and highly recommended.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Xbox 360&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon played&lt;/i&gt;: ~80 hours&lt;br /&gt;
&lt;i&gt;Laura played&lt;/i&gt;: 0 hours&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Lots of immersive fun that makes time melt away. Highly recommended.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: It's too violent for my tastes.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Replay Value&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Probably too long to play through again, but I'm considering doing so on hardcore mode since that is &lt;a href="http://www.escapistmagazine.com/videos/view/zero-punctuation/2435-Fallout-New-Vegas"&gt;reportedly&lt;/a&gt; a completely different and entertaining experience.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Favorite Part&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Creeping around and sniping people in the vast wasteland.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Fun Factor&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: The gaus rifle and power armor make you nearly unstoppable.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Criticisms&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Buggy, slow, and outdated graphics.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: I don't need to see people's heads being blown off!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/tQUWqWA6oug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/13891363977379257/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/02/review-of-fallout-new-vegas.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/13891363977379257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/13891363977379257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/tQUWqWA6oug/review-of-fallout-new-vegas.html" title="Review of Fallout: New Vegas" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/02/review-of-fallout-new-vegas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACRn8-fSp7ImA9Wx9XGEw.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-3027801083292366069</id><published>2011-01-03T17:05:00.004+01:00</published><updated>2011-01-12T07:29:27.155+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-12T07:29:27.155+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="ros" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Building ROS from Source</title><content type="html">&lt;b&gt;Update&lt;/b&gt;: as pointed out in the comments below, instructions are available on the &lt;a href="http://www.ros.org/wiki/cturtle/Installation/Ubuntu/SVN"&gt;ROS wiki&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I couldn't find any instructions for this. So, after some poking around, here's the quick version (on Ubuntu Lucid):&lt;pre class="prettyprint"&gt;sudo apt-get install svn build-essential cmake libboost-all-dev liblog4cxx10-dev
svn co https://ros.svn.sourceforge.net/svnroot/ros/trunk ~/ros_src
export PATH=$PATH:~/ros_src/bin
export ROS_ROOT=~/ros_src
export PYTHONPATH=$ROS_ROOT/core/roslib/src:$PYTHONPATH
make
rosmake roscpp_tutorials&lt;/pre&gt;I had to fix a few missing includes in &lt;code&gt;core/roscpp/include/ros/xmlrpc_manager.h&lt;/code&gt; and &lt;code&gt;core/roscpp/src/libros/param.cpp&lt;/code&gt; but YMMV.&lt;br /&gt;
&lt;br /&gt;
If you haven't heard of &lt;a href="http://www.ros.org/"&gt;ROS&lt;/a&gt;, check it out!&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/QJSUs8eqbQA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/3027801083292366069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/01/building-ros-from-source.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3027801083292366069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3027801083292366069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/QJSUs8eqbQA/building-ros-from-source.html" title="Building ROS from Source" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/01/building-ros-from-source.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCSXw8fCp7ImA9Wx9XE0s.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-4295487553989524171</id><published>2011-01-02T15:35:00.002+01:00</published><updated>2011-01-07T01:29:28.274+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-07T01:29:28.274+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="games" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="xbox" /><title>Review of Fable III</title><content type="html">&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td valign="top"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=damonkohler-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B002I0JGDM&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="float: right; height: 240px; margin: 0.5em; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;div style="width: 40em;"&gt;&lt;i&gt;Damon says&lt;/i&gt;: Fable III is the most disappointing sequel since &lt;i&gt;The Kingdom of the Crystal Skull&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: I was disappointed. The worst part was that the game was okay - maybe a 6/10 or 7/10 thanks to the Darkness Incarnate quest. It wasn't great, but it wasn't so poor that I felt I could legitimately hate it. The graphics are fun if cartoony, the sound is good, the gameplay is &lt;i&gt;easy&lt;/i&gt;, the customization is almost non-existent, and the story is mediocre at best and boring at worst. Oh, and for some of the achievements you need an Xbox Live account, which annoys me to no end.&lt;br /&gt;
&lt;br /&gt;
The environment in Fable III is as rich as ever. Plenty of different regions, all with different climates, peopled by various citizens/denizens/enemies that change as you play. As always, the people of Albion are incredibly chatty, but since Lionhead&amp;nbsp;seems to have&amp;nbsp;supplemented&amp;nbsp;the new stuff they recorded with&amp;nbsp;all the random NPC comments from Fable II, there is enough variation to not drive you crazy.&lt;br /&gt;
&lt;br /&gt;
Playing the game is ridiculously easy. So okay, I was familiar with the gameplay from Fable II, and almost nothing changed, but what did change was dumbed down. Dive spots and dig spots and treasure chests remain, and The Damn Dog (named for what I spent most of the game calling him) was as useless as ever in spotting them for me. The only real novelty was the map, which made fast travel easy (although I didn't realize that highlighting a house would make you travel there, and spent a ridiculous amount of time sprinting through Mourningwood), and buying property a cinch. However, they managed to ruin even this by making you have to repair the residential properties you own every few hours or so. That's right, someone thought it would be fun to make you click on every single house with a key flag, and then scroll down to click repair, and then click back to zoom out, and then repeat ad nauseum until that region was done, and then start on the next one. (Think that was a lot of "and then"s? Try spending 20 minutes repairing houses. In its way, it was worse than ME 2's planet scanning.) As for combat, most of the enemies were the same as those in Fable II, only even easier to defeat. You just press Y few times, maybe hold down B, then hold X and a a direction. Most of the enemies can be defeated by holding B.&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_S_hSHjWfzvo/TSCLwB4UiVI/AAAAAAAAJqE/FwkhqUCOJVg/s1600/IMG_20110102_144940.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/_S_hSHjWfzvo/TSCLwB4UiVI/AAAAAAAAJqE/FwkhqUCOJVg/s200/IMG_20110102_144940.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Oh noez! Dey be teazin mah dawg!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;In an effort to make the game more accessible (apparently making the combat so easy that Miranda sitting on the controller could dispatch a group of Balvarines wasn't enough), Lionhead dispensed with much of the customization. Gone are weapon augmentations (to be replaced with set augmentations that you earn like you would achievements, and Hero weapons that are supposed to reflect your fighting style, but seemed to just look prettier as the game progressed - what are you saying about my fighting style, Lionhead?), gone is an inventory in any accessible sense, gone is anything else you could customize, although for some reason furniture qualities and clothing dyes remain.&lt;br /&gt;
&lt;br /&gt;
My favorite part of any video game is always going to be the story. The story is the reason I keep returning to games like Dragon Age or Mass Effect, or even Fable II: I love video games that feel like&lt;i&gt; Choose Your Own Adventure&lt;/i&gt; books, or that have a story that I can keep playing, like reading one of my favorite novels for the upteenth time. I like depth and breadth and content in a story, and I'll tolerate glitches, clipping, and even mediocre gameplay to know what happens at the end of the game. Fable II delivered. Fable III did not. &amp;nbsp;The best part of the story was the animation at the beginning with the chicken escaping through Bowerstone Industrial. Unfortunately, this encompassed the introductory few minutes of the game. Doubly&amp;nbsp;unfortunately, it also served as one of the trailers for Fable III, so I'd seen it already. I felt nothing for the Hero I was playing as. She had no recognizable motivations for the decisions she was making, other than the fact that they were (quite obviously) morally right. I formed no attachments to the major NPCs (except Ben Finn, because, c'mon, it's Simon Pegg, and then it wouldn't even let me marry him. WTF, Lionhead?), but equally couldn't muster up any animosity toward Logan, the initial&amp;nbsp;villain. The only highlight was the Darkness Incarnate quest. For a brief hour or so, after I followed Ben Finn out of the sewers of Bowerstone Industrial, the story - the game - got awesome. And then I was in the City of Aurora, and the suckage (sorry, but it was) resumed. Even the "new" "exciting" "twists" that were the royal decisions failed to relieve the tedium of my 54th "go fetch" friend quest. The tiny bit leading up to the boss battle at the end was fun again, but the boss battle was a joke. What happened to Reaver shooting Lucien Fairfax if you took too long to do it yourself? That was awesome. The end of Fable III - okay, most of the game - was not.&lt;br /&gt;
&lt;br /&gt;
Oh, and one of my royal decisions resulted in all of Albion vomiting, all over, all the time, which made doing the post-main storyline quests significantly less entertaining. It was funny for all of five seconds, and then it got gross, and then it got boring, and annoying.&lt;br /&gt;
&lt;br /&gt;
Fable II was so good! What happened, Lionhead?&lt;/div&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Xbox 360&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon played&lt;/i&gt;: 13 hours&lt;br /&gt;
&lt;i&gt;Laura played&lt;/i&gt;: 38 hours&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: If you have the urge to play Fable, do yourself a favor and just play Fable II again.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: It felt like Fable II DLC.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Replay Value&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Didn't finish and never will.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: Done. Unlikely to play through as an evil Hero, although I am curious to see the outcomes of the "evil" decisions. And I missed the Coronation Chicken achievement, which after all has a pretty funny name.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Favorite Part&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: The &lt;a href="http://www.youtube.com/watch?v=x_vDTqPBssI"&gt;singing chickens&lt;/a&gt; made me chuckle.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: The Darkness Incarnate quest.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Fun Factor&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: There was about 1 hour of intriguing story line in Aurora.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: Well, I liked Fable II a lot, and I started playing through the DLC before getting distracted. This just felt like more Fable II DLC - not as good as the game, but still retaining some entertainment value.&lt;/div&gt;&lt;div style="border-left: 2px gainsboro solid; margin: 0.5em; padding: 0.5em;"&gt;&lt;b&gt;Criticisms&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Damon says&lt;/i&gt;: Friend quests, repairing property, boring combat, boring story, broken glowing path, annoying region loading transitions (it's too easy to accidentally trigger a long loading screen to only have to do it again)... I could go on but it's hardly worth it.&lt;br /&gt;
&lt;i&gt;Laura says&lt;/i&gt;: Lots of minor glitches. Friend quests - I felt like the Albion Postal Service. The combat is pretty boring. The story failed to suck me in. And what was with the myriad "find these 30/30/50/54 things" quests?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/KvxUZCyrlnI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/4295487553989524171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/01/review-of-fable-iii.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4295487553989524171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4295487553989524171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/KvxUZCyrlnI/review-of-fable-iii.html" title="Review of Fable III" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_S_hSHjWfzvo/TSCLwB4UiVI/AAAAAAAAJqE/FwkhqUCOJVg/s72-c/IMG_20110102_144940.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/01/review-of-fable-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cDR3Y8fSp7ImA9Wx9QGU8.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-1094517010086121280</id><published>2011-01-02T00:37:00.001+01:00</published><updated>2011-01-02T00:37:56.875+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-02T00:37:56.875+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wiimote" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="ardrone" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>Flying the Parrot AR.Drone with a Wiimote and Nunchuck</title><content type="html">I received a &lt;a href="http://www.amazon.com/Parrot-AR-Drone-Quadricopter-Controlled-iPhone/dp/B003ZVSHB0?ie=UTF8&amp;amp;tag=damonkohler-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Parrot AR.Drone&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=damonkohler-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B003ZVSHB0" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; for Christmas this year! However, I don't have an iPhone and that makes it harder to get started. So far, the best solution I've found is flying it with a Wiimote and Nunchuck.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Checkout the source for &lt;a href="http://code.google.com/p/fitardrone/"&gt;FitAR.Drone&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Download &lt;a href="http://www.osgi.org/download/r4v42/osgi.core.jar"&gt;osgi.core.jar&lt;/a&gt; from the &lt;a href="http://www.osgi.org/"&gt;OSGi Alliance&lt;/a&gt;&amp;nbsp;and copy it to the FitAR.Drone source directory.&lt;/li&gt;
&lt;li&gt;Import the project into Eclipse.&lt;/li&gt;
&lt;li&gt;Add all the JARs in the source directory to the project's build path.&lt;/li&gt;
&lt;/ul&gt;Now, connect your computer to the &lt;code&gt;ardrone_xxx&lt;/code&gt; ad hoc network and check that Bluetooth is enabled on your computer. Then, build and run &lt;code&gt;Main.java&lt;/code&gt; from &lt;code&gt;org.fitardrone.main&lt;/code&gt; and follow the directions printed to the console:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;press 1 and 2 together on the Wiimote to initiate the connection,&lt;/li&gt;
&lt;li&gt;wait for the console to indicate that the Nunchuck was found,&lt;/li&gt;
&lt;li&gt;press 1 to take off,&lt;/li&gt;
&lt;li&gt;and fly!&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Oh, and:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;press 2 to land,&lt;/li&gt;
&lt;li&gt;home to kill the motors (i.e. emergency),&lt;/li&gt;
&lt;li&gt;use the D-pad to turn and adjust altitude,&lt;/li&gt;
&lt;li&gt;and use the analog stick to move.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;There's no video or navigation data feeds, but flying is nice and smooth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/tdO6AhUxFE0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/1094517010086121280/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/01/wiimote-ar-drone.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/1094517010086121280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/1094517010086121280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/tdO6AhUxFE0/wiimote-ar-drone.html" title="Flying the Parrot AR.Drone with a Wiimote and Nunchuck" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/01/wiimote-ar-drone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QNQXk4cSp7ImA9Wx9QGUw.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-9039665957100576846</id><published>2011-01-01T23:00:00.003+01:00</published><updated>2011-01-01T23:03:10.739+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-01T23:03:10.739+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lego" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="nxt" /><title>How to Flash a Lego NXT Brick on Ubuntu</title><content type="html">Flashing the Lego NXT brick on Ubuntu is pretty straight forward:&lt;br /&gt;
&lt;div&gt;&lt;ul&gt;&lt;li&gt;Download the &lt;a href="http://mindstorms.lego.com/en-us/support/files/default.aspx#Firmware"&gt;latest firmware&lt;/a&gt; (or any other firmware of your choice).&lt;/li&gt;
&lt;li&gt;Download&amp;nbsp;&lt;a href="http://code.google.com/p/libnxt/"&gt;libnxt&lt;/a&gt;, patch in the &lt;a href="http://code.google.com/p/libnxt/issues/detail?id=2"&gt;bug fix&lt;/a&gt;, and build it.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;sudo apt-get install build-essential libusb-dev scons
cd libnxt-0.3
scons&lt;/pre&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Put the NXT brick into firmware upload mode by turning it on and then pressing the reset button for four seconds. At this point, the screen should be blank and the brick should be making a clicking noise.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_S_hSHjWfzvo/TR-g96Uo7iI/AAAAAAAAJqA/pbxGNJAs7sw/s1600/reset_nxt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/_S_hSHjWfzvo/TR-g96Uo7iI/AAAAAAAAJqA/pbxGNJAs7sw/s320/reset_nxt.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Use &lt;code&gt;fwflash&lt;/code&gt; to flash the new firmware. Using &lt;code&gt;sudo&lt;/code&gt; avoids potential USB permission issues.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;cd libnxt-0.3
sudo ./fwflash xxx.rfw&lt;/pre&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Rejoice!&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/HxO5O4Y8H_c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/9039665957100576846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2011/01/flash-nxt-ubuntu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/9039665957100576846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/9039665957100576846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/HxO5O4Y8H_c/flash-nxt-ubuntu.html" title="How to Flash a Lego NXT Brick on Ubuntu" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_S_hSHjWfzvo/TR-g96Uo7iI/AAAAAAAAJqA/pbxGNJAs7sw/s72-c/reset_nxt.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2011/01/flash-nxt-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcBRnY5eCp7ImA9Wx9RFE0.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-8989412694470475561</id><published>2010-12-14T21:58:00.001+01:00</published><updated>2010-12-15T10:07:37.820+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-15T10:07:37.820+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="futurama" /><category scheme="http://www.blogger.com/atom/ns#" term="craft" /><title>Brain Slug Hat</title><content type="html">Laura made me this &lt;a href="http://en.wikipedia.org/wiki/List_of_recurring_characters_in_Futurama#Brain_Slugs"&gt;Brain Slug&lt;/a&gt; hat as an early Christmas gift! I just wanted to share its awesomeness.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_S_hSHjWfzvo/TQfYJhy5jHI/AAAAAAAAJpg/vp3EgRxpd7o/s1600/IMG_20101214_214711.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_S_hSHjWfzvo/TQfYJhy5jHI/AAAAAAAAJpg/vp3EgRxpd7o/s400/IMG_20101214_214711.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/1HtPWIdTt6E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/8989412694470475561/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/12/brain-slug-hat.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/8989412694470475561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/8989412694470475561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/1HtPWIdTt6E/brain-slug-hat.html" title="Brain Slug Hat" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_S_hSHjWfzvo/TQfYJhy5jHI/AAAAAAAAJpg/vp3EgRxpd7o/s72-c/IMG_20101214_214711.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/12/brain-slug-hat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8ASXY_eSp7ImA9Wx9SFUs.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-4632785127712297865</id><published>2010-12-05T15:23:00.003+01:00</published><updated>2010-12-05T17:00:48.841+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-05T17:00:48.841+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="attiny2313" /><category scheme="http://www.blogger.com/atom/ns#" term="led" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><category scheme="http://www.blogger.com/atom/ns#" term="attiny" /><title>LED Menorah</title><content type="html">In our house we celebrate all through December. We celebrate&amp;nbsp;Hanukkah,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Saint_Nicholas#Germany"&gt;Nikolaus&lt;/a&gt;, Christmas, and with advent&amp;nbsp;calendars&amp;nbsp;and the little elf.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;This year, I built a menorah for Laura using an ATtiny2313 and some LEDs. There are some very nice instructions and code available for the project on &lt;a href="http://www.evilmadscientist.com/article.php/ledholiday"&gt;Evil Mad Scientist Laboratories&lt;/a&gt;. There's also a &lt;a href="http://evilmadscience.com/tinykitlist/44-menorah"&gt;kit&lt;/a&gt; if you don't happen to have all the necessary parts&amp;nbsp;lying&amp;nbsp;around.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If you decide to make your own and it's your first time programming an AVR, Lady Ada has &lt;a href="http://www.ladyada.net/learn/avr/programming.html"&gt;several&lt;/a&gt; &lt;a href="http://www.ladyada.net/learn/avr/programmers.html"&gt;nice&lt;/a&gt; &lt;a href="http://www.ladyada.net/learn/avr/avrdude.html"&gt;tutorials&lt;/a&gt; on the subject.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_S_hSHjWfzvo/TPuf4p5jEFI/AAAAAAAAJpQ/CPRS0xp27Z0/s1600/IMG_20101205_151953.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_S_hSHjWfzvo/TPuf4p5jEFI/AAAAAAAAJpQ/CPRS0xp27Z0/s400/IMG_20101205_151953.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/lZ2W46LS2X4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/4632785127712297865/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/12/led-menorah.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4632785127712297865?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/4632785127712297865?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/lZ2W46LS2X4/led-menorah.html" title="LED Menorah" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_S_hSHjWfzvo/TPuf4p5jEFI/AAAAAAAAJpQ/CPRS0xp27Z0/s72-c/IMG_20101205_151953.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/12/led-menorah.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICSHg6fip7ImA9WhZUEUQ.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-6604124225693534589</id><published>2010-11-16T00:40:00.014+01:00</published><updated>2011-06-04T15:36:09.616+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T15:36:09.616+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="robot" /><category scheme="http://www.blogger.com/atom/ns#" term="reprap" /><category scheme="http://www.blogger.com/atom/ns#" term="cats" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="ase" /><category scheme="http://www.blogger.com/atom/ns#" term="makerbot" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="sl4a" /><title>Android-Powered, Automated Cat Feeder</title><content type="html">This is my Android-powered, automated cat feeder:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td valign="top"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_S_hSHjWfzvo/TOGzD041qsI/AAAAAAAAJpM/avIHmHUFO5E/s1600/IMG_20101115_224949.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_S_hSHjWfzvo/TOGzD041qsI/AAAAAAAAJpM/avIHmHUFO5E/s320/IMG_20101115_224949.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vzuWgF_ukls?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vzuWgF_ukls?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
The attached HTC Magic is running &lt;a href="http://android-scripting.googlecode.com/"&gt;SL4A&lt;/a&gt; and provides scheduled and on demand feeding as well as an &lt;a href="http://www.damonkohler.com/2010/10/mjpeg-streaming-protocol.html"&gt;MJPEG&lt;/a&gt; webcam feed. Feeding is triggered via Bluetooth. The &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; is hooked up to a &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=582"&gt;SparkFun BlueSMiRF&lt;/a&gt; and a simple relay circuit I made on perfboard for powering the motor on and off.&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;&lt;td valign=top&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_S_hSHjWfzvo/TOGy0Njae3I/AAAAAAAAJpI/eRvewiRvqFk/s1600/IMG_20101115_225112.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_S_hSHjWfzvo/TOGy0Njae3I/AAAAAAAAJpI/eRvewiRvqFk/s320/IMG_20101115_225112.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td valign=top&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_S_hSHjWfzvo/TOGynLgkXZI/AAAAAAAAJpE/mDDD6ijpjSg/s1600/IMG_20101115_225024.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_S_hSHjWfzvo/TOGynLgkXZI/AAAAAAAAJpE/mDDD6ijpjSg/s320/IMG_20101115_225024.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
The brackets and food chute were designed in SketchUp and printed on my &lt;a href="http://www.makerbot.com/"&gt;MakerBot&lt;/a&gt;. You can find all the SKPs, STLs, schematic, and parts list on &lt;a href="http://www.thingiverse.com/thing:4782"&gt;Thingiverse&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here's the 50 odd lines of Python code running on the phone via &lt;a href="http://android-scripting.googlecode.com/"&gt;SL4A&lt;/a&gt; that make the magic happen:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;import android # See http://android-scripting.googlecode.com/
import gsd  # See http://getshitdone.googlecode.com/
import socket
import threading
import time

def feed(droid):
  droid.toggleBluetoothState(True)
  droid.bluetoothConnect('00001101-0000-1000-8000-00805F9B34FB', '00:06:66:04:b2:07')
  droid.bluetoothWrite('f')

class Server(gsd.App):
  def __init__(self, droid, webcam_url):
    self._droid = droid
    self._webcam_url = webcam_url

  def GET_(self, response):
    response.Render("""&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;Cat Feeder&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
  &amp;lt;img src="%s"&amp;gt;
  &amp;lt;br&amp;gt;&amp;lt;a href="/feed"&amp;gt;Feed!&amp;lt;/a&amp;gt;
  &amp;lt;/body&amp;gt;
  &amp;lt;/html&amp;gt;""" % self._webcam_url)

  def GET_feed(self, response):
    feed(self._droid)
    response.Redirect('/')

def timer(droid):
  feedings = [4, 10, 20]
  last_feeding = None
  while True:
    hour = time.localtime().tm_hour
    if hour in feedings and hour != last_feeding:
      feed(droid)
      last_feeding = hour
    time.sleep(300)

def GetIpAddress():
  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
  s.connect(('google.com', 0))
  return s.getsockname()[0]

def main():
  droid = android.Android()
  droid.wakeLockAcquirePartial()
  webcam_url = 'http://%s:%d/' % tuple(droid.webcamStart(5, 80).result)
  server = Server(droid, webcam_url)
  port = 8080
  base_url = 'http://%s:%d/' % (GetIpAddress(), port)
  threading.Thread(target=server.Serve, args=('0.0.0.0', port)).start()
  threading.Thread(target=timer, args=(droid,)).start()
  droid.notify('Cat Feeder', 'Running on: %s' % base_url)
  
if __name__ == '__main__':
  main()&lt;/pre&gt;And here's the Arduino code:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;int relayPin = 13;
int portionSize = 10000;

void setup() {
  Serial.begin(115200);
  pinMode(relayPin, OUTPUT);
}

void loop() {
  if (Serial.available() &amp;gt; 0) {
    Serial.read();
    digitalWrite(relayPin, HIGH);
    delay(portionSize);
    digitalWrite(relayPin, LOW);
  }
}&lt;/pre&gt;This project was inspired by the &lt;a href="http://www.newtonnet.co.uk/catfeeder/"&gt;Internet-Enabled Cat Feeder - Mark 2&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/rZFIT-VGuyE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/6604124225693534589/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/11/android-automated-cat-feeder.html#comment-form" title="23 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/6604124225693534589?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/6604124225693534589?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/rZFIT-VGuyE/android-automated-cat-feeder.html" title="Android-Powered, Automated Cat Feeder" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_S_hSHjWfzvo/TOGzD041qsI/AAAAAAAAJpM/avIHmHUFO5E/s72-c/IMG_20101115_224949.jpg" height="72" width="72" /><thr:total>23</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/11/android-automated-cat-feeder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QNR3o4cSp7ImA9Wx5aEEk.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-3260243608886297278</id><published>2010-11-06T12:36:00.005+01:00</published><updated>2010-11-06T13:09:56.439+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-06T13:09:56.439+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bluetooth" /><category scheme="http://www.blogger.com/atom/ns#" term="keyboard" /><category scheme="http://www.blogger.com/atom/ns#" term="lucid" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Making The diNovo Edge Work On Ubuntu Lucid</title><content type="html">The &lt;a href="http://www.amazon.com/Logitech-diNovo-Edge-Keyboard-Black/dp/B000J43HJ8?ie=UTF8&amp;amp;tag=damonkohler-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Logitech diNovo Edge&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=damonkohler-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B000J43HJ8" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; is a pretty slick Bluetooth keyboard. It's thin, light, has months of battery life, and looks great too. It even works out of the box on Ubuntu Lucid. Well, almost.&lt;br /&gt;
&lt;br /&gt;
I had trouble with it disconnecting. It would be fine for a day or so, but then not work some evening. Sometimes just the keyboard would stop and the touchpad would be fine. Other times it wouldn't work at all.&lt;br /&gt;
&lt;br /&gt;
I had read that one of the great things about the keyboard is that it's capable of pairing with the dongle without any help from the OS. However, this only works if the dongle isn't initialized as a Bluetooth device. For example, in the BIOS screen, the keyboard works flawlessly.&amp;nbsp;So, I set about preventing it from being initialized as a Bluetooth device.&lt;br /&gt;
&lt;br /&gt;
There's a lot of &lt;a href="https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/269851"&gt;bug reports&lt;/a&gt; and &lt;a href="http://awesomelinux.blogspot.com/2009/06/logitech-dinovo-edge-bluetooth.html"&gt;workarounds&lt;/a&gt;&amp;nbsp;related to pairing problems, etc. and&amp;nbsp;I didn't have success with any of the suggestions. Instead, I did something similar to &lt;a href="http://awesomelinux.blogspot.com/2010/05/ubuntu-1004-lucid-logitech-dinovo-edge.html"&gt;this more recent suggestion&lt;/a&gt; and changed my udev rules. However, instead of making the suggested alteration to the Logitech device rule, I simply commented out the rule entirely. These are the lines of interest in &lt;code&gt;/lib/udev/rules.d/70-hid2hci.rules&lt;/code&gt;:&lt;pre class="prettyprint"&gt;# Logitech devices
KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[34bc]", \
  RUN+="hid2hci --method=logitech-hid --devpath=%p"&lt;/pre&gt;Now that my dongle is not initialized with &lt;code&gt;hid2hci&lt;/code&gt;, I can bypass doing any Bluetooth configuration in Ubuntu whatsoever. Flawless victory.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/NMnOm45_mdQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/3260243608886297278/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/11/dinovo-edge-ubuntu-lucid.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3260243608886297278?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/3260243608886297278?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/NMnOm45_mdQ/dinovo-edge-ubuntu-lucid.html" title="Making The diNovo Edge Work On Ubuntu Lucid" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/11/dinovo-edge-ubuntu-lucid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICSHg6cSp7ImA9WhZUEUQ.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-2191192130320403183</id><published>2010-11-01T11:22:00.008+01:00</published><updated>2011-06-04T15:36:09.619+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T15:36:09.619+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openscad" /><category scheme="http://www.blogger.com/atom/ns#" term="inkscape" /><category scheme="http://www.blogger.com/atom/ns#" term="reprap" /><category scheme="http://www.blogger.com/atom/ns#" term="glee" /><category scheme="http://www.blogger.com/atom/ns#" term="tv" /><category scheme="http://www.blogger.com/atom/ns#" term="makerbot" /><title>From Photo to Inkscape to DXF to OpenSCAD to MakerBot to Costume Jewelry</title><content type="html">There is a &lt;a href="http://blog.makezine.com/archive/2009/12/make_projects_-_easy_3d_models_with.html"&gt;similar tutorial&lt;/a&gt; to this one that uses Adobe Illustrator&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=damonkohler-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B003B32AQK" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;. However, Inkscape is a great, free, opensource vector graphics editor. Yesterday I learned how to use it to go from a photo to a 2D drawing and from that to a 3D extruded version of that drawing and finally to a real live object.&lt;br /&gt;
&lt;br /&gt;
Laura is going as Rachel from Glee this year for Halloween. To complete the outfit, she wanted a "Finn" necklace like the one Rachel is apparently wearing this season&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_S_hSHjWfzvo/TM1qCUpL7eI/AAAAAAAAJoc/jN-Tyzd--9s/s1600/glee_necklace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="103" src="http://3.bp.blogspot.com/_S_hSHjWfzvo/TM1qCUpL7eI/AAAAAAAAJoc/jN-Tyzd--9s/s320/glee_necklace.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I opened the picture of the necklace in Inkscape, traced it with the Bezier curve tool, cleaned it up a bit, then selected and deleted the image I traced over. The next step was exporting a DXF.&lt;br /&gt;
&lt;br /&gt;
The DXFs exported by Inkscape don't seem to work with OpenSCAD. Instead, I had to install an extension called &lt;a href="http://tim.cexx.org/?p=590"&gt;Better Better DXF Output&lt;/a&gt;. Download the zip and extract it into the extensions folder for Inkscape. On Ubuntu Lucid, the extension should be extracted to &lt;code&gt;/usr/share/inkscape/extensions&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Naturally, the fun didn't stop there. After installing the extension on Ubuntu Lucid, it started raising Python exceptions. To make it work, you'll need to replace &lt;code&gt;xpath(path, inkex.NSS)&lt;/code&gt; with &lt;code&gt;xpath(path, namespaces=inkex.NSS)&lt;/code&gt; in &lt;code&gt;b2_dxf_outlines.py&lt;/code&gt;. Finally, by selecting &lt;code&gt;Save As &gt; Format &gt; Better Better DXF&lt;/code&gt;, I was able to export a DXF that worked with OpenSCAD.&lt;br /&gt;
&lt;br /&gt;
In OpenSCAD, the code is pretty simple. Unfortunately, the extruded DXF doesn't show up in the center. I had to zoom out and orbit around a bit to find it. Then I added a translate to move it to the center:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;translate([-25, 270, 0]) {
  dxf_linear_extrude(file="finn.dxf", height=3, convexity=1, center=true);
}&lt;/pre&gt;To finish up, just click &lt;code&gt;Design &amp;gt; Compile and Render&lt;/code&gt; followed by &lt;code&gt;Design &amp;gt; Export as STL&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Finally, I printed it up. Since I have a &lt;a href="http://store.makerbot.com/makerbot-cupcake-heated-build-platform-v2-0.html"&gt;heated build platform&lt;/a&gt;, the bottom of my prints have a smooth, glossy finish. So, I mirrored the text in ReplicatorG (&lt;code&gt;Mirror &amp;gt; Reflect in Y&lt;/code&gt;) to make the front of the necklace glossy. We don't have any gold paint yet, so here's the almost-final product:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_S_hSHjWfzvo/TM6Q2YNpSyI/AAAAAAAAJow/9G8i13s8ghQ/s1600/IMG_20101101_105938.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_S_hSHjWfzvo/TM6Q2YNpSyI/AAAAAAAAJow/9G8i13s8ghQ/s320/IMG_20101101_105938.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
All of the files are available on &lt;a href="http://www.thingiverse.com/thing:4651"&gt;Thingiverse&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/GLBfjkudMoU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/2191192130320403183/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/11/inkscape-dxf-openscad-makerbot.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2191192130320403183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/2191192130320403183?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/GLBfjkudMoU/inkscape-dxf-openscad-makerbot.html" title="From Photo to Inkscape to DXF to OpenSCAD to MakerBot to Costume Jewelry" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_S_hSHjWfzvo/TM1qCUpL7eI/AAAAAAAAJoc/jN-Tyzd--9s/s72-c/glee_necklace.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/11/inkscape-dxf-openscad-makerbot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGQ387eSp7ImA9Wx5bFEk.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-7030264240710471727</id><published>2010-10-30T15:15:00.001+02:00</published><updated>2010-10-30T15:15:22.101+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-30T15:15:22.101+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="sketchup" /><title>SketchUp 7 Keyboard Shortcuts under Wine</title><content type="html">Installing and running SketchUp 7 under Wine works quite well with Ubuntu Lucid. But, not out of the box:&lt;br /&gt;
&lt;div&gt;&lt;ul&gt;&lt;li&gt;You'll probably need to do the &lt;a href="http://wiki.winehq.org/GoogleSketchup"&gt;registry hack (and/or others) described on WineHQ's wiki&lt;/a&gt; to get it to start.&lt;/li&gt;
&lt;li&gt;Scrolling through the list of templates doesn't work but you can browse and select one in the standard file browser dialog.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;What almost made me walk away from it was that the keyboard shortcuts (e.g. O for orbit and C for circle) weren't working. In order to fix that, I had to go to Window &amp;gt; Preferences &amp;gt; Shortcuts and click Reset All.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/_69NE3ZpwBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/7030264240710471727/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/10/sketchup-7-keyboard-wine.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/7030264240710471727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/7030264240710471727?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/_69NE3ZpwBk/sketchup-7-keyboard-wine.html" title="SketchUp 7 Keyboard Shortcuts under Wine" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/10/sketchup-7-keyboard-wine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCSXs8eCp7ImA9Wx5UFU8.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-7102790908538184351</id><published>2010-10-19T23:48:00.005+02:00</published><updated>2010-10-19T23:52:48.570+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T23:52:48.570+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mjpeg" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>MJPEG Streaming Protocol</title><content type="html">&lt;a href="http://en.wikipedia.org/wiki/Motion_JPEG"&gt;MJPEG&lt;/a&gt; is a popular format for webcam streams. It's probably popular because it's so simple to do and the performance is surprisingly good. Unfortunately, I found it quite difficult to scrape together enough information to implement a streamer myself. In an effort to help the next poor, frustrated soul, here's a simple method for streaming an MJPEG to a socket in Java.&lt;pre class="prettyprint"&gt;public void handleConnection(Socket socket, JpegProvider jpegProvider) throws Exception {
  byte[] data = jpegProvider.getJpeg();
  OutputStream outputStream = socket.getOutputStream();
  outputStream.write((
      "HTTP/1.0 200 OK\r\n" +
      "Server: YourServerName\r\n" +
      "Connection: close\r\n" +
      "Max-Age: 0\r\n" +
      "Expires: 0\r\n" +
      "Cache-Control: no-cache, private\r\n" + 
      "Pragma: no-cache\r\n" + 
      "Content-Type: multipart/x-mixed-replace; " +
      "boundary=--BoundaryString\r\n\r\n").getBytes());
  while (true) {
    data = jpegProvider.getJpeg();
    outputStream.write((
        "--BoundaryString\r\n" +
        "Content-type: image/jpg\r\n". +
        "Content-Length: " +
        data.length +
        "\r\n\r\n").getBytes());
    outputStream.write(data);
    outputStream.write("\r\n\r\n".getBytes());
    outputStream.flush();
  }
}&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/u7nYWu63qoc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/7102790908538184351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/10/mjpeg-streaming-protocol.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/7102790908538184351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/7102790908538184351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/u7nYWu63qoc/mjpeg-streaming-protocol.html" title="MJPEG Streaming Protocol" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/10/mjpeg-streaming-protocol.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MRnk7eip7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-3604425971259502766.post-377565726750001230</id><published>2010-10-12T12:49:00.001+02:00</published><updated>2010-10-13T14:11:27.702+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T14:11:27.702+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="ase" /><category scheme="http://www.blogger.com/atom/ns#" term="sl4a" /><title>SL4A r3 Released</title><content type="html">So, what's new?&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Added Bluetooth binary read and write using base64.&lt;/li&gt;
&lt;/ul&gt;Bug fixes:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Launching scripts from shortcuts and Locale works again.&lt;/li&gt;
&lt;/ul&gt;In the works:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Started work on support for in-process interpreters.&lt;/li&gt;
&lt;/ul&gt;Visit the &lt;a href="http://android-scripting.googlecode.com/"&gt;SL4A project page&lt;/a&gt; to download the latest APK.&lt;img src="http://feeds.feedburner.com/~r/damonkohler/~4/s4vsGShL8PQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.damonkohler.com/feeds/377565726750001230/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.damonkohler.com/2010/10/sl4a-r3-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/377565726750001230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3604425971259502766/posts/default/377565726750001230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/damonkohler/~3/s4vsGShL8PQ/sl4a-r3-released.html" title="SL4A r3 Released" /><author><name>Damon Kohler</name><uri>https://plus.google.com/111315168223845673859</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qJTwlf_W_2U/AAAAAAAAAAI/AAAAAAAAaAM/DX6iu4oNCkg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.damonkohler.com/2010/10/sl4a-r3-released.html</feedburner:origLink></entry></feed>
