<?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>Kevin McMahon</title>
	<atom:link href="http://blog.kevfoo.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kevfoo.com</link>
	<description>The weblog of a Chicago based .Net and iPhone developer.</description>
	<lastBuildDate>Fri, 27 Aug 2010 15:00:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Book Review: Tapworthy</title>
		<link>http://blog.kevfoo.com/index.php/2010/08/book-review-tapworthy-2/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/08/book-review-tapworthy-2/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 15:00:05 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[App Design]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Boredom]]></category>
		<category><![CDATA[Contexts]]></category>
		<category><![CDATA[Designers]]></category>
		<category><![CDATA[Good Job]]></category>
		<category><![CDATA[Human Interactions]]></category>
		<category><![CDATA[Indispensable Resource]]></category>
		<category><![CDATA[Interface Elements]]></category>
		<category><![CDATA[Iphone Apps]]></category>
		<category><![CDATA[Josh Clark]]></category>
		<category><![CDATA[Mechanics]]></category>
		<category><![CDATA[Mobile Applications]]></category>
		<category><![CDATA[Mobile Context]]></category>
		<category><![CDATA[Platforms]]></category>
		<category><![CDATA[Simple Questions]]></category>
		<category><![CDATA[Takeaway]]></category>
		<category><![CDATA[Takeaways]]></category>
		<category><![CDATA[Time Attention]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Vet]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/?p=221</guid>
		<description><![CDATA[The Book Tapworthy: Designing Great iPhone Apps by Josh Clark &#8220;Designing a tapworthy app means designing for an economy of time, attention, and space.&#8221; The Review Tapworthy is an indispensable resource for developers trying to make quality mobile applications for all platforms.  While the book uses iPhone apps and user interface elements to illustrate the [...]]]></description>
			<content:encoded><![CDATA[<h2>The Book</h2>
<p><a href="http://www.amazon.com/gp/product/1449381650?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1449381650">Tapworthy: Designing Great iPhone Apps</a> by Josh Clark</p>
<blockquote><p>&#8220;Designing a tapworthy app means designing for an economy of time, attention, and space.&#8221;</p></blockquote>
<h2>The Review</h2>
<p>Tapworthy is an indispensable resource for developers trying to make quality mobile applications for all platforms.  While the book uses iPhone apps and user interface elements to illustrate the concepts discussed, many of the observations made about the mechanics, human interactions, and the psychology of what makes great applications are applicable to all mobile applications.</p>
<p>The book does a good job of exploring the user interface elements found in iOS apps and provides a good summary of how and why you would use the elements in your designs.  The coverage of this material is quite good but pales in comparison to the exploration of what goes into making a tapworthy app.  It is in this exploration of what makes a tapworthy app that I got my two main takeaways from the book.</p>
<p>The first is to be ruthless when cutting scope and narrowing the focus of your app.  To help developers and designers do this, a series of questions are provided and discussed.  It is amazing how quickly issues with your design arise when your ideas are subjected to simple questions like:</p>
<ul>
<li>What does your app do and <em>why</em>?</li>
<li>What specific problem does your app uniquely solve for users?</li>
<li>What makes this app mobile?</li>
<li>What mobile context are you designing for?</li>
<li>Why would you use this app when you are away from your computer?</li>
</ul>
<p>These questions are straightforward and may seem somewhat obvious, but they are an easy way to vet ideas.  If you can’t quickly provide a compelling answers for these questions, then you might not have a best selling app idea.  Conversely, the questions can be used to identify weaknesses that might need more attention and potentially turn a good idea into a great one.</p>
<p>The second takeaway was to recognize the three mobile contexts: microtasking, local, and boredom. To make a good app, you need to tightly wrap the answers to the 5Ws (who is the user, what are they doing, why are they doing it on a mobile, where are they, and when are they doing it) around one or more of these.  Something common among the most successful apps is how easy it is to identify the answers to the 5W questions plus which mobile context it applies to.  When the scope of an app is perfectly tailored to a specific scenario or use case, users will find that every tap has a payoff and accomplishing tasks within the app will seem effortless.  Efficiency becomes a feature.</p>
<h2>The Summary</h2>
<p>There is so much to like about this book.  Tapworthy forces us to ask the right questions in designing mobile apps and provides invaluable tips and insights about maximizing your app’s user experience.  If you are serious about making good apps, do yourself a favor and pick this book up.  You won’t regret it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/08/book-review-tapworthy-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monotouch: Facebook iOS SDK Bindings</title>
		<link>http://blog.kevfoo.com/index.php/2010/08/monotouch-facebook-ios-sdk-bindings/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/08/monotouch-facebook-ios-sdk-bindings/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 09:28:42 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[binding]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[Demo Application]]></category>
		<category><![CDATA[Elements]]></category>
		<category><![CDATA[Good Job]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[Sdk]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/08/monotouch-facebook-ios-sdk-bindings/</guid>
		<description><![CDATA[The MonoTouch libraries can be found on github. It’s late and I am tired so I’ll be brief.&#160; I just pushed the binding of official Facebook iOS SDK to github.&#160; In addition to the bindings, the DemoApp, which was included along side the SDK, has been ported to MonoTouch.&#160; The code is straightforward and does [...]]]></description>
			<content:encoded><![CDATA[<p><em>The MonoTouch libraries can be <a href="http://github.com/kevinmcmahon/monotouch-facebook">found on github</a>.</em></p>
<p>It’s late and I am tired so I’ll be brief.&#160; I just pushed the binding of official <a href="http://github.com/facebook/facebook-ios-sdk">Facebook iOS SDK</a> to github.&#160; In addition to the bindings, the DemoApp, which was included along side the SDK, has been ported to MonoTouch.&#160; The code is straightforward and does a good job of getting you up to speed with the important elements of the SDK.&#160; </p>
<p>If you want to run the demo application, you will have to create a Facebook application on Facebook and grab the app id.&#160; You need the app id to pass back to Facebook during the login process and you can find out where to put it by looking through the comments of the DemoAppViewController class.</p>
<p>Please let me know if you have any issues with this library.&#160; Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/08/monotouch-facebook-ios-sdk-bindings/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monotouch: Flurry Analytics Bindings</title>
		<link>http://blog.kevfoo.com/index.php/2010/08/monotouch-flurry-analytics-bindings/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/08/monotouch-flurry-analytics-bindings/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 07:07:03 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[binding]]></category>
		<category><![CDATA[btouch]]></category>
		<category><![CDATA[flurry]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[C Libraries]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hardware Version]]></category>
		<category><![CDATA[Header Files]]></category>
		<category><![CDATA[Lib]]></category>
		<category><![CDATA[Libs]]></category>
		<category><![CDATA[Notifications]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[Options]]></category>
		<category><![CDATA[Override]]></category>
		<category><![CDATA[Register]]></category>
		<category><![CDATA[Screens]]></category>
		<category><![CDATA[Sdk]]></category>
		<category><![CDATA[Service Provider]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/08/monotouch-flurry-analytics-bindings/</guid>
		<description><![CDATA[The MonoTouch libraries can be found on my fork of monotuch-libs on GitHub For my latest app I wanted to collect some analytics to see which screens and content included in the app are the most useful to users.&#160; In evaluating my mobile analytics options, Flurry’s free of charge service and easy to use API [...]]]></description>
			<content:encoded><![CDATA[<p><em>The MonoTouch libraries can be found on my </em><a href="http://github.com/kevinmcmahon/monotouch-libs"><em>fork of monotuch-libs on GitHub</em></a></p>
<p>For my <a href="http://www.tribeguides.com">latest app</a> I wanted to collect some analytics to see which screens and content included in the app are the most useful to users.&#160; In evaluating my mobile analytics options, Flurry’s free of charge service and easy to use API made the decision to go with them over Google Analytics and Mixpanel an easy one.</p>
<p>Integrating Flurry analytics into your app is pretty easy but there is a small amount of setup to be done prior.&#160; You will need to grab the iPhone SDK from Flurry and also register your application with them to get an API key.&#160; The API key is unique to your application and provides Flurry a way to know who is sending events and notifications back to them to log.&#160; The SDK includes a couple header files and the Objective-C libraries you’ll need to include and link against in your MonoTouch projects.&#160; Once the Flurry libraries and the <a href="http://github.com/kevinmcmahon/monotouch-libs">MonoTouch bindings</a> have been obtained and an API key has been generated, we can integrate them into MonoTouch application and start collecting data.</p>
<p>Initiating data collection is as simple as calling the StartSession method with the application’s API key.&#160; That is all it takes to start collecting basic information about your app like the amount of times it has been launched, the number of different users using it, and other bits of info like hardware version and service provider.</p>
<p>Here is some code showing how to turn analytics on.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e741bd95-b44c-42d9-aa9d-d45b1018beff" class="wlWriterEditableSmartContent">
<pre style="background-color:White;overflow: auto;"><span style="color: #0000FF;">using</span><span style="color: #000000;"> System;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.Foundation;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.UIKit;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> Flurry; </span><span style="color: #008000;">//</span><span style="color: #008000;"> include the MonoTouch binding lib</span><span style="color: #008000;">
</span><span style="color: #000000;">
</span><span style="color: #0000FF;">namespace</span><span style="color: #000000;"> Foo
{
    [Register (</span><span style="color: #800000;">"</span><span style="color: #800000;">AppDelegate</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
    </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">class</span><span style="color: #000000;"> AppDelegate : UIApplicationDelegate
    {
        </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">const</span><span style="color: #000000;"> </span><span style="color: #0000FF;">string</span><span style="color: #000000;"> FlurryApiKey </span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">...</span><span style="color: #800000;">"</span><span style="color: #000000;">;

        </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">override</span><span style="color: #000000;"> </span><span style="color: #0000FF;">bool</span><span style="color: #000000;"> FinishedLaunching (UIApplication app, NSDictionary options)
        {
            </span><span style="color: #008000;">//</span><span style="color: #008000;"> 1 liner to kick the session off</span><span style="color: #008000;">
</span><span style="color: #000000;">            Flurry.FlurryAPI.StartSession(FlurryApiKey);

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> Do you app thing here...</span><span style="color: #008000;">
</span><span style="color: #000000;">        }
    }
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>If more detailed analytics are desired, there are additional methods available to help you glean whatever meaningful information you need from your application.&#160; The example below shows how you can automatically track the changes in navigation within a tab bar.&#160; When you pass a UINavigationController or a UITabBarController to the CurrentPageViews method, each navigation action as you move from one view or tab to another gets tracked.&#160; This is ideal for seeing which parts of your app users are interacting with the most.</p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:104833fe-e259-4268-8b6f-c8375220f118" class="wlWriterEditableSmartContent">
<pre style="background-color:#FFFFFF;overflow: auto;"><span style="color: #0000FF;">using</span><span style="color: #000000;"> System;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.Foundation;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.UIKit;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> Flurry; </span><span style="color: #008000;">//</span><span style="color: #008000;"> include the MonoTouch binding lib</span><span style="color: #008000;">
</span><span style="color: #000000;">
</span><span style="color: #0000FF;">namespace</span><span style="color: #000000;"> Foo
{
    [Register (</span><span style="color: #800000;">"</span><span style="color: #800000;">AppDelegate</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
    </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">class</span><span style="color: #000000;"> AppDelegate : UIApplicationDelegate
    {
        </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">const</span><span style="color: #000000;"> </span><span style="color: #0000FF;">string</span><span style="color: #000000;"> FlurryApiKey </span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">...</span><span style="color: #800000;">"</span><span style="color: #000000;">;

        </span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">override</span><span style="color: #000000;"> </span><span style="color: #0000FF;">bool</span><span style="color: #000000;"> FinishedLaunching (UIApplication app, NSDictionary options)
        {
            </span><span style="color: #008000;">//</span><span style="color: #008000;"> 1 liner to kick the session off</span><span style="color: #008000;">
</span><span style="color: #000000;">            FlurryAPI.StartSession(FlurryApiKey);

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> create a navigatable controller to watch...</span><span style="color: #008000;">
</span><span style="color: #000000;">            UITabBarController tabBarController </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">new</span><span style="color: #000000;"> UITabBarController();

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> ...and pass it to CurrentPageViews.</span><span style="color: #008000;">
</span><span style="color: #000000;">            FlurryAPI.CurrentPageViews(tabBarController);

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> Do you app thing here...</span><span style="color: #008000;">
</span><span style="color: #000000;">        }
    }
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
</p>
<p>I am touching on just a few things that you can do with Flurry.&#160; The SDK docs describe a number of other things you can do like creating and logging custom events and tracking how much time is spent performing activities.&#160; I’d recommend checking them out after you download the libraries.</p>
<p>I’ve just started collecting analytics during beta testing and things appear to working smoothly.&#160; If you find any issues with the MonoTouch bindings please let me know.&#160; Enjoy! </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/08/monotouch-flurry-analytics-bindings/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Book Review: Professional Android 2 Application Development</title>
		<link>http://blog.kevfoo.com/index.php/2010/05/book-review-professional-android-2-application-development/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/05/book-review-professional-android-2-application-development/#comments</comments>
		<pubDate>Wed, 26 May 2010 13:33:18 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[Adequate Coverage]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Application Examples]]></category>
		<category><![CDATA[Background Services]]></category>
		<category><![CDATA[Book Deals]]></category>
		<category><![CDATA[Content Providers]]></category>
		<category><![CDATA[Core Application]]></category>
		<category><![CDATA[Development Environment]]></category>
		<category><![CDATA[Earthquake Monitoring]]></category>
		<category><![CDATA[Example Applications]]></category>
		<category><![CDATA[History Lesson]]></category>
		<category><![CDATA[Intents]]></category>
		<category><![CDATA[Life Application]]></category>
		<category><![CDATA[Media Playback]]></category>
		<category><![CDATA[Monitoring Service]]></category>
		<category><![CDATA[Optional Features]]></category>
		<category><![CDATA[Programming Books]]></category>
		<category><![CDATA[Service Applications]]></category>
		<category><![CDATA[Toolsets]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/05/book-review-professional-android-2-application-development/</guid>
		<description><![CDATA[Reto Meier’s Professional Android 2 Application Development does a great job of educating the reader on what is necessary for developing Android applications. Core application fundamentals and advanced Android features are presented to the reader via a series of real-life application examples.&#160; Readers who work the examples and leverage the breadth of coverage provided on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.kevfoo.com/wp-content/uploads/2010/05/pa2ad.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="pa2ad" border="0" alt="pa2ad" src="http://blog.kevfoo.com/wp-content/uploads/2010/05/pa2ad_thumb.jpg" width="192" height="240" /></a></p>
<p>Reto Meier’s <a href="http://www.amazon.com/gp/product/0470565527?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0470565527">Professional Android 2 Application Development</a> does a great job of educating the reader on what is necessary for developing Android applications. Core application fundamentals and advanced Android features are presented to the reader via a series of real-life application examples.&#160; Readers who work the examples and leverage the breadth of coverage provided on the Android 2 framework will be well on their way towards establishing an excellent foundation for building compelling Android applications.</p>
<p>After giving the customary history lesson and tour of the toolsets and development environment, the first half of the book deals with the components that make up an application. Chapters are devoted to activities and life cycle, UI views, data and file access, and key Android concepts like intents (message-passing mechanisms) and content providers (ability to expose data to other apps).</p>
<p>Once the fundamentals have been covered, the remainder of the book is spent exploring the advanced and optional features available in the SDK. Android-centric concepts like background services, notifications and widgets are given the same in depth treatment given to the fundamentals so you get a lot of the “why” along with the how. Features and functionality that naturally lend them to being abstracted away via an API like media playback, GPS and Bluetooth are given adequate coverage of what is available via the framework and, where pertinent, the Android-specific behaviors are highlighted.</p>
<p>While the book is divided into fundamentals and advanced topics, continuity is maintained throughout via the example applications used to emphasize the concepts presented. By building the to-do list, compass, and earthquake monitoring service applications while reading through the book, passive learning is transformed into active, directed learning. Unlike some programming books I’ve read in the past, these examples do real work, accomplish specific real-life tasks, and provide some utility once completed. Readers are not just extending these applications one feature at a time, they are also adding one key concept to their proverbial tool belt while doing it.</p>
<p>The speed at which the Android platform is being evolved and improved upon is staggering. Since April 2009 there has been 4 major releases of the Android OS with a 5th release rumored for this fall. While the breadth of coverage provided for the APIs and framework is nice while it is still relevant, the real strength of this book comes building an understanding of the core Android fundamentals. Readers looking for a solid introduction to Android development need to look no further than <a href="http://www.amazon.com/gp/product/0470565527?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0470565527">Professional Android 2 Application Development</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/05/book-review-professional-android-2-application-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retargeting Visual Studio project files with PowerShell</title>
		<link>http://blog.kevfoo.com/index.php/2010/05/retargeting-visual-studio-project-files-with-powershell/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/05/retargeting-visual-studio-project-files-with-powershell/#comments</comments>
		<pubDate>Thu, 06 May 2010 16:00:53 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[C Code]]></category>
		<category><![CDATA[C Project]]></category>
		<category><![CDATA[chatsworth]]></category>
		<category><![CDATA[Cinch]]></category>
		<category><![CDATA[Current Projects]]></category>
		<category><![CDATA[Descendants]]></category>
		<category><![CDATA[Element Names]]></category>
		<category><![CDATA[Elements]]></category>
		<category><![CDATA[File Format]]></category>
		<category><![CDATA[Gist]]></category>
		<category><![CDATA[Hack Files]]></category>
		<category><![CDATA[Instantiated]]></category>
		<category><![CDATA[Legacy Code]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Main String]]></category>
		<category><![CDATA[Mandate]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Namespace]]></category>
		<category><![CDATA[Path C]]></category>
		<category><![CDATA[Reflection]]></category>
		<category><![CDATA[Schema]]></category>
		<category><![CDATA[Schemas]]></category>
		<category><![CDATA[Snover]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Source Tree]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio Project]]></category>
		<category><![CDATA[Xelement]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/?p=85</guid>
		<description><![CDATA[I originally set out to write this post a little over a year ago. Back then I threw together a script to retarget all the project files from .Net 2.0 to .Net 3.5 for my previous company and recently I found myself having to a similar upgrade from .Net 3.5 to 4.0. I ended up [...]]]></description>
			<content:encoded><![CDATA[<p>I originally set out to write this post a little over a year ago. Back then I threw together a script to retarget all the project files from .Net 2.0 to .Net 3.5 for my previous company and recently I found myself having to a similar upgrade from .Net 3.5 to 4.0. I ended up using the same script again so I figured I&#8217;d go ahead and publish it.</p>
<p>The upgrade process done by Visual Studio on your current projects and solutions will only migrate the file format to the newest schema and will not retarget the framework to the latest version.&#160; That is where the script I’ve included below comes in.&#160; It will retarget all the C# project files found under the path provided to version 4.0 of the .Net framework</p>
<p>C# project files are XML based and navigating the DOM with Linq to XML is a cinch but there are a couple small but important steps that the script needed to include.&#160; First, you need to append the namespace to the individual element names or else the elements will not be able to be found.&#160; Second, when saving the modified XDocument, a XmlWriterSetting instance needs to be instantiated and the OmitXmlDeclaration property set to true.&#160; Setting this property to true will make sure the XML that we save will be considered a valid project file by Visual Studio.</p>
<p>I’ve included the full script below as well as created a gist that can be found <a href="http://gist.github.com/391885">here</a>.&#160; It is important to note that this script will edit all the csproj files found under the directory specified in the path variable.&#160; Make sure you backup these files or have them under source control prior to running the script.&#160; Enjoy.</p>
<p><em>[UPDATE: Added change suggested in comments by Jeffery Snover]</em></p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ec38104f-e001-4999-b72d-fa89358addc8" class="wlWriterEditableSmartContent">
<pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"><span style="color: #000000;">[Reflection.Assembly]</span><span style="color: #000000;">::</span><span style="color: #000000;">LoadWithPartialName(</span><span style="color: #800000;">"</span><span style="color: #800000;">System.Xml.Linq</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #000000;">|</span><span style="color: #000000;"> Out</span><span style="color: #000000;">-</span><span style="color: #000000;">Null

</span><span style="color: #008000;">#</span><span style="color: #008000;">specify the root of your source tree below</span><span style="color: #008000;">
</span><span style="color: #800080;">$path</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">C:\Code\chatsworth</span><span style="color: #800000;">"</span><span style="color: #000000;">

</span><span style="color: #800080;">$ns</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/developer/msbuild/2003</span><span style="color: #800000;">"</span><span style="color: #000000;">
</span><span style="color: #800080;">$xname</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> [System.Xml.Linq.XName]</span><span style="color: #000000;">::</span><span style="color: #000000;">Get(</span><span style="color: #800000;">"</span><span style="color: #800000;">PropertyGroup</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$ns</span><span style="color: #000000;">)
</span><span style="color: #800080;">$tfname</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> [System.Xml.Linq.XName]</span><span style="color: #000000;">::</span><span style="color: #000000;">Get(</span><span style="color: #800000;">"</span><span style="color: #800000;">TargetFrameworkVersion</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$ns</span><span style="color: #000000;">)

</span><span style="color: #800080;">$xws</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> New</span><span style="color: #000000;">-</span><span style="color: #000000;">Object System.Xml.XmlWriterSettings
</span><span style="color: #800080;">$xws</span><span style="color: #000000;">.OmitXmlDeclaration </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">$true</span><span style="color: #000000;">
</span><span style="color: #800080;">$xws</span><span style="color: #000000;">.Indent </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">$true</span><span style="color: #000000;">

</span><span style="color: #0000FF;">function</span><span style="color: #000000;"> updatefx(</span><span style="color: #800080;">$filename</span><span style="color: #000000;">)
{
    </span><span style="color: #008000;">#</span><span style="color: #008000;">Write-Host $filename</span><span style="color: #008000;">
</span><span style="color: #000000;">    </span><span style="color: #800080;">$xml</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> [System.Xml.Linq.XDocument]</span><span style="color: #000000;">::</span><span style="color: #000000;">Load(</span><span style="color: #800080;">$filename</span><span style="color: #000000;">)

     </span><span style="color: #800080;">$result</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$xml</span><span style="color: #000000;">.Descendants(</span><span style="color: #800080;">$xname</span><span style="color: #000000;">)

    </span><span style="color: #0000FF;">foreach</span><span style="color: #000000;"> (</span><span style="color: #800080;">$i</span><span style="color: #000000;"> </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> </span><span style="color: #800080;">$result</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$fxelem</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$i</span><span style="color: #000000;">.Element(</span><span style="color: #800080;">$tfname</span><span style="color: #000000;">)
        </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$fxelem</span><span style="color: #000000;">)
        {
            </span><span style="color: #800080;">$i</span><span style="color: #000000;">.SetElementValue(</span><span style="color: #800080;">$tfname</span><span style="color: #000000;">,</span><span style="color: #800000;">"</span><span style="color: #800000;">v4.0</span><span style="color: #800000;">"</span><span style="color: #000000;">)
        }
    }

    </span><span style="color: #800080;">$xw</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> [System.Xml.XmlWriter]</span><span style="color: #000000;">::</span><span style="color: #000000;">Create(</span><span style="color: #800080;">$filename</span><span style="color: #000000;">, </span><span style="color: #800080;">$xws</span><span style="color: #000000;">)
    </span><span style="color: #800080;">$xml</span><span style="color: #000000;">.Save(</span><span style="color: #800080;">$xw</span><span style="color: #000000;">)
    </span><span style="color: #800080;">$xw</span><span style="color: #000000;">.Close()
}

</span><span style="color: #800080;">$csprojs</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> Get</span><span style="color: #000000;">-</span><span style="color: #000000;">ChildItem </span><span style="color: #800080;">$path</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;">.csproj </span><span style="color: #000000;">-</span><span style="color: #000000;">Recurse

</span><span style="color: #0000FF;">foreach</span><span style="color: #000000;"> (</span><span style="color: #800080;">$file</span><span style="color: #000000;"> </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> </span><span style="color: #800080;">$csprojs</span><span style="color: #000000;">)
{
    updatefx </span><span style="color: #800080;">$file</span><span style="color: #000000;">.FullName
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/05/retargeting-visual-studio-project-files-with-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>6 Thoughts about Evernote&#8217;s App Design</title>
		<link>http://blog.kevfoo.com/index.php/2010/04/6-thoughts-about-evernotes-app-design/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/04/6-thoughts-about-evernotes-app-design/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 03:25:00 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[App Design]]></category>
		<category><![CDATA[Evernote]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Application Load]]></category>
		<category><![CDATA[Bad Experience]]></category>
		<category><![CDATA[Cellular Networks]]></category>
		<category><![CDATA[Color Scheme]]></category>
		<category><![CDATA[Data Input]]></category>
		<category><![CDATA[Design Decisions]]></category>
		<category><![CDATA[Distinct Actions]]></category>
		<category><![CDATA[Happy Accident]]></category>
		<category><![CDATA[Ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[Load Time]]></category>
		<category><![CDATA[Logo Font]]></category>
		<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Mobile Device]]></category>
		<category><![CDATA[Mobile Versions]]></category>
		<category><![CDATA[Optimal Experience]]></category>
		<category><![CDATA[Rsquo]]></category>
		<category><![CDATA[Seamless Integration]]></category>
		<category><![CDATA[Sluggishness]]></category>
		<category><![CDATA[Smart Layout]]></category>
		<category><![CDATA[Softness]]></category>
		<category><![CDATA[Splash Screen]]></category>
		<category><![CDATA[Splash Screens]]></category>
		<category><![CDATA[Tab Bar]]></category>
		<category><![CDATA[Taking A Closer Look]]></category>
		<category><![CDATA[Ubiquity]]></category>
		<category><![CDATA[Unpredictable Nature]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Voice Notes]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/?p=163</guid>
		<description><![CDATA[Evernote is one of my favorite and most frequently used applications.&#160; The ubiquity of the service via all the devices in my life (laptop, desktop, iPhone, Nexus One, web, and iPad) and the ease in which I can capture and recall notes made adopting it into my daily workflow extremely easy.&#160; By taking a closer [...]]]></description>
			<content:encoded><![CDATA[<p>Evernote is one of my favorite and most frequently used applications.&#160; The ubiquity of the service via all the devices in my life (laptop, desktop, iPhone, Nexus One, web, and iPad) and the ease in which I can capture and recall notes made adopting it into my daily workflow extremely easy.&#160; By taking a closer look at the clients, it became clear that the user experience, and the design decisions behind them, wasn’t a happy accident.</p>
<p>Lately I have been thinking about user design and experience as I prep my app for the App Store.&#160; Here are six things that stood out most about the Evernote iPhone app and the take-away ideas I got from looking closer at the app.</p>
<h3>1. The mobile apps immediately present 4 distinct actions for note acquisition.</h3>
<p><a href="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0448.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="IMG_0448" border="0" alt="IMG_0448" src="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0448_thumb.png" width="164" height="244" /></a></p>
<p>Evernote breaks down into two key activities: note acquisition and note retrieval.&#160; Given the detached nature of the mobile device and the sluggishness still experienced with cellular networks, the note browsing and searching experience is not ideal.&#160; The constraints of the device and the unpredictable nature of the network, I believe, led to a focus on what a mobile device is good for (note capturing) and make that the key action in the mobile versions of its application.</p>
<p>Having the app launch into the note acquisition screen implicitly signals to the user that this is the type of activity that you should be doing on the device.&#160; It seems counterintuitive to restrict features to simply not port them directly from the desktop or web offering.&#160; But by limiting the scope of the application, it actually maximizes the experience for the user.&#160; In Evernote’s case they cannot completely focus on note capture at the expense of cutting out the other actions.&#160; These additional activities are included, but they are relegated to the tab bar on the iPhone and the sub menus on Android devices.</p>
<h3>2. Smart layout and design can make sub-optimal experience tolerable</h3>
<p><a href="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0450.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0450" border="0" alt="IMG_0450" src="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0450_thumb.png" width="164" height="244" /></a>&#160;<a href="http://blog.kevfoo.com/wp-content/uploads/2010/04/IMG_0466.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0466" border="0" alt="IMG_0466" src="http://blog.kevfoo.com/wp-content/uploads/2010/04/IMG_0466_thumb.png" width="244" height="164" /></a></p>
<p>&#160;</p>
<p>Given the limited real estate available on mobile devices, it is unsurprising that note browsing is a sub-optimal experience.&#160; That being said, I think that Evernote does an excellent job making due with what little space it has.&#160; Visually we are given two options, depending on the orientation of the phone, in which we can browse our catalog of notes.&#160; While holding the phone in portrait mode, each note’s metadata is visible and allows the user to see titles and tags in addition to a thumbnail image of the note.&#160; While holding the phone in landscape mode, the note browser is transformed into a tiled-thumbnail view which shows more notes in the visible frame.&#160; If you can recognize the note by the rough appearance or layout of the text, you can pretty rapidly find what you are looking for.&#160; </p>
<p>Most people hold the phone in portrait mode so it follows that the default view is the easier of the two to quickly grasp.&#160; The two views provide the user with choices and trade offs: lower information density with a greater amount of detail or higher information density with less detail.&#160; By giving the user options, Evernote overcomes the inherent limitations of the mobile device and improves the user experience.</p>
<h3>3. Search function is a key but clunky feature in the mobile app.</h3>
<p><a href="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0449.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0449" border="0" alt="IMG_0449" src="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0449_thumb.png" width="164" height="244" /></a><a href="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0452.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0452" border="0" alt="IMG_0452" src="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0452_thumb.png" width="164" height="244" /></a></p>
<p>Evernote has outstanding OCR software that makes everything searchable.&#160; Given that search is the killer feature of Evernote, it is surprising that search on mobile devices seems like a second-class citizen.&#160; The typical standard search box is visible on most of the non-note capturing screens, and the text search works as expected.&#160; Search does have some enhanced features like map view and search near here offered as options to help refine your search, but I am not a fan of either.&#160; The actual search queries appear to be executed on the server side and, as a result, the processing time can vary depending on your network connection.&#160; In order to do a location based search the app has to make network requests for the search results and get the map coordinates, and this typically translates to a noticeable wait when these types of searches are performed.&#160; I feel like search could cut out the location-based search filter entirely and be no worse off.</p>
<h3>4. Sync Button is a “kitchen drawer” tab on the iPhone App</h3>
<p>The sync tab is mislabeled, and the label masks all the other functions that are exposed on that tab.&#160; Contextually, account information and device-specific settings aren’t readily associated to sync even though the sync process in Evernote synchronizes everything associated to your account.&#160; The action of synchronizing your notes could be integrated into the note screen, and the settings, account information, and about information could all be separate tabs managed by the tab controller already being utilized in the iPhone application.&#160; In fairness the move to limit the tabs is consistent with the less-is-more type of attitude, and the combination of the multiple actions into the single tab is most likely a compromise to simplify the interface.</p>
<h3>5. The tips UX on the iPhone is well executed and non-obtrusive</h3>
<p><a href="http://blog.kevfoo.com/wp-content/uploads/2010/04/evernotetips.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="evernotetips" border="0" alt="evernotetips" src="http://blog.kevfoo.com/wp-content/uploads/2010/04/evernotetips_thumb.jpg" width="164" height="244" /></a></p>
<p>The tips screen, integrated into the main view of the Evernote iPhone app, is an excellent way of sharing information about features and activities without being pushy and obtrusive.&#160; With a smooth animation that peels back the main view to show the tips view, the user can get a quick suggestion on a feature and then be back capturing or browsing notes.&#160; This is a small but well executed design element that adds to the experience.</p>
<h3>6. Sharp branding</h3>
<h3><a href="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0447.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="IMG_0447" border="0" alt="IMG_0447" src="http://blog.kevfoo.com/wp-content/uploads/2010/03/IMG_0447_thumb.png" width="164" height="244" /></a></h3>
<p>As far as the aesthetics go, I like the Evernote logo.&#160; A combination of an elephant and piece of paper plays off the “memory like an elephant” saying and the note-based nature of the application.&#160; The logo, paired nicely with a soft green color and a nice font, is the focal point of the splash screen welcoming you into the application.&#160; The other platforms do not utilize a splash screen since the application load times aren’t as great as the iPhone, but the same basic logo/font/color scheme is consistent in the icons used on all platforms.</p>
<h3>Lessons learned from the Evernote app:</h3>
<ul>
<li>Instead of frustrating users with clunky interfaces and hacks to enable certain features of your service or app, only port features or activities that enhance the service and take advantage of the features of mobile devices rather than expose the limitations of them. </li>
<li>Focus on the activities that can capitalize on the advantages of a mobile device instead of fighting the platform. </li>
<li>Optimize for those specific use cases that make sense that you want to capitalize on. </li>
<li>Be ruthless in what you cut out or be stingy in what you put into the mobile version </li>
<li>Be consistent in your branding, color scheme, and feel of your applications. </li>
<li>Good design can always speak louder than any type of instruction.&#160; Help users fall into the pit of success. </li>
</ul>
<p><em>You can get the iPhone app in the </em><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=281796108&amp;mt=8"><em>iTunes App Store</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/04/6-thoughts-about-evernotes-app-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monotouch Quickie: Network Indicator Tip</title>
		<link>http://blog.kevfoo.com/index.php/2010/04/monotouch-quickie-network-indicator-tip/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/04/monotouch-quickie-network-indicator-tip/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 05:42:10 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Friendly Network]]></category>
		<category><![CDATA[Gc]]></category>
		<category><![CDATA[Hourglass]]></category>
		<category><![CDATA[Method Invocation]]></category>
		<category><![CDATA[Public Void]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/04/monotouch-quickie-network-indicator-tip/</guid>
		<description><![CDATA[I’ve used this simple technique below many times in WinForms apps to toggle the wait cursor (hourglass) during long running operations and it is applicable for the situations that call for toggling the network activity indicator in Monotouch. When used with a using statement, the indicator is turned on when the object is constructed and [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve used this simple technique below many times in WinForms apps to toggle the wait cursor (hourglass) during long running operations and it is applicable for the situations that call for toggling the network activity indicator in Monotouch.</p>
<p>When used with a using statement, the indicator is turned on when the object is constructed and turned off when the code within the using statement has finished executing and the object’s Dispose method is called.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:63442f2e-f2c9-436f-ae14-0a99c8efc4e1" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<pre style="background-color: #ffffff; white-space: pre-wrap; word-wrap: break-word; overflow: auto; font-family: Consolas; font-size: 11.25;"><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> NetworkIndicator : IDisposable
{
   </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> NetworkIndicator ()
   {
      UIApplication.SharedApplication.NetworkActivityIndicatorVisible </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;
   }

   </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> Dispose ()
   {
      UIApplication.SharedApplication.NetworkActivityIndicatorVisible </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;</span><span style="color: #000000;">
      GC.SuppressFinalize(this);

   }
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>Usage:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:b22771bd-ad3c-4b68-a5ee-b2dcd3af7d42" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<pre style="background-color: #ffffff; white-space: pre-wrap; word-wrap: break-word; overflow: auto;"><span style="color: #0000ff;">using</span><span style="color: #000000;">(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> NetworkIndicator())
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;">Make network call here</span><span style="color: #008000;">
</span><span style="color: #000000;">}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>You wouldn’t want to wrap this around a UIWebView (add the toggling of the indicator to the LoadStarted and LoadFinished events) but anytime your app is making calls out the network you can wrap the using statement around the method invocation and get the user friendly network activity notification.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/04/monotouch-quickie-network-indicator-tip/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Thoughts on the Day of Mobile conference</title>
		<link>http://blog.kevfoo.com/index.php/2010/03/thoughts-on-the-day-of-mobile-conference/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/03/thoughts-on-the-day-of-mobile-conference/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 06:15:23 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[dayofmobile]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Business Models]]></category>
		<category><![CDATA[Catalogs]]></category>
		<category><![CDATA[Closest Thing]]></category>
		<category><![CDATA[Cool Tools]]></category>
		<category><![CDATA[David Whatley]]></category>
		<category><![CDATA[Headaches]]></category>
		<category><![CDATA[Inaugural Conference]]></category>
		<category><![CDATA[Insights]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Last Saturday]]></category>
		<category><![CDATA[Laughs]]></category>
		<category><![CDATA[Main Themes]]></category>
		<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[Niche]]></category>
		<category><![CDATA[Platform Development]]></category>
		<category><![CDATA[Risk Reward]]></category>
		<category><![CDATA[Scenarios]]></category>
		<category><![CDATA[Sessions]]></category>
		<category><![CDATA[Ways To Make Money]]></category>
		<category><![CDATA[Win Lottery]]></category>
		<category><![CDATA[Win The Lottery]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/03/thoughts-on-the-day-of-mobile-conference/</guid>
		<description><![CDATA[Here is a collection of thoughts that I had about the Day of Mobile conference held at IIT last Saturday.&#160; This was the inaugural conference put together by the Tech in the Middle guys, and I thought that they did a great job.&#160; I look forward to seeing what they do next. Overall Themes Two [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a collection of thoughts that I had about the <a href="http://www.techinthemiddle.com/DayOfMobile/">Day of Mobile</a> conference held at IIT last Saturday.&#160; This was the inaugural conference put together by the <a href="http://www.techinthemiddle.com">Tech in the Middle</a> guys, and I thought that they did a great job.&#160; I look forward to seeing what they do next.</p>
<h3>Overall Themes</h3>
<p>Two main themes that emerged during the sessions: the future of mobile is web-based apps rather than device specific apps, and the road to mobile riches probably doesn’t run through an app store.</p>
<h3>Multi-platform development is hard</h3>
<p>Certainly scenarios exist where multi-platform apps make sense, but it is imperative that the risk/reward ratio be in your favor to have a chance to be successful.&#160; Don’t underestimate the amount of effort and headaches that developing and supporting multi-platform apps will create.&#160; Going the mobile web app route has it’s limitations, but it is the closest thing to “write once, run anywhere” that mobile has.</p>
<h3>Cool Tools</h3>
<p>Really cool tools like <a href="http://www.phonegap.com">PhoneGap</a> and <a href="http://www.jqtouch.com">jQTouch</a> are out there that help lower the barriers to making apps and, in the case of PhoneGap, multi-platform apps.&#160; Both tools have been released under MIT licenses and are free to use.</p>
<h3>One Man’s Secret Sauce for Success</h3>
<p>David Whatley gave a funny presentation that provided a lot of laughs and some great insights into how the iPhone app store works.&#160; Even better was his ability to back up what he was saying with some real sales data and numbers.&#160; His secret sauce for success:&#160; PR, code re-use, and playing to your strengths.</p>
<h3>App stores are glorified catalogs</h3>
<p>Standing out or even being noticed amongst all the other apps is extremely difficult.&#160; Relying only on the app catalog to drive sales is effectively a “post and pray” strategy akin to trying to win the lottery.&#160; Try to find a niche and solve a problem.&#160; Focus on creating value for markets not just an app for it.&#160; Mark Murphy described many ways to <a href="http://www.slideshare.net/commonsguy/making-money-at-mobile">make money in mobile</a> other than direct app sales during his talk and in a series of blog posts about <a href="http://www.androidguys.com/2010/03/04/android-business-models/">Android Business Models</a>.</p>
<h3>Links</h3>
<ul>
<li><a href="http://www.phonegap.com">PhoneGap</a> </li>
<li><a href="http://www.jqtouch.com">jQTouch</a> </li>
<li><a href="http://www.iphonedevdepot.com">iPhone Dev Depot</a> </li>
<li><a href="http://www.slideshare.net/jschwan/mobile-web-development-tips-and-tricks">Mobile Web Development Tips and Tricks (Slides)</a> </li>
<li><a href="http://www.slideshare.net/commonsguy/making-money-at-mobile">Making Money at Mobile (Slides)</a> </li>
<li><a title="http://github.com/mikelaurence/CoreResource" href="http://github.com/mikelaurence/CoreResource">http://github.com/mikelaurence/CoreResource</a> (Cool iPhone library) </li>
</ul>
<h3>Books Recommended During the Conference</h3>
<ul>
<li><a href="http://www.amazon.com/gp/product/093849743X?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=093849743X">Aiming at Amazon</a> </li>
<li><a href="http://www.amazon.com/gp/product/1591841666?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1591841666">The Dip</a> </li>
<li><a href="http://www.amazon.com/gp/product/0307409503?ie=UTF8&amp;tag=kev02-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0307409503">The Whuffie Factor</a> </li>
</ul>
<p>Overall, the signal-to-noise ratio at the conference was good but not great.&#160; I did manage to glean at least one or two new ideas from most of the sessions I attended, and it was great to see the enthusiasm that the Chicago tech community has for events like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/03/thoughts-on-the-day-of-mobile-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monotouch Binding Gotcha</title>
		<link>http://blog.kevfoo.com/index.php/2010/02/monotouch-binding-gotcha/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/02/monotouch-binding-gotcha/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 03:51:54 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Api]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mistake]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[Subtle Gotcha]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/?p=140</guid>
		<description><![CDATA[I stumbled across a subtle gotcha while exploring binding Objective-C types in MonoTouch.&#160; As luck would have it, someone else did also and posted a question about it on the MonoTouch IRC channel.&#160; The poster of the question eventually came across the answer and shared it there, and I am going to post it here [...]]]></description>
			<content:encoded><![CDATA[<p>I stumbled across a subtle gotcha while exploring binding Objective-C types in <a href="http://monotouch.net/">MonoTouch</a>.&#160; As luck would have it, someone else did also and posted a question about it on the <a href="http://monotouch.net/Chat">MonoTouch IRC channel</a>.&#160; The poster of the question eventually came across the answer and shared it there, and I am going to post it here in case anyone else makes the same mistake and is looking for some answers.</p>
<p>I was following along with the documentation for <a href="http://monotouch.net/Documentation/Binding_New_Objective-C_Types">binding new Objective-C types</a> on the MonoTouch site, and as a way to ease into the binding process, I chose a class to define from the CloudMade SDK that I am looking to expose in MonoTouch.&#160; The class selected was the BBox class (<a href="http://developers.cloudmade.com/repositories/entry/iphone-api/iphone-api/trunk/inc/CloudMade/bbox.h">bbox.h</a>) and I went about creating the following API definition shown below:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:32446696-877b-4dce-94d1-62a9f74add99" class="wlWriterEditableSmartContent">
<pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"><span style="color: #0000FF;">using</span><span style="color: #000000;"> System;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.Foundation;
</span><span style="color: #0000FF;">using</span><span style="color: #000000;"> MonoTouch.ObjCRuntime;

</span><span style="color: #0000FF;">namespace</span><span style="color: #000000;"> CloudMade
{
    [BaseType(</span><span style="color: #0000FF;">typeof</span><span style="color: #000000;"> (NSObject))]
    </span><span style="color: #0000FF;">interface</span><span style="color: #000000;"> BBox
    {
        [Export(</span><span style="color: #800000;">"</span><span style="color: #800000;">westernLongitude</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
        </span><span style="color: #0000FF;">float</span><span style="color: #000000;"> WesternLongitude {</span><span style="color: #0000FF;">get</span><span style="color: #000000;">;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">;}

        [Export(</span><span style="color: #800000;">"</span><span style="color: #800000;">southernLatitude</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
        </span><span style="color: #0000FF;">float</span><span style="color: #000000;"> SouthernLatitude {</span><span style="color: #0000FF;">get</span><span style="color: #000000;">;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">;}

        [Export(</span><span style="color: #800000;">"</span><span style="color: #800000;">easternLongitude</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
        </span><span style="color: #0000FF;">float</span><span style="color: #000000;"> EasternLongitude {</span><span style="color: #0000FF;">get</span><span style="color: #000000;">;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">;}

        [Export(</span><span style="color: #800000;">"</span><span style="color: #800000;">northerLatitude</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
        </span><span style="color: #0000FF;">float</span><span style="color: #000000;"> NorthernLatitude {</span><span style="color: #0000FF;">get</span><span style="color: #000000;">;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">;}

        [Export(</span><span style="color: #800000;">"</span><span style="color: #800000;">asString</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
        </span><span style="color: #0000FF;">string</span><span style="color: #000000;"> AsString();
    }
}</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<div>Once completed, I saved it as BBox.cs and attempted to generate the bindings by invoking btouch on the file.&#160; You can see below the unsuccessful message I received. </div>
<div>&#160;</div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ded3f3e2-df9d-45b8-84f8-1be4953cd47a" class="wlWriterEditableSmartContent">
<pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"><span style="color: #000000;">$</span><span style="color: #000000;"> btouch BBox</span><span style="color: #000000;">.</span><span style="color: #000000;">cs
</span><span style="color: #000000;">/</span><span style="color: #000000;">var</span><span style="color: #000000;">/</span><span style="color: #000000;">folders</span><span style="color: #000000;">/</span><span style="color: #000000;">E4</span><span style="color: #000000;">/</span><span style="color: #000000;">E44PAZnZGKGpVrmseo2N3</span><span style="color: #000000;">++++</span><span style="color: #000000;">TI</span><span style="color: #000000;">/</span><span style="color: #000000;">-Tmp-</span><span style="color: #000000;">/</span><span style="color: #000000;">9qgrm9nm</span><span style="color: #000000;">.</span><span style="color: #000000;">lnv</span><span style="color: #000000;">/</span><span style="color: #000000;">CloudMade</span><span style="color: #000000;">/</span><span style="color: #000000;">BBox</span><span style="color: #000000;">.</span><span style="color: #000000;">g</span><span style="color: #000000;">.</span><span style="color: #000000;">cs</span><span style="color: #000000;">(</span><span style="color: #000000;">46</span><span style="color: #000000;">,</span><span style="color: #000000;">71</span><span style="color: #000000;">)</span><span style="color: #000000;">: error CS0117: `CloudMade</span><span style="color: #000000;">.</span><span style="color: #000000;">BBox' does </span><span style="color: #0000FF;">not</span><span style="color: #000000;"> contain a definition </span><span style="color: #0000FF;">for</span><span style="color: #000000;"> `Messaging'
</span><span style="color: #000000;">/</span><span style="color: #000000;">var</span><span style="color: #000000;">/</span><span style="color: #000000;">folders</span><span style="color: #000000;">/</span><span style="color: #000000;">E4</span><span style="color: #000000;">/</span><span style="color: #000000;">E44PAZnZGKGpVrmseo2N3</span><span style="color: #000000;">++++</span><span style="color: #000000;">TI</span><span style="color: #000000;">/</span><span style="color: #000000;">-Tmp-</span><span style="color: #000000;">/</span><span style="color: #000000;">9qgrm9nm</span><span style="color: #000000;">.</span><span style="color: #000000;">lnv</span><span style="color: #000000;">/</span><span style="color: #000000;">CloudMade</span><span style="color: #000000;">/</span><span style="color: #000000;">BBox</span><span style="color: #000000;">.</span><span style="color: #000000;">g</span><span style="color: #000000;">.</span><span style="color: #000000;">cs</span><span style="color: #000000;">(</span><span style="color: #000000;">28</span><span style="color: #000000;">,</span><span style="color: #000000;">30</span><span style="color: #000000;">)</span><span style="color: #000000;">: </span><span style="color: #000000;">(</span><span style="color: #000000;">Location of the symbol related to previous error</span><span style="color: #000000;">)</span><span style="color: #000000;">
</span><span style="color: #000000;">/</span><span style="color: #000000;">var</span><span style="color: #000000;">/</span><span style="color: #000000;">folders</span><span style="color: #000000;">/</span><span style="color: #000000;">E4</span><span style="color: #000000;">/</span><span style="color: #000000;">E44PAZnZGKGpVrmseo2N3</span><span style="color: #000000;">++++</span><span style="color: #000000;">TI</span><span style="color: #000000;">/</span><span style="color: #000000;">-Tmp-</span><span style="color: #000000;">/</span><span style="color: #000000;">9qgrm9nm</span><span style="color: #000000;">.</span><span style="color: #000000;">lnv</span><span style="color: #000000;">/</span><span style="color: #000000;">CloudMade</span><span style="color: #000000;">/</span><span style="color: #000000;">BBox</span><span style="color: #000000;">.</span><span style="color: #000000;">g</span><span style="color: #000000;">.</span><span style="color: #000000;">cs</span><span style="color: #000000;">(</span><span style="color: #000000;">57</span><span style="color: #000000;">,</span><span style="color: #000000;">71</span><span style="color: #000000;">)</span><span style="color: #000000;">: error CS0117: `CloudMade</span><span style="color: #000000;">.</span><span style="color: #000000;">BBox' does </span><span style="color: #0000FF;">not</span><span style="color: #000000;"> contain a definition </span><span style="color: #0000FF;">for</span><span style="color: #000000;"> `Messaging'
</span><span style="color: #000000;">/</span><span style="color: #000000;">var</span><span style="color: #000000;">/</span><span style="color: #000000;">folders</span><span style="color: #000000;">/</span><span style="color: #000000;">E4</span><span style="color: #000000;">/</span><span style="color: #000000;">E44PAZnZGKGpVrmseo2N3</span><span style="color: #000000;">++++</span><span style="color: #000000;">TI</span><span style="color: #000000;">/</span><span style="color: #000000;">-Tmp-</span><span style="color: #000000;">/</span><span style="color: #000000;">9qgrm9nm</span><span style="color: #000000;">.</span><span style="color: #000000;">lnv</span><span style="color: #000000;">/</span><span style="color: #000000;">CloudMade</span><span style="color: #000000;">/</span><span style="color: #000000;">BBox</span><span style="color: #000000;">.</span><span style="color: #000000;">g</span><span style="color: #000000;">.</span><span style="color: #000000;">cs</span><span style="color: #000000;">(</span><span style="color: #000000;">28</span><span style="color: #000000;">,</span><span style="color: #000000;">30</span><span style="color: #000000;">)</span><span style="color: #000000;">: </span><span style="color: #000000;">(</span><span style="color: #000000;">Location of the symbol related to previous error</span><span style="color: #000000;">)</span><span style="color: #000000;">
Compilation failed: </span><span style="color: #000000;">2</span><span style="color: #000000;"> error</span><span style="color: #000000;">(</span><span style="color: #000000;">s</span><span style="color: #000000;">),</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> warnings
btouch: API binding contains errors</span><span style="color: #000000;">.</span><span style="color: #000000;">
</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<div>After looking at the errors and seeing the<strong><em> `CloudMade.BBox&#8217; does not contain a definition for `Messaging&#8217;</em></strong> message, it looked as if I was missing a using statement.&#160; However, this was not the case as <em>Messaging</em> is a class in the MonoTouch.ObjCRuntime namespace and that namespace was already included in the using statements.&#160; The problem actually turned out to be that the interface had the same name as the file and that had caused the issues shown above as the temporary classes generated during the process caused conflicts.&#160; The solution to this issue was as simple as renaming the file to something other than whatever the interfaces you are defining are named.</div>
<div>&#160;</div>
<div>So the moral of the story is:</div>
<p><strong><em>Do not give the file that the API definition is being saved in the same name as one of the interfaces that you are defining.</em></strong></p>
<p>Steer clear of that and you’ll be binding Objective-C types with ease.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/02/monotouch-binding-gotcha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nexus One &#8211; First Impressions</title>
		<link>http://blog.kevfoo.com/index.php/2010/02/nexus-one-first-impressions/</link>
		<comments>http://blog.kevfoo.com/index.php/2010/02/nexus-one-first-impressions/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 04:24:11 +0000</pubDate>
		<dc:creator>Kevin McMahon</dc:creator>
				<category><![CDATA[nexus one]]></category>
		<category><![CDATA[3gs]]></category>
		<category><![CDATA[Active Desktop]]></category>
		<category><![CDATA[Amount Of Money]]></category>
		<category><![CDATA[First Impressions]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Interactive Widgets]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Lcd Screens]]></category>
		<category><![CDATA[Light Situations]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Oled Screen]]></category>
		<category><![CDATA[Pandora]]></category>
		<category><![CDATA[Perspective]]></category>
		<category><![CDATA[Short Time]]></category>
		<category><![CDATA[Signs]]></category>
		<category><![CDATA[Sluggishness]]></category>
		<category><![CDATA[Ui]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://blog.kevfoo.com/index.php/2010/02/nexus-one-first-impressions/</guid>
		<description><![CDATA[My thoughts on the Nexus One and the Android OS?&#160; I like it.&#160; A lot. Likes: Speed.&#160; I have the older iPhone 3G hardware and from a user experience perspective it was not that bad.&#160; When compared to the Nexus One, however, it is down right sluggish.&#160; This probably isn’t as big of a factor [...]]]></description>
			<content:encoded><![CDATA[<p>My thoughts on the <a href="http://www.google.com/phone">Nexus One</a> and the Android OS?&#160; I like it.&#160; A lot. </p>
<p>Likes:</p>
<ul>
<li>Speed.&#160; I have the older iPhone 3G hardware and from a user experience perspective it was not that bad.&#160; When compared to the Nexus One, however, it is down right sluggish.&#160; This probably isn’t as big of a factor when comparing a 3GS versus Nexus One, but for someone coming from a 3G iPhone, it is a huge plus.</li>
<li>Being able to run apps in the background.&#160; Browsing the web while streaming Pandora and downloading an app in the background works flawlessly and shows no noticeable signs of lag or sluggishness.</li>
<li>The OLED screen is really nice.&#160; Higher resolution and OLED screen looks great in low-light situations and is supposed to save precious battery by not drawing less power than normal LCD screens.</li>
<li>The Android OS is pretty sweet.&#160; It has a lot of nice features like the status bar, an active “desktop” that you can put interactive widgets on as well as app icons, and an easy way to get music and files on and off the device.&#160;&#160; </li>
<li>Integration with Google Apps is fantastic as expected.&#160; I love getting mail and talk updates in the status bar and the overall experience with the apps on the Nexus One is better than on the iPhone. </li>
</ul>
<p>Dislikes:</p>
<ul>
<li>Cut and Paste is clunky.&#160; I can see why Apple needed to spend awhile working out the UX issues before rolling it out.</li>
<li>The touch interaction with the device has not been as good as the iPhone in my experience.&#160; I am not sure where the blame lies (hardware or software), but I sometimes find it difficult to select elements in the UI.&#160; This is not something that occurs frequently, but in the short time I’ve owned the device, it has occurred enough to be noticeable. </li>
<li>4GB of storage out of the box is lacking.&#160; It is an easy upgrade but given the amount of money that Google is charging for the device, this seems like they are skimping here.</li>
<li>The <a href="http://www.android.com/market/">Android Market</a> place experience is integrated nicely but isn’t as tightly integrated as the iTunes App Store.&#160; This is arguably a good or a bad thing depending on how you look at it.&#160; As a user this is a bad thing since it makes finding and buying apps more difficult than just popping open iTunes.&#160; I’ve found the Android Marketplace, both on the phone and the web, hard to browse.</li>
</ul>
<p>There are a few negatives that I can’t pin exclusively on the device but are still worth noting.&#160; I have been using my AT&amp;T SIM with the Nexus One and most likely will do so until my contract is up in a few months.&#160; With that caveat out of the way, the talk quality seemed poor and the phone gets really hot when talking for periods greater than 10 minutes.&#160; I hesitate to even mention these issues since I am not using the phone on the network it was intended, but&#160; I know there probably are others considering doing what I did, and this feedback might help if someone is on the fence.</p>
<p>The Nexus One is exactly the kind of phone and competition that was needed to push Apple.&#160; I strongly recommend anyone looking for a smartphone to give it serious consideration before running out and getting an iPhone.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kevfoo.com/index.php/2010/02/nexus-one-first-impressions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
