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

  <title><![CDATA[code/caffeine]]></title>
  <link href="http://codecaffeine.github.com/atom.xml" rel="self"/>
  <link href="http://codecaffeine.github.com/"/>
  <updated>2012-04-25T19:28:52-04:00</updated>
  <id>http://codecaffeine.github.com/</id>
  <author>
    <name><![CDATA[Matt Thomas]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Surviving Mobile Constraints - PTW Presentation]]></title>
    <link href="http://codecaffeine.github.com/blog/2012/04/25/surviving-mobile-constraints-ptw-presentation/"/>
    <updated>2012-04-25T19:16:00-04:00</updated>
    <id>http://codecaffeine.github.com/blog/2012/04/25/surviving-mobile-constraints-ptw-presentation</id>
    <content type="html"><![CDATA[<p>This is a lightning talk I gave for the <em>Mobile Lightning</em> event at <a href="http://phillytechweek.com">Philly Tech Week 2012</a>.</p>

<script async class="speakerdeck-embed" data-id="4f988095f1dc4a002201bec9" data-ratio="1.3333333333333333" src="http://codecaffeine.github.com//speakerdeck.com/assets/embed.js"></script>


<p>You can also download the presentation: <a href="http://dl.dropbox.com/u/694887/SurvivingMobileConstraints.key">Keynote</a>, <a href="http://dl.dropbox.com/u/694887/SurvivingMobileConstraints.pdf">PDF with notes</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My UIViewController Container PhillyCocoa Presentation]]></title>
    <link href="http://codecaffeine.github.com/blog/2012/02/11/my-uiviewcontroller-container-phillycocoa-presentation/"/>
    <updated>2012-02-11T08:55:00-05:00</updated>
    <id>http://codecaffeine.github.com/blog/2012/02/11/my-uiviewcontroller-container-phillycocoa-presentation</id>
    <content type="html"><![CDATA[<p>Last Thursday I did a presentation on <em>UIViewController Containers</em> for <a href="http://phillycocoa.org">PhillyCocoa</a>. My presentation slides can be <a href="http://speakerdeck.com/u/mthomas/p/uiviewcontroller-containers">found on Speaker Deck</a>.</p>

<p>The example <strong>Card Stack Controller</strong> project I wrote can be <a href="https://github.com/codecaffeine/CardStackController">found on github</a>. Feel free to leave a comment if you have any questions, corrections, or other thoughts.</p>

<p><strong>update:</strong> If you&#8217;re having trouble running it on Xcode 4.2, please get the latest from the repository. I fixed a bug that caused a crash when built with Xcode 4.2</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Writing a “String to Number” Function in C]]></title>
    <link href="http://codecaffeine.github.com/blog/2011/12/17/writing-a-string-to-number-function-in-c/"/>
    <updated>2011-12-17T22:57:00-05:00</updated>
    <id>http://codecaffeine.github.com/blog/2011/12/17/writing-a-string-to-number-function-in-c</id>
    <content type="html"><![CDATA[<p>Years ago I was in a job interview where the employer took me to a whiteboard and asked me to implement <code>atoi()</code> in C. They also asked me to talk about any issues with my implementation. While there is hardly any reason to implement <code>atoi()</code> yourself nowadays, sometimes it&#8217;s good practice to try it anyway.</p>

<!--more-->


<h2>C Standard Library interface</h2>

<p>First lets looks at the function definition:</p>

<figure class='code'><figcaption><span></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='bash'><span class='line'><span class="nv">$ </span>man atoi
</span><span class='line'>atoi -- convert ASCII string to integer
</span><span class='line'>int atoi<span class="o">(</span>const char *str<span class="o">)</span>;
</span></code></pre></td></tr></table></div></figure>


<p>The C standard library method <code>atoi()</code> takes in a string (character array) and returns a number. You&#8217;ll actually notice that the man page deprecated <code>atoi()</code> in favor of <code>strtol()</code> which uses long instead of int. Our implementation will use a long instead of an int as well:</p>

<figure class='code'><figcaption><span></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='c'><span class='line'><span class="kt">long</span> <span class="n">cc_stringToNumber</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Number Theory</h2>

<p>Before we start digging into code, what do we actually mean when we write out a number? Well according to Wikipedia&#8217;s <a href="http://en.wikipedia.org/wiki/Number">entry on numbers</a>:</p>

<blockquote><p>In this base ten system, the rightmost digit of a natural number has a place value of one, and every other digit has a place value ten times that of the place value of the digit to its right.</p></blockquote>


<p>Lets look at the numbers 7, 42, and 365 to see how this would work:</p>

<p><strong>7</strong> = 7×1 = 7×10<sup>0</sup></p>

<p><strong>42</strong> = 4×10 + 2×1 = 4×10<sup>1</sup> + 2×10<sup>0</sup></p>

<p><strong>365</strong> = 3×100 + 6×10 + 5×1 = 3×10<sup>2</sup> + 6×10<sup>1</sup> + 5×10<sup>0</sup></p>

<h3>General Rule</h3>

<p>Each character in the number string can be represented by <strong> <em>n</em>×10<sup><em>p</em></sup></strong> where <strong><em>n</em></strong> is the <strong>numerical value</strong> of the character and <strong><em>p</em></strong> is the <strong>place value</strong> of the character decreasing from <em>stringLength-1</em> to <em>0</em></p>

<h4>Getting the Numerical Value for a Character</h4>

<p>According to the <a href="http://en.wikipedia.org/wiki/ASCII">ASCII Table</a>, numbers 0–9 have the values 48–57 respectively. We can get the numerical position by taking the ASCII value and subtracting 48.</p>

<h4>Getting the Place Value of the Character</h4>

<p>The place value is interesting to get because while most of our counting increases from left to right, the place value increases from right to left. We can figure out the place value by finding the string length using the function <code>strlen()</code></p>

<figure class='code'><figcaption><span></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='bash'><span class='line'><span class="nv">$ </span>man strlen
</span><span class='line'>strlen -- find length of string
</span><span class='line'>size_t strlen<span class="o">(</span>const char *s<span class="o">)</span>;
</span></code></pre></td></tr></table></div></figure>


<p>Once we know the string&#8217;s length, we can calculate the place value by subtracting the character&#8217;s position from left to right from the string&#8217;s length. We will also need to subtract 1 because the place value is 0 based—the right most place value is 10<sup><strong>0</strong></sup>.</p>

<h2>First Attempt</h2>

<figure class='code'><figcaption><span></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='objc'><span class='line'><span class="kt">long</span> <span class="nf">cc_stringToNumber</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="kt">long</span> <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">long</span> <span class="n">stringLength</span> <span class="o">=</span> <span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">position</span> <span class="o">&lt;</span> <span class="n">stringLength</span><span class="p">;</span> <span class="n">position</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">characterValue</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">position</span><span class="p">]</span> <span class="o">-</span> <span class="mi">48</span><span class="p">;</span>
</span><span class='line'>        <span class="kt">long</span> <span class="n">exponent</span> <span class="o">=</span> <span class="p">(</span><span class="n">stringLength</span> <span class="o">-</span> <span class="n">position</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>        <span class="kt">long</span> <span class="n">exponentValue</span> <span class="o">=</span> <span class="n">pow</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">exponent</span><span class="p">);</span>
</span><span class='line'>        <span class="n">returnValue</span> <span class="o">+=</span> <span class="n">characterValue</span> <span class="o">*</span> <span class="n">exponentValue</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">returnValue</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Lets see how it works:</p>

<div class="table-figure">
<table>
  <tr>
    <td><code>cc_stringToNumber("1234")</code></td>
    <td><strong>1234</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("0")</code></td>
    <td><strong>0</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("Foo")</code></td>
    <td><strong>2893</strong></td>
    <td style="color:Red;">Wrong!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("-42")</code></td>
    <td><strong>-258</strong></td>
    <td style="color:Red;">Wrong!</td>
  </tr>
</table>
</div>


<p>There are 2 issues here. The first is that we&#8217;re taking the integer value of each character wether they are a number or not. &#8216;F&#8217; has an ASCII value of 70 which means we calculate it&#8217;s value to be 70-48 or 22. &#8216;o&#8217; has an ASCII value of 111 so we calculate it&#8217;s value to be 63. This gives us the overall value: (22 * 10<sup>2)</sup> + (63 * 10<sup>1)</sup> + (63 * 10<sup>0)</sup> = 2893. We need a solution: If we encounter any character &lt; &#8216;0&#8217; or > &#8216;9&#8217;, we need to return 0 for the value.</p>

<h2>Second Attempt</h2>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="kt">long</span> <span class="nf">cc_stringToNumber</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="kt">long</span> <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">stringLength</span> <span class="o">=</span> <span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">position</span> <span class="o">&lt;</span> <span class="n">stringLength</span><span class="p">;</span> <span class="n">position</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="kt">char</span> <span class="n">currentCharacter</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">position</span><span class="p">];</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">currentCharacter</span> <span class="o">&lt;</span> <span class="sc">&#39;0&#39;</span> <span class="o">||</span> <span class="n">currentCharacter</span> <span class="o">&gt;</span> <span class="sc">&#39;9&#39;</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>            <span class="k">break</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>            <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">characterValue</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">position</span><span class="p">]</span> <span class="o">-</span> <span class="mi">48</span><span class="p">;</span>
</span><span class='line'>            <span class="kt">long</span> <span class="n">exponent</span> <span class="o">=</span> <span class="p">(</span><span class="n">stringLength</span> <span class="o">-</span> <span class="n">position</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>            <span class="kt">long</span> <span class="n">exponentValue</span> <span class="o">=</span> <span class="n">pow</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">exponent</span><span class="p">);</span>
</span><span class='line'>            <span class="n">returnValue</span> <span class="o">+=</span> <span class="n">characterValue</span> <span class="o">*</span> <span class="n">exponentValue</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="k">return</span> <span class="n">returnValue</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Lets see how it works:</p>

<div class="table-figure">
<table>
  <tr>
    <td><code>cc_stringToNumber("1234")</code></td>
    <td><strong>1234</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("0")</code></td>
    <td><strong>0</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("Foo")</code></td>
    <td><strong>0</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("-42")</code></td>
    <td><strong>0</strong></td>
    <td style="color:Red;">Wrong!</td>
  </tr>
</table>
</div>


<p>Well, this is an improvement, but we&#8217;re not handling negative numbers correctly. Negative numbers are hard for a couple of reason. The <code>-</code> sign will move the character positions off by one. The minus sign any other place in a number is also not valid numerical number. It either has to be at the beginning or not there at all.</p>

<p>Our solution is to look at the first character: If it&#8217;s not a minus sign, we&#8217;ll run the function as normal. If it is, we&#8217;ll run the function with a subset of the data</p>

<h2>Final Attempt</h2>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="kt">long</span> <span class="nf">cc_stringToNumber</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="kt">long</span> <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">stringLength</span> <span class="o">=</span> <span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">((</span><span class="n">stringLength</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="o">*</span><span class="n">string</span> <span class="o">==</span> <span class="sc">&#39;-&#39;</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>        <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">cc_positiveStringToNumber</span><span class="p">(</span><span class="o">++</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>        <span class="n">returnValue</span> <span class="o">=</span> <span class="n">cc_positiveStringToNumber</span><span class="p">(</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">return</span> <span class="n">returnValue</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="kt">long</span> <span class="nf">cc_positiveStringToNumber</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="kt">long</span> <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>    <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">stringLength</span> <span class="o">=</span> <span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">);</span>
</span><span class='line'>    <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">position</span> <span class="o">&lt;</span> <span class="n">stringLength</span><span class="p">;</span> <span class="n">position</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="kt">char</span> <span class="n">currentCharacter</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">position</span><span class="p">];</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="n">currentCharacter</span> <span class="o">&lt;</span> <span class="sc">&#39;0&#39;</span> <span class="o">||</span> <span class="n">currentCharacter</span> <span class="o">&gt;</span> <span class="sc">&#39;9&#39;</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="n">returnValue</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>            <span class="k">break</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>            <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">characterValue</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">position</span><span class="p">]</span> <span class="o">-</span> <span class="mi">48</span><span class="p">;</span>
</span><span class='line'>            <span class="kt">long</span> <span class="n">exponent</span> <span class="o">=</span> <span class="p">(</span><span class="n">stringLength</span> <span class="o">-</span> <span class="n">position</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>            <span class="kt">long</span> <span class="n">exponentValue</span> <span class="o">=</span> <span class="n">pow</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">exponent</span><span class="p">);</span>
</span><span class='line'>            <span class="n">returnValue</span> <span class="o">+=</span> <span class="n">characterValue</span> <span class="o">*</span> <span class="n">exponentValue</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="k">return</span> <span class="n">returnValue</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Lets see how it works:</p>

<div class="table-figure">
<table>
  <tr>
    <td><code>cc_stringToNumber("1234")</code></td>
    <td><strong>1234</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("0")</code></td>
    <td><strong>0</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("Foo")</code></td>
    <td><strong>0</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
  <tr>
    <td><code>cc_stringToNumber("-42")</code></td>
    <td><strong>-42</strong></td>
    <td style="color:green">Correct!</td>
  </tr>
</table>
</div>


<p>You&#8217;ll see I split up the function into two different methods. <code>cc_positiveStringToNumber()</code> assumes that the string is always positive and has our current logic. <code>cc_stringToNumber()</code> has the logic to handle the negative sign. If it encounters a negative sign as the first character (and has at least one more character after it), then it performs <code>cc_positiveStringToNumber()</code> with the minus sign stripped out (++string moves the string pointer forward a character).</p>

<p>This also handles just a minus sign and an empty string.</p>

<h2>In Conclusion</h2>

<p>While it may be fun and educational to implement a standard function, it&#8217;s worth noting that our method has a few limitations the C Standard Library functions don&#8217;t have. We don&#8217;t support the &#8220;+&#8221; sign for positive number (though this is an easy feature to add). More importantly, <code>strtol()</code> supports different bases like octal and hexadecimal. Finally, keep in mind that c standard library functions have been tested and optimized for years.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Cheap & Easy Buttons for iOS Developers]]></title>
    <link href="http://codecaffeine.github.com/blog/2011/12/08/cheap-and-easy-buttons-for-ios/"/>
    <updated>2011-12-08T18:06:00-05:00</updated>
    <id>http://codecaffeine.github.com/blog/2011/12/08/cheap-and-easy-buttons-for-ios</id>
    <content type="html"><![CDATA[<p>The UIButton controls in iOS are very basic. Just a white rounded rectangle with a gray border and a label. They&#8217;re made to look similar to a single grouped UITableView cell. Because of this, it&#8217;s easy to end up with a boring iOS app without creating your own images for button. So what&#8217;s a developer to do?</p>

<!--more-->


<p>My first bit of advice would be to work with a graphic designer. A graphic designer can help you create a style for you app and quickly create all the resources (including button images) you may need. Unfortunately, graphic designer don&#8217;t grow on trees and the good ones would need to be paid. For a professional quality app, you should really work with a graphic designer.</p>

<p>Sometimes though, you&#8217;re just looking for a quick pleasant looking button. Here are some great resources I use for creating button images.</p>

<p><strong>Apple&#8217;s <a href="http://developer.apple.com/library/iOS/#documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/Introduction/Introduction.html">Dashcode</a></strong> has a pretty powerful button maker. There are a bunch of preset button templates that you can choose from but Dashcode&#8217;s real power is the button inspector which has a lot of styles and effects.</p>

<p><img class="center" src="http://codecaffeine.github.com/images/ButtonStyle.png" width="264" height="434" title="Dashcode's Button Inspector" ></p>

<p><strong>Cédric Luthi&#8217;s <a href="https://github.com/0xced/UIKit-Artwork-Extractor">UIKit Artwork Extractor</a></strong> is an iOS Simulator app that can be used to download images from UIKit and various other iOS frameworks. You can search for images used the the framework like buttons and save these to your hard drive.</p>

<p><img class="center" src="http://codecaffeine.github.com/images/UIKitArtworkSearch.png" width="396" height="744" title="UIKit Artwork Inspector search" ></p>

<p>The UIArtwork Kit Extractor also has a tab that uses Apple&#8217;s private UIGlassButton class to create a real awesome looking glass button. Just don&#8217;t use the <a href="http://twitter.com/#!/schwa/status/9288691077">UIGlassButton code</a> in your shipping app. Otherwise you will probably be rejected from the App Store.</p>

<p><img class="center" src="http://codecaffeine.github.com/images/UIKitArtworkGlassButton.png" width="396" height="744" title="UIKit Artwork Inspector glass button creator" ></p>

<p><strong><a href="http://houseofbuttons.tumblr.com/">House of Buttons</a></strong> and <strong><a href="http://dribbble.com/search?q=button">Dribbble</a></strong> are great resources for getting button inspirations. Just don&#8217;t steal their work. More importantly, <a href="http://dribbble.com">Dribbble</a> is a great resource for meeting graphic designers so you can make quality apps.</p>

<p>Finally, if you are an <strong><a href="http://flyingmeat.com/acorn/">Acorn</a></strong> user, they have a pretty <a href="http://flyingmeat.com/acorn/docs/tutorials.html">awesome tutorial</a> including one on <a href="http://flyingmeat.com/acorn/docs/making%20a%20custom%20web%20button.html">making buttons</a> using vectors so you can resave different sizes. This is handy for dealing with retina display images.</p>
]]></content>
  </entry>
  
</feed>

