<?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>exploration &#187; app</title>
	<atom:link href="http://robertcarlsen.net/tag/app/feed" rel="self" type="application/rss+xml" />
	<link>http://robertcarlsen.net</link>
	<description>accounts of success and misadventure</description>
	<lastBuildDate>Tue, 13 Jul 2010 14:37:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mobile Logger GPX + GoogleEarth</title>
		<link>http://robertcarlsen.net/2010/07/13/mobile-logger-gpx-googleearth-1269</link>
		<comments>http://robertcarlsen.net/2010/07/13/mobile-logger-gpx-googleearth-1269#comments</comments>
		<pubDate>Tue, 13 Jul 2010 14:36:44 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[google earth]]></category>
		<category><![CDATA[gpx]]></category>
		<category><![CDATA[mobilelogger]]></category>

		<guid isPermaLink="false">http://robertcarlsen.net/?p=1269</guid>
		<description><![CDATA[
GPX export seems to be working, and imports fine into Google Earth. This is just a basic implementation of the essentials for a route; I&#8217;d really like to include other recorded sensors somehow into the track &#8211; maybe it could be a layer in Google Earth?
Looking at the ride data here reveals just how bad [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://robertcarlsen.net/blog/wp-content/uploads/2010/07/mobilelogger-myfirstgpxfile.png" rel="lightbox[1269]"><img class="alignright size-thumbnail wp-image-1270" title="mobilelogger-myfirstgpxfile" src="http://robertcarlsen.net/blog/wp-content/uploads/2010/07/mobilelogger-myfirstgpxfile-150x150.png" alt="mobilelogger-myfirstgpxfile" width="150" height="150" /></a></p>
<p>GPX export seems to be working, and imports fine into Google Earth. This is just a basic implementation of the essentials for a route; I&#8217;d really like to include other recorded sensors somehow into the track &#8211; maybe it could be a layer in Google Earth?</p>
<p>Looking at the ride data here reveals just how bad raw GPS data can be between tall buildings in NYC. Several data points often share the same GPS location. It seems that moving quickly with a clear path to the sky gives the best performance.</p>
<p>The app also quit midway though the ride &#8211; I have to look into that.</p>
<p>GPX export is available in the <a href="http://github.com/rcarlsen/Mobile-Logger" onclick="pageTracker._trackPageview('/outgoing/github.com/rcarlsen/Mobile-Logger?referer=');">github</a> repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://robertcarlsen.net/2010/07/13/mobile-logger-gpx-googleearth-1269/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sinatra + Kara == qwerty animals</title>
		<link>http://robertcarlsen.net/2010/02/20/sinatra-kara-qwerty-animals-1108</link>
		<comments>http://robertcarlsen.net/2010/02/20/sinatra-kara-qwerty-animals-1108#comments</comments>
		<pubDate>Sat, 20 Feb 2010 16:53:49 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[itp]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[couchrest]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[funaday]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[kara]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[qwerty]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://robertcarlsen.net/?p=1108</guid>
		<description><![CDATA[Yesterday I released a small web app; it was my first using the Sinatra microframework for Ruby: http://qwerty.robertcarlsen.net

The app arranges illustrations of animals wearing lettered t-shirts to create user-supplied messages. Kara Schlindwein created the illustrations as part of her project for the 6th Annual Fun-a-Day project in Philadelphia, and I wrote the first draft of the [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I released a small web app; it was my first using the <a href="http://www.sinatrarb.com/" onclick="pageTracker._trackPageview('/outgoing/www.sinatrarb.com/?referer=');">Sinatra</a> microframework for Ruby: <a href="http://qwerty.robertcarlsen.net" onclick="pageTracker._trackPageview('/outgoing/qwerty.robertcarlsen.net?referer=');">http://qwerty.robertcarlsen.net</a></p>
<p style="text-align: center;"><a href="http://robertcarlsen.net/blog/wp-content/uploads/2010/02/sinatra.png" rel="lightbox[1108]"><img class="size-medium wp-image-1109 aligncenter" title="sinatra" src="http://robertcarlsen.net/blog/wp-content/uploads/2010/02/sinatra-300x72.png" alt="sinatra" width="300" height="72" /></a></p>
<p>The app arranges illustrations of animals wearing lettered t-shirts to create user-supplied messages. <a href="http://karaschlindwein.com/qwerty_animals.php" onclick="pageTracker._trackPageview('/outgoing/karaschlindwein.com/qwerty_animals.php?referer=');">Kara Schlindwein</a> created the illustrations as part of her project for the 6th Annual <a href="http://artclash.com/" onclick="pageTracker._trackPageview('/outgoing/artclash.com/?referer=');">Fun-a-Day</a> project in Philadelphia, and I wrote the first draft of the app while sitting in a chair at the show a couple of weeks ago, still nursing my broken ankle.<span id="more-1108"></span></p>
<p>I&#8217;ve come to really like working with Sinatra / HAML / SASS – once I had a basic comprehension of how the components fit together I could see how to organize the app without getting mired in the code. Making changes to the app has been pleasantly easy. Deployment via <a href="http://www.modrails.com/" onclick="pageTracker._trackPageview('/outgoing/www.modrails.com/?referer=');">Passenger</a> (mod_rails) on Apache was simple enough my my local and development servers (after reading sample virtual host configurations) and setting up a subdomain on <a href="http://blog.nyerm.com/2009/03/21/deploying-a-sinatra-app-on-dreamhost/" onclick="pageTracker._trackPageview('/outgoing/blog.nyerm.com/2009/03/21/deploying-a-sinatra-app-on-dreamhost/?referer=');">Dreamhost</a> has been fine, too. Everything is coordinated via git, so pushing changes around has been simple.</p>
<p>I first heard about Sinatra (and couchdb for that matter) in a presentation by <a href="http://danieltsadok.wordpress.com/2009/03/26/its-all-middleware/" onclick="pageTracker._trackPageview('/outgoing/danieltsadok.wordpress.com/2009/03/26/its-all-middleware/?referer=');">Daniel Tsadock </a>at ITP last year and I&#8217;ve kept it in the back of my mind as something I wanted to try. I&#8217;m just now getting to development of my thesis project website and decided to use Sinatra for it, although I had a disappointing experience with the performance of another Sinatra + couchrest app I wrote for the Live Experimental Interactive Television class this past week. My VPS development server ground to a halt when a dozen classmates attempted to use the app at the same time. I&#8217;m pretty sure that my code was somewhat inefficient (with each client polling couchdb through an api provided via Sinatra routes), however I was hoping for usability beyond 12 simultaneous connections. I&#8217;m still optimistic though that it will work, and writing an app with the framework and view templates is fast and actually pretty fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://robertcarlsen.net/2010/02/20/sinatra-kara-qwerty-animals-1108/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OCR on iPhone demo</title>
		<link>http://robertcarlsen.net/2009/12/06/ocr-on-iphone-demo-1043</link>
		<comments>http://robertcarlsen.net/2009/12/06/ocr-on-iphone-demo-1043#comments</comments>
		<pubDate>Sun, 06 Dec 2009 20:33:39 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ocr]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tesseract]]></category>

		<guid isPermaLink="false">http://robertcarlsen.net/?p=1043</guid>
		<description><![CDATA[Update: Source code for demo project released.

i finally got around to building a proof of concept implementation of tesseract-ocr for the iPhone. months ago, i documented the steps which helped to get the library cross-compiled for the iPhone&#8217;s ARM processor, and how to build a fat library for use with the simulator as well. several [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong>: Source code for demo project <a href="http://robertcarlsen.net/2010/01/12/ocr-for-iphone-source-1080">released</a>.</p>
<p><img class="size-full wp-image-1051 alignright" title="TessIcon" src="http://robertcarlsen.net/blog/wp-content/uploads/2009/12/TessIcon.png" alt="TessIcon" width="57" height="57" /></p>
<p>i finally got around to building a proof of concept implementation of <a href="http://code.google.com/p/tesseract-ocr/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/tesseract-ocr/?referer=');">tesseract-ocr</a> for the iPhone. months ago, i <a href="http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884">documented</a> the steps which helped to get the library cross-compiled for the iPhone&#8217;s ARM processor, and how to build a fat library for use with the simulator as well. several folks have helped immensely in noting how to actually run the engine in obj-c++. thanks to everyone who has commented so far.</p>
<p>anyway, below is a short video of the POC in action. the basic workflow is: select image from photo library or camera, crop tightly on the box of text you&#8217;d like to convert, wait while it processes, select / copy or email text.<span id="more-1043"></span></p>
<p>there are loads of improvements which could be implemented (image histogram adjustment, rotation / perspective correction, automatic text box/layout detection, content detection &#8211; dates, links, contact information&#8230;) but this is a nice point to stop and document.</p>
<p>i realize that there are several OCR applications available for the iPhone, including a few which also run the engine on the device rather than handing it off to a web service. this started as an educational project on cross-compiling, and to fill a personal want for a handheld OCR app of my own. for these reasons, i&#8217;m going to open-source the entire app. look for it after this semester ends when i&#8217;ll have some more time to properly document the code. in the meantime, enjoy these code snippets demonstrating how to initialize the engine and process an image.</p>
<p>Initialize the engine:</p>
<pre class="brush: cpp;">
    NSString *dataPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@&quot;tessdata&quot;];
    /*
     Set up the data in the docs dir
     want to copy the data to the documents folder if it doesn't already exist
     */
    NSFileManager *fileManager = [NSFileManager defaultManager];
    // If the expected store doesn't exist, copy the default store.
    if (![fileManager fileExistsAtPath:dataPath]) {
        // get the path to the app bundle (with the tessdata dir)
        NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
        NSString *tessdataPath = [bundlePath stringByAppendingPathComponent:@&quot;tessdata&quot;];
        if (tessdataPath) {
            [fileManager copyItemAtPath:tessdataPath toPath:dataPath error:NULL];
        }
    }

    NSString *dataPathWithSlash = [[self applicationDocumentsDirectory] stringByAppendingString:@&quot;/&quot;];
    setenv(&quot;TESSDATA_PREFIX&quot;, [dataPathWithSlash UTF8String], 1);

    // init the tesseract engine.
    tess = new TessBaseAPI();

    tess-&gt;SimpleInit([dataPath cStringUsingEncoding:NSUTF8StringEncoding],  // Path to tessdata-no ending /.
                     &quot;eng&quot;,  // ISO 639-3 string or NULL.
                     false);
</pre>
<p>Process an image. This should be threaded as it&#8217;s a heavy process:</p>
<pre class="brush: cpp;">
    CGSize imageSize = [uiImage size];
    double bytes_per_line	= CGImageGetBytesPerRow([uiImage CGImage]);
    double bytes_per_pixel	= CGImageGetBitsPerPixel([uiImage CGImage]) / 8.0;

    CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider([uiImage CGImage]));
    const UInt8 *imageData = CFDataGetBytePtr(data);

    // this could take a while. maybe needs to happen asynchronously.
    char* text = tess-&gt;TesseractRect(imageData,
                                     bytes_per_pixel,
                                     bytes_per_line,
                                     0, 0,
                                     imageSize.width, imageSize.height);

    // Do something useful with the text!
    NSLog(@&quot;Converted text: %@&quot;,[NSString stringWithCString:text encoding:NSUTF8StringEncoding]);

    delete[] text;
</pre>
<p>Enjoy the video!<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/MICew5-nZp4&#038;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/MICew5-nZp4&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://robertcarlsen.net/2009/12/06/ocr-on-iphone-demo-1043/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Summer time: BeachBall</title>
		<link>http://robertcarlsen.net/2009/07/30/summer-time-beachball-923</link>
		<comments>http://robertcarlsen.net/2009/07/30/summer-time-beachball-923#comments</comments>
		<pubDate>Thu, 30 Jul 2009 23:31:15 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[approval]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[pinwheel]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[submit]]></category>

		<guid isPermaLink="false">http://robertcarlsen.net/?p=923</guid>
		<description><![CDATA[The BeachBall app has been submitted to the iPhone App Store. I&#8217;m pretty sure that I&#8217;ve crossed all the t&#8217;s and dotted the i&#8217;s throughout the application and am holding out hope for a smooth process. If all goes well it will be a great surprise just before the next semester kicks off.
Thanks to everyone [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-924" title="beachball_submit" src="http://robertcarlsen.net/blog/wp-content/uploads/2009/07/beachball_submit-150x122.jpg" alt="beachball_submit" width="150" height="122" />The <a href="http://robertcarlsen.net/dev/beachball">BeachBall</a> app has been submitted to the iPhone App Store. I&#8217;m pretty sure that I&#8217;ve crossed all the t&#8217;s and dotted the i&#8217;s throughout the application and am holding out hope for a smooth process. If all goes well it will be a great surprise just before the next semester kicks off.</p>
<p>Thanks to everyone who has been beta testing the (codename) Pinwheel app. I&#8217;ll be sure to give you all a copy of the final app when (if?) it&#8217;s approved.</p>
<p>In the meantime there are several other projects which need my attention. I&#8217;m committed to getting the in-progress work finished before moving on to new stuff&#8230;which is a strong motivator since I have a few things I&#8217;m really excited about working on. Onward&#8230;!</p>
]]></content:encoded>
			<wfw:commentRss>http://robertcarlsen.net/2009/07/30/summer-time-beachball-923/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
