<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ALLEY LABS</title>
	<atom:link href="http://alleylabs.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://alleylabs.wordpress.com</link>
	<description>A History of iPhone App Development in Ha Noi, Viet Nam</description>
	<lastBuildDate>Sat, 26 Sep 2009 07:19:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='alleylabs.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ALLEY LABS</title>
		<link>http://alleylabs.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://alleylabs.wordpress.com/osd.xml" title="ALLEY LABS" />
	<atom:link rel='hub' href='http://alleylabs.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Warp Speed</title>
		<link>http://alleylabs.wordpress.com/2009/05/18/warp-speed/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/18/warp-speed/#comments</comments>
		<pubDate>Mon, 18 May 2009 10:20:33 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/2009/05/18/warp-speed/</guid>
		<description><![CDATA[In our game, there&#8217;s a lot of on-screen action that we had to be prepared for &#8212; we couldn&#8217;t have cumbersome, but necessary, calculations and memory allocation processes drop our frame rate to an unplayable level. We&#8217;re shooting for a frame rate of 45 FPS; we&#8217;ll be happy with anything between 45 FPS and 60 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=56&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In our game, there&#8217;s a lot of on-screen action that we had to be prepared for &#8212; we couldn&#8217;t have cumbersome, but necessary, calculations and memory allocation processes drop our frame rate to an unplayable level. We&#8217;re shooting for a frame rate of 45 FPS; we&#8217;ll be happy with anything between 45 FPS  and 60 FPS. To help us stick to the 45 FPS end of that spectrum, here are a few things we did to keep the game running smoothly:</p>
<p>1.) The default setting for Xcode is set to &#8220;Compile for Thumb&#8221;. You get smaller compiled code, but it&#8217;s slower in-game. Instead, we turned that off, which makes instruction sets larger, but they get processed faster in-game.</p>
<p>2.) <strong>Allocating memory is a slow process and doesn&#8217;t need to be done in the game loop</strong>; we stashed it away in the loading screen. That&#8217;s a big burden off the processor&#8217;s back during game play.</p>
<p>3.) All calculations that we needed for our particle system in game, we precalculated. When a meteor gets zapped, or collides with another meteor, the splash for the resulting 200-odd particles is already stored in memory; no slow, ponderous calculations that can effect frame rate need to be done within the game loop.</p>
<p>4.) We had the option of tracking and accounting for off-screen collision detection but chose not to do it. Concentrating only on the objects on-screen requires fewer operations and we decided the benefit to the speed of the game was more valuable than accounting for whether X and Y meteor collided on the opposite side of the planet. In a related maneuver, we also did not draw X and Y meteor on the opposite side of the planet; only the meteors near the spaceship (on-screen) are drawn, thus saving the processor from accounting for meteors not directly affecting gameplay at that moment.</p>
<p>5.) <strong>Originally, we stuck with Apple&#8217;s convention and wrote the game in Objective-C. We suppose this language makes sense if you need the compatibility Objective-C offers for other iPhone programs (like, say, a photo album) but there really wasn&#8217;t anything on the iPhone that the game would benefit from if it were written in Objective-C, so we rewrote the game in C++</strong>. This, too, gives us greater flexibility and helps keep our frame rate at the target 45 FPS.</p>
<p>A great resource on optimizing your application&#8217;s performance is this page from the Apple iPhone Reference Library: http://developer.apple.com/iphone/library/technotes/tn2008/tn2230.html We used it extensively while figuring out how to keep our game humming along, here&#8217;s hoping it will help you too.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=56&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/18/warp-speed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>Find Out Your iPhone App Name!</title>
		<link>http://alleylabs.wordpress.com/2009/05/18/find-out-your-iphone-app-name/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/18/find-out-your-iphone-app-name/#comments</comments>
		<pubDate>Mon, 18 May 2009 07:41:45 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Names]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/2009/05/18/find-out-your-iphone-app-name/</guid>
		<description><![CDATA[Earlier, we talked about some tips and pointers to consider when you&#8217;re trying to find the right one-two combo when it comes to your app&#8217;s name and icon. For our app here at Alley Labs, the naming process is ongoing; a slow circling pattern around a target that we&#8217;ll only know we&#8217;ve hit once we&#8217;ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=45&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Earlier, we talked about some tips and pointers to consider when you&#8217;re trying to find the right one-two combo when it comes to your app&#8217;s name and icon. For our app here at Alley Labs, <strong>the naming process is ongoing; a slow circling pattern around a target that we&#8217;ll only know we&#8217;ve hit once we&#8217;ve hit it</strong>. So we&#8217;re going to take you through the steps we&#8217;ve gone through so far to get the name for our app. Hopefully, they&#8217;ll help you in your process, too.</p>
<p>1.) <strong>You want your app&#8217;s name and its game play to have an inseparable bond</strong> (this goes back to the SimCity vs. Halo distinction we discussed in the previous &#8220;naming&#8221; post). So the first thing we did; we got into our game. Zipped around blasted some hunks of space rock and let some words start to pop into our heads. Words like &#8220;frenzy,&#8221; &#8220;wild,&#8221; &#8220;space,&#8221; &#8220;asteroids&#8221;&#8230; We start simple and grow from there.</p>
<p>2.) The next stop was the thesaurus to get that list to grow. We plugged in whatever we came up with while playing the game and got a list going &#8211; synonyms of synonyms. In the end we had a sheet of paper with about 200 nouns, verbs, adjectives, gerunds, modifiers, dangling participles&#8230; you get the idea. Next came the narrowing process.</p>
<p>3.) We went straight to the app store and looked through for games similar to ours that used words from our list. Those words we cut immediately (<strong>while it&#8217;s a good idea not to sound similar to a game you might be in competition with, we did keep an eye out for words that seemed to be good &#8220;gaming&#8221; words</strong>). Any words that were too long, &#8211; we took it easy on the syllables and you should too &#8211; difficult to spell, had arcane definitions&#8230; cut, cut, cut.</p>
<p>4.) From then on it&#8217;s that circling pattern; like flotsam and jetsam in your bathtub while the water&#8217;s headed down the drain and it just circles, circles into that little whirlpool vortex until it gets sucked down the hole. When we got to that point we had two words left: &#8220;Meteor Blitz.&#8221;</p>
<p>That&#8217;s where we are now. It could be we recycle this whole process another couple times with the words meteor blitz and see what we get when we come out the other side &#8211; the narrowing process is a narrowing process of its own (it&#8217;s all very metaphysical&#8230;) &#8211; but for the moment, that&#8217;s how we got our name.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=45&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/18/find-out-your-iphone-app-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>The Unpaid Version</title>
		<link>http://alleylabs.wordpress.com/2009/05/06/the-unpaid-version/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/06/the-unpaid-version/#comments</comments>
		<pubDate>Wed, 06 May 2009 08:01:58 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[free vs. lite]]></category>
		<category><![CDATA[lite]]></category>
		<category><![CDATA[terminology]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=30</guid>
		<description><![CDATA[Free vs. Lite It&#8217;s nice that you want to give prospective users an opportunity to test your game without paying, but don&#8217;t shoot yourself in the foot with the words you use to convey that fact. The two words most commonly used to notify a user that they are downloading a version of the game [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=30&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Free vs. Lite</strong></p>
<p>It&#8217;s nice that you want to give prospective users an opportunity to test your game without paying, but don&#8217;t shoot yourself in the foot with the words you use to convey that fact. The two words most commonly used to notify a user that they are downloading a version of the game that they can test without paying are &#8220;Lite&#8221; and &#8220;Free.&#8221; We say, stick with Free. A user may see &#8220;Lite&#8221; and not realize that the distinction between the &#8220;Lite&#8221; and full versions of the game is whether they pay money to play or not. If a user sees &#8220;Lite&#8221; and that the game doesn&#8217;t cost money to play, they may go off in search of the full version. Upon finding the full version, and the fact that it costs $3.99 to download, you&#8217;ve probably lost that prospective customer; it&#8217;s unlikely the user will then go <em>back </em>to download the Lite version, get hooked, and then go back and buy the full version. By using the term &#8220;Free&#8221; instead, you note that the user will be able to experience the full range of gameplay possibilities and can notify in the description, and also later in the game, that to play all available levels of the game, they must purchase the full version. People know what &#8220;free&#8221; means &#8211; they don&#8217;t have to pay. Leave the coy term &#8211; &#8220;Lite&#8221; &#8211; to the soda and beer companies.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=30&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/06/the-unpaid-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>Compression</title>
		<link>http://alleylabs.wordpress.com/2009/05/06/compression/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/06/compression/#comments</comments>
		<pubDate>Wed, 06 May 2009 08:00:19 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=27</guid>
		<description><![CDATA[What&#8217;d you do to my phone bill?! If your game is going to send data over the network, remember that it&#8217;s going to cost your users money to do that. If it costs too much &#8211; i.e. if they raise an eyebrow even a bit at the cost &#8211; you&#8217;re in trouble. To avoid this, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=27&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>What&#8217;d you do to my phone bill?!<br />
</strong><br />
If your game is going to send data over the network, remember that it&#8217;s going to cost your users money to do that. If it costs too much &#8211; i.e. if they raise an eyebrow even a bit at the cost &#8211; you&#8217;re in trouble. To avoid this, you&#8217;ve got to compress any data sent over the network. The second place where uncompressed data can screw up your app is in the game. Uncompressed text data stored in the game can slow load times and compromise the user&#8217;s experience. Large amounts of text data in-game need to be compressed and doing so can speed up your load times, which is always a plus. Copy and add these two files to your project to get around these two landmines:</p>
<div><span style="white-space:pre;"> </span>1. Xcode -&gt; Project -&gt; Edit Project Settings -&gt; Linking -&gt; Other Linker Flags -&gt; -lz (be sure to do it for all configurations)</div>
<div><span style="white-space:pre;"> </span>2. follow the usage in the main.m file below</div>
<div>//</div>
<div>//  Compress.h</div>
<div>//</div>
<div>@interface Compress : NSObject {</div>
<div>}</div>
<div>// Returns a data object containing a Zlib compressed copy of the receivers</div>
<div>// contents.</div>
<div>+ (NSData *)compress:(NSData *)data;</div>
<div>// Returns a data object containing a Zlib decompressed copy of the receivers</div>
<div>// contents.</div>
<div>+ (NSData *)decompress:(NSData *)data;</div>
<div>@end</div>
<div>//</div>
<div>//  Compress.m</div>
<div>//</div>
<div>#import &#8220;Compress.h&#8221;</div>
<div>#import &#8220;zlib.h&#8221;</div>
<div>@implementation Compress</div>
<div>// 16K chunks for expansion</div>
<div>const int CHUNK_LENGTH = 16384;</div>
<div>+ (NSData *)compress:(NSData *)data {</div>
<div><span style="white-space:pre;"> </span>if ([data length] == 0) {</div>
<div><span style="white-space:pre;"> </span>return data;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>z_stream strm;</div>
<div><span style="white-space:pre;"> </span>strm.zalloc = Z_NULL;</div>
<div><span style="white-space:pre;"> </span>strm.zfree = Z_NULL;</div>
<div><span style="white-space:pre;"> </span>strm.opaque = Z_NULL;</div>
<div><span style="white-space:pre;"> </span>strm.total_out = 0;</div>
<div><span style="white-space:pre;"> </span>strm.next_in = (Bytef *)[data bytes];</div>
<div><span style="white-space:pre;"> </span>strm.avail_in = [data length];</div>
<div><span style="white-space:pre;"> </span>// Compresssion Levels:</div>
<div><span style="white-space:pre;"> </span>//   Z_NO_COMPRESSION</div>
<div><span style="white-space:pre;"> </span>//   Z_BEST_SPEED</div>
<div><span style="white-space:pre;"> </span>//   Z_BEST_COMPRESSION</div>
<div><span style="white-space:pre;"> </span>//   Z_DEFAULT_COMPRESSION</div>
<div><span style="white-space:pre;"> </span>if (deflateInit(&amp;strm, Z_DEFAULT_COMPRESSION) != Z_OK) {</div>
<div><span style="white-space:pre;"> </span>return nil;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>NSMutableData *compressed = [NSMutableData dataWithLength:CHUNK_LENGTH];</div>
<div><span style="white-space:pre;"> </span>do {</div>
<div><span style="white-space:pre;"> </span>if (strm.total_out &gt;= [compressed length]) {</div>
<div><span style="white-space:pre;"> </span>[compressed increaseLengthBy:CHUNK_LENGTH];</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>strm.next_out = [compressed mutableBytes] + strm.total_out;</div>
<div><span style="white-space:pre;"> </span>strm.avail_out = [compressed length] &#8211; strm.total_out;</div>
<div><span style="white-space:pre;"> </span>deflate(&amp;strm, Z_FINISH);</div>
<div><span style="white-space:pre;"> </span>} while (strm.avail_out == 0);</div>
<div><span style="white-space:pre;"> </span>deflateEnd(&amp;strm);</div>
<div><span style="white-space:pre;"> </span>[compressed setLength:strm.total_out];</div>
<div><span style="white-space:pre;"> </span>return [NSData dataWithData:compressed];</div>
<div>}</div>
<div>+ (NSData *)decompress:(NSData *)data {</div>
<div><span style="white-space:pre;"> </span>if ([data length] == 0) {</div>
<div><span style="white-space:pre;"> </span>return data;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>unsigned full_length = [data length];</div>
<div><span style="white-space:pre;"> </span>unsigned half_length = [data length] / 2;</div>
<div><span style="white-space:pre;"> </span>NSMutableData *decompressed = [NSMutableData dataWithLength:full_length + half_length];</div>
<div><span style="white-space:pre;"> </span>BOOL done = NO;</div>
<div><span style="white-space:pre;"> </span>int status;</div>
<div><span style="white-space:pre;"> </span>z_stream strm;</div>
<div><span style="white-space:pre;"> </span>strm.next_in = (Bytef *)[data bytes];</div>
<div><span style="white-space:pre;"> </span>strm.avail_in = [data length];</div>
<div><span style="white-space:pre;"> </span>strm.total_out = 0;</div>
<div><span style="white-space:pre;"> </span>strm.zalloc = Z_NULL;</div>
<div><span style="white-space:pre;"> </span>strm.zfree = Z_NULL;</div>
<div><span style="white-space:pre;"> </span>if (inflateInit(&amp;strm) != Z_OK) {</div>
<div><span style="white-space:pre;"> </span>return nil;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>while (!done) {</div>
<div><span style="white-space:pre;"> </span>// Make sure we have enough room and reset the lengths.</div>
<div><span style="white-space:pre;"> </span>if (strm.total_out &gt;= [decompressed length]) {</div>
<div><span style="white-space:pre;"> </span>[decompressed increaseLengthBy:half_length];</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>strm.next_out = [decompressed mutableBytes] + strm.total_out;</div>
<div><span style="white-space:pre;"> </span>strm.avail_out = [decompressed length] &#8211; strm.total_out;</div>
<div><span style="white-space:pre;"> </span>// Inflate another chunk.</div>
<div><span style="white-space:pre;"> </span>status = inflate(&amp;strm, Z_SYNC_FLUSH);</div>
<div><span style="white-space:pre;"> </span>if (status == Z_STREAM_END) {</div>
<div><span style="white-space:pre;"> </span>done = YES;</div>
<div><span style="white-space:pre;"> </span>} else if (status != Z_OK) {</div>
<div><span style="white-space:pre;"> </span>break;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>if (inflateEnd(&amp;strm) != Z_OK) {</div>
<div><span style="white-space:pre;"> </span>return nil;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div><span style="white-space:pre;"> </span>// Set real length.</div>
<div><span style="white-space:pre;"> </span>if (done) {</div>
<div><span style="white-space:pre;"> </span>[decompressed setLength:strm.total_out];</div>
<div><span style="white-space:pre;"> </span>return [NSData dataWithData:decompressed];</div>
<div><span style="white-space:pre;"> </span>} else {</div>
<div><span style="white-space:pre;"> </span>return nil;</div>
<div><span style="white-space:pre;"> </span>}</div>
<div>}</div>
<div>@end</div>
<div>//</div>
<div>//  main.m</div>
<div>//</div>
<div>#import &lt;Foundation/Foundation.h&gt;</div>
<div>#import &#8220;Compress.h&#8221;</div>
<div>int main(int argc, char *argv[]) {</div>
<div><span style="white-space:pre;"> </span>NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];</div>
<div><span style="white-space:pre;"> </span>NSString *string = @&#8221;This is a test of the compression library. Usually text compresses better than binary data. Don&#8217;t forget to add &#8216;-lz&#8217; to &#8216;Other Linker Flags&#8217; in your project settings!&#8221;;</div>
<div><span style="white-space:pre;"> </span>NSData *data = [string dataUsingEncoding:[NSString defaultCStringEncoding]];</div>
<div><span style="white-space:pre;"> </span>NSData *compressedData = [Compress compress:data];</div>
<div><span style="white-space:pre;"> </span>printf(&#8220;compressed bytes: %d\n&#8221;, [compressedData length]);</div>
<div><span style="white-space:pre;"> </span>NSData *decompressedData = [Compress decompress:compressedData];</div>
<div><span style="white-space:pre;"> </span>printf(&#8220;decompressed bytes: %d\n&#8221;, [decompressedData length]);</div>
<div><span style="white-space:pre;"> </span>NSString *decompressedString = [[NSString alloc] initWithData:decompressedData encoding:[NSString defaultCStringEncoding]];</div>
<div><span style="white-space:pre;"> </span>NSLog(decompressedString);</div>
<div><span style="white-space:pre;"> </span>[decompressedString release];</div>
<div><span style="white-space:pre;"> </span>[pool release];</div>
<div><span style="white-space:pre;"> </span>return 0;</div>
<div>}</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=27&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/06/compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>Encryption</title>
		<link>http://alleylabs.wordpress.com/2009/05/06/encryption/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/06/encryption/#comments</comments>
		<pubDate>Wed, 06 May 2009 07:58:36 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=25</guid>
		<description><![CDATA[No Peeking Unless you want your high scores boards filled up with bored hackers&#8217; fake data &#8211; 20,000 users with high scores of 999,999! &#8211; then you&#8217;ve got to encrypt any data you send over the network and any date you save on the phone. It&#8217;s too easy for hackers to snag this data and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=25&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong></strong><strong>No Peeking</strong></p>
<p>Unless you want your high scores boards filled up with bored hackers&#8217; fake data &#8211; 20,000 users with high scores of 999,999! &#8211; then you&#8217;ve got to encrypt any data you send over the network and any date you save on the phone. It&#8217;s too easy for hackers to snag this data and wreak havoc on your high scores or, much much worse, with the passwords, phone numbers, and/or credit card information of your users. You&#8217;re a custodian of this data and if your users don&#8217;t trust you, you&#8217;re sunk. Simple as that. Here is some code that will help keep sensitive information private and hackers out of your high score boards:</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=25&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/06/encryption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>The First 30 Seconds</title>
		<link>http://alleylabs.wordpress.com/2009/05/06/the-first-30-seconds/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/06/the-first-30-seconds/#comments</comments>
		<pubDate>Wed, 06 May 2009 07:57:32 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[gameplay]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[loading]]></category>
		<category><![CDATA[UI Menu]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=23</guid>
		<description><![CDATA[First, but not last, Impressions Your name and icon jive, and people tap through and purchase your app. Good deal. Now you have to make them not regret the decision. Remember that the first impression could be the only impression you get to make, so the first 30 seconds a user spends with your app [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=23&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>First, but not last, Impressions</strong></p>
<p>Your name and icon jive, and people tap through and purchase your app. Good deal. Now you have to make them not regret the decision. Remember that the first impression could be the only impression you get to make, so the first 30 seconds a user spends with your app is critical; one loading screen, or one second of loading, too many, and you&#8217;ve lost your user&#8217;s attention. To avoid a flame out like this, there are a few things you can do to get them playing as soon as possible and not staring cross-eyed at loading screens.</p>
<p>The big one is loading. <strong>If there&#8217;s a lot to load, find a way to disguise it; load in the background while the player is progressing through the UI menus</strong>. If that&#8217;s still not enough, then take the Madden route and show tips, hints, strategy while the game is loading &#8211; give your users information they would be interested to read so the loading doesn&#8217;t seem so long. <strong>You can use the UI menus to your advantage to disguise loading, but don&#8217;t create a labyrinth between there and the actual gameplay</strong>. Your users want to start playing, so keep the UI menus simple and straight-forward, make the experience crisp and clear, and keep load times to a minimum. Here are a few tips:</p>
<p><strong>1.)</strong> To start playing the game just have a button that says &#8220;Play&#8221; or &#8220;Start,&#8221; don&#8217;t get clever with words like &#8220;Engage&#8221; or &#8220;Lift Off!&#8221;<br />
<strong>2.)</strong> Keep unnecessary options off of the main UI menus; you probably don&#8217;t need &#8220;Credits&#8221; or &#8220;About&#8221; buttons on the main menu. Has anyone ever clicked on one of those? Also, if the user is starting the game for the first time and your game has multiple levels, don&#8217;t force your user to select &#8220;Level 1.&#8221; Just send them there automatically. They just started playing, of course they have to choose Level 1.<br />
<strong>3.)</strong> Disable the title bar via Info.plist, not programatically. If you do it programatically, it takes a little longer and it just looks messy when that title bar hangs around a second or two into loading. It&#8217;s all in the details.<br />
<strong>4.)</strong> Don&#8217;t disable the user&#8217;s music. That&#8217;s amateur hour, dudes.<br />
<strong>5.) </strong>Once the user has played more than once, offer an option to restart the game exactly where they left off so the don&#8217;t need to flip through all the UI menus. If you do this, though, also offer an option to disable this feature.</p>
<p>Follow these tips and just keep in mind that you should do everything you can to stay out of your user&#8217;s way between the moment they tap to open your app, and begin game play.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=23&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/06/the-first-30-seconds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>Naming Your App</title>
		<link>http://alleylabs.wordpress.com/2009/05/05/naming-your-app/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/05/naming-your-app/#comments</comments>
		<pubDate>Tue, 05 May 2009 04:38:42 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Names]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=20</guid>
		<description><![CDATA[The Hook SimCity, Grand Theft Auto, Command &#38; Conquer. Intriguing, right? In just a word or two, even if you hadn’t heard of these games before, you get some idea about the game; a simulated city, stealing cars, and something having to do with controlling armies. Now take these names; Half-Life, Madden, Halo. Who the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=20&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="itemtext" style="text-align:left;">
<div class="snap_preview">
<p><strong>The Hook</strong></p>
<p>SimCity, Grand Theft Auto, Command &amp; Conquer. Intriguing, right? In just a word or two, even if you hadn’t heard of these games before, you get some idea about the game; a simulated city, stealing cars, and something having to do with controlling armies. Now take these names; Half-Life, Madden, Halo. Who the hell knows what these games are about based only on the name, without any prior knowledge? Obviously all of the aforementioned titles are among the best selling of all time, but their names serve very different purposes. <strong>One set provides some kind of instant information about the game while the second set assumes its customer has a deeper knowledge of the title</strong>. Unfortunately for you, smallbore iPhone app developer, you are neither as recognizable as John Madden, nor do you look as bad-ass as Master Chief. So, unless Microsoft Game Studios is publishing your app, you’re going to need to stick with the “SimCity” prototype when it comes to naming your app. <strong>All you’ve got to catch your potential customer’s eye is one or two words, and an icon</strong>. Here’s how to make the most of them.</p>
<p>Action + Description. That’s the key. Don’t get caught up in names that are too complicated or that depend on your prospective customer’s ability to link the name to some other reference. Say you’ve got a game about blowing up planets in space. For us of the Star Wars ilk, it may be tempting to name this app “Alderon” after Princess Leia’s home-planet which was destroyed by the Death Star in “A New Hope”. Bad instinct. Assume your clientele is not as well versed in the minutiae of Star Wars and instead call your app something like “PlanetBlast” — there’s really only one thing that name could mean. As for this game’s icon, apply the universal rule of thumb: Keep It Simple Stupid. Don’t go with a squadron of one millimeter long spaceships attacking four microscopic planets. One planet with a big explosion coming out the side of it will tell us all we need to know: “PlanetBlast has to do with blowing up planets.” Once you’ve made a name for yourself, you can get a little more risky, but for the moment, <strong>all you’re looking for is the jingle that sticks in someone’s head</strong>, gets them to tap-through and, hopefully, buy your app.</p>
<p><strong>Good App Names/Icons:</strong></p>
<p><strong>Solitaire</strong> &#8211; We all know solitaire, and we all know the playing cards’ meaning. Perfect example of Keep It Simple Stupid.</p>
<p><strong>iSniper</strong> &#8211; A nice play on the iPhone name combined with a recognizable idea, the sniper game. The crosshairs say it all for the icon.</p>
<p><strong>Crazy Penguin Catapult </strong>- A catchy and memorable name. Even if you don’t exactly understand how the game consists of catapulting penguins, you don’t really care because you’d like to see that flying penguin on the icon in action.</p>
<p><strong>Flick Fishing</strong> &#8211; Active words, and intriguing because it suggests movement from the user is required. The icon, a fish going for a hook, is safe and simple.</p>
<p><strong>Bad App Names/Icons:</strong></p>
<p><strong>Blackbeard</strong> &#8211; Well, we assume it’s pirate related. But is it an action game? An adventure game? Turns out it’s a puzzle game, but who would know? The icon &#8211; just a pirate ship &#8211; looks fine, but doesn’t give us any further hint about the game.</p>
<p><strong>Oort Storm</strong> &#8211; This is in the “Alderon” vein… We assume it’s in space because there’s a spaceship on the icon, but that’s all we know. You lost me and I’m on to the next app.</p>
<p style="text-align:left;"><strong>Abigale</strong> &#8211; Who? What? When? Wh- ahh, who cares. Next app.</p>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=20&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/05/naming-your-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Prevent iPhone App Piracy</title>
		<link>http://alleylabs.wordpress.com/2009/05/05/how-to-prevent-iphone-app-piracy/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/05/how-to-prevent-iphone-app-piracy/#comments</comments>
		<pubDate>Tue, 05 May 2009 04:36:08 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Info.plist]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[piracy]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=16</guid>
		<description><![CDATA[Get Off My Boat, err, App! The waters off Somalia isn’t the only place pirates disrupt the work of good, honest folks just trying to get their haul of tuna back to port. The iPhone app store is picked apart daily by the world’s internet pirates and a burgeoning library of apps &#8211; some 6,000 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=16&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Get Off My Boat, err, App!</strong></p>
<p style="text-align:left;">The waters off Somalia isn’t the only place pirates disrupt the work of good, honest folks just trying to get their haul of tuna back to port. The iPhone app store is picked apart daily by the world’s internet pirates and a burgeoning library of apps &#8211; some 6,000 of the 25,000 for sale in the app store &#8211; are now available online for free. Big Brother (Apple) sits back in his chair &#8211; hands up, palms out, to show how clean they are &#8211; and spouts some kind of “the enemy of my friend is my friend”-type of head scratcher. So we’re on our own out here in a leaky fishing trawler trying to protect our catch from zooted up pirates and, let me tell you, Obama’s Navy Seal sniper team ain’t nowhere in sight, brother. So all you got is your wiles; here’s how to use ‘em.</p>
<p style="text-align:left;">First, you’re going to want to know if your app has been hacked. That genetic code of your app &#8211; Info.plist &#8211; will give you all the evidence you need.</p>
<p style="text-align:left;">1. If the file, once uploaded, is in text format, you’ve been hacked. When you upload your app, the file is converted into binary code, so if Info.plist is in text, it’s because someone wanted to change the parameters to allow your app to work on any phone and they’ve converted it back to text in order to do that.</p>
<p style="text-align:left;">2. Search for “SignerIdentity” in your uploaded Info.plist file. This is the fingerprint of a hacker. It’s the Shibboleth for your app to work on any phone. If it’s there, it shouldn’t be there.</p>
<p style="text-align:left;">3. When you’re finished with your Info.plist file, you know its size. So if that changes once it’s been uploaded, somebody’s gotten into it and screwed around.</p>
<p style="text-align:left;">Ok, so the pirates have their grappling hooks thrown over the side of your boat and a dude with no teeth and one ear has you looking cross-eyed at the business end of an RPG. It’s time to get diplomatic, so get out your sticks and carrots.</p>
<p style="text-align:left;">You’ve got a couple options. You can either shut out users who have a pirated app and just make the thing not work. But this is overkill, there’s no need to scuttle the ship right away. <strong>Instead, set a time limit, or max number of times a user can open the app</strong>, and when one of those parameters is met, display a message and explain that it appears the app on their iPhone is pirated and, please, we’re just family people trying to eke out a living in this cruel, electronic world, so why not click this link and dole out the measly $2.99 for our app? This tactic has been tried, and <strong>the results were surprising — conversion rates &#8211; from pirate-copy user to legit-copy user &#8211; of around 10%</strong> were seen when a calm explanation of the situation and an invitation to purchase the app were offered. The added bonus to this approach is that when someone cracks your code, it won’t be immediately obvious to the hacker that there is a built in fail-safe; he/she may play for a few minutes and move on to the next app thinking that this one is cracked. But when the hacked app is downloaded, after a few minutes, or a few uses (whichever you decide) users will get the notification that their copy is pirated and a request to buy the legit version.</p>
<p style="text-align:left;">There you have it. If only diplomacy worked this well in Somalia.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=16&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/05/how-to-prevent-iphone-app-piracy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>
	</item>
		<item>
		<title>iPhone Audio Basics</title>
		<link>http://alleylabs.wordpress.com/2009/05/05/sounds-nice/</link>
		<comments>http://alleylabs.wordpress.com/2009/05/05/sounds-nice/#comments</comments>
		<pubDate>Tue, 05 May 2009 04:30:13 +0000</pubDate>
		<dc:creator>olmucky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://alleylabs.wordpress.com/?p=5</guid>
		<description><![CDATA[Sounds Nice It’s all in the details. You’re so focused on getting your app just right &#8211; making the splatter effect when missile meets buffalo in your “BuffaloZapper 2: The ReZappening” app, perfect &#8211; that you forget the system on which your app will be played was not designed with only your app in mind; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=5&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-size:20px;"><em>Sounds Nice</em></div>
<p style="text-align:left;">It’s all in the details. You’re so focused on getting your app just right &#8211; making the splatter effect when missile meets buffalo in your “BuffaloZapper 2: The ReZappening” app, perfect &#8211; that you forget the system on which your app will be played was not designed with only your app in mind; <strong>your user has his or her own things going on with their phone, too</strong>, and they don’t want your app to blot those things out.</p>
<p>The big spot where this comes into play is with sound and music. Your exploding buffalo noise might be great, but your users might not care if they can’t have their favorite Anthrax track playing in the background when it happens.</p>
<p>So you’ve got to have your sounds right. To do this, you need to consider the different situations that could arise for a user and what expectations they would have for your app, their iPhone, and their music. Below is a chart that diagrams all the sonic situations your app should be prepared to accommodate for its users.</p>
<table style="height:30px;border:1px solid #333333;" border="0" width="471">
<tbody>
<tr style="text-align:left;">
<th>Headphones Plugged In</th>
<th>iPod Music Playing</th>
<th> Silent Switch On </p>
<p>(iPhone only)</th>
<th>Music</th>
<th>Sound Effects</th>
</tr>
<tr>
<td rowspan="4"><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
<td rowspan="2"><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
</tr>
<tr>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" alt="" /></td>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/x13.png" alt="" /></td>
<td><img src="http://i454.photobucket.com/albums/qq269/ca_chay/x13.png" alt="" /></td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alleylabs.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alleylabs.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alleylabs.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alleylabs.wordpress.com&amp;blog=7612387&amp;post=5&amp;subd=alleylabs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://alleylabs.wordpress.com/2009/05/05/sounds-nice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/286914e4ffad131afbd4dcdf38c30c5d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">olmucky</media:title>
		</media:content>

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/v1.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/x13.png" medium="image" />

		<media:content url="http://i454.photobucket.com/albums/qq269/ca_chay/x13.png" medium="image" />
	</item>
	</channel>
</rss>
