<?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>Phil Hassey</title>
	<atom:link href="http://www.philhassey.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.philhassey.com/blog</link>
	<description>game dev blog</description>
	<lastBuildDate>Fri, 03 Feb 2012 00:13:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>How to create and play IVF / VP8 / WebM / libvpx video in OpenGL</title>
		<link>http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/</link>
		<comments>http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 23:50:59 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=1014</guid>
		<description><![CDATA[Disclaimer: this tutorial covers how to render IVF / VP8 / libvpx video in an OpenGL libSDL / SDL window. IVF video only includes video, not audio. For game developers, it&#8217;s trivial to play audio via their own audio system. So you&#8217;ll have two files per movie &#8220;movie.ivf&#8221; and &#8220;movie.ogg&#8221; or whatever. As an exercise [...]]]></description>
			<content:encoded><![CDATA[<p><em>Disclaimer: this tutorial covers how to render IVF / VP8 / libvpx video in an OpenGL libSDL / SDL window.  IVF video only includes video, not audio.  For game developers, it&#8217;s trivial to play audio via their own audio system.  So you&#8217;ll have two files per movie &#8220;movie.ivf&#8221; and &#8220;movie.ogg&#8221; or whatever.  As an exercise to the reader, you could easily jam both into a single file if you really wanted to.</em></p>
<p><strong>The Problem We&#8217;re Trying To Solve</strong></p>
<p>So you&#8217;re an indie game developer and you want to show a clip of video in your commercial cross-platform (PC/Mac/Linux/other?) game!  Obviously you want a patent-free open source unrestricted license to do it.</p>
<p><strong>Wait, can&#8217;t I go commercial?</strong></p>
<p>Better than that, you could just use the built-in codecs on a platform!  I&#8217;d suggest this if you are targeting a single platform, iPhone / iOS for example.</p>
<p>Otherwise, you&#8217;ll be using <a href="http://www.radgametools.com/bnkmain.htm">Bink</a>, a commercial solution at $8500 / platform.  I emailed about their &#8220;indie licenses&#8221; and never heard back.</p>
<p><strong>The Open Source Options I didn&#8217;t like much</strong></p>
<p>Here&#8217;s what we have for patent free open source codecs .. and their various problems.</p>
<p><a href="http://theora.org/">Xiph Theora</a> &#8211; Probably the best known codec.  To get it working you have to have libogg, libvorbis, and libtheora all built for your target platforms.  To me, that seemed like a lot to ask.  Also, the libtheora API is a MONSTER.  <a href="http://icculus.org/theoraplay/">playtheora</a> is a SDL example (similar to this one) that covers some of that ugliness, so I&#8217;d recommend checking that out if you want to use theora.</p>
<p><a href="http://diracvideo.org/">Dirac / Schroedinger</a> &#8211; the BBC funded codec.  I couldn&#8217;t get this one to build.  It doesn&#8217;t seem to be all that popular.</p>
<p><a href="http://en.wikipedia.org/wiki/Motion_JPEG">Motion Jpeg</a> &#8211; This isn&#8217;t so much of a codec as an idea.  Make your own movie file with a ton of .jpg&#8217;s in it.  I tried this.  The files get really huge really fast.  I wouldn&#8217;t recommend this.</p>
<p><a href="http://www.openjpeg.org/">Motion JPEG 2000</a> &#8211; This implementation was also pretty confusing.  I couldn&#8217;t find where to start.  And, yeah, this isn&#8217;t all that popular either.</p>
<p><strong>libvpx .. why I chose it</strong></p>
<p><a href="http://www.webmproject.org/code/">WebM / libvpx</a> &#8211; Backed by google this is a new contendor on the block.  The thing that sold me was the <a href="http://www.webmproject.org/tools/vp8-sdk/example__simple__decoder.html">sample encoder</a> which was pretty simple.  It also depends on nothing.  Also, building it on OS X and Linux was trivial.  Also they offer a pre-built Windows binary.  Also, they just had their 1.0.0 release a few days ago.</p>
<p>So, yeah, having a supported, up and coming, easy to build codec was key to me.</p>
<p><strong>How to encode for IVF / libvpx</strong></p>
<p>Since it&#8217;s a new codec, not much supports it right now.  I used a fresh build of ffmpeg under linux that I built with this configure command:</p>
<pre>./configure --enable-encoders --enable-libvpx</pre>
<p>Then I was able to use ffmpeg to encode ivf files pretty easily:</p>
<pre>ffmpeg -i Untitled.mov -vcodec libvpx -b 1000k -s 1024x512 movie.ivf</pre>
<p>Note: we&#8217;re not dealing with WebM files.  WebM files are container files that also contain audio.  Again, you&#8217;ll have to store your audio separately, or create your own container file, or figure out what WebM is on your own time.</p>
<p><strong>So .. what&#8217;s the bottom line?  Do we get any code?</strong></p>
<p>Yes!  I created a libSDL player that plays back the video at max speed possible and it converts the YUV data to RGB data and loads it as a texture.  Here are the functions I provide:</p>
<pre>void playvpx_init(Vpxdata *data, const char *_fname) ;</pre>
<p>Just init your Vpxdata with a filename &#8220;movie.ivf&#8221; .. It&#8217;ll try and get libvpx up and running for you.</p>
<pre>bool playvpx_loop(Vpxdata *data) ;</pre>
<p>Call this once per frame to have it decode a frame of video.  It will return false once it has run out of frames.  If you want to mess with the libvpx YUV data yourself, it&#8217;s data->img.  See the playvpx.cpp source or the libvpx example above to see what that structure provides.  It&#8217;s pretty simple.</p>
<pre>int playvpx_get_texture(Vpxdata *data) ;</pre>
<p>Call this once per frame to have it convert the YUV data to RGB and upload the texture to OpenGL.  It will return 0 on failure or a OpenGL texture ID on success.  I convert on your CPU, so it&#8217;s not super fast, but it should work fine on modern computers.  If anyone cares to provide a Shader version of this function, or provide a SIMD / MMX / SSE version .. well, that would be faster!</p>
<pre>void playvpx_deinit(Vpxdata *data) ;</pre>
<p>Call this function when you&#8217;re done to cleanup.</p>
<p><strong>Conclusion and Source Code</strong></p>
<p>Okay, here&#8217;s <a href='http://www.philhassey.com/blog/wp-content/uploads/2012/02/playvpx.zip'>playvpx</a> for you to check out.  It&#8217;s a C-style API, but I&#8217;m sure I use some minor C++ in there.  Probably wouldn&#8217;t be hard to make it C-only if you require C for your project.</p>
<p>Oh, and I include the libvpx binary for Windows, OS X, and Linux.  So you may not have to build it for any platforms!</p>
<p>The code is licensed under the libvpx BSD-style license.  My code here is a gutted version of their sample_decoder.c, so .. that seems to make most sense to me.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/&amp;title=How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+How+to+create+and+play+IVF+%2F+VP8+%2F+WebM+%2F+libvpx+video+in+OpenGL+@+http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 2011 Re-Cap: Five games in one year!</title>
		<link>http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/</link>
		<comments>http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 22:23:47 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=1004</guid>
		<description><![CDATA[Ahoy there! 2011 was a great year! Here&#8217;s a re-cap of the games I released and some final thoughts on &#8216;em! First of was The Invasion of the Blobs which was my Ludum Dare #20 entry! I had a blast making this game as part of the jam. I used this game as a way [...]]]></description>
			<content:encoded><![CDATA[<p>Ahoy there!  2011 was a great year!  Here&#8217;s a re-cap of the games I released and some final thoughts on &#8216;em!</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2012/01/promo-1024x500.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2012/01/promo-1024x500-300x146.png" alt="" title="promo-1024x500" width="300" height="146" class="aligncenter size-medium wp-image-1005" /></a></p>
<p>First of was <a href='http://www.galcon.com/iblobs/'>The Invasion of the Blobs</a> which was my Ludum Dare #20 entry!  I had a blast making this game as part of the jam.  I used this game as a way to work on my ports to Android, iOS, PC, Mac, Linux and distributed the game on all of them.  I however, had to pull the Android version after a few hours because it was having so many technical problems.  This caused me to decide to put further Android dev on hold for 18 months, until the platform has matured enough for me to be able to easily port things to it without going totally crazy.  I&#8217;ll probably use <a href="http://www.madewithmarmalade.com/">Marmalade</a> for future ports to Android.  iBLOBS got around 25k downloads between the Mac and iOS app stores.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2012/01/VLCScreenSnapz001.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2012/01/VLCScreenSnapz001-200x300.png" alt="" title="VLCScreenSnapz001" width="200" height="300" class="aligncenter size-medium wp-image-1006" /></a></p>
<p>Next up was <a href='http://www.tablemountainchurch.com/building/exterminator'>The Exterminator</a> which was a game I made along with several teens to raise money to build a community outreach center.  This project was a total blast, we spent two days working together on it, and then I spent a few more days spit shining the menus and adding in basic Game Center support.  The release got a bit of coverage on 148Apps but no other iOS press that I know of.  However, it did get some great local coverage in Colorado!  This was pretty great, because, really, the game sold only a couple hundred copies, barely enough to cover the iOS dev fees.  But it help raise awareness in Colorado and got at least one sizable non-profit interested in contributing a significant amount of money to the project (this is still in their approval process, so we don&#8217;t know for sure if that will come through or not.)  Whatever the case was, it was a fun project, and it was a great excuse for me to buy an iCade <img src='http://www.philhassey.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2012/01/default-960.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2012/01/default-960-300x200.png" alt="" title="default-960" width="300" height="200" class="aligncenter size-medium wp-image-1007" /></a></p>
<p>And then there was <a href='http://www.galcon.com/chickon/'>Chickon</a> which was most definitely the most silly project I went into this year.  I intended for this project to take a couple of weeks but it ended up taking about 6 months .. but I&#8217;d hardly call it really hard-serious work type 6 months.  In the end, Chickon was an amazing PR success.  touchArcade gave it 3 or 4 articles featuring all the goofy stunt videos I produced and reviewed it.  The game has not seen a ton of in-app-purchases, but people who have played it have enjoyed it.  I think this project was something of a success just for keeping my name in the ear of the press.  At least they know I still exist!  And I&#8217;m still doing something!  I also tried a ton of different Galcon gameplay features in this game to see what worked and what didn&#8217;t.  Since I am thinking about doing another Galcon sequel in the future, this game helped me eliminated about half a dozen really bad ideas <img src='http://www.philhassey.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2012/01/anathema_beta_1.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2012/01/anathema_beta_1-266x300.png" alt="" title="anathema_beta_1" width="266" height="300" class="aligncenter size-medium wp-image-1008" /></a></p>
<p>And then I worked on my new game Anathema Mines.  The beta mentioned above was a very limited private beta, though I may expand it more in the future.  This game&#8217;s is explained a bit more <a href='http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/'>here</a> where I go into how it&#8217;s kind of the 4th rebirth of a game concept I&#8217;ve been working on for about six years now.  I&#8217;m really happy with how it&#8217;s coming together and the next 2-3 months are going to be dedicated to finishing this game and giving it the best launch possible!</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2012/01/2-shot0.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2012/01/2-shot0-300x225.png" alt="" title="2-shot0" width="300" height="225" class="aligncenter size-medium wp-image-1009" /></a></p>
<p>Lastly, I wrapped up the year having a blast creating <a href='http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2'>Nobody Wants Kitty</a> for Ludum Dare #22.  The game is about a cat who nobody loves because it&#8217;s so ugly.  The cat has to upgrade to being pretty over the course of the game.  I had a fun time making this and I got to learn a bit more about creating flash games, which is really one of the best ways to prototype anything now-a-days!</p>
<p>Anyway, it&#8217;s been a great year!  Thanks a ton for playing my games!</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/&amp;title=The+2011+Re-Cap%3A+Five+games+in+one+year%21" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+The+2011+Re-Cap%3A+Five+games+in+one+year%21+@+http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2012/01/06/the-2011-re-cap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Chickon for iOS has Arrived!  Galcon with Chickens and Robots!</title>
		<link>http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/</link>
		<comments>http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 04:00:37 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.galcon.com/news/?p=355</guid>
		<description><![CDATA[Okay folks .. it&#8217;s been a while. We spent the earlier part of this year moving to a new house and getting settled in, and somewhere in there I had this crazy idea &#8220;haha wouldn&#8217;t it be funny if I made a version of Galcon with chickens in it cause everyone plays all those poultry [...]]]></description>
			<content:encoded><![CDATA[<p>Okay folks .. it&#8217;s been a while.  We spent the earlier part of this year moving to a new house and getting settled in, and somewhere in there I had this crazy idea &#8220;haha wouldn&#8217;t it be funny if I made a version of Galcon with chickens in it cause everyone plays all those poultry oriented games, haha, I&#8217;ll make it in a week.&#8221;  Yeah, well, SIX MONTHS later, it&#8217;s finally here!</p>
<p><center><a href="http://itunes.apple.com/us/app/chickon/id472764637?ls=1&amp;mt=8"><img src="http://www.galcon.com/news/wp-content/uploads/2011/11/chickon_450x200-play_now.png" alt="" title="Chickon" width="450" height="200" style="border:1px solid black;padding:10px;margin:10px;" /></a></center></p>
<p>Chickon is a free-to-play romp of total silliness in the land of Chickontopia!  Check out the totally sweet trailer &#8211; it&#8217;s worth seeing even if you don&#8217;t have an iOS device:</p>
<p><a href="http://www.youtube.com/watch?v=CTgPI2PK8RE">http://www.youtube.com/watch?v=CTgPI2PK8RE</a></p>
<p>And then get the free app for your iPod touch, iPhone, or iPad.</p>
<p><a href="http://itunes.apple.com/us/app/chickon/id472764637?ls=1&#038;mt=8">http://itunes.apple.com/us/app/chickon/id472764637?ls=1&#038;mt=8</a></p>
<p>Hope you get a good laugh out of it!  Be sure to tell your friends and poultry loving acquaintances.</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/&amp;title=Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Chickon+for+iOS+has+Arrived!++Galcon+with+Chickens+and+Robots!+@+http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.galcon.com/news/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.galcon.com/news/2011/11/16/chickon-for-ios-has-arrived-galcon-with-chickens-and-robots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is this a safe pattern for auto-registration?</title>
		<link>http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/</link>
		<comments>http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:50:01 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=994</guid>
		<description><![CDATA[Hey, I&#8217;m trying to have various components in my game pre-register themselves upon startup of the game. I&#8217;m using this pattern: Here&#8217;s my registration code that is in one .cpp file. The register_init() function is available from anywhere: std::vector &#038;get_init() { static std::vector goods; return goods; } bool register_init(Init *v) { get_init().push_back(v); return true; } [...]]]></description>
			<content:encoded><![CDATA[<p>Hey,</p>
<p>I&#8217;m trying to have various components in my game pre-register themselves upon startup of the game.  I&#8217;m using this pattern:</p>
<p>Here&#8217;s my registration code that is in one .cpp file.  The register_init() function is available from anywhere:</p>
<pre>
std::vector<Init*> &#038;get_init() {
    static std::vector<Init*> goods;
    return goods;
}
bool register_init(Init *v) {
    get_init().push_back(v);
    return true;
}
</pre>
<p>Here&#8217;s how I auto-register some init code from some other file by calling register init to initialize a variable:</p>
<pre>
int _is_levedit_init = register_init(new LeveditInit());
</pre>
<p>Is there some case where this would NOT work or is somehow a really bad idea?  Or is there some pattern that is better to use?</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/&amp;title=Is+this+a+safe+pattern+for+auto-registration%3F" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Is+this+a+safe+pattern+for+auto-registration%3F+@+http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/10/26/is-this-a-safe-pattern-for-auto-registration/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Freemium &#8211; my take: design for maximum enjoyment first</title>
		<link>http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/</link>
		<comments>http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 04:21:23 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[biz]]></category>
		<category><![CDATA[gamedev]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=991</guid>
		<description><![CDATA[There have been a ton of posts about game design and ethics lately relating to freemium. Here&#8217;s my take. I don&#8217;t really think there is ethics so much in if you make a freemium game with random drops or checklists or whatever or not. I think those are game elements that some users REALLY LOVE [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a <a href="http://www.gamasutra.com/blogs/AdamSaltsman/20111018/8685/Contrivance_and_Extortion_InApp_Purchases__Microtransactions.php">ton</a> <a href="http://www.gamasutra.com/blogs/AdamSaltsman/20111020/8703/Contrivance_and_Extortion_II_Clarifications_Feedback__Suggestions.php">of</a> <a href="http://struct.ca/2011/in-defence-of-freemium/">posts</a> about game design and ethics lately relating to freemium.</p>
<p>Here&#8217;s my take.  I don&#8217;t really think there is ethics so much in if you make a freemium game with random drops or checklists or whatever or not.  I think those are game elements that some users REALLY LOVE and some users REALLY HATE.  Some users HATE in app purchases, some users LOVE them.  I think many players find random events to be FUN!  Randomness is a big thing that helps make a game addictive and people like addictive games!</p>
<p>Here&#8217;s my &#8220;big picture&#8221; view of where game design gets unethical &#8211; when the designer&#8217;s time is spent too much on designing for maximum monetization as opposed to player enjoyment.  I think the purpose of games is for people to have FUN!  If you as a designer are working mostly to ensure that, you&#8217;re doing your job.  If you are spending most of your time tweaking your game for maximum REVENUE then you are doing it wrong.</p>
<p>So, yeah, I think the reason Zynga gets a bad rap is because there&#8217;s rumors that they have huge departments of psychologists and number crunchers working non-stop to increase the addictiveness and monetization of their games.  With no concern for the player beyond what they can do for the bottom line.  That&#8217;s not very positive.  They have lost their way as game developers and that&#8217;s unfortunate.</p>
<p>On the other hand there are tons of indie developers out there who are working hard to make FUN games that use checklists, random drops, grinding, and in-app-purchases as game elements who are focussing on making FUN free-to-play games.  I think these guys are doing it right.  </p>
<p>I think freemium is right now the brave new world for indies.  I think some indies are doing great stuff with free-to-play and I think some are scrambling too hard to MONETIZE.  I think it&#8217;s a time where some people are screwing up and making bad games, but I think it&#8217;s okay to make mistakes right now.  I think right now is the opportunity for people to find out what free-to-play can offer the player.   I read every single blog post and article I can find about free-to-play game design because I want to do my best as a game designer to make my stabs into this new territory to be good ones.</p>
<p><strong>And again: as a game designer be sure to keep your focus on making games that people genuinely enjoy. </strong></p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/&amp;title=Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Freemium+%26%238211%3B+my+take%3A+design+for+maximum+enjoyment+first+@+http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/10/21/freemium-my-take-design-for-maximum-enjoyment-first/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tough decisions, interesting beginnings</title>
		<link>http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/</link>
		<comments>http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 05:06:45 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[crazy]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=976</guid>
		<description><![CDATA[So, if you&#8217;ve been following this blog for a while (like a year) you might recall last year&#8217;s &#8220;October Challenge&#8221; game called &#8220;Stealth Target&#8221; that I attempted to release as a paid beta game, which I then issued refunds for and then made a few vague efforts to revive and .. well .. I mean, [...]]]></description>
			<content:encoded><![CDATA[<p>So, if you&#8217;ve been following this blog for a while (like a year) you might recall last year&#8217;s &#8220;October Challenge&#8221; game called &#8220;Stealth Target&#8221; that I attempted to release as a paid beta game, which I then issued refunds for and then made a few vague efforts to revive and .. well ..</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/09/stealthtargetScreenSnapz001.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/09/stealthtargetScreenSnapz001-300x231.png" alt="" title="stealthtargetScreenSnapz001" width="300" height="231" class="aligncenter size-medium wp-image-977" /></a></p>
<p>I mean, it looks, sort of okay.  Those dynamic lights are neat stuff, man I learned a ton about OpenGL and tricks doing this game.  The trouble is, since it is a 3D rendered game, when you stick it next to shots of (links to any recent Unity game on touchArcade left as an exercise to the reader) it looks awful.  &#8220;Why is this dev even bothering?&#8221; Coupled with the fact that the interface was a bit kludgy using a mouse and at least twice as bad using touch, it just wasn&#8217;t a great fit for, well, anything sadly.  To finish the project it would take me at least 3-4 more months of serious work and I don&#8217;t expect that I would be happy with the final result, so I had to kill it.</p>
<p>.. But I had written some keen code.  And I still liked the game concept.  So I thought about it a bit more.  I had made another game a ton of years ago called <a href="http://www.imitationpickles.org/ld486/">Escape from Anathema Mines</a>.  It was a similar &#8220;dodge the guards&#8221; type of game with an overhead visual aesthetic that actually worked pretty well.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/09/final-level1.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/09/final-level1.png" alt="" title="final-level1" width="320" height="240" class="aligncenter size-full wp-image-978" /></a></p>
<p>I thought it over and decided that with some of the GL experience I had acquired while working on Stealth Target, and by going in the direction of the overhead view that worked so well in that game, I could re-mix the two games together and create something new and exciting and simple enough that I could get it done.  After just a few days of work I&#8217;ve already got a OpenGL / HD playable of Escape from Anathema Mines.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/09/anathema2ScreenSnapz002.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/09/anathema2ScreenSnapz002-290x300.png" alt="" title="anathema2ScreenSnapz002" width="290" height="300" class="aligncenter size-medium wp-image-979" /></a></p>
<p>I&#8217;m going to extend the game with some of the bomb concepts from Stealth Target and maybe top it off with some other wacky features.  This game is much easier to work on for the primary reason: it isn&#8217;t in 3D.  Not being in 3D just makes rendering and working on it so much easier.  One thing that also helped getting this up and running quickly was being able to reuse a ton of the code / algorithms that I had already written for Stealth Target.</p>
<p>I also been learning about the Object Component model over the past year and I&#8217;m using this game as my first attempt at it.  I went to a talk at 360iDev (<a href="http://www.36peas.com/blog/2011/9/15/lightweight-component-architectures-and-object-composition-i.html">check it out</a>) and got a very nice overview of the model.  But the BIGGEST point he made that worked for me was when he said, &#8220;It doesn&#8217;t really matter how you do this, as long as it works for you.  You won&#8217;t make a perfect model, so just make one that gets the job done and don&#8217;t feel bad about it.&#8221;  Which was really liberating for me, I&#8217;ve always felt it was supposed to be some perfectly coded model, and being allowed by someone to just &#8220;get the job done&#8221; really helped.  I was able to use the things I learned in his talk to help my code without having to do weird stuff that wouldn&#8217;t work with my style of coding.  I have everything in a single structure named Entity.  Really simple, but the thing I also do is have a bunch of bools like &#8220;has_light&#8221; &#8220;has_position&#8221; and then more members like &#8220;position_x, position_y, light_a&#8221; and so on.  That way everything is always there (very C) but it&#8217;s component oriented (I can test if a component is there and take action on it if it is.)</p>
<p>Here&#8217;s the level editor, which is actually is very similar to the one for Stealth Target, only .. since the game is actually an overhead game, it was a ton easier to get working.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/09/anathema2ScreenSnapz001.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/09/anathema2ScreenSnapz001-290x300.png" alt="" title="anathema2ScreenSnapz001" width="290" height="300" class="aligncenter size-medium wp-image-980" /></a></p>
<p>So, yeah.  I&#8217;m enjoying doing this project.  It&#8217;s actually my &#8220;hobby project&#8221; which means I&#8217;m only allowing myself to work on it during off-hours.  I will probably attempt to monetize it somehow, but my main goal with this project is to satisfy my need to get these game ideas out the door and see how they come out.  I&#8217;ve got my main work hours dedicated to some of the other commercial projects I&#8217;m working on this year.</p>
<p>Which I should talk about more soon.  A lot more.</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/&amp;title=Tough+decisions%2C+interesting+beginnings" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Tough+decisions%2C+interesting+beginnings+@+http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/09/28/tough-decisions-interesting-beginnings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh look a white orb</title>
		<link>http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/</link>
		<comments>http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 04:51:48 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[icade]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=973</guid>
		<description><![CDATA[Hey, I added white orbs. I wonder what use the game will have for those. In Star Trek:TOS, it&#8217;s accepted practice to beam down to the planet, get mad at the inhabitants and commit some sort of genocide. And then take their minerals. Hmmm. The tough bit with iCade dev is that I haven&#8217;t added [...]]]></description>
			<content:encoded><![CDATA[<p>Hey, I added white orbs.  I wonder what use the game will have for those.  In Star Trek:TOS, it&#8217;s accepted practice to beam down to the planet, get mad at the inhabitants and commit some sort of genocide.  And then take their minerals.  Hmmm.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/09/iOS-SimulatorScreenSnapz005.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/09/iOS-SimulatorScreenSnapz005.png" alt="" title="iOS SimulatorScreenSnapz005" width="466" height="616" class="aligncenter size-full wp-image-974" /></a></p>
<p>The tough bit with iCade dev is that I haven&#8217;t added touch controls to the game so moving my ship around in the sim (for screenshots) isn&#8217;t possible unless I pair my iCade with my Mac.  Which is a pain.  Maybe I should figure out how to take on-device screenshots.</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/&amp;title=Oh+look+a+white+orb" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Oh+look+a+white+orb+@+http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/09/01/oh-look-a-white-orb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Day 1: Random side-hobby game for iCade</title>
		<link>http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/</link>
		<comments>http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 04:30:23 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[icade]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=969</guid>
		<description><![CDATA[Hey, 90 minutes later, I have this, with working iCade controls to cruise the ship around the endless galaxy! Totally fun messing with a hobby game project! -Phil]]></description>
			<content:encoded><![CDATA[<p>Hey, 90 minutes later, I have this, with working iCade controls to cruise the ship around the endless galaxy!</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/08/iOS-SimulatorScreenSnapz004.png"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/08/iOS-SimulatorScreenSnapz004.png" alt="" title="iOS SimulatorScreenSnapz004" width="466" height="616" class="aligncenter size-full wp-image-970" /></a></p>
<p>Totally fun messing with a hobby game project!</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/&amp;title=Day+1%3A+Random+side-hobby+game+for+iCade" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Day+1%3A+Random+side-hobby+game+for+iCade+@+http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/08/31/day-1-random-side-hobby-game-for-icade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From 0 to iCade in 3 hours 16 minutes</title>
		<link>http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/</link>
		<comments>http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 18:00:05 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=963</guid>
		<description><![CDATA[Hey, 1. The Arrival and Assembly (30 min) So my iCade arrived at 2:58pm today. It took me 30 minutes to unbox the parts and put the whole thing together with a hex-screwdriver. The completed item looks 110% win!!! There are tons of detailed unboxing guides on the internet, so I&#8217;ll just give you a [...]]]></description>
			<content:encoded><![CDATA[<p>Hey,</p>
<p><strong>1. The Arrival and Assembly (30 min)</strong></p>
<p>So my iCade arrived at 2:58pm today.  It took me 30 minutes to unbox the parts and put the whole thing together with a hex-screwdriver.  The completed item looks 110% win!!!  There are tons of detailed unboxing guides on the internet, so I&#8217;ll just give you a shot of mine:</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/08/IMG_7852.jpg"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/08/IMG_7852-300x225.jpg" alt="" title="IMG_7852" width="300" height="225" class="aligncenter size-medium wp-image-964" /></a></p>
<p><Strong>2. Testing it out with GAMES (30 min)</strong></p>
<p>I had to check it out with a real game, so I went to the <a href="http://toucharcade.com/2011/08/18/hey-new-icade-owners-heres-a-list-of-icade-supported-compatible-games/">definitive touchArcade post on the subject</a>.  I realized I already had several of those titles on my iPad, so I dove right in with <a href="http://toucharcade.com/link/http://itunes.apple.com/us/app/velocispider/id433011745?mt=8">Velocispider</a> which was totally awesome on the iCade!!  I can only hope more devs add support!  30 minutes elapsed &#8220;fun time&#8221;.</p>
<p><strong>3. Downloading the iCade SDK (1 min)</strong></p>
<p>The &#8220;official&#8221; SDK is sort of useless, it&#8217;s just a manual telling us what we already knew.  The great bit is there is an Open Source SDK (MIT) that is <a href='https://github.com/scarnie/iCade-iOS'>ready to go!</a> I downloaded and unzipped that and began adding it into my project.  1 minute.</p>
<p><strong>4. Being stupid (2 hours)</strong></p>
<p>I then proceeded to brilliantly comment out the two lines of code that make the iCade code work.  And then spend 2 hours realizing it.  /facepalm</p>
<p><strong>5. The iCade Integration (15 min)</strong></p>
<p>Once I fixed my error, the integration took approximately 15 minutes.  The bulk of the code was just a switch statement that converted the iCade SDK events to my own internal framework events.  I already had keyboard support, so it was no trouble at all.</p>
<pre>
- (void)setState:(BOOL)state forButton:(iCadeState)button {
    int v = 0; unsigned char c;
    switch(button) {
        case iCadeButtonA: v=KEY_a; c='a'; break;
        case iCadeButtonB: v=KEY_b; c='b'; break;
        case iCadeButtonC: v=KEY_c; c='c'; break;
        case iCadeButtonD: v=KEY_d; c='d'; break;
        case iCadeButtonE: v=KEY_e; c='e'; break;
        case iCadeButtonF: v=KEY_f; c='f'; break;
        case iCadeButtonG: v=KEY_g; c='g'; break;
        case iCadeButtonH: v=KEY_h; c='h'; break;
        case iCadeJoystickUp: v=KEY_UP; c=0; break;
        case iCadeJoystickRight: v=KEY_RIGHT; c=0; break;
        case iCadeJoystickDown: v=KEY_DOWN; c=0; break;
        case iCadeJoystickLeft: v=KEY_LEFT; c=0; break;
    }
    Event e;
    e.v = v;
    e.c = c;
    e.type = state?EVT_KEYDOWN:EVT_KEYUP;
    game_event(e);
}
</pre>
<p>I also had to go ahead and add Universal (iPad) support to the game, this didn&#8217;t take too long as my framework has smarts for doing that pretty easily.</p>
<p><Strong>6. In conclusion &#8230;</strong></p>
<p>I&#8217;ve submitted my update to the App Store, so hopefully it&#8217;ll be in your hands within a week.</p>
<p><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/08/IMG_7880.jpg"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/08/IMG_7880-e1314727093914-225x300.jpg" alt="" title="IMG_7880" width="225" height="300" class="aligncenter size-medium wp-image-966" /></a></p>
<p>In conclusion, <strong>integrating iCade into your iOS game only takes 15 minutes</strong>, unless you&#8217;re as stupid as I am.  I encourage all devs who have appropriate games to do this so that I can play more games on my iCade!!!  Go GO GO GO!</p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/&amp;title=From+0+to+iCade+in+3+hours+16+minutes" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+From+0+to+iCade+in+3+hours+16+minutes+@+http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/08/30/from-0-to-icade-in-3-hours-16-minutes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scaling custom WordPress: the ludumdare.com lessons learned</title>
		<link>http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/</link>
		<comments>http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 16:46:55 +0000</pubDate>
		<dc:creator>philhassey</dc:creator>
				<category><![CDATA[crazy]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.philhassey.com/blog/?p=951</guid>
		<description><![CDATA[Hey, I&#8217;m the dev / admin behind the Ludum Dare 48 hour game developer competition. This past weekend our competition grew from 350 contestants to 600 contestants thanks to @notch. Not only that but his live video blog of the event and twittering drove a TON of people over to the site just to spectate [...]]]></description>
			<content:encoded><![CDATA[<p>Hey,</p>
<p>I&#8217;m the dev / admin behind the Ludum Dare 48 hour game developer competition.  This past weekend our competition grew from 350 contestants to 600 contestants thanks to <a href="http://twitter.com/notch">@notch</a>.  Not only that but his live video blog of the event and twittering drove a TON of people over to the site just to spectate the event.  This led to a ton of press coverage on.  In short, 48 hour game development BECAME a spectator sport.  Which is totally not something I had anticipated &#8211; here&#8217;s a completely inaccurate motivational poster I created a few years ago:</p>
<p><center><a href="http://www.philhassey.com/blog/wp-content/uploads/2011/08/sport.jpg"><img src="http://www.philhassey.com/blog/wp-content/uploads/2011/08/sport-300x263.jpg" alt="" title="sport" width="300" height="263" class="aligncenter size-medium wp-image-952" /></a></center></p>
<p>Anyway, that wasn&#8217;t the case, and <a href="http://www.ludumdare.com/compo/2011/08/21/we-made-it-and-we-found-the-bug/">this is what happened</a>.  <em>(Short version: $8 shared hosting server burned to the ground and we got kicked off and had to find greener pastures, and then do a ton of optimizing.)</em>  I want to give a shout out to <a href="http://www.toonormal.com/">Mike Kasprzak</a> for keeping the masses at bay and helping to endlessly test the site and hold my hand while I worked through all the mess.  Here&#8217;s the lessons learned:</p>
<p><strong>1. Profile site database use.</strong></p>
<p>You can find out what queries are killing your site by using the <a href="http://wordpress.org/extend/plugins/wpdb-profiling/">WPDB Profiling</a> plugin.  This was a HUGE deal for us.  We were able to see exactly what queries were destroying us.  Without any debate this is the #1 tip I have, because if you don&#8217;t know what the problem is you can&#8217;t fix it!</p>
<p><strong>2. Remove inessential plugins.</strong></p>
<p>Not all WordPress plugins are developed with massing scaling in mind.  We found by disabling all the plugins except for the essential plugins we were able to go much faster.  Not only that but even efficient plugins add a CPU drain to the site just by having their PHP files loaded.</p>
<p><strong>3. Clear out the sidebar.</strong></p>
<p>Sidebar stuff can also be a huge drain.  We just plain removed the sidebar for the competition.  We&#8217;ll probably re-enable some of it eventually, but be careful, even some of the WordPress issued functions have some monster queries in them.</p>
<p><strong>4. Optimize slow 3rd party plugins.</strong></p>
<p>One plugin we wanted to keep using <a href="http://www.my-tapestry.com/i-like-this/">I like this</a> is really cool, but it uses a table that is not indexed and it adds an extra query per-post on the front page of your site.  I indexed the columns in the custom table it had as well as removed the unnecessary per-post query it was issuing.  Now we can use that cool plugin without any notable slowdown.  Here&#8217;s my <a href="https://my-tapestry.tenderapp.com/discussions/suggestions/10-i-like-this-performance-improvements">bug report / patch</a>.</p>
<p><strong>5. Add in custom caching to 3rd party plugins.</strong></p>
<p>Our custom competition plugin was really un-optimzed.  I had written it to just work, and it worked great under low load.  I used a number of techniques to reduce the load: </p>
<p>- I added in my own mini profiler so I could track how often certain functions were being called and how long they were taking.  This helped me track down the issues to an even finer detail than I was able to with the WPDB Profiling plugin.</p>
<p>- I was using the get_userdata($uid) function from WordPress as many as 600 times on a page, so I cached that data with the records in my database so I would almost never have to call it, that was probably the biggest issue and was causing 600 database queries on those pages.  </p>
<p>- I added paging to the various views so that instead of seeing all 600 entries at once, you only see 24 at a time, this really reduced load in terms of queries and images being loaded off the site in one request.  </p>
<p>- I also added some page caching for the few pages that calculate results, this is largely a CPU save because generating those pages is pretty intensive</p>
<p><strong>6.  Be smart with 3rd party caching solutions.</strong></p>
<p>Pre-made caching solutions for WordPress can&#8217;t save you if your site is largely driven by custom plugins and signed-in users using web apps (like our compo system), in fact those caching plugins actually can slow down the site quite a bit.  They are designed more for static content blogs (which is more typical for blogs) and probably work great for those, but for us they didn&#8217;t work so hot.</p>
<p><strong>&#8230; Conclusion.</strong></p>
<p>I&#8217;m now quite happy with how the site is performing.  We&#8217;ve reduced the load on our new VPS from 70 or so (meaning that we had about 30x as many processes wanting to use the CPU as the server could handle) down to about 0.5 which means we&#8217;ve got room to handle spikes again.  I hope <img src='http://www.philhassey.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>-Phil</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<div class="d">
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/&amp;title=Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Scaling+custom+WordPress%3A+the+ludumdare.com+lessons+learned+@+http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.philhassey.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.philhassey.com/blog/2011/08/25/scaling-custom-wordpress-the-ludumdare-com-lessons-learned/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

