<?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>A Dash of Web and Mobile Development</title>
	<atom:link href="http://blog.iangclifton.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.iangclifton.com</link>
	<description>Discussing trends and technologies in web and mobile development</description>
	<lastBuildDate>Tue, 15 May 2012 06:50:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>An iPhone UI And UX Analysis</title>
		<link>http://blog.iangclifton.com/2012/05/14/an-iphone-ui-and-ux-analysis/</link>
		<comments>http://blog.iangclifton.com/2012/05/14/an-iphone-ui-and-ux-analysis/#comments</comments>
		<pubDate>Tue, 15 May 2012 06:50:13 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Mobile Devices]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=565</guid>
		<description><![CDATA[The battle of smartphone platforms frequently brings out impassioned fans of each side, and the arguments often repeat. This seems to be particularly true between Android and iOS, the two largest smartphone operating systems by market share. There are concrete &#8230; <a href="http://blog.iangclifton.com/2012/05/14/an-iphone-ui-and-ux-analysis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The battle of smartphone platforms frequently brings out impassioned fans of each side, and the arguments often repeat.  This seems to be particularly true between Android and iOS, the two largest smartphone operating systems by market share. There are concrete differences between the two, such as the hardware differences and feature differences, but one of the most common arguments for the iPhone side seems to be &#8220;It&#8217;s a better user experience.&#8221;  When pressed for more details, the responses veer away from useful, concrete details.  &#8220;The UI is more consistent.&#8221;  &#8220;It&#8217;s easier to use.&#8221;  Well, I decided to put it to the test.  The following is an analysis of the user interface (UI) and user experience (UX) of an iPhone from an Android user&#8217;s perspective.<span id="more-565"></span></p>
<p>To be fair, this post is focused on first-party applications and iOS as an operating system.  It does not cover the details of third-party apps.</p>
<p><strong>Speed</strong><br />
A good user experience is a fast one, and that is especially true on a mobile device.  You want to be able to jump into whatever you need to do and jump back out.  Unfortunately, every iOS app requires a splash screen, which is referred to as a &#8220;launch image&#8221; (in fact, developers should be including six different ones to support each screen configuration).  Apple specifically says:</p>
<blockquote><p>Avoid using your launch image as an opportunity to provide&#8230; An “application entry experience,” such as a splash screen&#8230; [or] Branding elements, unless they are a static part of your application’s first screen &#8212; <a href="http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW5">iOS Human Interface Guidelines</a></p></blockquote>
<p>And yet, nearly every app uses this as a branding opportunity.  Regardless, the first-party apps are consistent with using this image to give the user a blank UI until the app loads.  That means the user waits with a blank UI for even the simplest of apps, like the Settings app.  It&#8217;s infuriating as an Android user to wait for a simple app to load.  When you don&#8217;t support widgets, it&#8217;s essential for apps to load quickly.  Checking the weather shouldn&#8217;t take several seconds.  Switching Wi-Fi off should not be an exercise in patience.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui1.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui1-200x300.png" alt="" title="ios_blank_ui1" width="200" height="300" class="alignnone size-medium wp-image-568" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui2.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui2-200x300.png" alt="" title="ios_blank_ui2" width="200" height="300" class="alignnone size-medium wp-image-569" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui3.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_blank_ui3-200x300.png" alt="" title="ios_blank_ui3" width="200" height="300" class="alignnone size-medium wp-image-570" /></a> </p>
<p><strong>Basic Navigation</strong><br />
Basic navigation is mostly consistent in iOS.  You touch something to activate it and swipe to scroll; however, swipes in some places activate delete mode.  Having two very different functions for the same gesture with no visual indication is inconsistent at best.  For example, a horizontal swipe on an email creates or removes a delete button.  A horizontal swipe on an entry in Stocks selects the stock (unless you had any vertical motion, in which case it scrolls).  Fortunately, it&#8217;s not a directly harmful interaction.</p>
<p>The real problem comes with temporal navigation in iOS.  It simply doesn&#8217;t exist.  There is no consistent way to go back to what you were previously doing.  All of the navigation is based on hierarchy and mode/context, the latter of which is particularly troublesome for users.  Users of iOS are forced to hunt for the appropriate action based on the current app and context.</p>
<p>There are even times when your current position is not indicated by the tabs at the bottom and it&#8217;s unclear from the top of the screen.  Take a look at this screenshot where there&#8217;s a button (not shaped like a back button) in the title bar that has the same text as the title bar and no tab is selected.  This leaves me wondering, &#8220;Where am I in the larger context of the app?&#8221;</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_newstand.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_newstand-200x300.png" alt="" title="ios_newstand" width="200" height="300" class="alignnone size-medium wp-image-581" /></a></p>
<p><strong>Poor Orientation Support</strong><br />
As an iOS developer, one of the most common and most annoying things that comes across from apps that are built for both iOS and Android at the same time is a &#8220;let&#8217;s only support one orientation&#8221; mindset.  Android is all about user choice and supporting landscape and portrait is a part of that (and even more important when considering the orientation of physical keyboards).  Your app should adapt to the user not the other way around, but the majority of iPhone apps only support portrait orientation.  I originally thought that this was because it&#8217;s simply more work to support multiple orientations (where it&#8217;s very little work on the Android side), but then I discovered that even the OS doesn&#8217;t properly support landscape.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_mixed_orientation.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_mixed_orientation-400x266.png" alt="" title="ios_mixed_orientation" width="400" height="266" class="alignnone size-medium wp-image-575" /></a></p>
<p><strong>Horrible Keyboard</strong><br />
One of the big controversies with the original iPhone was the fact that it ditched the physical keyboard for a software keyboard.  That saves Apple money (localizing software is much easier and cheaper than hardware) and it makes the device thinner.  In general, the iPhone does a decent job of capturing your input and making reasonable text out of it.  Unfortunately the keyboard is abysmal in comparison to Android&#8217;s stock Ice Cream Sandwich keyboard (and worse if you compare it to third-party offerings).</p>
<p>There is no period key on the main keyboard, so typing something like &#8220;U.S.A.&#8221; takes 13+ presses.  Press shift, press a letter, press the symbols key, press the period, press the ABC key, and repeat.  I feel like the keyboard is purposely making this hard on me.  The keyboard forgets if I&#8217;ve enabled caps lock as soon as I press the symbols key.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard1.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard1-400x270.png" alt="" title="ios_keyboard1" width="400" height="270" class="alignnone size-medium wp-image-577" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard2.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard2-400x270.png" alt="" title="ios_keyboard2" width="400" height="270" class="alignnone size-medium wp-image-578" /></a></p>
<p>In certain situations, Apple clearly feels that the period key can fit, but they choose to shrink the spacebar to the left instead of to the center.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard3.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_keyboard3-400x270.png" alt="" title="ios_keyboard3" width="400" height="270" class="alignnone size-medium wp-image-579" /></a></p>
<p>Worse, the keyboard does not bother to actually reflect capital letters vs. lowercase letters.  You have to look at the shift key, which is probably blocked by your hovering thumb.  This is really problematic when entering text in a form where the first letter may or may not be capitalized for you.  As you press each letter, you get an annoying click, as if Apple decided their keyboard should only be a hint better than a typewriter and there&#8217;s no haptic feedback, making the keyboard feel <em>flat</em> and lifeless.  Since any reasonable person disables the annoying clicking sound to avoid torturing everyone nearby, you have to stare at your thumbs, which means you are looking at the bottom of the screen when the top of the screen is where your auto-correct notices appear.</p>
<p><strong>The One Button</strong><br />
What do you call the button on the front of the iPhone?  It seems to have a hundred different purposes.  So many iOS proponents talk poorly of the buttons on Android but seem to be fine with all these functions tied to a hardware button that feels downright clunky.</p>
<ul>
<li>One press on first home screen goes to search</li>
<li>One press on home screen or search while recent apps tray is open closes that tray</li>
<li>One press with the notification screen down closes the notifications</li>
<li>One press in an app when recent apps tray is open closes the tray and goes to home screen</li>
<li>One press when in app deletion/move mode on the homescreen turns that mode off</li>
<li>One press when not on first home screen goes to first home screen</li>
<li>Two presses opens recent apps tray if it&#8217;s not open</li>
<li>Two presses closes recent apps tray if it&#8217;s open</li>
<li>Two presses when voice features is open does nothing</li>
<li>Three presses activates custom settings (e.g., inverting colors for accessibility)</li>
<li>Long pressing activates voice features</li>
</ul>
<p>I may have missed some because it clearly has many, <em>many</em> features, but that&#8217;s eleven already.  It seems like this button does some of what the back button on Android does but only in specific situations.  In other cases it acts like a home button.  In others, it&#8217;s like a multitasking key.  Is this really a better experience than having a back key, home key, and multitasking key?</p>
<p><strong>Sharing</strong><br />
Sharing on iOS feels ages behind Android.  You can&#8217;t just share across apps.  Even looking at the first-party apps, it&#8217;s confusing.  Going into your camera roll (or other album) gives you an icon on the bottom.  It&#8217;s used as the share icon elsewhere, but here it seems to mean &#8220;share or copy or add to or delete.&#8221;  I figured this would be the easiest way to get the screenshots to my computer, so I selected some, picked share and got this:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share1.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share1-200x300.png" alt="" title="ios_photo_share1" width="200" height="300" class="alignnone size-medium wp-image-592" /></a></p>
<p>Perfect!  I can just select all the photos I want to send and send them all in one email.  That was a major gripe I had before with iOS (multiple attachments) and it appeared to be solved.  So, I selected several photos and then tried to share and I got this:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share3.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share3-200x300.png" alt="" title="ios_photo_share3" width="200" height="300" class="alignnone size-medium wp-image-594" /></a></p>
<p>Wait!?  Where did my email option go?  I deselected some photos and got this:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share2.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_photo_share2-200x300.png" alt="" title="ios_photo_share2" width="200" height="300" class="alignnone size-medium wp-image-593" /></a></p>
<p>So, the sharing actions you can take are dependent on how many photos you have selected.  That&#8217;s fairly reasonable.  The problem is that you have to actually try to share to even know that this changes what will be available.  Why can&#8217;t I share six photos?  Because Apple said so and that tends to be the answer to far too many of my questions with iOS.</p>
<p><strong>Fonts Are Tiny</strong><br />
When you&#8217;ve got an extremely small display (less than two inches wide) and a massive audience (some with visual impairments), being able to adjust font sizes is essential.  You can&#8217;t in iOS (with the exception of a few specific places for accessibility).  Designers love it because that means they can align text up to the pixel, but I can&#8217;t imagine that users genuinely enjoy having no control over how easy it is to read text on their devices.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_tiny_fonts.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_tiny_fonts-200x300.png" alt="" title="ios_tiny_fonts" width="200" height="300" class="alignnone size-medium wp-image-576" /></a></p>
<p><strong>Visual Clutter</strong><br />
In the interest of design, Apple has created a lot of extra shapes in some of the apps.  A good example is the Settings app, which looks extremely dated.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_settings.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_settings-200x300.png" alt="" title="ios_settings" width="200" height="300" class="alignnone size-medium wp-image-582" /></a></p>
<p>Besides the ugly stripes and extra shapes that the rounded corners and needless chevrons cause, additional visual confusion is caused by the seemingly meaningless grouping of elements.  When details apply to a particular item, they&#8217;re just sort of thrown on the screen without any visual tie-in.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_settings_subtext.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_settings_subtext-200x300.png" alt="" title="ios_settings_subtext" width="200" height="300" class="alignnone size-medium wp-image-583" /></a></p>
<p>(Note that I removed the name of the account since it was not mine.)  The extra text seems to just be added right on top of the stripes, making it hard to read, and preventing it from actually being visually associated with the button it&#8217;s applicable to.</p>
<p>The more shapes there are on the screen, the harder it is to interpret, yet, there are unique shapes and icons all over the place.  Many of them are not clear.  Looking at these, I can only guess what two do:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_email_icons.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/05/ios_email_icons.png" alt="" title="ios_email_icons" width="640" height="88" class="alignnone size-full wp-image-585" /></a></p>
<p><strong>The Other Issues</strong><br />
There is no indication that you have notifications waiting; you have to pull down the notification bar to see whether anything is there.  It also doesn&#8217;t contain status info such as when music is playing.  There isn&#8217;t any info about apps that can be updated.  Really, it feels like it was only implemented to quell those of us who couldn&#8217;t stand the excessively intrusive notifications of the past iOS versions rather than to unify the mobile experience.  Further, I think the notification system should have been implemented on the top portion of the screen when you open the recent apps tray in order to tie the system together instead of adding another hidden gesture.</p>
<p><strong>Real-World Examples</strong><br />
This stuff might all seem picky, but I attempted to pull out the specifics of issues I had.  We can easily look at larger, real-world scenarios.  For example, I was given an iPhone at work for testing, so I played around with it a bit.  I had no idea if it was an iPhone 4 or 4S, so I held down <em>The One Button</em> for a few seconds and the voice prompt came up.  I asked, &#8220;What can you do?&#8221;  After a significant delay, I was thrown back to the home screen and some bizarre music was playing.  Obviously, I didn&#8217;t intend the music to play (and I had no idea what my words were interpreted as), so I wanted to stop it.</p>
<p>I pulled down the notification bar but there was nothing about the music that was playing.  I scrolled through the endless list of icons before finding iTunes.  I opened that only to discover that it&#8217;s more of a media store and doesn&#8217;t control music playback (unlike the desktop app of the same name).  I double-tapped <em>The One Button</em>, but there was no music app listed.  Apparently I was supposed to know that the music controls are hidden to the left of the recent apps?</p>
<p><strong>Conclusion</strong><br />
There are dozens of other examples throughout the iOS experience that are jarring and disconnected, but this quick sample should help prove the point that iOS is not perfect.  The UX simply is not better than Android because the majority of interactions are more complicated (consider how you&#8217;d share a webpage you&#8217;re viewing with a third-party app) and so much of the OS is context-specific in a way that forces the user to think far more than necessary.  I feel that the OS is fighting me more than working with me.  It hides features in order to simplify the UI but turns around and complicates it with extra shapes and unclear symbols.</p>
<p>I&#8217;d love to hear a detailed rebuttal of specific UI and UX elements in iOS that make it superior to Android because I&#8217;ve found that it has fallen quite short of my expectations, which were already short of where Android is today.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2012/05/14/an-iphone-ui-and-ux-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Path For Android: Minor UI Analysis</title>
		<link>http://blog.iangclifton.com/2012/02/14/path-for-android-minor-ui-analysis/</link>
		<comments>http://blog.iangclifton.com/2012/02/14/path-for-android-minor-ui-analysis/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 04:30:43 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Mobile Applications]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=550</guid>
		<description><![CDATA[While developing a mobile application, it&#8217;s very common to discuss how other apps solve problems that your app has or will encounter. Recently, one of the example apps that was discussed was Path. You&#8217;ve probably heard of it since it &#8230; <a href="http://blog.iangclifton.com/2012/02/14/path-for-android-minor-ui-analysis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While developing a mobile application, it&#8217;s very common to discuss how other apps solve problems that your app has or will encounter.  Recently, one of the example apps that was discussed was <a href="https://path.com/">Path</a>.  You&#8217;ve probably heard of it since it has recently seen a lot of press for uploading users&#8217; address books on iOS without permission, but if you&#8217;ve somehow managed to not hear of it, you can think of it as a simple, social journal.  Since I wasn&#8217;t familiar with the app, I downloaded it on my Galaxy Nexus and gave it a try.</p>
<p>I was surprised at how unintuitive I found the UI to be.<span id="more-550"></span></p>
<p>It&#8217;s pretty clear that it&#8217;s heavily inspired by iOS design, which often lowers the quality of Android apps (not because the iOS design is bad but because it breaks user-expected conventions), but there were also several general UI/UX problems.</p>
<p>I played around with the app a bit and finally decided to set a profile image.  If you look at this first screenshot, you can see how the profile image is vital to understanding each &#8220;cell&#8221; of data since user&#8217;s names do not appear&#8211;you can&#8217;t tell <em>whom</em> any of the updates belong to without the profile image.  So I pressed the big, circular profile image.  And I went from the screen on the left to the screen on the right:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-54-21.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-54-21-168x300.png" alt="" title="Path Main Screen" width="168" height="300" class="alignnone size-medium wp-image-551" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-54-37.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-54-37-168x300.jpg" alt="" title="Path User Details" width="168" height="300" class="alignnone size-medium wp-image-553" /></a></p>
<p>Since I hadn&#8217;t yet added any friends, it was unclear what the difference between these screens was.  The UI was a bit different, but why was the picture so much bigger with identical content?  It only took a couple of seconds to realize that this was the page for me, specifically, but that was needless user confusion.  Okay, so clicking on my generic profile image takes me to this page.  What happens when I press it again?  I get a dialog to either take a photo or pick one from the gallery, so I take a quick shot and end up with this:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-55-36.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-09-55-36-168x300.png" alt="" title="Path Cover Image" width="168" height="300" class="alignnone size-medium wp-image-555" /></a></p>
<p>Yikes!  That&#8217;s not what I intended.  Apparently tapping on the profile image lets you change your &#8220;cover&#8221; image.  To be fair, it did say &#8220;Set Cover&#8221; when choosing either to take a photo or choose from the gallery, but that isn&#8217;t much context and most users don&#8217;t read the dialog title, especially when they have a pre-conception of what it should be for (which appears to be confirmed by the dialog&#8217;s content).  Okay, okay, I guess I have to go into settings to change it.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-14-19-22-47.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-14-19-22-47-168x300.png" alt="" title="Path Menu" width="168" height="300" class="alignnone size-medium wp-image-556" /></a></p>
<p>Yuck, the menu screen is ugly and there&#8217;s no reason for it to be a separate screen.  I&#8217;d argue that it should be just an overflow menu, which would mean it should be at the top right to follow convention.  That would make it faster and consistent with other apps.  It looks like they&#8217;ve kept this bit of UI from their iPhone app, where the menu button in the top left appears to be a convention that&#8217;s dropped down from iPad and is employed in other apps such as Facebook; however, Facebook is the only other Android example I found of this, and it behaves differently from Path.  And did I mention this menu screen has chevrons on it that shouldn&#8217;t be included on Android apps?</p>
<p>Anyway, I get distracted and go into &#8220;Activity&#8221; because I have no idea what that is.  Here&#8217;s what I see:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-10-11-36.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-10-11-36-168x300.png" alt="" title="Path Activity" width="168" height="300" class="alignnone size-medium wp-image-557" /></a></p>
<p>Uh&#8230; okay.  <strong>Never have a blank UI</strong>.  If you don&#8217;t have content, explain why you don&#8217;t have content so the user will know what will go there and how to make it happen.  At least I am able to count on the Android back button being consistent.  I go back to the menu screen and go to settings.  Suddenly, I&#8217;m using an iOS device:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-10-11-44.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-07-10-11-44-168x300.png" alt="" title="Path Settings Screen" width="168" height="300" class="alignnone size-medium wp-image-558" /></a></p>
<p>To be fair, the only thing really wrong with this screen from a standalone UI standpoint is the whitespace around the section headings is even on the top and bottom; it should have less spacing on the bottom to associate the headings with the content.  This screen looks pretty nice, but it&#8217;s a slightly modified version of a typical iOS settings screen; in other words, it doesn&#8217;t belong on Android.  Why not use the convention for Android settings screens?  It&#8217;s more familiar to the users and it takes less time for the developer.</p>
<p>Eventually, I got both my &#8220;cover&#8221; photo and my profile image set and things looked a lot better:</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-14-19-19-46.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/Screenshot_2012-02-14-19-19-46-168x300.png" alt="" title="Path Screenshot" width="168" height="300" class="alignnone size-medium wp-image-559" /></a></p>
<p>It all looks pretty good, except that you can tap the smiley face on an entry that&#8217;s near the bottom of the screen and can&#8217;t interact with the resulting menu.  It also appears that the smiley face button is lighter when included in a thought bubble than when next to a status update.</p>
<p>The custom &#8220;add&#8221; menu at the bottom left of the main page is pretty nice, but the individual buttons are a bit small and pressing back after opening it closes the app rather than dismissing the menu.</p>
<p>Overall, it&#8217;s a nice app, but it brings too much of its iOS side to Android without good reason.  Of all these issues, the biggest flaw is really that the most intuitive way of setting your profile image does not work, and that&#8217;s a major problem when your UI depends on everyone having a custom profile image.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2012/02/14/path-for-android-minor-ui-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4.65 Inches</title>
		<link>http://blog.iangclifton.com/2012/02/09/4-65-inches/</link>
		<comments>http://blog.iangclifton.com/2012/02/09/4-65-inches/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 04:55:10 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Mobile Devices]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[evo 4g]]></category>
		<category><![CDATA[galaxy nexus]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[nexus one]]></category>
		<category><![CDATA[nexus s]]></category>
		<category><![CDATA[samsung]]></category>
		<category><![CDATA[screen size]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=536</guid>
		<description><![CDATA[I&#8217;ll have to admit, when I ordered my Galaxy Nexus, I was a bit worried that it would be too big. When the Evo first came out, it felt right at the edge of comfortable for me, partly because I &#8230; <a href="http://blog.iangclifton.com/2012/02/09/4-65-inches/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll have to admit, when I ordered my Galaxy Nexus, I was a bit worried that it would be too big.  When the Evo first came out, it felt right at the edge of comfortable for me, partly because I was so used to my Nexus One (4.3&#8243; screen compared to 3.7&#8243;).  I knew I&#8217;d still love the Galaxy Nexus because it was a huge step up in both hardware and software unlike the Nexus S, but was I going to have to tolerate the extra size?<span id="more-536"></span></p>
<p>Very shortly after using the device, I knew it wasn&#8217;t too big (in fact, that was one of my early <a href="https://twitter.com/#!/IanGClifton/status/143401556417585152">tweets about the GN</a>).  The thinness helped to eliminate the psychological feeling of bulk, but what about being able to touch everywhere on the screen?</p>
<p>Dustin Curtis posted a blog entry called <a href="http://dcurt.is/2011/10/03/3-point-5-inches/">3.5 Inches</a> about how Apple chose 3.5&#8243; and that manufacturers who made bigger devices were &#8220;doing it wrong.&#8221;  He claimed that Apple&#8217;s size choice is &#8220;one of the things that makes Apple products Apple products.&#8221;  His simplistic images were enough to convince several blogs to do what they do best: reiterate without investigating.  I didn&#8217;t see any major blogs that pointed out that his thumb would have to be only <em>two inches long</em> for the iPhone picture to be accurate.  Not to mention that the Galaxy SII is roughly 66mm wide and the iPhone is 59mm wide, so there isn&#8217;t <em>that</em> much difference in the width.  In fact, according to the images, his thumb actually grows when he uses an iPhone and shrinks when he uses the Galaxy S2.</p>
<p><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/iphone-galaxy-s2-reachable-area.jpg" alt="" title="iPhone and Galaxy S reachable areas" width="286" height="297" class="aligncenter size-full wp-image-537" /></p>
<p>Spontaneous genetic mutations aside, hands come in many different sizes and Apple has chosen to continue going the route of a small screen (at least, by today&#8217;s standards), whether due to historical reasons, profits, or simply their typical 80% targetting (3.5&#8243; is probably usable by 80% of people, even if it isn&#8217;t an ideal experience for many of them).  Meanwhile, other companies are varying their sizes, feeling out the market, and finding that the demand for larger screen sizes does exist.  John Gruber suggested that <a href="http://daringfireball.net/2012/01/why_are_android_phones_bigger">Android devices only have big screens because LTE chips are big</a>.  Not only is the first part of his post wrong (Android has supported density specific assets for years), but the Samsung Galaxy Attain 4G has an LTE chip and 3.5&#8243; display and it&#8217;s only 2mm taller than an iPhone, 4mm wider, 2mm thicker, and weighs .67oz less.</p>
<p>So why do iPhone users create alternative explanations to why Android devices are the &#8220;wrong&#8221; screen size?  Because&#8230;</p>
<p><strong>They&#8217;re holding it wrong.</strong><br />
<a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/holding-it-wrong.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/holding-it-wrong-200x300.jpg" alt="" title="Holding it wrong" width="200" height="300" class="size-medium wp-image-538" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/holding-it-right.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/holding-it-right-200x300.jpg" alt="" title="Holding it right" width="200" height="300" class="size-medium wp-image-539" /></a></p>
<p>When holding a large phone, you shouldn&#8217;t hold it against the inside of your thumb; you should hold it with the tips of your fingers and press it against your palm.  This gives you more flexibility and eliminates the need for a huge bezel because your fingers aren&#8217;t wrapping around it.  As long as your phone is properly built to have a non-slick back, this works far better.</p>
<p>Here are some photos illustrating my reach with very average sized hands:<br />
<a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-top-right.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-top-right-200x300.jpg" alt="" title="Galaxy Nexus - Touching the top right" width="200" height="300" class="size-medium wp-image-540" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-middle-right.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-middle-right-200x300.jpg" alt="" title="Galaxy Nexus - Touching the middle right" width="200" height="300" class="size-medium wp-image-541" /></a> <a href="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-bottom-right.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2012/02/galaxy_nexus-bottom-right-200x300.jpg" alt="" title="Galaxy Nexus - Touching the bottom right" width="200" height="300" class="size-medium wp-image-542" /></a></p>
<p>My Galaxy Nexus is not too large; in fact, other phones feel too small compared to it (besides beasts like the Note anyway).  More importantly, when I am using the device, I am viewing the screen far more often than trying to tap the farthest corners with one hand.  The reality is that, unlike Google, Apple has not designed their OS around flexibility.  Launching a device with a 4.3&#8243; screen would be a nightmare for them.  Maintaining >300dpi means that apps would break.  Maintaining the pixel count means everything on the screen would just become bigger and less clear.</p>
<p>In the end, like always, it comes down to <strong>what works best for you</strong>.  Telling most NBA players that 3.5&#8243; is the ideal size is as silly as telling people with small hands that 4.65&#8243; is ideal.  If your hands are average size, consider trying out a device with a 4.5&#8243; screen; if it&#8217;s too big, work your way down.  Don&#8217;t settle for a tiny screen because someone else tells you it&#8217;s ideal.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2012/02/09/4-65-inches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working Conditions In Chinese Factories</title>
		<link>http://blog.iangclifton.com/2012/02/02/working-conditions-in-chinese-factories/</link>
		<comments>http://blog.iangclifton.com/2012/02/02/working-conditions-in-chinese-factories/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 05:15:35 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Opinion / Just Talking]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[china]]></category>
		<category><![CDATA[foxconn]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[motorola]]></category>
		<category><![CDATA[samsung]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=531</guid>
		<description><![CDATA[The average user never really sees the internals of a phone; those of us who care a little more might look through the latest photos from an ifixit teardown. But how often do we really think about the process that &#8230; <a href="http://blog.iangclifton.com/2012/02/02/working-conditions-in-chinese-factories/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The average user never really sees the internals of a phone; those of us who care a little more might look through the latest photos from an <a href="http://www.ifixit.com/Teardown">ifixit teardown</a>.  But how often do we really think about the process that goes into making our devices?</p>
<p>I made the assumption that the chips were designed by very smart people with the aid of computers, the construction of each component was done by sophisticated machines, and the human workers along the process were largely limited to final assembly and testing.  I was quite wrong.<span id="more-531"></span></p>
<p>By now you&#8217;ve surely heard of (and hopefully read) the New York Times article <a href="http://www.nytimes.com/2012/01/26/business/ieconomy-apples-ipad-and-the-human-costs-for-workers-in-china.html?_r=2&#038;pagewanted=1">Apple&#8217;s iPad and the Human Costs for Workers in China</a>.  Another good source for information about the topic is <a href="http://www.thisamericanlife.org/radio-archives/episode/454/transcript">Mike Daisey and the Apple Factory</a>.  Both of these tell of the horrendous factory conditions in China.</p>
<p>Although Foxconn is the most common manufacturer that we see complaints about, it&#8217;s not the only one with problems and Apple isn&#8217;t the only company that uses Foxconn (both Motorola and Samsung employ Foxconn for some of their work).  Regardless, Foxconn has had the most major, publicized problems, including deadly accidents and worker suicides, and many of those have been tied to Apple&#8217;s iOS products in particular.  As outraged as I was after learning more about these conditions, I figured Apple&#8217;s users would be even more upset, so I browsed some sites looking at forums and comments and was rather disheartened.</p>
<p>AppleInsider published an article called <a href="http://www.appleinsider.com/articles/12/01/25/former_executives_accuse_apple_of_ignoring_supplier_labor_abuses.html">Former executives accuse Apple of ignoring supplier labor abuses</a> that outlined a few of the points from the NYT article.  Here are some example responses:</p>
<blockquote><p>So cowards are willing to make accusations without providing evidence or their manes[sic].<br />
What a joke.</p>
<p>Give us name and dates&#8230;. &#8212; Patranus</p></blockquote>
<p>Apparently anonymity means the info is invalid (well, except in the latest iDevice rumors, of course).</p>
<blockquote><p>&#8230;.what&#8217;s even more pitiful is to blame Apple for a Chinese Corporations[sic] bylaws and worker right conditions&#8211;China is responsible for them. &#8212; mdriftmeyer</p></blockquote>
<p>In other words, humanity doesn&#8217;t cross borders.</p>
<blockquote><p>The truth is 99.9999% of those workers are thankful of Apple for their jobs. Their standard of living has increased tremendously since having worked in the rice paddies for a third of the pay. &#8212; Dickprinter</p></blockquote>
<p>I doubt this, but even if it were true, it doesn&#8217;t validate the terrible conditions for these workers.</p>
<blockquote><p>Why? Is Apple guilty of everything they are accused of until we prove them innocent?<br />
Or is it the job the shadowy accusers to bring the proof? &#8212; Suddenly Newton</p></blockquote>
<p>No, they&#8217;re not guilty of everything unless there is proof, which has already surfaced and is continuing to be revealed.  There&#8217;s at least enough evidence to warrant an investigation, and not just of the production lines that develop Apple&#8217;s devices.  I doubt if Apple is guilty of violating any laws, but laws and morals aren&#8217;t always aligned.</p>
<p>To be fair, AppleInsider tends to be extremely pro-Apple and highly focused on the value of Apple as a company (as opposed to Apple&#8217;s values).  Comments there often focus on stocks and profits as the only measurements of success for a company.  So I checked MacRumors article <a href="http://www.macrumors.com/2012/01/26/former-apple-executives-address-working-conditions-in-suppliers-factories/">Former Apple Executives Address Working Conditions in Suppliers&#8217; Factories</a></p>
<blockquote><p>The sad truth is that we want cheaper products so they use countries with lower wages and worse working/living environments. If we&#8217;d all accept a 300% jump in the cost of electronics we could manufacturer everything locally. &#8212; AppleDroid</p></blockquote>
<p>Finally, a reasonable post!  The thing is, we don&#8217;t <em>need</em> to manufacture electronics locally.  Apple has about $100,000,000,000.00 ($100 billion) in the bank, so they can clearly afford to pay manufacturers extra and build in clauses to their contracts with these manufacturers requiring that extra amount is used to improve workers&#8217; conditions.</p>
<blockquote><p>&#8230;news like this sheds light on corporate responsibility being more of a marketing term than a way of doing business. As a company currently sitting with $97.6 BILLION dollars in CASH ON HAND, they should dramatically improve the working conditions and lives of people who make their products, not have an attitude of &#8220;well everyone else does it.&#8221; While their position is popular on this forum, it&#8217;s not right. &#8212; theheadguy</p></blockquote>
<p>Well said!</p>
<blockquote><p>Looks like the Times is aiming for a Pulitzer. No coincidence that they released the story after Apple announced earnings. </p>
<p>While this is a huge problem, it is not an Apple problem; it&#8217;s a worldwide one. The media likes to attach Apple&#8217;s name to these stories because Apple stories = eyeballs. &#8212; rdowns</p></blockquote>
<p>I&#8217;m sure it isn&#8217;t a coincidence.  Apple pulling in $13 billion dollars in profit and workers dying, being subject to neurotoxins, etc. makes for a harse contrast.  The extra eyeballs can help bring change, and Apple is in the best position of any tech company to make changes.</p>
<blockquote><p>Americans may not be so inclined to complain about conditions elsewhere when they realize how much more they would have to pay for the crap they buy if everything was like conditions in America. &#8212; Undecided</p></blockquote>
<p>In other words, Americans might care more about money than human lives.  Sure, some will, but I think that&#8217;s a very tiny portion of people when the real situation is brought to light.  We&#8217;re talking about the cost of making manufacturing conditions <em>safe</em> instead of working people >60 hours per week in hazardous environments.</p>
<p>All-in-all the Mac Rumors comments were far more informed and intelligent responses than the AppleInsider comments; further, most of the heartless comments were downvoted to some extent.  9to5mac had comments fairly similar to those of Mac Rumors.</p>
<p>Finally, responses from a couple of big Apple fans.  The first comes from MG Siegler&#8217;s <a href="http://parislemon.com/post/16561630035/this-is-why-we-cant-have-nice-things">This Is Why We Can&#8217;t Have Nice Things</a> post; the second is from <a href="http://daringfireball.net/linked/2012/january">John Gruber&#8217;s site</a> (he doesn&#8217;t appear to make direct links available).</p>
<blockquote><p>The post focuses on Apple because Apple is now arguably the most successful company on the planet. If they were, say, the 8th largest computer manufacturer, they probably wouldn’t have even been mentioned&#8230;.</p>
<p>Does that excuse Apple’s behavior in some situations? Not at all. But there also isn’t enough background here to know if Apple is even the worst enabler of these poor working conditions. </p>
<p>&#8230;The fact of the matter is that we live in a world that demands amazing technology delivered to us at low costs and at great speed. That world leads to Foxconn. &#8212; MG Siegler</p></blockquote>
<p>I felt like Siegler&#8217;s post tries to satisfy both parties, the pro-Apple side and the let&#8217;s-do-something-about-it side.  His comments boil down to &#8220;Well, it sounds bad, but we can&#8217;t fully trust NYT and plus there are probably some other companies that are worse.  Also, we want cheap electronics.&#8221;  I disagree that this has to lead to Foxconn, and I also think it&#8217;s likely that Apple is among the worst offenders because they have more clout than a smaller company and a few of the quotes indicate as much.  Regardless of who is the worst, Apple is making more than enough money to do something without raising the cost of their electronics, so it&#8217;s not a matter of &#8220;Is Apple the worst&#8221; but rather &#8220;What can we do about it?&#8221;</p>
<blockquote><p><a href="http://9to5mac.com/2012/01/26/tim-cook-responds-to-claims-of-factory-worker-mistreatment-we-care-about-every-worker-in-our-supply-chain/">Tim Cook responded</a> in a company-wide email. &#8212; John Gruber</p></blockquote>
<p>Either Gruber simply doesn&#8217;t care about the NYT story or he fully supports Tim Cook&#8217;s (Apple&#8217;s) position.  He tends to be a man of few words when it comes to commenting on many stories, but he will write more than a sentence when it&#8217;s important to him (such as like how he thinks the Android buttons are &#8220;broken&#8221;).</p>
<p>Cook basically said, &#8220;We do a lot and anyone who says otherwise is lying.&#8221;  He points to the <a href="http://www.apple.com/supplierresponsibility/">Apple supplier responsibility site</a>, which (even if 100% accurate) still shows only 38% of the companies Apple audited meet the working hours requirements established in Apple&#8217;s Code of Conduct.  In 2011 it was 32%.  In 2010 it was 46%.  In 2009 it was 41%.  Not great numbers.</p>
<p>The simple fact of the matter is that Apple has been pointed out as they&#8217;ve got more than enough money to do something about it and many of the major articles related to deaths and injuries at these manufacturing companies have been tied to Apple.  Is that fair?  Probably not.  Does it matter if it&#8217;s fair?  No.  The point is, awareness of the issue needs to be raised in order to make something happen.  After all, when enough people compained about the iPhone 4 dropping calls, Apple gave in and offered free bumper cases.  If enough people complain about the dangerous conditions at manufacturers, Apple will be willing to do more about the conditions.  Hopefully Apple won&#8217;t have to lead the way for technology companies to expect more from their suppliers, but it&#8217;s better than ignoring the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2012/02/02/working-conditions-in-chinese-factories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Android Lover&#8217;s Take On The iPhone 4S</title>
		<link>http://blog.iangclifton.com/2011/12/18/an-android-lovers-take-on-the-iphone-4s/</link>
		<comments>http://blog.iangclifton.com/2011/12/18/an-android-lovers-take-on-the-iphone-4s/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 02:57:24 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Mobile Devices]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[galaxy nexus]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ice cream sandwich]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ios 5]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[parody]]></category>
		<category><![CDATA[sarcasm]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=526</guid>
		<description><![CDATA[So what about the iPhone 4S? First and foremost, the iPhone is way too small. The 3.5 inch screen is nice when I&#8217;m holding it 8 inches from my eye, but out and about it feels like my hands belong &#8230; <a href="http://blog.iangclifton.com/2011/12/18/an-android-lovers-take-on-the-iphone-4s/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So what about the iPhone 4S?</p>
<p>First and foremost, the iPhone is way too small.  The 3.5 inch screen is nice when I&#8217;m holding it 8 inches from my eye, but out and about it feels like my hands belong to Andre the Giant.  I try to touch the screen and my thumb covers at least 10% of the surface area.  How can you have accurate touches like that?  I guess I should file down my thumbs and fingers.  It&#8217;s so tiny that it killed all two-handed operations for me (especially since you can barely fit two thumbs side by side).  I&#8217;ll admit that for some pockets, having a tiny screen is nice, but 4.3 inches might be better.  This is just too small.<span id="more-526"></span></p>
<p>While the screen is too small, I&#8217;m happy that Apple has stuck to their decision to have one button that does different things depending on what version of the OS you have and how many times you press it and even how slow your presses are.  It&#8217;s like opening a Christmas present every time I press the home button.  Will I go to the home screen?  The search screen?  The recent apps?  The Siri frontend for Wolfram Alpha?  The music app?</p>
<p>To be fair, the small screen on the iPhone did introduce me to some new people.  I heard that you can do a five-finger swipe to bring up the multitasking bar, but I couldn&#8217;t fit five fingers on the screen, so I had to go to Starbucks to find some fellow Apple users with smaller fingers to try.  Then I found out that gesture just works on iPad.  When will Apple develop a consistent user experience?</p>
<p>I like the missing software back button that is always in one place like on the Galaxy Nexus.  On the iPhone, you can have it sometimes be in the top left with the word &#8220;Back&#8221; or &#8220;Home&#8221; or something else, or at the top right with the word &#8220;Done&#8221; or at the bottom as a &#8220;Cancel&#8221; button.  This forces the user to be much more aware of the UI and whether something is a modal dialog, an action sheet, or whatever else.  (Of course, the iPhone still has a power/wake button on the top.)</p>
<p>I also like the lack of indicator light on the iPhone.  It&#8217;s helpful because I can make sure everyone knows I use Apple products since I have to always hold up my phone to turn it on to check for messages and people can see my important Apple logo and know that I&#8217;m creative.  Why Samsung included a multi-color indicator light that tells me exactly what I missed without turning on the device, I will never understand.</p>
<p>The rest of the iPhone hardware leaves something to be desired.  The Galaxy Nexus feels like a completely and thoughtfully designed product.  By comparison, the iPhone is made of glass, something we intuitively think of as fragile.  It&#8217;s also heavy/dense, giving it the consistant feeling of 80s technology that goes well with the click of the home button (or double click or long click or&#8230;).  It&#8217;s not awful, but you&#8217;d think Apple could do better at this point.  Some people will like not having the option to remove the back to get at the battery because that makes the iPhone almost as thin and as light as the Galaxy Nexus and gives you an excuse to buy a new phone every year.</p>
<p>The battery life itself is very good.  I felt like the iPhone was lasting at least as long as the Galaxy Nexus on a fully charged battery, perhaps even a bit longer in some cases.  Of course, I don&#8217;t have to worry about having the option of using it on 4G and possibly lowering the battery life.</p>
<p>The camera on the iPhone 4S is definitely worse than the Galaxy Nexus in both terms of front-facing camera (the 4S has a measly VGA camera and the Galaxy Nexus has a front-facing camera capable of 720p&#8230; a resolution the iPhone can&#8217;t even display) and in speed.  If you want to get a picture of where something exciting was happening two seconds ago, the iPhone 4S will not let you down.  Just press the shutter button when the scene is composed and you&#8217;ll get the scene that happens two seconds later.  It&#8217;s like time travel.</p>
<p>And let&#8217;s talk about iOS 5.  There is no question that the software is much improved over previous iterations in terms of copying Android&#8217;s notification system (though improved with X close buttons that are polished so much that they shrank to a size where you need a 2-year-old&#8217;s pinky to press them) and supporting Twitter.  You know an OS has improved when Twitter is a selling point.</p>
<p>Unfortunately, the system still lacks much of the features that Android users enjoy.  The majority of iOS users will probably think such criticism is bullshit, but that has always been the case.  I imagine it&#8217;s probably pretty hard for a person who bought the car that made the most sense to him or her to explain to the person who bought a Prius because it was popular how perception affects the driving experience.  The person with a personally-fitting car can attempt to explain why he or she likes a stick or more room, but the Prius owner will just believe that having the car pick gears for you is the best and would never spend enough time with any other car to appreciate the differences.</p>
<p>Still, if the iOS team ever wants to convert (or at least convice) most Android users, they still have quite a bit of work to do here.  Then again, they probably don&#8217;t (or shouldn&#8217;t) care too much about converting Android users over to iOS.  All the non-smartphone users out there remain the much bigger prize to go after (for both Apple and Google).</p>
<p>Other things that will sound like nits but drove me crazy with iOS 5 included having widgets only in the notification center.  If I am adding a widget, I clearly want to see it where I want it.  Why should I have to have it sit somewhere invisible that requires an extra swipe?  What&#8217;s the different between being on my homescreen and having to open a full weather app (iOS4) and being on the home screen and having to swipe down the notifications to see the weather widget (iOS5)?</p>
<p>Another: why do I have to go into the Google Voice app to make a phone call using my Google Voice number?  Google baked in support for alternate dialers into their OS; why didn&#8217;t Apple?  If they&#8217;re worried about competition, why did they finally approve the app after a year-and-a-half and an FCC inquiry?  Why is Siri letting people look at my private calendar while my phone is locked?  And why on Earth is the web browser not the desktop version of Safari yet!?</p>
<p>The new WiFi-syncing is nice &#8212; I love not having to find the proprietary cable.  But my god Apple needs help with iTunes.  I have to reboot my computer into an OS they support and leave it on while my phone is plugged into a power outlet.  As if iTunes weren&#8217;t already the worst software on the planet, I also have to waste a bunch of electricity keeping my computer on all the time in one of the two OSes Apple supports just to sync my data?</p>
<p>Apple&#8217;s universal support of voice dictation is a joke compared to Ice Cream Sandwich.</p>
<p>Some other authors have noted that iOS is ahead of Android when it comes to custom settings for apps, but I have to disagree.  Why do I have to leave an app to go find the settings app to change the settings for the app I was just in?  That&#8217;s completely illogical.  Of course, some apps support changing their settings within the app and others don&#8217;t, so now we get back to the inconsistancy problem present in the iOS experience.</p>
<p>When it comes to web browsers, arguably the most important feature of any of these devices, there is no question that Android still has a big edge here.  I&#8217;ve seen arguments on both sides for why iOS does not support third-party plugins&#8211;but doing a simple test proves that much of the web is still inaccessible from iOS.  Worse, many pages render as large missing tiles featuring a checkerbox to keep the illusion of scrolling smoothly, even beyond the point at which the actual page ends.  You try pinching to zoom and everything just stays fuzzy until your fingers stop moving.  How am I supposed to know if the text is large and clear enough if it just zooms in and out on fixed pixels?</p>
<p>You&#8217;ll also see a bit of impossibility in iOS when you do simple things like trying to attach a file to an existing email draft or trying to attach a second file or trying to store any arbitrary data on your device.  For the most part, iOS 5 does a good job of hiding its limitations, but there are plenty of times that you&#8217;ll still hit your head on a wall here and there.</p>
<p>The main problem I have with apps on iOS is that, well, they aren&#8217;t on iOS.  I try to find my favorite keyboard replacement (SwiftKey) and it&#8217;s nowhere to be found.  I try to get the ever-useful Wifi Analyzer, also not available.  I&#8217;ve heard that the entire experience has a lot more polish on iOS, especially with the Twitter integration, so I gave it a try.  I found one of my favorite links online and decided to open it on the Galaxy Nexus and the iPhone to verify it looked right.  For the Galaxy Nexus, I simply clicked the Chrome to Phone button and it instantly popped up on my device.  It looked good, so I long-pressed on the URL within the browser, picked share, selected my favorite Twitter app (hint: not the official one), and sent it with a tweet and a comment.  I tried that on iOS, which involved trying to type the long URL in by hand in the stock keyboard.  That was a pain, so I decided to long-press it in the Android browser again, share, and send it via Google Voice to the iPhone.  I opened it in the iPhone, it looked pretty much the same as on the Galaxy Nexus (though tiny), so I copied the URL, pressed the clicky home button (just once), scrolled to the right through ten screens of apps, opened a Twitter app, pasted it into the new tweet box along with a comment, and tweeted.</p>
<p>It&#8217;s these tangibles where Android holds the huge advantage.  And just like in sports, you can clearly teach the fundamentals.  At some point, Apple may simple have to acknowledge that Android works better than iOS because Android&#8217;s entire open concept is woven into the product.  Apps can properly communicate to each other without having to know of the other apps.  The user can do what he or she wants.  Even the launcher app can be replaced.  Apple&#8217;s strengths are elsewhere; they should embrace that.</p>
<p>Apple has done some very nice work here.  Both the iPhone 4S and iOS5 are a new pinnacle of the iOS platform.  But in the end, it still comes down to something very simple: which device do I want to use day-to-day?  Which phone do I reach for when I&#8217;m not doing a review?  It&#8217;s still an Android phone.  Without question.</p>
<p>Keep at it, Apple.</p>
<p>(For those who don&#8217;t know, this is a parody on the post MG Siegler did called &#8220;<a href="http://techcrunch.com/2011/12/14/iphone-galaxy-nexus-review/">An iPhone Lover&#8217;s Take On The Galaxy Nexus</a>.&#8221;  I strongly recommend that you buy the phone that makes the most sense to you, whether it&#8217;s an Android phone, an iPhone, a Windows phone, or whatever.  Any useful review will highlight the strengths and weaknesses of a given device and never tell you that it&#8217;s the one-size-fit-all solution.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/12/18/an-android-lovers-take-on-the-iphone-4s/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Current Job And Projects</title>
		<link>http://blog.iangclifton.com/2011/11/01/current-job-and-projects/</link>
		<comments>http://blog.iangclifton.com/2011/11/01/current-job-and-projects/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 05:01:23 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Opinion / Just Talking]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[developer]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=517</guid>
		<description><![CDATA[I had expected to write this post quite a while ago. In fact, I mentioned my intent to write it at the end of my An Evolving Career Path post, but that career path changed more rapidly than I had &#8230; <a href="http://blog.iangclifton.com/2011/11/01/current-job-and-projects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had expected to write this post quite a while ago.  In fact, I mentioned my intent to write it at the end of my <a href="/2011/08/09/an-evolving-career-path/">An Evolving Career Path</a> post, but that career path changed more rapidly than I had expected.  I am still doing Android development, but I am not doing any web dev (other than my personal projects).  I&#8217;m also taking on some other projects&#8230; but I&#8217;ll get to that shortly.<span id="more-517"></span></p>
<p>At the end of July, I moved on from Treemo Labs.  I already had a one-month contract in place for some simple Android developer work, so I was not taking any time off (well, after the extent to which I had been working, dropping to 8 hours a day felt like taking time off).  CBS Interactive also contacted me and talked to me about the possibility of a position there.  I flew down to Los Angeles to quickly meet everyone and get a more detailed explanation of what they were looking for (and let them know what I was looking for).  It was a great trip, and I finally got to put faces to many of the names I had worked with while at Treemo Labs via email and conference calls.</p>
<p>After a bit of negotiation, I accepted a position at CBS Interactive as a mobile developer, and I started to pack up, reserve an apartment, etc.  That&#8217;s the position I alluded to at the end of the other post.  Well, things changed rather suddenly when some contract agreements got in the way (business protection agreement legalese) that removed the posibility of me holding that position.  It was an unfortunate and unexpected turn of events that forced me to take a seat and consider my options.</p>
<p>There is no shortage of mobile development positions out there, but I wasn&#8217;t interested in making unexciting apps and I started to question whether moving out of the Seattle area would be worth it for me.  I was bombarded by recruiter emails offering great clients, unbeatable opportunities, and pleas to contact all my developer friends on the recruiters&#8217; behalf.  A few were interesting on the surface, and I pursued them while simultaneously considering the possibility of working for myself full time.</p>
<p>I created wireframes and documentation for a game I decided to develop (and <a href="http://twitter.com/#!/IanGClifton/status/107955561080950784">tweeted about it</a>).  With my excitement for that app growing, I determined a timeline for the game with a <a href="http://twitter.com/#!/IanGClifton/status/108413952928649216">mid-October alpha</a> and calculated out how long I could live without income.  Things were looking very positive.  Even if I didn&#8217;t make much on the game, I had plenty of time to ensure it was done well before having to consider looking for a job.  If nothing else, it would teach me a lot and be another bullet on the resume.</p>
<p>Then I was contacted by <a href="http://aro.com/">ARO</a>, a stealth-mode startup in Seattle.  I was intrigued, so I interviewed and found out about their goals&#8211;definitely some exciting stuff that could push mobile beyond where it is today.  I received an offer from them the next day.  Considering their goals, offer, and ability to move fast (vital for anywhere I work), I accepted the position.</p>
<p>So, I am a salaried employee at ARO, working on some awesome stuff and, now that I have time outside of work as well, I&#8217;ve been taking on some outside projects.  I wrote about <a href="http://blog.iangclifton.com/2011/10/23/android-for-programmers-an-app-driven-approach/">reviewing Android for Programmers</a> recently.  I am also going to be creating an Android video series for developers (details to come) that I&#8217;m very excited about.  In the near future, the app I&#8217;ve been developing for <a href="http://androidpolice.com">Android Police</a> will be coming out, and then I&#8217;ll spend a little more time on the Disease to Dust game (though I don&#8217;t expect a beta this year).  I&#8217;m sure I&#8217;ll spend a little time here and there on other projects (such as prepping <a href="http://iangclifton.com/apps/android/predator-clock-widget/">Predator Clock Widget</a> for improvements), but life is good right now.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/11/01/current-job-and-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android for Programmers: An App-Driven Approach</title>
		<link>http://blog.iangclifton.com/2011/10/23/android-for-programmers-an-app-driven-approach/</link>
		<comments>http://blog.iangclifton.com/2011/10/23/android-for-programmers-an-app-driven-approach/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 18:57:59 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[programmers]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=506</guid>
		<description><![CDATA[For the past few months, I spent some of my off time working as a technical editor/reviewer for an Android book called &#8220;Android for Programmers: An App-Driven Approach.&#8221; From a reader&#8217;s perspective, this is a great book to dive right &#8230; <a href="http://blog.iangclifton.com/2011/10/23/android-for-programmers-an-app-driven-approach/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.iangclifton.com/wp-content/uploads/2011/10/androidfp1.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2011/10/androidfp1-114x150.jpg" alt="" title="Android for Programmers" width="114" height="150" class="alignleft size-thumbnail wp-image-510" /></a>For the past few months, I spent some of my off time working as a technical editor/reviewer for an Android book called &#8220;<a href="http://bit.ly/AndroidFP">Android for Programmers: An App-Driven Approach</a>.&#8221;  From a reader&#8217;s perspective, this is a great book to dive right into Android development because it actually creates an app in each chapter to explain specific concepts.  Other books often take the approach of pseudo-code or simplistic examples that demonstrate syntax but don&#8217;t really show how code is <em>actually used</em>.  Android for Programmers demonstrates each topic with real code.<span id="more-506"></span></p>
<p>As a reviewer, I found it interesting to see other people&#8217;s approaches, offering just a bit of guidance here and there to follow common/best practices used my most Android developers.  In one chapter in particular, you learn how to create a game called SpotOn that makes use of property animation (from Honeycomb) to create moving targets.  This is a great use of property animation that not only demonstrates a core feature in Honeycomb, it also shows how easily you can use the SDK to accomplish what would otherwise take a lot more code.</p>
<p>If you&#8217;re considering learning Android app development or know the basics but want to broaden your understanding, definitely take a look at <a href="http://bit.ly/AndroidFP">Android for Programmers: An App-Driven Approach</a>.  (And I don&#8217;t earn any royalties; I just love the &#8220;real code&#8221; approach that this book takes.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/10/23/android-for-programmers-an-app-driven-approach/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Lasik: Three Months Later</title>
		<link>http://blog.iangclifton.com/2011/09/17/lasik-three-months-later/</link>
		<comments>http://blog.iangclifton.com/2011/09/17/lasik-three-months-later/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 23:46:40 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Opinion / Just Talking]]></category>
		<category><![CDATA[lasik]]></category>
		<category><![CDATA[surgery]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/2011/09/17/lasik-three-months-later/</guid>
		<description><![CDATA[Some time around middle school, I realized that my eyes were pretty bad.  I prefered to sit toward the back of the classroom, so that meant I couldn&#8217;t read the whiteboard.  Eventually, I got glasses and contacts.  When I first &#8230; <a href="http://blog.iangclifton.com/2011/09/17/lasik-three-months-later/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Some time around middle school, I realized that my eyes were pretty bad.  I prefered to sit toward the back of the classroom, so that meant I couldn&#8217;t read the whiteboard.  Eventually, I got glasses and contacts.  When I first wore them, I remember being suprised that the Simpsons characters were drawn with a harsh black outline.  For me, they had always been fuzzy, soft-edged creations and the difference was striking.</p>
<p>For a variety of reasons, I finally decided to have Lasik surgery a bit over three months ago.  I had heavily researched it before, but I kept debating with myself before I determined that I should go through with it.  This post is a reflection on the surgery, recovery period, and overall experience.  This post might help you decide to have or not have Lasik surgery.  Note that prior to the examination that determines if you&#8217;re elligible for Lasik, you should be out of contacts for at least a week (and two weeks before the operation itself).<span id="more-501"></span></p>
<p>The first eye checkup I had, my eyes were carefully examined and topographically mapped by the technician.  Then I met with the doctor to review the options and discuss the fact that I have slightly larger-than-average pupils.  There are a variety of corrective eye surgeries to consider and, even after deciding on a specific one, there are options to evaluate.  Lasik essentially revolves around the idea of cutting a flap in the surface tissue of your eye that can be folded back so that a laser can reshape the cornea underneath.  The flap is then positioned back in place, which is what allows the healing process to be relatively fast.  You can choose to have the flap cut by a blade or by a laser (I opted for the precision of a laser) and then you can choose which type of reshaping treatment you have done, traditional or wavefront (which was my choice because it offers more precise and personal eye corrections).  Note that the checkup involved having my eyes dilated, so I recommend you either have some good sunglasses or a driver for the trip home.</p>
<p><strong>The Operation</strong><br />
The day of the operation, I didn&#8217;t have to worry about eating anything specific (though they did recommend avoiding alcohol for a few days as it can dry out the eyes).  I simply had to show up and have transportation available, since you cannot drive after the operation.  They did another quick check of my eyes to ensure that the measurements were the same and nothing had come up, and then they gave me some numbing drops in my eyes.</p>
<p>I sat and waited, relaxed but excited.  After fifteen minutes or so, the drops had done their job and I was led into the operating room.  I was told to lie down and get into position, so I did.  They did another quick check of my eyes before beginning.  The first step was to put some kind of clamps in place that would prevent me from blinking.  Once they were in place, I felt like my blinking was restricted but not in a painful or uncomfortable way.  Next, they applied a corneal suction ring.  As it was being applied, by vision dimmed and the laser cut the flap.  They lifted the flap and pulled it back, a strange process to experience.  I didn&#8217;t feel anything, but it was somewhat disconcerting to have all focus lost from my eyes.  I thought briefly, &#8220;This is what being blind could be like.&#8221;  Of course, I could still see a general sense of color but no detail at all.</p>
<p>I was then told that I would need to stay focused on the light for fifteen seconds while my cornea (more specifically, the stroma) was reshaped by the laser.  At that point I thought the light was just some kind of guide light, but it occurred to me later that it was probably the laser itself.  The light was so blurred that it took up much of my vision.  Imagine seeing a light through a foggy window and then blur that even more to have some concept of how unclear vision is at that point.  Once or twice, I had a hint of the smell of burning but never enough to really confirm that I was definitely smelling it and not just imagining it, since that had been one of my worries before the procedure (I really hate when you can smell burning tissue of any kind, even at the dentist&#8217;s office).  The other eye took a little longer since vision was slightly worse, but it was the same experience.</p>
<p>The flaps were positioned back over my eyes and double-checked, then they took off the clamps from my eyes, so that I was again free to blink.  They had me get up and sit at another location where I could rest my chin and have the doctor do a full examination of my eyes to verify the flaps were in place and there was no debris or any other issue.  Satisfied everything was okay, I was given a seat in a nice, relaxing room to rest my eyes while waiting for my ride to arrive.  When he did, they helped guide me back to the entryway to meet with him.  At that point, my eyes were definitely much better, but they felt rough and I had sensitivity to light and some difficulty focusing (all normal).  I had a bit of excitement in me after realizing that my vision was already improved.</p>
<p><strong>Post-Op</strong><br />
On the way home, I alternated between resting and trying out my new vision from behind a pair of dark sunglasses.  I kept finding myself mesmerised by the ability to see details, license plates, far away signs.  I was satisfied, but blinking felt rough.  People often describe it as feeling like sand is in your eyes, but it wasn&#8217;t as severe for me.  It was more like dry eyes plus a sense of, well, a flap having been cut in my eye.  It wasn&#8217;t sharp or stinging, just not smooth.  When I arrived home, I thanked my driver and rested on the couch.  I put drops in my eyes, put on protective eyeware (similar to safety glasses to prevent you from accidentally rubbing your eyes), and fell asleep.</p>
<p>When I awoke a few hours later, I was already feeling much better.  I was told to try to avoid anything that requires focusing (reading, TV, basically everything), but I couldn&#8217;t help myself and kept testing my ability to focus clearly and quickly.  I was surprised at how fast my eyes could already focus on anything as I looked around the room.  The one problem that I noticed was lights were extremely hazy and brighter lights had &#8220;starbursts&#8221; around them, but I had been told that was normal.</p>
<p>I had to use steroid eye drops once every three hours as well as antibiotic eye drops at the same interval (though not at the same time in order to avoid one drop flushing out the other).  Those were for speeding up the healing process and preventing infection respectively.  One of the drops caused a bit of irritation in my right eye; apparently I had a very minor cut in my bottom eyelid (felt like a paper cut), but it wasn&#8217;t too bad.  I also had some redness around my eyes from where the suction had been applied.  I regularly used artificial tears (eye drops that are individiually packaged), which helped a lot.</p>
<p>The day after the operation was a Saturday, and I had a relatively early (I think 8am) appointment to get a quick checkup.  I had to have a ride for this trip as well, though I felt like I could have driven just fine.  The checkup was quick and painless, really intended just to catch any potential problems as soon after the surgery as possible, and I had a follow-up appointment scheduled for the next Friday.</p>
<p><strong>Continuing Recovery</strong><br />
I was fine for work that next Monday morning, though I was still taking the eye drops regularly.  At times, I found focusing to be slightly difficult and at other times it was not.  I think my eyes were still getting used to their new ability to actually focus on their own.</p>
<p>I found myself having a tough time falling asleep for a while.  Part of it was because of the annoying safety glasses (which I stopped wearing a bit early) and part of it was because right as I was about to fall asleep I would get the urgent thought &#8220;You need to take out your contacts!&#8221;  I would bolt awake only to realize I wasn&#8217;t wearing contacts.  If you have never worn contacts, you probably do not realize how much it can suck to fall asleep in them.  When you wake, your eyes are completely dry and the contacts are glued in place.  It&#8217;s not pleasant, especially if you need to remove them.</p>
<p>It was strange being able to just <em>see</em>.  I could clearly see the smoke detector light at night.  I often woke up and looked out my window to see very sharp and clearly defined leaves from trees, whereas before I could barely tell a window was even there.  I saw details on mountains far in the distance.  My vision was definitely better after surgery than it was with contacts before.</p>
<p>I had my one-week checkup, my one-month checkup, and my three-month checkup with no issues.</p>
<p><strong>Final Thoughts</strong><br />
Vision is amazing, particularly good vision.  Prior to surgery, I couldn&#8217;t read the giant &#8220;E&#8221; on the eye charts; hell, I couldn&#8217;t even tell there was anything on the chart.  Now I am seeing better than 20/20.  The surgery cost me about $3400 out of pocket, plus probably $50-$75 more for the eye drops, so it definitely wasn&#8217;t cheap (don&#8217;t expect much help from insurance, since it&#8217;s an &#8220;elective&#8221; procedure).</p>
<p>For some time after the surgery, you have to avoid certain activities such as rubbing your eyes or swimming, but I think the inconvenience was minimal given the amazing benefit of having naturally good vision.  I can wake up in the middle of the night and just see things.  It sounds far from amazing if you have never had terrible vision, I know, but I definitely consider this to be one of the best things I&#8217;ve ever done with my money.</p>
<p>The only problem I have had from the surgery is that I still see starbursts, mostly on bright lights at night.  The doctor said I would probably experience this more than average because my pupils are a bit larger than average (I think 8mm vs. the average 5-7mm).  The starbursts have slowly gone down some and I have gotten a bit more used to the problem, but it is more prevalent than before the surgery.</p>
<p>That said, I would absolutely make the decision to have Lasik again without hesitation.</p>
<p><strong>Update</strong>: By about six months after the operation, the night time glare/starbursts had gone down to roughly pre-operation level; it has now been nine months since the surgery and I&#8217;m still very glad I had it done.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/09/17/lasik-three-months-later/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Patents To Stifle Innovation</title>
		<link>http://blog.iangclifton.com/2011/09/05/patents-to-stifle-innovation/</link>
		<comments>http://blog.iangclifton.com/2011/09/05/patents-to-stifle-innovation/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 23:28:13 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Opinion / Just Talking]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[galaxy tab]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[patents]]></category>
		<category><![CDATA[samsung]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=493</guid>
		<description><![CDATA[In Article 1 Section 8 of the United States Constitution, Congress is given the power to &#8220;&#8230;promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings &#8230; <a href="http://blog.iangclifton.com/2011/09/05/patents-to-stifle-innovation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In Article 1 Section 8 of the United States Constitution, Congress is given the power to &#8220;&#8230;promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries.&#8221; This is essentially from where patent and copyright laws (in the United States) originated.  Clearly, the purpose in regards to technology should be to promote innovation; unfortunate, the opposite has been happening.<span id="more-493"></span></p>
<p>There are three types of patents (this applies to the United States; my knowledge of patent laws in other countries is minimal): utility, design, and plants.  Utility patents cover what you&#8217;d typically think of as an invention, everything from Velcro to turbines.  Design patents cover &#8220;a new, original, and ornamental design for an article of manufacture,&#8221; essentially, the appearance of a manufactured product.  Finally, plant patents actually cover plants&#8230; invent a new and distinct plant that can reproduce on its own and you can patent it.</p>
<p>Unfortunately, applying patents to software is a difficult practice and has significant repercussions.  This is the very reason that there is no standardized way to play video on the web.  Proponents largely fall into two camps: ones that support the well-known, highly efficient H.264 codec and ones those who support an open, freely-available codec such as VP8.  The H.264 codec is heavily patented and can prove to cost millions for a non-profit company like Mozilla; however, the patents are known and so the expense is clear.  Codecs such as VP8 and Theora are freely available, so they are excellent options for companies that have limited funds and/or choose to promote open software; the alternate argument is that these codecs are less efficient because they had to be specifically written to not do things similarly to H.264 but they still <em>might</em> infringe on a patent.  When you consider that H.264 is covered by 70 pages worth of patents (70 pages listing the patent numbers and corresponding owners, not counting the actual patents themselves), it&#8217;s not hard to imagine that other codecs could infringe somewhere without knowing it.  The very process of patenting that&#8217;s supposed to help innovation is scaring people away from using (and even creating) inventions.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2011/09/samsung-picture-frame-ipad-galaxy-tab-10.1.jpg"><img src="http://blog.iangclifton.com/wp-content/uploads/2011/09/samsung-picture-frame-ipad-galaxy-tab-10.1-110x300.jpg" alt="" title="Samsung Picture Frame, iPad, Galaxy Tab 10.1" width="110" height="300" class="alignleft size-medium wp-image-495" /></a>Apple has filed multiple suits against Samsung for their phones and tablets.  Now, an injunction is in place that prevents Samsung from offering the Galaxy Tab 10.1 in Australia and in Europe (well, they can&#8217;t sell their tablets in Germany and have to seek a new import strategy for the rest of Europe) while the lawsuits continue.  I don&#8217;t see how anyone could use a Galaxy Tab and then an iPad and consider the user experience to be the same, so how valid can the patents be?  And as far as design patents go, that graphic I have included shows a digital picture frame that Samsung made in 2006, then the iPad (from 2010), and then the new Galaxy Tab 10.1 (2011).  The user experiences are different, Samsung came up with the design first (and didn&#8217;t sue Apple), so let both the products go to market and create a benefit for all consumers.</p>
<p>I was going to write a lot more on this subject, but I think the message is clear: software patents don&#8217;t work.  They stifle innovation and harm the consumer.  The only people who truly like software patents seem to be major corporations that can use them to kill competition and lawyers.  The system needs to be fixed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/09/05/patents-to-stifle-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RenderScript 101, Part 2: RenderScript Interaction</title>
		<link>http://blog.iangclifton.com/2011/08/24/renderscript-101-part-2-renderscript-interaction/</link>
		<comments>http://blog.iangclifton.com/2011/08/24/renderscript-101-part-2-renderscript-interaction/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 02:38:20 +0000</pubDate>
		<dc:creator>Ian G. Clifton</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[honeycomb]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[renderscript]]></category>
		<category><![CDATA[renderscript-tutorial-101]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.iangclifton.com/?p=477</guid>
		<description><![CDATA[Note: This tutorial continues on from RenderScript 101, Part 1: RenderScript Basics Tutorial. If you have not yet read that tutorial, you should do so before starting this one. The previous tutorial ended with a simple app built that could &#8230; <a href="http://blog.iangclifton.com/2011/08/24/renderscript-101-part-2-renderscript-interaction/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><i>Note: This tutorial continues on from <a href="http://blog.iangclifton.com/2011/08/24/renderscript-101-part-1-renderscript-basics-tutorial/">RenderScript 101, Part 1: RenderScript Basics Tutorial</a>.  If you have not yet read that tutorial, you should do so before starting this one.</i></p>
<p>The previous tutorial ended with a simple app built that could display a green screen with RenderScript.  The next step to making RenderScript more useful is understanding how to interact with it when it&#8217;s already running.  We want to be able to pass values to the RenderScript code and we also want to pick up on user interactions with the view.<span id="more-477"></span></p>
<p>Since we already know how to set a background color within the <code>init</code> method in the RenderScript file, lets build on that by learning how to set it from the Java side.  Here&#8217;s where our <code>RenderScript101RS</code> class comes in handy.  Just add this method:</p>
<pre class="brush: java; title: ; notranslate">
	public void setBackgroundColor(Float4 color) {
		mScript.set_bgColor(color);
	}
</pre>
<p>This simple method takes a <a href="http://developer.android.com/reference/android/renderscript/Float4.html">Float4</a> and passes it directly to the <code>set_bgColor</code> method.  That method is automatically generated in the glue class and lets you set the <code>bgColor</code> value in <code>RenderScript101.rs</code> from Java.</p>
<p>In the <code>RenderScript101View</code>, we need to override onTouchEvent:</p>
<pre class="brush: java; title: ; notranslate">
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);

        if (mRenderScript == null) {
        	return true;
        }

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
        	final Random random = new Random();
        	final Float4 newColor = new Float4(random.nextFloat(), random.nextFloat(), random.nextFloat(), 1.0f);
        	mRenderScript.setBackgroundColor(newColor);
        }

        return true;
    }
</pre>
<p>If the <code>RenderScript101RS</code> reference is not yet set, don&#8217;t do anything.  If it is set, check to see if we&#8217;re getting an <code>ACTION_DOWN</code> event (e.g., touching the screen).  If we are, then we create a new <code>Float4</code> using three random float values and one hard-coded to 1.0f (the transparency/opacity to make sure it is fully opaque).  Then, we just trigger our newly created <code>setBackgroundColor</code> method with the generated <code>Float4</code>.</p>
<p>If you run the app now, you can tap the RenderScript view to watch it change colors.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2011/08/renderscript-tutorial-screenshot-02.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2011/08/renderscript-tutorial-screenshot-02-1024x640.png" alt="" title="RenderScript Tutorial Screenshot 02" width="640" height="400" class="aligncenter size-large wp-image-481" /></a></p>
<p>Well, that wasn&#8217;t too bad, was it?  The next part is going to be a bit more challenging, so we will have a crash course on computer graphics terminology.</p>
<h2>The Difficult Part</h2>
<p>Three-dimensional graphics revolve around vertices (vertex is the singular form).  These are essentially points in space that can be used to construct more complicated graphics.  Moving the vertices around is called &#8220;transformation.&#8221;  The mathematical construct that accomplishes this is called a &#8220;transformation matrix.&#8221;  There have been many, many books written on these concepts, so it&#8217;s impossible to condense everything down into a blog post; however, here are some specific terms for understanding RenderScript for Android:</p>
<ul>
<li><a href="http://developer.android.com/reference/android/renderscript/ProgramStore.html">ProgramStore</a> &#8211; This controls how the framebuffer is used.  For instance, you can enable or disable depth testing which controls what happens when one pixel is closer to the camera than another (e.g., whether it should blend or just overwrite).</li>
<li><a href="http://developer.android.com/reference/android/renderscript/Sampler.html">Sampler</a> &#8211; Samplers are used by ProgramFragments to determine how to get the pixels of a texture</li>
<li><a href="http://developer.android.com/reference/android/renderscript/ProgramFragment.html">ProgramFragment</a> &#8211; The Android-equivalent of a <a href="http://en.wikipedia.org/wiki/Pixel_shader">fragment shader</a></li>
<li><a href="http://developer.android.com/reference/android/renderscript/ProgramVertex.html">ProgramVertex</a> &#8211; The Android-equivalent of a <a href="http://en.wikipedia.org/wiki/Vertex_shader">vertex shader</a></li>
</ul>
<p>If you want to learn more about computer graphics, I recommend learning about OpenGL.  It&#8217;s extremely valuable to learn and many of the concepts from OpenGL apply to RenderScript.</p>
<p>Here is the updated <code>RenderScript101.rs</code> file:</p>
<pre class="brush: cpp; title: ; notranslate">
#pragma version(1)
#pragma rs java_package_name(com.iangclifton.tutorials.renderscript);

#include &quot;rs_graphics.rsh&quot;

float4 gBgColor; // Background color as xyzw 4-part float
rs_allocation gBgImage; // Background image
rs_sampler gLinearClamp; // Sampler used by the program fragment
rs_program_fragment gSingleTextureFragmentProgram; // fragment shader
rs_program_store gProgramStoreBlendNone; // blend none, depth none program store
rs_program_vertex gProgramVertex; // Default vertex shader

static const float3 gBgVertices[4] = {
        { -1.0, -1.0, -1.0 },
        { 1.0, -1.0, -1.0 },
        { 1.0, 1.0, -1.0 },
        {-1.0, 1.0, -1.0 }
};

static void drawBackground() {
	if (gBgImage.p != 0) {
		rs_matrix4x4 projection, model;
		rsMatrixLoadOrtho(&amp;projection, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f);
		rsgProgramVertexLoadProjectionMatrix(&amp;projection);

		rsMatrixLoadIdentity(&amp;model);
		rsgProgramVertexLoadModelMatrix(&amp;model);

		rsgBindTexture(gSingleTextureFragmentProgram, 0, gBgImage);

	    rsgDrawQuad(
			gBgVertices[0].x, gBgVertices[0].y, gBgVertices[0].z,
			gBgVertices[1].x, gBgVertices[1].y, gBgVertices[0].z,
			gBgVertices[2].x, gBgVertices[2].y, gBgVertices[0].z,
			gBgVertices[3].x, gBgVertices[3].y, gBgVertices[0].z
		);
	} else {
		rsgClearColor(gBgColor.x, gBgColor.y, gBgColor.z, gBgColor.w);
	}
}

void init() {
	gBgColor = (float4) { 0.0f, 1.0f, 0.0f, 1.0f };
	rsDebug(&quot;Called init&quot;, rsUptimeMillis());
}

int root() {
	rsgBindProgramVertex(gProgramVertex);
	rsgBindProgramFragment(gSingleTextureFragmentProgram);
	rsgBindProgramStore(gProgramStoreBlendNone);

	drawBackground();
	return 16;
}
</pre>
<p>Note that I&#8217;ve updated all of the global variables to start with &#8220;g&#8221; in order to keep things a bit more clear.  The <code>root()</code> method has been updated to bind the <code>ProgramVertex</code>, <code>ProgramFragment</code>, and <code>ProgramStore</code> right away.  Looking at the <code>drawBackground()</code> method, you can see that the old code falls under the <code>else</code> statement.  Everything else happens when <code>gBgImage.p</code> is not equal to zero (in other words, the <code>gBgImage</code> has been set).</p>
<p>We create a four-by-four projection matrix and model matrix.  The projection matrix is passed by reference and is turned into an orthographic matrix with <code>rsMatrixLoadOrtho</code>.  An orthographic matrix is essentially a flat representation of points in space (e.g., the <acronym title="Heads-up Display">HUD</acronym> in a first-person shooter</acronym>).  Most commonly, the points are -1 to +1 in each dimension (though we use 0-1 for one here).  In graphics hardware, it is common to represent everything with floats because they give more precision than an arbitrary system (e.g., think of how colors are commonly represented by 0-255; in OpenGL and other languages, they are represented by floats because hardware can create an unknown number of unique colors in the future).  Then the matrix is passed to <code>rsgProgramVertexLoadProjectionMatrix</code> so that the 3D points can be flattened to 2D points.</p>
<p>We pass <code>model</code> by reference to <code>rsMatrixLoadIdentity</code> which makes <code>model</code> an <a href="http://en.wikipedia.org/wiki/Identity_matrix">identity matrix</a>.  An identity matrix is essentially a matrix that does not affect other matrices in multiplication (think of it like a 1 where 1 times X results in X).  With this identity matrix, we call <code>rsgProgramVertexLoadModelMatrix</code> to avoid manipulating the vertices.</p>
<p>Next, we call <code>rsgBindTexture</code>, which takes a program fragment, an unsigned <code>int</code> (slot), and an <code>rs_allocation</code>.  This is essentially where we are setting up our texture (<code>Bitmap</code>) to be drawn.  Now that the texture has been set up, we can draw the quad on which it will appear.  The <code>gBgVertices</code> are defined on lines 13-18 but we&#8217;re essentially passing the top left, top right, bottom left, and bottom right points of the screen.  The Z position for all of them is -1, which we set as the maximum Z-depth in our <code>rsMatrixLoadOrtho</code> call.  Therefore, this texture spans the whole view but appears at the very &#8220;back&#8221; of it.</p>
<p>Now we have to update <code>RenderScript101RS</code> to set these new values:</p>
<pre class="brush: java; title: ; notranslate">
package com.iangclifton.tutorials.renderscript;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Float4;
import android.renderscript.Matrix4f;
import android.renderscript.ProgramFragment;
import android.renderscript.ProgramFragmentFixedFunction;
import android.renderscript.ProgramStore;
import android.renderscript.ProgramVertex;
import android.renderscript.ProgramVertexFixedFunction;
import android.renderscript.RenderScriptGL;
import android.renderscript.Sampler;

public class RenderScript101RS {

	private Sampler mLinearClamp;
    private ProgramStore mProgramStoreBlendNone;
    private ProgramVertex mProgramVertex;
	private RenderScriptGL mRS;
	private ScriptC_RenderScript101 mScript;
    private ProgramFragment mSingleTextureFragmentProgram;

	public RenderScript101RS(RenderScriptGL rs, Resources res, int resId) {
		mRS = rs;
		mScript = new ScriptC_RenderScript101(rs, res, resId);

		initProgramStore();
		initSampler();
		initProgramFragment();
		initProgramVertex();
		mRS.bindRootScript(mScript);

	}

	public void setBackgroundBitmap(Bitmap bitmap) {
		if (bitmap == null) {
			return;
		}
		final Allocation bitmapAllocation = Allocation.createFromBitmap(mRS, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_GRAPHICS_TEXTURE);
		mScript.set_gBgImage(bitmapAllocation);
	}

	public void setBackgroundColor(Float4 color) {
		mScript.set_gBgColor(color);
	}

	private void initProgramFragment() {
        final ProgramFragmentFixedFunction.Builder pfBuilder = new ProgramFragmentFixedFunction.Builder(mRS);
        pfBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
        mSingleTextureFragmentProgram = pfBuilder.create();
        mScript.set_gSingleTextureFragmentProgram(mSingleTextureFragmentProgram);
	}

    private void initProgramStore() {
        mProgramStoreBlendNone = ProgramStore.BLEND_NONE_DEPTH_NONE(mRS);
        mScript.set_gProgramStoreBlendNone(mProgramStoreBlendNone);
    }

	private void initProgramVertex() {
        ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
        mProgramVertex = pvb.create();
        ProgramVertexFixedFunction.Constants pva = new ProgramVertexFixedFunction.Constants(mRS);
        ((ProgramVertexFixedFunction)mProgramVertex).bindConstants(pva);
        Matrix4f proj = new Matrix4f();
        proj.loadProjectionNormalized(1, 1);
        pva.setProjection(proj);
        mScript.set_gProgramVertex(mProgramVertex);
	}

	private void initSampler() {
		mLinearClamp = Sampler.CLAMP_LINEAR(mRS);
		mScript.set_gLinearClamp(mLinearClamp);
	}
}
</pre>
<p>Looking at the constructor, we can see that first the <code>ProgramStore</code> is initialized, then the <code>Sampler</code>, then the <code>ProgramFragment</code>, and finally the <code>ProgramVertex</code>.  Each of these has an <code>init___</code> method that you can look at.  The <code>initProgramStore</code> just sets a <code>ProgramStore</code> that does no blending and no depth testing since they are not needed for the background.  Then <code>initSampler</code> just creates a <code>CLAMP_LINEAR</code> <code>Sampler</code>.  The <code>initProgramFragment</code> method creates a simple fragment shader.  Lastly, the <code>initProgramVertex</code> method creates a simple <code>ProgramVertexFixedFunction</code> (vertex shader) without any custom GLSL.</p>
<p>If you&#8217;ve never done any OpenGL or other 3D computer graphics, you&#8217;re probably lost by now.  Sorry!  It would take a few hundred pages to truly clarify all of this, but hopefully some of it is making sense.</p>
<p>Finally, we just updated the <code>RenderScript101View</code> class&#8217;s <code>onTouchEvent</code> method:</p>
<pre class="brush: java; title: ; notranslate">
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);

        if (mRenderScript == null) {
        	return true;
        }

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
        	mRenderScript.setBackgroundBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon));
        }

        return true;
    }
</pre>
<p>We simply update this method so that tapping the view will set the background <code>Bitmap</code> to the default icon.  Yup, it looks terrible, but you&#8217;ve now experimented with the key features of RenderScript and you might even understand a thing or two.</p>
<p><a href="http://blog.iangclifton.com/wp-content/uploads/2011/08/renderscript-tutorial-screenshot-03.png"><img src="http://blog.iangclifton.com/wp-content/uploads/2011/08/renderscript-tutorial-screenshot-03-1024x640.png" alt="" title="RenderScript Tutorial Screenshot 03" width="640" height="400" class="aligncenter size-large wp-image-486" /></a></p>
<p>Note: The <a href="https://github.com/IanGClifton/Android-RenderScript-Tutorials">source code</a> for this tutorial is available in on GitHub.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iangclifton.com/2011/08/24/renderscript-101-part-2-renderscript-interaction/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

