<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.9.2 (http://www.squarespace.com/) on Wed, 10 Mar 2010 23:24:03 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Blog</title><link>http://www.nanaimostudio.com/blog/</link><description></description><lastBuildDate>Tue, 23 Feb 2010 17:37:01 +0000</lastBuildDate><copyright></copyright><language>en-US</language><generator>Squarespace Site Server v5.9.2 (http://www.squarespace.com/)</generator><item><title>Don't call me yet!</title><category>actionscript3</category><category>as3</category><category>flash</category><category>tweening</category><dc:creator>Boon Chew</dc:creator><pubDate>Tue, 23 Feb 2010 16:49:25 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/23/dont-call-me-yet.html</link><guid isPermaLink="false">277155:2803626:6803037</guid><description><![CDATA[<div></div>
<div>If you have set your asset up in such a way that they contain movieclips in different keyframes and you want to go to a particular keyframe to and in turn play the movieclip contained within it, you can't just do the following (here we assume there is movieclip called cartoon_mc inside keyframe cartoon):</div>



<pre>
// go to keyframe &quot;cartoon&quot;
gotoAndStop(&quot;cartoon&quot;);

// start animating cartoon_mc contained within keyframe &quot;cartoon&quot;
// this won't work because cartoon_mc will only come into existence
// in the next frame loop
cartoon_mc.gotoAndPlay(&quot;start&quot;);
</pre>



<div>Instead, you need to delay it by one frame so Flash has a chance to bring the movieclip into existence. &nbsp;You can do the delay call by using <a href="http://www.greensock.com/tweenmax/">TweenMax</a>'s delayedCall.</div>



<pre>
gotoAndStop(&quot;cartoon&quot;);
// Delay calling performAnimation method by one frame
TweenMax.delayedCall(1, performAnimation, null, true);

function performAnimation()
{
  cartoon_mc.gotoAndPlay(&quot;start&quot;);
}
</pre>
]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6803037.xml</wfw:commentRss></item><item><title>Font embedding for Localization</title><category>actionscript</category><category>actionscript3</category><category>as3</category><category>as3</category><category>flash</category><category>flex</category><category>fonts</category><category>localization</category><dc:creator>Boon Chew</dc:creator><pubDate>Sat, 20 Feb 2010 03:11:01 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/19/font-embedding-for-localization.html</link><guid isPermaLink="false">277155:2803626:6763058</guid><description><![CDATA[<p><br />I got to do some pretty extensive research and experimentation with font embedding for one of the projects I did for Hasbro a while back.&nbsp; Here are the notes I made while working on this project.</p>
<p>Disclaimer: The notes need to be cleaned up further for easier reading but I hope you can still garner some useful tips from them.</p>
<p>1) Flash Runtime Sharing<br /><br />Steps:<br />Create EmbeddedFont.fla<br />- Embed characters for textfields, and wrapped inside a movieclip symbol<br />- Export the movieclip symbol for runtime sharing<br /><br />Create ImportEmbeddedFont.fla<br />- Import the movieclip symbol for runtime sharing<br /><br />Create Main FLA<br />- Load ImportEmbeddedFont.swf<br />- Apply CSS on text using font in ImportEmbeddedFont.swf<br /><br />Pros: No Flex or mxmlc needed.<br />Cons: Import/Export for runtime sharing is seldom used in the field, not sure if there is bug involved with this (there was a bug with Flash 8/AS2). What else?<br /><br />2) Flash + Flex<br /><br />Steps:<br />Create EmbeddedFont.fla<br />- Create textfields on stage, embed characters for textfields<br /><br />Create ImportEmbeddedFont.swf using FlexBuilder<br />Embed fonts in EmbeddedFont.swf using FlexBuilder using [Embed] tag<br /><br />Create Main FLA<br />- Load ImportEmbeddedFont.swf<br />- Apply CSS on text using font in ImportEmbeddedFont.swf<br /><br />Unicode range can be specified by editing the UnicodeTable.xml. Changes will reflect in the Embed Characters dialog.<br /><br />OSX: /Users//Library/Application Support/Adobe/Flash CS4/en/Configuration/FontEmbedding/UnicodeTable.xml<br /><br />Win: C:\Documents and Settings\\local settings\application data\adobe\flash cs3\en\ Configuration\FontEmbedding\UnicodeTable.xml<br /><br />Pros: Client can embed characters from within Flash and use the AutoFill feature.<br />Cons: Flex or mxmlc is needed.<br /><br />NOTE: Must use Flash 8 format for font FLA.<br /><br />3) Flex only<br /><br />Steps:<br />Embed character sets directly in code<br />(Can be embedded at class level or variable level)<br /><br />To pick up changes, have to clean project before doing a build&mdash;could be a FlexBuilder bug.<br />(TODO: There was a bug in Flex 2 that made it such that font embedded this way cannot be kerned, what about Flex 3?)<br /><br />Pros:<br />One-step process, no need to use Flash and Flex. Possible to automate entire process via scripts.<br />Cons: Flex or mxmlc is needed.<br />Need to specify font path on local machine, which could be OS dependent.<br />Unicode range must be specified manually and cannot be reused as easily. Also no Auto Fill feature.<br /><br />DEV NOTE #1<br /><br />There are two main issues I ran into going with this approach.<br /><br />Bug #1<br /><br />I experienced some issues transcoding Arial Unicode MS using the following standard syntax:<br />[Embed(source="./assets/Arial.ttf", fontName="Arial Unicode MS")]<br />public static var arialUnicodeTTF:Class;<br /><br />Error I got:<br /><br />Exception during transcoding: Unexpected exception encountered while reading font file<br />'/Experiments/EmbedFont Flash-Flex/src/./assets/Arial.ttf'<br /><br />Fix #1<br />Add this compiler flag:<br />-compiler.fonts.managers=flash.fonts.AFEFontManager<br /><br />Fix #2<br />Use a different syntax to embed (the font will have to be installed in the system for this to work):<br />[Embed(systemFont=&rdquo;Arial Unicode MS&rdquo;, mimeType=&rsquo;application/x-font-truetype&rsquo;)]<br />public static var arialUnicode:Class;<br /><br />This fix doesn&rsquo;t require the specification of font manager as in Fix #1. However, using systemFont seems to not recognize unicodeRange. So if unicodeRange must be specified, Fix #1 must be employed.<br /><br />Fix #3<br />Embed using Flash.&nbsp; Flash seems to be the most reliable way to embed all font types, including those not supported by Flex (such as PBM)<br /><br />Bug #2<br /><br />I changed the unicodeRange but the loading swf doesn't seem to pick up the change (the embedded font swf size has changed as it should)<br /><br />Fix: Doing Project-&gt;Clean... before running the app fixes this.<br /><br />DEV NOTE #2<br /><br />unicode code range can be specified within Embed or in compiler flag.<br />Compiler flag:<br />-language-range specialCharacters<br />U+0020-U+007E,U+00B2-U+00B9,U+2070-U+2089<br /><br />DEV NOTE #3<br />.dfont must be split into .ttf before embedding.&nbsp; I use dFontSplitter: http://peter.upfold.org.uk/projects/dfontsplitter<br /><br />4) Flash font symbol<br /><br />Steps:<br />Create font symbol in library<br /><br />There doesn&rsquo;t seem to be a way (or I haven&rsquo;t found one) to embed character sets using this approach, therefore this option is not pursued.<br /><br />II) Localizations<br /><br />- Need to have a way to know which locale info set to load.<br />Locale info set (a made up word, not a standard term) here refers to: the copy texts, the configuration xml file, and the font swf. In the case of Cavalcade, the copy texts and configuration are mixed together in one xml file.<br /><br />We can get locale code in one or more of the following ways:<br /><br />1) Passing it in the URL query string<br />2) Passing it via Flashvars<br />3) Specifying it in a config file<br />4) Querying browser&rsquo;s locale via Javascript<br />5) Embedding the locale code in the name of the Cavalcade swf (this is not useful if we need to support dynamic switching of languages)<br />5) Querying OS&rsquo;s language using Flash API capabilities.language (the method is rather limiting as it does not include country code for English, so we might forego this)<br /><br />Is dynamic switching of language a requirement? (e.g. clicking on a button to change texts to a different language)<br /><br />Localization involves more than just language, it involves date display, currency, etc. Are we concerned with these or just the translated texts?<br /><br />We also need to consider how to encode the info specific to each locale (the CSS, copy and XML)<br /><br />Possible approaches:<br />1) Put each set of files into a locale-specific folder<br /><br />locale\en_US\cavalcade.css<br />locale\en_US\panel.xml<br /><br />locale\en_CA\cavalcade.css<br />locale\en_CA\panel.xml<br /><br />locale\ja_JP\cavalcade.css<br />locale\ja_JP\panel.xml<br /><br />2) Suffix the files with locale id<br />cavalcade_en_US.css<br />panel_en_US.xml<br /><br />3) A combination of (1) and (2)<br /><br /><br />Localization Copy<br /><br />Current way of implementing copy is not optimal for translation.&nbsp; String IDs should have been used instead of mixing in copy with actual configuration.<br /><br />Consider using existing standard for localization such as XLIFF or something similar in spirit.<br />http://developers.sun.com/dev/gadc/technicalpublications/articles/xliff.html</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6763058.xml</wfw:commentRss></item><item><title>Useful FireFox extensions for Dev &amp; Debug</title><category>debugging</category><category>firefox</category><category>tools</category><dc:creator>Boon Chew</dc:creator><pubDate>Wed, 17 Feb 2010 16:00:13 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/17/useful-firefox-extensions-for-dev-debug.html</link><guid isPermaLink="false">277155:2803626:6724740</guid><description><![CDATA[<p>&bull; <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a> - The #1 dev/debug tool for web work, period.</p>
<p>&bull; <a href="https://addons.mozilla.org/en-US/firefox/addon/14465">Flashbug</a> - Flashbug is an extension that is built on top of Firebug that lets you see trace logs coming from a swf, among other things.</p>
<p>It goes without saying that if you do any amount of web work that involves server-side communication, that you should have a full-fledged HTTP debugging proxy.&nbsp; The one I use is called <a href="http://www.charlesproxy.com/">Charles</a> and I highly recommend it.</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6724740.xml</wfw:commentRss></item><item><title>Renaming Project in Xcode the Simple Way</title><category>iPhone</category><category>xcode</category><dc:creator>Boon Chew</dc:creator><pubDate>Mon, 15 Feb 2010 18:43:12 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/15/renaming-project-in-xcode-the-simple-way.html</link><guid isPermaLink="false">277155:2803626:6701085</guid><description><![CDATA[<p>&nbsp;</p>
<p>Ten simple steps to renaming your Xcode project without mucking with your xcodeproj file.</p>
<p>1) Projects-&gt;Rename</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://img.skitch.com/20100215-3x6bjbr93ptfd9bbreap76ptt.jpg?__SQUARESPACE_CACHEVERSION=1266259741868" alt="" /></span></span></p>
<p>&nbsp;</p>
<p>2) With the project renamed, now rename your AppDelegate using Refactor.&nbsp; Go into your AppDelegate class, place your cursor in the class name, and right click to select Refactor.&nbsp; Enter the new class name in the Refactor dialog box.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://img.skitch.com/20100215-rd954ufeiechfiwmc8xqfaimcy.jpg?__SQUARESPACE_CACHEVERSION=1266261419256" alt="" /></span></span></p>
<p>3) Now we are left with a few things to rename: your app name, info.plist file and your precompiled header (.pch).&nbsp; For your pch file, you can simply rename it directly in Xcode.</p>
<p>4) Next, go to Targets.&nbsp; Go ahead and change your target name to your new app name.</p>
<p>5) After that, right click on your select Get info.</p>
<p><span class="full-image-block ssNonEditable"><span>&nbsp;</span></span><span class="full-image-block ssNonEditable"><span><img src="http://img.skitch.com/20100215-kietc1wyketnq8d2drud8utr14.jpg?__SQUARESPACE_CACHEVERSION=1266260503810" alt="" /></span></span></p>
<p>&nbsp;</p>
<p>6) Update your precompile header file in build settings.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://img.skitch.com/20100215-827srsj8k61aawdgamm6bu5tsg.jpg?__SQUARESPACE_CACHEVERSION=1266261098067" alt="" /></span></span></p>
<p>&nbsp;7) Update your info.plist in build settings.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://img.skitch.com/20100215-rbhceu42wxt4t61fcjb5jyxjia.jpg?__SQUARESPACE_CACHEVERSION=1266261138708" alt="" /></span></span></p>
<p>&nbsp;</p>
<p>8) Go to Build -&gt; Clean All Targets.</p>
<p>9) Build your project.</p>
<p>10) (Optional) Don't forget to change your bundle identifier in your info.plist as appropriate.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6701085.xml</wfw:commentRss></item><item><title>How to make function calls without injecting any code into your FLA?</title><category>actionscript3</category><category>as3</category><category>flash</category><dc:creator>Boon Chew</dc:creator><pubDate>Sat, 13 Feb 2010 23:55:06 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/13/how-to-make-function-calls-without-injecting-any-code-into-y.html</link><guid isPermaLink="false">277155:2803626:6682131</guid><description><![CDATA[<p>When you are working with FLA, there are times when you need to perform a specific action when you reach a certain frame in your movieclip.&nbsp; The common practice is to either insert the actual chunk of code into the actual keyframe.&nbsp; The big issue with this approach is that now you have just created some timeline code, which can be a pain to track down since the majority of your code lies in external actionscript files.&nbsp; For coders who are vigilant in staying away from too much timeline code, they might resort to putting a line of code in that frame to either dispatch an event or call a method in a class associated with the movieclip in the key frame.&nbsp; The problem with this is that timeline code is still being created, even though it's much less and the actual function can now lie in the external actionscript file.</p>
<p>Fortunately, AS3.0 introduces a very useful but seldom used FrameLabel class (flash.display.FrameLabel).&nbsp; With this class, you are able to obtain all the frame labels along with its associated frame number on your movieclip's main timeline via MovieClip's currentLabels property, which returns an array of FrameLabel objects.</p>
<p>Now that you can get the labels on the timeline , the next thing you need to do in order to know if you have reached the frame is to listen to ENTER_FRAME event and check to see what frame label you are currently on (via MovieClip's currentLabel property).&nbsp; When the playhead reaches the actual frame label, make it call the method you want.</p>
<p>There is still one redundancy -- for every frame label, you need to specify the handler to call when it's reached.&nbsp; Wouldn't it better if you can just specify the method handler's name as the label name such that when the frame label is reached, a method handler with the same name will be called?&nbsp; Not only will this result in less code, the frame label is now self-documenting -- just by reading the frame label you know which method will be called when the frame is reached.</p>
<p>I have create a class called FrameLabelAction that does precisely this.&nbsp; You can download it <a href="http://www.nanaimostudio.com/storage/FrameLabelAction.as">here</a>.</p>
<p>Basic Usage:</p>
<p>import com.nanaimostudio.utils.FrameLabelAction;<br /><br />public class YourMovieClip extends MovieClip<br />{</p>
<p>&nbsp;&nbsp; var actionContainer;</p>
<p>&nbsp;&nbsp; public function YourMovieClip()<br />&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // automatically associates methods with the same name as frame labels<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // and trigger it when the frame label is reached.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionContainer = new FrameLabelAction();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionContainer.createActions(this);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // start frame label detection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionContainer.start();</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; // Assuming you have a frame label in your MovieClip called transitionInComplete,<br />&nbsp;&nbsp; // this method will be called when the playhead reaches this frame label.<br />&nbsp;&nbsp; public function transitionInComplete():void<br />&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // stop frame label detection - optional as the detection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // will be stopped when the last frame label is reached<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // and method triggered.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionContainer.stop();<br />&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6682131.xml</wfw:commentRss></item><item><title>Minor fix to Gaia Flash Framework</title><category>actionscript3</category><category>as3</category><category>flash</category><category>gaia</category><dc:creator>Boon Chew</dc:creator><pubDate>Mon, 01 Feb 2010 22:20:55 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/2/1/minor-fix-to-gaia-flash-framework.html</link><guid isPermaLink="false">277155:2803626:6524157</guid><description><![CDATA[<p>We recently started using <a href="http://gaiaflashframework.com/">Gaia Flash Framework</a> on a microsite project.&nbsp; In case you don't know what Gaia is, it's a very well-written navigation framework for Flash microsites, though not so much for games since game's interaction flow is usually highly customized.</p>
<p>The nice thing with Gaia is it doesn't take much to get up to speed and running with it.&nbsp; While playing around with the Gaia demo code, there was one minor hiccup I ran into:</p>
<p>If you compile the individual page fla that makes any Gaia API calls (such as Gaia.api.getPage), you will get a runtime error.&nbsp; This makes sense since Gaia API is not available at this point, but it's nevertheless annoying because in the course of developing a site using Gaia, you will be compiling individual pages a lot.&nbsp; Getting these errors when testing the page individually can be a bit of a distraction.</p>
<p>The solution to this problem turned out to be quite straightforward.&nbsp; A quick browse at the framework code shows that Gaia API uses GaiaImpl and GaiaImpl is instantiated in GaiaMain class (via the ungodly name GaiaImpl.birth()).&nbsp; Since GaiaImpl is being used as a singleton and it has no dependencies with any other classes, there is really no need for it to be instantiated inside GaiaMain.&nbsp; So I commented out the GaiaImpl.birth call in GaiaMain and instantiated GaiaImpl via static initializer instead.&nbsp; With this single change, the page will now compile properly by itself even though it doesn't go through GaiaMain.</p>
<p>public class GaiaImpl implements IGaia<br />{<br />&nbsp; private static var _instance:GaiaImpl;</p>
<p>&nbsp; // static initializer</p>
<p>&nbsp;&nbsp; {</p>
<p>&nbsp; &nbsp; &nbsp; birth(); &nbsp;&nbsp;</p>
<p>&nbsp; }<br />&nbsp; ...</p>
<p>}</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6524157.xml</wfw:commentRss></item><item><title>Error launching remote program: security policy error</title><category>iPhone</category><dc:creator>Boon Chew</dc:creator><pubDate>Fri, 29 Jan 2010 05:29:27 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/1/28/error-launching-remote-program-security-policy-error.html</link><guid isPermaLink="false">277155:2803626:6458521</guid><description><![CDATA[<p>Tried to debug a media browser component we are developing today and got this error when trying to run the build on our test iPhone: "Error launching remote program: security policy error".&nbsp; The build was working fine on another test iPhone, so what could have caused this?</p>
<p>After trying a few different things that didn't seem to bring me closer to the solution, I went into Organizer and started looking at anything that is different between the two phones, the only difference I see is that the current iPhone has a few provisioning profiles that have already expired while the other working one doesn't.&nbsp; I proceeded to delete all provisioning profiles that have expired and the app deployed to the phone properly!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6458521.xml</wfw:commentRss></item><item><title>What if everything in your house is a white board full of ideas?</title><category>creativity</category><category>ideas</category><dc:creator>Boon Chew</dc:creator><pubDate>Fri, 15 Jan 2010 05:15:43 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2010/1/14/what-if-everything-in-your-house-is-a-white-board-full-of-id.html</link><guid isPermaLink="false">277155:2803626:6332423</guid><description><![CDATA[<div></div>
<div></div>
<div>Then you need <a href="http://www.ideapaint.com/site/index.html">Idea Paint</a>. &nbsp;Log this into your&nbsp;<a href="http://www.nanaimostudio.com/ideaorganizer">Idea Organizer</a> today and turn your house into a giant Idea Organizer one day.</div>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-6332423.xml</wfw:commentRss></item><item><title>Can you make a living creating iPhone apps?</title><category>iPhone</category><category>thoughts</category><dc:creator>Boon Chew</dc:creator><pubDate>Wed, 11 Nov 2009 12:28:49 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2009/11/11/can-you-make-a-living-creating-iphone-apps.html</link><guid isPermaLink="false">277155:2803626:5762734</guid><description><![CDATA[<p>These days there have been many talks on how App Store has reached 100,000 apps and it's getting very hard to get exposure.&nbsp; These are all true sentiments, indeed, the gold rush is over.&nbsp; No longer can you hope to make $200k just off of a crappy piece of software.&nbsp; In addition, because of the sheer number of apps fighting for attention, the need to market your app has to be an integral part of your app development plan.&nbsp; It's sad but true -- a mediocre app that has a powerful marketing engine is likely going to do better than a good app without marketing behind it.&nbsp; The next question naturally becomes: can I still make a living off of developing for iPhone if I don't have the marketing might like those of the big corporations?</p>
<p>The answer is YES, but with a few conditions.&nbsp; Firstly, your app has to be the best in its class.&nbsp; If you can't make it the best in its category, try it narrow it down until you can.&nbsp; For example, if you can't beat EverNote in trying to be the do-it-all note-taking app, narrow it to be the best simple note-taking app or the best quick note-taking app.&nbsp; Unless you are confident that you can make your app the best there is in the category that you define, don't do it.&nbsp; Secondly, you have to be patient.&nbsp; It takes time for your app to get noticed and it will also take more effort than you like (esp. for the less business-minded people) to market it.&nbsp; You also have to be patient in order for luck to strike, if ever.&nbsp; Maybe Apple notices your app, maybe a few hugely popular press or blogs notice your app and report about it.&nbsp; Thirdly, you have to continually improve your app, and to do this, you must have a good feedback loop.&nbsp; Make sure your app provides a way for users to submit feedback to you.&nbsp; Make sure you take the time to reply to all your users' feedbacks and concerns.&nbsp; They may only pay you $0.99 for your app, but you must give no less than $99.00 worth of customer service back.&nbsp; If they are not happy with your app, try to come up with a way that will make them happy.&nbsp; If they are still not happy, try to find a way to refund the $0.99 - the money should be spent somewhere else, just not on your app.</p>
<p>The truth is, even though there are 100k apps on App Store today, the very nature of bell curve is very much at work here.&nbsp; That is, most of the apps on App Store are simply noises, only a very handful of them offer true values to its users.&nbsp; If you can use this fact and make sure your app doesn't fall into the first two standard deviation (99% of the apps out there), you have a good chance at making it big.&nbsp; Judging from the stats we have gathered from selling Idea Organizer, as long as you have 3+ apps that are in Top 100 in its own category, you will make more money that working for just about any company out there, and that's not a difficult goal to hit at all.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-5762734.xml</wfw:commentRss></item><item><title>Push Notifications with Urban Airship</title><category>iPhone</category><category>push</category><dc:creator>Boon Chew</dc:creator><pubDate>Wed, 11 Nov 2009 12:18:04 +0000</pubDate><link>http://www.nanaimostudio.com/blog/2009/11/11/push-notifications-with-urban-airship.html</link><guid isPermaLink="false">277155:2803626:5762680</guid><description><![CDATA[<p>Seriously, if you want to do Push Notifications without spending a ton of time sweating the server-side of things, look into <a href="http://urbanairship.com/">Urban AirShip</a>.&nbsp; I tried out their service the other day and got my push notification test up and running within 30 mins.</p>]]></description><wfw:commentRss>http://www.nanaimostudio.com/blog/rss-comments-entry-5762680.xml</wfw:commentRss></item></channel></rss>