<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>ShaunInman.com</title>
<link>http://www.shauninman.com/</link>
<description></description>
<copyright>Copyright 2001-2010 Shaun Inman</copyright>
<generator>Shaun Inman&#8217;s Bookend</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<lastBuildDate>Fri, 19 Mar 2010 05:43:37 GMT</lastBuildDate>

<item>
	<title>8-bit iPhone Game Development</title>
	<description><![CDATA[<p>A lot of people have been asking how I got to where I currently am with <a href="http://blog.mimeoverse.com/">Mimeo and the Kleptopus King</a>. Despite starting out with a very clear goal in mind (a pixelated, console-inspired game on the iPhone and iPod touch), there wasn&#8217;t an obvious path to that goal. This is a brief review of my circuitous journey.</p>

<p>First I had to get a handle on the core languages of C and Objective-C. Plain old C was relatively easy to  pick up with a PHP/JavaScript background though occasional Google searches (usually ending up on Stack Overflow) are still required to fill in the gaps in my knowledge. Aaron Hillegass&#8217; <a href="http://www.amazon.com/Cocoa-Programming-Mac-Third-ebook/dp/B00139XSRO/?tag=iamsooobuyingthis-20">Cocoa Programming for Mac OS X</a> was an excellent introduction to Objective-C and the Cocoa Framework (as well as Apple&#8217;s developer tools, Xcode and Interface Builder).</p>

<p>Simon Maurice wrote a number of articles that helped me get up to speed with OpenGL on the iPhone. Unfortunately, due to a conflict with his employer these articles have since been taken down. I wish I had had the foresight to archive a local copy.</p>

<p>Then I did an audit of various game engines to gain an understanding of how a game works from a high-level architectural point of view as well as the low-level solutions to problems unique to games. The two that proved most informative were <a href="http://code.google.com/p/cocos2d-iphone/">Cocos2d iPhone</a> (Cocoa/iPhone) and <a href="http://flixel.org/">Flixel</a> (ActionScript/Flash).</p>

<p>Even with all of <a href="http://delicious.com/shauninman/gamedev">this research</a> behind me I was still a bit lost. I went through a number of subpar iPhone and game development books before O&#8217;Reilly&#8217;s <a href="http://www.amazon.com/iPhone-Game-Development-Developing-Objective-C/dp/0596159854/?tag=iamsooobuyingthis-20">iPhone Game Development</a> was published. While a bit thin overall the chapters on Game Engine Anatomy and the 2D Game Engine were invaluable; without this book I&#8217;m not sure I would have been able to put all the pieces together and translate the knowledge and understanding I had acquired into an actual piece of playable software.</p>

<p>And the learning continues, most recently figuring out how to <a href="http://shauninman.com/archive/2010/02/13/an_mml_bundle_for_textmate">compose music for the NES sound chip</a> for <a href="http://www.flickr.com/photos/shauninman/4414021911/">use in the game</a>.</p>

<p>Despite this review reading like a sequential process, it was anything but. There were a lot of missteps, horrible books, and overlapping content in between but it&#8217;s the wrong decisions that make you appreciate the right ones. </p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2010%2F03%2F11%2F8_bit_iphone_game_development&amp;seed_title=8-bit+iPhone+Game+Development</link>
	<guid isPermaLink="false">1511@http://www.shauninman.com/</guid>
	<category>Apple</category><category>Books</category><category>Design</category><category>Personal</category><category>Gaming</category>
	<pubDate>Thu, 11 Mar 2010 15:56:00 GMT</pubDate>
</item>
<item>
	<title>Mimeo and the Kleptopus King</title>
	<description><![CDATA[<p>As anyone on <a href="http://dribbble.com/">Dribbble</a> already knows, I have been hard at work on my next iPhone/iPod touch game for the <a href="http://dribbble.com/players/shauninman/tags/mimeo">past two months</a>. With the public launch of Dribbble imminent (I haven&#8217;t heard anything more concrete than &#8220;soonish&#8221;) I thought the <a href="http://mimeoverse.com/">Mimeoverse</a> could use a proper introduction.</p>

<p><img src="/assets/images/mimeo-woods.png" alt="Mimeo in the Wood" title="" /></p>

<p>Early last year, I applied for a <a href="http://createhere.org/blog/meet_the_2009_makework_grant_recipients/">MakeWork grant</a> from local Chattanooga arts initiative <a href="http://createhere.org/">CreateHere</a>. In May (thanks in part to generous recommendation letters from the talented Messrs. <a href="http://unstoppablerobotninja.com/">Marcotte</a> and <a href="http://superfluousbanter.org/">Rubin</a> and some handsome illustrations by <a href="http://www.bearskinrug.co.uk/">Mr. Cornell</a>) I was awarded partial funding for my proposal to create a faux 16-bit game engine. My new game designs are far more ambitious than my inaugural effort, <a href="/horrorvacui/">Horror Vacui</a>, aspiring to multiple worlds and levels, various unique power-ups and hand-crafted pixel graphics, all of Super Nintendo caliber.</p>

<p>A few months after the release of <a href="http://feedafever.com/">Fever</a> I started on the engine. This past December I took a whole week off from support to make one last uninterrupted push and finished the core components of asset management, audio/visual output, a unique touch-based input method, and tile-based animated sprites and maps. I also built out an HTML-prototype map editor. It may sound like I took a vacation to get some work done but when you&#8217;re doing what you love, it&#8217;s really <a href="http://www.humblepied.com/jessica-hische/">not work</a>.</p>

<p>A simple proof of concept was required to iron out any kinks in the finished frameworks. That concept proved more interesting than the original game I set out to create.</p>

<h2>Pushing Pixels</h2>

<p>Before I get to Mimeo, I want to address my love of pixels. The aesthetics of Mimeo (and Horror Vacui before it) are not born solely from nostalgia. Good pixel art strikes the perfect balance between appreciable craftsmanship and the gestalt. A single pixel out of place, one too few or too many, ruins the illusion. There&#8217;s an unmuddied, economy of expression, the thankless result of the limitations of cartridge-based consoles.</p>

<p>At its core, play, and by extension video games, is learning. Call it discovery or mastery but a good game introduces new ideas (teaches), leverages existing ones (reviews) and layers them to create unique challenges (tests). Teaching, at its core, is communicating. Verbosity is an academic sleeping pill. A game&#8217;s graphics are the player&#8217;s teacher and a good teacher is consistent, clear, and concise. Like good pixel art.</p>

<h2>Super Mimeo Bros.</h2>

<p>Mimeo (even the name) started as a Mario clone with a twist: instead of power-ups affecting the player, they affect the entire game world. A story and mythos quickly developed. The so-called Mimeoverse consists of two 16-bit demiverses sharing 32-bits between them. When the evil Kleptopus King, an 8-bit octopus with an inferiority complex, discovers a portal into Mimeo&#8217;s realm and begins to syphon off its bits, Mimeo is sucked in and down-sampled to 2-bit. So begins Mimeo&#8217;s quest to restore balance to the demiverses.</p>

<p><img src="/assets/images/mimeo-hoodies.png" alt="Mimeo in the Hood" title="" /></p>

<p>Mimeo collects carts to upscale himself and the game world and enables switching between acquired resolutions to solve platforming puzzles. He will find guidance from nearest-neighbor and native rabbit Gaido. Collected bits translate into 1ups. Disposing of certain types of enemies leaves behind hoodies that grant Mimeo special abilities. The Quantum Glove puts Mimeo&#8217;s bits in a state of quantum superposition; enemies can&#8217;t hit him but they can&#8217;t dodge him either. &#8220;It&#8217;s so bad.&#8221;</p>

<h2>8-bit Hits</h2>

<p>In addition to creating the scenario, programming and designing all the graphics I&#8217;m also composing and producing all the music. The game uses a Nintendo NES 2A03 APU sound chip emulator (courtesy of <a href="http://www.fly.net/~ant/libs/audio.html#Nes_Snd_Emu">Blargg</a>) for authentic sounds that will keep pace with the game&#8217;s graphics. Here&#8217;s some sample mp3s of the foreboding Fortress:</p>

<ul>
<li><a href="/assets/music/mimeo/Fortress%20(2-bit%20NSF).mp3">2-bit bass</a> </li>
<li><a href="/assets/music/mimeo/Fortress%20(4-bit%20NSF).mp3">4-bit hi-hat</a></li>
<li><a href="/assets/music/mimeo/Fortress%20(8-bit%20NSF).mp3">8-bit melody</a> </li>
<li><a href="/assets/music/mimeo/Fortress%20(16-bit%20NSF).mp3">16-bit counter melody</a> </li>
</ul>

<p>I&#8217;m using a combination of <a href="http://www.milkytracker.net/">MilkyTracker</a> with the nespack.s3m samples for composing, Garageband for arranging, and <a href="/archive/2010/02/13/an_mml_bundle_for_textmate">MML</a> for producing the final NSFs used in the game.</p>

<h2>Resolution</h2>

<p>I&#8217;m aiming for a 2010 holiday season release. There is still much work to be done as every asset exists in 4 different resolutions (I said this project was ambitious) but the majority of core pieces are already in place.</p>

<p>You can catch up on past progress <a href="http://dribbble.com/players/shauninman/tags/mimeo">on Dribble</a> once it goes public and follow along with the unfolding process on <a href="http://blog.mimeoverse.com/">Mimeo in the Tumbleverse</a>, a development diary. Over the course of development I uploaded some short <a href="http://www.flickr.com/photos/shauninman/tags/mimeo/">demo videos</a> to Flickr and this slightly longer executive summary progress report to Vimeo:</p>

<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9671195&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9671195&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2010%2F02%2F23%2Fmimeo_and_the_kleptopus_king&amp;seed_title=Mimeo+and+the+Kleptopus+King</link>
	<guid isPermaLink="false">1508@http://www.shauninman.com/</guid>
	<category>Design</category><category>Personal</category><category>Gaming</category>
	<pubDate>Tue, 23 Feb 2010 13:35:00 GMT</pubDate>
</item>
<item>
	<title>An MML Bundle for Textmate</title>
	<description><![CDATA[<p>As much as I <a href="/archive/2009/01/02/an_8bit_2008">love the Korg DS-10</a> its inability to edit/record more than one bar at a time is a bit of drag when composing. Especially with the comparative ease of musical typing in Garageband with YMCK&#8217;s <a href="http://shaun.in/g/5g">Magical 8bit Plug</a>. Unfortunately YMCK&#8217;s plugin doesn&#8217;t produce the most authentic sounds with no control over vibrato and pops between continuous notes (even with release increased slightly from <code>0</code> to <code>0.01</code>). So my search continued.</p>

<p>I dabbled with Neil Baldwin&#8217;s <a href="http://dutycyclegenerator.com/nijuu/nijuu.html">Nijuu</a>. It turns out I&#8217;m just not comfortable <em>that</em> close to assembly language. I finally (as of this writing) settled on MML or <a href="http://en.wikipedia.org/wiki/Music_Macro_Language">Music Macro Language</a>. Nullsleep&#8217;s <a href="http://www.nullsleep.com/treasure/mck_guide/">MCK/MML Beginners Guide</a> proved a very non-threatening introduction but neonempyr&#8217;s <a href="http://www.neonempyr.org/ppmck_guide.html">Ultimate PPMCK MML Reference</a> definitely won the thoroughness round. (The latter went missing the day after posting this. Fortunately I downloaded a copy for offline use. Here is my mirror of the <a href="/assets/downloads/ppmck_guide.html">Ultimate PPMCK MML Reference</a>)</p>

<p>MML looked like a manageable language but it seemed none of the tools designed to compile MML into the requisite .nes or .nsf files were available on OS X. All of the links to the OS X versions had either 404&#8217;d or fallen prey to squatters. After a day of searching I finally found a copy of <a href="http://clogging.web.fc2.com/husic/">ezMML</a>, an editor/compiler built&#8212;or rather thrown together&#8212;for OS X. Oh sure, you can resize the editor window but it doesn&#8217;t resize the texteara. I can forgive an unpolished UI if the utility is there but when a crash during an incremental save wiped out an entire morning&#8217;s work (the post-crash saved file was completely empty) it was time to move on.</p>

<p>I use Textmate for the majority of my non-iPhone programming and text editing needs. I don&#8217;t recall it ever crashing (except having to force quit the occasional 30MB SQL file). So I spent the afternoon hacking together rudimentary MML syntax coloring as well as the Build and Run commands. </p>

<p>Now I have a reliable (and resizable) MML editor with a single key-command to compile an .nsf and automatically launch <a href="http://bannister.org/software/ao.htm">Audio Overload</a>. I can listen to my composition as easily as I can preview my HTML in a browser.</p>

<div class="image"><img src="/assets/images/mml-bundle.png" width="334" height="228" alt="" /></div>

<p><a href="/assets/downloads/MML.zip">This bundle</a> perches precariously on the shoulders of giants and is offered as-is, as always.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2010%2F02%2F13%2Fan_mml_bundle_for_textmate&amp;seed_title=An+MML+Bundle+for+Textmate</link>
	<guid isPermaLink="false">1507@http://www.shauninman.com/</guid>
	<category>Music</category><category>Gaming</category>
	<pubDate>Sun, 14 Feb 2010 02:14:00 GMT</pubDate>
</item>
<item>
	<title>The Muggle Coder</title>
	<description><![CDATA[<p>It&#8217;s no secret that I&#8217;m <a href="http://twitter.com/shauninman/status/6274989029">not a fan</a> of frameworks. As I mention in a recent <a href="http://www.techradar.com/news/internet/the-brains-behind-the-mint-web-stats-app-652209">.Net interview</a>:</p>

<blockquote>
  <p>I don&#8217;t like magic. I like knowing how something works. </p>
  
  <p>I don&#8217;t like taking things for granted because if magic breaks, unless it&#8217;s your own trick, you don&#8217;t know how to fix it.</p>
</blockquote>

<p>And nothing in recent experience is as magical as the iPhone SDK. I&#8217;m sure the Objective-C language and Apple&#8217;s dependent frameworks solve a lot of problems encountered by experienced software developers. As an inexperienced developer without the context of those problems, these clever pre-made solutions seem like unnecessary hoops erected for the sole purpose of jumping.</p>

<p>Compounding this confusion are NIBs, XIBs, and <a href="http://twitter.com/shauninman/status/6334805134">Interface Builder</a>. Interface Builder allows you to create and connect visual interface elements to your Objective-C classes. These interfaces are stored precompiled in a NIB or as XML in a XIB. It sounds like a brilliant idea&#8212;and it is&#8212;but as a software solution it&#8217;s a confounding mess. Especially when you&#8217;re developing software that doesn&#8217;t require standard UI elements (like <a href="http://shauninman.com/horrorvacui/">an 8-bit game</a>).</p>

<p>So the first thing I do when creating a new iPhone project in Xcode is sever any connection with Interface Builder or dependence on XIBs. I prefer to start with a Window-based Application and immediately Delete (Also Move to Trash) <code>Resources/MainWindow.xib</code>. Then in <code>Resources/&lt;AppName&gt;-Info.plist</code> I delete the &#8220;Main nib file base name&#8221; row and save. Finally I copy the AppDelegate class name from  <code>Classes/&lt;AppName&gt;AppDelegate.h</code> (deleting the no-longer-necessary <code>IBOutlet</code> from the <code>@property</code> declaration while I&#8217;m in there) and paste it in as the <code>NSString</code> fourth argument of <code>UIApplicationMain</code> in <code>Other Sources/main.m</code> like so:</p>

<pre><code>UIApplicationMain(argc, argv, nil, @"&lt;AppName&gt;AppDelegate");
</code></pre>

<p>I can then create my window programmatically in the <code>applicationDidFinishLaunching</code> method with:</p>

<pre><code>windowFrame = [[UIScreen mainScreen] bounds];
window = [[UIWindow alloc] initWithFrame: windowFrame];
</code></pre>

<p>With no IBRabbits in my HatDelegate or Trick Referencing Outlets up my SleeveController I can go about the business of making my own mistakes and learning from them; so that one day all of this might make sense.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F12%2F04%2Fthe_muggle_coder&amp;seed_title=The+Muggle+Coder</link>
	<guid isPermaLink="false">1506@http://www.shauninman.com/</guid>
	<category>Objective-C</category>
	<pubDate>Fri, 04 Dec 2009 13:46:00 GMT</pubDate>
</item>
<item>
	<title>Tweetie2 &amp; Lessn</title>
	<description><![CDATA[<p>With the upgrade to 2.0 <a href="http://www.atebits.com/tweetie-iphone/">Tweetie</a> for the iPhone and iPod touch now supports <a href="http://developer.atebits.com/tweetie-iphone/custom-shortening/">custom url shorteners</a>. I&#8217;ve received a couple of emails and tweets (Twitter != Support) about using <a href="http://shauninman.com/archive/2009/09/14/less_n_go">Lessn</a> with Tweetie 2. Here&#8217;s the easiest way to set it up:</p>

<ol>
<li>On your desktop, copy your API key (found on <code>http://yourdomain.com/lessn/-/</code>) and paste it into the following url:
<code>http://yourdomain.com/lessn/-/?api=&lt;API key&gt;&amp;url=%@</code></li>
<li>Email the completed url to yourself</li>
<li>On the device, copy the url you emailed yourself and launch Tweetie 2 (the url can be constructed on the device but it takes some back and forth application switching)</li>
<li>On the Accounts screen, click the Settings button. Click &#8220;URL Shortening&#8221; then &#8220;Custom&#8230;&#8221;</li>
<li>Paste the url and click Save</li>
</ol>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F10%2F12%2Ftweetie_2_and_less_n&amp;seed_title=Tweetie2+%26amp%3B+Lessn</link>
	<guid isPermaLink="false">1504@http://www.shauninman.com/</guid>
	<category>Lessn</category>
	<pubDate>Mon, 12 Oct 2009 18:53:00 GMT</pubDate>
</item>
<item>
	<title>Lessn&#8217;go</title>
	<description><![CDATA[<p><a href="/archive/2009/08/17/less_n">Lessn</a> has been updated to <a href="/assets/downloads/lessn.zip">1.0.5</a> and supports two new arguments when Lessning a url:</p>

<ul>
<li><code>api</code>: returns just the Lessn&#8217;d url as plaintext. Example usage, <code>http://yourdomain.com/lessn/-/?url=&lt;long url&gt;&amp;api=&lt;API key&gt;</code></li>
<li><code>redirect</code>: allows you to create custom redirects. <code>%l</code> in the value of <code>redirect</code> is replaced with the Lessn&#8217;d url. Example usage, <code>http://yourdomain.com/lessn/-/?url=&lt;long url&gt;&amp;redirect=http%3A%2F%2Ftwitter.com%2F%3Fstatus%3D%l</code></li>
</ul>

<p>If you want to tweet a Lessn&#8217;d url from <a href="http://feedafever.com/">Fever</a> you could replace the default Twitter service url in your Preferences Sharing tab with the following: <code>http://yourdomain.com/lessn/-/?url=%u&amp;redirect=http%3A%2F%2Ftwitter.com%2F%3Fstatus%3D%t%2520%l</code></p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F09%2F14%2Fless_n_go&amp;seed_title=Lessn%26%238217%3Bgo</link>
	<guid isPermaLink="false">1497@http://www.shauninman.com/</guid>
	<category>PHP</category><category>Lessn</category>
	<pubDate>Mon, 14 Sep 2009 20:07:00 GMT</pubDate>
</item>
<item>
	<title>Quieteque (Idioteque)</title>
	<description><![CDATA[<div class="image"><img src="/assets/images/quieteque.png" width="334" height="334" alt="" /></div>

<p>Like <a href="/archive/2008/09/28/rabbit">Rabbit in Your Headlights</a>, Idioteque is a song I&#8217;ve been a fan of for almost a decade but only recently (um, last night) worked out how to play on the guitar.</p>

<p>This arrangement is a brisk two minutes and twelve seconds (so short you might have to listen to it twice to hear the whole thing) and plays a bit like an Iron &amp; Wine cover (if you&#8217;re being generous). I recorded the guitar and vocals together with one mic in one go. The backing harmony (which is actually just the melody in its original octave) was recorded twice and panned slightly left and right. </p>

<p>For posterity (more for future-me than current-anybody-else), the four two-note chords:</p>

<pre><code>e ----------------   e  ---------------
b ----------------   a# --0--4--12--9--
G --3--7--15--12--   G  --0--3--12--8--
D ----------------   D  ---------------
A ----------------   A  ---------------
E --3--6--15--11--   E  ---------------
</code></pre>

<p>The track artwork was inspired by Thom Yorke&#8217;s Eraser-era album art but retains the lo-fi aesthetic of the Kid A-era with the requisite touch of (modified) DIN Black. </p>

<p>Download <a href="/assets/music/quieteque/01%20Quieteque.mp3">Quieteque (Idioteque)</a>.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F09%2F10%2Fquieteque_idioteque&amp;seed_title=Quieteque+%28Idioteque%29</link>
	<guid isPermaLink="false">1494@http://www.shauninman.com/</guid>
	<category>Original Music</category>
	<pubDate>Thu, 10 Sep 2009 22:50:00 GMT</pubDate>
</item>
<item>
	<title>Again</title>
	<description><![CDATA[<div class="image"><img src="/assets/images/again.png" width="334" height="334" alt="" /></div>

<p>An ode to the rinse and repeat relationships of small ponds everywhere. <a href="/assets/music/again/01%20Again.mp3">Download Again</a>.</p>

<blockquote>
  <p>you were the one<br />
  who left me for the one<br />
  who left you for the one  </p>
  
  <p>and now you&#8217;re back here<br />
  whispering in my ear<br />
  &#8220;you were the one<br />
  I was wrong&#8221;  </p>
  
  <p>it wasn&#8217;t said in so many words<br />
  but like a fool that&#8217;s what I heard<br />
  I was tired and alone<br />
  now you&#8217;ve come and gone<br />
  again  </p>
  
  <p>you were the one<br />
  who left me for the one<br />
  &#8230;I never moved on  </p>
  
  <p>so now you&#8217;re back here<br />
  and whispering in my ear<br />
  &#8220;you are the one<br />
  I was wrong&#8221;  </p>
  
  <p>it didn&#8217;t have to be said in so many words<br />
  &#8216;cause like a fool that&#8217;s what I heard<br />
  I was tired and alone<br />
  now you&#8217;ve come and gone<br />
  again  </p>
  
  <p>this time I hope you stay gone<br />
  for good, for all that you&#8217;ve done<br />
  won&#8217;t you just let me move on.</p>
</blockquote>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F09%2F03%2Fagain&amp;seed_title=Again</link>
	<guid isPermaLink="false">1492@http://www.shauninman.com/</guid>
	<category>Original Music</category>
	<pubDate>Thu, 03 Sep 2009 13:33:00 GMT</pubDate>
</item>
<item>
	<title>A Wave by Any Other Title</title>
	<description><![CDATA[<p>Apparently mid to late summer is Shortwave season and <a href="http://yoast.com/">Joost</a> has been putting in some serious time on the beach. Another update to Shortwave recommended by the Pin-Striped One allows you to capture the title of a page for use in commands with the new <code>%t</code> token. </p>

<p>With the new token comes a new default Email Link command that will create a new email in your default mail program with the current page&#8217;s title as the subject plus any text that follows the trigger (or selected text) appended by the current url as the message body. Then all you need to do is enter an email address and hit send. This new token should also be handy for custom bookmarking, reblogging and tweeting commands.</p>

<p>As with the previous <a href="/archive/2009/08/21/wave_selection">two</a> <a href="/archive/2008/08/09/new_wave">updates</a>, this change couldn&#8217;t be made solely on the server-side so if you want this new functionality you will need to grab/create an <a href="http://shortwaveapp.com/">updated bookmarklet</a>.</p>

<p><strong>Update:</strong> The latest version of Safari on OS X seems to be inserting &#8220;localhost/&#8221; at the end of the message body. This has nothing to do with the <code>e</code> trigger or the new <code>%t</code> token but instead the way Safari handles header-based redirects using the <code>mailto:</code> pseudocol. Looking into it.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F08%2F24%2Fa_wave_by_any_other_title&amp;seed_title=A+Wave+by+Any+Other+Title</link>
	<guid isPermaLink="false">1489@http://www.shauninman.com/</guid>
	<category>JavaScript</category><category>Shortwave</category>
	<pubDate>Mon, 24 Aug 2009 20:17:00 GMT</pubDate>
</item>
<item>
	<title>Wave Selection</title>
	<description><![CDATA[<p>Based on a suggestion and sample implementation from <a href="http://yoast.com/">Joost de Valk</a> a new, updated <a href="http://shortwaveapp.com/">Shortwave bookmarklet</a> allows you to select text and have it automatically used as your search term. Now all you need to do is select some text, invoke Shortwave, type a trigger and hit enter. (Don&#8217;t forget that in Safari the items in your bookmark bar are mapped to &#x2318;+[1-9].)</p>

<p>As with the <a href="/archive/2008/08/09/new_wave">last update</a>, this change couldn&#8217;t be made on the server-side so if you want this new functionality you will need to <a href="http://shortwaveapp.com/">grab/create an updated bookmarklet</a>.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F08%2F21%2Fwave_selection&amp;seed_title=Wave+Selection</link>
	<guid isPermaLink="false">1487@http://www.shauninman.com/</guid>
	<category>Collaborations</category><category>JavaScript</category><category>Shortwave</category>
	<pubDate>Fri, 21 Aug 2009 16:59:00 GMT</pubDate>
</item>
<item>
	<title>Lessn</title>
	<description><![CDATA[<p>I <a href="http://twitter.com/shauninman/statuses/2811201085">recently</a> purchased <a href="http://shaun.in/">shaun.in</a> (ooh, dynamically generated SVG). Because the domain itself is so short (compared to the verbose shauninman.com) and in light of the <a href="http://joshua.schachter.org/2009/04/on-url-shorteners.html">current</a> <a href="http://blog.tr.im/post/159489555/tr-im-to-december-31-2009">volatility</a> <a href="http://blog.tr.im/post/160697842/tr-im-resurrected">exhibited</a> by third-party url shorteners, I thought I would try my hand at rolling my own shortener. A few people have inquired about it so here we are.</p>

<div class="image"><img src="/assets/images/lessn.png" width="334" height="128" alt="" /></div>

<p>Lessn is an extremely simple, personal url shortener written in PHP with MySQL and mod_rewrite. Download the latest version of <a href="/assets/downloads/lessn.zip">Lessn</a> and check out the included <code>README.txt</code> for installation instructions. I&#8217;m not sure about minimum requirements but I&#8217;ve been using it with PHP <code>5.2.6</code> and MySQL <code>5.0.41</code> and users have reported success with PHP <code>4.4.8</code> and MySQL <code>4.1.25</code>.</p>

<p>Lessn is offered free, as is, sans support and without warranty (but is really not as scary as all that).</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F08%2F17%2Fless_n&amp;seed_title=Lessn</link>
	<guid isPermaLink="false">1486@http://www.shauninman.com/</guid>
	<category>PHP</category><category>Lessn</category>
	<pubDate>Mon, 17 Aug 2009 18:05:00 GMT</pubDate>
</item>
<item>
	<title>All Along the Watchtower</title>
	<description><![CDATA[<p>A cover of a cover. Written by Bob Dylan, popularized by Jimi Hendrix, arranged by Dave Matthews and recently renewed by Bear McCreary, I&#8217;ve been playing this song for more than a decade. <a href="/assets/music/covers/All%20Along%20the%20Watchtower.mp3">This recording</a> was banged out this morning using the built-in mic on my MacBook Pro. Adjust expectations accordingly.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F08%2F13%2Fwatchtower&amp;seed_title=All+Along+the+Watchtower</link>
	<guid isPermaLink="false">1485@http://www.shauninman.com/</guid>
	<category>Music</category><category>Original Music</category>
	<pubDate>Thu, 13 Aug 2009 16:31:00 GMT</pubDate>
</item>
<item>
	<title>Fever: Black, White and Read Hot All Over</title>
	<description><![CDATA[<p>Mint has a new baby sister! Earlier this morning I released <a href="http://feedafever.com/">Fever</a>, a cure for the common feed reader. Born of (almost) a decade of accumulating and failing to keep up with hundreds of feeds, Fever is a self-hosted recommendation engine for content you&#8217;re already subscribed to built atop a full-featured feed reader.</p>

<h2>Peeriodicals</h2>

<p>About a year and a half ago, shortly after releasing <a href="http://haveamint.com/">Mint 2</a>, I had a stats-inspired epiphany: What if, instead of mentally processing hundreds of headlines your feed reader did that heavy&#8212;we&#8217;re talking pre-coffee&#8212;lifting and just told you what everyone was collectively talking about? And what if it weighted those &#8220;hot&#8221; topics and aggregated the ensuing discussions in your feeds together? </p>

<p>You could check in once a day&#8212;once a week even&#8212;and not miss a beat. You could follow new feeds with abandon, the more you fed it, the more effective it would get. Like a personalized, passive Digg catering to your unique interests.</p>

<p>That&#8217;s Fever in a nutshell. For more details check out <a href="http://feedafever.com/">feedafever.com</a> and don&#8217;t miss the <a href="http://feedafever.com/#demo">screencast</a> (those 5 minutes consumed 48 excruciating hours of my life).</p>

<h2>The Village</h2>

<p>It&#8217;s true what they say, it takes a village to raise a child and Fever wouldn&#8217;t exist in its current form without the timely input of a handful of generous and insightful beta testers. We built this city.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F06%2F17%2Ffever_black_white_and_read_hot_all_over&amp;seed_title=Fever%3A+Black%2C+White+and+Read+Hot+All+Over</link>
	<guid isPermaLink="false">1470@http://www.shauninman.com/</guid>
	<category>Fever</category>
	<pubDate>Wed, 17 Jun 2009 10:05:00 GMT</pubDate>
</item>
<item>
	<title>LaunchNess Monster</title>
	<description><![CDATA[<p>So you&#8217;ve had a <a href="http://shauninman.com/archive/2008/08/19/sign_up_ness">temporary sign-up page</a> out there for a couple months and you&#8217;ve been testing the site proper on a secret, <a href="http://marcamos.com/password-protect-a-subdomain-with-plesk/">password-protected subdomain</a>. Now you&#8217;re ready to make sure everything works in situ before opening it up to the world. Use this handy <code>mod_rewrite</code> rule to redirect everyone but you to a temporary directory until everything is perfect.</p>

<h2>The Switch</h2>

<p>First things first, move or copy your sign-up form and all support files into the new temporary directory. I use <code>/ingsoon/</code> which uses the TLD to spell out &#8220;Coming Soon.&#8221; Make sure to update any non-relative paths that may have changed including paths to stylesheets, images and JavaScript.</p>

<p>Next add the following to an <code>.htaccess</code> file in <code>/ingsoon/</code> and any other directory that you want to remain accessible to others (eg. your <a href="http://haveamint.com/">Mint</a> installation):</p>

<pre><code>&lt;IfModule mod_rewrite.c&gt;
    RewriteEngine   off
&lt;/IfModule&gt;
</code></pre>

<p>Then add the following to your root <code>.htaccess</code> file, changing the IP address to <a href="http://www.whatismyip.com/">your own</a> (don&#8217;t forget to escape the dots with a backslash):</p>

<pre><code>&lt;IfModule mod_rewrite.c&gt;
    RewriteEngine   on

    # Coming Soon redirect
    RewriteCond     %{REMOTE_ADDR}      !^(192\.168\.1\.101)$
    RewriteRule     .* /ingsoon/ [R,L]
&lt;/IfModule&gt;
</code></pre>

<p>Lastly, update your Campaign Monitor settings to reflect the new path. Go to &#8220;Manage Subscribers,&#8221; then click on the list associated with your sign-up form. In the sidebar under &#8220;Capturing and Processing&#8221; you need to update the path in both &#8220;Customize subscribe process&#8221; and &#8220;Unsubscribe settings.&#8221;</p>

<p>Now get back to work, you&#8217;re <a href="http://feedafever.com/">so close</a>!</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F06%2F15%2Flaunch_ness_monster&amp;seed_title=LaunchNess+Monster</link>
	<guid isPermaLink="false">1469@http://www.shauninman.com/</guid>
	<category>Web</category>
	<pubDate>Mon, 15 Jun 2009 11:42:00 GMT</pubDate>
</item>
<item>
	<title>PXR + Cufon = Pxfon</title>
	<description><![CDATA[<p>Back in 2006 I created (but never released) <a href="http://shauninman.com/tmp/pxr/">PXR</a>, a pixel-based alternative to IFR. I built a tool that could convert specially prepared gifs into a format that could then be used by the PXR JavaScript to generate and layout the pixel typeface. It was cute but impractical.</p>

<p>Fast-forward three years. <a href="http://cufon.shoqolate.com/">Cufón</a> is <a href="http://novemberborn.net/sifr3">sIFR</a>&#8217;s heir apparent. But in my quick tests Cufón wasn&#8217;t up to the challenge of generating a <code>font.js</code> from any of my pixel fonts. Even if it had, the result would probably have been marred by a pixel&#8217;s worst enemy, anti-aliasing.</p>

<p>So yesterday I cracked open a couple of Cufón-generated <code>font.js</code> files and the un-minified <code>cufon.js</code> to figure out how the pieces fit together. I was able to successfully reverse engineer the format and modify my original PXR generator to output Cufón-compatible <code>font.js</code> files.</p>

<p>You can play around with the <a href="http://pixel-portraits.com/pxfon/">generator</a> on <a href="http://pixel-portraits.com/">Pixel Portraits</a>. I haven&#8217;t added any sort of error checking and the current outline tracing algorithm is remedial at best; it can only see characters one row at a time. That means it&#8217;s especially inefficient on larger pixel typefaces (anything greater than 18px tall). But it&#8217;s good enough for me. </p>

<p>With <a href="http://pixel-portraits.com/pxfon/">Pxfón</a> I might even be able to carry over the pixel aesthetic from my new <a href="http://shauninman.com/pact/">splash page</a> to the entire site. That would be sure to confound the average Googler.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F04%2F17%2Fpxr_cufon_pxfon&amp;seed_title=PXR+%2B+Cufon+%3D+Pxfon</link>
	<guid isPermaLink="false">1446@http://www.shauninman.com/</guid>
	<category>CSS</category><category>Design</category><category>Inman Flash Replacement</category><category>JavaScript</category>
	<pubDate>Fri, 17 Apr 2009 15:10:00 GMT</pubDate>
</item>
<item>
	<title>Eye of the Abhorrer</title>
	<description><![CDATA[<p>These game design notes pick up where <a href="/archive/2009/02/03/horror_vacui_game_design">The Horror</a> left off.</p>

<p>I chose an 8-bit aesthetic for <a href="/horrorvacui/">Horror Vacui</a> (<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=303753394&amp;mt=8">iTunes App Store link</a>) for a couple reasons. Nostalgia was one. It&#8217;s <a href="/archive/2009/01/02/an_8bit_2008">no secret</a> that I&#8217;m a bigger fan of consoles past their prime than I am of the current generation. Another significant motivation was inexperience with the game development process. The self-imposed graphic and audio limitations allowed me to focus on figuring out all the invisible things that make a game tick while hiding any gaps in the fit-and-finish. And since the first games I really enjoyed playing were on the NES it seemed logical to open with an 8-bit game of my own.</p>

<h2>The Cards You&#8217;re Dealt</h2>

<p>Once I nailed down the game play using my <a href="http://www.flickr.com/photos/shauninman/3193675199/in/set-72157612473364891/">rudimentary paper prototype</a>, I did some quick sketches to work out the basics of the card design. The only thing that really changed from <a href="http://www.flickr.com/photos/shauninman/3255408139/in/set-72157612473364891/">these sketches</a> was the addition of a colored border that indicates the Temperature of a card which is the same regardless of the element/player the card represents.</p>

<p>The original Wii sprites actually had a lot more detail at first. Water cards had bubbles and Earth cards had pebbles with larger rocks embedded beneath the surface. These details looked great when you examined each card individually but on even a half-full board the extra detail proved too visually noisy and made it difficult to scan the Vacuum quickly.</p>

<p>I sketched out <a href="http://www.flickr.com/photos/shauninman/3256238802/in/set-72157612473364891/">the logo</a> hastily, playing with the art-world definition of horror vacui (a fear of whitespace) and the established card design. The incorporation of the two normal elements helped break up what would have otherwise been flat, irregular type.</p>

<p>The game&#8217;s <a href="http://www.flickr.com/photos/shauninman/3221957834/in/set-72157612473364891/">Default.png</a> pays homage to the <a href="http://en.wikipedia.org/wiki/Kill_screen">Pacman kill screen</a>. I knew going in that this intentionally glitchy screen was going to cause confusion (and it already has) but the smile-in-the-mind it gives players who are in the know makes it worth it.</p>

<p>For both the <a href="http://wiibrew.org/wiki/Horror_Vacui">Wii</a> and iPhone versions I created all the art at half-size and then resized to 200% with Nearest Neighbor resampling during export. I did the same for the pixel iPhone and App Store badge for the <a href="/horrorvacui/">mini-site</a>. All the graphics were mindful of the 4 colors-per-sprite limitations of the medium I was imitating (with the exception of the logo which combines the palettes of two sprites plus a highlight to make it pop).</p>

<h2>Hearing Aid</h2>

<p>All the music and sound effects were composed on the Korg DS-10. The main theme started as a demonstration of the Nintendo DS software for my aunt Suzanne this past holiday season. Because of its origins I dubbed it &#8220;Gameboy Named Suz.&#8221; The start chime is actually an ascending melodic run playing at 220bpm. The flipping sound is straight noise. The other sound effects are just the result of experimenting with various percussive sounds and fiddling with knobs.</p>

<p>Audio was imported by patching the headphone jack of the DS to the microphone jack on my MacBook Pro. I used <a href="http://www.versiontracker.com/dyn/moreinfo/macosx/17392">Audio Recorder</a> to capture the audio and save it as an AIF. I used <a href="http://audacity.sourceforge.net/">Audacity</a> to trim, in some cases amplify and then export the individual sound files.</p>

<p>Keeping with game music tradition I&#8217;ve created a Horror Vacui Original Sound Version soundtrack EP:</p>

<ol>
<li><a href="/assets/music/hv/01%20Gameboy%20Named%20Suz.mp3">Gameboy Named Suz</a></li>
<li><a href="/assets/music/hv/02%20Grover.mp3">Grover</a></li>
</ol>

<h2>Play with yourself</h2>

<p>One of the most interesting parts of developing the game was creating the CPU opponent AI. It required really thinking about and formalizing my own play strategy and figuring out a way for the CPU to pick the best available option.</p>

<p>One of the fun side effects of developing this AI is that once I worked out the kinks I was able to pit the CPU against itself. This proved handy when it came time to <a href="http://twitter.com/shauninman/statuses/1146661848">eliminate memory leaks</a> and suggested the player-free demo that starts if you stay on the title screen for more than 15 seconds.</p>

<p>The CPU AI is not as robust as it could be but should keep a novice on their toes for a couple plays. The real magic is playing against a human opponent. There&#8217;s nothing like having a friend draw an Ice Age or Inferno card on their last and (what would otherwise have been) winning turn and then taking the game from them.</p>]]></description>
	<link>http://shauninman.com/feeder/?FeederAction=clicked&amp;feed=Complete&amp;seed=http%3A%2F%2Fwww.shauninman.com%2Farchive%2F2009%2F02%2F05%2Fbeauty_is_in_the_eye_of_the_abhorrer&amp;seed_title=Eye+of+the+Abhorrer</link>
	<guid isPermaLink="false">1408@http://www.shauninman.com/</guid>
	<category>Apple</category><category>Design</category><category>Gaming</category>
	<pubDate>Thu, 05 Feb 2009 19:00:00 GMT</pubDate>
</item>
</channel>
</rss>