<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nklein software &#187; iphone</title>
	<atom:link href="http://nklein.com/tags/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://nklein.com</link>
	<description>software development and consulting</description>
	<lastBuildDate>Thu, 22 Dec 2011 04:42:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Casting to Integers Considered Harmful</title>
		<link>http://nklein.com/2009/08/casting-to-integers-considered-harmful/</link>
		<comments>http://nklein.com/2009/08/casting-to-integers-considered-harmful/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 18:46:14 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[rounding]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=707</guid>
		<description><![CDATA[Background Many years back, I wrote some ambient music generation code. The basic structure of the code is this: Take one queen and twenty or so drones in a thirty-two dimensional space. Give them each random positions and velocities. Limit the velocity and acceleration of the queen more than you limit the same for the [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>Many years back, I wrote <a href="http://old.nklein.com/products/rmusic/">some ambient <q>music</q> generation code</a>.  The basic structure of the code is this:  Take one <q>queen</q> and twenty or so <q>drones</q> in a thirty-two dimensional space.  Give them each random positions and velocities.  Limit the velocity and acceleration of the queen more than you limit the same for the drones.  Now, select some point at random for the queen to target.  Have the queen accelerate toward that target.  Have the drones accelerate toward the queen.  Use the average distance from the drones to the queens in the <img src="http://nklein.com/wp-content/plugins/easy-latex/cache/tex_5477186a84cc2c889974ca6fd01ca96f.png" title="i" style="vertical-align:-20%;" class="tex" alt="i" />-th dimension as the volume of the <img src="http://nklein.com/wp-content/plugins/easy-latex/cache/tex_5477186a84cc2c889974ca6fd01ca96f.png" title="i" style="vertical-align:-20%;" class="tex" alt="i" />-th note where the notes are logarithmically spaced across one octave.  Clip negative volumes to zero.  Every so often, or when the queen gets close to the target, give the queen a new target.</p>
<p>It makes for some interesting ambient noise that sounds a bit like movie space noises where the lumbering enemy battleship is looming in orbit as its center portion spins to create artificial gravity within.</p>
<p>I started working on an iPhone application based on this code.  The original code was in C++.  The conversion to Objective C was fairly straightforward and fairly painless (as I used the opportunity to try to <a href="http://nklein.com/2009/02/sapir-whorf-wit-programming-languages/">correct my own faults</a> by breaking things out into separate functions more often).</p>
<h3>Visualization troubles</h3>
<p><a href="http://nklein.com/wp-content/uploads/2009/08/uniform.png"><img src="http://nklein.com/wp-content/uploads/2009/08/uniform-300x225.png" alt="uniform" title="uniform" width="300" height="225" class="alignright size-medium wp-image-709" /></a><br />
The original code though chose random positions and velocities from uniform distributions.  The iPhone app is going to involve visualization as well as <q>auralization</q>.  The picture at the right here is a plot of five thousand points with each coordinate selected from a uniform distribution with range [-20,+20].  Because each axis value is chosen independently, it looks very unnatural.</p>
<p style="clear: both;">
<a href="http://nklein.com/wp-content/uploads/2009/08/gauss.png"><img src="http://nklein.com/wp-content/uploads/2009/08/gauss-300x225.png" alt="gauss" title="gauss" width="300" height="225" class="alignright size-medium wp-image-710" /></a><br />
What to do?  The obvious answer is to use <a href="http://en.wikipedia.org/wiki/Normal_distribution">Gaussian random variables</a> instead of uniform ones.  The picture at the right here is five thousand points with each coordinate selected from a Gaussian distribution with a standard-deviation of 10.  As you can see, this is much more natural looking.</p>
<h3 style="clear: both;">How did I generate the Gaussians?</h3>
<p>I have usually used the Box-Muller method of generating two Gaussian-distributed random variables given two uniformly-distributed random variables:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> random-gaussian <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>u1 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">random</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>u2 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">random</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>mag <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> <span style="color: #66cc66;">&#40;</span>* -<span style="color: #cc66cc;">2.0</span> <span style="color: #66cc66;">&#40;</span>log u1<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>ang <span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">2.0</span> pi u2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>values <span style="color: #66cc66;">&#40;</span>* mag <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cos</span> ang<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>* mag <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sin</span> ang<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>But, I found an article online that <a href="http://www.taygeta.com/random/gaussian.html">shows a more numerically stable version</a>:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> random-gaussian <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>flet <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>pick-in-circle <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#40;</span>loop as u1 <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">random</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>
                as u2 <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">random</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>
                as mag-squared <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span>+ <span style="color: #66cc66;">&#40;</span>* u1 u1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>* u2 u2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #b1b100;">when</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> mag-squared <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>values u1 u2 mag-squared<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>multiple-value-bind <span style="color: #66cc66;">&#40;</span>u1 u2 mag-squared<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>pick-in-circle<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>ww <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> <span style="color: #66cc66;">&#40;</span>/ <span style="color: #66cc66;">&#40;</span>* -<span style="color: #cc66cc;">2.0</span> <span style="color: #66cc66;">&#40;</span>log mag-squared<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> mag-squared<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>values <span style="color: #66cc66;">&#40;</span>* u1 ww<span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>* u2 ww<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>For a quick sanity check, I thought, <q>let&#8217;s just make sure it looks like a Gaussian.</q>  Here, I showed the code in Lisp, but the original code was in Objective-C.  I figured, <q>If I just change the function declaration, I can plop this into a short C program, run a few thousand trials into some histogram buckets, and see what I get.</q></p>
<h3>The trouble with zero</h3>
<p>So, here comes the problem with zero.  I had the following main loop:</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#define BUCKET_COUNT 33</span>
<span style="color: #339933;">#define STDDEV       8.0</span>
<span style="color: #339933;">#define ITERATIONS   100000</span>
&nbsp;
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> ii<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> ii <span style="color: #339933;">&lt;</span> ITERATIONS<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>ii <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> bb <span style="color: #339933;">=</span> val_to_bucket<span style="color: #009900;">&#40;</span> STDDEV <span style="color: #339933;">*</span> gaussian<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">&lt;=</span> bb <span style="color: #339933;">&amp;&amp;</span> bb <span style="color: #339933;">&lt;</span> BUCKET_COUNT <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #339933;">++</span>buckets<span style="color: #009900;">&#91;</span> bb <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span></pre></div>
<p>I now present you with three different implementations of the <em>val_to_bucket()</em> function.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> val_to_bucket<span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> _val <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span>_val <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> BUCKET_COUNT <span style="color: #339933;">/</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> val_to_bucket<span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> _val <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span> _val <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span> BUCKET_COUNT <span style="color: #339933;">/</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> val_to_bucket<span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> _val <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span> _val <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span> BUCKET_COUNT <span style="color: #339933;">/</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div>
<p>As you can probably guess, after years or reading trick questions, only the last one actually works as far as my main loop is concerned.  Why?  Every number between -1 and +1 becomes zero when you cast the double to an integer.  That&#8217;s twice as big a range as any other integer gets.  So, for the first implementation, the middle bucket has about twice as many things in it as it should.  For the second implementation, the first bucket has more things in it than it should.  For the final implementation, the non-existent bucket before the first one is the overloaded bucket.  In the end, I used this implementation instead so that I wouldn&#8217;t even bias non-existent buckets:</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> val_to_bucket<span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> _val <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span>lround<span style="color: #009900;">&#40;</span>_val<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> BUCKET_COUNT <span style="color: #339933;">/</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/08/casting-to-integers-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple Missed Their Own Boat On iPhone Backups</title>
		<link>http://nklein.com/2009/05/apple-missed-their-own-boat-on-iphone-backups/</link>
		<comments>http://nklein.com/2009/05/apple-missed-their-own-boat-on-iphone-backups/#comments</comments>
		<pubDate>Thu, 28 May 2009 20:22:04 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=454</guid>
		<description><![CDATA[We&#8217;ve been able to rearrange apps on our iPhones for a year now, right? We&#8217;ve been able to move apps around to different screens. For even longer than that, we&#8217;ve been able to reload our iPhones from backups. Why, oh why, does a backup not contain the information about which app icons are where? How [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been able to rearrange apps on our iPhones for a year now, right?  We&#8217;ve been able to move apps around to different screens.</p>
<p>For even longer than that, we&#8217;ve been able to reload our iPhones from backups.</p>
<p>Why, oh why, does a backup not contain the information about which app icons are where?  How hard is this?  I have 96 apps on my iPhone.  Every single one of them still remembers its data despite the fact that I had to wipe the phone and start over yesterday.  Sadly, the phone didn&#8217;t remember where any of the apps belong.</p>
<p>I spent the better (or <q>worse</q> as the case may be) part of an hour putting my apps back into a useful order.  I can find several tutorials on the iPhone developer site that demonstrate how one might save such data in a location that gets backed up.  Seriously&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/05/apple-missed-their-own-boat-on-iphone-backups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle App Makes Progress</title>
		<link>http://nklein.com/2009/05/kindle-app-makes-progress/</link>
		<comments>http://nklein.com/2009/05/kindle-app-makes-progress/#comments</comments>
		<pubDate>Tue, 26 May 2009 17:15:07 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone apps]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=441</guid>
		<description><![CDATA[Last month, I wrote about Four Ways eReader Beats Kindle on the iPhone. It looks like the 1.1 release of the Kindle iPhone app addresses the first of those four ways. They now let you select between portrait or landscape mode. It lets you turn pages by tapping or swiping. And, it lets you change [...]]]></description>
			<content:encoded><![CDATA[<p>Last month, I wrote about <a href="http://nklein.com/2009/04/four-ways-ereader-beats-kindle-on-the-iphone/">Four Ways eReader Beats Kindle on the iPhone</a>.  It looks like the 1.1 release of the Kindle iPhone app addresses the first of those four ways.</p>
<p>They now let you select between portrait or landscape mode.  It lets you turn pages by tapping or swiping.  And, it lets you change the background and text colors a bit.</p>
<p>I&#8217;m not terribly fond of its mechanism for letting you lock in landscape or portrait mode, but at least you can do it now.  And, I don&#8217;t have free range on color choices, but at least I have some choice.</p>
<p>I hope they tackle my other three points in later releases.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/05/kindle-app-makes-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eReader 2.1:  The Unbotching</title>
		<link>http://nklein.com/2009/05/ereader-21-the-unbotching/</link>
		<comments>http://nklein.com/2009/05/ereader-21-the-unbotching/#comments</comments>
		<pubDate>Mon, 11 May 2009 15:43:12 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone apps]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=318</guid>
		<description><![CDATA[I mentioned earlier that eReader totally dropped the ball on free content by dropping support for manybooks.net and other free eBook sites. I am happy to say that this functionality is restored in the latest version of eReader. I just tested it again to make sure it works. It seems peppier than before, too. It [...]]]></description>
			<content:encoded><![CDATA[<p>I mentioned <a href="http://nklein.com/2009/04/kindle-content-trumps-ereader/">earlier</a> that <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284499993&#038;mt=8">eReader</a> totally dropped the ball on free content by dropping support for <a href="http://manybooks.net/">manybooks.net</a> and other free eBook sites.</p>
<p>I am happy to say that this functionality is restored in the latest version of eReader.  I just tested it again to make sure it works.  It seems peppier than before, too.  It used to be a real pain to navigate around ManyBooks.net from within eReader.  Now, it uses ManyBooks.net&#8217;s mobile site.  It&#8217;s a much better experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/05/ereader-21-the-unbotching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Content Trumps eReader</title>
		<link>http://nklein.com/2009/04/kindle-content-trumps-ereader/</link>
		<comments>http://nklein.com/2009/04/kindle-content-trumps-ereader/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 17:22:38 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone apps]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=236</guid>
		<description><![CDATA[Until the most recent releases of eReader, content was a close call between the Kindle app and eReader on the iPhone. Now, eReader dropped the ball, and Kindle scored on them. What eReader Botched Until the most recent release, eReader let you add books to your bookshelf from places like ManyBooks.net that provide free books [...]]]></description>
			<content:encoded><![CDATA[<p>Until the most recent releases of eReader, content was a close call between the Kindle app and eReader on the iPhone.  Now, eReader dropped the ball, and Kindle scored on them.</p>
<h3>What eReader Botched</h3>
<p>Until the most recent release, eReader let you add books to your bookshelf from places like <a href="http://manybooks.net/">ManyBooks.net</a> that provide free books in eReader format.  I am hoping it was just an oversight when they wove in their own site a bit tighter.  We shall see.  It is obvious from the app reviews that the customers are annoyed.</p>
<h3>The Kindle Advantage</h3>
<p>You can download the free books mentioned above for the Kindle as well.  You just have to jump through some hoops and re-upload them to Amazon before you can get them onto the Kindle app.</p>
<p>In addition to this, the new content available on Amazon is newer and cheaper than the content on the eReader site.  It has always seemed wrong to pay full paperback prices for a book at eReader.  eBooks for the Kindle seem to run between half and two thirds of the paperback prices.</p>
<h3>Where To Go From Here</h3>
<p>At the moment, I am stuck using both apps.  I bought and got quite a few books in my eReader bookshelf, and it&#8217;s a <a href="http://nklein.com/2009/04/four-ways-ereader-beats-kindle-on-the-iphone/">better app</a> anyway.  But, there&#8217;s some newer, cheaper content at Amazon.  And, now, if I want <a href="http://www.gutenberg.org/">Project Gutenberg</a> books or other free books, I&#8217;m going to have jump through Amazon&#8217;s hoops.</p>
<p>*shrug*</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/04/kindle-content-trumps-ereader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Four Ways eReader Beats Kindle on the iPhone</title>
		<link>http://nklein.com/2009/04/four-ways-ereader-beats-kindle-on-the-iphone/</link>
		<comments>http://nklein.com/2009/04/four-ways-ereader-beats-kindle-on-the-iphone/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:53:03 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone apps]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=213</guid>
		<description><![CDATA[Reading electronic books on the iPhone may not be as easy on the eyes as reading it on a dedicated eBook or reading a paper book. But, c&#8217;mon. The iPhone fits in your pocket. Plus, you were already going to be carrying it anyway, right? The iPhone and eBooks were made for each other. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Reading electronic books on the iPhone may not be as easy on the eyes as reading it on a dedicated eBook or reading a paper book.  But, c&#8217;mon.  The iPhone fits in your pocket.  Plus, you were already going to be carrying it anyway, right?  The iPhone and eBooks were made for each other.</p>
<p>Here&#8217;s what <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284499993&#038;mt=8">eReader</a> (v2.0.2) has over the <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=302584613&#038;mt=8">Kindle app</a> (v1.0).</p>
<h3>Options, options, options</h3>
<p><a href="http://nklein.com/wp-content/uploads/2009/04/img_0001.png"><img src="http://nklein.com/wp-content/uploads/2009/04/img_0001-200x300.png" alt="ereader-options" title="ereader-options" width="200" height="300" class="alignright size-medium wp-image-214" /></a>In eReader, you can tweak your font, your font size, your line spacing, your margins, and your justification.  On the Kindle app, you can pick your font size, but you are stuck with their font, their line spacing, their margins, and their justification.  Even worse, the insets and tables in the text will only display completely when you use the Kindle app&#8217;s smallest font size.</p>
<p>In eReader, you can lock the display in Portrait mode, Upside-down Portrait mode, Landscape mode with up on the left, or Landscape mode with up on the right.  You can even let it track your orientation if you prefer.  On the Kindle app, you&#8217;re in Portrait mode.</p>
<p>In eReader, you can choose to turn pages by swiping them horizontally, swiping them vertically, tapping left or right, or tapping high or low.  In the Kindle app, you have to swipe horizontally to change pages.  eReader&#8217;s tapping modes let you read easily with one hand.  Trying to swipe pages with the thumb of the hand holding the iPhone is fraught with misfires&mdash;accidentally not turning the page, accidentally turning back a page instead of forward, dropping the phone, etc.</p>
<p>eReader also lets you choose your color scheme.  The Kindle app locks you into black text on a white background.  Actually, I feel like I once found an option to switch the Kindle app to white text on a black background, but I can&#8217;t find it today.</p>
<h3>Searches</h3>
<p>What&#8217;s the biggest advantage of eBooks over paper?  They are electronic.  Because they are electronic, you can fit two thousand of them in your pocket, you don&#8217;t have to kill any trees, and you can search for text in them.  The Kindle app forgot about that last bit.  I am sure there are indexes in the print versions of the Kindle books that I own.  But, in the Kindle versions, there is no index and no way to search.  The only navigation is page at a time or table of contents.</p>
<p>I have the King James Bible and the Constitution of the United States in eReader.  Because of that, I can always zoom right to the spot someone&#8217;s talking about.  When I&#8217;m trying to refer to something in one of the Kindle books, I end up guessing by chapter title, swiping, swiping, swiping, and scanning with <em>my eyes</em> to find the data I seek.  Seriously?</p>
<h3>Dictionaries</h3>
<p>I am reading along, reading along, reading along.  All of the sudden, in the middle of the text, there it is:  <q>soliped</q>.  What is that?  How did it get into this book?</p>
<p>In eReader, I tap on the word and it looks it up in my <a href="http://www.ereader.com/servlet/mw?t=book&#038;bi=14825&#038;si=59">Pocket Oxford English Dictionary</a>.  The Kindle app makes me fumble for a paper dictionary, go search an online dictionary, or pretend I never saw the word.</p>
<h3>Thumbed Bookshelf</h3>
<p><a href="http://nklein.com/wp-content/uploads/2009/04/img_0013.png"><img src="http://nklein.com/wp-content/uploads/2009/04/img_0013-200x300.png" alt="ereader-bookshelf" title="ereader-bookshelf" width="200" height="300" class="alignright size-medium wp-image-215" /></a>I have 42 eBooks in eReader.  I have 3 eBooks in the Kindle app.  In either app, I can sort by title or author.  eReader adds separators in the display to mark off each starting letter.  With that, I can find one of my 42 eReader titles as easily as I can find one of my 3 Kindle selections.</p>
<p>Hopefully the next version of the Kindle app will address some of these things.</p>
<p class="clear">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/04/four-ways-ereader-beats-kindle-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

