<?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>txeet &#187; Development</title>
	<atom:link href="http://txeet.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://txeet.com</link>
	<description>have fun texting</description>
	<lastBuildDate>Sat, 01 May 2010 07:41:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Signs that App Store is getting crowded</title>
		<link>http://txeet.com/2010/02/sign-that-app-store-is-getting-crowded/</link>
		<comments>http://txeet.com/2010/02/sign-that-app-store-is-getting-crowded/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 14:36:15 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[data]]></category>

		<guid isPermaLink="false">http://txeet.com/2010/02/sign-that-app-store-is-getting-crowded/</guid>
		<description><![CDATA[txeet was released on 9 Feb 2010. Shortly after releasing, I checked on App Store ranking and my analytic data, and I see signs that Apple’s App Store is getting too crowded. &#160; Sign 1 – Apps cluttered in the categories, especially in Lifestyle In just a single day, there are 18 lifestyle apps released. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fsign-that-app-store-is-getting-crowded%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fsign-that-app-store-is-getting-crowded%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://txeet.com">txeet</a> was released on 9 Feb 2010. </p>
<p>Shortly after releasing, I checked on App Store ranking and my analytic data, and I see signs that Apple’s App Store is getting too crowded.</p>
<p>&#160;</p>
<p> <span id="more-333"></span><br />
<h2>Sign 1 – Apps cluttered in the categories, especially in Lifestyle</h2>
<p>In just a single day, there are <strong>18 lifestyle apps</strong> released. These apps are ordered in alphabetical order, therefore txeet is placed quite behind, in fact it is in page 2. </p>
<p>To have a newly released app in page 2 is a big disappointment. One year ago, it could take 3 days before a new app gets pushed to page 2. Those were the days..</p>
<p><a href="http://txeet.com/wp-content/uploads/2010/02/lifestylerelease1.jpg" rel="shadowbox"><img title="lifestyle-release1" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="688" alt="lifestyle-release1" src="http://txeet.com/wp-content/uploads/2010/02/lifestylerelease1_thumb.jpg" width="360" border="0" /></a></p>
<p>Note that page 1 has 5 charm apps (similar apps with combination of color and types…). The developer probably gonna release another 100+ apps as there are so many colors..</p>
<p><img title="lifestyle-release2" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="697" alt="lifestyle-release2" src="http://txeet.com/wp-content/uploads/2010/02/lifestylerelease2_thumb.jpg" width="360" border="0" /> </p>
<p>
<p>Page 2 has quite a lot of Girls apps, the latest trend. On first look, txeet looks bright and very out of place.</p>
<p>&#160;</p>
<p>&#160;</p>
<h2>Sign 2 – Analytics show that Android has more users</h2>
<p>I used Flurry analytics to analyze the <strong>number of new users </strong>for the first few days of launch.</p>
<p>Android was released on Oct 18th, and the first day it gathered <strong>620 new users</strong>.</p>
<h2><a href="http://txeet.com/wp-content/uploads/2010/02/txeetandroid.png" rel="shadowbox"><img title="txeet android" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="194" alt="txeet android" src="http://txeet.com/wp-content/uploads/2010/02/txeetandroid_thumb.png" width="659" border="0" /></a></h2>
<p>&#160;</p>
<p>iPhone was released on Feb 9th, and the first full day it gathered <strong>147 new users</strong>. </p>
</p>
<h2><a href="http://txeet.com/wp-content/uploads/2010/02/txeetiphone.png" rel="shadowbox"><img title="txeet iphone" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="197" alt="txeet iphone" src="http://txeet.com/wp-content/uploads/2010/02/txeetiphone_thumb.png" width="659" border="0" /></a> </h2>
<p>This post will be updated when I have updated data.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2010/02/sign-that-app-store-is-getting-crowded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pitfalls of NSFetchedResultsController</title>
		<link>http://txeet.com/2010/02/pitfalls-of-nsfetchedresultscontroller/</link>
		<comments>http://txeet.com/2010/02/pitfalls-of-nsfetchedresultscontroller/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:17:55 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[CoreData]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://txeet.com/2010/02/pitfalls-of-nsfetchedresultscontroller/</guid>
		<description><![CDATA[I have recently used one of the most useful framework in iPhone 3.0 – CoreData. There are many guides on using CoreData, such as from cocoadevcentral or Apple’s guide. But what I found lacking is that there was no discussion on the pitfalls of using CoreData, or its view controller, NSFetchedResultsController. I learnt the pitfalls [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fpitfalls-of-nsfetchedresultscontroller%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fpitfalls-of-nsfetchedresultscontroller%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I have recently used one of the most useful framework in iPhone 3.0 – CoreData. </p>
<p>There are many guides on using CoreData, such as from <a href="http://cocoadevcentral.com/articles/000086.php">cocoadevcentral</a> or <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-TP1">Apple’s guide</a>. But what I found lacking is that there was no discussion on the pitfalls of using CoreData, or its view controller, <a href="http://developer.apple.com/iphone/library/documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html">NSFetchedResultsController</a>.</p>
<p>I learnt the pitfalls along the way, and there are 3 particular pitfalls that I would like to share with developers while developing <a href="http://txeet.com">txeet</a> for iPhone.</p>
<p>&#160;</p>
<p> <span id="more-269"></span><br />
<h2>1. Performance hit with predicate using one-to-many relationship</h2>
<p>When using NSFetchedResultsController, we would often form our predicate (like SQL) to retrieve some table rows. </p>
<p>If you were to use a predicate that involves transversing a one-to-many relationship, the performance could be slowed down <a href="http://stackoverflow.com/questions/1145178/core-data-fetching-objects-that-are-in-relationship-to-another-object">tremendously</a> (as slow as 30 sec to run, or even crash!). Take for example a <strong>Template</strong> model that has a one-to-many relationship <strong>tags</strong> to <strong>Tag</strong> model:</p>
<p><a href="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode1.jpg" rel="shadowbox"><img title="coredata pitfall code1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="coredata pitfall code1" src="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode1_thumb.jpg" width="624" border="0" /></a>&#160; </p>
<p>The predicate above would require transversing to each Tag to find ‘love’. This is computationally <em>very expensive</em>. </p>
<p>The solution to this is to avoid transversing relationship. A faster way that CoreData could execute is to access the properties/attributes. For the above example, what I did is to add another attribute <strong>tagsAsAttribute</strong> to <strong>Template</strong> model. This property would store the tag names in a delimited format such as “;love;jokes;quotes;”. The predicate would then be changed to:</p>
<p><a href="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode2.jpg" rel="shadowbox"><img title="coredata pitfall code2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="31" alt="coredata pitfall code2" src="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode2_thumb.jpg" width="679" border="0" /></a> </p>
<p>Note: This is not the best way to design the data model, as <strong>tagsAsAttribute</strong> has a dependency and is redundant.</p>
<p>&#160;</p>
<h2>2. User-driven updates</h2>
<p>If you read the <a href="http://developer.apple.com/iphone/library/documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html">Apple’s guide to NSFetchedResultsControllerDelegate</a>, please note of the section User-Driven Updates.</p>
<p>In short, if you have user-driven updates, you should write the following as the first line in every (only one is shown below) of the NSFetchedResultsControllerDelegate delegate methods:</p>
<p><a href="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode3.jpg" rel="shadowbox"><img title="coredata pitfall code3" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="37" alt="coredata pitfall code3" src="http://txeet.com/wp-content/uploads/2010/02/coredatapitfallcode3_thumb.jpg" width="557" border="0" /></a> </p>
<p>And when there is a user-driven update, set the <strong>isStillUpdating</strong> boolean to true, and set false when the update is completed.</p>
<p>User-driven updates could be re-ordering of table rows, or inserting of objects.</p>
<p>&#160;</p>
<h2>3. abort() should NEVER be used in release</h2>
<p>If you have used the sample code for CodeData, there is a line of code which is there only for testing environment. In the comments, it warned developers that <strong>abort()</strong> should not be used in shipping application..</p>
<p>But I didn’t read the comments..</p>
<p>Apparently, certain devices will occasionally have error when running certain CoreData methods. Eg. NSManagedObjectContext’s save. When there is an error, we could optionally handle the error, but we should NEVER abort and exit the app.</p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2010/02/pitfalls-of-nsfetchedresultscontroller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple says txeet should be rated 17+</title>
		<link>http://txeet.com/2010/02/apple-says-txeet-should-be-rated-17/</link>
		<comments>http://txeet.com/2010/02/apple-says-txeet-should-be-rated-17/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 03:53:00 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://txeet.com/2010/02/apple-says-txeet-should-be-rated-17/</guid>
		<description><![CDATA[Apple’s appreview team reviewed txeet and deemed that it should be rated 17+, as it contains adult theme. They sent me a screenshot of the app: &#160; Okay.. there are adult jokes and vulgarity in some of the templates.. but they are funny and interesting :)]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fapple-says-txeet-should-be-rated-17%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftxeet.com%2F2010%2F02%2Fapple-says-txeet-should-be-rated-17%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Apple’s appreview team reviewed <a href="http://txeet.com">txeet</a> and deemed that it should be rated 17+, as it contains adult theme. They sent me a screenshot of the app:</p>
<p><a href="http://txeet.com/wp-content/uploads/2010/02/17ratingrequired.png" rel="shadowbox"><img title="17  rating required" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="484" alt="17  rating required" src="http://txeet.com/wp-content/uploads/2010/02/17ratingrequired_thumb.png" width="324" border="0" /></a></p>
<p>&#160;</p>
<p>Okay.. there are adult jokes and vulgarity in some of the templates.. but they are funny and interesting :)</p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2010/02/apple-says-txeet-should-be-rated-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
