<?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;DUMCRX0_eyp7ImA9WhFTFUk.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374</id><updated>2013-06-07T05:37:44.343+10:00</updated><category term="pongerator" /><category term="procrasti-bot" /><category term="mozzy" /><category term="gnomecam" /><category term="display" /><category term="admin" /><category term="sms" /><category term="news" /><category term="editorial" /><category term="UI" /><category term="solar engine" /><category term="remember the milk" /><category term="ez0" /><category term="picopter" /><category term="android apps" /><category term="site admin" /><category term="xy table" /><category term="micro-walker" /><category term="xyz table" /><category term="BEAM" /><category term="python" /><category term="sensors" /><category term="motor control" /><category term="vibrovore" /><category term="rss" /><category term="the brains" /><category term="video" /><category term="eclipse" /><category term="speedometer" /><category term="php rss aggregator" /><category term="arduino" /><category term="opencv" /><category term="reviews" /><category term="php" /><category term="how-to" /><category term="circuit diagrams" /><category term="chassis" /><category term="gps" /><category term="picaxe" /><category term="computer vision" /><category term="software" /><category term="twitter" /><category term="cmu-blue" /><category term="beat dialer" /><category term="statistics" /><category term="sythe" /><category term="google calculator" /><category term="lcd" /><category term="cmucam" /><title>thisismyrobot</title><subtitle type="html">Littered with robots and python code</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.thisismyrobot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>114</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/Thisismyrobot" /><feedburner:info uri="thisismyrobot" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Thisismyrobot</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C08GSH4_fSp7ImA9WhBRGUU.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-8622814379622593743</id><published>2013-03-11T17:03:00.002+11:00</published><updated>2013-03-11T17:03:49.045+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-11T17:03:49.045+11:00</app:edited><title>Python iRacing API client</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-aCZc6F2u7o8/UT1tGs5xLHI/AAAAAAAABCE/YT3eRACWqhg/s1600/iracing.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-aCZc6F2u7o8/UT1tGs5xLHI/AAAAAAAABCE/YT3eRACWqhg/s400/iracing.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;Some of you will already know that I am a massive fan of the racing simulator &lt;a href="http://www.iracing.com/" target="_blank"&gt;iRacing&lt;/a&gt;. I signed up to this "game" a couple of years ago and it's lead to the purchase of new computers, steering wheels and even a dedicated "racing seat".&lt;br /&gt;
&lt;br /&gt;
What I've always wanted to do was build a basic motion rig for the game, something that at least would represent lateral acceleration to give me a better idea of my grip limits when driving. The first step towards this is parsing the telemetry from the game.&lt;br /&gt;
&lt;br /&gt;
iRacing has a telemetry API that's&amp;nbsp;&lt;u&gt;solely&lt;/u&gt;&amp;nbsp;documented in the manner of a demo client built from a pile of C code. Whilst I am certainly capable of programming in C, my preference is definitely my pet language, Python. Some brave souls have built clients in C#, but that isn't much better *&lt;br /&gt;
&lt;br /&gt;
Aside from my own bias, Python is a really nice language to use as a new programmer, so developing this client should allow for more people to develop iRacing add-ons which can only be a good thing!&lt;br /&gt;
&lt;br /&gt;
Anyway, I decided to build a Python implementation of a client for iRacing. The API uses a memory mapped file, something Python happily &lt;a href="http://docs.python.org/2/library/mmap.html" target="_blank"&gt;supports out of the box&lt;/a&gt;, as well as C data structures for all the high-frequency telemetry which I was able to parse using &lt;a href="http://docs.python.org/2/library/struct.html" target="_blank"&gt;Python's struct module&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
As I was secretly hoping, Python's dynamic-programming abilities allowed me to write a client in short order, using very little code.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="https://github.com/thisismyrobot/python-iracing-api" target="_blank"&gt;code's right here on GitHub&lt;/a&gt;. It's, honestly, quite rough-and-ready, but it works. Please do let me know if you have success or problems with it, I'll do my best to help out. I expect it'll be updated regularly, or whenever I find a bug...&lt;br /&gt;
&lt;br /&gt;
You'll have to extend and modify it to work with your application, but that's half the fun - enjoy! :)&lt;br /&gt;
&lt;br /&gt;
* Whilst I'm not a huge fan of C#, the in-line debugging/inspection functionality in Visual Studio was a god-send when applied it to the C# demo client.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/54Gmun02KOg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/8622814379622593743/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2013/03/python-iracing-api-client.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8622814379622593743?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8622814379622593743?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/54Gmun02KOg/python-iracing-api-client.html" title="Python iRacing API client" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-aCZc6F2u7o8/UT1tGs5xLHI/AAAAAAAABCE/YT3eRACWqhg/s72-c/iracing.PNG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2013/03/python-iracing-api-client.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MNQHcyeyp7ImA9WhNaEks.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-7809583435694557276</id><published>2013-01-27T17:51:00.000+11:00</published><updated>2013-01-27T17:51:31.993+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-27T17:51:31.993+11:00</app:edited><title>My home audio streaming setup</title><content type="html">As a slightly different post I thought I'd share the details of my multi-room audio streaming setup.&lt;br /&gt;
&lt;br /&gt;
There's nothing special about it, but it's a very simple and cheap system that actually works really well, allowing multiple sources and speakers (with simultaneous playback), across a range of hardware and operating systems. I'm not going to link to every app and provide installation guides, that's what Google's for :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The components&lt;/b&gt;&lt;br /&gt;
PC 1&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Role(s): Source + destination +&amp;nbsp;media share&lt;/li&gt;
&lt;li&gt;OS: Windows 7&lt;/li&gt;
&lt;li&gt;Software: iTunes (source), Shairport4w (destination), Air Playit HD (media share)&lt;/li&gt;
&lt;/ul&gt;
PC 2&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Role(s): Source + destination + media share&lt;/li&gt;
&lt;li&gt;OS: Windows 7&lt;/li&gt;
&lt;li&gt;Software: Airfoil (source), Shairport4w (destination), Air Playit HD (media share)&lt;/li&gt;
&lt;/ul&gt;
Raspberry Pi&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Role(s): Destination&lt;/li&gt;
&lt;li&gt;OS: Rasbian "wheezy"&lt;/li&gt;
&lt;li&gt;Software: shairport&lt;/li&gt;
&lt;/ul&gt;
iPad 2&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Role(s): Media share -&amp;gt; destination bridge&lt;/li&gt;
&lt;li&gt;OS: iOS 6&lt;/li&gt;
&lt;li&gt;Software: Air Playit HD&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;How it all works together&lt;/b&gt;&lt;br /&gt;
Ignoring the iPad and the Air Playit HD software for a moment, the rest of the system involves Apple AirPlay sources and destinations. To be honest, I'm not a huge fan of some of Apple's work, but in this case AirPlay was simply the "right tool for the job".&lt;br /&gt;
&lt;br /&gt;
Looking at the PCs, iTunes on the first one "just works", sending audio to one or more (simultaneously) destinations without a problem. Airfoil on the second PC allows audio capture from running programs (eg VLC) and sends that out in the same manner as iTunes to one or more destinations. Both PCs then perform double-duty as destinations thanks to the excellent Shairport4w.&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi acts purely as a lightweight destination, thanks to the&amp;nbsp;installation&amp;nbsp;of shairport. I've attached an external USB sound card which helps with the sound quality.&lt;br /&gt;
&lt;br /&gt;
Separately to this, Air Playit HD allows the iPad to play music/video off either of the PCs - the software on the PCs shares chosen folders and there's a client on the iPad of course. Any played music can then by pushed (via the iPad's built-in AirPlay tool) to a single destination.&lt;br /&gt;
&lt;br /&gt;
These components work really well together, and allow me to scale the system really easily in the future. I hope they give you a good idea or two - let me know your versions in the comments!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hat tip&lt;/b&gt;&lt;br /&gt;
Lifehacker's articles on setting up a &lt;a href="http://www.lifehacker.com.au/2013/01/turn-a-raspberry-pi-into-an-airplay-receiver-for-streaming-music/" target="_blank"&gt;Raspberry Pi&lt;/a&gt; and &lt;a href="http://www.lifehacker.com.au/2011/05/how-to-make-your-entire-home-airplay-compatible/" target="_blank"&gt;AirPlay streaming from/to all sorts of devices&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/v0H66bexyUw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/7809583435694557276/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2013/01/my-home-audio-streaming-setup.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/7809583435694557276?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/7809583435694557276?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/v0H66bexyUw/my-home-audio-streaming-setup.html" title="My home audio streaming setup" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2013/01/my-home-audio-streaming-setup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHQng5eSp7ImA9WhNREU0.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-490386759410634472</id><published>2012-11-04T16:49:00.000+11:00</published><updated>2012-11-05T20:23:53.621+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-05T20:23:53.621+11:00</app:edited><title>Use a Kindle and Python as a clock/dashboard</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://raw.github.com/thisismyrobot/kindleclock/master/Kindle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://raw.github.com/thisismyrobot/kindleclock/master/Kindle.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
When the &lt;a href="http://www.amazon.com/gp/product/B0051QVESA/ref=fs_tq/179-3536047-2130816" target="_blank"&gt;Kindle Wifi&lt;/a&gt; came out I snapped it up and it became the most used electronic device I've ever owned. Then the Kindle Touch came out and I got that too (by which point I was well on the way to becoming an Amazon fanboy...)&lt;br /&gt;
&lt;br /&gt;
The only problem was that I couldn't actually read two Kindles at once.&lt;br /&gt;
&lt;br /&gt;
Then I came across a post by Matthew Petroff - &lt;a href="http://www.mpetroff.net/archives/2012/09/14/kindle-weather-display/" target="_blank"&gt;Kindle Weather Display&lt;/a&gt;. This sparked my curiosity and I decided to build a clock/dashboard with the Wifi - something that'd show things like number of unread emails, weather etc. This appealed to me as the Kindle has fantastic battery life, is silent, and the e-ink display is both large and invisible at night (when I really don't want to know the time). The goal was something I could glance at in the morning before going to work and ignore otherwise.&lt;br /&gt;
&lt;br /&gt;
Initially I intended to go down the route of jailbreaking to display an image like Matthew did, but I didn't have any luck with that on my particular device. It then&amp;nbsp;occurred&amp;nbsp;to me that I could just use the built-in web-browser to display a self-updating page. The only blocker to this was stopping the screensaver from turning on, something &lt;a href="http://kelworthfiles.wordpress.com/2011/12/21/the-mysteries-of-kindle-debug-mode/" target="_blank"&gt;I was able to work around&lt;/a&gt;. The browser chrome was not pretty, but also not a deal-breaker.&lt;br /&gt;
&lt;br /&gt;
From then on it was all about building an appropriate web site, serving it (on my desktop, but it'll work on anything running Python) and pointing the Kindle's browser at the right URL.&amp;nbsp;So far, I've managed to show the time (updated on the minute), the current temperature, today's forecast and today's agenda from my Google Calendar. There's nothing magical there and as the site can be displayed on any JS-aware web-browsing device I'm &lt;a href="https://github.com/thisismyrobot/kindleclock" target="_blank"&gt;sharing this project on GitHub&lt;/a&gt;. It'll change a lot over time but hopefully there are some basics you can use in your own project.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update 05/11/2012:&lt;/b&gt; I've now added a count of unread emails in my Gmail inbox so head over to the &lt;a href="https://github.com/thisismyrobot/kindleclock" target="_blank"&gt;GitHub repo&lt;/a&gt; if you're interested in that sort of functionality for your own project. I've also got server.py working on a Raspberry Pi without modification, and it's perfectly fast enough for my use.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/-j-u9_2OUOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/490386759410634472/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/11/use-kindle-and-python-as-clockdashboard.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/490386759410634472?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/490386759410634472?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/-j-u9_2OUOU/use-kindle-and-python-as-clockdashboard.html" title="Use a Kindle and Python as a clock/dashboard" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/11/use-kindle-and-python-as-clockdashboard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MDQX8yeCp7ImA9WhJXEUk.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-4039086179713051295</id><published>2012-08-05T16:51:00.000+10:00</published><updated>2012-08-05T16:51:10.190+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-05T16:51:10.190+10:00</app:edited><title>Getting a Logitech C270 webcam working on a Raspberry Pi running Debian</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-9qR-vZsBLek/UB4XeZSd3YI/AAAAAAAABBM/S1ub7k-709o/s1600/test.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://1.bp.blogspot.com/-9qR-vZsBLek/UB4XeZSd3YI/AAAAAAAABBM/S1ub7k-709o/s400/test.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I thought it was about time I shared something after all the hours I've committed to Pi-hacking and the above title says it all. These instructions are very simple but should hopefully save you some trial-and-error.&lt;br /&gt;
&lt;br /&gt;
Importantly, hat-tip to &lt;a href="http://insipidramblings.com/?p=55" target="_blank"&gt;Insipid Ramblings&lt;/a&gt; and &lt;a href="http://hexxeh.net/?p=328117855" target="_blank"&gt;Hexxeh&lt;/a&gt; for their info and work that helped me get this far.&lt;br /&gt;
&lt;br /&gt;
Firstly, I started with a slightly old version of Debian - namely the &lt;b&gt;debian6-19-04-2012&lt;/b&gt; image. Your results may vary depending on what version you use. I am also assuming that you have already installed the image and can successfully boot to the desktop.&lt;br /&gt;
&lt;br /&gt;
So, here goes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Add UVC support to the image &lt;/b&gt;&lt;br /&gt;
Download and run &lt;b&gt;rpi-update&lt;/b&gt; as described &lt;a href="https://github.com/Hexxeh/rpi-update" target="_blank"&gt;here&lt;/a&gt;. This will update your image to include the initially-missing &lt;a href="http://en.wikipedia.org/wiki/USB_video_device_class" target="_blank"&gt;UVC&lt;/a&gt; support. Reboot as suggested.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Update your packages &lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get update&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get upgrade&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Install the guvcview webcam viewer&lt;/b&gt; &lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install guvcview&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br /&gt;
&lt;b&gt;4. Set up your permissions and enable the driver&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo usermod -a -G video pi&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo modprobe uvcvideo&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Open up the cam (these are the settings that worked for me)&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;guvcview --size=544x288 --format=yuyv&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Caveats&lt;/b&gt;&lt;br /&gt;
Well, you are almost done, there are a few things to keep in mind before you rush out to buy one of these webcams for your Pi.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Before you view the C270 you must disconnect your mouse*. I am not sure if this is problem specific to my install but if I don't the camera will either not connect or will drop out constantly. The error I saw was along the line of not having any "periodic" USB channels.&lt;/li&gt;
&lt;li&gt;The resolution is low. Clicking on the above image will open it at full size (544x288). Trying resolutions above this didn't work.&lt;/li&gt;
&lt;li&gt;The webcam "must" be connected before powering up the Pi. If not you need to run &lt;b&gt;sudo rmmod uvcvideo &lt;/b&gt;and &lt;b&gt;sudo modprobe uvcvideo&lt;/b&gt; before it will work. &lt;/li&gt;
&lt;/ul&gt;
Even with this caveats, this is better than nothing and step one towards my Pi-powered mobile robot.&lt;br /&gt;
&lt;br /&gt;
Hopefully this how-to helps you out and if you have more luck than I using a mouse and/or higher resolutions please let me know in the comments.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;* Now, "real" Linux people would say that you shouldn't be using one anyway, but when your goal is to use a webcam, it's somewhat inferred that you'd like to see the result in a mouse-equipped GUI :-)&lt;/i&gt;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/6bYcPsg9vSM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/4039086179713051295/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/08/getting-logitech-c270-webcam-working-on.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4039086179713051295?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4039086179713051295?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/6bYcPsg9vSM/getting-logitech-c270-webcam-working-on.html" title="Getting a Logitech C270 webcam working on a Raspberry Pi running Debian" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-9qR-vZsBLek/UB4XeZSd3YI/AAAAAAAABBM/S1ub7k-709o/s72-c/test.png" height="72" width="72" /><thr:total>14</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/08/getting-logitech-c270-webcam-working-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEHRHo6fSp7ImA9WhJRGEg.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-9194193640558684802</id><published>2012-07-21T18:00:00.001+10:00</published><updated>2012-07-21T18:00:35.415+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-21T18:00:35.415+10:00</app:edited><title>Installing...</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-hZcsG8yoW5E/UAphVGJ1K1I/AAAAAAAABA8/0Yv164b0QkI/s1600/IMAG0915.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/-hZcsG8yoW5E/UAphVGJ1K1I/AAAAAAAABA8/0Yv164b0QkI/s400/IMAG0915.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/mIuIQUTbuN4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/9194193640558684802/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/07/installing.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/9194193640558684802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/9194193640558684802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/mIuIQUTbuN4/installing.html" title="Installing..." /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-hZcsG8yoW5E/UAphVGJ1K1I/AAAAAAAABA8/0Yv164b0QkI/s72-c/IMAG0915.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/07/installing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBSXk5cSp7ImA9WhJTFUw.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-322536107695256382</id><published>2012-06-24T15:50:00.000+10:00</published><updated>2012-06-24T15:50:58.729+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-24T15:50:58.729+10:00</app:edited><title>Pi</title><content type="html">&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-9tNwOUxwgGw/T-apKKBQZTI/AAAAAAAABAw/LsKDMPDBpFc/s640/IMAG0871.jpg" style="margin-left: auto; margin-right: auto;" width="384" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A small mobile testbed I'll be trying it out on. And a cat.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The Pi has landed.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/Cp13qqVvJfc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/322536107695256382/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/06/pi.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/322536107695256382?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/322536107695256382?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/Cp13qqVvJfc/pi.html" title="Pi" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-9tNwOUxwgGw/T-apKKBQZTI/AAAAAAAABAw/LsKDMPDBpFc/s72-c/IMAG0871.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/06/pi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIBR3o5eSp7ImA9WhVXFEs.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-2411005995717452539</id><published>2012-04-15T12:28:00.000+10:00</published><updated>2012-04-15T15:42:36.421+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-15T15:42:36.421+10:00</app:edited><title>A new Android app!</title><content type="html">Yes, &lt;a href="http://www.thisismyrobot.com/2012/01/few-changes-and-exciting-future.html"&gt;I did say&lt;/a&gt; I wasn't going to write any more Android apps, but there's a really good reason this time :)&lt;br /&gt;
&lt;br /&gt;
At work a couple of weeks ago two of my co-workers were inventorying a large quantity of stock that had just arrived. They were hoping to scan the barcodes for each item into a simple CSV file. Their first though was obviously "there's an app for that". Turns out there wasn't. There are hundreds of barcode-scanning and inventory apps available, but none that simple scanned to a CSV list of barcodes, then allowed that CSV data to be emailed/saved etc.&lt;br /&gt;
&lt;br /&gt;
So yesterday, after 4 hours work, I can now say there is such an app. Stock Scanner isn't pretty, nor feature-packed, but it exactly fulfils the above requirement.&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/-jASEsh4OO4s/T4oxWSGl2WI/AAAAAAAABAM/U-Kk3sB--9g/s1600/screenshot.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-jASEsh4OO4s/T4oxWSGl2WI/AAAAAAAABAM/U-Kk3sB--9g/s320/screenshot.png" width="192" /&gt;&lt;/a&gt;
&lt;a href="http://4.bp.blogspot.com/-V5_1jjwLJ3I/T4oxXdW2UKI/AAAAAAAABAQ/KrGXbOd0APw/s1600/screenshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-V5_1jjwLJ3I/T4oxXdW2UKI/AAAAAAAABAQ/KrGXbOd0APw/s320/screenshot2.png" width="192" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
Stock Scanner is available in a &lt;a href="https://play.google.com/store/apps/details?id=thisismyrobot.android.stockscannerfree"&gt;limited-scans free version&lt;/a&gt;, or a &lt;a href="https://play.google.com/store/apps/details?id=thisismyrobot.android.stockscanner"&gt;very cheap paid version&lt;/a&gt;, on &lt;strike&gt;the Android market&lt;/strike&gt; Google Play.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/fnHIQV5F-cU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/2411005995717452539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/04/new-android-app.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2411005995717452539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2411005995717452539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/fnHIQV5F-cU/new-android-app.html" title="A new Android app!" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-jASEsh4OO4s/T4oxWSGl2WI/AAAAAAAABAM/U-Kk3sB--9g/s72-c/screenshot.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/04/new-android-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AEQ38yeSp7ImA9WhVXEEg.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-3789585744819484820</id><published>2012-04-10T21:01:00.002+10:00</published><updated>2012-04-10T21:01:42.191+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-10T21:01:42.191+10:00</app:edited><title>Bucket-brigading neural networks</title><content type="html">I've recently been playing around with some Python code to explore a hunch I've had for a couple of years: that you can train a feed-forward neural network by simply indicating whether a output in response to an input was "good" or "bad".&lt;br /&gt;
&lt;br /&gt;
I'd always imagined that I would hook up a small robot with a embedded neural network, giving myself a remote control with a button like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-KPWWIZul8Kc/T4QHcgbuCeI/AAAAAAAAA_w/-HyDMaDIUnc/s1600/stop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-KPWWIZul8Kc/T4QHcgbuCeI/AAAAAAAAA_w/-HyDMaDIUnc/s200/stop.jpg" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The robot would rove around, and whenever it did something "bad" (e.g. ran into a wall that it should have registered on its sensors) I'd press the button and it would train itself using that "bad" input-&amp;gt;output pairing - e.g. that "move forward" when the front sonar sensor is registering an obstruction is "bad". I could also have a "good" button if it did something like turn just before a wall, for instance, to reinforce the correct behaviours.&lt;br /&gt;
&lt;br /&gt;
This appealed to me as it was also very similar to how I (attempt to) train our cat...&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BLZRjPUffs8/T4QI6bMXESI/AAAAAAAAA_4/-jiwaG8qu8A/s1600/256_31386567152_548307152_678495_4728_n.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-BLZRjPUffs8/T4QI6bMXESI/AAAAAAAAA_4/-jiwaG8qu8A/s320/256_31386567152_548307152_678495_4728_n.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Yes, that is our cat. No, that was not a training session...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Anyway, I have migrated this hunch to the &lt;a href="https://github.com/thisismyrobot/BadCat"&gt;GitHub repository BadCat&lt;/a&gt;. It has taken a few twists and turns along the way, but I have been able to "train" some very elementary neural networks using a simple set of rules based on the original hunch. I ended up taking a few pointers out of genetic algorithms theory just for fun too.&lt;br /&gt;
&lt;br /&gt;
The algorithm works in the following way:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Read the "sensors"&lt;/li&gt;
&lt;li&gt;Apply sensor readings to a learning tool (neural network), get the output&lt;/li&gt;
&lt;li&gt;Try out the output "in the real world"&lt;/li&gt;
&lt;li&gt;If the result of trying out the output is "bad":&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Slightly mutate the output&lt;/li&gt;
&lt;li&gt;Goto 3 above&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Train the network with the resultant (original or mutated) output&lt;/li&gt;
&lt;/ol&gt;
The mutation amount increases the longer the output is "bad", based on the assumption that the original output will be close to the desired already, but allowing the output to chance dramatically if the robot is stuck in a new situation. The "good" input-&amp;gt;output pairs form part of a fixed length queue of recent memory that is used for regular training.&lt;br /&gt;
&lt;br /&gt;
This approach is similar to the "bucket brigade" rule-reinforcement 
technique that can be used to train expert systems. It is also not 
dissimilar to reinforcement learning principles, except that the 
observation-action-reward mechanism is implicit instead of being 
explicit - the action is the output generated based on the observation 
and the weighting of the neural network and the reward (or penalty) is externally sourced and applied to the network only when needed.*&lt;br /&gt;
&lt;br /&gt;
I am looking forward to trying this out a real mobile robot as soon as I can &lt;a href="http://www.raspberrypi.org/"&gt;order my Pi&lt;/a&gt; and I will keep you up-to-date on how it turns out.&lt;br /&gt;
&lt;br /&gt;
* Oh, and just to be clear, I am not a  robotics or AI PHD student and this is not part of a proper academic research paper. It is very likely that what I am doing here has been done before so I make no claim to extraordinary originality or breakthrough genius - just consider this some musings and a pinch of free Python code :)&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/HnCBKKgfg0I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/3789585744819484820/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/04/bucket-brigading-neural-networks.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3789585744819484820?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3789585744819484820?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/HnCBKKgfg0I/bucket-brigading-neural-networks.html" title="Bucket-brigading neural networks" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-KPWWIZul8Kc/T4QHcgbuCeI/AAAAAAAAA_w/-HyDMaDIUnc/s72-c/stop.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/04/bucket-brigading-neural-networks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8NSH88eSp7ImA9WhVRFE0.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-4171237666040293151</id><published>2012-03-22T20:34:00.000+11:00</published><updated>2012-03-22T20:34:59.171+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T20:34:59.171+11:00</app:edited><title>Some small Python scripts</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-oWlbu7rn3Jg/T2rnxT4UmKI/AAAAAAAAA_Q/lbhV0TyHUqw/s1600/Screenshot+at+2012-03-22+19:48:55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-oWlbu7rn3Jg/T2rnxT4UmKI/AAAAAAAAA_Q/lbhV0TyHUqw/s1600/Screenshot+at+2012-03-22+19:48:55.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
So ... that's not quite the "picture of a robot" I was &lt;a href="http://www.thisismyrobot.com/2012/01/few-changes-and-exciting-future.html"&gt;intending to lead&lt;/a&gt; this post off with :-)&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, the 'R' in the image above represents a "robot" in the very simple mobile robot simulator that I just developed. RoboSim is written in Python and allows a developer to include a very rudimentary 2D simulator in their project - for instance to test a neural network or genetic algorithm. The robot can rotate on the spot in 45° increments as well as move forward and backwards. Maps are defined as simple nested lists, with internal "walls" defined for areas that cannot be traversed. The robot is fitted with two front bumper switches that are triggered depending on what the robot is pressed against. &lt;a href="https://github.com/thisismyrobot/RoboSim"&gt;RoboSim is available on GitHub&lt;/a&gt;, and may receive the odd tweak here and there in the future although it has served its purpose in another project already. &lt;br /&gt;
&lt;br /&gt;
My other project is probably going to keep me going for a little while longer, at least until my &lt;a href="http://www.raspberrypi.org/"&gt;Raspberry Pi(s)&lt;/a&gt; arrive... The project was born out of a hope to combine a couple of them together for a seriously powerful mobile robot. I really wanted to use one for nothing but OpenCV video processing and another for navigation planning etc. What I really didn't want to do was to be constantly swapping between each Pi to upload new code as I tried out different ideas.&lt;br /&gt;
&lt;br /&gt;
Then it occurred to me: wouldn't it be nice if I could just get one or more Pis to act as a "dumb" nodes to run arbitrary Python code provided it to it by a "master" Pi...&lt;br /&gt;
&lt;br /&gt;
A couple of days programming later and the newly &lt;a href="https://github.com/thisismyrobot/DisPy"&gt;Github'd project, DisPy&lt;/a&gt;, does this. The &lt;a href="https://github.com/thisismyrobot/DisPy/blob/master/README.txt"&gt;README&lt;/a&gt; explains it better but essentially, instead of instantiating classes normally, I use a wrapper class to perform the instantiation. Behind the scenes the class' source code is copied over the network to a "node" machine, the class is instantiated on that node and all the local copy's methods and members are replaced by stubs that perform XML-RPC calls back to the "node".&lt;br /&gt;
&lt;br /&gt;
The result is that method calls and member access happens transparently over XML-RPC, allowing for the runtime offloading of arbitrary code to one or many Pis (or anything else that can run Python).&lt;br /&gt;
&lt;br /&gt;
The code is all contained in one module and has minimal dependencies, hopefully it works on other OS' but I haven't tested it on anything other than Ubuntu 11.10 yet. Please &lt;a href="http://help.github.com/fork-a-repo/"&gt;fork it&lt;/a&gt;, break it and have a play, I'd love your feedback on this one! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/PkvvN2c7P5Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/4171237666040293151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/03/some-small-python-scripts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4171237666040293151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4171237666040293151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/PkvvN2c7P5Y/some-small-python-scripts.html" title="Some small Python scripts" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-oWlbu7rn3Jg/T2rnxT4UmKI/AAAAAAAAA_Q/lbhV0TyHUqw/s72-c/Screenshot+at+2012-03-22+19:48:55.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/03/some-small-python-scripts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cBQHs6cCp7ImA9WhRUEUU.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-8145488647382276451</id><published>2012-01-22T10:37:00.000+11:00</published><updated>2012-01-22T10:37:31.518+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T10:37:31.518+11:00</app:edited><title>A few changes and an exciting future</title><content type="html">Tomorrow morning I will begin a new job and more importantly, a different direction in my career.&lt;br /&gt;
&lt;br /&gt;
As you can tell from the history of this blog I have always had a passion for robotics and other embedded hardware systems. Graduating with a Bachelor of Computing, instead of Engineering, has obviously limited my job prospects in these more hardware-oriented fields. As a consequence, for the last five or so years I have been employed primarily as a web application developer with occasional forays into desktop application and embedded hardware development.&lt;br /&gt;
&lt;br /&gt;
This all changed four weeks ago when I received an offer of employment at a local electricity generation business. I will taking on a role assisting with developing, administering and supporting their &lt;a href="http://en.wikipedia.org/wiki/Energy_management_system"&gt;Energy Management System&lt;/a&gt;. This will involve working with complex hardware-oriented &lt;a href="http://en.wikipedia.org/wiki/SCADA"&gt;SCADA&lt;/a&gt; systems. I am extremely excited about this new role and the learning opportunities it will offer and I have decided it is time to adjust my non-employment priorities too.&lt;br /&gt;
&lt;br /&gt;
These adjustments will have the greatest effect on my Android application development. I will still continue to bug-fix existing applications and I may even develop a few more new applications, but this will now be a low priority - a couple of hours a month. I've enjoyed working with this platform greatly but, frankly, I am not willing (with this new role) to put the time and effort in to turn this into a self-supporting business, and it doesn't make enough money to continue in a half-hearted manner.&lt;br /&gt;
&lt;br /&gt;
The good news is that as a consequence of the above I intend to spend a lot more time on my embedded hardware/hobby-robotics projects. I've already been working on some as-yet undocumented projects and I would like to blog about these as they reach milestones and conclusions.&lt;br /&gt;
&lt;br /&gt;
Thank you for indulging me in a personal post, I look forward to a picture of a robot leading my next one! :)&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/VMQeDftYxM0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/8145488647382276451/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2012/01/few-changes-and-exciting-future.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8145488647382276451?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8145488647382276451?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/VMQeDftYxM0/few-changes-and-exciting-future.html" title="A few changes and an exciting future" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2012/01/few-changes-and-exciting-future.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMQn4-eSp7ImA9WhVXEUQ.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-1535453038015790514</id><published>2011-12-22T14:11:00.000+11:00</published><updated>2012-04-12T10:24:43.051+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-12T10:24:43.051+10:00</app:edited><title>Video review of Sythe by content3300</title><content type="html">I just came across this video by the YouTube user &lt;b&gt;content3300&lt;/b&gt;, showing Sythe in action. It appears to be an entry for a competition, but it shows all the features quiet well. Thanks content3300!&lt;br /&gt;
&lt;br /&gt;
&lt;div align="center"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="224" src="http://www.youtube.com/embed/_u1AsdGo6CQ?rel=0" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/KnU0CV9fkAE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/1535453038015790514/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/12/video-review-of-sythe-by-content3300.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/1535453038015790514?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/1535453038015790514?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/KnU0CV9fkAE/video-review-of-sythe-by-content3300.html" title="Video review of Sythe by content3300" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/_u1AsdGo6CQ/default.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/12/video-review-of-sythe-by-content3300.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQHQ3s5eyp7ImA9WhRRGUg.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-2913006331353636049</id><published>2011-12-04T10:43:00.001+11:00</published><updated>2011-12-04T11:25:32.523+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-04T11:25:32.523+11:00</app:edited><title>Distributed tournaments for the Google AI Challenge</title><content type="html">As I noted a couple of posts ago, I am taking part in the Google AI Challenge again this year (&lt;a href="http://aichallenge.org/profile.php?user=8270"&gt;my entry&lt;/a&gt;). The challenge this year is &lt;a href="http://aichallenge.org/problem_description.php"&gt;Ants&lt;/a&gt;, a game which requires entries (agents) to control a number of ants in an environment made up of land, water, food and enemy ants.&lt;br /&gt;
&lt;br /&gt;
The design of my agent is fairly simple and has a large number of parameters that are a adjustable (e.g. distance between an enemy ant and my base that is considered a "threat"). This made it a perfect candidate for trialling out some &lt;a href="http://en.wikipedia.org/wiki/Genetic_algorithm"&gt;Genetic Algorithms&lt;/a&gt; (GA) theory to tune those parameters, as well as to evalute some algorithmic design decisions.&lt;br /&gt;
&lt;br /&gt;
To start using GA one must generate an initial batch of solutions to the problem. This is currently in the form of 12 versions of my agent.&lt;br /&gt;
&lt;br /&gt;
Once an initial set of solutions has been generated, the next step is the evaluation of the fitness of each solution. Each agent I design is a different "solution" to the problem of being the best agent - the best agent is the fittest.&lt;br /&gt;
&lt;br /&gt;
I decided the simplest way to evaluate the fitness of each agent is for it to compete against other agents that I have made, and sample agents, in the standard game format that is used on the official servers.&lt;br /&gt;
&lt;br /&gt;
As I have a number of laptops and computers, none of which super-powerful, I decided to try and make a distributed tournament system so that I could play as many games as possible to get the best idea of fitness - my setup is as follows.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Each machine is running Ubuntu 11.10, with &lt;a href="http://www.dropbox.com/"&gt;Dropbox&lt;/a&gt; installed. The game's Dropbox folder contains the game engine, maps and all the agents that are currently being tested.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;This allows for new agents to be added at any point and all machines to be immediately updated.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Each machine continuously:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Selects a random map&lt;/li&gt;
&lt;li&gt;Selects a random set of agents to play on that map&lt;/li&gt;
&lt;li&gt;Plays the game&lt;/li&gt;
&lt;li&gt;Writes the score to a file based on it's host name - eg "log-ubuntubox.txt". These files are also in the Dropbox folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Any machine can run a shared script that aggregates the results from all log-*.txt files, computing the average points/game for each agent. This is used as the fitness.&lt;/li&gt;
&lt;/ul&gt;
Because I am using Python 2.7 (installed by default on Ubuntu 11.10) for the game engine, agents and extra scripting the provisioning of a new machine is this simple:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Install Ubuntu&lt;/li&gt;
&lt;li&gt;Install Dropbox&lt;/li&gt;
&lt;li&gt;Run "python play.py"&lt;/li&gt;
&lt;/ol&gt;
So far this is working quiet well with quiet dramatic and unexpected performance differences between some nearly identical agents. Once each agent has played at least 30 games I will remove some of the lowest scoring agents and add some new versions based on combining the traits that are the most successful.&lt;br /&gt;
&lt;br /&gt;
With any luck this should result in a pretty competitive entry in this year's Challenge - I will keep you posted!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/kOk1laf3JxE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/2913006331353636049/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/12/distributed-tournaments-for-google-ai.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2913006331353636049?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2913006331353636049?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/kOk1laf3JxE/distributed-tournaments-for-google-ai.html" title="Distributed tournaments for the Google AI Challenge" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/12/distributed-tournaments-for-google-ai.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENSHc7fyp7ImA9WhRRF04.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-5414376798169136151</id><published>2011-12-01T20:57:00.001+11:00</published><updated>2011-12-01T21:01:39.907+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-01T21:01:39.907+11:00</app:edited><title>Milestones</title><content type="html">I just had a look at my &lt;a href="https://market.android.com/"&gt;Market&lt;/a&gt; stats and I've just hit a couple of milestones:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;More than 100 ratings of Sythe Free (average 4.3/5)&lt;/li&gt;
&lt;li&gt;More than 10,000 active users of Sythe Free&lt;/li&gt;
&lt;li&gt;More than 25,000 downloads of Sythe Free&lt;/li&gt;
&lt;/ul&gt;
If only the paid version was going so well... :-)&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/ktdWY7aHL8c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/5414376798169136151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/12/milestones.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/5414376798169136151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/5414376798169136151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/ktdWY7aHL8c/milestones.html" title="Milestones" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/12/milestones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUABQn0_eip7ImA9WhRRF04.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-3672491893096961225</id><published>2011-11-30T20:48:00.000+11:00</published><updated>2011-12-01T21:02:33.342+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-01T21:02:33.342+11:00</app:edited><title>Sythe update released</title><content type="html">Just a quick one - I've just released an update to &lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe&lt;/a&gt; to fix:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Never-ending playback after closing Sythe&lt;/li&gt;
&lt;li&gt;Incorrect step between octaves&lt;/li&gt;
&lt;li&gt;Incorrect octave start/finish&lt;/li&gt;
&lt;li&gt;Mis-match between note and frequency when switching modes&lt;/li&gt;
&lt;/ul&gt;
Thanks for the patience with this one guys, I've gotten totally bogged down in the &lt;a href="http://aichallenge.org/profile.php?user=8270"&gt;2011 Google AI Challenge&lt;/a&gt; (a greater time-sink than Skyrim...)&lt;br /&gt;
&lt;br /&gt;
Sythe 1.3 is now available on the Android Market &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;for free&lt;/a&gt; or &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.donate"&gt;very, very cheap&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/R7QYhcMTmiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/3672491893096961225/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/12/sythe-update-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3672491893096961225?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3672491893096961225?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/R7QYhcMTmiQ/sythe-update-released.html" title="Sythe update released" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/12/sythe-update-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNRXw7eCp7ImA9WhVXEUQ.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-6741111886487310374</id><published>2011-10-06T20:47:00.000+11:00</published><updated>2012-04-12T10:23:14.200+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-12T10:23:14.200+10:00</app:edited><title>Sneak peek</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-MuHu_-RbbVo/To13hkiWPqI/AAAAAAAAA7g/DWUZtWC8evA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://2.bp.blogspot.com/-MuHu_-RbbVo/To13hkiWPqI/AAAAAAAAA7g/DWUZtWC8evA/s400/1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You are looking at the main screen of an early version of my next app - a high-quality drum synthesiser. Currently it mixes 3 sine-wave sources with independent frequencies, amplitudes and ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
Oh, and yes, it'll use my minimalist red-on-black UI again :-)&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/V3KKDN-VJCg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/6741111886487310374/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/10/sneak-peek.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/6741111886487310374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/6741111886487310374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/V3KKDN-VJCg/sneak-peek.html" title="Sneak peek" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-MuHu_-RbbVo/To13hkiWPqI/AAAAAAAAA7g/DWUZtWC8evA/s72-c/1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/10/sneak-peek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAGRn8_fSp7ImA9WhdVGE8.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-592882627022446502</id><published>2011-09-24T10:22:00.000+10:00</published><updated>2011-09-24T10:22:07.145+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T10:22:07.145+10:00</app:edited><title>Warm fuzzy feelings</title><content type="html">As &lt;a href="http://www.thisismyrobot.com/2011/09/sythe-12-released.html"&gt;I mentioned a little while ago&lt;/a&gt;, my last update to &lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe&lt;/a&gt; was released into two apps - one free and one for the &lt;a href="http://www.google.com/support/androidmarket/developer/bin/answer.py?hl=en&amp;amp;answer=138412"&gt;lowest price available in each currency&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
With the exception of their names, the difference between these two apps is zero. I didn't even employ any tricky marketing; both apps openly refer to &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;each&lt;/a&gt; &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.donate"&gt;other&lt;/a&gt; and both clearly state that they are the same app.&lt;br /&gt;
&lt;br /&gt;
And you know what, people have bought the paid version!&lt;br /&gt;
&lt;br /&gt;
Thanks guys, you've re-inspired me and I am already working on some new Android apps - watch this space...&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/scbffm0Pxx4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/592882627022446502/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/09/warm-fuzzy-feelings.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/592882627022446502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/592882627022446502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/scbffm0Pxx4/warm-fuzzy-feelings.html" title="Warm fuzzy feelings" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/09/warm-fuzzy-feelings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYDQ3Y4cSp7ImA9WhVXEUQ.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-2127181765411710214</id><published>2011-09-10T14:33:00.000+10:00</published><updated>2012-04-12T10:22:52.839+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-12T10:22:52.839+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><title>Sythe 1.2 released!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-5rGDKcpwh3k/TmrcR49tsjI/AAAAAAAAA6U/LZyJCFzHJ8A/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-5rGDKcpwh3k/TmrcR49tsjI/AAAAAAAAA6U/LZyJCFzHJ8A/s400/2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe 1.2&lt;/a&gt; has been released onto the Android Market. This release brings:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A 3-octave "Grid" mode&lt;/li&gt;
&lt;li&gt;Faster and more refined user interface&lt;/li&gt;
&lt;li&gt;Some German localisation&lt;/li&gt;
&lt;/ul&gt;
Get it from the Market for &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;free&lt;/a&gt; or if you'd like to support my work you can buy it for the &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.donate"&gt;cheapest price allowed in your currency&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Thank you for all the feedback you've given me so far, I will continue to integrate your ideas into Sythe as long as you give them to me!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/dmMSAnt4MH4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/2127181765411710214/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/09/sythe-12-released.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2127181765411710214?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2127181765411710214?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/dmMSAnt4MH4/sythe-12-released.html" title="Sythe 1.2 released!" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-5rGDKcpwh3k/TmrcR49tsjI/AAAAAAAAA6U/LZyJCFzHJ8A/s72-c/2.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/09/sythe-12-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04NR3Y5fip7ImA9WhdSGU4.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-8612946110137989786</id><published>2011-07-29T20:39:00.000+10:00</published><updated>2011-07-29T20:39:56.826+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-29T20:39:56.826+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><title>Hiatus, features and a thank you</title><content type="html">Well, that was a longer "&lt;a href="http://www.thisismyrobot.com/2011/04/sneak-peak-of-new-sythe-ui.html"&gt;week or so&lt;/a&gt;" than I initially expected. The short version is that since my last post my partner and I became home-owners (Yay!) and I simply didn't have the time to push out a serious update to Sythe. I also found a number of problems with the new UI - something that will be left on the back-burner for a little while.&lt;br /&gt;
&lt;br /&gt;
The good news is I can now show you screenshots of some new functionality:&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/-J9vpxKooZ7I/TjKIT44Ac5I/AAAAAAAAA3E/zr4n_hf3xO8/s1600/v03.sc01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-J9vpxKooZ7I/TjKIT44Ac5I/AAAAAAAAA3E/zr4n_hf3xO8/s400/v03.sc01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VsGJs08CUv8/TjKIVDAq9XI/AAAAAAAAA3I/YxSIrdodSLA/s1600/v03.sc02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-VsGJs08CUv8/TjKIVDAq9XI/AAAAAAAAA3I/YxSIrdodSLA/s400/v03.sc02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Firstly, I have added an toggleable Pad note grid that you can lock the synth to, with the input screen able to show a one or two octave span. The X/Y marker can still move freely but the current note is highlighted on the grid.&lt;br /&gt;
&lt;br /&gt;
I have also added a Pad "Tilt" mode (toggled via the "+" button) where you can control the pitch and Sine/Saw mix by tilting the phone left, right, forwards and backwards. This allows you to change other parameters while still controlling the Pad behind the scenes.&lt;br /&gt;
&lt;br /&gt;
The addition of this grid was suggested by a number of reviewers on  &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;Sythe's market page&lt;/a&gt; and I would like to take this opportunity to thank  everyone who has given me feedback on Sythe so far. Your feedback has been both positive and filled with excellent feature suggestions.&lt;br /&gt;
&lt;br /&gt;
These features will hit the market shortly, along with some internationalisation, reliability updates and background playback.&amp;nbsp;&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/gCWE3itYmzE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/8612946110137989786/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/07/hiatus-features-and-thank-you.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8612946110137989786?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/8612946110137989786?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/gCWE3itYmzE/hiatus-features-and-thank-you.html" title="Hiatus, features and a thank you" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-J9vpxKooZ7I/TjKIT44Ac5I/AAAAAAAAA3E/zr4n_hf3xO8/s72-c/v03.sc01.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/07/hiatus-features-and-thank-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YARHY7eSp7ImA9WhZXEEs.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-3090479418584154388</id><published>2011-04-29T18:19:00.000+10:00</published><updated>2011-04-29T18:19:05.801+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-29T18:19:05.801+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><category scheme="http://www.blogger.com/atom/ns#" term="display" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title>Sneak peak of the new Sythe UI</title><content type="html">I didn't mention this in my &lt;a href="http://www.thisismyrobot.com/2011/04/whats-next-for-sythe.html"&gt;last post&lt;/a&gt; on &lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe&lt;/a&gt;'s future because it was only an idea then, but the new UI has progressed far quicker than expected so here is a sneak-peak:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8wG09kgm3m8/TbpztvKkrHI/AAAAAAAAA0s/osc8JXYYtpc/s1600/v03.sc01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-8wG09kgm3m8/TbpztvKkrHI/AAAAAAAAA0s/osc8JXYYtpc/s400/v03.sc01.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Click for a larger, clearer version&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;The design will evolve of course, but this is the general idea. The new UI will make its way into the next update, coming within then next week or so I hope!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/B5NJ1qdzfas" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/3090479418584154388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/04/sneak-peak-of-new-sythe-ui.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3090479418584154388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/3090479418584154388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/B5NJ1qdzfas/sneak-peak-of-new-sythe-ui.html" title="Sneak peak of the new Sythe UI" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-8wG09kgm3m8/TbpztvKkrHI/AAAAAAAAA0s/osc8JXYYtpc/s72-c/v03.sc01.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/04/sneak-peak-of-new-sythe-ui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHSX0-cCp7ImA9WhZQFEk.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-4524453852956868466</id><published>2011-04-22T13:18:00.001+10:00</published><updated>2011-04-22T13:18:58.358+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-22T13:18:58.358+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="news" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><title>What's next for Sythe</title><content type="html">Just a quick update on what's coming out with the next version of Sythe Free:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;German Localisation - Germany makes up 10% of my active users and is the largest non-English user-base.&lt;/li&gt;
&lt;li&gt;Background Playback - so you can use multiple applications at once.&lt;/li&gt;
&lt;li&gt;Higher reliability - I've removed a ton of unhelpfully-buggy code, and thanks to the help of one of this blog's followers, dcp, I think I've fixed a rather nasty glitch sound that's triggerable by a certain combination of inputs. Thanks, dcp!&lt;/li&gt;
&lt;/ul&gt;The rest of my energy has been going into developing the first release of the full version of Sythe - so far I have implemented about 30% of the record-loop functionality. The good news is that I have the next 10 days off work so it shouldn't be too far away!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/W_k8_Tvvr5U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/4524453852956868466/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/04/whats-next-for-sythe.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4524453852956868466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4524453852956868466?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/W_k8_Tvvr5U/whats-next-for-sythe.html" title="What's next for Sythe" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/04/whats-next-for-sythe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcEQHc4eSp7ImA9WhZRFU8.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-4015840740856275192</id><published>2011-04-11T21:06:00.000+10:00</published><updated>2011-04-11T21:06:41.931+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T21:06:41.931+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><category scheme="http://www.blogger.com/atom/ns#" term="beat dialer" /><title>Milestones</title><content type="html">Just a quick update - here are some milestones I have reached in the last week:&lt;br /&gt;
&lt;br /&gt;
Downloads of &lt;a href="http://beatdialer.thisismyrobot.com/"&gt;Beat Dialer&lt;/a&gt; Lite: 6000&lt;br /&gt;
Downloads of Beat Dialer full: 100&lt;br /&gt;
Downloads of &lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe&lt;/a&gt; Free: 800&lt;br /&gt;
Active installs of Sythe Free: 500&lt;br /&gt;
5-star ratings of Sythe Free: 5&lt;br /&gt;
&lt;br /&gt;
Sythe Free is the highest rated app that I have released with 4 stars average from 13 ratings - I must be doing something right! :)&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/6shVTP26rxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/4015840740856275192/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/04/milestones.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4015840740856275192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/4015840740856275192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/6shVTP26rxs/milestones.html" title="Milestones" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/04/milestones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHw_cCp7ImA9WhZSGE0.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-1327636082690203176</id><published>2011-04-03T14:51:00.000+10:00</published><updated>2011-04-03T14:51:31.248+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-03T14:51:31.248+10:00</app:edited><title>Sythe update released</title><content type="html">&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2zxLi0cYF_s/TZf7j4yw-nI/AAAAAAAAAyc/sirz3Eipi48/s1600/free.screenshot.1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-2zxLi0cYF_s/TZf7j4yw-nI/AAAAAAAAAyc/sirz3Eipi48/s400/free.screenshot.1.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The main input screen, showing the two new buttons&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hrJ3Vfx9Vwc/TZf7kSR9khI/AAAAAAAAAyg/Zi4GYUtosL0/s1600/free.screenshot.2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-hrJ3Vfx9Vwc/TZf7kSR9khI/AAAAAAAAAyg/Zi4GYUtosL0/s400/free.screenshot.2.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Turning on the "loop" button allows you to try out the effects in real-time&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;I've just released a new version of &lt;a href="http://www.thisismyrobot.com/p/sythe.html"&gt;Sythe Free&lt;/a&gt; - the main changes are the addition of a button to keep the sound on whilst you are changing settings as well as the movement of the settings button from the menu to the main screen. Behind the scenes there are a few tiny tweaks to improve the synthesiser's performance.&lt;br /&gt;
&lt;br /&gt;
As before, &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;Sythe Free is available on the Android Market right now&lt;/a&gt;!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/iNDVBOjyhhQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/1327636082690203176/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/04/sythe-update-released.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/1327636082690203176?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/1327636082690203176?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/iNDVBOjyhhQ/sythe-update-released.html" title="Sythe update released" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-2zxLi0cYF_s/TZf7j4yw-nI/AAAAAAAAAyc/sirz3Eipi48/s72-c/free.screenshot.1.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/04/sythe-update-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8EQX85eCp7ImA9WhZTFUU.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-2102854451295259622</id><published>2011-03-20T11:26:00.000+11:00</published><updated>2011-03-20T11:26:40.120+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-20T11:26:40.120+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><category scheme="http://www.blogger.com/atom/ns#" term="how-to" /><title>Managing multiple versions of an Android app</title><content type="html">When developing an Android app you may find yourself in a situation where you want to publish two different versions - one basic version that is free and a fully-featured version that isn't.&lt;br /&gt;
&lt;br /&gt;
The free version is the marketing "hook" to get people to buy your full version - this is the tactic I am taking with Sythe, and that I took with Beat Dialer.&lt;br /&gt;
&lt;br /&gt;
The obvious problem is that you end up with two codebases that undoubtedly share the vast majority of their code - requiring error-prone double-entry of any changes to common code. Here is the technique I am using to help mitigate the effects of this problem.&lt;br /&gt;
&lt;br /&gt;
Firstly - this is what you'll probably have in your Eclipse Package Explorer:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-agbUs-tNShM/TYVEvFvfzVI/AAAAAAAAAxo/QC-o08jVTYU/s1600/Sythe+layout.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="https://lh5.googleusercontent.com/-agbUs-tNShM/TYVEvFvfzVI/AAAAAAAAAxo/QC-o08jVTYU/s400/Sythe+layout.png" width="337" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Two identical hierarchies of code, the differences between versions limited to a few files in the "src" directory.&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;The key thing here is that I have broken the code up into "common" and "tests" packages, separate from the main "free" or "full" packages. In the filesystem these packages are different folders - allowing me to use &lt;a href="http://en.wikipedia.org/wiki/Symbolic_link"&gt;Symlinked&lt;/a&gt; folders to share the "common" and "tests" code between the two projects:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-tqey9ykJQUM/TYVGwe6fScI/AAAAAAAAAxs/Nk410F6uEj0/s1600/Sythe+solution.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="345" src="https://lh6.googleusercontent.com/-tqey9ykJQUM/TYVGwe6fScI/AAAAAAAAAxs/Nk410F6uEj0/s400/Sythe+solution.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I've also Symlinked the "drawable-*" folders in "res"&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Whilst I obviously still have to test each project after an update, I no longer have to re-enter the same code in each - a major reducer of errors.&lt;br /&gt;
&lt;br /&gt;
I how this helps you out with you projects - let me know if you have any suggestions for working with cross-project share code.&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/5gfz_ShX1xY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/2102854451295259622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/03/managing-multiple-versions-of-android.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2102854451295259622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2102854451295259622?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/5gfz_ShX1xY/managing-multiple-versions-of-android.html" title="Managing multiple versions of an Android app" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-agbUs-tNShM/TYVEvFvfzVI/AAAAAAAAAxo/QC-o08jVTYU/s72-c/Sythe+layout.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/03/managing-multiple-versions-of-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HQ3szfSp7ImA9WhZTFU8.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-886156070723998214</id><published>2011-03-19T18:48:00.000+11:00</published><updated>2011-03-19T18:48:52.585+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T18:48:52.585+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><title>Free Sythe beta released</title><content type="html">The title says it all - I've released a free version of Sythe to the &lt;a href="https://market.android.com/details?id=thisismyrobot.android.sythe.free"&gt;Android Market&lt;/a&gt; - please try it out and let me know what you think.&lt;br /&gt;
&lt;br /&gt;
The forthcoming paid version will have extra exciting features like sequencing and background playback, so stay tuned!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/NE0kCi_t73k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/886156070723998214/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/03/free-sythe-beta-released.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/886156070723998214?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/886156070723998214?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/NE0kCi_t73k/free-sythe-beta-released.html" title="Free Sythe beta released" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/03/free-sythe-beta-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcFQH0zfyp7ImA9Wx9aGUU.&quot;"><id>tag:blogger.com,1999:blog-2789125881550613374.post-2748170628557024815</id><published>2011-03-13T14:30:00.000+11:00</published><updated>2011-03-13T14:30:11.387+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-13T14:30:11.387+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android apps" /><category scheme="http://www.blogger.com/atom/ns#" term="sythe" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title>Sythe sequencer layout</title><content type="html">Here's a sneak preview of the in-progress sequencer's integration into Sythe:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-tGNSIl1jIFE/TXw5hgzR8OI/AAAAAAAAAxM/rPKJcl5S3ZU/s1600/v02.sc01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="https://lh4.googleusercontent.com/-tGNSIl1jIFE/TXw5hgzR8OI/AAAAAAAAAxM/rPKJcl5S3ZU/s400/v02.sc01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The idea being that you can have a different setting for each parameter for each step in the sequencer - crossed-fingers that that's how it turns out!&lt;img src="http://feeds.feedburner.com/~r/Thisismyrobot/~4/TKsnXdoBkxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thisismyrobot.com/feeds/2748170628557024815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thisismyrobot.com/2011/03/sythe-sequencer-layout.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2748170628557024815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2789125881550613374/posts/default/2748170628557024815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Thisismyrobot/~3/TKsnXdoBkxs/sythe-sequencer-layout.html" title="Sythe sequencer layout" /><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-tGNSIl1jIFE/TXw5hgzR8OI/AAAAAAAAAxM/rPKJcl5S3ZU/s72-c/v02.sc01.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.thisismyrobot.com/2011/03/sythe-sequencer-layout.html</feedburner:origLink></entry></feed>
