<?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 &#187; Blog</title>
	<atom:link href="http://b2cloud.com.au/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://b2cloud.com.au</link>
	<description>iPhone applications and social media consulting</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:55:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<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>
		<item>
		<title>Kaching App Review (well&#8230;kind of)</title>
		<link>http://b2cloud.com.au/reviews/kaching-app-review-well-kind-of</link>
		<comments>http://b2cloud.com.au/reviews/kaching-app-review-well-kind-of#comments</comments>
		<pubDate>Mon, 23 Jan 2012 01:34:26 +0000</pubDate>
		<dc:creator>Josh Guest</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[bank. comm bank]]></category>
		<category><![CDATA[commonwealth]]></category>
		<category><![CDATA[commonwealth bank]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iphone app]]></category>
		<category><![CDATA[kaching]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2769</guid>
		<description><![CDATA[A couple of weeks ago I caught a glimpse of an advertising banner for Commonwealth Bank&#8217;s new iPhone App called Kaching (pronounced ka-a-ching not cacheing). What caught my attention was that you could pay for goods from your transaction accounts, by simply touching your iPhone to a PayWave receiver. Really???? I thought this was only for cards and RFID. I couldn&#8217;t resist seeing this in action, but I&#8217;m not a Comm bank customer. So a quick stroll to the local branch, signed up a basic account, agreed to a $4 a month fee and I was ready to roll with &#8230; <a href="http://b2cloud.com.au/reviews/kaching-app-review-well-kind-of">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I caught a glimpse of an advertising banner for Commonwealth Bank&#8217;s new iPhone App called Kaching (pronounced ka-a-ching not cacheing). What caught my attention was that you could pay for goods from your transaction accounts, by simply touching your iPhone to a PayWave receiver. Really???? I thought this was only for cards and RFID.</p>
<p>I couldn&#8217;t resist seeing this in action, but I&#8217;m not a Comm bank customer. So a quick stroll to the local branch, signed up a basic account, agreed to a $4 a month fee and I was ready to roll with my new account number in hand.</p>
<p>I downloaded the app, signed up, set my pin to 1234 (not my real PIN) and bang. It loaded. I could see my generous account balance of $0 and some other options. All I&#8217;m interested in remember is paying using PayWave. I jumped to the Commonwealth bank website to transfer some $$ to play with.</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.26.48-PM.png"><img class="aligncenter size-full wp-image-2772" title="Screen Shot 2012-01-24 at 12.26.48 PM" src="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.26.48-PM.png" alt="" width="996" height="735" /></a></p>
<p>Now back into the App, enter my PIN which is 1234.</p>
<p><strong>Error. I try again. Error. And again. Error.</strong></p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/IMG_1355.png"><img class="aligncenter size-full wp-image-2778" title="IMG_1355" src="http://b2cloud.com.au/wp-content/uploads/2012/01/IMG_1355.png" alt="" width="640" height="960" /></a></p>
<p>Maybe I accidentally changed my PIN. So I tried to login with my internet banking password.</p>
<p><strong>Error. I try again. Error. And again. Error.</strong></p>
<p>I contacted Commonwealth Bank to see if they could fix it, and they provided some instructions on how to try again. This still didn&#8217;t work.</p>
<p>So on to Twitter to try and close the account and get my $4 fee back.</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.34.20-PM.png"><img class="aligncenter size-full wp-image-2775" title="Screen Shot 2012-01-24 at 12.34.20 PM" src="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.34.20-PM.png" alt="" width="518" height="282" /></a></p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.34.26-PM.png"><img class="aligncenter size-full wp-image-2773" title="Screen Shot 2012-01-24 at 12.34.26 PM" src="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-24-at-12.34.26-PM.png" alt="" width="517" height="225" /></a></p>
<p>So sorry everyone, I was hoping to review the App and see if the contactless payments worked on the iPhone (Bluetooth? Wifi?). Looks like the App has some technical issues so please share your experiences with me in the comments section below.</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/reviews/kaching-app-review-well-kind-of/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving iPhone battery life</title>
		<link>http://b2cloud.com.au/how-to-guides/improving-iphone-battery-life</link>
		<comments>http://b2cloud.com.au/how-to-guides/improving-iphone-battery-life#comments</comments>
		<pubDate>Tue, 17 Jan 2012 10:10:51 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2761</guid>
		<description><![CDATA[Over the last couple of weeks it seems my iPhone's battery has been running dry a lot quicker than before. I knew a lot of different ways to improve battery life, but mine was still draining faster than I was used to. I decided to dig around to find out what the problem was, which turned out to be a location services issue. <a href="http://b2cloud.com.au/how-to-guides/improving-iphone-battery-life">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the last couple of weeks it seems my iPhone&#8217;s battery has been running dry a lot quicker than before. I knew a lot of different ways to improve battery life, but mine was still draining faster than it used to. I decided to dig around to find out what the problem was, which turned out to be a location services issue.</p>
<p>As far as I knew, no apps were using my location, I was under the impression the GPS in my phone was off (the GPS being one of the big battery consumers). If you venture to the bottom of the location services list in the settings app, hidden away is a system services section. Open this up and there&#8217;s a list of operating system services that use your location, which is no issue, but at the bottom of this list is a switch which determines whether you are told about the operating system using your location or not. By default it is set to off.</p>
<p>So others don&#8217;t fall into the same trap I did, here is a list of ways to save power:</p>
<ul>
<li>Turn down screen brightness</li>
<li>Turn off bluetooth</li>
<li>Turn off wifi</li>
<li>Turn on Airplane mode</li>
<li>Turn off location services</li>
<li>Reduce the auto lock time</li>
<li>Close running apps (double tapping the home button and holding down on an app)</li>
<li>Perform a battery cycle every few weeks</li>
<li>Reboot the device every few weeks</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/improving-iphone-battery-life/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Specifying keyboard type for web forms on mobile devices</title>
		<link>http://b2cloud.com.au/how-to-guides/specifying-keyboard-type-for-web-forms-on-mobile-devices</link>
		<comments>http://b2cloud.com.au/how-to-guides/specifying-keyboard-type-for-web-forms-on-mobile-devices#comments</comments>
		<pubDate>Thu, 12 Jan 2012 01:00:42 +0000</pubDate>
		<dc:creator>Kat</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2756</guid>
		<description><![CDATA[Who gets annoyed when they have to switch their mobile keyboard over to the number pad each time they have to enter a phone number in a web form? With some very simple HTML5 code I am going to show you have you can enhance someones user experience with your web forms so the right keyboard for the job shows up automatically. <a href="http://b2cloud.com.au/how-to-guides/specifying-keyboard-type-for-web-forms-on-mobile-devices">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Who gets annoyed when they have to switch their mobile keyboard over to the number pad each time they have to enter a phone number in a web form? With some very simple HTML5 code I am going to show you have you can enhance someones user experience with your web forms so the right keyboard for the job shows up automatically.</p>
<p>HTML5 has introduced a new properties for the <strong> type attribute</strong> for input elements. The new values are for contact details and include:</p>
<ul>
<li>an email address (type=&#8217;email&#8217;)</li>
<li>a website addres (type=&#8217;url&#8217;)</li>
<li>telephone number (type=&#8217;tel&#8217;)</li>
</ul>
<p>You won&#8217;t see any difference when viewing on your desktop HTML5 compatible browsers however if you view the forms with Mobile Safari it will automatically use the appropriate keyboard for the job.</p>
<h2>The Code</h2>
<p>By default text fields are given the type=&#8221;text&#8221; attribute. Simple change the type value from text to the relevant type of contact detail such as email for an email address field.</p>
<pre>&lt;label for="email"&gt;Name:&lt;/label&gt;&lt;input name="name" id="name" type="text" /&gt;
&lt;label for="email"&gt;Email:&lt;/label&gt;&lt;input name="email" id="email" type="email" /&gt;
&lt;label for="email"&gt;Phone:&lt;/label&gt;&lt;input name="phone" id="phone" type="tel" /&gt;
&lt;label for="email"&gt;Website:&lt;/label&gt;&lt;input name="web" id="web" type="url" /&gt;</pre>
<h2>The iOS keyboards</h2>
<p>The image below shows the different types of keyboards you will see for each of the HTML5 type attributed fields.</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/keyboard_web_forms.png"><img class="alignnone size-full wp-image-2757" title="keyboard_web_forms" src="http://b2cloud.com.au/wp-content/uploads/2012/01/keyboard_web_forms.png" alt="" width="700" height="360" /></a></p>
<p>A very simple enhancement that is sure to pleasantly enhance your users web experience!</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/specifying-keyboard-type-for-web-forms-on-mobile-devices/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retain Loops and Delegates</title>
		<link>http://b2cloud.com.au/how-to-guides/retain-loops-and-delegates</link>
		<comments>http://b2cloud.com.au/how-to-guides/retain-loops-and-delegates#comments</comments>
		<pubDate>Tue, 10 Jan 2012 04:52:39 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[How to guides]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[dealloc]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[memory leak]]></category>
		<category><![CDATA[nonretainedObjectValue]]></category>
		<category><![CDATA[nsarray]]></category>
		<category><![CDATA[nsvalue]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[retain]]></category>
		<category><![CDATA[retain loop]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2737</guid>
		<description><![CDATA[When using delegates in an object in Objective-C it is important that the delegate is only assigned within your object, and never retained. The reason for this is to prevent a retain loop, where two objects retain each other; they will never be released. The fix is simple, but can catch you off guard if you want to create an array or dictionary of delegates (using an NSDictionary or NSArray). <a href="http://b2cloud.com.au/how-to-guides/retain-loops-and-delegates">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When using delegates in an object in Objective-C it is important that the delegate is only assigned within your object, and never retained. The reason for this is to prevent a retain loop, where two objects retain each other; they will never be released. The fix is simple, but can catch you off guard if you want to create an array or dictionary of delegates (using an <span style="font-family: 'courier new', courier;">NSDictionary</span> or <span style="font-family: 'courier new', courier;">NSArray</span>).</p>
<p>When you add an object to an array it gets retained, when you remove the object from the array it is released. If you use an array of delegates you will need to avoid adding the delegate into the array directly, and use a container class. You can build your own, but there&#8217;s no need, Apple has one for you. Add an <span style="font-family: 'courier new', courier;">[NSValue valueWithNonretainedObject:obj]</span> into your array instead, the <span style="font-family: 'courier new', courier;">NSValue</span> will be retained but your delegate will not. Remember to have your delegate remove itself from the delegate list when it is deallocated. To get the delegate back use <span style="font-family: 'courier new', courier;">id delegate = [[delegateArray objectAtIndex:0] nonretainedObjectValue];</span></p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/how-to-guides/retain-loops-and-delegates/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lets lose the extra holiday calories</title>
		<link>http://b2cloud.com.au/uncategorized/lets-lose-the-extra-holiday-calories</link>
		<comments>http://b2cloud.com.au/uncategorized/lets-lose-the-extra-holiday-calories#comments</comments>
		<pubDate>Mon, 09 Jan 2012 21:16:31 +0000</pubDate>
		<dc:creator>mac</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[calories]]></category>
		<category><![CDATA[carbs]]></category>
		<category><![CDATA[diet]]></category>
		<category><![CDATA[fat burning]]></category>
		<category><![CDATA[gym]]></category>
		<category><![CDATA[protein]]></category>
		<category><![CDATA[weight loss]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2734</guid>
		<description><![CDATA[Many of us are already making diet plans for the rest of 2012 while others are still in holiday mode.  Either way, there are some guidelines you have to keep in mind in order to achieve your dietary goals.
 <a href="http://b2cloud.com.au/uncategorized/lets-lose-the-extra-holiday-calories">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The festive season is officially over and we all entered 2012 with a few extra pounds.</p>
<p>Many of us are already making diet plans for the rest of 2012 while others are still in holiday mode.  Either way, there are some guidelines you have to keep in mind in order to achieve your dietary goals.</p>
<p>&nbsp;</p>
<p><strong>Diet: </strong></p>
<p>An average person in this day and age consumes between 3000 to 3500 calories per day. This is while most jobs involve sitting at a desk or behind the wheel. On the other hand an average person burns about 2000 to 2500 calories considering them being moderately active. So where does the extra 1000 calories go?</p>
<p>Yes , you’ve guessed it right ! They’ll store in your face, stomach, chest, buttocks, thighs and everywhere else.</p>
<p>Now get this, every 7000 calories roughly burn 1Kg of fat and the opposite. So basically by eating that Big Mac with Fries and Coke, you’re about 1500 calories away from gaining a kg of weight… Is that really worth it?</p>
<p>&nbsp;</p>
<p>Let’s talk about things we need to be careful of:</p>
<p><strong>Carbs:</strong></p>
<p>Carbohydrates are fearsome to a lot of people which leads to bad dietary decisions in some cases. Carbs for us are like petrol for cars, our body needs them to survive. For that reason there’s no way you should avoid eating carbs.</p>
<p>What to bear in mind is the type of carbs you take in and how you take control of it.</p>
<p>Whole grains are the best source of carbohydrates because they are less processed and therefore healthier. Vegetables and fruits contain “healthy” carbohydrates as well which burn much easier and quicker in the body.</p>
<p>Although carbs are the main source of our energy, it’s best for them to be eaten in the first half of your day. This is so that they provide you with the energy to last a whole day and avoid being stored in your body while sleeping if you eat them at night instead.</p>
<p><strong>Protein :</strong></p>
<p>Protein is an essential element of our everyday diet which helps the body recover, build and grow. Meat, poultry, soy products, eggs, nuts and grains and etc … are great sources of protein which help your brain function better and your muscles recover faster.<br />
Based on ‘betterhealth victoria’ a female body needs 0.75g/kg and male body needs 0.84g/kg of protein per day.  But remember that if you exceed the amount your body absorbs, the rest will just be rejected and simply flushed out of your body.</p>
<p><strong>Alcohol</strong></p>
<p>Other than kidney and liver damages, alcohol has several other destructive effects on the body. Alcoholic drinks are high in calories (<a href="http://www.wastedcalories.com/drinkcalories.html">chart of calories in alcoholic drinks</a>) and they dehydrate your body, meaning all the water which is used to break those fat contents is drained out.</p>
<p>Another effect is that alcohol steals your metabolism; in other words no less fats and carbs are used to fuel the body once you drink alcohol. Scary? I don’t know about you but I’m going to avoid binge drinking and stick to having 2 standard drinks per sitting.</p>
<p>&nbsp;</p>
<p><strong>Physical activity: </strong></p>
<p>Remember when I said an average person needs to have an intake of 2000-2500 calories per day?</p>
<p>Well, that’s for a moderately active body where you get at least 45 minutes of exercise each day. This exercise could be anything from speed-walking to the train station to simply jogging with your dog, literally anything to increase your heart rate and cause rapid breathing. But do we all do that? I don’t think so …</p>
<p>Most of us consume above 3000 calories per day AND don’t do anything that increases our heart rate which purely allows our body to store fat hence making us heavier and lazier.</p>
<p>So I suggest the following for those who drive to work every day like me:</p>
<p><strong>Gym:</strong></p>
<p>Yes, ever since the early 80s and the increase in obesity, gyms have been one of the biggest money makers in the last 30 years. A lot of us joined these clubs hoping to actively sweat off our fats and calories everyday but guess what? After the third week, probably half of us have forgotten about the membership! I’ll tell you what works as a good reminder for our memberships, it’s not the extra pounds you put on, it’s the extra pounds and dollars that go out of your bank account every month. So ladies and gentlemen, why not make good use of what we’re actually paying for?</p>
<p>Believe it or not, you don’t need to be pumping weights like Mr. Muscle in the corner of the gym to look good. A 30-minute cardio session and some basic muscle training every day will get you there in a few months.</p>
<p>I suggest you to start slow with easy interval cardio trainings and light weight exercises, and then slowly increase the intensity as you see progress in your body.</p>
<p>*Music is highly recommended. If you do not enjoy the 90s techno music that they play in the gym, bring along your own iPhone or MP3 player to workout to your favourite jams.</p>
<p><strong>Group</strong> <strong>classes:</strong></p>
<p>This is for those of us who exercise better with a partner and hate to train alone. Most of the gyms out there now offer group classes, take advantage of those, don’t be shy or afraid. Join them; you’ll have fun while burning those calories.</p>
<p>All it takes is a little change in lifestyle, getting off the couch and sweating.</p>
<p>&nbsp;</p>
<p>You don’t need to be super skinny or super muscular to look good, you need to be fit and healthy to stay away from hospitals and avoid diseases.</p>
<p>I’m doing it now, so why can’t you ?</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/uncategorized/lets-lose-the-extra-holiday-calories/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Client Server Affair</title>
		<link>http://b2cloud.com.au/general-thoughts/a-client-server-affair</link>
		<comments>http://b2cloud.com.au/general-thoughts/a-client-server-affair#comments</comments>
		<pubDate>Fri, 06 Jan 2012 04:23:07 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[Agentplus]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[guid]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[memberID]]></category>
		<category><![CDATA[payload]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2729</guid>
		<description><![CDATA[Damien from AgentPlus talks about a recent experience with the b2cloud team in developing web services. <a href="http://b2cloud.com.au/general-thoughts/a-client-server-affair">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #c0c0c0;">&#8211; A post from Damien Sawyer, Senior System Architect at AgentPlus and Run Property. Enjoy! &#8211;</span></p>
<p>I&#8217;ve been working with B2cloud in recent weeks on an iPhone app. It&#8217;s a standard client/server affair. B2C is writing the client while my job is to expose our database to the world via a JSON webservice. It is our intention that, while the iOS client will be its first consumer, the webservice will hopefully pave the way for future SOA efforts (if you haven&#8217;t read the recently &#8216;leaked&#8217; google plus post on the topic, its a great read. I think the original has been pulled, but there’s a copy <a href="https://plus.google.com/112678702228711889851/posts/eVeouesvaVX#112678702228711889851/posts/eVeouesvaVX">here</a>).</p>
<p>We weren&#8217;t too far into the design process before Tom (B2Cloud) and I found ourselves in a debate about security. The basic plan was that the client would make first contact by calling a login function, passing a memberID and password. On the server, I&#8217;d validate the combination and, on success create a row in a database table that had a GUID (aka <a href="http://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a>) as a primary key. This &#8220;session key&#8221; would be symmetrically encrypted and base 64 encoded before being sent back to the client.</p>
<p>What would happen on subsequent requests is where Tom and I differed in opinion. Tom suggested that on each subsequent function call, in addition to the &#8216;payload&#8217; data required by that function, we pass both the session key and the memberID back for authentication. The thought was that, although it was very unlikely that a duplicate session key could ever be generated (according to wiki, “generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%.”), there was a chance that one could.</p>
<p>Should a duplicate key be returned, then a client could be authenticated against someone else&#8217;s account and &#8230; well, without being overly dramatic, the entire Earth would implode. By passing back the additional memberID, this could never happen as, back in server land, I&#8217;d validate that the session key was indeed generated for that user.</p>
<p>Now, for reasons that I wasn&#8217;t really able to properly articulate at the time, the idea of passing back two strings for authentication with every function instead of one really grated with me. It just seemed &#8220;messy&#8221; and unnecessary. If this webservice is a success, one day it could literally have hundreds of functions. The idea of requiring an additional input field on each of those was unnecessary and unpalatable. For reasons probably more to do with my own personal neuroses rather than logic, It actually really bugged me. I suppose that, like many programmers (by no means all!) I take pride in my work. Whats more, by definition, these functions will be public. One day when we surpass Amazon.com in size, millions of people across the globe will use them every day (ok&#8230;ok&#8230; But a guy can dream) and I will be under the scrutiny of other devs for this decision.</p>
<p>I wanted to drop the memberID and rely solely on the uniqueness of the GUIDs for security. Tom challenged me along the lines of  &#8221;what&#8217;s the big deal? By passing the memberID we&#8217;re ensured security. Why risk it?&#8221;.</p>
<p>For the record, I think that both solutions are acceptable. Passing an additional field really is no big deal and the chance of a duplicate GUID are acceptably improbable. If I had a balanced work/life perspective &#8230;. I probably would&#8217;ve dropped it all here. But, alas, I don&#8217;t and I didn&#8217;t.</p>
<p>The thing is though, something else was really bugging me. As hard as it was for me to admit at the time, Tom was right. Even if it was one chance in several trillion that my proposal would fail, near enough wasn&#8217;t good enough.</p>
<p>Once I accepted that, another thing bothered me. I admit that this discussion so far really has been making a fuss over nothing. However this next point I believe is worth exploring more.</p>
<p>I didn&#8217;t like the idea of the client passing two fields because it ‘feels’ like it is putting some of the onus for security on the client as opposed to the server. Now remember, even though I trust Tom and his app, this web service is public. As its creator I have to assume that clients may be malicious. Having the Client pass back a memberID just seemed like &#8220;too much information&#8221;. Once again, I know that there&#8217;s probably little chance that someone could use this to gain an advantage (however, really, what do I know about subverting security systems?), but it&#8217;s the principle of the thing. It just seemed inelligant.</p>
<p>In the end, Tom and I agreed on a solution. The session key that I returned would be the GUID concatenated with the memberId and then encrypted/encoded. That way, each key could only ever access one account (unless in the future we decide to embed more info in the key and extend the functionality&#8230;. which is purely a server side matter) and we don&#8217;t have to require an additional unnecessary field. Win win.</p>
<p>In summary, I&#8217;m taking away the following learnings from this experience.</p>
<ol start="1">
<li>When you’re building a web service &#8211; the server is boss. What’s more, It appears to me to be good practise to keep the exposed ‘surface area’ of your functions to the minimum required. Perhaps this has a bearing on security (or perhaps it doesn’t!) however, at the very least, it will keep your interfaces ‘cleaner’.</li>
<li>Debate is good. There were quite a few emails back and forth about this one which lead to a solution which I believe is better than the original ones proposed.</li>
</ol>
<p>All the best and happy new year <img src='http://b2cloud.com.au/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>DS</p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/a-client-server-affair/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A tribute to Adobe Flash</title>
		<link>http://b2cloud.com.au/general-thoughts/a-tribute-to-adobe-flash</link>
		<comments>http://b2cloud.com.au/general-thoughts/a-tribute-to-adobe-flash#comments</comments>
		<pubDate>Wed, 04 Jan 2012 02:57:43 +0000</pubDate>
		<dc:creator>Josh Guest</dc:creator>
				<category><![CDATA[General Thoughts]]></category>
		<category><![CDATA[Adobe Flash]]></category>
		<category><![CDATA[cancelled]]></category>
		<category><![CDATA[finished]]></category>
		<category><![CDATA[gabocorp]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[mobile flash]]></category>
		<category><![CDATA[mobile web]]></category>

		<guid isPermaLink="false">http://b2cloud.com.au/?p=2709</guid>
		<description><![CDATA[Some of my fondest technology memories came from Flash. Here I write about some of the memories while we begin saying our goodbyes to a technology that inspired us all. <a href="http://b2cloud.com.au/general-thoughts/a-tribute-to-adobe-flash">Continue <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday I stepped back 14 years to my first Macromedia Flash experience that inspired me to take a first step into the digital world. The site was for a web design company called <a title="Gabocorp Flash Site" href="http://www.thefwa.com/flash10/gabo.html" target="_blank">Gabocorp</a>, and through a myriad of motion tweens and dramatic audio bytes they inspired thousands of web developers (including myself) to dazzle audiences with rich multimedia.</p>
<p>Today the web audience is less excited by the glitter, and instead they want information fast. Very fast. With the huge growth in mobile browsing and <a title="IDC Report" href="http://www.pcmag.com/article2/0,2817,2392796,00.asp" target="_blank">IDC predictions</a> that mobile internet will shortly surpass wired/desktop, what in the world will happen to Flash?</p>
<p><strong>We have fond memories  <img src='http://b2cloud.com.au/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </strong></p>
<p>Everyone has a fond Flash story be it from high school assignment, to a university project. It puts a smile on your face, followed by a little embarrassment in hindsight of what you used to think was cool. It was an enabling technology that allowed game developers to share their projects with the world and beyond the school LAN. I asked around the office for some nostalgic Flash moments.</p>
<p>Tom shared with us a very cool game he built in high school called <a href="http://b2cloud.com.au/wp-content/uploads/2012/01/Night-of-The-Pumpkin-Men.swf">Night of The Pumpkin Men</a></p>
<p><img class="aligncenter size-large wp-image-2714" title="Night of the Pumpkin Flash Game" src="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-04-at-1.30.51-PM-1024x837.png" alt="" width="640" height="523" /></p>
<p>Marco shared a little <a href="http://b2cloud.com.au/wp-content/uploads/2012/01/seo_mc.swf" target="_blank">animation</a> that he built for his SEO business that showcases the character &#8220;<a href="http://b2cloud.com.au/wp-content/uploads/2012/01/seo_mc.swf" target="_blank">Little Business</a>&#8220;.</p>
<p><a href="http://b2cloud.com.au/wp-content/uploads/2012/01/seo_mc.swf" target="_blank"><img class="aligncenter size-large wp-image-2716" title="Screen Shot 2012-01-04 at 1.35.06 PM" src="http://b2cloud.com.au/wp-content/uploads/2012/01/Screen-Shot-2012-01-04-at-1.35.06-PM-1024x546.png" alt="" width="640" height="341" /></a></p>
<p>&nbsp;</p>
<p><strong>Flash still looks great</strong></p>
<p>Its amazing that you can load up a Flash website from 1998, designed for a 640 x 480 monitor with low colour specs  and load it in 2012 on a massive 27 inch monitor and it still looks bloody good. My point is that there is nothing in the web sphere that performs as well as Flash when it comes to screen size compatibility.</p>
<p>The same goes for animation. Sure we are seeing CSS and HTML5 move leaps and bounds but its not there yet. What is the middle ground between static informational websites and multimedia experiences? Do users want a multimedia experience on the web for anything else other than games?</p>
<p><strong>It never became native</strong></p>
<p>Flash has never really been accepted like other web technologies, and it has never just worked seamlessly on all browsers. On re-building my web design company site in 1999, I had a choice to make. Do I use flash, dazzle my audience and potentially shy away business when visitors don&#8217;t want to download the plugin? Or do I build 2 websites, one flash and a second HTML and use an auto forwarder? Eventually I put a flash applet in my html site, a win-win. (Its still <a title="Giztech Design" href="http://members.optushome.com.au/guestj/" target="_blank">online</a>, many thanks Optus!)<a href="http://members.optushome.com.au/guestj/"><img class="size-medium wp-image-2719 alignright" title="giztech" src="http://b2cloud.com.au/wp-content/uploads/2012/01/giztech-300x238.png" alt="" width="300" height="238" /></a></p>
<p>Ironically 14 years later we face the same decision. Building a website solely on Flash means it won&#8217;t be natively supported on Apple technology and other browsers that don&#8217;t pre-install the plugin. One must ask if its worth losing visitors in exchange for some dazzle.</p>
<p><span style="color: #000000;"><strong><br />
</strong></span></p>
<p><span style="color: #000000;"><strong><br />
</strong></span></p>
<p>&nbsp;</p>
<p><strong>The final blow</strong></p>
<p>The web is more mobile than ever, technology powerhouse Apple decided not to support Flash, Native applications are in extremely high demand and mobile web is the focus for business presence globally. So when Adobe announced it would no longer support mobile Flash, market confidence in the once booming multimedia technology plummeted.</p>
<p>With 750 jobs cut at Adobe late last year, and a continued focus on developing wrapper solutions to Apps through Adobe Air (see Will&#8217;s post on <a href="http://b2cloud.com.au/general-thoughts/appcelerator-titanium-only-in-a-perfect-world" target="_blank">middleware</a>), one must question the sustainability of Flash on all platforms. I think its time to start saying our goodbyes to a technology that inspired us all.</p>
<p><span style="color: #ffff00;"><strong>If you have any old Flash projects you have worked on, please email them to me (josh at b2cloud.com.au) and ill add them to this tribute!</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://b2cloud.com.au/general-thoughts/a-tribute-to-adobe-flash/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

