<?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>Dave Verwer's Blog &#187; iPhone Development</title>
	<atom:link href="http://blog.daveverwer.com/category/iphone-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.daveverwer.com</link>
	<description>I write Mac and iPhone software.</description>
	<lastBuildDate>Thu, 15 Apr 2010 06:49:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How and Why do Balloons Pop?</title>
		<link>http://blog.daveverwer.com/iphone-development/how-and-why-do-balloons-pop/</link>
		<comments>http://blog.daveverwer.com/iphone-development/how-and-why-do-balloons-pop/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 17:53:32 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[balloons]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[popping]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=164</guid>
		<description><![CDATA[One of the biggest problems we have had to deal with since Balloons! went live on the app store is the issues around how and why Balloons pop so I thought I would write up some of the experiences and explain some of the reasoning behind popping balloons!
First Problem: Misunderstanding
I talked about moderation before but there [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest problems we have had to deal with since <a href="http://balloonsapp.com">Balloons!</a> went live on the app store is the issues around how and why Balloons pop so I thought I would write up some of the experiences and explain some of the reasoning behind popping balloons!</p>
<h2>First Problem: Misunderstanding</h2>
<p>I <a href="http://blog.daveverwer.com/iphone-development/the-moderation-problem/">talked about moderation</a> before but there has been another, even more serious problem with the process of moderation. People who have never actually had a balloon reported (and therefore have never seen the &#8220;Reported!&#8221; badge in their balloon tracker) sometimes think that when balloons show a &#8220;Popped!&#8221; badge, that they have been popped as a result of someone else reporting them.</p>
<p>Before I go any further I would like to say that <strong>this is absolutely</strong><strong> our fault</strong> and we should have made it clearer why balloons pop. <a href="http://twitter.com/balloonsapp/status/6659108221">We recently did this with the v1.1.1 update</a> of Balloons! However this has been a real problem for our users and has resulted in a significant amount of bad reviews from people assuming we are censoring their balloons no matter how benign the content.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-166" title="BadFeedbackFromAppViz" src="http://blog.daveverwer.com/wp-content/uploads/2009/12/BadFeedbackFromAppViz.png" alt="BadFeedbackFromAppViz" width="532" height="114" /></p>
<p>It is crippling to iPhone developers that <a href="http://www.openradar.appspot.com/6069285">we can not reply to these reviews</a> and have no way to contact the disappointed customer (are you listening, Apple?) but I am really hoping the reviews on this subject will calm down now that we have made it clearer in the app UI.</p>
<h2>Second Problem: Why Pop at All?</h2>
<p>People don&#8217;t particularly like that their balloons pop for any reason and want them to fly around for years gathering hundreds of responses, this would be wonderful but unfortunately the reality of it is that with more and more balloons being launched every day, unless we also pop some every day, the probability of balloons being caught and replied to at all sharply decreases.</p>
<p>To explain that, let&#8217;s say that balloons are being launched at a constant rate of 1,000 balloons per day and let&#8217;s ignore the geographical constraints of where balloons travel for now and say that all balloons are available for catching anywhere on the earth. At the end of day one, you would have a 1 in 1,000 chance of having your balloon caught and replied to by someone else. Day two comes and another 1,000 balloons go up, by the end of day two your chances of having your balloon caught are now 1 in 2,000. As you can see, this would very quickly lead to a disaster where it could take weeks before your balloon is caught. Combine this with the fact that on average a balloon is caught between 5 and 10 times before someone decides to reply and the odds sink even lower.</p>
<p>So, we have to pop balloons if we want the service to survive.</p>
<h2>Third Problem: Which Balloons Should be Popped?</h2>
<p>So once we agreed that it was going to be necessary to pop balloons to keep the game fun, the question came of which balloons to pop. The popping algorithm has changed many times over the last month and has become significantly more sophisticated as we have learned more about how people are using the app.</p>
<p>As a starting point, when the service first launched we only popped balloons that had 7 replies on them but predictably this became unmanageable very quickly as some less interesting balloons never got replied to and so never actually popped and would hang around forever being caught and abandoned by everyone they met. The population of flying balloons got significantly bigger every day and it was clear that a fixed number of tags was a fatally flawed way to pop balloons.</p>
<p>Over the last month we have tried various methods of choosing which balloons to pop but the method that we implemented last week seems to be working very well and so here is a rough guide on how it works. I guess this is as close to a spoiler as you are ever likely to get with Balloons! so if you would rather believe it is all magic then look away now!</p>
<h2>Solution: Work Out how Interesting a Balloon is!</h2>
<p>So the algorithm of which balloons to pop now works based on an automatically calculated &#8220;interestingness&#8221; rating (thanks, flickr!) of each balloon. Interestingness is in no way a science and so don&#8217;t think we are doing anything clever, how interesting your balloon is is based on the following factors:</p>
<ul>
<li><strong>Distance</strong> &#8211; Balloons that cross more continents are more likely to have met a diverse, interesting set of people. If your balloon has travelled further, it is seen to be more interesting.</li>
<li><strong>Photos</strong> &#8211; Everyone loves to look at pictures on balloons. The percentage of tags which include pictures makes a balloon more interesting.</li>
<li><strong>Words</strong> &#8211; Balloons that have one word messages or even one character messages (yes, it happens) are probably less interesting than those that have a fully formed sentence. More words is more interesting (note, not more characters, more words).</li>
<li><strong>Views</strong> &#8211; We count how many times people catch every balloon and then how many times people actually reply. If the ratio of catches to replies is high, people are abandoning your balloon without replying to it more often and so it is probably less interesting.</li>
<li><strong>Time Since Last Reply</strong> &#8211; If your balloon has been in the air for a long time since someone replied to it then the last tag may be something people are finding difficult to reply to and so it loses a few points.</li>
</ul>
<p>Each factor is weighted slightly but I am not going to the specific weightings but we have tweaked them a few times now and they are giving good results right now.</p>
<p>One thing to mention is that this interestingness rating is much less reliable before we have a couple of days worth of data to work with and we also never want to pop a balloon before it has been flying at least a couple of days so any balloon which is less than 2 days old is excluded from ever being popped.</p>
<p>So, how do we actually decide how many balloons to pop every night? We pop a known number of balloons based roughly on the number of balloons launched on the previous day with a modification factor based on whether we want the balloon population to increase or decrease on a day to day basis.</p>
<p>We do not just indiscriminately pop the least interesting balloons though, there is a level of randomness to it so your balloon can still be lucky and get another 24 hours to become more interesting. Generally though, this system means that less interesting balloons get popped first to give the more interesting balloons a chance to fly further.</p>
<p>Another long post! Comments and discussion are very welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/how-and-why-do-balloons-pop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Balloons everywhere, but which is your favourite?</title>
		<link>http://blog.daveverwer.com/iphone-development/balloons-everywhere-but-which-is-your-favourite/</link>
		<comments>http://blog.daveverwer.com/iphone-development/balloons-everywhere-but-which-is-your-favourite/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 08:58:59 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[balloons]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=152</guid>
		<description><![CDATA[They say that a picture is worth a thousand words, so I will keep this brief and get to the picture!
Thoughts on this

There is a predictable skew towards the balloons included with the free version of Balloons!
The star balloons are very popular, not surprising really as they are positioned front and centre when picking a [...]]]></description>
			<content:encoded><![CDATA[<p>They say that a picture is worth a thousand words, so I will keep this brief and get to the picture!</p>
<div id="attachment_153" class="wp-caption aligncenter" style="width: 517px"><img class="size-full wp-image-153" title="Balloon Popularity" src="http://blog.daveverwer.com/wp-content/uploads/2009/11/BalloonUsageStatistics.png" alt="Balloon Popularity" width="507" height="249" /><p class="wp-caption-text">Popularity of balloon types across all balloons since launch.</p></div>
<h2>Thoughts on this</h2>
<ul>
<li>There is a predictable skew towards the balloons included with the free version of Balloons!</li>
<li>The star balloons are very popular, not surprising really as they are positioned front and centre when picking a balloon.</li>
<li>Is it surprising that the bright green balloon is more popular than the classic red balloon? I thought people would go for the classic.</li>
<li>The animal balloons don&#8217;t seem to be very popular! Interesting because people really loved them in beta. (The cat being the most popular animal is no shock though, it is my favourite balloon type)</li>
</ul>
<p>I am not going to try and read too much into this but I thought it might be fun to share ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/balloons-everywhere-but-which-is-your-favourite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Optimisations to the Balloons! servers</title>
		<link>http://blog.daveverwer.com/iphone-development/optimisations-to-the-balloons-servers/</link>
		<comments>http://blog.daveverwer.com/iphone-development/optimisations-to-the-balloons-servers/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 18:49:32 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=141</guid>
		<description><![CDATA[It didn&#8217;t get bad enough to cause a noticeable slowdown to users but as usage of Balloons! has ramped up this week the servers were gradually slowing down:
The advantage of being at the end of a cellular data connection is that even with response times occasionally going over 1000ms! it never got bad enough to [...]]]></description>
			<content:encoded><![CDATA[<p>It didn&#8217;t get bad enough to cause a noticeable slowdown to users but as usage of Balloons! has ramped up this week the servers were gradually slowing down:</p>
<div id="attachment_142" class="wp-caption aligncenter" style="width: 424px"><img class="size-full wp-image-142 " title="Last 7 Days" src="http://blog.daveverwer.com/wp-content/uploads/2009/11/Last-7-Days.png" alt="Balloons! server response times over the last 7 days" width="414" height="164" /><p class="wp-caption-text">Balloons! server response times over the last 7 days</p></div>
<p>The advantage of being at the end of a cellular data connection is that even with response times occasionally going over 1000ms! it never got bad enough to notice while using the application.</p>
<p>Anyway, I deployed some optimisations to the server today and am very happy with the results.</p>
<div id="attachment_143" class="wp-caption aligncenter" style="width: 427px"><img class="size-full wp-image-143 " title="Last 6 Hours" src="http://blog.daveverwer.com/wp-content/uploads/2009/11/Last-6-Hours.png" alt="Balloons! server response over the last 6 hours" width="417" height="165" /><p class="wp-caption-text">Balloons! server response times over the last 6 hours</p></div>
<p>That should keep us going for a while!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/optimisations-to-the-balloons-servers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Moderation Problem?</title>
		<link>http://blog.daveverwer.com/iphone-development/the-moderation-problem/</link>
		<comments>http://blog.daveverwer.com/iphone-development/the-moderation-problem/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 16:38:16 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[balloons]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[moderation]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=119</guid>
		<description><![CDATA[During the development of Balloons! I would tell people about the idea and they would occasionally come back with &#8220;But what about abuse? Isn&#8217;t it going to be filled up with porn/spam/etc&#8230; within a few days?&#8221;. We also got the similar concerns when reviews started appearing, in fact the first comment on the TUAW review [...]]]></description>
			<content:encoded><![CDATA[<p>During the development of <a href="http://balloonsapp.com">Balloons!</a> I would tell people about the idea and they would occasionally come back with &#8220;But what about abuse? Isn&#8217;t it going to be filled up with porn/spam/etc&#8230; within a few days?&#8221;. We also got the similar concerns when reviews started appearing, in fact the first comment on the <a href="http://www.tuaw.com/2009/11/08/balloons-sending-out-a-mystery-message-on-your-iphone/">TUAW review</a> was:</p>
<blockquote><p>How long until porn ruins it?</p></blockquote>
<p>With the immediate follow up being:</p>
<blockquote><p>Or spam?</p></blockquote>
<p>So, we are now one week in to being live on the app store and with over 11,000 balloons launched I thought I would give an update on what has happened on this subject. The good news is that so far it has not been the huge problem that people predicted. In total, about 1.2% of all balloons have been reported and we ended up popping about 0.5% of all balloons and virtually all of them have been spam rather than inappropriate content.</p>
<h2>Why isn&#8217;t it full of porn?</h2>
<p>I believe that it is at least partly because of the design decision to only allow photos taken with the onboard camera to be attached to a balloon rather than images from the library. This has frustrated some users but I believe it was the right decision to make. Mainly because we wanted the photos to be taken in the here and now while you were launching a balloon, but also because of this issue.</p>
<p>So, no problems then?</p>
<p>I wouldn&#8217;t go that far but it is not an unmanageable problem so far but even so it has certainly been the subject of many conversations here in Shiny HQ this week. Sure enough even before we came out of beta we had our first spam balloon which was kinda depressing with it being from a beta tester. After launch, we continued to get a few spam balloons here and there but nothing really serious.</p>
<h2>The spammers arrive.</h2>
<p><img class="size-large wp-image-120  alignright" title="Reporting a balloon" src="http://blog.daveverwer.com/wp-content/uploads/2009/11/Picture-2-403x750.png" alt="Reporting a balloon in Balloons! for iPhone" width="226" height="420" /></p>
<p>The first problem we had was a couple of users who were just catching every balloon they could find, taking a picture of their spam web site and adding a link. This was our first serious problem and had the potential to easily ruin the service for the other 99.9% of our lovely users. What did we do? We decided that if someone has proven that their only use of the app is going to be for abuse and are repeatedly launching balloons with spam tags then we really have no option but to permanently ban their device from accessing the service. The iPhone is an expensive device and that is the only way to launch balloons at the moment, so banning a device should be very effective. This is absolutely a last resort but we felt it was the right decision to take to make the service sustainable. The bigger problem at the time was that we unfortunately did not have the ability to ban devices at the time so, it was time to get my head down and it was hastily implemented and deployed and the offending users banned.</p>
<p>On the subject of banning, we decided to make the server pretend that a balloon launched or re-launched by a banned user was successfully launched but just to drop the information before it gets written to the database. The alternative was to let the server return an error message to the user which would have only resulted in support queries and we would rather not waste time on people who choose to abuse the service. With all of that said, we have had to ban only three users so far so this kind of abuse is far from widespread.</p>
<p>So, banning was implemented for persistent abusers and moderation is in progress for everyone else. Everything is good, right?</p>
<p><img class="size-large wp-image-128 alignleft" title="Reporting a balloon prompt" src="http://blog.daveverwer.com/wp-content/uploads/2009/11/Picture-3-403x750.png" alt="Reporting a balloon in Balloons! for iPhone" width="226" height="420" /></p>
<h2>One bad apple spoils the bunch?</h2>
<p>Unfortunately there was another small problem with our moderation system. Because we were doing moderation at the level of an entire balloon rather than an individual tag, people could completely ruin an entire balloon with just one inappropriate tag. This causes the original launcher of the balloon to be confused as to why their completely innocent balloon has been reported for seemingly no reason and it was just plain sad when an amazing balloon was ruined by an idiot attaching a spam link as the last tag.</p>
<p>So over the last couple of days, I have implemented a new moderation system on our back end that allows individual tags to be removed as well as entire balloons and so we have a much more granular choice of whether to pop or re-launch a balloon. So, if all goes well with final testing we will have a new moderation system by the end of the day. At this point, we will re-moderate all of the flagged balloons so that we can re-launch those balloons that were ruined by a single bad tag.</p>
<p>So banning is implemented, moderation is now finely grained. That&#8217;s it now, right?</p>
<h2>False positives.</h2>
<p>Not quite! We also have some balloons being reported for seemingly no reason with no spam or inappropriate content to be found. Why? Well sometimes users are not personally happy with the content that they submitted (either location, text or photo) at the time when they launched a balloon and so they report their own balloon, simply to take it out of the sky. This is absolutely reasonable but not something we thought would happen. The problem is that it is incredibly hard for us to tell a balloon that has been accidentally reported from one that has been reported for something like this.</p>
<p>The solution to this one is not quite as simple as the others unfortunately and to really solve it in a satisfactory way we need to give people the ability to write us a little comment when they report a balloon. We are going to try and push out a new version of the client ASAP that asks for a reason when reporting a balloon allowing people to explain the problem with a balloon and solve this one too.</p>
<h2>Summary</h2>
<p>This ended up being a long post so here is the TLDR.</p>
<ul>
<li>The decision to not allow users to attach photos from their library seems to be sound.</li>
<li>Spam is the biggest moderation problem so far and we have received almost no inappropriate content at all.</li>
<li>Farming the moderation out to the users by letting them flag balloons for moderation is working well.</li>
<li>The effort required to moderate the system at the moment is very manageable (a few minutes a day).</li>
<li>Banning users is a last resort, but we do occasionally have to do it.</li>
<li>We should have thought more about how our moderation system would work before we launched.</li>
<li>We are going to be pushing out a maintenance release of the balloons client that asks for a reason for reporting a balloon.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/the-moderation-problem/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Building a reliable back end for Balloons!</title>
		<link>http://blog.daveverwer.com/iphone-development/building-a-reliable-back-end-for-balloons/</link>
		<comments>http://blog.daveverwer.com/iphone-development/building-a-reliable-back-end-for-balloons/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 08:00:49 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[balloons]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[reliability]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=109</guid>
		<description><![CDATA[So I have spent the last few months building our new iPhone app, Balloons!
Obviously it needs a back end web service to move all of the balloons around the skies and host all of the attached messages. The back end is (predictably) written in Ruby on Rails and we just finished moving the hosting for it to [...]]]></description>
			<content:encoded><![CDATA[<p>So I have spent the last few months building our new iPhone app, <a href="http://balloonsapp.com">Balloons!</a></p>
<p><a href="http://balloonsapp.com"></a>Obviously it needs a back end web service to move all of the balloons around the skies and host all of the attached messages. The back end is (predictably) written in Ruby on Rails and we just finished moving the hosting for it to new <a href="http://brightbox.co.uk">Brightbox</a>[2] VPS&#8217;s ready for the launch. When we do go live, server reliability and the ability to scale is pretty important, after all we are hoping it will be successful and for every copy (including the free app) downloaded, our servers get hit a little harder.</p>
<p>Now I don&#8217;t have a huge amount of experience building high availability sites but a few years ago in a different life (working with .net &amp; Windows[1]) I was working on a project which needed to be extremely reliable and also was expecting a large user load on day one. This meant building a reliable database cluster and load balanced web servers. With help we did it, and it worked, but it was <em>incredibly</em> expensive and complicated. It took months of planning and weeks of work to build and deploy and left me with a healthy fear of doing anything like it again.</p>
<p>So it was a very pleasant surprise this week that when I started looking at load balancing for the Balloons! servers and found out that not only was it really cheap (£19/mo) but that it only took about 10 minutes to set up. Combine that with the use of the Brightbox MySQL cluster rather than a locally hosted DB server and with a few simple tweaks to our <a href="http://capify.org">Capistrano</a> deployment scripts I was able to have a good level of reliability for our back end for a trivial amount of extra cost (I halved the size of our VPS, but doubled the number of machines so the cost and capacity was roughly the same) and effort.</p>
<p>So yesterday Brightbox had some <a href="http://status.brightbox.co.uk/2009/10/san3-problem/">pretty major downtime</a> with a SAN failing in what seems to be a fairly epic way. Luckily it didn&#8217;t affect any of my servers but if it had, Balloons! would not have been unavailable for more than a few seconds because we chose to load balance and Brightbox (very sensibly) offered to put our virtual servers on different host machines and also different SAN&#8217;s.</p>
<p>A quick look at twitter showed that people are naturally <a href="http://search.twitter.com/search?q=brightbox">pretty upset</a> about such a large amount of downtime and some people were talking about moving hosting providers. That is of course their prerogative but moving to another hosting provider is no protection against disasters like this because stuff like this happens to <em>every hosting provider</em> from time to time and as I understand it, it was not due to anything other than bad luck with several disks failing at the same time.</p>
<p>The point I am trying to make is that if your site is important enough for you to lose money/reputation from it being unavailable for more than a few minutes then building an amount of reliability in is <strong>your responsibility </strong>as no single server is ever going to be 100% reliable on its own, no matter how good the hosting provider. The cost and complexity of doing it these days should make it an easy decision to make.</p>
<p>Now let&#8217;s just hope we sell enough copies Balloons! to really put it to the test :)</p>
<ol>
<li>This is not a rant about Windows and I am sure it is much easier to load balance stuff and build a SQL Server cluster than it was then. I would imagine the cost is still a few bands up from how we have done it for Balloons! though.</li>
<li><strong>In the interest of disclosure, most of the team at Brightbox are friends of mine and so take this with the appropriate amount of bias although it was not written with any intentionally.</strong></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/building-a-reliable-back-end-for-balloons/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>iPhone Game Scoreboard using Core Animation</title>
		<link>http://blog.daveverwer.com/iphone-development/iphone-game-scoreboard-using-core-animation/</link>
		<comments>http://blog.daveverwer.com/iphone-development/iphone-game-scoreboard-using-core-animation/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 12:51:23 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[Cocoa Short]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[cabasicanimation]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[cocoa-touch]]></category>
		<category><![CDATA[core animation]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=73</guid>
		<description><![CDATA[I have been helping out recently with a project running between UCLAN and Lancaster University which involves two teams of students working together to create a couple of iPhone games.
Last week one of the teams raised a question about how to create a rolling score board and we worked through a couple of ideas with [...]]]></description>
			<content:encoded><![CDATA[<p>I have been helping out recently with a project running between <a href="http://www.uclan.ac.uk/">UCLAN</a> and <a href="http://www.lancs.ac.uk/">Lancaster University</a> which involves two teams of students working together to create a couple of iPhone games.</p>
<p>Last week one of the teams raised a question about how to create a rolling score board and we worked through a couple of ideas with some sample code but did not implement it fully. The idea stuck in my mind all week though and so in a little free time this morning I felt inspired to knock something together around it and this is what dropped out of Xcode at the end of it.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/1Xfapl0pa94&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/1Xfapl0pa94&amp;hl=en&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>It has been implemented as a simple CALayer subclass that takes care of all of the management of the internal layers and animations and exposes a very simple interface to set the score value.</p>
<p>The images must be named 0.png through 9.png and included in the resources bundle but as long as you do that it should cope with any sized images as long as they are all the same size. The code can be found <a href="http://github.com/daveverwer/SDScoreBoard">on github</a>.</p>
<p><strong>UPDATE:</strong> Thanks to <a href="http://johnmckerrell.com/">John McKerrell</a> for the suggestion that to give a little more realism, digits should transition in from the bottom coming from a lower number and in from the top from a higher number. This needed a bit of a hack around the 0/9 boundary but I think the outcome is pretty good. This is how it looks.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/kXvYgoL1Gbo&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/kXvYgoL1Gbo&amp;hl=en&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>This was also a nice break from writing code on large projects, I have been really slacking on writing any code that isn&#8217;t going into a shipping codebase recently and so this was a very refreshing little break from the grind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/iphone-game-scoreboard-using-core-animation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Interesting business model on the iPhone App Store</title>
		<link>http://blog.daveverwer.com/iphone-development/interesting-business-model-on-the-iphone-app-store/</link>
		<comments>http://blog.daveverwer.com/iphone-development/interesting-business-model-on-the-iphone-app-store/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 10:16:29 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[business model]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=49</guid>
		<description><![CDATA[
A friend recommended that I try out Live Poker by Zynga this weekend, the game is a really nice implementation of online Texas Hold-Em Poker, complete with friend codes so you can play with friends etc, very nice but not worthy of a blog post in itself.
What is worthy of the post is the business model [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.daveverwer.com/wp-content/uploads/2009/02/livepokerbyzynga.png"><img class="size-medium wp-image-50 alignright" title="Live Poker by Zynga" src="http://blog.daveverwer.com/wp-content/uploads/2009/02/livepokerbyzynga-250x85.png" alt="Live Poker by Zynga" width="250" height="85" /></a></p>
<p>A friend recommended that I try out <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=295913419&amp;mt=8">Live Poker</a> by <a href="http://zynga.com/">Zynga</a> this weekend, the game is a really nice implementation of online Texas Hold-Em Poker, complete with friend codes so you can play with friends etc, very nice but not worthy of a blog post in itself.</p>
<p>What is worthy of the post is the business model that they are using, when you search for Liver Poker by Zynga on the iTunes Store this you get 6 hits ranging from free to £35. As far as I can tell you get the same exact game, the price just determines how much (play) money you start with and how much extra you get for free each week.</p>
<p>What a great idea&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/interesting-business-model-on-the-iphone-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build an iPhone app in 20 minutes &#8211; Source Code</title>
		<link>http://blog.daveverwer.com/iphone-development/build-an-iphone-app-in-20-minutes-source-code/</link>
		<comments>http://blog.daveverwer.com/iphone-development/build-an-iphone-app-in-20-minutes-source-code/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 10:39:41 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[barcamp leeds]]></category>
		<category><![CDATA[cocoa-touch]]></category>
		<category><![CDATA[geekup]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[nsmanchester]]></category>
		<category><![CDATA[nwmug]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=38</guid>
		<description><![CDATA[
Back at BarCamp Leeds many months ago I gave my first iPhone talk and I decided to attempt to write a native iPhone app in 20 minutes. I really wanted to talk about iPhone development but I also wanted to let people know that it is not hard to get started so I really needed [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-36" title="iPhone Test App from BarCamp" src="http://blog.daveverwer.com/wp-content/uploads/2009/02/barcamp-test-app-134x250.png" alt="iPhone Test App from BarCamp" width="134" height="250" /></p>
<p>Back at <a href="http://barcampleeds.com/">BarCamp Leeds</a> many months ago I gave my first iPhone talk and I decided to attempt to write a native iPhone app in 20 minutes. I really wanted to talk about iPhone development but I also wanted to let people know that it is not hard to get started so I really needed to be able to do &#8220;New Project&#8221; at the start of the session and with the exception of some copy/paste for the XML fetching code to show the end to end process of building a simple app. Anyway the session went pretty well and I have given it a few other places now like <a href="http://nsmanchester.com">NSManchester</a>, <a href="http://geekup.org">GeekUp Liverpool</a> and <a href="http://www.nwmug.co.uk">NWMUG</a>.</p>
<p>Anyway I never posted the source for it as I said I would many times and yesterday <a href="http://twitter.com/hereinthehive/status/1176245016">@hereinthehive asked for it</a>, so here it is.</p>
<p>Bear in mind this is the result of a 20 minute coding demo primarily designed to demonstrate the absolute basics of a table view application to people who had never been exposed to Objective C or iPhone development so the structure of the application is intentionally simplified and even the default cell optimisation code has been removed to keep the example simple.</p>
<p>With that said, have at it.</p>
<p><a href="http://blog.daveverwer.com/wp-content/uploads/2009/02/buildaniphoneappin20minutes.zip">Build an iPhone app in 20 minutes &#8211; Source Code</a> (This code is released under a MIT license).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/build-an-iphone-app-in-20-minutes-source-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>iPhone Screen Design Template PDF</title>
		<link>http://blog.daveverwer.com/iphone-development/iphone-screen-design-template-pdf/</link>
		<comments>http://blog.daveverwer.com/iphone-development/iphone-screen-design-template-pdf/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 14:45:06 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=27</guid>
		<description><![CDATA[This is something that I find useful when designing iPhone projects and so I thought I would share it with you all! Print a few copies of this PDF out and draw screen designs all over them, it is approximately the same physical size as the phone itself and includes plenty of whitespace around the [...]]]></description>
			<content:encoded><![CDATA[<p>This is something that I find useful when designing iPhone projects and so I thought I would share it with you all! Print a few copies of this PDF out and draw screen designs all over them, it is approximately the same physical size as the phone itself and includes plenty of whitespace around the edges for notes</p>
<p><a rel="attachment wp-att-28" href="http://blog.daveverwer.com/iphone-development/iphone-screen-design-template-pdf/attachment/iphone-template-screenshot/"><img class="aligncenter size-large wp-image-28" title="iPhone Screen Design Template" src="http://blog.daveverwer.com/wp-content/uploads/2009/01/iphone-template-screenshot-750x586.png" alt="iPhone Screen Design Template" width="525" height="410" /></a></p>
<p>Download: <a href="http://blog.daveverwer.com/wp-content/uploads/2009/01/iphone-screen-template.pdf">iPhone Screen Design Template</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/iphone-screen-design-template-pdf/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cocoa Short: UIScrollView quick tip</title>
		<link>http://blog.daveverwer.com/iphone-development/cocoa-short-uiscrollview-quick-tip/</link>
		<comments>http://blog.daveverwer.com/iphone-development/cocoa-short-uiscrollview-quick-tip/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 12:25:37 +0000</pubDate>
		<dc:creator>Dave Verwer</dc:creator>
				<category><![CDATA[Cocoa Short]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[cocoa-touch]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[quick tip]]></category>
		<category><![CDATA[uiscrollview]]></category>

		<guid isPermaLink="false">http://blog.daveverwer.com/?p=22</guid>
		<description><![CDATA[Just a quick iPhone development tip this morning, blogged because I found overcomplicated solutions when I googled it when what I actually wanted to do was really simple.
If you have a UIScrollView containing controls which need to respond to swipe/drag touches themselves rather than scroll the container then just set delayContentTouches to NO. Once this [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick iPhone development tip this morning, blogged because I found overcomplicated solutions when I googled it when what I actually wanted to do was really simple.</p>
<p>If you have a UIScrollView containing controls which need to respond to swipe/drag touches themselves rather than scroll the container then just set delayContentTouches to NO. Once this is done the default behaviour is then to immediately pass touches into any UIControl contained within the scroll view instead of scrolling.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.daveverwer.com/iphone-development/cocoa-short-uiscrollview-quick-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
