<?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>The Sea of Ideas &#187; iphone</title>
	<atom:link href="http://paulbakaus.com/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://paulbakaus.com</link>
	<description>Capturing the thoughts of Paul Bakaus</description>
	<lastBuildDate>Thu, 02 Feb 2012 15:34:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>The usability series: Responsiveness</title>
		<link>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/</link>
		<comments>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 10:17:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[responsiveness]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=158</guid>
		<description><![CDATA[Usability is something I consider a major part of my professional life. I even tend to think of it as the key to any good website or application. If it&#8217;s unusable, it doesn&#8217;t help if it can spit out flying dragons. That&#8217;s why rather than doing one summary post on the fundamentals, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>Usability is something I consider a major part of my professional life. I even tend to think of it as the key to any good website or application. If it&#8217;s unusable, it doesn&#8217;t help if it can spit out flying dragons. That&#8217;s why rather than doing one summary post on the fundamentals, I decided to discuss one usability pattern at a time and dig into it really deep. As first entry in this series, I decided to go with a key fundamental often forgotten even by the pro&#8217;s &#8211; <strong>responsiveness</strong>.</p>
<h3>What&#8217;s it all about?</h3>
<p>For real people to actually use your application in daily life, it&#8217;s not enough to bundle it with a nice UI and a bunch of cool features, it has to be really responsive as well. The reasoning is simple &#8211; people hate to wait. People hate to wait in<br />
lines (except the British, hehe), they hate to wait for their salary, they hate to wait for the weekend to arrive and they<br />
hate to wait for the next season of their beloved TV series. Ok, sometimes the anger can transform into excitement (and vica versa) &#8211; but raise your hopes too much, this seldom happens in the case of web apps. Yes, people hate to wait after the click.</p>
<p>Responsiveness is often described by <em>how quickly an application reacts upon a user triggered action</em>. Basically <strong>everything we do in the web is interaction</strong>- the website or application waits for an user action and then replies. There has been already a lot of research on today&#8217;s topic, concluding for instance that people already get the feeling they&#8217;re waiting if the result doesn&#8217;t come up in less than 0.5 seconds. But the answer to the problem is the tricky bit.</p>
<h3>The obvious solution: Performance optimizations  </h3>
<p>Many of todays apps and websites are Ajax driven, to the extend that a user initiated action triggers a request to the server. This is why the most obvious solution coming to mind is to<strong> improve the time each request takes</strong>. Be careful though &#8211; this is also exactly why responsiveness is so often forgotten in the frontend planning. People tend to think of it as something non-visual, therefore they let the backend guys do the work.</p>
<p>Now after you speeded up the requests and your backend, you have to take the frontend really serious. The <strong>JavaScript powering your website is often the most visible bottleneck</strong> because it&#8217;s directly happening on the client, even before any backend request can happen. And it&#8217;s not only JavaScript &#8211; heavy usage of CSS Frameworks (especially resets) for instance can horribly slow down any application as well. Remember &#8211; <strong>if your frontend performs bad, the backend guys don&#8217;t even have a chance to make up for it</strong>. Of course I could go into detail how to actually optimize your code, but that&#8217;s content for another blog post.</p>
<h3>Transparency and disguise</h3>
<p>In the last couple years I noticed a general pattern when designing a responsive experience. There are essentially two ways to tackle it: The first is <strong>total transparency</strong> &#8211; the user should <em>never</em> be clueless, and if the application is in a loading state, tell it to your user so he doesn&#8217;t get annoyed too much. The second, and to me the one with almost unlimited potential is <strong>illusion</strong>.</p>
<h3>Fixing the experience without fixing the implementation</h3>
<p>Something only very few people I met realized is that <strong>an application can be improved even without fixing the implementation</strong>. There is really only one thing that matters to the user &#8211; how the application feels. Yes, let me repeat that: Your implementation doesn&#8217;t have to <strong>be  </strong> responsive &#8211; it just has to <strong>feel</strong> that way.</p>
<h3>Apple &#8211; masters of illusion</h3>
<p>The best way to describe what I mean by making your application *feel* responsive is through a perfect example. It&#8217;s the best <strong>illusion of responsiveness</strong> I&#8217;ve seen so far. I&#8217;m talking about the <strong>iPhone</strong>.</p>
<p>The iPhone runs a very sophisticated operating system based on Mac OS X, with thousands of API&#8217;s for developers to use. Combined with the fact that the iPhone isn&#8217;t running particularly fast hardware (more than a standard cellphone, but way less than any netbook), simple performance optimizations could only get you so far here, and this is is where the magic comes in.</p>
<p>Almost every interaction on the <strong>iPhone uses an animation to transition from one state to another</strong>. You&#8217;ll see animations when you launch or quit applications, when you slide through screens and on many other instances, sometimes so tiny you don&#8217;t realize it. Since they&#8217;re very well integrated into the general flow of the interaction, <strong>they not only excite users but serve as visual cue helpers</strong> that let the user &#8216;grasp&#8217; what&#8217;s happening. But the key is what happens during the animation: Any application you launch or close on the iPhone needs time to initialize and to de-initialize. You guessed it already: It&#8217;s all done when the user is distracted by a beautiful zoom effect. How cool is that?</p>
<p>As a summary: <strong>At the cost of slowing down the operating system</strong> in technical terms (every animation takes a fixed amount of time), Apple improved the whole user experience and <strong>made the iPhone feel extremely responsive</strong>  .</p>
<div style="height:1px;overflow:hidden">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.rxpillsstore.com/">canadian pharmacy no prescription</a></div>
<h3>Loading indicators</h3>
<p>As a conclusion to the illusion technique, in 90% of all cases <strong>a loading indicator is evil</strong>. Why on earth would you want to highlight the slow parts of your application? That being said, a loading indicator is always better than a frozen state and a clueless user. As a general rule, <strong>only add a loading indicator to your application if all other improvements fail</strong>. For instance, there are situations where you absolutely can&#8217;t predict when the result will arrive. Imagine a multiplayer game with two players, and you&#8217;re waiting for the other player to select his character. In this case you have to notify the user that the game is waiting for a response.</p>
<p>See you next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>3D CSS Transforms on the iPhone</title>
		<link>http://paulbakaus.com/2008/08/27/3d-css-transforms-on-the-iphone/</link>
		<comments>http://paulbakaus.com/2008/08/27/3d-css-transforms-on-the-iphone/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 15:56:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css transforms]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[transformation]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=15</guid>
		<description><![CDATA[So I wasn&#8217;t content with the things I&#8217;ve tried doing in Safari, and recently began digging through the documentation of the iPhone SDK and the actual CSS Transforms spec. I was a bit skeptical when I first read about all the cool functions that work in Webkit iPhone, but nowhere else, because there was little [...]]]></description>
			<content:encoded><![CDATA[<p>So I wasn&#8217;t content with the things I&#8217;ve tried doing in Safari, and recently began digging through the documentation of the iPhone SDK and the actual <a href="http://webkit.org/specs/CSSVisualEffects/CSSTransforms.html">CSS Transforms spec</a>.</p>
<p>I was a bit skeptical when I first read about all the cool functions that work in Webkit iPhone, but nowhere else, because there was<a href="http://developer.apple.com/webapps/docs_iphone/documentation/iPhone/Conceptual/SafariCSSTransformGuide/Introduction/chapter_2_section_1.html"> little documentation</a>, and literally nothing done by other developers, no demos, no tests. I thought, surely, some students with too much free time must have jumped on that immediately?</p>
<p>Well, I decided to give it a go, and started Dashcode, created a new web application and hacked in some CSS Transforms into my elements. One very important discovery I&#8217;ve made is that <strong>only 2D CSS Transforms are directly visible on the WYSIWYG canvas in Dashcode</strong>. So when you think the actual 3D functions won&#8217;t work, run the iPhone simulator.</p>
<p><strong>The iPhone simulator is actually capable of using the exact same API than the iPhone. This is awesome and a bit funny, since I always thought the 3D functions don&#8217;t work in the browser version of Safari yet, because they need to be bundled tightly to the hardware, but apparently, there must be a different reason.</p>
<p>The function that sounded the most awesome, I thought, was the -webkit-perspective function (&#8220;This matrix maps a <em>viewing cube</em> onto a pyramid whose         base is infinitely far away from the viewer and whose peak represents the viewer&#8217;s position&#8221;, that just HAS to be awesome). The frustration came directly afterwards: The function did nothing.</p>
<p>At least, that is what I thought at first &#8211; the function does indeed nothing visually, if you don&#8217;t use any other transform functions. I believe this fact is nowhere written in the SDK docs, and it was hard to find out.</p>
<p>Here comes the cool stuff: <strong>The perspective function seems to define how the other primitive functions behave.</strong>
<div style="position:absolute;top:-9383px;left:-5151px;"><a href="http://www.englize.com/download/full-movie-the-sorcerers-apprentice">the sorcerer&#8217;s apprentice film in english to download</a></div>
<p>Let&#8217;s have a look at a practical example: Take a look at the following three functions:</p>
<ul>
<li><em>rotateX</em> &#8211; Rotates the element on the X axis.</li>
<li><em>rotateY</em> &#8211; Rotates the element on the Y axis.</li>
<li><em>rotateZ</em> &#8211; Rotates the element on the Z axis (By default, same as &#8220;rotate&#8221;)</li>
</ul>
<p>Try these out &#8211; all three will give you flat, 2d animations, although they are, in fact, functions that use a 3D matrix. However, now <strong>change the -webkit-perspective property to 200, and try again</strong>. Now, you established virtual depth, and all three functions will give you incredible results.</p>
<p>To demonstrate it, here&#8217;s a demo that you have to either look at on your iPhone or in the iPhone Simulator:</p>
<p><a href="http://paulbakaus.com/lab/css/flip">  <img class="alignnone size-full wp-image-16" title="bild-2" src="http://paulbakaus.com/wp-content/uploads/2008/08/bild-2.png" alt="" width="414" height="770" /></a></p>
<p>As an extra flavor, this demo also uses the <a href="http://developer.apple.com/webapps/docs_iphone/documentation/iPhone/Conceptual/SafariCSSTransformGuide/TransformProperties/chapter_5_section_6.html#//apple_ref/doc/uid/TP40007134-CH6-SW7">-webkit-backface-visibility</a> property set to &#8216;<em>hidden  </em>
<div style="position:absolute;top:-10855px;left:-4766px;"><a href="http://www.upstartblogger.com/movie/the-fighter-online">the fighter movie download links</a></div>
<p> &#8216;, to hide the actual back side of the first element when the second element comes in (otherwise, you&#8217;d see the front flipped). Also, it&#8217;s lightning fast, even on the iPhone, since it uses Webkit&#8217;s native CSS Transitions, and triggers them via setting the webkitTransform css property.</p>
<p>Expect more to come soon!</p>
<p>Cheers,<br />
Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2008/08/27/3d-css-transforms-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

