<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[the :coderow blog]]></title>
  <link href="http://blog.coderow.com/atom.xml" rel="self"/>
  <link href="http://blog.coderow.com/"/>
  <updated>2013-05-01T19:37:21-05:00</updated>
  <id>http://blog.coderow.com/</id>
  <author>
    <name><![CDATA[coderow]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Watermelons For Good]]></title>
    <link href="http://blog.coderow.com/2013/05/01/watermelons-for-good/"/>
    <updated>2013-05-01T18:25:00-05:00</updated>
    <id>http://blog.coderow.com/2013/05/01/watermelons-for-good</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://blog.coderow.com/images/posts/watermelon.png">
We were recently asked (along with our mobile marketing partner LaunchMedia) to build an iOS app for the <a href="http://www.pinkribbonwatermelon.com">Pink Ribbon Watermelon</a> organization.  When retailers participate in the Pink Ribbon Watermelon program, C.H. Robinson donates a portion of Pink Ribbon Watermelon sales to breast cancer research and prevention organizations. To date they have donated over $480,000!</p>

<p>Pink Ribbon Watermelon wanted to create a fun, easy way for people to donate to the organization while displaying great watermelon recipes and carving tips.  Much of this information was already on their web site, so we wanted to do something extra that could make the app more intruiging for people spending a dollar on the app (even though the money is going to a good cause).  After a few discussions our team suggested adding some type of game that would be fun to play, would highlight the organization&#8217;s benefits and use the watermelon theme.  Because the organization also did not have the budget to build out something like this, we decided to donate the time to design and develop the game.</p>

<!-- more -->


<p>Eventually we came up with the idea of a farmer protecting his watermelon patch from birds and jackalopes while avoiding friendlies (butterflies and farm kids).  Each stage completed displays some facts about nutrition, breast cancer and the organization.  It was a lot of fun to build with many hours discussing the arc of watermelon seeds, collision properties of birds and vermin nuances.</p>

<p><a href="https://itunes.apple.com/us/app/watermelon-that-wows!/id594934588?mt=8">Check out the app</a>.  It is $0.99 and the money goes to a good cause.</p>

<h3>Credits &amp; Tech</h3>

<ul>
<li>The overall design was done by Norm Orstad</li>
<li>Game development by Mark Wagner</li>
<li>RubyMotion iOS development by Steve Tuckner</li>
<li>Game artwork by Joe Dressel</li>
<li>iOS Development using <a href="http://www.rubymotion.com/">RubyMotion</a></li>
<li>Game development using <a href="http://impactjs.com/">Impact</a></li>
<li>We started with home grown sound effects, but ended up licensing the music and sound effects from various sources, although Mark Wagner does a mean watermelon spitting farmer</li>
</ul>


<p>You can read the C.H. Robinson press release <a href="http://www.prweb.com/releases/chrobinson/pinkribbon/prweb10616087.htm">here</a></p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/112477dc77ea0b9cd1562c6c11c3310b?size=50" alt="Kelly Heikkila" />
	</div>
	
	<div class="author-about">
		<h3>Kelly Heikkila, 			
			<a href="http://twitter.com/k2heikkila">@k2heikkila</a>
			</h3>
		<p>Founder at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[JavascriptMN: Game Hackathon write-up]]></title>
    <link href="http://blog.coderow.com/2013/02/01/javascriptmn-game-hackathon-write-up/"/>
    <updated>2013-02-01T09:49:00-06:00</updated>
    <id>http://blog.coderow.com/2013/02/01/javascriptmn-game-hackathon-write-up</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://blog.coderow.com/images/posts/doodle_game.png"></p>

<p>Last night, the Javascript usergroup here in Minneapolis, Minnesota <a href="http://www.meetup.com/JavaScriptMN/">JavascriptMN</a>
had it&#8217;s monthly meetup. This months meeting was set to be a javascript game hackathon, with the winner taking home a
new Nexus 7.  This is a write up of the game that I made for the hackathon, which was ultimately voted to be the
best game of the night.</p>

<h2>Concept</h2>

<p>Since I am not a graphic guru, I wanted to stay with something very simple graphically. My graphics skills are little better
then stick figures.  That&#8217;s IT!!  Remember the doodles you used to draw in your note book during class in high school or
middle school. What if they could come to life and run around on your sheet of paper fighting against other doodle drawings.
I had determined my game concept and it sounded completely reasonable to accomplish in the 2-3 hours available.</p>

<!-- more -->


<h2>Assets</h2>

<p>Since my game concept centered around the doodles in a notebook, the first thing I needed was the paper background.
Early asset creation was allowed so I set to work.  I google&#8217;d an image of a piece of paper, and quickly realized that I
would need to create my own if I wanted the lines on the paper to line up with my collision blocks. Next, I needed a
stick figure. I found a set of photoshop brushes: <a href="http://free-brushes.com/2008/11/29/hand_drawn_stick_figure_war_brushes.html">Stick figure war</a>
This gave me more then I could have hoped for, it gave me the basic texture for drawing terrain also.  With this in hand,
I set out to create the sprite sheets for the player and the floor.  It also stared me thinking about having fire in my game,
possibly on the floors.</p>

<p><img class="left" src="http://blog.coderow.com/images/posts/stickman_sprite.png" title="" >   <img class="left" src="http://blog.coderow.com/images/posts/floors.png" title="" >  <img class="left" src="http://blog.coderow.com/images/posts/fire2.png" title="" ></p>

<p>This is what I had managed to accomplish before leaving to go to the meeting.  As soon as I arrived I set to work on
creating some sound effects.  I needed a background track, a shooting noise, and a death noise.  I have learned from
previous game development that sounds are a must have, and in a competition like this sounds especially funny ones will
make people laugh, and laughs bring votes.</p>

<h2>The Code</h2>

<p>Using the impactjs game engine takes care of a lot of the heavy lifting and allowed me to focus on my game. I set to work
creating my game entities: Player, Fire, and a monster to shoot that I hadn&#8217;t yet determined:</p>

<figure class='code'><figcaption><span>Player entity  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
<span class='line-number'>126</span>
<span class='line-number'>127</span>
<span class='line-number'>128</span>
<span class='line-number'>129</span>
<span class='line-number'>130</span>
<span class='line-number'>131</span>
<span class='line-number'>132</span>
<span class='line-number'>133</span>
<span class='line-number'>134</span>
<span class='line-number'>135</span>
<span class='line-number'>136</span>
<span class='line-number'>137</span>
<span class='line-number'>138</span>
<span class='line-number'>139</span>
<span class='line-number'>140</span>
<span class='line-number'>141</span>
<span class='line-number'>142</span>
<span class='line-number'>143</span>
<span class='line-number'>144</span>
<span class='line-number'>145</span>
<span class='line-number'>146</span>
<span class='line-number'>147</span>
<span class='line-number'>148</span>
<span class='line-number'>149</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="nx">ig</span><span class="p">.</span><span class="nx">module</span><span class="p">(</span>
</span><span class='line'>    <span class="s1">&#39;game.entities.player&#39;</span>
</span><span class='line'><span class="p">)</span>
</span><span class='line'>    <span class="p">.</span><span class="nx">requires</span><span class="p">(</span>
</span><span class='line'>    <span class="s1">&#39;impact.entity&#39;</span>
</span><span class='line'><span class="p">)</span>
</span><span class='line'>    <span class="p">.</span><span class="nx">defines</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
</span><span class='line'>
</span><span class='line'>        <span class="nx">EntityPlayer</span> <span class="o">=</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">size</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">32</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="mi">32</span><span class="p">},</span>
</span><span class='line'>            <span class="nx">offset</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="o">-</span><span class="mi">4</span><span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">maxVel</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">100</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">200</span><span class="p">},</span>
</span><span class='line'>            <span class="nx">friction</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">600</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">0</span><span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">type</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">A</span><span class="p">,</span> <span class="c1">// Player friendly group</span>
</span><span class='line'>            <span class="nx">checkAgainst</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">NONE</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">collides</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">COLLIDES</span><span class="p">.</span><span class="nx">PASSIVE</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">shootSFX</span><span class="o">:</span> <span class="k">new</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Sound</span><span class="p">(</span> <span class="s1">&#39;media/pew.*&#39;</span> <span class="p">),</span>
</span><span class='line'>            <span class="nx">dieSFX</span><span class="o">:</span> <span class="k">new</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Sound</span><span class="p">(</span> <span class="s1">&#39;media/die.*&#39;</span> <span class="p">),</span>
</span><span class='line'>            <span class="nx">animSheet</span><span class="o">:</span> <span class="k">new</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">AnimationSheet</span><span class="p">(</span> <span class="s1">&#39;media/stickman_sprite.png&#39;</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">32</span> <span class="p">),</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">flip</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">accelGround</span><span class="o">:</span> <span class="mi">400</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">accelAir</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">jump</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">health</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">flip</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">startPosition</span><span class="o">:</span><span class="p">{</span><span class="nx">x</span><span class="o">:</span><span class="mi">0</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="mi">0</span><span class="p">}</span>  <span class="p">,</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">init</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">(</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span> <span class="p">);</span>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// Add the animations</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span> <span class="s1">&#39;idle&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span> <span class="s1">&#39;run&#39;</span><span class="p">,</span> <span class="mf">0.07</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span> <span class="s1">&#39;jump&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span> <span class="s1">&#39;fall&#39;</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">,</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">startPosition</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span><span class="p">;</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">startPosition</span><span class="p">.</span><span class="nx">y</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span><span class="p">;</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">kill</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">dieSFX</span><span class="p">.</span><span class="nx">play</span><span class="p">();</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">();</span>
</span><span class='line'>                <span class="nx">ig</span><span class="p">.</span><span class="nx">game</span><span class="p">.</span><span class="nx">spawnEntity</span><span class="p">(</span> <span class="nx">EntityPlayer</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">startPosition</span><span class="p">.</span><span class="nx">x</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">startPosition</span><span class="p">.</span><span class="nx">y</span> <span class="p">);</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">update</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// move left or right</span>
</span><span class='line'>                <span class="kd">var</span> <span class="nx">accel</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">standing</span> <span class="o">?</span> <span class="k">this</span><span class="p">.</span><span class="nx">accelGround</span> <span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">accelAir</span><span class="p">;</span>
</span><span class='line'>                <span class="k">if</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">state</span><span class="p">(</span><span class="s1">&#39;left&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">accel</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="o">-</span><span class="nx">accel</span><span class="p">;</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>                <span class="k">else</span> <span class="k">if</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">state</span><span class="p">(</span><span class="s1">&#39;right&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">accel</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="nx">accel</span><span class="p">;</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>                <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">accel</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// jump</span>
</span><span class='line'>                <span class="k">if</span><span class="p">(</span> <span class="k">this</span><span class="p">.</span><span class="nx">standing</span> <span class="o">&amp;&amp;</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">pressed</span><span class="p">(</span><span class="s1">&#39;jump&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">y</span> <span class="o">=</span> <span class="o">-</span><span class="k">this</span><span class="p">.</span><span class="nx">jump</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// shoot</span>
</span><span class='line'>                <span class="k">if</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">pressed</span><span class="p">(</span><span class="s1">&#39;shoot&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">shootSFX</span><span class="p">.</span><span class="nx">play</span><span class="p">();</span>
</span><span class='line'>                    <span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">){</span>
</span><span class='line'>                        <span class="nx">ig</span><span class="p">.</span><span class="nx">game</span><span class="p">.</span><span class="nx">spawnEntity</span><span class="p">(</span> <span class="nx">EntityBullet</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span> <span class="o">+</span> <span class="mi">15</span><span class="p">,</span> <span class="p">{</span><span class="nx">flip</span><span class="o">:</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">}</span> <span class="p">);</span>
</span><span class='line'>                    <span class="p">}</span><span class="k">else</span>
</span><span class='line'>                    <span class="p">{</span>
</span><span class='line'>                        <span class="nx">ig</span><span class="p">.</span><span class="nx">game</span><span class="p">.</span><span class="nx">spawnEntity</span><span class="p">(</span> <span class="nx">EntityBullet</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span> <span class="o">+</span> <span class="mi">20</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span> <span class="o">+</span> <span class="mi">15</span><span class="p">,</span> <span class="p">{</span><span class="nx">flip</span><span class="o">:</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">}</span> <span class="p">);</span>
</span><span class='line'>                    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// set the current animation, based on the player&#39;s speed</span>
</span><span class='line'>                <span class="k">if</span><span class="p">(</span> <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">y</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">currentAnim</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">anims</span><span class="p">.</span><span class="nx">jump</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>                <span class="k">else</span> <span class="k">if</span><span class="p">(</span> <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">y</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">currentAnim</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">anims</span><span class="p">.</span><span class="nx">fall</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>                <span class="k">else</span> <span class="k">if</span><span class="p">(</span> <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">x</span> <span class="o">!=</span> <span class="mi">0</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">currentAnim</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">anims</span><span class="p">.</span><span class="nx">run</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>                <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">currentAnim</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">anims</span><span class="p">.</span><span class="nx">idle</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">currentAnim</span><span class="p">.</span><span class="nx">flip</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// move!</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">();</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">});</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>        <span class="nx">EntityBullet</span> <span class="o">=</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
</span><span class='line'>            <span class="nx">size</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">4</span><span class="p">},</span>
</span><span class='line'>            <span class="nx">offset</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">2</span><span class="p">},</span>
</span><span class='line'>            <span class="nx">maxVel</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="mi">200</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">200</span><span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">bounciness</span><span class="o">:</span> <span class="mf">0.6</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">gravityFactor</span><span class="o">:</span><span class="p">.</span><span class="mi">1</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">type</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">NONE</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">checkAgainst</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">B</span><span class="p">,</span> <span class="c1">// Check Against B - our evil enemy group</span>
</span><span class='line'>            <span class="nx">collides</span><span class="o">:</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">COLLIDES</span><span class="p">.</span><span class="nx">PASSIVE</span><span class="p">,</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">animSheet</span><span class="o">:</span> <span class="k">new</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">AnimationSheet</span><span class="p">(</span> <span class="s1">&#39;media/bullet1.png&#39;</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="p">),</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">bounceCounter</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>            <span class="nx">init</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">(</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span> <span class="p">);</span>
</span><span class='line'>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="p">(</span><span class="nx">settings</span><span class="p">.</span><span class="nx">flip</span> <span class="o">?</span> <span class="o">-</span><span class="k">this</span><span class="p">.</span><span class="nx">maxVel</span><span class="p">.</span><span class="nx">x</span> <span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">maxVel</span><span class="p">.</span><span class="nx">x</span><span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">y</span> <span class="o">=</span> <span class="o">-</span><span class="mi">20</span><span class="p">;</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span> <span class="s1">&#39;idle&#39;</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">);</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">handleMovementTrace</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">res</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">(</span> <span class="nx">res</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">if</span><span class="p">(</span> <span class="nx">res</span><span class="p">.</span><span class="nx">collision</span><span class="p">.</span><span class="nx">x</span> <span class="o">||</span> <span class="nx">res</span><span class="p">.</span><span class="nx">collision</span><span class="p">.</span><span class="nx">y</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>                    <span class="c1">// only bounce 3 times</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">bounceCounter</span><span class="o">++</span><span class="p">;</span>
</span><span class='line'>                    <span class="k">if</span><span class="p">(</span> <span class="k">this</span><span class="p">.</span><span class="nx">bounceCounter</span> <span class="o">&gt;</span> <span class="mi">3</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                        <span class="k">this</span><span class="p">.</span><span class="nx">kill</span><span class="p">();</span>
</span><span class='line'>                    <span class="p">}</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">check</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">other</span> <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="nx">other</span><span class="p">.</span><span class="nx">receiveDamage</span><span class="p">(</span> <span class="mi">10</span><span class="p">,</span> <span class="k">this</span> <span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">kill</span><span class="p">();</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">});</span>
</span><span class='line'>
</span><span class='line'>    <span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>Fire Entity  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="cm">/**</span>
</span><span class='line'><span class="cm"> * Author: Mark Wagner</span>
</span><span class='line'><span class="cm"> * Date: 1/31/13</span>
</span><span class='line'><span class="cm"> * Time: 6:28 PM</span>
</span><span class='line'><span class="cm"> */</span>
</span><span class='line'>
</span><span class='line'><span class="nx">ig</span><span class="p">.</span><span class="nx">module</span><span class="p">(</span>
</span><span class='line'>    <span class="s1">&#39;game.entities.fire&#39;</span>
</span><span class='line'><span class="p">)</span>
</span><span class='line'><span class="p">.</span><span class="nx">requires</span><span class="p">(</span>
</span><span class='line'>    <span class="s1">&#39;impact.entity&#39;</span>
</span><span class='line'><span class="p">)</span>
</span><span class='line'>    <span class="p">.</span><span class="nx">defines</span><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="nx">EntityFire</span> <span class="o">=</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
</span><span class='line'>            <span class="nx">size</span><span class="o">:</span><span class="p">{</span><span class="nx">x</span><span class="o">:</span><span class="mi">20</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="mi">20</span><span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">maxVel</span><span class="o">:</span><span class="p">{</span><span class="nx">x</span><span class="o">:</span><span class="mi">100</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="mi">100</span><span class="p">},</span>
</span><span class='line'>            <span class="nx">friction</span><span class="o">:</span><span class="p">{</span><span class="nx">x</span><span class="o">:</span><span class="mi">150</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="mi">100</span><span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">type</span><span class="o">:</span><span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">B</span><span class="p">,</span> <span class="c1">// Evil enemy group</span>
</span><span class='line'>            <span class="nx">checkAgainst</span><span class="o">:</span><span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">TYPE</span><span class="p">.</span><span class="nx">A</span><span class="p">,</span> <span class="c1">// Check against friendly</span>
</span><span class='line'>            <span class="nx">collides</span><span class="o">:</span><span class="nx">ig</span><span class="p">.</span><span class="nx">Entity</span><span class="p">.</span><span class="nx">COLLIDES</span><span class="p">.</span><span class="nx">PASSIVE</span><span class="p">,</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">health</span><span class="o">:</span><span class="mi">10</span><span class="p">,</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>            <span class="nx">speed</span><span class="o">:</span><span class="mi">0</span><span class="p">,</span>
</span><span class='line'>            <span class="nx">flip</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">animSheet</span><span class="o">:</span><span class="k">new</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">AnimationSheet</span><span class="p">(</span><span class="s1">&#39;media/fire2.png&#39;</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">21</span><span class="p">),</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>            <span class="nx">init</span><span class="o">:</span><span class="kd">function</span> <span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">,</span> <span class="nx">settings</span><span class="p">);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span><span class="s1">&#39;idle&#39;</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]);</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">addAnim</span><span class="p">(</span><span class="s1">&#39;crawl&#39;</span><span class="p">,</span> <span class="mf">0.08</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]);</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>            <span class="nx">update</span><span class="o">:</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span><span class='line'>                <span class="c1">// near an edge? return!</span>
</span><span class='line'>                <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ig</span><span class="p">.</span><span class="nx">game</span><span class="p">.</span><span class="nx">collisionMap</span><span class="p">.</span><span class="nx">getTile</span><span class="p">(</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span> <span class="o">+</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">?</span> <span class="o">+</span><span class="mi">4</span> <span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">size</span><span class="p">.</span><span class="nx">x</span> <span class="o">-</span> <span class="mi">4</span><span class="p">),</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">size</span><span class="p">.</span><span class="nx">y</span> <span class="o">+</span> <span class="mi">1</span>
</span><span class='line'>                <span class="p">)</span>
</span><span class='line'>                    <span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">=</span> <span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>                <span class="kd">var</span> <span class="nx">xdir</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">?</span> <span class="o">-</span><span class="mi">1</span> <span class="o">:</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">vel</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">speed</span> <span class="o">*</span> <span class="nx">xdir</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">();</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>            <span class="nx">handleMovementTrace</span><span class="o">:</span><span class="kd">function</span> <span class="p">(</span><span class="nx">res</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">this</span><span class="p">.</span><span class="nx">parent</span><span class="p">(</span><span class="nx">res</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>                <span class="c1">// collision with a wall? return!</span>
</span><span class='line'>                <span class="k">if</span> <span class="p">(</span><span class="nx">res</span><span class="p">.</span><span class="nx">collision</span><span class="p">.</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                    <span class="k">this</span><span class="p">.</span><span class="nx">flip</span> <span class="o">=</span> <span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">flip</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>            <span class="p">},</span>
</span><span class='line'>
</span><span class='line'>            <span class="nx">check</span><span class="o">:</span><span class="kd">function</span> <span class="p">(</span><span class="nx">other</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="nx">other</span><span class="p">.</span><span class="nx">receiveDamage</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="k">this</span><span class="p">);</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">});</span>
</span><span class='line'>
</span><span class='line'>    <span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>But I still needed a bad guy to shoot, and I didn&#8217;t feel like I had the time to set about drawing up
a doodle robot like I had originally planned. Well we are internet people and no one likes a troll. That&#8217;s when I had the thought
to use the trollface for my bad guy.  I found a internet memes face photoshop brush set and created my trollface sprite.</p>

<p><img class="left" src="http://blog.coderow.com/images/posts/trollface.png"></p>

<p>The entity would be simple&#8230; just like the fire but moving, copy and paste fire, rename, make move, and Done.</p>

<p>Now I had some basic entities and assets so I started up the impactjs level editor: weltmeister. And started putting the assets
and the entities together.</p>

<p><img src="http://blog.coderow.com/images/posts/weltmeister.png"></p>

<p>Setup some key binding and away we go:</p>

<figure class='code'><figcaption><span>game init - key bindings  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'>   <span class="nx">init</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>      <span class="c1">// Initialize your game here; bind keys etc.</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">music</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="s1">&#39;media/background.*&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">music</span><span class="p">.</span><span class="nx">volume</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">music</span><span class="p">.</span><span class="nx">play</span><span class="p">();</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">KEY</span><span class="p">.</span><span class="nx">LEFT_ARROW</span><span class="p">,</span> <span class="s1">&#39;left&#39;</span> <span class="p">);</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">KEY</span><span class="p">.</span><span class="nx">RIGHT_ARROW</span><span class="p">,</span> <span class="s1">&#39;right&#39;</span> <span class="p">);</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">KEY</span><span class="p">.</span><span class="nx">X</span><span class="p">,</span> <span class="s1">&#39;jump&#39;</span> <span class="p">);</span>
</span><span class='line'>        <span class="nx">ig</span><span class="p">.</span><span class="nx">input</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span> <span class="nx">ig</span><span class="p">.</span><span class="nx">KEY</span><span class="p">.</span><span class="nx">C</span><span class="p">,</span> <span class="s1">&#39;shoot&#39;</span> <span class="p">);</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>        <span class="k">this</span><span class="p">.</span><span class="nx">loadLevel</span><span class="p">(</span><span class="nx">LevelOne</span><span class="p">);</span>
</span><span class='line'>  <span class="p">},</span>
</span></code></pre></td></tr></table></div></figure>


<h2>And Here it is</h2>

<h1><a href="http://doodlemn.herokuapp.com">Doodle Game</a></h1>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/db4ea85d0a1d1bca00fe9012c08e3521?size=50" alt="Mark Wagner" />
	</div>
	
	<div class="author-about">
		<h3>Mark Wagner, 			
			<a href="http://twitter.com/theSociableme">@theSociableme</a>
			</h3>
		<p>Developer at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Wayback Machine]]></title>
    <link href="http://blog.coderow.com/2012/08/30/the-wayback-machine/"/>
    <updated>2012-08-30T10:38:00-05:00</updated>
    <id>http://blog.coderow.com/2012/08/30/the-wayback-machine</id>
    <content type="html"><![CDATA[<p><img class="left" src="http://blog.coderow.com/images/posts/Waybackmachine3.png" title="" ></p>

<p>Today in the office we were trying to best each other with our oldest site or piece of technology still publicy available.  Here&#8217;s what we came up with:</p>

<!-- more -->


<h3><a href="http://www.tsc1890.com">Turtle&#8217;s Social Centre</a> (1999)</h3>

<p><em>Auteur:</em> Kelly Heikkila (me)<br/>
<em>Cutting Edge Tech:</em>  Dreamweaver, JavaScript, Pearl and lots &#8216;o tables</p>

<p>I&#8217;m happy to say that this site is still in use and generating traffic for a great historic banquet center in Shakopee. Bonus points for revenue generation and longevity.</p>

<h3><a href="http://web.archive.org/web/20110204151654/http://hamlintruefitness.com/">Hamlin True Fitness</a> (2008)</h3>

<p><em>Auteur:</em> Benjamin Gramlich<br/>
<em>Cutting Edge Tech:</em>  HTML, CSS and JavaScipt with MooTools</p>

<p>The classic friend-of-a-friend website built for multiple hundreds of dollars.  Since I&#8217;m older than 40, I don&#8217;t consider 2008 &#8220;Way Back&#8221;, but we&#8217;ll give Benjamin a break since he&#8217;s only 4 in dog years.</p>

<h3><a href="http://web.archive.org/web/20020524215518/http://www.oralinux.org/">OraLinux</a> (1999)</h3>

<p><em>Auteur:</em> Mark Wagner<br/>
<em>Cutting Edge Tech:</em> Lovingly hand-crafted HTML.  There may be some actual CSS involved, as well.  Hard to tell.</p>

<p>It&#8217;s Oracle on Linux, duh.  Mark also gets bonus points for answering the age old question &#8220;What makes an effective personal home page?&#8221;.  Now you know.</p>

<h3><a href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PALL&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&amp;r=1&amp;f=G&amp;l=50&amp;s1=5628030.PN.&amp;OS=PN/5628030&amp;RS=PN/5628030">Virtual Modem Driver</a> (1996)</h3>

<p><em>Auteur:</em> Steve Tuckner<br/>
<em>Cutting Edge Tech:</em>  Written in C (he thinks &#8211; the 90&#8217;s are fuzzy for Steve)</p>

<p>Yes. This is a patent for Mr. Tuckner.  He&#8217;s a big deal in the virtual fax world beyond being a big deal in the Ruby, iOS, RubyMotion and educational language circles.</p>

<h3><a href="http://iatse13.org/">IATSE Local 13</a> (2005)</h3>

<p><em>Auteur:</em> Norm Orstad<br/>
<em>Cutting Edge Tech:</em>  Originally written in Rails, but the source exported to static HTML and hosted in-office.</p>

<p>Who knew you could embed style tags in form posts?  Awesome.  Bonus points as this site is also still in active use.</p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/112477dc77ea0b9cd1562c6c11c3310b?size=50" alt="Kelly Heikkila" />
	</div>
	
	<div class="author-about">
		<h3>Kelly Heikkila, 			
			<a href="http://twitter.com/k2heikkila">@k2heikkila</a>
			</h3>
		<p>Founder at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Building an iOS Universal Static Library]]></title>
    <link href="http://blog.coderow.com/2012/08/23/building-an-ios-universal-static-library/"/>
    <updated>2012-08-23T08:42:00-05:00</updated>
    <id>http://blog.coderow.com/2012/08/23/building-an-ios-universal-static-library</id>
    <content type="html"><![CDATA[<p>If you have only built applications in iOS, let this be a gentle introduction
to creating static libraries for iOS applications. The reasons for doing this
are multiple. You may have a set of applications that need to share code
with a very well defined interface. You may want to distribute a library
to your customers to allow them to build in some of your technology into their
application. You may want to use some Objective-C code into your RubyMotion
project. In any case, here is a simple example to take you from an app where
the code is all together, to one that uses a library for some of the code.</p>

<!-- more -->


<h2>The Starting App</h2>

<p>The app that I am using to demonstrate a static library is very simple. There
is a class for the view controller and a &#8220;computation&#8221; class that will be
in the library. There is also an application delegate class to get this started.</p>

<p>To create this app, go to XCode and create an empty sample application called
TheQuestion.</p>

<p><img src="http://blog.coderow.com/images/posts/new-empty-application.png" title="" ></p>

<p>From there, right click on the yellow TheQuestion folder and select New File&#8230;.
Create an Objective-C class from the iOS | Cocoa Touch menu. Have UIViewController
be the superclass and have the class name be QuestionViewController. Do New File
again and this time create a class called TheAnswer with a superclass of
NSObject.</p>

<p>You can then copy and paste the following code snippets in.</p>

<h3>AppDelegate.m</h3>

<figure class='code'><figcaption><span>AppDelegate.m - in import section  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cp">#import &quot;QuestionViewController.h&quot;</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>AppDelegate.m - before [self&#46;window makeKeyAndVisible]  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="n">QuestionViewController</span> <span class="o">*</span><span class="n">questionViewController</span> <span class="o">=</span> <span class="p">[[</span><span class="n">QuestionViewController</span> <span class="n">alloc</span><span class="p">]</span> <span class="n">init</span><span class="p">];</span>
</span><span class='line'><span class="n">self</span><span class="p">.</span><span class="n">window</span><span class="p">.</span><span class="n">rootViewController</span> <span class="o">=</span> <span class="n">questionViewController</span><span class="p">;</span>
</span><span class='line'><span class="n">self</span><span class="p">.</span><span class="n">window</span><span class="p">.</span><span class="n">rootViewController</span><span class="p">.</span><span class="n">wantsFullScreenLayout</span> <span class="o">=</span> <span class="n">true</span><span class="p">;</span>
</span></code></pre></td></tr></table></div></figure>


<h3>QuestionViewController.h</h3>

<figure class='code'><figcaption><span>QuestionViewController.h  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cp">#import &lt;UIKit/UIKit.h&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">QuestionViewController</span> : <span class="nc">UIViewController</span> <span class="p">{</span>
</span><span class='line'>    <span class="n">UILabel</span> <span class="o">*</span><span class="n">answerLabel</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">UILabel</span> <span class="o">*</span><span class="n">answerLabel</span><span class="p">;</span>
</span><span class='line'><span class="k">@end</span>
</span></code></pre></td></tr></table></div></figure>


<h3>QuestionViewController.m</h3>

<figure class='code'><figcaption><span>QuestionViewController.m  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cp">#import &quot;QuestionViewController.h&quot;</span>
</span><span class='line'><span class="cp">#import &quot;TheAnswer.h&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@implementation</span> <span class="nc">QuestionViewController</span>
</span><span class='line'>
</span><span class='line'><span class="k">@synthesize</span> <span class="n">answerLabel</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">loadView</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="p">[</span><span class="n">super</span> <span class="n">loadView</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">UILabel</span> <span class="o">*</span><span class="n">questionLabel</span> <span class="o">=</span> <span class="p">[[</span><span class="n">UILabel</span> <span class="n">alloc</span><span class="p">]</span> <span class="nl">initWithFrame:</span> <span class="n">CGRectMake</span><span class="p">(</span><span class="mf">10.0</span><span class="p">,</span> <span class="mf">50.0</span><span class="p">,</span> <span class="mf">300.0</span><span class="p">,</span> <span class="mf">200.0</span><span class="p">)];</span>
</span><span class='line'>    <span class="n">questionLabel</span><span class="p">.</span><span class="n">numberOfLines</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>    <span class="n">questionLabel</span><span class="p">.</span><span class="n">lineBreakMode</span> <span class="o">=</span> <span class="n">UILineBreakModeWordWrap</span><span class="p">;</span>
</span><span class='line'>    <span class="n">questionLabel</span><span class="p">.</span><span class="n">textAlignment</span> <span class="o">=</span> <span class="n">UITextAlignmentCenter</span><span class="p">;</span>
</span><span class='line'>    <span class="n">questionLabel</span><span class="p">.</span><span class="n">text</span> <span class="o">=</span> <span class="s">@&quot;What is the answer to life, the universe and everything?&quot;</span><span class="p">;</span>
</span><span class='line'>    <span class="n">questionLabel</span><span class="p">.</span><span class="n">font</span> <span class="o">=</span> <span class="p">[</span><span class="n">UIFont</span> <span class="nl">systemFontOfSize:</span> <span class="mf">16.0</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">answerLabel</span> <span class="o">=</span> <span class="p">[[</span><span class="n">UILabel</span> <span class="n">alloc</span><span class="p">]</span> <span class="nl">initWithFrame:</span> <span class="n">CGRectMake</span><span class="p">(</span><span class="mf">10.0</span><span class="p">,</span> <span class="mf">250.0</span><span class="p">,</span> <span class="mf">300.0</span><span class="p">,</span> <span class="mf">200.0</span><span class="p">)];</span>
</span><span class='line'>    <span class="n">answerLabel</span><span class="p">.</span><span class="n">textAlignment</span> <span class="o">=</span> <span class="n">UITextAlignmentCenter</span><span class="p">;</span>
</span><span class='line'>    <span class="n">answerLabel</span><span class="p">.</span><span class="n">font</span> <span class="o">=</span> <span class="p">[</span><span class="n">UIFont</span> <span class="nl">boldSystemFontOfSize:</span> <span class="mf">24.0</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'>    <span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">view</span> <span class="nl">addSubview:</span> <span class="n">questionLabel</span><span class="p">];</span>
</span><span class='line'>    <span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">view</span> <span class="nl">addSubview:</span> <span class="n">answerLabel</span><span class="p">];</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">viewDidLoad</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="p">[</span><span class="n">super</span> <span class="n">viewDidLoad</span><span class="p">];</span>
</span><span class='line'>  <span class="c1">// Do any additional setup after loading the view.</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">TheAnswer</span> <span class="o">*</span><span class="n">theAnswer</span> <span class="o">=</span> <span class="p">[[</span><span class="n">TheAnswer</span> <span class="n">alloc</span><span class="p">]</span> <span class="n">init</span><span class="p">];</span>
</span><span class='line'>    <span class="n">answerLabel</span><span class="p">.</span><span class="n">text</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nl">stringWithFormat:</span> <span class="s">@&quot;%d&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">theAnswer</span> <span class="n">ofLifeTheUniverseAndEverything</span><span class="p">]];</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nf">shouldAutorotateToInterfaceOrientation:</span><span class="p">(</span><span class="n">UIInterfaceOrientation</span><span class="p">)</span><span class="nv">interfaceOrientation</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="p">(</span><span class="n">interfaceOrientation</span> <span class="o">==</span> <span class="n">UIInterfaceOrientationPortrait</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">@end</span>
</span></code></pre></td></tr></table></div></figure>


<h3>TheAnswer.h</h3>

<figure class='code'><figcaption><span>TheAnswer.h  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cp">#import &lt;Foundation/Foundation.h&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">TheAnswer</span> : <span class="nc">NSObject</span>
</span><span class='line'>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nf">ofLifeTheUniverseAndEverything</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@end</span>
</span></code></pre></td></tr></table></div></figure>


<h3>TheAnswer.m</h3>

<figure class='code'><figcaption><span>TheAnswer.m  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cp">#import &quot;TheAnswer.h&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@implementation</span> <span class="nc">TheAnswer</span>
</span><span class='line'>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nf">ofLifeTheUniverseAndEverything</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="mi">42</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">@end</span>
</span></code></pre></td></tr></table></div></figure>


<p>The result should then be:</p>

<p><img src="http://blog.coderow.com/images/posts/iphone-screen.png" title="" ></p>

<h2>Creating the Static Library</h2>

<p>Now that we have a working app, we want to split the TheAnswer
class into its own library so we can share its goodness with
others. The first step is to create a new project that is a
Cocoa Touch Static library. Select New | Project&#8230; from the
XCode menu and then select Cocoa Touch Static Library and call
it the TheAnswerLibrary for the project name.</p>

<p><img src="http://blog.coderow.com/images/posts/new-static-library.png" title="" ></p>

<p>After creating the library, you should delete the two generated
files called TheAnswerLibrary.h and TheAnswerLibrary.m.</p>

<p><img src="http://blog.coderow.com/images/posts/delete-files.png" title="" ></p>

<p>Then add in TheAnswer.h and TheAnswer.m by:</p>

<ul>
<li>control-clicking on the yellow TheAnswerLibrary folder</li>
<li>selecting Add files to &#8220;TheAnswerLibrary&#8221;&#8230;</li>
<li>browsing over to the TheQuestion project</li>
<li>select both TheAnswer.h and TheAnswer.m</li>
</ul>


<p>You library is now complete. Do a build and it should build successfully.</p>

<h2>Creating the App that uses the new library</h2>

<p>The next step is to create a new project that will use the library.
Create an empty project like you did in the first step and call it
TheQuestionApp. Replace the AppDelegate.m with the AppDelegate.m from
the TheQuestion project. Add the QuestionViewController .h and .m files
to the TheQuestionApp folder like we did for the TheAnswer .h and .m
files for the static library.</p>

<p>If you try to build it at this point, you will get a TheAnswer.h not found
error. You can add TheAnswer.h from the TheQuestion project and it will
then compile but will fail to link.</p>

<h2>Getting the library file</h2>

<p>If you go back to the TheAnswerLibrary project and display the Products,
you will see the built library: libTheAnswerLibrary.a.</p>

<p><img src="http://blog.coderow.com/images/posts/the-answer-library-files.png" title="" ></p>

<p>You want to add this file to the TheQuestionApp project. To add it,
control-click on the libTheAnswerLibrary.a and select Show In Finder.
You can then just drag this into the TheQuestionApp project files.
Alternatively, you could copy the file and paste it into the TheQuestionApp&#8217;s
folder and then add it using the Add Files option. The former method
is nice because it just references the built library so that when you
rebuild the library the changes are reflected the next time you do a build
in the TheQuestionApp.</p>

<p>Now that have it in the TheQuestionApp, try to run it in the simulator.
You should get the following error:</p>

<p><img src="http://blog.coderow.com/images/posts/link-errors.png" title="" ></p>

<p>This happens because the library that you built only contains symbols
for ARM. The simulator builds are i386 builds. If you go back to the
TheAnswerLibrary project and selected the scheme
TheAnswerLibrary > iPhone 5.1 Simulator and did a build, then it would
build an i386 build. I tried to use that library to run in the simulator
but got a strange error which said:</p>

<p>ld: warning: ignoring file /Users/username/Projects/Blogging/combined_library/TheQuestionApp/TheQuestionApp/libTheAnswerLibrary.a, file was built for archive which is not the architecture being linked (i386): /Users/username/Projects/Blogging/combined_library/TheQuestionApp/TheQuestionApp/libTheAnswerLibrary.a</p>

<p>In order to get it to run on the simulator and on device, you need to
combine those libraries into one that contains all the symbols
and architectures that you need.</p>

<h2>Generating a combined library</h2>

<p>Go back to the TheAnswerLibrary project and select the blue project icon.
We want to add a new target. On the bottom of the project settings,
you can add a new target:</p>

<p><img src="http://blog.coderow.com/images/posts/add-target.png" title="" ></p>

<p>You want to add an Aggregate Target:</p>

<p><img src="http://blog.coderow.com/images/posts/add-aggregate-target.png" title="" ></p>

<p>Once the target is added, then you will add a custom script to
run for that target. There is a button on the lower right
of the project settings:</p>

<p><img src="http://blog.coderow.com/images/posts/add-build-phase.png" title="" ></p>

<p>After clicking on that, you want to add a run script.</p>

<p><img src="http://blog.coderow.com/images/posts/add-build-phase-add-run-script.png" title="" ></p>

<p>In the script editor section paste in the following script:</p>

<figure class='code'><figcaption><span>TheAnswer.m  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">XCODEBUILD_PATH</span><span class="o">=</span>/Applications/Xcode.app/Contents/Developer/usr/bin
</span><span class='line'><span class="nv">XCODEBUILD</span><span class="o">=</span><span class="nv">$XCODEBUILD_PATH</span>/xcodebuild
</span><span class='line'>
</span><span class='line'><span class="nv">$XCODEBUILD</span> -project TheAnswerLibrary.xcodeproj -target <span class="s2">&quot;TheAnswerLibrary&quot;</span> -sdk <span class="s2">&quot;iphonesimulator&quot;</span> -configuration <span class="s2">&quot;Release&quot;</span> clean build
</span><span class='line'><span class="nv">$XCODEBUILD</span> -project TheAnswerLibrary.xcodeproj -target <span class="s2">&quot;TheAnswerLibrary&quot;</span> -sdk <span class="s2">&quot;iphoneos&quot;</span> -configuration <span class="s2">&quot;Release&quot;</span> clean build
</span><span class='line'>
</span><span class='line'>lipo -create -output <span class="s2">&quot;build/libTheAnswerLibrary-Combined.a&quot;</span> <span class="s2">&quot;build/Release-iphoneos/libTheAnswerLibrary.a&quot;</span> <span class="s2">&quot;build/Release-iphonesimulator/libTheAnswerLibrary.a&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>This builds both versions of the library and then combines them into
one that has all the architectures you need. To try this out and see
if it is working first before putting it into XCode, create a build.sh
file in the root of your project and run it.</p>

<p>If you select the scheme Combined and then do a build, you will find
in your projects folder a build folder that contains the combined
library.</p>

<h2>Adding ARM6 support</h2>

<p>If you want your library to run on older iPhones, then you need to
add in ARM6 support. To enable this, you want to go to the
Build Settings and change the Architectures to include armv6, armv7
and i386. Here is the Architecture line of the build settings:</p>

<p><img src="http://blog.coderow.com/images/posts/architecture-setting.png" title="" ></p>

<p>When you select the column underneath blue TheAnswerLibrary you should see</p>

<p><img src="http://blog.coderow.com/images/posts/architecture-setting-default.png" title="" ></p>

<p>remove the only entry and add in armv6, armv7 and i386.</p>

<p><img src="http://blog.coderow.com/images/posts/architecture-setting-all.png" title="" ></p>

<p>Now if you build the combined target, your library will have all the
architectures you need.</p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/f29ca1ff621f67d063bb59bac70fa060?size=50" alt="Steve Tuckner" />
	</div>
	
	<div class="author-about">
		<h3>Steve Tuckner, 			
			<a href="http://twitter.com/boberetezeke">@boberetezeke</a>
			</h3>
		<p>Sr. Developer at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Learning Android: A Conceptual Overview]]></title>
    <link href="http://blog.coderow.com/2012/07/03/learning-android-a-conceptual-overview/"/>
    <updated>2012-07-03T13:00:00-05:00</updated>
    <id>http://blog.coderow.com/2012/07/03/learning-android-a-conceptual-overview</id>
    <content type="html"><![CDATA[<p><img class="left" src="http://blog.coderow.com/images/posts/Android-logo.jpg" title="" ></p>

<p>Being in the technology world is is hard to deny the shift toward mobile. Knowing this, I felt the desire to learn a
mobile technology. I chose the Android platform due to my past experience working with linux operating systems. My most
recent development experience has been focused around Ruby and Javascript. Over the years I have come to realize, that
I have an easier time learning new a new technology when I conceptually understand how
the pieces fit together.  Recently, I have started working my way through the &#8220;Android in Action&#8221; Book as a way to learn
Android development. Most of the code snippets are taken from my version of the sample applications built while going
through the book. This post covers some of the basic concepts that I have learned and how they fit together to build
an Android application. The concepts I will cover here:</p>

<ul>
<li>Intent</li>
<li>Intent Filters</li>
<li>Activity</li>
<li>View</li>
<li>Application</li>
<li>Android Manifest file</li>
</ul>


<p>The goal is to understand some of these basic building blocks and how they interconnect.</p>

<!-- more -->


<h2>Intent - A declaration of need</h2>

<p>Conceptually, Intents are a call to action in an Android application. An Intent describes what you want to do or what you need handled.
For Example:</p>

<ul>
<li>Start an Activity</li>
<li>Look up a contact</li>
<li>Display a web page</li>
<li>Ringing Phone</li>
<li>Incoming text message</li>
</ul>


<p>Intents are typically associated with a verb, such as VIEW, PICK, or EDIT.  When an Intent is dispatched, the
system evaluates Activities, Services, and Broadcast Receivers and sends the Intent to the most appropriate receiver.
This is know as an Implicit Intent.  The opposite, an Explicit Intent defines exactly what class should handle the intent.</p>

<h2>Intent Filter - A declaration of capability</h2>

<p>An Intent Filter defines the relationship between and Intent and the application.  It is an announcement of offered functionality.
And what will respond to that offer.</p>

<figure class='code'><figcaption><span>Intent Filter Example - Taken from the Android ManiFest File  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'>  <span class="nt">&lt;activity</span>
</span><span class='line'>      <span class="na">android:name=</span><span class="s">&quot;.ReviewCriteriaActivity&quot;</span>
</span><span class='line'>      <span class="na">android:label=</span><span class="s">&quot;@string/app_name&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>      <span class="c">&lt;!-- This intent filter is announcing that this activity will</span>
</span><span class='line'><span class="c">            be launched in response the intent dispatch for MAIN --&gt;</span>
</span><span class='line'>      <span class="nt">&lt;intent-filter&gt;</span>
</span><span class='line'>          <span class="nt">&lt;action</span> <span class="na">android:name=</span><span class="s">&quot;android.intent.action.MAIN&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>          <span class="nt">&lt;category</span> <span class="na">android:name=</span><span class="s">&quot;android.intent.category.LAUNCHER&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/intent-filter&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/activity&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>The xml above shows the ReviewCriteriaActivity Activity defining an Intent-filter that will determine which activity to launch
when the application receives android.intent.action.MAIN intent.</p>

<p><a href="http://developer.android.com/guide/components/intents-filters.html">More information on Intents and Intent Filters</a></p>

<h2>Activity - A window</h2>

<p>An Activity is what your end user interacts with.  The Activity takes care of implementing a window for you. Thinking
about an Activity in relation to that window this is helpful in understanding the scope of an activity. In your Activity
you will typically:</p>

<ul>
<li>Load your User interface (View) into the Window</li>
<li>Create references to your UI elements (buttons, images, labels, etc)</li>
<li>Bind your event handlers</li>
</ul>


<figure class='code'><figcaption><span>Activity Class Example  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ReviewCriteriaActivity</span> <span class="kd">extends</span> <span class="n">Activity</span> <span class="o">{</span>
</span><span class='line'>  <span class="c1">// define variables used within this activity</span>
</span><span class='line'>  <span class="kd">private</span> <span class="n">EditText</span> <span class="n">location</span><span class="o">;</span>
</span><span class='line'>  <span class="kd">private</span> <span class="n">Spinner</span>  <span class="n">cuisine</span><span class="o">;</span>
</span><span class='line'>  <span class="kd">private</span> <span class="n">Button</span>   <span class="n">getReviews</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="cm">/** Called when the activity is first created. */</span>
</span><span class='line'>  <span class="nd">@Override</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">(</span><span class="n">Bundle</span> <span class="n">savedInstanceState</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">(</span><span class="n">savedInstanceState</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">// Load View into Window</span>
</span><span class='line'>    <span class="n">setContentView</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">layout</span><span class="o">.</span><span class="na">review_criteria</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">// Bind UI to Variables</span>
</span><span class='line'>    <span class="n">location</span>   <span class="o">=</span> <span class="o">(</span><span class="n">EditText</span><span class="o">)</span> <span class="n">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">locationField</span><span class="o">);</span>
</span><span class='line'>    <span class="n">cuisine</span>    <span class="o">=</span> <span class="o">(</span><span class="n">Spinner</span><span class="o">)</span>  <span class="n">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">cuisineList</span><span class="o">);</span>
</span><span class='line'>    <span class="n">getReviews</span> <span class="o">=</span> <span class="o">(</span><span class="n">Button</span><span class="o">)</span>   <span class="n">findViewById</span><span class="o">(</span><span class="n">R</span><span class="o">.</span><span class="na">id</span><span class="o">.</span><span class="na">getReviewsButton</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="c1">// Setup a Click Handler</span>
</span><span class='line'>    <span class="n">getReviews</span><span class="o">.</span><span class="na">setOnClickListener</span><span class="o">(</span><span class="k">new</span> <span class="n">OnClickListener</span><span class="o">(){</span>
</span><span class='line'>        <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onClick</span><span class="o">(</span><span class="n">View</span> <span class="n">v</span><span class="o">){</span>
</span><span class='line'>            <span class="c1">// Validation Code Omitted //</span>
</span><span class='line'>            <span class="n">RestaurantFinderApplication</span> <span class="n">application</span> <span class="o">=</span> <span class="o">(</span><span class="n">RestaurantFinderApplication</span><span class="o">)</span> <span class="n">getApplication</span><span class="o">();</span>
</span><span class='line'>            <span class="c1">//set variables you need to move from one activity to the next</span>
</span><span class='line'>            <span class="n">application</span><span class="o">.</span><span class="na">setReviewCriteriaCuisine</span><span class="o">(</span><span class="n">cuisine</span><span class="o">.</span><span class="na">getSelectedItem</span><span class="o">().</span><span class="na">toString</span><span class="o">());</span>
</span><span class='line'>            <span class="n">application</span><span class="o">.</span><span class="na">setReviewCriteriaLocation</span><span class="o">(</span><span class="n">location</span><span class="o">.</span><span class="na">getText</span><span class="o">().</span><span class="na">toString</span><span class="o">());</span>
</span><span class='line'>            <span class="c1">// Intent to Start a New Activity</span>
</span><span class='line'>            <span class="n">Intent</span> <span class="n">intent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Intent</span><span class="o">(</span><span class="s">&quot;com.coderow.RestaurantFinder.LIST_VIEW&quot;</span><span class="o">);</span>
</span><span class='line'>            <span class="n">startActivity</span><span class="o">(</span><span class="n">intent</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">});</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>When moving data from one activity to the next you can use putExtra instance method on the intent. In this example we are moving
the values to the application so that they can be gotten to by any of the three activities defined in the app.</p>

<figure class='code'><figcaption><span>Intent putExtra  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'>  <span class="n">intent</span><span class="o">.</span><span class="na">putExtra</span><span class="o">(</span><span class="s">&quot;cuisine&quot;</span><span class="o">,</span> <span class="n">cuisine</span><span class="o">.</span><span class="na">getSelectedItem</span><span class="o">().</span><span class="na">toString</span><span class="o">());</span>
</span><span class='line'>  <span class="n">intent</span><span class="o">.</span><span class="na">putExtra</span><span class="o">(</span><span class="s">&quot;location&quot;</span><span class="o">,</span> <span class="n">location</span><span class="o">.</span><span class="na">getText</span><span class="o">().</span><span class="na">toString</span><span class="o">());</span>
</span></code></pre></td></tr></table></div></figure>


<p>Every Activity overrides the onCreate() method to initialize the the activity. As you can see this Activity references
the Intent that we have already covered. And the corresponding Intent filter is defined in the Android manifest file that
will be covered below.  The View is also referenced and we will cover that next.</p>

<p><a href="http://developer.android.com/reference/android/app/Activity.html">More information on the Activity and the Activity Lifecycle</a></p>

<h2>View - the User Interface</h2>

<p>Views define your UI layout, they are contained within the Activity. View&#8217;s respresent the elements your user can interact
with. They can be defined in XML or progammatically.  Layouts defined in XML tend to be easier to read, understand and maintain.</p>

<figure class='code'><figcaption><span>View XML definition   </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'>  <span class="nt">&lt;LinearLayout</span> <span class="na">xmlns:android=</span><span class="s">&quot;http://schemas.android.com/apk/res/android&quot;</span>
</span><span class='line'>    <span class="na">android:layout_width=</span><span class="s">&quot;fill_parent&quot;</span> <span class="na">android:layout_height=</span><span class="s">&quot;fill_parent&quot;</span> <span class="na">android:orientation=</span><span class="s">&quot;vertical&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;TextView</span> <span class="na">android:id=</span><span class="s">&quot;@+id/locationLabel&quot;</span>
</span><span class='line'>              <span class="na">android:layout_width=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>              <span class="na">android:layout_height=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>              <span class="na">android:text=</span><span class="s">&quot;Location (City, ST):&quot;</span>
</span><span class='line'>              <span class="na">android:textAppearance=</span><span class="s">&quot;?android:attr/textAppearanceMedium&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;EditText</span> <span class="na">android:layout_width=</span><span class="s">&quot;fill_parent&quot;</span>
</span><span class='line'>              <span class="na">android:layout_height=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>              <span class="na">android:id=</span><span class="s">&quot;@+id/locationField&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;TextView</span> <span class="na">android:id=</span><span class="s">&quot;@+id/cuisineLabel&quot;</span>
</span><span class='line'>              <span class="na">android:layout_width=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>              <span class="na">android:layout_height=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>              <span class="na">android:text=</span><span class="s">&quot;Cuisine:&quot;</span>
</span><span class='line'>              <span class="na">android:textAppearance=</span><span class="s">&quot;?android:attr/textAppearanceMedium&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;Spinner</span> <span class="na">android:id=</span><span class="s">&quot;@+id/cuisineList&quot;</span>
</span><span class='line'>             <span class="na">android:layout_width=</span><span class="s">&quot;match_parent&quot;</span>
</span><span class='line'>             <span class="na">android:layout_height=</span><span class="s">&quot;wrap_content&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;Button</span> <span class="na">android:id=</span><span class="s">&quot;@+id/getReviewsButton&quot;</span>
</span><span class='line'>            <span class="na">android:layout_width=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>            <span class="na">android:layout_height=</span><span class="s">&quot;wrap_content&quot;</span>
</span><span class='line'>            <span class="na">android:text=</span><span class="s">&quot;Get Reviews&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>  <span class="nt">&lt;/LinearLayout&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Here we have defined the UI elements that we bind variables to and attach event handlers on in the Activity.</p>

<p><a href="http://developer.android.com/reference/android/view/View.html">More information on the View</a></p>

<h2>Application - Global Space</h2>

<p>The Application is the globally accessible space that is used to persist data between Activities.  This is where you
maintain your application state.</p>

<figure class='code'><figcaption><span>Application Class Example  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">RestaurantFinderApplication</span> <span class="kd">extends</span> <span class="n">Application</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="kd">private</span> <span class="n">Review</span> <span class="n">currentReview</span><span class="o">;</span>
</span><span class='line'>  <span class="kd">private</span> <span class="n">String</span> <span class="n">reviewCriteriaCuisine</span><span class="o">;</span>
</span><span class='line'>  <span class="kd">private</span> <span class="n">String</span> <span class="n">reviewCriteriaLocation</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="kd">public</span> <span class="nf">RestaurantFinderApplication</span><span class="o">()</span> <span class="o">{</span> <span class="kd">super</span><span class="o">();</span> <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="nd">@Override</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onCreate</span><span class="o">()</span> <span class="o">{</span> <span class="kd">super</span><span class="o">.</span><span class="na">onCreate</span><span class="o">();</span> <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="nd">@Override</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onTerminate</span><span class="o">()</span> <span class="o">{</span> <span class="kd">super</span><span class="o">.</span><span class="na">onTerminate</span><span class="o">();</span> <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1">// getters</span>
</span><span class='line'>  <span class="kd">public</span> <span class="n">Review</span> <span class="nf">getCurrentReview</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">currentReview</span><span class="o">;</span> <span class="o">}</span>
</span><span class='line'>  <span class="kd">public</span> <span class="n">String</span> <span class="nf">getReviewCriteriaCuisine</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">reviewCriteriaCuisine</span><span class="o">;</span> <span class="o">}</span>
</span><span class='line'>  <span class="kd">public</span> <span class="n">String</span> <span class="nf">getReviewCriteriaLocation</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">reviewCriteriaLocation</span><span class="o">;</span> <span class="o">}</span>
</span><span class='line'>  <span class="c1">// setters</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setCurrentReview</span><span class="o">(</span><span class="n">Review</span> <span class="n">currentReview</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">currentReview</span> <span class="o">=</span> <span class="n">currentReview</span><span class="o">;</span> <span class="o">}</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setReviewCriteriaCuisine</span><span class="o">(</span><span class="n">String</span> <span class="n">reviewCriteriaCuisine</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">this</span><span class="o">.</span><span class="na">reviewCriteriaCuisine</span> <span class="o">=</span> <span class="n">reviewCriteriaCuisine</span><span class="o">;</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setReviewCriteriaLocation</span><span class="o">(</span><span class="n">String</span> <span class="n">reviewCriteriaLocation</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">this</span><span class="o">.</span><span class="na">reviewCriteriaLocation</span> <span class="o">=</span> <span class="n">reviewCriteriaLocation</span><span class="o">;</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>In the Activity we set these values so that they can be retrieved by the next activity that is launched.</p>

<p><a href="http://developer.android.com/reference/android/app/Application.html">To Learn More about the Application Class and Application Lifecycle</a></p>

<h2>Android Manifest file - Application definition</h2>

<p>Every application must have an AndroidManifest.xml file.</p>

<ul>
<li>It names the Java package which serves as your applications unique identifier.</li>
<li>Describes the applications components. (Activities, Services, etc)</li>
<li>Defines the minimum level of the Android API</li>
<li>Defines the permissions</li>
<li><a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">and more..</a></li>
</ul>


<figure class='code'><figcaption><span>Android Manifest file  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span>
</span><span class='line'><span class="nt">&lt;manifest</span> <span class="na">xmlns:android=</span><span class="s">&quot;http://schemas.android.com/apk/res/android&quot;</span>
</span><span class='line'>    <span class="na">package=</span><span class="s">&quot;com.coderow.RestaurantFinder&quot;</span>
</span><span class='line'>    <span class="na">android:versionCode=</span><span class="s">&quot;1&quot;</span>
</span><span class='line'>    <span class="na">android:versionName=</span><span class="s">&quot;1.0&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>
</span><span class='line'>  <span class="nt">&lt;application</span> <span class="na">android:icon=</span><span class="s">&quot;@drawable/restaurant_icon&quot;</span>
</span><span class='line'>  <span class="na">android:label=</span><span class="s">&quot;@string/app_short_name&quot;</span> <span class="na">android:name=</span><span class="s">&quot;RestaurantFinderApplication&quot;</span>
</span><span class='line'>  <span class="na">android:allowClearUserData=</span><span class="s">&quot;true&quot;</span> <span class="na">android:theme=</span><span class="s">&quot;@android:style/Theme.Black&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;uses-sdk</span> <span class="na">android:minSdkVersion=</span><span class="s">&quot;8&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>        <span class="nt">&lt;activity</span>
</span><span class='line'>            <span class="na">android:name=</span><span class="s">&quot;.ReviewCriteriaActivity&quot;</span>
</span><span class='line'>            <span class="na">android:label=</span><span class="s">&quot;@string/app_name&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>            <span class="nt">&lt;intent-filter&gt;</span>
</span><span class='line'>                <span class="nt">&lt;action</span> <span class="na">android:name=</span><span class="s">&quot;android.intent.action.MAIN&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>
</span><span class='line'>                <span class="nt">&lt;category</span> <span class="na">android:name=</span><span class="s">&quot;android.intent.category.LAUNCHER&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/intent-filter&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/activity&gt;</span>
</span><span class='line'>        <span class="nt">&lt;activity</span>
</span><span class='line'>            <span class="na">android:name=</span><span class="s">&quot;.ReviewListActivity&quot;</span>
</span><span class='line'>            <span class="na">android:label=</span><span class="s">&quot;@string/app_name_list_activity&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>            <span class="nt">&lt;intent-filter&gt;</span>
</span><span class='line'>                <span class="nt">&lt;action</span> <span class="na">android:name=</span><span class="s">&quot;com.coderow.RestaurantFinder.LIST_VIEW&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/intent-filter&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/activity&gt;</span>
</span><span class='line'>                <span class="nt">&lt;activity</span>
</span><span class='line'>            <span class="na">android:name=</span><span class="s">&quot;.ReviewDetailActivity&quot;</span>
</span><span class='line'>            <span class="na">android:label=</span><span class="s">&quot;@string/app_name_detail_activity&quot;</span> <span class="nt">&gt;</span>
</span><span class='line'>            <span class="nt">&lt;intent-filter&gt;</span>
</span><span class='line'>                <span class="nt">&lt;action</span> <span class="na">android:name=</span><span class="s">&quot;com.coderow.RestaurantFinder.DETAIL_VIEW&quot;</span> <span class="nt">/&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/intent-filter&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/activity&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/application&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="nt">&lt;/manifest&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Conclusion</h2>

<p>This concludes this brief overview into some of the building blocks used in Android application development.  I hope this
has been helpful and I look forward to questions and feedback.</p>

<h4>Attribution</h4>

<p>Portions of this page are reproduced from work created and shared by the <a href="http://developer.android.com/license.html">Android Open Source Project</a> and used according to terms described in the Creative Commons 2.5 Attribution License.</p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/db4ea85d0a1d1bca00fe9012c08e3521?size=50" alt="Mark Wagner" />
	</div>
	
	<div class="author-about">
		<h3>Mark Wagner, 			
			<a href="http://twitter.com/theSociableme">@theSociableme</a>
			</h3>
		<p>Developer at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Building with Octopress]]></title>
    <link href="http://blog.coderow.com/2012/06/20/building-with-octopress/"/>
    <updated>2012-06-20T08:00:00-05:00</updated>
    <id>http://blog.coderow.com/2012/06/20/building-with-octopress</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://octopress.org/images/logo.png"></p>

<p>When the team here at <a href="http://coderow.com">:coderow</a> decided to launch a blog, the first discussions at a development shop always begin with what technology to begin with. Static generators came up more than once. These type of site builders allow the team to worry about writing something of value instead of worrying about how the CMS works. No code runs on your server, just static HTML and CSS.</p>

<p>Some basic goals of our blog:</p>

<ul>
<li>Easily share code with the community</li>
<li>Be able to write freely</li>
<li>Keep it simple</li>
</ul>


<p>We chose <a href="http://octopress.org">Octopress</a>, because it answered all these and more.</p>

<!-- more -->


<h2>Sharing built in</h2>

<p>As a company we use open source as often as we can. This blog is our way of giving back snippets of code that we find useful. We hope that it becomes a resource the community uses and finds helpful.</p>

<p>Octopress gave the team an easy way to create a code block creation via <a href="http://daringfireball.net/projects/markdown/">Markdown</a> and <a href="http://ethanschoonover.com/solarized">Solarized</a> syntax highlighting .</p>

<h3>Example code block</h3>

<pre><code>``` [language] [title] [url] [link text]
code snippet
```
</code></pre>

<h3>creates</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>code snippet</span></code></pre></td></tr></table></div></figure>


<h2>Theming</h2>

<p>Octopress provides a nice list of <a href="https://github.com/imathis/octopress/wiki/List-Of-Octopress-Themes">themes</a>. We chose to customize the classic theme provided to match the design of our current site.
The key to customizing themes is to use the &#8216;custom&#8217; directory to edit everything.</p>

<pre><code>source/
  _includes/    # Main layout partials
    custom/     # &lt;- Customize head, header, navigation, footer, and sidebar here
    asides/     # Theme sidebar partials
    post/       # post metadata, sharing &amp; comment partials
  _layouts/     # layouts for pages, posts &amp; category archives
</code></pre>

<p>The default theme is a responsive web design which was important to us, as our main :coderow site is also responsive. This mobile first approach allows any web-enabled devices to see and view our content. The fluid design makes sure that the site will work on almost any future devices.  While responsive isn&#8217;t ideal for every situation, blogs and marketing sites work well using this approach.</p>

<h2>Sass and Compass</h2>

<p>As a regular user of <a href="http://sass-lang.com">Sass</a> I was able to jump in and port my design from the website to the blog with ease. This was also my first time dealing with <a href="http://compass-style.org/">compass</a> which provides preset vendor prefixes and the webs reusable patterns.</p>

<h2>Other components</h2>

<p>Octopress also provides great 3rd party support. We chose to use Twitter and Disqus.  These components are great because all we needed to provide was our username and they just work.</p>

<h2>Future</h2>

<p>That&#8217;s our quick story about using Octopress here at :coderow. In the future we hope to add more components that share more about what we&#8217;re up to, what we&#8217;re learning and the events we are attending.</p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/dd241b785a4d9d7ba208742ef8c96524?size=50" alt="Norm Orstad" />
	</div>
	
	<div class="author-about">
		<h3>Norm Orstad, 			
			<a href="http://twitter.com/norm0">@norm0</a>
			</h3>
		<p>Sr. Designer at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[why the ruby motion]]></title>
    <link href="http://blog.coderow.com/2012/06/10/why-the-ruby-motion/"/>
    <updated>2012-06-10T12:22:00-05:00</updated>
    <id>http://blog.coderow.com/2012/06/10/why-the-ruby-motion</id>
    <content type="html"><![CDATA[<p><img class="left" src="http://blog.coderow.com/images/posts/rubymotion.png" title="" ></p>

<p><a href="http://www.rubymotion.com">RubyMotion</a> was released into the wild on
May 3, 2012. Since then it
has been a wild ride of contributors that have already setup over 100
repositories on GitHub since its release. Why all the excitement? Well
for me, the excitement of being able to program in Ruby on a
platform with an awesome complete toolkit for writing apps is too
good to resist.</p>

<!--more-->


<p>When I started programming on iOS almost a year ago, I was coming from
doing Ruby on Rails applications. Objective-C seemed very verbose to me.
Just declaring an instance variable required:</p>

<ul>
<li>putting a declaration in the interface</li>
<li>putting a property declaration in the interface</li>
<li>putting a synthesize declarition in the implementation</li>
<li>putting a release in the dealloc</li>
</ul>


<p>Now we have <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html">ARC</a> so this pain is quite a bit reduced, but this just shows
how much more scaffolding was required when going from Ruby to
Objective-C.</p>

<p>In the next version of the compiler, we will be getting NSObject
literals to further reduce the pain of developing in Objective-C. You will
no longer need to do:</p>

<figure class='code'><figcaption><span>New literals in Objective-C </span><a href='http://clang.llvm.org/docs/ObjectiveCLiterals.html'>Apple Documentation</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='objective-c'><span class='line'><span class="n">NSArray</span> <span class="o">*</span><span class="n">array</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSArray</span> <span class="nl">arrayWithObjects:</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nl">numberWithInt:</span> <span class="mi">1</span><span class="p">],</span>
</span><span class='line'><span class="p">[</span><span class="n">NSNumber</span> <span class="nl">numberWithInt:</span> <span class="mi">2</span><span class="p">],</span> <span class="nb">nil</span><span class="p">];</span>
</span><span class='line'>
</span><span class='line'><span class="n">but</span> <span class="n">instead</span> <span class="n">you</span> <span class="n">can</span> <span class="n">just</span> <span class="n">go</span>
</span><span class='line'>
</span><span class='line'><span class="n">NSArray</span> <span class="o">*</span><span class="n">array</span> <span class="o">=</span> <span class="err">@</span><span class="p">[</span> <span class="err">@</span><span class="mi">1</span><span class="p">,</span> <span class="err">@</span><span class="mi">2</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<p>So with these coming what is RubyMotion offering above and beyond this?</p>

<p>As I see it, there are at least 4 things that RubyMotion offers to ease
iOS developement:</p>

<ul>
<li>method_missing</li>
<li>simple clean anonymous blocks</li>
<li>mixins</li>
<li>effective ways to write DSLs</li>
<li>less code</li>
</ul>


<h2>Method missing</h2>

<p>Method missing is an extremely powerful way to dynamically add functionality
without having to resort to eval or define_method (both of which are
for the time being disallowed). Objective-C has a form of method_missing
called forwardInvocation: that allows you to handle or forward the method.
Even though it is possible, it is much more cumbersome to use to muck
with the arguments and forward on a modified call than it would be in Ruby.
One use for this would be to use method missing to map onto the CoreData
Predicate functionality in a way that is much more &#8220;activerecord like&#8221; and
much less wordy.</p>

<h2>Simple clean anonymous blocks</h2>

<p>Compare iterating through a collection in objective C:</p>

<figure class='code'><figcaption><span>Enumeration in Objective-C</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='objective-c'><span class='line'><span class="p">[</span><span class="n">messageList</span> <span class="nl">enumerateObjectsUsingBlock:</span><span class="o">^</span><span class="p">(</span><span class="kt">id</span> <span class="n">obj</span><span class="p">,</span> <span class="n">NSUInteger</span> <span class="n">idx</span><span class="p">,</span> <span class="kt">BOOL</span> <span class="o">*</span><span class="n">stop</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="n">MyMessage</span> <span class="o">*</span><span class="n">message</span> <span class="o">=</span> <span class="n">obj</span><span class="p">;</span>
</span><span class='line'>  <span class="p">[</span><span class="n">message</span> <span class="n">callMethodOnMessage</span><span class="p">];</span>
</span><span class='line'><span class="p">}];</span>
</span></code></pre></td></tr></table></div></figure>


<p>To:</p>

<figure class='code'><figcaption><span>Enumeration in ruby</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='objective-c'><span class='line'><span class="n">messageList</span><span class="p">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">message</span><span class="o">|</span>
</span><span class='line'>  <span class="n">message</span><span class="p">.</span><span class="n">callMethodOnMessage</span>
</span><span class='line'><span class="n">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>Also, they can be used in place of delegation with a little sugar behind
it.  I wrote a simple wrapper for ActionSheet that allows the use of block
to handle the response so that everything is in one place.</p>

<figure class='code'><figcaption><span>ActionSheet replacement example</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="no">RBActionSheet</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="nb">self</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="ss">:other_button_titles</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="s2">&quot;option a&quot;</span><span class="p">,</span> <span class="s2">&quot;option b&quot;</span><span class="o">]</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">button_index</span><span class="o">|</span>
</span><span class='line'>  <span class="k">case</span> <span class="n">button_index</span>
</span><span class='line'>    <span class="k">when</span> <span class="mi">0</span>
</span><span class='line'>      <span class="no">NSLog</span><span class="p">(</span><span class="s2">&quot;option a pressed&quot;</span><span class="p">)</span>
</span><span class='line'>    <span class="k">when</span> <span class="mi">1</span>
</span><span class='line'>      <span class="no">NSLog</span><span class="p">(</span><span class="s2">&quot;option b pressed&quot;</span><span class="p">)</span>
</span><span class='line'>    <span class="k">when</span> <span class="mi">2</span>
</span><span class='line'>      <span class="no">NSLog</span><span class="p">(</span><span class="s2">&quot;2 pressed&quot;</span><span class="p">)</span>
</span><span class='line'>      <span class="c1"># cancelled</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Mixins</h2>

<p>More than once, I have been dying for mixins in Objective-C where I have
defined a do-everything BaseViewController so that delegates are available
for all the functionality required by my different view controllers. Being
able to mixin what I need for a set of required functionality would be
great.</p>

<p>In a project that I recently worked on, there were some view controllers
that required one set of background images (for portrait and landscape)
and others that required a different background. With mixins, this
functionality could be mixed in to the view controllers that needed them.</p>

<figure class='code'><figcaption><span>Contrived mixin example</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="k">module</span> <span class="nn">DarkBackground</span>
</span><span class='line'>  <span class="k">def</span> <span class="nf">loadView</span>
</span><span class='line'>    <span class="k">super</span>
</span><span class='line'>
</span><span class='line'>    <span class="nb">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="n">darkBackgroundImageView</span><span class="p">)</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">module</span> <span class="nn">LightBackground</span>
</span><span class='line'>  <span class="k">def</span> <span class="nf">loadView</span>
</span><span class='line'>    <span class="k">super</span>
</span><span class='line'>
</span><span class='line'>    <span class="nb">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="n">lightBackgroundImageView</span><span class="p">)</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="o">.</span><span class="n">.</span><span class="o">.</span><span class="n">.</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">MyDark1ViewController</span> <span class="o">&lt;</span> <span class="no">UIViewController</span>
</span><span class='line'>  <span class="kp">include</span> <span class="no">DarkBackground</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">MyDark2ViewController</span> <span class="o">&lt;</span> <span class="no">UIViewController</span>
</span><span class='line'>  <span class="kp">include</span> <span class="no">DarkBackground</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">MyLight1ViewController</span> <span class="o">&lt;</span> <span class="no">UIViewController</span>
</span><span class='line'>  <span class="kp">include</span> <span class="no">LightBackground</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Effective ways to write DSL&#8217;s</h2>

<p>When laying out UI&#8217;s by hand (not using Interface Builder), a DSL would
be great for doing these things. The Ruby Motion community has started a
DSL called teacup to do this. Below is an example:</p>

<figure class='code'><figcaption><span>Teacup example </span><a href='https://github.com/rubymotion/teacup'>Teacup on Github</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="no">Teacup</span><span class="o">::</span><span class="no">Stylesheet</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">:IPhone</span><span class="p">)</span> <span class="k">do</span>
</span><span class='line'>
</span><span class='line'>  <span class="n">style</span> <span class="ss">:field</span><span class="p">,</span>
</span><span class='line'>    <span class="n">left</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
</span><span class='line'>    <span class="n">top</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
</span><span class='line'>    <span class="n">height</span><span class="p">:</span> <span class="mi">50</span><span class="p">,</span>
</span><span class='line'>    <span class="n">width</span><span class="p">:</span>  <span class="mi">200</span>
</span><span class='line'>
</span><span class='line'>  <span class="n">style</span> <span class="ss">:search</span><span class="p">,</span> <span class="n">extends</span><span class="p">:</span> <span class="ss">:field</span><span class="p">,</span>
</span><span class='line'>    <span class="n">left</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
</span><span class='line'>    <span class="n">top</span><span class="p">:</span> <span class="mi">70</span><span class="p">,</span>
</span><span class='line'>    <span class="n">placeholder</span><span class="p">:</span> <span class="s1">&#39;Find something...&#39;</span>
</span><span class='line'>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># Controller</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">SomeController</span> <span class="o">&lt;</span> <span class="no">UIViewController</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1"># don&#39;t think of this as &quot;viewDidLoad&quot;, think of it as a nib file, that you</span>
</span><span class='line'>  <span class="c1"># are declaring in your UIViewController.</span>
</span><span class='line'>  <span class="n">layout</span> <span class="k">do</span>
</span><span class='line'>    <span class="n">subview</span><span class="p">(</span><span class="no">UITextField</span><span class="p">,</span> <span class="ss">:field</span><span class="p">)</span>
</span><span class='line'>    <span class="n">subview</span><span class="p">(</span><span class="no">UITextField</span><span class="p">,</span> <span class="ss">:search</span><span class="p">)</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>


<p>Of course, these DSL&#8217;s could be written for any Domain where the
developer is living, leading to clearer, simpler code.</p>

<h2>Less Code</h2>

<p>We know that Ruby has less scaffolding than statically compiled languages
like Objective-C, C, C++, and Java. There is no need for .h files.
Also, ruby in general is much more concise than Objective-C (as seen in
the enumeration code above. All this leads to less lines of code to
maintain and less visual clutter to get in the way of understanding the
code.</p>

<h2>Conclusion</h2>

<p>I am very excited to see what is coming and helping to participate
in what the Ruby Motion ecosystem will become. I will likely be
using Ruby Motion in a production app this summer and am looking
forward to using it in my day job.</p>

<p><em>Thanks to <a href="https://github.com/jonathanpenn">Jonathon Penn</a> @jonathonpenn and <a href="https://github.com/colinta">Colin Thomas-Arnold</a> for feedback on this blog post.</em></p>
<div class='octopress-authorbox'>
	<div class="author-pic">
		<img src="http://www.gravatar.com/avatar/f29ca1ff621f67d063bb59bac70fa060?size=50" alt="Steve Tuckner" />
	</div>
	
	<div class="author-about">
		<h3>Steve Tuckner, 			
			<a href="http://twitter.com/boberetezeke">@boberetezeke</a>
			</h3>
		<p>Sr. Developer at :coderow</p>
		<ul class="author-links">

		</ul>
	</div>
</div>]]></content>
  </entry>
  
</feed>
