<?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>Rabidgremlin&#039;s Soapbox &#187; Bubbles!</title>
	<atom:link href="http://blog.rabidgremlin.com/tag/bubbles/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rabidgremlin.com</link>
	<description>A little soapbox for me to stand on and rant from.</description>
	<lastBuildDate>Tue, 13 Jul 2010 20:11:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>G1 the first Google Android released</title>
		<link>http://blog.rabidgremlin.com/2008/09/24/g1-the-first-google-android-released/</link>
		<comments>http://blog.rabidgremlin.com/2008/09/24/g1-the-first-google-android-released/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 22:53:50 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/?p=178</guid>
		<description><![CDATA[With heavy guitar music and much fanfare the first Google Android handset has been released by T-Mobile. The device looks pretty nice (but not iPhone sexy) and has a ton of features. It will go on sale on the 22 October and retail for $179 US. Initial reviews are mixed but I suspect that this [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-180" style="margin-left: 5px; margin-right: 5px;" title="The G1 Android handset" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/09/g1.jpg" alt="" width="150" height="135" />With <a title="Link to T-Mobiles G1 site" href="http://www.t-mobileg1.com/default.aspx" target="_blank">heavy guitar music</a> and <a title="Link to C-NETs live blog" href="http://news.cnet.com/8301-1035_3-10048519-94.html" target="_blank">much fanfare</a> the first Google Android handset has been released by T-Mobile.</p>
<p>The device looks pretty nice (but not iPhone sexy) and has a <a title="Link to G1's feature set" href="http://www.t-mobileg1.com/g1-learn-features-details.aspx" target="_blank">ton of features</a>. It will go on sale on the 22 October and retail for $179 US.</p>
<p>Initial reviews are mixed but I suspect that this <a title="Link to NYT G1 article" href="http://bits.blogs.nytimes.com/2008/09/23/googles-first-phone-the-iphone-with-more-buttons/" target="_blank">New York Times article</a> hits close to the truth:</p>
<blockquote><p><em>&#8220;If the HTC’s new G1 cellphone, featuring Google’s Android software, were introduced two years ago, jaws would drop. But Apple’s iPhone already won the wows that go to the first small phone that is truly good at Web browsing.&#8221;</em></p></blockquote>
<p>and</p>
<blockquote><p><em>&#8220;my initial take is that the G1 is the PC to the iPhone’s Macintosh&#8230;&#8221;</em></p></blockquote>
<p>Playing with the Android emulator I always suspected that that last quote would be true, still it will be interesting to see how it all goes on the 22nd.</p>
<p>Also released is the <a title="Link to SDK announcement" href="http://android-developers.blogspot.com/2008/09/announcing-android-10-sdk-release-1.html" target="_blank">final 1.0 SDK</a> and a hint that the beta <a title="Link to Android Market announcement" href="http://android-developers.blogspot.com/2008/08/android-market-user-driven-content.html" target="_blank">Android Market</a> will go live on the 22nd when the G1 goes on sale. Guess I&#8217;ll have to get cracking with finishing off Bubbles!</p>
<p><em>Update:</em> <a title="Link to Gizmoda hands on review" href="http://gizmodo.com/5053611/hands+on-with-t+mobile-g1-android-phone" target="_blank">Gizmoda has a very good hands on review</a> of the G1 with lots of pictures and video. Check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/09/24/g1-the-first-google-android-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android getting ready for launch</title>
		<link>http://blog.rabidgremlin.com/2008/09/03/android-getting-ready-for-launch/</link>
		<comments>http://blog.rabidgremlin.com/2008/09/03/android-getting-ready-for-launch/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 19:24:45 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/?p=167</guid>
		<description><![CDATA[Well things seem to be heating up in the Android world&#8230; First off the new version of the SDK (0.9) became available. The APIs have undergone some rather radical changes since m15 but apparently they should be mostly stable now. Its going to take some serious work to get Bubbles! up and running again. Next [...]]]></description>
			<content:encoded><![CDATA[<p>Well things seem to be heating up in the Android world&#8230;</p>
<p>First off the <a title="Download link for the SDK" href="http://code.google.com/android/download.html" target="_blank">new version of the SDK</a> (0.9) became available. The APIs have undergone some rather radical changes since m15 but apparently they should be mostly stable now. Its going to take some serious work to get Bubbles! up and running again.</p>
<p>Next all sorts of leaks about the first Android handset (the HTC Dream) starting popping up on the Internet. Gizmodo have some <a title="Pictures of the HTC dream" href="http://gizmodo.com/5043836/more-htc-dream-pictures-leaked" target="_blank">spy pictures of the phone</a>, it looks good but not iPhone sexy. I think the slide out qwerty keyboard is a good idea but it doesn&#8217;t help the devices looks.</p>
<p>Google also <a title="Link to blog post on Android app store" href="http://android-developers.blogspot.com/2008/08/android-market-user-driven-content.html" target="_blank">posted some information about their content distribution system</a> which will be the Android equivalent of the iPhone&#8217;s App Store.</p>
<blockquote><p><em>&#8220;Developers will be able to make their content available on an open service hosted by Google that features a feedback and rating system similar to YouTube. We chose the term &#8220;market&#8221; rather than &#8220;store&#8221; because we feel that developers should have an open and unobstructed environment to make their content available. Similar to YouTube, content can debut in the marketplace after only three simple steps: register as a merchant, upload and describe your content and publish it.&#8221;</em></p></blockquote>
<p>It certainly seems that getting an Android application out into the wild will be far easier (and less expensive) then an iPhone application.</p>
<p>And lastly, today the Android team posted the <a title="Link to ADC gallery" href="http://code.google.com/android/adc_gallery/" target="_blank">Android Developer Challenge Winners gallery</a> showcasing the final 50 apps and the winning apps. Some pretty interesting application here.</p>
<p>Its going to be interesting to see how Android and the HTC Dream do against the iPhone tsunami.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/09/03/android-getting-ready-for-launch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bubbles! presentation</title>
		<link>http://blog.rabidgremlin.com/2008/08/22/bubbles-presentation/</link>
		<comments>http://blog.rabidgremlin.com/2008/08/22/bubbles-presentation/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 01:40:54 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/?p=127</guid>
		<description><![CDATA[Here are the slides for a quick presentation I gave on Bubbles! Shamelessly pulled content and images from various sources on the web. Click to see next slide Here is the PDF: Bubbles! and Google Android Presentation]]></description>
			<content:encoded><![CDATA[<p>Here are the slides for a quick presentation I gave on Bubbles! Shamelessly pulled content and images from various sources on the web.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="375" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="VideoPlayback" /><param name="src" value="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/08/bubblespresso.swf" /><embed id="VideoPlayback" type="application/x-shockwave-flash" width="500" height="375" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/08/bubblespresso.swf"></embed></object><br />
<em>Click to see next slide</em></p>
<p>Here is the PDF: <a href="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/08/bubblespresso.pdf">Bubbles! and Google Android Presentation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/08/22/bubbles-presentation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bubbles! now uses Google App Engine</title>
		<link>http://blog.rabidgremlin.com/2008/08/19/bubbles-now-uses-google-app-engine/</link>
		<comments>http://blog.rabidgremlin.com/2008/08/19/bubbles-now-uses-google-app-engine/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 22:49:54 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/?p=119</guid>
		<description><![CDATA[Just for kicks I decided to port the backend services for my Google Android app, Bubbles!,  to use the Google App Engine. For those of you who don’t know Googles App Engine is a “free” application hosting environment. It promises to be able to scale Google style (as long as you pay of course). The [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-123" title="Google App Engine" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/08/appengine_lowres.jpg" alt="" width="100" height="79" />Just for kicks I decided to port the backend services for my Google Android app, <a title="Link to info on Bubbles!" href="http://blog.rabidgremlin.com/index.php/2008/04/14/bubbles-my-google-android-developer-challenge-entry/" target="_self">Bubbles!</a>,  to use the <a title="Link to Google App Engine" href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>.</p>
<p>For those of you who don’t know Googles App Engine is a “free” application hosting environment. It promises to be able to scale Google style (as long as you pay of course).</p>
<p>The free account gives you 500Mb of persistent storage and bandwidth and CPU for around 5million pages views a month which is not bad for free.</p>
<p><strong>Python</strong><br />
For some strange reason Python is the language of choice for app engine. I’ve never really taken to Python and I don’t really like languages where indentation is syntactically meaningful but it wasn’t too painful after skimming some tutorials on the web and running through <a title="Link to app engine tutorial" href="http://code.google.com/appengine/docs/gettingstarted/" target="_blank">the tutorial</a>.</p>
<p><strong>SDK</strong><br />
The SDK is only a couple of megabytes to download (you need Python 2.5 installed) and ran fine on my Windows XP desktop and Ubuntu laptop. Having said that the SDK doesn’t give you very much in the way of an IDE, it just gives you a dev web server and a tool to upload your application to the hosting platform. So I just used gedit and Notepad++ (which both have Python syntax highlighting) as my editors.</p>
<p><strong>Platform Features</strong><br />
App Engine provides a pretty easy to use framework for building web applications in Python. The engine is WSGI compliant so you can plugin in any of the common Python frameworks such as <em>Django</em>, <em>CherryPy</em>, <em>Pylons</em> and <em>web.py</em>. <em>Django</em> seems to be the web app framework of choice.</p>
<p>Apart from a web application framework, the engine also provides APIs for email, image manipulation, URL fetching, users and datastorage.</p>
<p>The Users API is pretty cool as it hooks into Google’s user accounts so anyone with a Google account can log into your application (if you want them too).</p>
<p>The datastore is an object based transaction engine with a SQL like syntax. On the face of it is very clean and easy to use but its here that I had the biggest headaches when porting the Bubbles! services.<br />
<strong><br />
Porting the services</strong><br />
Bubbles! uses 3 very simple services: popin, popout and getpops (where a POP is a point of presence). These services take input parameters from the query string and return <a title="Info on JSON" href="http://json.org/" target="_blank">JSON</a> response strings.</p>
<p>Creating a class to represent a Pop in the datastore was very simple; as was creating and deleting Pops in the datastore. The biggest issue I had here was coming up with an elegant way of validating the input parameters.</p>
<p>But when I came to getting things back out of the datastore things went a little pear shaped…</p>
<p>In my Pop class I was storing the latitude and longitude of the POP as floating point numbers. To retrieve the nearby POPs (in the getpops service) I was using a typical SQL like query as follows:</p>
<p><code>SELECT * FROM POP<br />
WHERE lat &gt;= :1 AND lat &lt; :2 AND lng &gt;= :3 AND lng &lt; :4<br />
ORDER BY lastdatemodified</code></p>
<p>Where <em>:1</em>, <em>:2</em>, <em>:3</em> and <em>:4</em> were set to <em>currentLat-0.001</em>, <em>currentLat+0.001</em>, <em>currentLng-0.001</em> and <em>currentLng+0.001</em>.<em><br />
</em></p>
<p>This raised the first issue: Only one “property” can have an inequality clause in a query. Turns out that the datastore has some <a title="Datastore restrictions" href="http://code.google.com/appengine/docs/datastore/queriesandindexes.html#Restrictions_on_Queries">pretty weird and wonderful restrictions</a>, of course this particular one put a major spanner in the works.</p>
<p><strong>Geohash to the rescue</strong><br />
What I needed was a quick way of calculating if a point in space was close to another one and to be honest the approach I was never happy with the approach I used above because it found points in rectangular area not a circular one.</p>
<p>After a little bit of research (I love the web), I came across this concept: <a title="Link to info on Geohash" href="http://en.wikipedia.org/wiki/Geohash" target="_blank">the Geohash</a>.</p>
<p>This cool (public domain) algorithm takes a decimal lat/long and turns it into a string. For instance</p>
<p><code>-36.843480 174.767138</code></p>
<p>Becomes:</p>
<p><code>rckq2uve1mx3</code></p>
<p>Not only does this give you something that you can stick on a URL: <a title="Map for rckq2uve1mx3" href="http://geohash.org/rckq2uve1mx3" target="_blank">http://geohash.org/rckq2uve1mx3</a> but more importantly for points near to each other the first few characters of the hash are the same !</p>
<p><code>-36.843480 174.767138  =  rckq2uve1mx3<br />
-36.844381 174.765611  =  rckq2usmvvsd<br />
-36.848508 174.765451  =  rckq2gumfhjr<br />
-36.848457 174.748261  =  rckq27zy1tg8</code></p>
<p>So the solution to my problem turns out to be remarkably easy:</p>
<ol>
<li>When creating or updating a POP I calculate the Geohash for the longitude and latitude of the POP. I take only the first 6 characters and store them with the POP</li>
<li>When processing getpops, I calculate the Geohash for the current latitude/location, grab the first 6 characters and find any pops in the datastore that have the same stored Geohash.</li>
</ol>
<p>My select statement is now a simple equals and runs far faster then my original implementation.</p>
<p><strong>Summary</strong><br />
Overall Google App Engine is an interesting platform and baring some quirks it does appear to be a viable platform for building web applications on.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/08/19/bubbles-now-uses-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bubbles! was in the top 25%</title>
		<link>http://blog.rabidgremlin.com/2008/05/22/bubbles-was-in-the-top-25/</link>
		<comments>http://blog.rabidgremlin.com/2008/05/22/bubbles-was-in-the-top-25/#comments</comments>
		<pubDate>Wed, 21 May 2008 20:25:17 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/index.php/2008/05/22/bubbles-was-in-the-top-25/</guid>
		<description><![CDATA[So Google has released the judge&#8217;s scoring for the Android applications. Bubbles! was in the top 25% in all categories (Effective Use, Polish, Indispensability, and Originality) and in the top 25% overall. This website pulls together some of the scores that have been publicly published. The 50 first round winners have also been release and [...]]]></description>
			<content:encoded><![CDATA[<p>So Google has released the judge&#8217;s scoring for the Android applications.</p>
<p>Bubbles! was in the top 25% in all categories (Effective Use, Polish, Indispensability, and Originality) and in the top 25% overall.</p>
<p>This website pulls together some of the <a title="Link to Android scorings" href="http://www.alleyinsider.com/2008/5/some_android_apps_that_didn_t_win_the_developer_challenge_goog_" target="_blank">scores that have been publicly published</a>.</p>
<p>The <a title="The first round Android winners" href="http://android-developers.blogspot.com/2008/05/top-50-applications.html">50 first round winners</a> have also been release and there is a <a title="Top 50 application gallery" href="http://code.google.com/android/images/adc1r1_deck.pdf">pdf with the winners in it</a> (but it seems to be corrupt ?)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/05/22/bubbles-was-in-the-top-25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bubbles! didn&#8217;t make it</title>
		<link>http://blog.rabidgremlin.com/2008/05/10/bubbles-didnt-make-it/</link>
		<comments>http://blog.rabidgremlin.com/2008/05/10/bubbles-didnt-make-it/#comments</comments>
		<pubDate>Sat, 10 May 2008 01:23:01 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/index.php/2008/05/10/bubbles-didnt-make-it/</guid>
		<description><![CDATA[Just received an email from the Android Developer Challenge team, seems that Bubbles! my Google Android application didn&#8217;t make it into round two: During the past few weeks, 100+ judges around the world reviewed over 1,700 applications. They were extremely impressed with the diversity and the large number of high quality entries submitted. It is [...]]]></description>
			<content:encoded><![CDATA[<p><img title="Google Android Developer Challenge Logo" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/04/androidlogo.png" alt="Google Android Developer Challenge Logo" hspace="5" vspace="5" align="left" />Just received an email from the Android Developer Challenge team, seems that <a title="More info on Bubbles!" href="http://blog.rabidgremlin.com/index.php/2008/04/14/bubbles-my-google-android-developer-challenge-entry/">Bubbles! my Google Android application</a> didn&#8217;t make it into round two:</p>
<p><em>During the past few weeks, 100+ judges around the world reviewed over 1,700<br />
applications.  They were extremely impressed with the diversity and the<br />
large number of high quality entries submitted.  It is clear that the number<br />
of great applications far exceeds the 50 top scoring applications that will<br />
move on to the final round of the Android Developer Challenge.</em></p>
<p><em>We regret to inform you that your entry was not among the top 50<br />
submissions.</em></p>
<p>Ah well it was worth a go. Apparently they are going to be putting up an Android Developer Challenge<br />
Gallery shortly so we will get to see what I was up against.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/05/10/bubbles-didnt-make-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bubbles! &#8211; My Google Android Developer Challenge Entry</title>
		<link>http://blog.rabidgremlin.com/2008/04/14/bubbles-my-google-android-developer-challenge-entry/</link>
		<comments>http://blog.rabidgremlin.com/2008/04/14/bubbles-my-google-android-developer-challenge-entry/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 08:14:54 +0000</pubDate>
		<dc:creator>jack</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Bubbles!]]></category>
		<category><![CDATA[Google Android]]></category>

		<guid isPermaLink="false">http://blog.rabidgremlin.com/index.php/2008/04/14/bubbles-my-google-android-developer-challenge-entry/</guid>
		<description><![CDATA[Well working into the wee hours of the morning I finally finished off my Google Android Developer Challenge entry. Bubbles! allows you to create a pop (point of presence) that is &#8216;broadcasted&#8217; from your phone. Other Bubbles! users in close proximity (about 50m) get to see your pop and you get see theirs. Of course [...]]]></description>
			<content:encoded><![CDATA[<p><img title="Google Android Developer Challenge Logo" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/04/androidlogo.png" alt="Google Android Developer Challenge Logo" align="left" />Well working into the wee hours of the morning I finally finished off my <a title="Link to Andriod Developer Challenge" href="http://code.google.com/android/adc.html" target="_blank">Google Android Developer Challenge</a> entry.</p>
<p>Bubbles! allows you to create a pop (point of presence) that is &#8216;broadcasted&#8217; from your phone. Other Bubbles! users in close proximity (about 50m) get to see your pop and you get see theirs. Of course as you move around so does your pop.</p>
<p>A pop is anonymous and consists of a message and a nick name that you choose for yourself.</p>
<p><a title="Bubbles! Screenshots" href="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/04/bubbles_screenshots.png"><img title="Bubbles! Screenshots" src="http://blog.rabidgremlin.co.nz/wp-content/uploads/2008/04/bubbles_screenshots.png" alt="Bubbles! Screenshots" width="99" height="163" align="right" /></a></p>
<p>I was going to implement a feature whereby you could tie a pop to a location. This would allow you to attach messages to a point in space for other users to see. Unfortunately I ran out of time but its next on my list to build.</p>
<p>Here are a few screenshots so you can see Bubbles! in action (click to see them full sized)</p>
<p>I&#8217;m also thinking of including the ability to see the history of pops for another user and perhaps even the ability to initiate a chat session with another Bubbles! user. Maybe even overlay the pops unto a <a title="Javadoc for MapView" href="http://code.google.com/android/reference/com/google/android/maps/MapView.html" target="_blank">MapView</a> (which would hook into Google Maps) .</p>
<p>Of course if I get into the top 50 for the first round of the challenge I&#8217;ll have some money to invest into more development. We&#8217;ll have to see how I go but here&#8217;s hoping.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rabidgremlin.com/2008/04/14/bubbles-my-google-android-developer-challenge-entry/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
