<?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>Acorn Heroes &#187; Uncategorized</title>
	<atom:link href="http://acornheroes.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://acornheroes.com</link>
	<description>iPhone Development from the Ends of the Earth</description>
	<lastBuildDate>Sun, 21 Aug 2011 03:53:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Thoughts for my younger self</title>
		<link>http://acornheroes.com/2011/04/thoughts-for-my-younger-self/</link>
		<comments>http://acornheroes.com/2011/04/thoughts-for-my-younger-self/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 21:43:51 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[idevblogaday]]></category>
		<category><![CDATA[Self indulgent nostalgia]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=725</guid>
		<description><![CDATA[At a mobile devs meetup this week, it became apparent that I&#8217;m now one of the old guard.  I&#8217;ve always been someone who enjoys passing on useful information to others.  Teaching a game design course for University students also makes me realise how much they have to learn, how much I take for granted after [...]]]></description>
			<content:encoded><![CDATA[<p>At a mobile devs meetup this week, it became apparent that I&#8217;m now one of the old guard.  I&#8217;ve always been someone who enjoys passing on useful information to others.  Teaching a game design course for University students also makes me realise how much they have to learn, how much I take for granted after 15 or so years in the industry.</p>
<p><img class="alignright" style="margin: 10px;" src="http://acornheroes.com/wp-content/uploads/2011/04/guard-advance-l.jpg" border="0" alt="Guard advance l" width="300" height="193" /></p>
<p>If I had the chance, what would I tell my younger self?  What has worked out well for me and what would I do differently?  Here&#8217;s a few of the things I came up with.  What would you add?</p>
<h2>Failure is not the thing to be afraid of</h2>
<p>Some of the world&#8217;s <a href="http://www.businessweek.com/magazine/content/06_06/b3970001.htm">most successful people</a> have had massive, public failures &#8211; but it hasn&#8217;t stopped them.  Yes failure is painful and embarrassing.  But it&#8217;s also a great teacher, making us wiser and stronger.  Perhaps more importantly though, if we never fail, then we&#8217;re not taking any risks.  Tackling challenges that may be too much for you are where we get a chance to excel and surprise ourself and others.</p>
<h2>Always have a backup plan</h2>
<p>I have spent many years working in live television, covering sports events.  It was not uncommon to be adding new features to the software on site the night before the event.  I&#8217;ve arrived in foreign countries with broken computers.  I&#8217;ve turned up at events and lost a day because no one knew we were coming and so we had no space to work, no power to work with.  I&#8217;ve had machines die at 2am the day before we&#8217;re live.  This teaches you a few of things:</p>
<ol>
<li>Some deadlines simply can not move, so you must be adaptable.</li>
<li>Always have a backup option.  You may not get as much done as you hoped.</li>
<li>Worry early so that you don&#8217;t have to panic late.</li>
</ol>
<p>Plan your work to try and deliver in an iterative fashion.  Planning to deliver everything at once, on deadline is just plain stupid.  Working without <a href="http://hginit.com/">source control</a> is just plain stupid.</p>
<h2>There is no better time than now</h2>
<p>It&#8217;s taken me far too many years to realise that my dream is to work for myself, on the projects I want to work on.  I&#8217;ve learnt a lot working for other people and I enjoy being part of a team.  But after a while the urge to show the world what you can do, to craft something that&#8217;s all yours becomes very strong.</p>
<p>My point is this.  It&#8217;s hard to do that once you have a mortgage and a family (and a dog, cat, rabbit, guinea pigs, chickens and goldfish).  When you&#8217;re young you have a great opportunity to move quickly and try things out.  Also, we live in an age where it&#8217;s never been easier to get your product in front of customers &#8211; make the most of it.</p>
<h2>You will be wrong, often</h2>
<p>There&#8217;s no shame in being wrong.  It happens.  Accept that it happens and move on.  Keep your ego in check and always keep in mind that the people you work with probably aren&#8217;t stupid either.   Often arguments are caused because two people are so caught up in their own opinion that they forget they&#8217;re on the same team, trying to achieve the same goal.</p>
<p>Mistakes will happen and you don&#8217;t always make the best choices.  Learn to prototype ideas quickly.  Learn to leave a buffer in a project plan to handle the unexpected.  Tackle the biggest challenges first to avoid surprises.</p>
<h2>Always learn more</h2>
<p>Learn new languages, frameworks and techniques.  Read <a href="http://idevblogaday.com/">iDevBlogADay</a> and <a href="http://altdevblogaday.org/">altDevBlogADay</a>!  Challenge yourself not to stagnate.  If you find yourself criticising another platform, maybe it&#8217;s time to dive in and learn more about it.  One thing I can promise you is that the work environment and tools you use today won&#8217;t be the ones you use in 10 or 20 years.  Don&#8217;t end up a dinosaur.</p>
<h2>There are difficult or petty people in this world &#8211; deal with it</h2>
<p>Working with others is hard.  It&#8217;s at least as hard as the technical challenges you deal with, so put some effort into being good at it.  Working so-operatively is a skill you can develop.  Some people are harder to work with than others.  You might be <em><strong>That Guy</strong></em>.  Learn how to communicate clearly and without letting your emotions get in the way.  Work on solutions, not problems.  Be polite and always treat people with respect &#8211; especially the difficult ones.  You never know whio you&#8217;ll be working with or depending on in a couple of years.  Life is funny that way.</p>
<p>There&#8217;s no silver bullet here, it&#8217;s hard work but the effort will pay off, I promise you.</p>
<h2>You are so much more than a coder</h2>
<p>This is the big one.  Don&#8217;t believe that you&#8217;re just the tech guy.  Get out of your ivory tower and learn about what your colleagues do.  Know enough about Photoshop to take images from artists and get them into a usable form.  Understand how artists build models so that you can teach them (in their own terms) what can and can&#8217;t be done inside a game engine.  Talk to designers about flow and layout, and why moving that text two pixels to the left is so important.</p>
<p>Understand enough about business to know the effort that goes into giving you a pay cheque each fortnight.  Practice estimating tasks and tracking time spent to better understand what you can or can&#8217;t achieve in a given time frame.  Write documentation or reports to share knowledge with clients or customers.  Write a blog!  Speak in public.</p>
<p>Not only will this make you a better person, but others will enjoy working with you and helping you out when needed.  And when you make that transition to management, or all-in-one Indie developer, you&#8217;ll be much better prepared.</p>
<h2>And one more thing&#8230;</h2>
<p>Enjoy yourself.  Work hard and treat difficult problems as a fun challenge to crack.  Only boring people get bored.</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2011/04/thoughts-for-my-younger-self/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers helping Quake Victims</title>
		<link>http://acornheroes.com/2011/02/developers-helping-quake-victims/</link>
		<comments>http://acornheroes.com/2011/02/developers-helping-quake-victims/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 19:36:03 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Earthquake relief]]></category>
		<category><![CDATA[EQNZ]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=695</guid>
		<description><![CDATA[New Zealand was rocked this week by a massive earthquake right under Christchurch, one of our biggest cities.  Hundreds are dead or missing, the CBD is flattened and many suburbs have been flooded through liquifaction.  Acorn Heroes is proud to be part of an initiative to help raise money for relief efforts. It&#8217;s simple.  All [...]]]></description>
			<content:encoded><![CDATA[<p>New Zealand was rocked this week by a massive earthquake right under Christchurch, one of our biggest cities.  Hundreds are dead or missing, the CBD is flattened and many suburbs have been flooded through <a href="http://en.wikipedia.org/wiki/Soil_liquefaction">liquifaction</a>.  Acorn Heroes is proud to be part of an initiative to help raise money for relief efforts.</p>
<p>It&#8217;s simple.  All proceeds for the next week from the following apps (iOS and Mac) will go directly to the Red Cross relief effort.  For more details, go to <a href="http://www.appappeal.co.nz/">http://www.appappeal.co.nz/</a>.  There are some great apps here, and you&#8217;ll be directly helping the thousands of people affected by this disaster.</p>
<p>Apps involved in the appeal include:</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fchopper-2%252Fid363912842%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Chopper 2</a> &#8211; Majic Jungle Software – Universal App + Mac OS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ftop-dog-farmyard-adventures%252Fid367309144%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Top Dog: Farmyard Adventures</a> - Flightless – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscarlett-spark-life-scarlett%252Fid397685110%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Scarlet and the Spark of Life: Scarlett Adventures Episode 1</a> - Launching Pad Games  – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsheepish%252Fid300636948%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sheepish</a> –Pixelthis –  iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fminimonos-flight%252Fid388136679%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">MiniMonos Flight</a> –Minimonos – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Facorn-money%252Fid386530964%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Acorn Money</a> –Acorn Heroes – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbird-strike-gold-edition%252Fid349263261%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Bird Strike</a> –PikPok – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fancient-frog-hd%252Fid364187960%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Ancient Frog HD</a> –Ancient Workshop  - iPad</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ftwenty-chinups%252Fid306789203%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Twenty Chinups</a> –SoftwareX – iOS</p>
<p><a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-waves-pro%252Fid311413629%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker Waves</a>, <a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-rain-pro%252Fid306576863%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker Rain</a>, <a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-storms-pro%252Fid308969801%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker Storms</a>, <a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-streams-pro%252Fid314339387%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker Streams</a>, <a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-all-in-one%252Fid401073457%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker All in One</a> and <a href="http://click.linksynergy.com/fs-bin/stat?id=tJcjmvCiUp8&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsleepmaker-wildlife-pro%252Fid319033926%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Sleepmaker Wildlife</a> -SoftwareX – iOS</p>
<p><a href="http://www.dejal.com/simon/">Dejal Simon</a>, <a href="http://www.dejal.com/timeout/">Dejal Time Out</a>, <a href="http://www.dejal.com/caboodle/">Dejal Caboodle</a>, <a href="http://www.dejal.com/blogassist/">Dejal BlogAssist</a> &#8211; Dejal &#8211; Mac OS</p>
<p>Please help us spread the word by telling people about <a href="http://www.appappeal.co.nz/">http://www.appappeal.co.nz/</a>.</p>
<p>I&#8217;d also like to offer a vote of thanks to Jos from <a href="http://www.pikpokgames.com/">PikPok games</a> and all the others who have been involved in putting this together so quickly.  And to everyone affected in Christchurch, we&#8217;d like to say <em><a href="http://en.wikipedia.org/wiki/Kia_kaha">Kia Kaha</a></em>, we are all with you in this horrible time.</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2011/02/developers-helping-quake-victims/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed Version Control &#8211; Getting Started</title>
		<link>http://acornheroes.com/2010/07/distributed-version-control-getting-started/</link>
		<comments>http://acornheroes.com/2010/07/distributed-version-control-getting-started/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 20:40:28 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[idevblogaday]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=419</guid>
		<description><![CDATA[It&#8217;s not just for academic hippies There have been a lot of people talking up Distributed Version Control Systems (DVCS). Until recently, I&#8217;d assumed that it was the same people who have been talking up Linux for the last 15+ years. Don&#8217;t get me started on them. It seemed the principal argument used by many [...]]]></description>
			<content:encoded><![CDATA[<h3>It&#8217;s not just for academic hippies</h3>
<p>There have been a lot of people talking up Distributed Version Control Systems (DVCS).  Until recently, I&#8217;d assumed that it was the same people who have been talking up Linux for the last 15+ years.  Don&#8217;t get me started on <em>them</em>.  It seemed the principal argument used by many people was &#8216;<em>everyone has their own repository&#8217;</em>.  To me, that sounded like a recipe for disaster &#8211; I&#8217;m far happier with the concept of a central, <strong>authoritative</strong> repository.</p>
<p>So I was surprised when <a href="http://joelonsoftware.com">Joel Spolsky</a> came out in favour of Mercurial (or Hg), a DVCS.  Joel&#8217;s a fairly level headed, mainstream kind of person &#8211; what was he doing fraternizing with the Linux-loving hippies and beatniks?  After reading his Hg introduction, I realized I was in danger of becoming a convert too.  When you&#8217;re done here, you may want to go over to <a href="http://hginit.com">hginit.com</a> &#8211; you won&#8217;t find a better introduction to Hg or distributed version control in general.</p>
<h3>What&#8217;s so good about it?</h3>
<p>So, it turns out that DVCS is a viable alternative to regular, vanilla flavored version control. And by that I mean Subversion or CVS, the systems I&#8217;m most familiar with.  There&#8217;s a few main points that convinced me to give Hg a try:</p>
<ul>
<li>It&#8217;s not too dissimilar to &#8216;normal&#8217; source control, meaning it&#8217;s fairly simple to make the transition (add files, update, commit, revert etc work basically the same way)</li>
<li>Rather than worrying about &#8216;everyone&#8217; having a repository, the key thing is that you have <em>your own</em> local repository that&#8217;s just for you.  So you get the safety net of frequent check-ins without having to worry about &#8216;breaking the build&#8217;.</li>
<li>Branching is something a lot of people strenuously avoid with Subversion, because the tools just aren&#8217;t set up to handle it easily.  Because of the way Hg tracks changes, merging branches is a simpler and more reliable process.</li>
<li>Mercurial still supports the idea of a central repository, and in fact handles multiple staging servers (development, stable, release etc) fairly well.</li>
</ul>
<p>I&#8217;ve been using Hg on a couple of projects for a while now, and I like it.  The big wins for me are how simple it is to set up a new repository and how convenient it is to have a local repository for frequent check-ins.</p>
<h3>Getting started</h3>
<p>So what&#8217;s needed to get started?  Well the good news is that all the tools you need are freely available and well made.  First off, you really should read <a href="http://hginit.com">Joel&#8217;s introduction</a>.  After that, the command line tools are available <a href="http://mercurial.selenic.com">from here</a>.  Using the command line is a great way to learn a version control system and really understand what&#8217;s going on &#8211; and it&#8217;s surprisingly simple.</p>
<p>Sooner or later though, you&#8217;ll want to look at some sort of GUI though to speed the process up.  <a href="http://twitter.com/@bunnyhero">@bunnyhero</a> put me onto <a href="http://jasonfharris.com/machg">MacHg</a> which I&#8217;ve been using for a week or so now it&#8217;s been excellent.  There&#8217;s a <a href="http://jasonfharris.com/machg/screencasts/screencasts.html">good screencast</a> that covers the basic features of MacHg and will get you up and running straight away.</p>
<p>You may think that not having your version control inside XCode is a pain, but in fact I think it&#8217;s a huge bonus to separate IDE and version control.  I&#8217;ve never seen source control handled properly inside an IDE (I&#8217;m thinking Visual Studio, Eclipse and XCode here).  Version control is about files and folders, and I don&#8217;t want the IDE thinking it know better than me how to apply version control to a project by making &#8216;assumptions&#8217; to try and streamline the process.</p>
<p>And finally, one of the strengths of version control is that it forces you to maintain backups of your code base.  And the best backup is an off site one.  Setting this up is a pain, right?  Actually no, as once again Joel comes to the party and makes this easy.  His company <a href="http://fogcreek.com">Fogcreek</a> offer remotely hosted project management, bug tracking and version control tools, including support for Hg (they call their Hg toolset <a href="http://www.fogcreek.com/Kiln">Kiln</a>).</p>
<p>Obviously this is service you pay for, right?  Yes.  <em>Unless</em> you are a student or small company (or in fact anyone who doesn&#8217;t need more than two active users), in which case it&#8217;s <em><strong><a href="http://www.fogcreek.com/FogBugz/StudentAndStartup.html?isl=197759"><span style="color: #ff0000;">F</span><span style="color: #ffff00;">R</span><span style="color: #00ff00;">E</span><span style="color: #0000ff;">E</span></a></strong></em>.  Setup is trivial, and before you know it you can have a professional grade offsite Hg server of your very own.</p>
<p>While you&#8217;re at it, you also get their <a href="http://www.fogcreek.com/FogBugz">Fogbugz</a> tools as well, so simple bug tracking, scheduling, wiki, code review and customer support all come as part of the free package.  Nice.  I should point out I get nothing for recommending Fogcreek, I&#8217;m just a bit of a fanboy.</p>
<h3>Give it a go</h3>
<p>So there you are,  if you&#8217;re looking for an easy way to get into source control, or you&#8217;re sick of merging branches in Subversion, you might give Hg a go.  All the tools you need are freely available for a small scale team and the learning curve is not that steep.</p>
<p>One last detail &#8211;  I did have a little trouble getting MacHg to talk to Kiln .  The problem is that MacHg needs the URL to include your username and the repository URL, and separates them with an &#8216;@&#8217; symbol.  Kiln&#8217;s user names are typically your email address , so MacHg get&#8217;s a little confused when it sees something like:</p>
<pre>https://george.sealy@gmail.com@acornheroes.kilnhg.com/Repo/Repositories/Group/FaerieDev</pre>
<p>Fortunately, the solution is fairly straight forward, you can &#8216;escape&#8217; the &#8216;@&#8217; symbol in your user name like so:</p>
<pre>https://george.sealy%40gmail.com@acornheroes.kilnhg.com/Repo/Repositories/Group/FaerieDev</pre>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2010/07/distributed-version-control-getting-started/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Just a quick apology&#8230;</title>
		<link>http://acornheroes.com/2010/07/just-a-quick-apology/</link>
		<comments>http://acornheroes.com/2010/07/just-a-quick-apology/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 09:22:38 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=382</guid>
		<description><![CDATA[I often tell people that the first thing I say to my wife in the morning is &#8220;I&#8217;m sorry&#8221;.  When asked why, I just answer that there&#8217;s bound to be something I&#8217;ll be sorry for that day and I&#8217;m just building up some credit. I&#8217;ve been tinkering around with the site layout, and given the [...]]]></description>
			<content:encoded><![CDATA[<p>I often tell people that the first thing I say to my wife in the morning is &#8220;<em>I&#8217;m sorry&#8221;</em>.  When asked why, I just answer that there&#8217;s bound to be something I&#8217;ll be sorry for that day and I&#8217;m just building up some credit.</p>
<p>I&#8217;ve been tinkering around with the site layout, and given the WordPress interface, and my general lack of Web savvy, I&#8217;ve probably messed up something, so <em>&#8220;I&#8217;m sorry&#8221;</em>.  If you find any broken links or similar problems, please let me know and I&#8217;ll get them fixed up.</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2010/07/just-a-quick-apology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying Something New</title>
		<link>http://acornheroes.com/2010/06/trying-something-new/</link>
		<comments>http://acornheroes.com/2010/06/trying-something-new/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 13:09:19 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=356</guid>
		<description><![CDATA[This site has been quiet for too long.  That&#8217;s why I&#8217;ve got involved with the #iDevBlogADay initiative.  There&#8217;s a bunch of great indie developers contributing as part of a regular roster.  If you want to follow all of us just subscribe to this feed. Any good programmer is always looking for new tools and ideas [...]]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment--></p>
<p class="MsoNormal"><em>This site has been quiet for too long.  That&#8217;s why I&#8217;ve got involved with the </em><a href="http://twitter.com/#search?q=%23iDevBlogADay"><em>#iDevBlogADay</em></a><em> initiative.  There&#8217;s a bunch of great indie developers contributing as part of a regular roster.  If you want to follow all of us just subscribe to </em><em><a href="http://feeds.feedburner.com/idevblogaday ">this feed</a></em><em>. </em></p>
<p class="MsoNormal">Any good programmer is always looking for new tools and ideas to improve the code they write and to become more productive.<span> </span>For myself, fifteen years after I began coding professionally, this is truer than ever.</p>
<p class="MsoNormal">So when Noel Llopis started dropping odd comments on Twitter about <a href="http://twitter.com/SnappyTouch/status/15802889236">‘no classes’</a>, <a href="http://twitter.com/SnappyTouch/status/15800692962">‘plain old data structures’</a> and <a href="http://twitter.com/SnappyTouch/status/16175736591">&#8216;no singletons&#8217;</a> I was intrigued.<span> </span>How did this work?<span> </span>Where did this style come from?<span> </span>Did it lead to simple, effective code?<span> </span>Was it a style that would work for me?<span> </span>Is it a style that will work for you?</p>
<p class="MsoNormal">If you haven’t already read <a href="http://gamesfromwithin.com/the-always-evolving-coding-style">Noel’s article</a> from yesterday describing his current coding style, then go ahead and read it now.</p>
<p class="MsoNormal">Take your time, I’ll wait.</p>
<p class="MsoNormal">It’s definitely an unusual style, and flies in the face of ‘traditional’ wisdom.<span> </span>So what’s life like in a world without objects?  Pretty cool, actually.<span> </span>I’ve been experimenting with it for the last couple of weeks, and here are a few observations that might encourage you to give this style a go.</p>
<h3>The &#8216;Rules&#8217;</h3>
<p>It&#8217;s hard to change style so dramatically, so a few rules of thumb are useful to help keep on track.  This style is sufficiently different that it takes time to get your head around it.  Prepare to spend some time writing (and re-writing) your first code this way.</p>
<ul>
<li>No classes.</li>
<li>Use simple structs to store data / state information, making everything visible.</li>
<li>Avoid dynamic memory allocation and pointers in general.</li>
<li>Nothing is global &#8211; all data is passed as needed to functions that require it.</li>
<li>Functions have a single purpose &#8211; for a given set of input data, generate an output, avoiding any side effects.</li>
<li>Use TDD for everything.</li>
</ul>
<h3>TDD Becomes Much Easier</h3>
<p class="MsoNormal">Test Driven Development (TDD) has always appealed to me, but to be honest my history with TDD is a bit like my attempts to build a model railway – plenty of well intentioned starts but no completed projects.<span> </span>Sooner or later I’d always give up on TDD because it just didn’t fit the way I’m used to coding.</p>
<p class="MsoNormal">But in a world of simple data and functions with a single purpose, TDD comes into it’s own.<span> </span>The tests you write drive the code to be as simple as possible with none of the cruft that typically accumulates in class definitions.<span> </span>And constructing tests is simple – create some simple test data, pass it into a function and check the resulting outputs.<span> </span>All tests follow this simple formula, with not a single pesky mock object in sight.</p>
<h3>Lean Code And A Sense Of Progress</h3>
<p class="MsoNormal">The resulting code feels resistant to bloat.<span> </span>Nothing is hidden, and every function has a clear purpose with no unexpected side effects.<span> </span>Time will tell if this pattern persists as the code matures.  I’m constantly surprised by the way the code evolves down unexpected avenues.</p>
<p class="MsoNormal">Every test, every function has a purpose that is clearly defined.  This simplicity has a huge appeal. A test and the code that goes with it can be written fairly quickly, and each additional test provides visible progress.<span> </span></p>
<h3>Struct Is The New Interface</h3>
<p class="MsoNormal">I’m used to relying heavily on interfaces or abstract classes in my coding, and the lack of such an option concerned me somewhat.<span> </span>It still does – I miss the option to have a collection of ‘game objects’ and know that I can call <em>Update()</em> on all of them no matter what they are – Crates, Zombies or <a href="http://mysterycoconut.com/blog/2010/06/levels/">Flying Quesadillas</a>.</p>
<p class="MsoNormal">What did surprise me was that rather than accumulating everything into a single class, the data naturally falls into a collection of several parts more in keeping with the idea of <em>components</em> in an OO system (composition over inheritance).<span> </span>For example, when I was writing a leaf particle system the resulting code combined the following bits of data – a mesh, an array of (generic) particles, an array of leaf specific particle data and a free-list for deleting and creating particles from a statically allocated array.</p>
<p class="MsoNormal">This fragmentation may seem unfortunate, but in fact it&#8217;s a strength.<span> </span>The functions that deal with a mesh are applicable to all meshes, not just rendering particles.<span> </span>The free-list struct and functions can be used anywhere that elements in an array need to be frequently created and destroyed.  Where in an OO design you carry around an entire object to each method or function call, with this approach you only pass around the &#8216;part&#8217; of the object that is directly relevant.</p>
<h3>Coding Is Fun Again</h3>
<p class="MsoNormal">Ultimately this is the most important point for me.<span> </span>I’m enjoying coding this way.<span> </span>Progress is rapid, and through the use of unit testing, progress is very visible.  My free time for game programming is extremely limited, so the ability to write code in small, manageable chunks is a big win.  Refactoring can be undertaken with confidence, knowing that the unit tests and the basic structure of the code give some protection against unintended side effects.</p>
<p class="MsoNormal">This style won&#8217;t suit everyone, and it will absolutely terrify the <a href="http://www.joelonsoftware.com/articles/fog0000000018.html">Architecture Astronauts</a>, but if you&#8217;re interested then give it a go and let me know how you get on!</p>
<p class="MsoNormal">
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2010/06/trying-something-new/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Unleash the Goo!</title>
		<link>http://acornheroes.com/2010/01/unleash-the-goo/</link>
		<comments>http://acornheroes.com/2010/01/unleash-the-goo/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:25:05 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Goo!]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=308</guid>
		<description><![CDATA[After a delightfully short period of three days, our maiden iPhone app is available through iTunes (App Store link).  Goo! is a fun version of the Game of Life, by John Conway.  You create patterns of cells, and then watch as generations pass.  If a cell is too lonely, or is overcrowded, it will die [...]]]></description>
			<content:encoded><![CDATA[<p>After a delightfully short period of three days, our maiden iPhone app is available through <a href="http://itunes.com/apps/acornheroes/goo">iTunes</a> (App Store link).  <a href="http://acornheroes.com/?page_id=285">Goo!</a> is a fun version of the Game of Life, by John Conway.  You create patterns of cells, and then watch as generations pass.  If a cell is too lonely, or is overcrowded, it will die out.  If conditions are just right, new cells are born.</p>
<p>Although it&#8217;s a simple app, there&#8217;s plenty of depth in the Game of Life.  Some patterns will oscillate forever, or become stable.  Others will travel across the screen in a stately procession.  Yet other patterns will &#8216;fire&#8217; out new patterns.</p>
<p>So, <a href="http://itunes.com/apps/acornheroes/goo">give it a try today</a>, and help us take one more step towards living our dream!  To Infinity, and Beyond!</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2010/01/unleash-the-goo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merry Christmas to all</title>
		<link>http://acornheroes.com/2009/12/merry-christmas-to-all/</link>
		<comments>http://acornheroes.com/2009/12/merry-christmas-to-all/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 05:15:00 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=294</guid>
		<description><![CDATA[Sam and I would like to wish you all a Happy Christmas and a happier New Year.  If you&#8217;re in the Northern hemisphere, we hope you get a white Christmas.  If you&#8217;re in the South like us, we hope you enjoy plenty of sunshine, sea and barbecues! It&#8217;s been quiet here for a while, but [...]]]></description>
			<content:encoded><![CDATA[<p>Sam and I would like to wish you all a Happy Christmas and a happier New Year.  If you&#8217;re in the Northern hemisphere, we hope you get a white Christmas.  If you&#8217;re in the South like us, we hope you enjoy plenty of sunshine, sea and barbecues!</p>
<p>It&#8217;s been quiet here for a while, but I can assure you we&#8217;re busy.  This year has been a bit manic at times, but the good news is that we&#8217;re preparing to submit our first app to Apple early in January.  Next year we have big plans and even bigger dreams.</p>
<p>From us both, have a happy and safe holiday.</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2009/12/merry-christmas-to-all/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Waving, not drowning&#8230;</title>
		<link>http://acornheroes.com/2009/11/waving-not-drowning/</link>
		<comments>http://acornheroes.com/2009/11/waving-not-drowning/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 03:43:20 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google Wave]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=276</guid>
		<description><![CDATA[Hi everyone, I&#8217;ve recently managed to be invited to join Google Wave&#8217;s beta.  Probably the thing that hits most people when they first start is &#8216;what do I do now?&#8217;  The first thing you need is a useful contact list. To that end, I&#8217;m trying to put together a wave with as many iPhone developers [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone,</p>
<p>I&#8217;ve recently managed to be invited to join Google Wave&#8217;s beta.  Probably the thing that hits most people when they first start is &#8216;what do I do now?&#8217;  The first thing you need is a useful contact list.</p>
<p>To that end, I&#8217;m trying to put together a wave with as many iPhone developers on it as possible.  So, if you&#8217;re interested, and have a Wave account (or can scrounge one up), send me a wave (george.sealy &#8216;at&#8217; googlewave.com) and I&#8217;ll add you to the list&#8230;</p>
<p>Please pass this on to anyone you know who may be interested.  Thanks</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2009/11/waving-not-drowning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is this the best we can do?</title>
		<link>http://acornheroes.com/2009/11/is-this-the-best-we-can-do/</link>
		<comments>http://acornheroes.com/2009/11/is-this-the-best-we-can-do/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 20:37:43 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=269</guid>
		<description><![CDATA[Perhaps I expect too much? I was playing the demo of Torchlight the other day.  It&#8217;s a beautiful game &#8211; art and game play honed to near perfection.  So why after a couple of hours of playing did I feel hollow inside?  What was I doing?  Why?  Was this even fun?  I love this sort [...]]]></description>
			<content:encoded><![CDATA[<p>Perhaps I expect too much?</p>
<p>I was playing the demo of <a href="http://www.torchlightgame.com/">Torchlight</a> the other day.  It&#8217;s a beautiful game &#8211; art and game play honed to near perfection.  So why after a couple of hours of playing did I feel hollow inside?  What was I doing?  Why?  Was this even fun?  I love this sort of game &#8211; I lost vast quantities of time to Diablo, and enjoyed it.</p>
<p>So what&#8217;s the difference here?  Here I was, avidly collecting loot, leveling up and so on, flying through enemies with happy abandon.  I think that ultimately that&#8217;s all there was to it.  Fight / loot / fight / loot.  Where was my motivation and back story?  Where was the momentary pause to plan my attacks before diving through a door to tackle the nasty boss monster?  Half the time I didn&#8217;t even register that I was fighting a boss until I was picking over his corpse.  What level was I on?  What made this one stand out from all the others?</p>
<p>I&#8217;ve felt this way before, playing <a href="http://bunnibunni.com/">Bunni Bunni</a>, designed by Danc, who&#8217;s <a href="http://lostgarden.com/">blog</a> is an inspiration and well worth reading.  I found myself playing it to completion, but was left with nothing of value to take away from the experience.  It&#8217;s a carefully constructed task / reward structure, tuned to the point where conscious thought dissappears.  It&#8217;s akin to grind in MMO&#8217;s.  Don&#8217;t even get me started there.</p>
<p>When designing games, we talk about addiction as if it&#8217;s a good thing &#8211; the ultimate goal.  If that&#8217;s the best we can do, I need to find another hobby.  Fortunately, there&#8217;s still plenty of scope for story telling (<a href="http://dragonage.bioware.com/">Dragon Age</a>), exploration (<a href="http://jayisgames.com/cgdc6/?gameID=9">Small Worlds</a>) and deep strategy (<a href="http://www.galciv2.com/index.aspx">Galactic Civilisations II</a>) and simple beauty (<a href="http://braid-game.com/">Braid</a>, <a href="http://www.bit-blot.com/aquaria/">Aquaria</a>).</p>
<p>I guess what I&#8217;m saying is that with a family and work, my spare moments playing games are precious to me.  Playing a game &#8216;just to fill in time&#8217; is pointless.  I want to have an experience, one that I&#8217;ll reflect on later as worthwhile.  I really wanted to like Torchlight, but I just can&#8217;t.</p>
<p>Or is it just me?  Let me know what you think&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2009/11/is-this-the-best-we-can-do/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How many testers?</title>
		<link>http://acornheroes.com/2009/10/how-many-testers/</link>
		<comments>http://acornheroes.com/2009/10/how-many-testers/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 03:22:25 +0000</pubDate>
		<dc:creator>George</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://acornheroes.com/?p=266</guid>
		<description><![CDATA[A question popped up recently on the TouchArcade forums, about how many testers is the &#8216;best&#8217; number to have.  At first it seems like more is better, but in fact that&#8217;s not always the case. In terms of numbers, you&#8217;ll get diminishing returns on adding more testers. Say each tester finds on average 10 bugs [...]]]></description>
			<content:encoded><![CDATA[<p>A question popped up recently on the <a href="http://forums.toucharcade.com/">TouchArcade forums</a>, about how many testers is the &#8216;best&#8217; number to have.  At first it seems like more is better, but in fact that&#8217;s not always the case.</p>
<p>In terms of numbers, you&#8217;ll get diminishing returns on adding more testers. Say each tester finds on average 10 bugs / issues. With one tester, you&#8217;ve found 10 bugs. With two testers it may be, say, 15 bugs due to overlaps in what they find (i.e. they both report some of the same bugs). Three testers may find a total of 18 bugs and so on.</p>
<p>Very quickly you reach a point where your chances of getting something new from an additional tester become slim.  But it gets worse than that &#8211; you&#8217;re actually polluting your pool of fresh testers who have never played your game before.  These people are valuable, as they give you an insight into those vital, impression forming, first few moments a customer has with your product.</p>
<p>So small groups can be surprisingly effective. Start with a small group of, say, 5 testers. Get their feedback, make adjustments and then release an updated test version to a <em>new</em> set of five testers, <em>plus</em> the original group of testers.  The &#8216;fresh meat&#8217; will help you avoid tunnel vision, giving you the 50,000 ft view, while the repeat testers can give detailed feedback on particular features.</p>
<p>Repeat until you&#8217;re happy, or at least until you&#8217;re satisfied your product has reached the level of quality you&#8217;re aiming for.</p>
]]></content:encoded>
			<wfw:commentRss>http://acornheroes.com/2009/10/how-many-testers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

