<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Blog of Mark Brady. English Android developer living in Düsseldorf Germany.  This Blog contains some notes on Android, Java and Politics.</description><title>Zedray</title><generator>Tumblr (3.0; @zedray)</generator><link>http://tumblr.zedray.com/</link><item><title>Puzzling Software</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ly5wrpJP051r1ynpn.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;I receive a 3x3 Wooden Puzzle Cube as &lt;a href="http://en.wikipedia.org/wiki/Promotional_item" title="Swag" target="_blank"&gt;swag&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It takes on average of something like 2 to 3 random attempts to get all the pieces into the box.  There is no obvious pattern to any of the solutions.&lt;/p&gt;
&lt;p&gt;Sometimes I solve it on the first go and feel all clever about myself.&lt;/p&gt;
&lt;p&gt;But to solve it like a &lt;em&gt;nerd&lt;/em&gt;, I must do so with a computer program (written in Java), that computes all possible combinations, and executes quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strategy&lt;br/&gt;&lt;/strong&gt;The basic idea is to have a Cube object (3x3x3 Integer array) and keep trying to fill it with Pieces in all their possible orientations.  Any time one fits, I add that partially filled Cube (a copy to be exact) to a queue.  I keep taking Cubes off the queue, and keep adding Pieces until I either have a correct solution (which I store), or a reject (which I throw away).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Optimisation&lt;br/&gt;&lt;/strong&gt;This strategy is simple to implement, but tends to be slow to transverse the problem, and produces a lot of duplicate solutions.  It’s better to &lt;em&gt;“cheat”&lt;/em&gt; in a number of important ways in order to complete quickly:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Space priority&lt;/strong&gt;&lt;br/&gt;Force the Cube must have its internal space filled up in a specific order.  This optimisation cuts down duplicates by rejecting a large number of valid solutions from every sub-tree, as we know they can always be reached in other ways.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-rotating Piece&lt;/strong&gt;&lt;br/&gt;A specific Piece (namely the “S”) is chosen to go through fewer transformations.  This means for all solutions it is essentially “locked” in place (i.e. only moving to the centre or the edge, and never rotating), resulting in fewer duplicate sub-tree searches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Depth first search&lt;/strong&gt;&lt;br/&gt;Storing the entire graph in memory is prohibitively expensive, which is why a depth first search strategy is preferable.  Cube nodes with fewer Pieces remaining take higher priority than their emptier peers, meaning lower parts of the tree are quickly executed and discarded.  Despite the huge size of the problem space, the queue averages around 500 in-memory Cube search nodes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Piece Transformation Caching&lt;/strong&gt;&lt;br/&gt;Generating transformations for each Piece is expensive (I picked up this tip from the Java Profiler: “&lt;a href="http://www.jvmmonitor.org/" title="JVM Monitor - Java profiler integrated with Eclipse" target="_blank"&gt;JVM Monitor&lt;/a&gt;”).  It’s much more efficient to cache all the transformations for each shape in memory at the start, and just reject the options that don’t fit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate Filtering&lt;/strong&gt;&lt;br/&gt;As we have a &lt;em&gt;“Non-rotating Piece”&lt;/em&gt; and each solution is a Cube of &lt;em&gt;“Piece.TYPE”&lt;/em&gt; value, it’s easy to deep compare each solution and remove the remaining duplicates.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Solution&lt;br/&gt;&lt;/strong&gt;My result: 222 possible solutions (ignoring by convention both duplicates and rotations), calculated in 18 seconds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source Code&lt;br/&gt;&lt;/strong&gt;Code is written in Java, and &lt;a href="https://github.com/zedray/Sandbox/tree/cube/cs/src/com/zedray/box" title="Sandbox" target="_blank"&gt;available in one of my GitHub repositories&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trivia&lt;br/&gt;&lt;/strong&gt;This puzzle is not a &lt;a href="http://en.wikipedia.org/wiki/Soma_cube" title="Soma cube" target="_blank"&gt;true Soma Cube&lt;/a&gt; (which has 240 solutions), as the pieces provided are of different shapes.&lt;/p&gt;

&lt;p&gt;EDIT:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’m not going to show my working (bad student!), but the computational complexity (worst case) of my algorithm is:&lt;/p&gt;
&lt;p&gt;(a) Without caching (i.e. generating each possible 3D piece on the fly):&lt;br/&gt;&lt;img alt="n^{p^{2}}" src="http://media.tumblr.com/tumblr_ly97a4EQfj1r1ynpn.png"/&gt;&lt;/p&gt;
&lt;p&gt;(b) With caching:&lt;br/&gt;&lt;img alt="n^{t}" src="http://media.tumblr.com/tumblr_ly978yfWHo1r1ynpn.png"/&gt;&lt;/p&gt;
&lt;p&gt;n - width/length/height of Cube (hence lots of my for-loops have cubic complexity).&lt;br/&gt;p - number of pieces.&lt;br/&gt;t - number of types of piece (where t &lt; p).&lt;/p&gt;
&lt;p&gt;Neither approach scales very well if you want to output ALL possible solutions, though the depth first search approach does work well when all you want to find is ONE solution to the problem (with all solutions having equal merit).&lt;/p&gt;
&lt;p&gt;Optimisations such as Space priority (saves memory), and non-rotating piece (duplicate prevention) do not affect the complexity calculation but shave several orders of magnitude off the real world performance.  Having to filter duplicates from the result is a sign that the search algorithm itself can be improved.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/16238834216</link><guid>http://tumblr.zedray.com/post/16238834216</guid><pubDate>Sat, 21 Jan 2012 20:03:00 +0100</pubDate></item><item><title>The "Be FED chairman For A Day" Game</title><description>&lt;a href="http://www.frbsf.org/education/activities/chairman/"&gt;The "Be FED chairman For A Day" Game&lt;/a&gt;</description><link>http://tumblr.zedray.com/post/13058746021</link><guid>http://tumblr.zedray.com/post/13058746021</guid><pubDate>Sun, 20 Nov 2011 14:12:25 +0100</pubDate></item><item><title>It’s all about customisation.</title><description>&lt;a href="http://www.androidpolice.com/2011/11/17/google-releases-a-new-galaxy-nexus-commercial-along-with-ten-how-to-videos-we-continue-impatiently-drooling/"&gt;It’s all about customisation.&lt;/a&gt;: &lt;p&gt;&lt;img height="136" src="http://cdn.androidpolice.com/wp-content/uploads/2011/11/image_thumb86.png" width="150"/&gt;&lt;/p&gt;
&lt;p&gt;With all the patent law lately, it’s nice to see Google &lt;a href="http://www.androidpolice.com/2011/11/17/google-releases-a-new-galaxy-nexus-commercial-along-with-ten-how-to-videos-we-continue-impatiently-drooling/"&gt;still innovating on Android&lt;/a&gt;.  I’m still waiting for this phone to be available in Germany.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/12963604727</link><guid>http://tumblr.zedray.com/post/12963604727</guid><pubDate>Fri, 18 Nov 2011 11:22:00 +0100</pubDate></item><item><title>The Microsoft Six</title><description>&lt;a href="http://www.androidpit.com/en/android/blog/399660/Microsoft-s-Android-Deals-Reveal-Just-How-Broken-Patent-System-Is"&gt;The Microsoft Six&lt;/a&gt;: &lt;p&gt;&lt;p class="MsoNormal"&gt;Finally we have &lt;a href="http://www.androidpit.com/en/android/blog/399660/Microsoft-s-Android-Deals-Reveal-Just-How-Broken-Patent-System-Is" target="_blank"&gt;a list of the Patents&lt;/a&gt; that Microsoft are using to gain revenue from the Android ecosystem.  Hopefully they will be challenged in court sooner rather than later.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Background Image Loading&lt;/li&gt;
&lt;li&gt;Operating system provided tabs&lt;/li&gt;
&lt;li&gt;Handles when selecting text&lt;/li&gt;
&lt;li&gt;Annotation of electronic documents&lt;/li&gt;
&lt;li&gt;Web browser loading status icons&lt;/li&gt;
&lt;li&gt;Simulating mouse inputs using non-mouse devices&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/12926917104</link><guid>http://tumblr.zedray.com/post/12926917104</guid><pubDate>Thu, 17 Nov 2011 16:47:55 +0100</pubDate></item><item><title>Where The Cuts Are MadeVery interesting review of the methods...</title><description>&lt;iframe width="400" height="299" src="http://www.youtube.com/embed/Pj8GlqiOAIs?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;p class="MsoNormal"&gt;&lt;strong&gt;Where The Cuts Are Made&lt;br/&gt;&lt;/strong&gt;Very interesting review of the methods (well known to Journalists) used to change what people say in print, radio and TV.  Something to watch out for in future.&lt;/p&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/12787188001</link><guid>http://tumblr.zedray.com/post/12787188001</guid><pubDate>Mon, 14 Nov 2011 13:36:52 +0100</pubDate></item><item><title>How do I view the signature (MD5 or SHA1) of the certificate used to sign a given Android APK?</title><description>&lt;p&gt;Your APK is a ZIP file, so extract the signature file located inside &lt;em&gt;META-INF/{filename}.RSA&lt;/em&gt;.  For some reason the {filename} can vary, but in my example it is CERT.RSA.  View the signature information using the keytool:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;keytool -printcert –file CERT.RSA&lt;/em&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11610231854</link><guid>http://tumblr.zedray.com/post/11610231854</guid><pubDate>Tue, 18 Oct 2011 14:15:00 +0200</pubDate><category>android</category></item><item><title>Sometimes we forget how great it is to live in Düsseldorf.</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/uCpPcxc4FoM?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Sometimes we forget how great it is to live in Düsseldorf.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11538515925</link><guid>http://tumblr.zedray.com/post/11538515925</guid><pubDate>Sun, 16 Oct 2011 22:15:01 +0200</pubDate></item><item><title>Migrating my WordPress blog to Tumbler</title><description>&lt;p&gt;&lt;img src="http://30.media.tumblr.com/tumblr_lt0l4zQvw91qc4b8so1_500.jpg" width="196" height="44"/&gt;&lt;/p&gt;
&lt;p&gt;Steps taken:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Set up &lt;a target="_blank" href="http://www.tumblr.com"&gt;Tumbler blog&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Point sub-domain ”tumblr.zedray.com” to ”zedray.tumblr.com” by editing my &lt;a target="_blank" href="http://blog.ryanrampersad.com/2009/02/27/setup-tumblr-a-record-with-1and1/"&gt;1and1 A-Record&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Port over my entire WordPress history.&lt;/li&gt;
&lt;li&gt;Delete all the mess.&lt;/li&gt;
&lt;li&gt;Point my 20 top incoming links to their new location using PHP redirect headers. &lt;/li&gt;
&lt;/ol&gt;</description><link>http://tumblr.zedray.com/post/11314944550</link><guid>http://tumblr.zedray.com/post/11314944550</guid><pubDate>Tue, 11 Oct 2011 15:01:00 +0200</pubDate></item><item><title>Gerrymandering rears its ugly head (again)</title><description>&lt;p&gt;For anyone who didn’t know what they were voting for &lt;a title="United Kingdom Alternative Vote referendum, 2011" target="_blank" href="http://en.wikipedia.org/wiki/United_Kingdom_Alternative_Vote_referendum,_2011"&gt;last May&lt;/a&gt;, here  comes the new governments plan to &lt;a title="The Full Boundary Review" target="_blank" href="http://order-order.com/2011/09/12/the-full-boundary-review/"&gt;guarantee themselves a strong majority&lt;/a&gt; in their second term.&lt;/p&gt;
&lt;p&gt;Links:&lt;br/&gt;&lt;a target="_blank" href="http://order-order.com/2011/09/12/the-full-boundary-review/"&gt;The Full Boundary Review&lt;br/&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/United_Kingdom_Alternative_Vote_referendum,_2011"&gt;United Kingdom Alternative Vote referendum, 2011&lt;/a&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401953305</link><guid>http://tumblr.zedray.com/post/11401953305</guid><pubDate>Tue, 13 Sep 2011 00:00:00 +0200</pubDate><category>politics</category></item><item><title>Call + SMS Log Widget</title><description>&lt;p&gt;&lt;a target="_blank" href="http://market.android.com/details?id=com.zedray.log"&gt;&lt;img title="Android Market" alt="Android Market" src="http://www.android.com/images/brand/60_avail_market_logo2.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download &lt;a target="_blank" href="http://market.android.com/details?id=com.zedray.log"&gt;Call + SMS Log Widget&lt;/a&gt; from Android Market.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401952664</link><guid>http://tumblr.zedray.com/post/11401952664</guid><pubDate>Wed, 10 Aug 2011 00:00:00 +0200</pubDate><category>android</category></item><item><title>Naked Capitalism: How Germany Achieved Stable and Affordable Housing</title><description>&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/screen-shot-2011-06-23-at-31647-am.png" width="316" height="200"/&gt;&lt;/p&gt;
&lt;p&gt;Very interesting &lt;a target="_blank" href="http://www.nakedcapitalism.com/2011/06/how-germany-achieved-stable-and-affordable-housing.html"&gt;Naked Capitalism post&lt;/a&gt; on the huge difference between Germany’s property market and that of the United Kingdom.&lt;/p&gt;
&lt;p&gt;Two comparable countries with radically different systems, one of which is designed to make property older, smaller, scarcer, and totally unaffordable.  I now live in Germany.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401950336</link><guid>http://tumblr.zedray.com/post/11401950336</guid><pubDate>Mon, 27 Jun 2011 00:00:00 +0200</pubDate><category>politics</category></item><item><title>Awesome Mountain View</title><description>&lt;p&gt;Three cool things about driving past Mountain View…  &lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_5242.JPG" alt="Computer History Museum" id="image383"/&gt;&lt;strong&gt;Computer History Museum&lt;br/&gt;&lt;/strong&gt;Find out why they call it &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Silicon_Valley"&gt;Silicon Valley&lt;/a&gt;.  See who the first computers were, with what they were replaced, and how we got to where we are today.  Learn how US government spending fostered various computer revolutions.  Take the &lt;a target="_blank" href="http://www.computerhistory.org/"&gt;Geek tour&lt;/a&gt; and get an inclusive T-Shirt and pin.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_5271.JPG" alt="Google head office" id="image384"/&gt;&lt;br/&gt;&lt;strong&gt;Google (or just about anyone’s) corporate head offices&lt;br/&gt;&lt;/strong&gt;See the colourful campus bikes and logos surround expansive (but otherwise standard) red brick corporate offices (triggering fond memories of my time at Sun).  Or visit Apple, which is less than ten miles away down in Cupertino.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/2011-05-15-171454.JPG" alt="SFO Airport" id="image385"/&gt;&lt;strong&gt;SFO Airport&lt;br/&gt;&lt;/strong&gt;Not exactly in Mountain View, but I only drove this way while driving back to get my flight.  There just wasn’t enough time to do everything.  Maybe I’ll get to do this again next year?&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401948343</link><guid>http://tumblr.zedray.com/post/11401948343</guid><pubDate>Sat, 11 Jun 2011 00:00:00 +0200</pubDate><category>life</category></item><item><title>Awesome California Monterey Peninsula</title><description>&lt;p&gt;Five cool things about a couple of days driving around the &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Monterey_Peninsula"&gt;Monterey Peninsula&lt;/a&gt;…&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_5171.JPG" id="image377" alt="SFO Coastline"/&gt;&lt;br/&gt;&lt;strong&gt;Coastline&lt;br/&gt;&lt;/strong&gt;Gorgeous views.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_4923.JPG" id="image378" alt="Killer Whales"/&gt;&lt;br/&gt;&lt;strong&gt;Whales&lt;br/&gt;&lt;/strong&gt;Go see the &lt;a target="_blank" href="http://www.montereybayaquarium.org/"&gt;Monterey Aquarium&lt;/a&gt; they say, but isn’t May the best time to see these creatures in the wild?  Get a boat and have a “Bunny Hugger” Marine Biologist provide a running commentary, as &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Humpback_whale"&gt;Humpbacks&lt;/a&gt; and &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Killer_whale"&gt;Killer Whales&lt;/a&gt; popup and make their appearance.  Remember to dress appropriately!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_5073.JPG" id="image379" alt="Seals"/&gt;&lt;br/&gt;&lt;strong&gt;Seals&lt;br/&gt;&lt;/strong&gt;Loads of them just sitting on the beach having a good rest after a hard nights fishing.  Stand behind the fence and watch out for the cute babies waiting for their mothers.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_4483.JPG" id="image380" alt="Redwoods"/&gt;&lt;br/&gt;&lt;strong&gt;Giant Redwoods&lt;br/&gt;&lt;/strong&gt; &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Sequoia_sempervirens"&gt;Tall trees, very old&lt;/a&gt;…  Here before you were born, still here long after you’re dead.  Great place for a guided walk and a quiet sit down.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.zedray.com/wp-content/uploads/2011/06/img_4446.JPG" alt="Surfers" id="image381"/&gt;&lt;br/&gt;&lt;strong&gt;Surfers (of various kinds)&lt;br/&gt;&lt;/strong&gt;Crazy guys playing hard and fast with nature, making dangerous look cool.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401945246</link><guid>http://tumblr.zedray.com/post/11401945246</guid><pubDate>Sat, 11 Jun 2011 00:00:00 +0200</pubDate><category>life</category></item><item><title>Google I/O 2011 Highlights</title><description>&lt;p&gt;&lt;img alt="Android and Mark" id="image365" src="http://blog.zedray.com/wp-content/uploads/2011/06/2011-05-10-185849.jpg"/&gt;&lt;strong&gt;Location&lt;br/&gt;&lt;/strong&gt;May 10-11, 2011 @ Moscone Center, San Francisco.  There was far too much content at the conference this year for me to take it all in.  Even to follow just the Android track would require being in three different places at the same time.  Hence, this post is just a brief summary of what I did + found interesting while I was there, with links to the relevant session videos on YouTube where available&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bootcamp (Monday)&lt;br/&gt;&lt;/strong&gt;Boot camp is a much smaller warm up event (at a different location), giving students and developers a chance to get setup on key technologies before tackling the more advanced stuff at the main event.  Pros&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Real lab tutorials to get your hands dirty on working code.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Googlers are briefed not to announce anything new.  Resulting in Q&amp;A sessions full of frustrating holes.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Highlights&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Welcome “Don’t try and boil the ocean” and “Making the most of I/O” speech.&lt;/li&gt;
&lt;li&gt;Avoided “Beginner’s Guide to Android” (I hope I know this stuff by now) and went to “Intro to Google APIs” instead.  Google have over 100 APIs and now offers a standard way to access them online and in Android compatible Java code.&lt;/li&gt;
&lt;li&gt;“Google TV, the New Frontier for App Development” came with tips for testing Google TV apps in the current emulator.  Google TVs are a promising new class of Android device, although the product rollout will be America centric for some time with free development devices only available to US based developers.&lt;/li&gt;
&lt;li&gt;“Android Best Practices for Beginners” - Lots of UI tips and tricks, always a good recap (even for old hands).&lt;/li&gt;
&lt;li&gt;“Introduction to Honeycomb” lab session on migrating the Notepad application to the new Honeycomb UI (i.e. using the new Fragments and Action bar API).  Very useful tutorial as we all got our hands on proper Honeycomb hardware the very next day.&lt;/li&gt;
&lt;li&gt;“Getting Started with GWT &amp; Google App Engine” - GWT offers a Java friendly method of building web apps (which are becoming more mobile friendly), and GAE offers a well supported tool chain for developing back ends (for both Android and GWT based apps).  This is a powerful combination for those of us who would like to build our products end-to-end using Java code (i.e. Android/Java clients connecting to Java servers, hosting Java based Websites).&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img alt="Branded seats" id="image366" src="http://blog.zedray.com/wp-content/uploads/2011/06/2011-05-10-184650.jpg"/&gt;&lt;strong&gt;Google I/O Day One (Tuesday)&lt;br/&gt;&lt;/strong&gt;5,000 students, developers and press crammed into San Francisco’s Moscone Center West, offering a busy conference schedule, sandboxes and office hours with developer advocates.  Highlights&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Watch the &lt;a title="Google I/O Day one keynote" target="_blank" href="http://www.google.com/events/io/2011/sessions/android-momentum-mobile-and-more-at-google-i-o.html"&gt;day one keynote&lt;/a&gt;, as it’s almost exclusively Android announcements.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Honeycomb Highlights" target="_blank" href="http://www.google.com/events/io/2011/sessions/honeycomb-highlights.html"&gt;Honeycomb Highlights&lt;/a&gt;” - Essential viewing for anyone developing on Android Tablets.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Android Protips: Advanced Topics for Expert Android App Developers" target="_blank" href="http://www.google.com/events/io/2011/sessions/android-protips-advanced-topics-for-expert-android-app-developers.html"&gt;Android Protips: Advanced Topics for Expert Android App Developers&lt;/a&gt;” - Reto Meier (&lt;a title="Reto Meiers books on Amazon" target="_blank" href="http://www.amazon.co.uk/Reto-Meier/e/B002BMF4OC"&gt;yes the author&lt;/a&gt;) on stage explaining how to make our great apps awesome and more tablet friendly.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Don't just build a mobile app. Build a business" target="_blank" href="http://www.google.com/events/io/2011/sessions/dont-just-build-a-mobile-app-build-a-business.html"&gt;Don’t just build a mobile app. Build a business&lt;/a&gt;” - Summary of advertising on Android, regretted attending because &lt;a title="Android Open Accessory API and Development Kit (ADK)" target="_blank" href="http://www.google.com/events/io/2011/sessions/android-open-accessory-api-and-development-kit-adk.html"&gt;next door they were giving out free USB developer kits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Fireside Chat with the Android Team" target="_blank" href="http://www.google.com/events/io/2011/sessions/fireside-chat-with-the-android-team.html"&gt;Fireside Chat with the Android Team&lt;/a&gt;” - Long Q&amp;A session with the heads of the various development teams.  I asked a question near the end and got brushed off as the answer was too &lt;em&gt;commercially sensitive&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Android + App Engine: A Developer's Dream Combination" target="_blank" href="http://www.google.com/events/io/2011/sessions/android-app-engine-a-developer-s-dream-combination.html"&gt;Android + App Engine: A Developer’s Dream Combination&lt;/a&gt;” - Google eclipse plug-in now provides end-to-end support for GAE, GWT and Cloud to device push messaging.  Very serious piece of kit, and all for fee.  Essential viewing!&lt;/li&gt;
&lt;li&gt;“After hours party,” with Ice cream, pinball, robots, branded cookies, flying cars, and a loud rock band.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img alt="Android pannel" id="image367" src="http://blog.zedray.com/wp-content/uploads/2011/06/2011-05-09-140115.jpg"/&gt;&lt;strong&gt;Google I/O Day Two (Wednesday)&lt;br/&gt;&lt;/strong&gt;Highlights&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a title="Google I/O Day two keynote" target="_blank" href="http://www.google.com/events/io/2011/sessions/google-chrome-day-2-keynote-from-google-i-o.html"&gt;Day two keynote&lt;/a&gt; was chrome and web apps focused, with the “Mighty Eagle” of Angry Birds on stage.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Android Market for Developers" target="_blank" href="http://www.google.com/events/io/2011/sessions/android-market-for-developers.html"&gt;Android Market for Developers&lt;/a&gt;” - Loads of new announcements, and I burned my lunch hour by staying afterwards for an extended Q&amp;A.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Designing and Implementing Android UIs for Phones and Tablets" target="_blank" href="http://www.google.com/events/io/2011/sessions/designing-and-implementing-android-uis-for-phones-and-tablets.html"&gt;Designing and Implementing Android UIs for Phones and Tablets&lt;/a&gt;.” Essential viewing, but the session was full before I arrived (I was stuck in lunch queues) so I attended “Optimizing Android Apps with Google Analytics” which contained little new information.&lt;/li&gt;
&lt;li&gt;“&lt;a title="Evading Pirates and Stopping Vampires Using Licence Verification Library, In-App billing, and App Engine" target="_blank" href="http://www.google.com/events/io/2011/sessions/evading-pirates-and-stopping-vampires-using-license-verification-library-in-app-billing-and-app-engine.html"&gt;Evading Pirates and Stopping Vampires Using Licence Verification Library, In-App billing, and App Engine&lt;/a&gt;” - Helpful guide to securing your applications and back ends, and how to turn unscrupulous users into paying customers.&lt;/li&gt;
&lt;li&gt;“&lt;a title="HTML5 Versus Android: Apps or Web for Mobile Development?" target="_blank" href="http://www.google.com/events/io/2011/sessions/html5-versus-android-apps-or-web-for-mobile-development.html"&gt;HTML5 Versus Android: Apps or Web for Mobile Development?&lt;/a&gt;” - Google are big into HTML5 web apps and offer tools for doing both web and native Android client development.  This was a great guide to doing dual development on the Google tool chain, along with the advantages of both methods.  Recommended viewing!&lt;/li&gt;
&lt;li&gt;“&lt;a title="Taking Android to Work" target="_blank" href="http://www.google.com/events/io/2011/sessions/taking-android-to-work.html"&gt;Taking Android to Work&lt;/a&gt;” - A look at the (currently limited) support in Android for securing the entire device to access corporate data.  You’ll see me at the end acting as a user advocate, asking for a secure mode so I don’t need a password lock screen on the weekend.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Much more session videos &lt;a title="More session videos" target="_blank" href="http://www.google.com/events/io/2011/sessions.html"&gt;can be found here&lt;/a&gt;.  &lt;strong&gt;Free stuff&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;T-Shirts: Bootcamp (Green camouflage + Bootcamp logo – Google Employees got cooler White camouflage) and Google I/O (tasteful dark blue + Google I/O logo, with &lt;a title="Morse code puzzle" target="_blank" href="http://www.mobilecrunch.com/2011/05/10/google-io-shirt-hidden-message/"&gt;white Morse code puzzle&lt;/a&gt; on the back).&lt;/li&gt;
&lt;li&gt;I’m keeping my Samsung Tab for development, but gave away the Verizon 4G hotspot (with three months of data) to an American college, as the kit works only in the USA and he was the person most likely to make use of it.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://tumblr.zedray.com/post/11401939872</link><guid>http://tumblr.zedray.com/post/11401939872</guid><pubDate>Fri, 10 Jun 2011 00:00:00 +0200</pubDate><category>android</category></item><item><title>Awesome San Francisco</title><description>&lt;p&gt;Five cool things about a weekend spent running around San Francisco…&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hotel Nikko view" id="image374" src="http://blog.zedray.com/wp-content/uploads/2011/06/2011-05-11-175513.jpg"/&gt;&lt;br/&gt;&lt;strong&gt;View outside my hotel window&lt;br/&gt;&lt;/strong&gt;With a 9 hour time difference it’s easy getting up early on Saturday morning and take in the view of down town San Francisco from &lt;a title="Hotel Nikko" target="_blank" href="http://www.hotelnikkosf.com/"&gt;Hotel Nikko&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Cable Car" id="image372" src="http://blog.zedray.com/wp-content/uploads/2011/06/img_3832.JPG"/&gt;&lt;br/&gt;&lt;strong&gt;Municipal Railway (i.e. the Cable cars)&lt;br/&gt;&lt;/strong&gt;Home to an amalgamation of &lt;a title="San Francisco cable car system" target="_blank" href="http://en.wikipedia.org/wiki/San_Francisco_cable_car_system"&gt;Cable Cars&lt;/a&gt; (slightly less crazy than the ones in Lisbon), historic Street Cars (classy) and Trolley Busses, representing a &lt;a title="San Francisco Municipal Railway" target="_blank" href="http://en.wikipedia.org/wiki/San_Francisco_Municipal_Railway"&gt;hundred years of living transportation&lt;/a&gt; history.&lt;/p&gt;
&lt;p&gt;&lt;img id="image373" alt="Pier 39 Seals" src="http://blog.zedray.com/wp-content/uploads/2011/06/img_3715.JPG"/&gt;&lt;br/&gt;&lt;strong&gt;Fishermans Wharf&lt;br/&gt;&lt;/strong&gt;An American Submarine (&lt;a title="USS Pampanito" target="_blank" href="http://en.wikipedia.org/wiki/USS_Pampanito"&gt;USS Pampanito&lt;/a&gt;), Seals barking on the harbour, anti-Obama political campaigners, and a soup + bread lunch at the Boudin Bakery to take it all in.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Golden Gate Bridge" id="image371" src="http://blog.zedray.com/wp-content/uploads/2011/06/img_3941.JPG"/&gt;&lt;img id="image369" alt="Mark and the Flag" src="http://blog.zedray.com/wp-content/uploads/2011/06/img_4063.JPG"/&gt;&lt;br/&gt;&lt;strong&gt;Golden Gate Bridge&lt;br/&gt;&lt;/strong&gt;Taking a boat tour from Fisherman Wharf, directly &lt;a title="Golden Gate Bridge" target="_blank" href="http://en.wikipedia.org/wiki/Golden_Gate_Bridge"&gt;under the bridge&lt;/a&gt; and then back around &lt;a title="Alcatraz Island" target="_blank" href="http://en.wikipedia.org/wiki/Alcatraz_Island"&gt;Alcatraz island&lt;/a&gt;.  May was very windy, but great to get a photo in front of the flag.&lt;/p&gt;
&lt;p&gt;&lt;img id="image370" alt="California Academy of Sciences" src="http://blog.zedray.com/wp-content/uploads/2011/06/img_4152.JPG"/&gt;&lt;br/&gt;&lt;strong&gt;California Academy of Sciences&lt;br/&gt;&lt;/strong&gt;Situated in the enormous &lt;a title="Golden Gate Park" target="_blank" href="http://en.wikipedia.org/wiki/Golden_Gate_Park"&gt;Golden Gate Park&lt;/a&gt;, &lt;a title="California Academy of Sciences" target="_blank" href="http://en.wikipedia.org/wiki/California_Academy_of_Sciences"&gt;featuring&lt;/a&gt; an indoor rainforest (watch out for the butterflies), aquarium (beautiful), penguins (in too small an enclosure), all digital Planetarium (simply breathtaking), Global warming exhibition (how much jet fuel did I use this week?) and an Albino crocodile.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401941793</link><guid>http://tumblr.zedray.com/post/11401941793</guid><pubDate>Fri, 10 Jun 2011 00:00:00 +0200</pubDate><category>life</category></item><item><title>Google I/O 2011</title><description>&lt;script type="text/javascript" src="http://www.google.com/events/io/2011/static/js/iobadge.js"&gt;&lt;/script&gt;&lt;p&gt;For the first time ever, I will be attending the &lt;a title="Google IO" target="_blank" href="http://www.google.com/events/io/2011/index.html"&gt;Google I/O&lt;/a&gt; (plus warm-up &lt;a target="_blank" href="http://www.io-bootcamp.com/"&gt;BootCamp&lt;/a&gt;) event  in &lt;a title="Moscone Center San Francisco" target="_blank" href="http://maps.google.co.uk/maps/place?cid=13048026345962796583&amp;q=Google+IO&amp;hl=en&amp;ie=UTF8&amp;ll=37.785661,-122.405521&amp;spn=0,0&amp;z=18"&gt;San Francisco&lt;/a&gt;.  I am looking forward to getting my hands on a usable “&lt;a title="Android Honeycomb" target="_blank" href="http://developer.android.com/intl/de/sdk/android-3.0.html"&gt;Honeycomb&lt;/a&gt;” Android  Tablet (maybe as a freebie?), get a chance to try out &lt;a title="Google TV" target="_blank" href="http://www.google.com/tv/"&gt;Google TV&lt;/a&gt; and probably learn as much as I can about &lt;a title="Google App Engine" target="_blank" href="http://code.google.com/appengine/"&gt;GAE&lt;/a&gt; and &lt;a title="Google Web Toolkit" target="_blank" href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;.  Anything else that happens when I’m over there will be a bonus.  Now lets see how I cope with the jet lag.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401938853</link><guid>http://tumblr.zedray.com/post/11401938853</guid><pubDate>Wed, 04 May 2011 00:00:00 +0200</pubDate><category>life</category><category>android</category></item><item><title>Global Android Activations, Oct '08 - Jan '11</title><description>&lt;p&gt;&lt;span&gt;&lt;span&gt;Data visualization of &lt;a target="_blank" href="http://www.youtube.com/watch?v=fqFpq9WXbJo"&gt;global Android device activations&lt;/a&gt; from October 2008 to January 2011.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401938246</link><guid>http://tumblr.zedray.com/post/11401938246</guid><pubDate>Thu, 24 Feb 2011 00:00:00 +0100</pubDate><category>android</category></item><item><title>Unstable Walking Robot</title><description>&lt;p&gt;As an inventor I’ve always wanted to program a &lt;a target="_blank" href="http://www.plasticpals.com/?p=26141"&gt;robot to walk&lt;/a&gt;, but have never seen hardware capable of providing the power to weight ratio required to replicate the inherently unstable human walking motion.&lt;/p&gt;

&lt;p&gt;&lt;img alt="robot1.png" id="image357" src="http://blog.zedray.com/wp-content/uploads/2010/12/robot1.png"/&gt;&lt;/p&gt;

&lt;p&gt;By unstable, I’m talking about robots without the big blocky feet that stop them from falling over when you switch them off.&lt;/p&gt;

&lt;p&gt;&lt;img alt="robot2.png" id="image358" src="http://blog.zedray.com/wp-content/uploads/2010/12/robot2.png"/&gt;&lt;/p&gt;

&lt;p&gt;At about 1:40 the robot slips, rather than loses balance.  I think they should replace the blades with a “hoof” design, using &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Powerbocking"&gt;Bocks (a German invention)&lt;/a&gt; for inspiration.  Source of video &lt;a target="_blank" href="http://www.plasticpals.com/?p=26141"&gt;PlasticPals.com&lt;/a&gt;.&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401936763</link><guid>http://tumblr.zedray.com/post/11401936763</guid><pubDate>Thu, 16 Dec 2010 00:00:00 +0100</pubDate></item><item><title>Localising (or Localizing) the Last Call Widget for Android.</title><description>&lt;p&gt;&lt;img id="image353" alt="Flags" src="http://blog.zedray.com/wp-content/uploads/2010/12/flags.png"/&gt;

The Android Market is a worldwide phenomenon, and I want to make my application more accessible to my users wherever they come from.

&lt;strong&gt;Who are my users?&lt;/strong&gt;
Unsurprisingly for software written in English, three quarters of my users have their Android devices set to English locale.  What surprised me was how many English locals existed (46 in total), including those where English is a minority or foreign language (e.g. code “en-DE” indicates a device set to show English text, but to use say German currency and conventions).

&lt;img id="image355" alt="Users" src="http://blog.zedray.com/wp-content/uploads/2010/12/users.png"/&gt;

In Asia (a continent I have never visited), I have a strong Korean, Chinese and Japanese user base, while German, Spanish, Russian and French are the most represented European languages.  Though interesting, I am going to ignore the 31 languages less popular than French in my translation activities for now.

&lt;strong&gt;How to localise&lt;/strong&gt;?
Android provides its own framework for separating texts (&lt;a target="_blank" href="http://en.wikipedia.org/wiki/String_(computer_science)"&gt;called “Strings” by developers&lt;/a&gt;) and resources from application code.  This makes it easy to integrate Android software into existing content management systems built around translation.  While I’ve written a few of these systems in my time, I was looking for a company that offered tools and translation services online to provide scalability and to help with independent projects.

[Android &lt;a target="_blank" href="http://developer.android.com/guide/topics/resources/"&gt;Application Resources&lt;/a&gt;, &lt;a target="_blank" href="http://developer.android.com/guide/topics/resources/localization.html"&gt;Localization&lt;/a&gt; and &lt;a target="_blank" href="http://developer.android.com/resources/tutorials/localization/"&gt;Tutorial&lt;/a&gt;]

&lt;img alt="ICANLOCALIZE" id="image354" src="http://blog.zedray.com/wp-content/uploads/2010/12/icanlocalize.png"/&gt;&lt;strong&gt;Tool review - ICANLOCALIZE&lt;/strong&gt;
This is one of many websites offering online translation services, though I chose it because it offered native import of Android formatted “string.xml” files, upfront pricing and a straightforward workflow.

[&lt;a target="_blank" href="http://www.icanlocalize.com/my/invite/7712"&gt;ICANLOCALIZE.com&lt;/a&gt; site and &lt;a target="_blank" href="http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/"&gt;Android Localization Tutorial&lt;/a&gt;]

For my first test, I chose to commission a German translation, as it allowed me to easily review the results and judge the quality of the translation myself.  Screenshots of the actual translated work &lt;a target="_blank" href="http://www.zedray.com/downloads/calllogwidget/23/index.php?locale=de"&gt;can be seen here&lt;/a&gt;.

&lt;strong&gt;Likes:&lt;/strong&gt;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It took about 5 minutes to sign up and create a basic &lt;a href="http://blog.zedray.com/call-log-widget/"&gt;Last Call Widget&lt;/a&gt; project ready for translation.&lt;/li&gt;
	&lt;li&gt;Duplicate strings were highlighted by the tool, helping me optimise my strings and save money.&lt;/li&gt;
	&lt;li&gt;CMS let me add my Android Market listing info and other meta data.&lt;/li&gt;
	&lt;li&gt;CMS let me add my own translations.  Useful because 21 Strings were ripped off from the Android open source project where they come pre-translated.&lt;/li&gt;
	&lt;li&gt;My 49 Strings cost $10.85 (or 8.19€ in my local currency), and was completed the next working day.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;Dislikes:&lt;/strong&gt;
&lt;ul&gt;&lt;li&gt;Resource importer did not remove XML escape characters.  This made my translations look messy in the CMS, although the translator was smart enough to work this out for herself and left them in place.&lt;/li&gt;
	&lt;li&gt;Resource exporter should not include the untranslated (i.e. default English) strings, as Android handles this during runtime by showing default Strings instead.  Having duplicate English strings across multiple files only makes my APK fatter.&lt;/li&gt;
	&lt;li&gt;Resource exporter should output XML parameters with double quotes instead of single quotes.&lt;/li&gt;
	&lt;li&gt;It’s not clear how translator ratings are calculated.  Looking at the site I didn’t see many people with less than a 5 star rating, even those with no recommendations by clients.  This makes it difficult for a customer to choose between translators.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;What I would like to see:&lt;/strong&gt;
&lt;ul&gt;&lt;li&gt;My software is free but not open sourced, and I regularly get offers of translation from end users and app store representatives.  What I would like to see is a Wiki like interface that I can point these people at, so they can easily update the Strings themselves.  Note: This may be comparable to the “Private translators” feature which I am yet to try.&lt;/li&gt;
	&lt;li&gt;Software versions change, and I would like a way to tag translations to specific versions of my software.  This would allow me to support older (or branched) versions of my software and give me some of the flexibility I am used to while &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Git_(software)"&gt;developing with GIT&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Generating, and then regenerating &lt;a target="_blank" href="http://www.zedray.com/downloads/calllogwidget/23/index.php?locale=de"&gt;screenshots for review&lt;/a&gt; is a time consuming process.  Hence I would like to see a screenshot maker script for Android, probably implemented as an add-on in the test project.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;What I was freaked out by:&lt;/strong&gt;
&lt;ul&gt;&lt;li&gt;I know that there is a lot of demand from end users to localise my software, but I was shocked to receive a complete and unsolicited German translation of my application from an end user &lt;em&gt;&lt;strong&gt;on the same day&lt;/strong&gt;&lt;/em&gt; that the ICANLOCALIZE translator turned around her work.  It was fun to compare the two for differences, but the paid service was of overall higher quality.  Strange coincidence.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;
Translating an application is expensive, and &lt;a href="http://blog.zedray.com/call-log-widget/"&gt;Last Call Widget&lt;/a&gt; isn’t currently set up to make any money.  Right now I am interested in translating for some of the high value languages, and enabling motivated users (of which there seem to be many) to translate the app themselves.  Having a tool chain that supports localisation will be invaluable to future commercial ventures.

Translation ads a financial cost to every String in the application, discouraging UI changes, and pushing designers towards using symbols rather than words to convey messages whenever possible.  Ideally translation should occur at the end of a software project, but should not be considered as an afterthought.

I’m still working out how this applies to &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile software development&lt;/a&gt;.

Note: Just to destroy any aura of impartiality in the above review, I found an “&lt;a target="_blank" href="http://www.icanlocalize.com/my/invite/7712"&gt;Affiliate link&lt;/a&gt;” feature in the control panel and have swapped out all the links in this post.</description><link>http://tumblr.zedray.com/post/11401934712</link><guid>http://tumblr.zedray.com/post/11401934712</guid><pubDate>Tue, 14 Dec 2010 00:00:00 +0100</pubDate></item><item><title>Multi-platform UI Guidelines For Mobile and Tablet Application Design</title><description>&lt;p&gt;&lt;img alt="UI Guidelines" id="image351" src="http://blog.zedray.com/wp-content/uploads/2010/11/ui-guidelines.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;The most complete &lt;a target="_blank" href="http://www.mobilexweb.com/blog/ui-guidelines-mobile-tablet-design"&gt;set of UI guidelines&lt;/a&gt; I’ve seen to date, curtsey of &lt;a target="_blank" href="http://firt.mobi/"&gt;Maximiliano Firtman&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.mobilexweb.com/blog/ui-guidelines-mobile-tablet-design"&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://tumblr.zedray.com/post/11401933838</link><guid>http://tumblr.zedray.com/post/11401933838</guid><pubDate>Wed, 17 Nov 2010 00:00:00 +0100</pubDate></item></channel></rss>

