<?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>b2cloud</title>
	<atom:link href="http://b2cloud.com.au/feed" rel="self" type="application/rss+xml" />
	<link>http://b2cloud.com.au</link>
	<description>iPhone applications and social media consulting</description>
	<lastBuildDate>Tue, 21 Feb 2012 04:36:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>iPhone vs. Samsung Galaxy S2</title>
		<link>http://b2cloud.com.au/general-thoughts/iphone-vs-samsung-galaxy-s2</link>
		<comments>http://b2cloud.com.au/general-thoughts/iphone-vs-samsung-galaxy-s2#comments</comments>
		<pubDate>Tue, 21 Feb 2012 04:36:59 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[galaxy s2]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[samsung]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2935</guid>
		<description><![CDATA[Yesterday I got a Samsung Galaxy S2 for testing some of the apps we develop. I had heard about the Apple vs. Samsung case before, but never realised just how much was ripped off in terms of interface and design. <a href="http://b2cloud.com.au/general-thoughts/iphone-vs-samsung-galaxy-s2">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday I got a Samsung Galaxy S2 for testing some of the apps we develop. I had heard about the Apple vs. Samsung case before, but never realised just how much was ripped off in terms of interface and design.</p>
<p><strong>The camera app:</strong><br />
This was the most obvious rip off, from the button at the bottom, to the switch and even the image well that the photos jump into. I had seen other Android devices with their own designs on the camera app, why can&#8217;t Samsung also make their own?</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/02/1a.png"><img class="alignnone size-full wp-image-2938" title="1a" src="http://b2cloud.com.au/wp-content/uploads/2012/02/1a.png" alt="" width="233" height="350" /></a> <a href="http://b2cloud.com.au/wp-content/uploads/2012/02/1b.png"><img class="alignnone size-full wp-image-2939" title="1b" src="http://b2cloud.com.au/wp-content/uploads/2012/02/1b.png" alt="" width="210" height="350" /></a></p>
<p>&nbsp;</p>
<p><strong>The clock app:</strong><br />
The colours may trick some people, but the overall structure is the same. The tabs (Samsung has swapped the order of two) and the style of the analogue clock.</p>
<p><img class="alignnone size-full wp-image-2940" title="2a" src="http://b2cloud.com.au/wp-content/uploads/2012/02/2a.png" alt="" width="233" height="350" /> <a href="http://b2cloud.com.au/wp-content/uploads/2012/02/2b.png"><img class="alignnone size-full wp-image-2941" title="2b" src="http://b2cloud.com.au/wp-content/uploads/2012/02/2b.png" alt="" width="210" height="350" /></a></p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/02/3a.png"><img class="alignnone size-full wp-image-2942" title="3a" src="http://b2cloud.com.au/wp-content/uploads/2012/02/3a.png" alt="" width="233" height="350" /></a> <a href="http://b2cloud.com.au/wp-content/uploads/2012/02/3b.png"><img class="alignnone size-full wp-image-2943" title="3b" src="http://b2cloud.com.au/wp-content/uploads/2012/02/3b.png" alt="" width="210" height="350" /></a></p>
<p>&nbsp;</p>
<p><strong>The notes app:</strong><br />
The Samsung had two types of notes apps, Memos and Tasks. Both have the same look and feel as the Notes app on the iPhone.</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/02/4a.png"><img class="alignnone size-full wp-image-2944" title="4a" src="http://b2cloud.com.au/wp-content/uploads/2012/02/4a.png" alt="" width="233" height="350" /></a> <a href="http://b2cloud.com.au/wp-content/uploads/2012/02/4b.png"><img class="alignnone size-full wp-image-2945" title="4b" src="http://b2cloud.com.au/wp-content/uploads/2012/02/4b.png" alt="" width="210" height="350" /></a> <a href="http://b2cloud.com.au/wp-content/uploads/2012/02/4c.png"><img class="alignnone size-full wp-image-2946" title="4c" src="http://b2cloud.com.au/wp-content/uploads/2012/02/4c.png" alt="" width="210" height="350" /></a></p>
<p>&nbsp;</p>
<p>I will be on the hunt for more &gt;:)</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/iphone-vs-samsung-galaxy-s2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So whats going on with Apple’s iPad 3 ?</title>
		<link>http://b2cloud.com.au/news-blog/so-whats-going-on-with-apples-ipad-3</link>
		<comments>http://b2cloud.com.au/news-blog/so-whats-going-on-with-apples-ipad-3#comments</comments>
		<pubDate>Tue, 21 Feb 2012 00:47:55 +0000</pubDate>
		<dc:creator>mac</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iPad 3]]></category>
		<category><![CDATA[Retina display]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2931</guid>
		<description><![CDATA[What we should expect from iPad 3  <a href="http://b2cloud.com.au/news-blog/so-whats-going-on-with-apples-ipad-3">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Alright, to start with I’m going to go through some previous trends related to the iPad brand line.</p>
<p>The first version of the iPad was released in the U.S in April 2010. Following that, the rest of the world started receiving theirs May 2010 onwards.</p>
<p>After a 342 day cycle (according to www.macrumors.com) the iPad 2 was introduced and released in March 2011. March 11<sup>th</sup> marks the day the Americans got their iPad 2s and the other countries, March 25<sup>th</sup> onwards. As we can see, Apple is shortening the release time between America and the rest of the world.</p>
<p>The iPad 2 was thinner, integrated with a dual core Apple A5 chip (same as the iPhone 4S) with front and back cameras enabling users to call other Apple users through FaceTime.</p>
<p>Now ever since the release of the iPhone 4S, everyone has become very pessimistic about the iPad 3, saying that it isn’t going to be as good as we expect it to be. According to the leaked information and rumours I can tell you that this is NOT GOING TO HAPPEN!</p>
<p>In the last few months of 2011, images and information have started leaking out from factories in China, saying that the upcoming iPad will be smaller, equipped with a bigger camera and battery and the most important of all, the Quad-Core CPU and Retina display.</p>
<p>It has been two weeks since Apple announced an event for early March. Hopes are turning into beliefs that it will be introduced and launched in that month. Well, based on the trend it appears so !!!</p>
<p>But here&#8217;s what we know so far:</p>
<p>First of all, The <a href="http://www.macrumors.com/2012/02/13/wall-street-journal-confirms-4g-lte-ipad/">Wall Street Journal confirms 4G LTE iPad for AT&amp;T and Verizon</a> , which could possibly mean 4G for Telstra here in Australia too !</p>
<p>Second:</p>
<p style="text-align: center"><a href="http://www.iphonehacks.com/2012/02/leaked-ipad-3-screen-2048x1536-retina-display-resolution.html">Leaked iPad 3 Screen has 2048&#215;1536 &#8216;Retina Display&#8217;</a></p>
<p style="text-align: center"><img src="http://cdn.iphonehacks.com/wp-content/uploads/2012/02/ipad_2_ipad_3_pixels1.jpg" alt="" /></p>
<p style="text-align: left">Third:</p>
<p style="text-align: center"><a href="http://www.macrumors.com/2012/02/19/ipad-3-with-more-tapered-edge-and-an-8-megapixel-back-camera/">iPad 3 with more tapered edge and an 8 Megapixel back camera<img src="http://cdn.macrumors.com/article-new/2012/02/MN04_024-500x500.jpg" alt="" /></a></p>
<p style="text-align: left">And last but not least:</p>
<p style="text-align: center"><a href="http://www.macrumors.com/2012/02/13/leaked-ipad-3-rear-shell-display-and-dock-connector-cable-matched-together/">iPad 3 rear Shell  compared with iPad 2</a></p>
<p style="text-align: center"><img src="http://cdn.macrumors.com/article-new/2012/02/ipad_2_ipad_3_shell_camera.jpg" alt="" /></p>
<p>So here we are, ready for a big change in the Apple line of product, iPad 3 could be the start for 4G speed on all future Apple devices.</p>
<p>Now do you think that Apple will introduce the A6 processor ? Or are the rumours correct, and all we are going to get is only an A5X processor ?</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/news-blog/so-whats-going-on-with-apples-ipad-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lazy loading vs. Eager loading</title>
		<link>http://b2cloud.com.au/general-thoughts/lazy-loading-vs-eager-loading</link>
		<comments>http://b2cloud.com.au/general-thoughts/lazy-loading-vs-eager-loading#comments</comments>
		<pubDate>Sun, 19 Feb 2012 09:49:31 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[eager loading]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[lazy loading]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[ram]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2926</guid>
		<description><![CDATA[Applications generally load their resources two different ways. One is known as "eager loading", where everything the application would ever need is loaded all at once. Then there is "lazy loading", only loading resources when required. <a href="http://b2cloud.com.au/general-thoughts/lazy-loading-vs-eager-loading">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Applications generally load their resources two different ways. One is known as &#8220;eager loading&#8221;, where everything the application would ever need is loaded all at once. Then there is &#8220;lazy loading&#8221;, only loading resources when required.</p>
<p>There are pros and cons of each:</p>
<p><strong>Eager loading:</strong><br />
- Pro: Small chance for lag when the application is running (everything is already in memory)<br />
- Con: The time it takes to start the application is longer, as everything needs to be loaded</p>
<p><strong>Lazy loading:</strong><br />
- Pro: Your application loads faster, the user gets in quicker<br />
- Con: When moving to new sections there can be some lag when things are getting loaded into memory</p>
<p>Eager loading is essential for games, at least loading everything required for a level. When you are playing you don&#8217;t want any frames dropped, this is the reason you usually need to sit through a &#8220;loading level&#8230;&#8221; screen.</p>
<p>For the applications I work on, most of the time I use lazy loading, which usually works fine, but in an app I have been recently working on one of the requirements is a long list of main suburbs in Australia. Being on an iPhone, loading ~2500 suburbs on request from a database (lazily) can take &gt; 10 seconds on some older devices, such as an iPhone 3GS. Obviously eager loading wasn&#8217;t much of an option either, as the user would be sitting on the splash screen for that 10 seconds. I decided to sort of mash them together, and go with lazy loading overall, but as soon as the application is opened it starts loading all the suburbs in a separate thread. If the user is unfortunate enough to immediately open the suburbs listing screen, they may need to watch a spinner for a second, but as the suburbs listing isn&#8217;t the main focus of the app, it would be transparent to most users that it was even happening, and most would never experience the lag.</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/lazy-loading-vs-eager-loading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrate with Google Navigation</title>
		<link>http://b2cloud.com.au/how-to-guides/integrate-with-google-navigation</link>
		<comments>http://b2cloud.com.au/how-to-guides/integrate-with-google-navigation#comments</comments>
		<pubDate>Sun, 19 Feb 2012 02:00:45 +0000</pubDate>
		<dc:creator>dwayne</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2913</guid>
		<description><![CDATA[A couple of days ago I explained how to integrate with Google Maps, but what if you want to minimise user clicks and direct them straight to navigation, well you&#8217;re in luck. With a few tweaks to the previous code we can direct users straight to Google Navigation using their current location as a start point. String uri = &#34;google.navigation:ll=%f,%f&#34;; Intent navIntent = new Intent&#40; Intent.ACTION_VIEW, Uri.parse&#40;String.format&#40;ur, latitude, longitude&#41;; startActivity&#40;navIntent&#41;; There is a small issue with using this code, if Google Navigation isn&#8217;t installed or an equivalent app isn&#8217;t found to handle the intent your app will force close. A &#8230; <a href="http://b2cloud.com.au/how-to-guides/integrate-with-google-navigation">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I explained how to integrate with Google Maps, but what if you want to minimise user clicks and direct them straight to navigation, well you&#8217;re in luck. With a few tweaks to the previous code we can direct users straight to Google Navigation using their current location as a start point.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> uri <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;google.navigation:ll=%f,%f&quot;</span><span style="color: #339933;">;</span>
Intent navIntent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>
    Intent.<span style="color: #006633;">ACTION_VIEW</span>,
    Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>ur, latitude, longitude<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
startActivity<span style="color: #009900;">&#40;</span>navIntent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>There is a small issue with using this code, if Google Navigation isn&#8217;t installed or an equivalent app isn&#8217;t found to handle the intent your app will force close. A pre-check should be made to check if Google Navigation is installed first, or the resulting exception swallowed and a &#8220;friendly&#8221; message displayed.</p>
<p>So how do you find out if there is an app available to handle the intent?</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> canHandleIntent<span style="color: #009900;">&#40;</span>Content content, Intent intent<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    PackageManager packageManager <span style="color: #339933;">=</span> context.<span style="color: #006633;">getPackageManager</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">List</span> activities <span style="color: #339933;">=</span> packageManager.<span style="color: #006633;">queryIntentActivities</span><span style="color: #009900;">&#40;</span>
        intent, 
        PackageManager.<span style="color: #006633;">MATCH_DEFAULT_ONLY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span> activities.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> launchNavigation<span style="color: #009900;">&#40;</span><span style="color: #003399;">Double</span> latitude, <span style="color: #003399;">Double</span> latitude<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">String</span> uri <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;google.navigation:ll=%f,%f&quot;</span><span style="color: #339933;">;</span>
    Intent navIntent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>
        Intent.<span style="color: #006633;">ACTION_VIEW</span>,
        Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>ur, latitude, longitude<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>canHandleIntent<span style="color: #009900;">&#40;</span>navIntent<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        startActivity<span style="color: #009900;">&#40;</span>navIntent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">else</span>
        Toast.<span style="color: #006633;">makeText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Please install Google Navigation&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/integrate-with-google-navigation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating with Google Maps</title>
		<link>http://b2cloud.com.au/how-to-guides/integrating-with-google-maps</link>
		<comments>http://b2cloud.com.au/how-to-guides/integrating-with-google-maps#comments</comments>
		<pubDate>Thu, 16 Feb 2012 05:08:29 +0000</pubDate>
		<dc:creator>dwayne</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2884</guid>
		<description><![CDATA[Sometimes it makes perfect sense for an app to have map based functionality, and on Android the usual way to proceed is to use the Google Maps api library and embed a MapView directly into your app. This is fine If the mapping functionality the app requires is relatively simple, but what if you require more complex functionality like directions and route plotting? While these requirements are possible with the library there is quite a bit plumbing that needs to be undertaken. So what else can you do? Well what better way to handle mapping functionality than to offload the &#8230; <a href="http://b2cloud.com.au/how-to-guides/integrating-with-google-maps">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes it makes perfect sense for an app to have map based functionality, and on Android the usual way to proceed is to use the Google Maps api library and embed a MapView directly into your app. This is fine If the mapping functionality the app requires is relatively simple, but what if you require more complex functionality like directions and route plotting? While these requirements are possible with the library there is quite a bit plumbing that needs to be undertaken.</p>
<p>So what else can you do? Well what better way to handle mapping functionality than to offload the work to an app designed specifically for the task a.k.a Google Maps. With a few lines of code you can have Google Maps load with a marker on a specific location, with the added benefits of giving users all the functionality that Google Maps contains.</p>
<p>So how do we do it?</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> uri <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://maps.google.com/maps?q=%s&quot;</span><span style="color: #339933;">;</span>
Intent mapIntent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>
    Intent.<span style="color: #006633;">ACTION_VIEW</span>,
    Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>Uri, address<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
startActivity<span style="color: #009900;">&#40;</span>mapIntent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Want to load google maps with a path between a start address and a destination? The following code gets this done quickly and easily.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> uri <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://maps.google.com/maps?saddr=%s&amp;amp;daddr=%s&quot;</span>
Intent intent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>
    Intent.<span style="color: #006633;">ACTION_VIEW</span>,
    Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>uri, startAddr, destinationAddr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
intent.<span style="color: #006633;">setData</span><span style="color: #009900;">&#40;</span>Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>directions<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>You can even omit the starting address to use the current location as the starting point</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> uri <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://maps.google.com/maps?daddr=%s&quot;</span>
Intent intent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>
    Intent.<span style="color: #006633;">ACTION_VIEW</span>,
    Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>uri, destinationAddr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
intent.<span style="color: #006633;">setData</span><span style="color: #009900;">&#40;</span>Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>directions<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Like everything there are a couple of drawbacks with this method that need to be weight up. If there are multiple apps on the users device that can handle the intent they will be displayed in a list possible options. This means that Google Maps may not be the application the user ultimately chooses and assumptions may be broken. The second issue is that the user will be taken away from your app and pushed to an app developed by somebody else. While this may not be a major issue, as they will be brought back to the original app when they hit the back button, it&#8217;s something to keep in mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/integrating-with-google-maps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Chose Android Development?</title>
		<link>http://b2cloud.com.au/general-thoughts/why-android-development</link>
		<comments>http://b2cloud.com.au/general-thoughts/why-android-development#comments</comments>
		<pubDate>Thu, 09 Feb 2012 23:19:30 +0000</pubDate>
		<dc:creator>dwayne</dc:creator>
				<category><![CDATA[General Thoughts]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2864</guid>
		<description><![CDATA[This post was supposed to be about moving from a hobbyist Android developer to a professional Android developer and the challenges faced, but as I started writing I realised that there was nothing revolutionary about the topic. Sure it&#8217;s a little more pressure and a little less freedom, but it&#8217;s still just as fun and beats developing outdated desktop apps. So with that idea all but buried I had to come up with a topic fast. so for my first post under the B2Cloud banner I will go out on a limb and address a bit of a controversial topic. &#8230; <a href="http://b2cloud.com.au/general-thoughts/why-android-development">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">This post was supposed to be about moving from a hobbyist Android developer to a professional Android developer and the challenges faced, but as I started writing I realised that there was nothing revolutionary about the topic. Sure it&#8217;s a little more pressure and a little less freedom, but it&#8217;s still just as fun and beats developing outdated desktop apps. So with that idea all but buried I had to come up with a topic fast. so for my first post under the B2Cloud banner I will go out on a limb and address a bit of a controversial topic. Why do I develop for Android as opposed to iPhone.</p>
<p style="text-align: left;">I&#8217;ve always been interested in mobile technologies and development as far back as Windows Mobile 5, dappling in development for Symbian, and Windows Mobile 5/6. I&#8217;ve always thought the true potential for mobile devices was mind blowing, but at the time the UI&#8217;s were clunky, screens were small and the hardware was ridiculously slow.</p>
<p style="text-align: left;">This all changed of course when the iPhone dropped from the fruity heavens, which sported a simple yet effect UI, a nice bit of crunching power, and nice spacious screen. Being the gadget junky I ran out and got one as soon as I possibly could, which being in Australia was still a bit of a wait. In fact we completely missed out on the 2G and had to wait a good two weeks before the 3G finally hit our shores. But the wait was definitely worth it,  and when I finally got it in my eager little hands I loved it. Apps a-plenty, dead simple to use, and a crazy amount of storage for a phone. Yeah I was truly sold on the awesomeness of the iPhone.</p>
<p style="text-align: left;">Why Android then? Well after some time the iPhones advantages started to become its biggest weaknesses. After a few months of use I started to get a little board of the UI. The simple to use screen of paged icons  just wasn&#8217;t &#8220;tech&#8221; enough for me. I also missed the dashboard widgets of windows mobile 6. The creeping boredom alone wasn&#8217;t enough to push me away from the iPhone though. The straw that broke the iPhones back was an issue of development. Development on the iPhone posed two un-navigatable obstacles for me at the time. The requirement for mac based system, and a paid developers account just to get access to the SDK. While the latter problem is probably something I could have ignored, paired with the need of a shiny new mac was one requirement too much.</p>
<p style="text-align: left;">On the search for a comparable device without such development obstacles I bought myself my first Android device, the Nexus One and loved it. Now I&#8217;m not the raving fanboy type, I could plainly see that iOS was the more polished and easier to use OS. Saying that, Android was not without some extremely important advantages of it&#8217;s own. The first advantage was open source which meant not only could I develop for it, I could also look at the code behind the platform. Secondly it could be used on any device for free and with titans like Google and Samsung pushing it, it wasn&#8217;t going away anytime soon. Thirdly it already had a strong developer community not just at a software level but at a custom ROM level.</p>
<p style="text-align: left;">There was one more advantage to Android  that doesn&#8217;t get as much recognition as it should. Which is sad because it&#8217;s probably one of the most important strangle holds Android has over iOS. iOS devices are high-end devices and that&#8217;s the way Apple wanted them to be. It would go against Apples mantra to release lower &#8220;sub-par&#8221; devices in order to compete in the mid and entry level markets. That leaves a massive amount of market share that Android can take without attempting to compete with iOS directly, at the time this gave Android the time it needed to bridge the gap on UX and UI without worrying about a lack of market share.</p>
<p style="text-align: left;">And this ladies and gentleman is why I&#8217;m an Android developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/why-android-development/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring Any Window in OS X</title>
		<link>http://b2cloud.com.au/how-to-guides/monitoring-any-window-in-os-x</link>
		<comments>http://b2cloud.com.au/how-to-guides/monitoring-any-window-in-os-x#comments</comments>
		<pubDate>Tue, 07 Feb 2012 04:47:22 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[CGWindowListCopyWindowInfo]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[track]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2851</guid>
		<description><![CDATA[In a project I've been working on recently I need to interact with other process' windows on the Mac. The application lets you drag windows around that will 'bolt-on' to another application's window and follow it around the screen <a href="http://b2cloud.com.au/how-to-guides/monitoring-any-window-in-os-x">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In a project I&#8217;ve been working on recently I need to interact with other process&#8217; windows on the Mac. The application lets you drag windows around that will &#8216;bolt-on&#8217; to another application&#8217;s window and follow it around the screen.</p>
<p>Unfortunately unless you know how to do this, finding out information on how it&#8217;s done can be difficult (like most things). Initially my solution was to use <span style="font-family: 'courier new', courier;">Applescript</span>. It worked ok, but was slow and wouldn&#8217;t tell me when a window was actively moving (if you were dragging it around the screen), only when the window was stationary. My <span style="font-family: 'courier new', courier;">Applescript</span> solution was only compatible with Cocoa applicataions as well. On my quest to find a better solution I came across the very primitive <span style="font-family: 'courier new', courier;">CGWindowListCopyWindowInfo</span> method. This will give you a massive list of all windows (including menu bars, the dock, etc etc) and a lot of information about them.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span> windows <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>CGWindowListCopyWindowInfo<span style="color: #002200;">&#40;</span>kCGWindowListOptionAll, kCGNullWindowID<span style="color: #002200;">&#41;</span>;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, windows<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#91;</span>windows release<span style="color: #002200;">&#93;</span>;
windows <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;</pre></div></div>

<p>Output:</p>
<pre>{
    kCGWindowAlpha = 1;
    kCGWindowBounds =         {
        Height = 1024;
        Width = 1680;
        X = 4;
        Y = 22;
    };
    kCGWindowLayer = 0;
    kCGWindowMemoryUsage = 976400;
    kCGWindowName = iTunes;
    kCGWindowNumber = 309;
    kCGWindowOwnerName = iTunes;
    kCGWindowOwnerPID = 3588;
    kCGWindowSharingState = 1;
    kCGWindowStoreType = 2;
},
    {
    kCGWindowAlpha = 1;
    kCGWindowBounds =         {
        Height = 109;
        Width = 240;
        X = 1440;
        Y = 70;
    };
    kCGWindowLayer = 0;
    kCGWindowMemoryUsage = 75280;
    kCGWindowName = "";
    kCGWindowNumber = 199;
    kCGWindowOwnerName = Safari;
    kCGWindowOwnerPID = 446;
    kCGWindowSharingState = 1;
    kCGWindowStoreType = 2;
},
    {
    kCGWindowAlpha = 1;
    kCGWindowBounds =         {
        Height = 22;
        Width = 1680;
        X = 0;
        Y = 0;
    };
    kCGWindowLayer = 24;
    kCGWindowMemoryUsage = 5648;
    kCGWindowNumber = 194;
    kCGWindowOwnerName = SystemUIServer;
    kCGWindowOwnerPID = 363;
    kCGWindowSharingState = 1;
    kCGWindowStoreType = 2;
},</pre>
<p>Note that unlike the lower-left origin that you use when positioning <span style="font-family: 'courier new', courier;">NSWindow</span>&#8216;s, this user upper-left coordinates.</p>
<p>From the list above you can obtain the <span style="font-family: 'courier new', courier;">kCGWindowNumber</span> (datatype: <span style="font-family: 'courier new', courier;">CGWindowID</span>) and use the same function above specifying the window id to obtain information for just one window.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">CGWindowListCopyWindowInfo<span style="color: #002200;">&#40;</span>kCGWindowListOptionIncludingWindow, windowID<span style="color: #002200;">&#41;</span>;</pre></div></div>

<p>This will give back an array with one element, being the window&#8217;s information</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/monitoring-any-window-in-os-x/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppStore Piracy Prevention</title>
		<link>http://b2cloud.com.au/general-thoughts/appstore-piracy-prevention</link>
		<comments>http://b2cloud.com.au/general-thoughts/appstore-piracy-prevention#comments</comments>
		<pubDate>Thu, 02 Feb 2012 12:58:30 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[How to guides]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[anitcrack]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[crackulous]]></category>
		<category><![CDATA[hackulous]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[obfuscation]]></category>
		<category><![CDATA[piracy]]></category>
		<category><![CDATA[prevention]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2838</guid>
		<description><![CDATA[As a developer it's extremely frustrating when you've worked on an app for months upon months and after release on the app store as a paid app, you find it cracked and free for anybody that doesn't want to pay. I made this mistake on the first application I released on the app store, a week or so after release I found version 1.0 scattered all over the web.

It would have been best to implement piracy checks from the beginning, but this had to be part of the 1.1+ update. Since 1.0 I have released versions 1.1 and 1.2, and have only seen version 1.1 'cracked' and uploaded to websites, but I have tested this out myself, and my piracy checks do exactly what they are supposed to do, crash the app rendering it useless. <a href="http://b2cloud.com.au/general-thoughts/appstore-piracy-prevention">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As a developer it&#8217;s extremely frustrating when you&#8217;ve worked on an app for months upon months and after release on the app store as a paid app, you find it cracked and free for anybody that doesn&#8217;t want to pay. I made this mistake on the first application I released on the app store, a week or so after release I found version 1.0 scattered all over the web.</p>
<p>It would have been best to implement piracy checks from the beginning, but this had to be part of the 1.1+ update. Since 1.0 I have released versions 1.1 and 1.2, and have only seen version 1.1 &#8216;cracked&#8217; and uploaded to websites, but I have tested this out myself, and my piracy checks do exactly what they are supposed to do, crash the app rendering it useless.</p>
<p>Before any details on protecting your apps, I will explain how the piracy system works for iOS apps.</p>
<p>Each application is code-signed with a certificate, which can be verified by the iOS to make sure that the current device has sufficient privileges to install/run your application. During development the certificates last ~12 months (you can even wind your clock back after the certificate has expired in order to launch the app again) and for a lifetime when you get it from the app store. When you submit your application to the app store, Apple resigns your app with their own certificate.</p>
<p>Of course, on a jailbroken phone, these certificate checks can be disabled, or your app can be resigned with a bogus certificate for distribution on the web or services like Crackulous.</p>
<p>Usually when people take a version of your app and crack it for illegal distribution they will use a tool that will do the exact same thing on each app it is used on, designed to work on all apps that don&#8217;t do any piracy checks, which is most of the apps out there. Even if you put in a basic piracy check, chances are the person using this tool has no real cracking talent and wont be able to do anything about it. It&#8217;s never impossible to protect anything 100% in the IT world, if somebody wants your app cracked that badly they can modify your app&#8217;s binary to bypass the security checks, but the more difficult you make it will discourage the cracker.</p>
<p>There&#8217;s a great tool from <a href="http://www.cocoanetics.com/anticrack/" target="_blank">Cocoanetics</a> I purchased called <a href="http://www.cocoanetics.com/anticrack/" target="_blank">AntiCrack</a>, which has a one time purchase fee. You may think I&#8217;m writing this blog just to sell you something, but if you&#8217;re serious about selling your app it will pay itself off in 15 downloads or so (or you could try and implement the techniques below yourself).</p>
<p><strong>Check if your program is being debugged:<br />
</strong>When building for release/distribution mode, the first thing your main function should do is check whether the app is being debugged. If so, crash/exit the app. A debugger will make a cracker&#8217;s job 10x easier, so don&#8217;t give them the opportunity. There&#8217;s a method Apple provides for this (<span style="font-family: 'courier new', courier;"><a href="http://developer.apple.com/library/mac/qa/qa1361/" target="_blank">AmIBeingDebugged()</a></span>)</p>
<p><strong>Check the signed certificate:<br />
</strong>Have your app look at the certificate is has been bundled with, if it&#8217;s not valid then crash/exit the app.</p>
<p><strong>Obfuscation:<br />
</strong>If your app connects to the web I highly recommend you obfuscate the urls it connects to (or any other vital strings your app uses). Your original strings wont be in the binary, and will be decoded at runtime. If the cracker manages to bypass the crash/exit you have implemented, they will still need to figure out your cipher algorithm to get the original strings back. If your app is web focused and the urls can&#8217;t be decoded, your app wont have much functionality <img src='http://b2cloud.com.au/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Inline methods and defines:<br />
</strong>Implement the above methods using inline methods or defines. Using a standard function means at runtime the code within that function only exists in one place, when it&#8217;s needed to run the program will jump to that code and then jump back to where the function was called from then continue. Your cracker can find out where this one place is and remove any jumps to it, or make it jump back before any real checks are performed. Using inline methods and defines means your checks will be scattered throughout the program, everytime the method/define was used, meaning the cracker will need to remove each instance of your piracy checks.</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/appstore-piracy-prevention/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Here&#8217;s our first Vlog !</title>
		<link>http://b2cloud.com.au/news-blog/heres-our-first-vlog</link>
		<comments>http://b2cloud.com.au/news-blog/heres-our-first-vlog#comments</comments>
		<pubDate>Tue, 31 Jan 2012 04:50:20 +0000</pubDate>
		<dc:creator>mac</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[b2cloud]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[tuesday pizza]]></category>
		<category><![CDATA[vlog]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2819</guid>
		<description><![CDATA[So here at b2cloud, we decided to start a video blog to basically interact with our dear readers through video as well as text. You&#8217;ll get to know us all a little better, and keep posted because we have heaps of cool videos coming up!]]></description>
			<content:encoded><![CDATA[<p>So here at b2cloud, we decided to start a video blog to basically interact with our dear readers through video as well as text.</p>
<p>You&#8217;ll get to know us all a little better, and keep posted because we have heaps of cool videos coming up!</p>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/7aCJ5IsvaOg?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/news-blog/heres-our-first-vlog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Scams 101</title>
		<link>http://b2cloud.com.au/general-thoughts/internet-scams-101</link>
		<comments>http://b2cloud.com.au/general-thoughts/internet-scams-101#comments</comments>
		<pubDate>Tue, 24 Jan 2012 03:16:14 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[scam]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2781</guid>
		<description><![CDATA[There are many nasty things to watch out for when using the internet, but unfortunately some people are still unaware of many basic ways to stay safe while online. Last week somebody I know had their email account hacked due to a phishing email that was circulating. I have compiled a list of things to look out. <a href="http://b2cloud.com.au/general-thoughts/internet-scams-101">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are many nasty things to watch out for when using the internet, but unfortunately some people are still unaware of many basic ways to stay safe while online. Last week somebody I know had their email account hacked due to a phishing email that was circulating. I have compiled a list of things to look out.</p>
<ul>
<li><strong>Nigerian emails</strong><br />
I say Nigerian but in reality these can come from anywhere. These emails often follow the lines of &#8220;somebody has passed away and I can transfer $1 million to your name if you give me your bank account details&#8221;. It&#8217;s common sense, but people actually fall for this. Never give out your bank account details, and don&#8217;t trust these emails.</li>
</ul>
<ul>
<li><strong>Dodgy links</strong><br />
Make sure you check where suspicious links actually lead to. It is very easy to have a link look like it leads to a legitimate site but instead it takes you somewhere else. See this link for example <a href="http://www.yahoo.com" target="_blank">www.google.com</a>. It would appear to take you to Google but instead leads to Yahoo. You can hover your mouse over the link and check the bottom left of your browser window to see where links really lead.</li>
</ul>
<ul>
<li><strong>Phishing</strong><br />
One of the most effective ways bad people can hijack an account is by setting up a website that looks exactly like the real one. This is called Phishing. Always check the URL in your browser to make sure you are on the correct website, this is often combined with dodgy links. A better solution is to bookmark the correct website and using the bookmark when you want to access it.</li>
</ul>
<ul>
<li><strong>&#8216;Congratulations&#8217; ads</strong><br />
You are <strong>not</strong> the one millionth viewer, you have <strong>not</strong> won any money. Ignore these.</li>
</ul>
<ul>
<li><strong>Secure browsing vs. insecure browsing</strong><br />
When browsing the web there&#8217;s two ways your data can be sent. Encrypted, making it useless for spying on, and unencrypted, where anybody between you and the website you are trying to access can view everything that is being sent and received &#8211; to get your data to where it needs to go it actually travels through many other computers, any could be malicious. When you access a secure website it will have a padlock at the top of the browser. If you think the website is secure but you get a security prompt, close the site, somebody could be trying to see your information. Because over a regular insecure connection everything you send can be spied on, never enter personal information or credit card details if the website isn&#8217;t secure and doesn&#8217;t show the padlock.</li>
</ul>
<ul>
<li><strong>Simple passwords</strong><br />
You have probably seen the bars that rate how strong or weak your password is. Always try to use a strong password, use capitals, lowercase, symbols and numbers. The reason for this is the more possibilities, the harder your password is to figure out. Using standard words from the English dictionary makes your account extremely vulnerable.</li>
</ul>
<ul>
<li><strong>Sharing passwords</strong><br />
Use a different password for all the websites you use. If you share the same password between WebsiteA and WebsiteB, the owner of WebsiteA may try your password for WebsiteB. If they are the same then your WebsiteB account has been compromised.</li>
</ul>
<ul>
<li><strong>Recovery answers</strong><br />
I make it a rule of thumb to enter long and random answers for recovery questions. Questions such as &#8220;What is your mother&#8217;s maiden name?&#8221; can be easily guessed, and a casual conversation could have you spilling the beans to an account with simple questions.</li>
</ul>
<ul>
<li><strong>Public wifi</strong><br />
A free wifi hotspot might seem like a dream come true, but hold on a minute. Anybody connected to that hotspot can see all traffic on the network. Avoid wifi networks without passwords, and if you need to use one, don&#8217;t enter any passwords, personal information or credit card details.</li>
</ul>
<ul>
<li><strong>Spoofed emails</strong><br />
An email from <a href="http://google.com">your.best@friend.com</a> may not actually be from your best friend. The sender&#8217;s email address shown in an email can easily be spoofed to make it appear like it came from somebody you know. Even if it actually has been sent from your best friend, their account may have been compromised, so don&#8217;t trust links, even from people you know.</li>
</ul>
<ul>
<li><strong>Antivirus software</strong><br />
Install antivirus software and run checks regularly, once a month or so. If you think you may have been hacked, run a virus scan immediately and don&#8217;t login to any websites until you are sure your computer is safe.</li>
</ul>
<ul>
<li><strong>Logout of sites when finished</strong><br />
When you have finished using a site you have logged into, logout. Generally when you login to a site your browser is supplied with a &#8216;session key&#8217;, which gets sent with every request to the website, instead of sending your username and password every single time. If an internet bad guy gets this &#8216;session key&#8217; they can see what you would have seen, this is called &#8216;session hijacking&#8217;. When you logout your session will be destroyed by the website, making your old &#8216;session key&#8217; invalid, and useless for anybody trying to use it. Sometimes the &#8216;session key&#8217; may exist within the URL, so if you send somebody a link to a site you have logged in to, make sure you are not supplying them with your &#8216;session key&#8217; accidentally.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/internet-scams-101/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

