<?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>David B. Calhoun - Developer Blog</title>
	<atom:link href="http://davidbcalhoun.com/feed" rel="self" type="application/rss+xml" />
	<link>http://davidbcalhoun.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 21 Jul 2010 06:20:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Open Web Camp II at Stanford (July 17, 2010)</title>
		<link>http://davidbcalhoun.com/2010/open-web-camp-ii-stanford</link>
		<comments>http://davidbcalhoun.com/2010/open-web-camp-ii-stanford#comments</comments>
		<pubDate>Sun, 18 Jul 2010 06:25:36 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=371</guid>
		<description><![CDATA[Open Web Camp II at Stanford today was a blast! Lots of information. Plenty I&#8217;m already familiar with, but also lots I learned. I woke up late, only to see people tweeting about the conference (doh!), so I missed seeing Molly Holzschlag. But I arrived just in time to see&#8230; Estelle Weyl: &#8220;CSS3 Implementable Features&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Open Web Camp II at Stanford today was a blast!  Lots of information.  Plenty I&#8217;m already familiar with, but also lots I learned.</p>
<p>I woke up late, only to see people tweeting about the conference (doh!), so I missed seeing Molly Holzschlag.  But I arrived just in time to see&#8230;</p>
<h3>Estelle Weyl: &#8220;CSS3 Implementable Features&#8221;</h3>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4803724562/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/owc2-1.jpg" alt="Estelle Weyl" title="Estelle Weyl" width="800" height="676" class="aligncenter size-full wp-image-373" /></a><cite>Estelle Weyl (<a href="http://twitter.com/estellevw">@estellevw</a>)</cite>
</div>
<p>Estelle&#8217;s talk was about what features of CSS3 are available to use right now.  She covered all the usual: border radius, text shadow, box shadow, tilted images, etc.  And she showed off Paul Irish&#8217;s <a href="http://css3please.com/">css3please.com</a>, which greatly helps implement these cross-browser, with even the filter hacks required to pull it off in IE!  (no word about the performance hit of these IE hacks, which I&#8217;m sure I&#8217;ve read about somewhere&#8230;)</p>
<p>One of the cool new things I learned was that you can use CSS shorthands to declare border-radius (rounded corner) values.  So instead of this mess (courtesy of <a href="http://border-radius.com/">border-radius.com</a>):</p>
<pre name="code" class="css">
-webkit-border-top-left-radius: 1px;
-webkit-border-top-right-radius: 2px;
-webkit-border-bottom-right-radius: 3px;
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-topleft: 1px;
-moz-border-radius-topright: 2px;
-moz-border-radius-bottomright: 3px;
-moz-border-radius-bottomleft: 4px;
border-top-left-radius: 1px;
border-top-right-radius: 2px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 4px;
</pre>
<p>All you need to do is this, which is equivalent to the above (disclaimer: I&#8217;m not sure about the compatibility of this shorthand!):</p>
<pre name="code" class="css">
-moz-border-radius: 10px 20px 30px 40px;
-webkit-border-radius: 10px 20px 30px 40px;
border-radius: 10px 20px 30px 40px;
</pre>
<p>Or if you get bored of doing a perfectly rounded border radius, you can also do elliptical border radius (again, I&#8217;m unsure about the compatibility!):</p>
<pre name="code" class="css">
-moz-border-radius: 20px / 10px;
-webkit-border-radius: 20px / 10px;
border-radius: 20px / 10px;
</pre>
<h3>Matt Henry: &#8220;Going Mobile&#8221;</h3>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4803731530/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/owc2-2.jpg" alt="Matt Henry" title="Matt Henry" width="800" height="533" class="aligncenter size-full wp-image-374" /></a><cite>Matt Henry (<a href="http://twitter.com/greenideas">@greenideas</a>)</cite>
</div>
<p>I&#8217;ve worked closely with Matt at <a href="http://mobile.yahoo.com/">Yahoo! Mobile</a> for the past year, so not much was new for me.  It seemed that the audience really dug the talk though (lots of questions were asked!).</p>
<p>Essentially, Matt explained that you have to make at least two different versions of your website: one for feature phones and one for smartphones like the iPhone, and with the help of something like <a href="http://wurfl.sourceforge.net/">WURFL</a>, detect the phone and direct the user to the appropriate site.</p>
<p>Matt also  emphasized that feature phone browsers are terrible, much worse than IE6.</p>
<p>As part of a response to someone&#8217;s question, Matt talked about the idea of feature detection on smart phones, essentially saying that by the time you&#8217;ve sent the JavaScript feature detection to the device, it&#8217;s already too late, and in some cases might end up crashing the browser (for feature phones that have an extremely small page weight such as 9KB).  So for now it looks like user agent sniffing on the server-side is the way to go.</p>
<p>And there was a brief shoutout for <a href="http://mobile.yahoo.com/developers">Yahoo! Blueprint</a>, which renders a website across thousands of phones.</p>
<h3>Victor Tsaran and Todd Kloots: &#8220;Accessibility 101&#8243;</h3>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4803726232/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/owc2-3.jpg" alt="Victor Tsaran (left) and Todd Kloots (right)" title="Victor Tsaran (left) and Todd Kloots (right)" width="800" height="540" class="aligncenter size-full wp-image-375" /></a><cite>Victor Tsaran (<a href="http://twitter.com/vick08">@vick08</a>) and Todd Kloots (<a href="http://twitter.com/todd">@todd</a>)</cite>
</div>
<p>Before joining Twitter, Todd Kloots spent some time with Victor Tsaran at Yahoo! on accessibility.</p>
<p>In this talk they went over common misunderstandings and showed that even today, big companies such as <a href="http://digg.com">Digg.com</a> are still not investing in making their site accessible.</p>
<p>This was a pretty high level overview of basic accessibility, including an introduction to screen readers and ARIA attributes.</p>
<p>Here&#8217;s some of the stuff covered:<br />
-making forms accessible with fieldset and legend elements and linking captions to their inputs.<br />
-adding alt tags to images even if blank (so the screen reader doesn&#8217;t announce the entire URL)<br />
-the title tag doesn&#8217;t make things more accessible, whereas the alt tag does<br />
-screen readers obey display: none and visibility: hidden and that to hide something from normal users you have to position it offscreen (with negative left or text-indent).<br />
-how to make basic tables accessible by taking advantage of table summary and caption, as well as putting tables headings into the &lt;thead&gt; element.</p>
<p>I&#8217;m still trying to absorb it, but Todd also mentioned that a simple anchor tag for a button didn&#8217;t semantically make sense, and that it was more semantic to have a span wrapped around a &lt;button&gt;.  I guess I either don&#8217;t understand fully or I just disagree, since a &lt;button&gt; appears within a form and sometimes it just may be a cleaner solution to use a simple anchor tag.  I guess I will need to look into this more.</p>
<h3>Joseph R. Lewis: &#8220;Refactoring for Mobile&#8221;</h3>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4803099119/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/owc2-4.jpg" alt="Joseph R. Lewis" title="Joseph R. Lewis" width="800" height="533" class="aligncenter size-full wp-image-376" /></a><cite>Joseph R. Lewis (<a href="http://twitter.com/sanbeiji">@sanbeiji</a>)</cite>
</div>
<p>This talk was basically a live demo of implementing CSS media queries in a WordPress installation to make an iPhone-friendly version of the site.  There was a good use of the viewport tag, media queries, @font-face, text-shadow, box-shadow, border-radius, etc.</p>
<p>One surprising thing I learned was that apparently Mobile Safari recognizes border-radius without the webkit prefix?  I&#8217;m going to follow up on this.</p>
<h3>Dirk Ginader: &#8220;5 layers of web accessibility&#8221;</h3>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4803100401/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/owc2-5.jpg" alt="Dirk Ginader" title="Dirk Ginader" width="800" height="533" class="aligncenter size-full wp-image-377" /></a><cite>Dirk Ginader (<a href="http://twitter.com/ginader">@ginader</a>)</cite>
</div>
<p>Dirk is another Yahoo! (we&#8217;re everywhere!) whose presentation was also about accessibility.</p>
<p>As web developers, we&#8217;re already familiar with three layers of the web:</p>
<p>-HTML, responsible for content<br />
-CSS, responsible for presentation<br />
-JavaScript, responsible for interaction</p>
<p>Dirk introduced another two levels:</p>
<p>-CSS for JavaScript: special styling for when the full-featured JavaScript is available (this can be used by having JS add a &#8220;js&#8221; class to the document, and therefore writing CSS rules with &#8220;.js&#8221; in the front)<br />
-WAI-ARIA: special HTML attributes to help define roles, landmarks, allow the developer to give instructions directly through the screen reader, etc.</p>
<p>Also a few more points:<br />
-use the JavaScript focus() method for events (alerts that are injected at the top of the document and are otherwise ignored by the screen reader, windows that open and close, etc.)<br />
-:hover CSS pseudoclass is for the mouse only.. be sure to also use the :focus pseudoclass!  (my note: this is also important on mobile, for touch devices!)</p>
<h3>Summary</h3>
<p>Overall a great day.  The food was pricey but good, and the whole event was free, so I can&#8217;t complain!  Nice event, I just wish I could&#8217;ve seen the other talks in the other tracks!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/open-web-camp-ii-stanford/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Friday links: mobile performance studies, the upcoming device element, and more (July 15)</title>
		<link>http://davidbcalhoun.com/2010/friday-links-july-15</link>
		<comments>http://davidbcalhoun.com/2010/friday-links-july-15#comments</comments>
		<pubDate>Fri, 16 Jul 2010 19:00:26 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[links]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=346</guid>
		<description><![CDATA[Mobile Flickr for iPhone 1.2 released Firefox Home For iPhone Approved, Lets You Sync Bookmarks, Open Tabs And More Opera Mobile 10.1 for S60: W3C gelocation, border-radius &#038; 2D transforms on S60 platform Mobile Browser Cache Limits, Revisited by Ryan Grove Mobile cache file sizes (and other performance tests on mobile devices) by Steve Souders [...]]]></description>
			<content:encoded><![CDATA[<h3>Mobile</h3>
<p><a href="http://www.flickr.com/photos/spierisf/4776109875/">Flickr for iPhone 1.2 released</a><br />
<a href="http://techcrunch.com/2010/07/15/firefox-iphone/">Firefox Home For iPhone Approved, Lets You Sync Bookmarks, Open Tabs And More</a><br />
<a href="http://my.opera.com/ODIN/blog/2010/07/15/opera-mobile-10-1-for-s60">Opera Mobile 10.1 for S60</a>: W3C gelocation, border-radius &#038; 2D transforms on S60 platform<br />
<a href="http://www.yuiblog.com/blog/2010/07/12/mobile-browser-cache-limits-revisited/">Mobile Browser Cache Limits, Revisited</a> by Ryan Grove<br />
<a href="http://www.stevesouders.com/blog/2010/07/12/mobile-cache-file-sizes/">Mobile cache file sizes</a> (and other performance tests on mobile devices) by Steve Souders<br />
<a href="http://ipadtest.wordpress.com/2010/07/12/out-of-nowhere-the-ipad-has-a-real-competitor/">Out Of Nowhere, The iPad Has A Real Competitor</a>: the Android-based Pandigital Novel<br />
<a href="http://gigaom.com/2010/07/13/charles-jolley-srpoutcore-strobe/">Ex-Apple Javascript Guru: HTML5 and Native Apps Can Live Together</a></p>
<h3>HTML</h3>
<p><a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-July/027129.html">[whatwg] The vision behind the &lt;device&gt; element and the ConnectionPeer interface</a>: Hixie (Ian Hickson) explains the future of video conferencing, real-time games, and peer-to-peer file transfer from the browser<br />
<a href="http://mathiasbynens.be/notes/html5-id-class">The id attribute just got more classy in HTML5</a>: probably not very useful, but good to know.  Summary: in HTML 4.01 you could use almost any crazy characters for class names (♥, ⌘, ⌥, etc.), and now with HTML5 you can do the same for ids.<br />
<a href="http://www.danielmall.com/archives/2010/07/15/mark.php">&lt;mark&gt;</a>: how do you use it semantically?</p>
<h3>Events</h3>
<p>FREE <a href="http://momosv-jul19.eventbrite.com/">MobileMonday Night in the Park &#8211; Mobile Life and Demos (San Francisco)</a><br />
$ <a href="http://devnation.us/events/9">DevNation San Francisco (August 14, 2010)</a>: $50 if you get the early bird discount!<br />
$$$$$ <a href="http://www.design4mobile.com/">Design For Mobile 2010</a>: &#8220;Design For Mobile is the first and only North American mobile user experience conference. The focus is on strategy and tactics for user research, product definition, interaction and other design, and usability testing.&#8221; ($1,700 early bird discount)</p>
<h3>JavaScript</h3>
<p><a href="http://www.klauskomenda.com/code/javascript-programming-patterns/">JavaScript Programming Patterns</a>: Klaus Komenda gives a concise explanation of the various coding patterns created over the years.  Not a new post, but it&#8217;s so good that it&#8217;s worth mentioning.<br />
<a href="http://dailyjs.com/">DailyJS: A JavaScript Blog</a><br />
<a href="http://emmett.be/thewebdev/archives/96">Caveats of the JS Module Pattern</a><br />
<a href="http://yayquery.com/">VIDEO: yayQuery Podcast Episode 19</a>: HTML5, Sencha, John Resig, etc.<br />
<a href="http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/">How ECMAScript 5 still does not allow to subclass an array</a></p>
<h3>CSS</h3>
<p><a href="http://my.opera.com/ODIN/blog/2009/10/12/how-media-queries-allow-you-to-optimize-svg-icons-for-several-sizes">How media queries allow you to optimize SVG icons for several sizes</a><br />
<a href="http://webkit.org/blog/55/high-dpi-web-sites/">High DPI Web Sites</a>: Dave Hyatt explains circa 2006 another way of targeting high-DPI devices (before media queries were around)<br />
<a href="http://css3pie.com/">CSS3 PIE</a>: &#8220;PIE makes Internet Explorer 6-8 capable of rendering several of the most useful CSS3 decoration features.&#8221;</p>
<h3>Books</h3>
<p><a href="http://www.amazon.com/Introducing-HTML5-Voices-That-Matter/dp/0321687299">Introducing HTML5 (Voices That Matter)</a> (<a href="http://twitter.com/brucel">Bruce Lawson</a>, <a href="http://twitter.com/REM">Remy Sharp</a>)</p>
<h3>Etc</h3>
<p><a href="http://www.youtube.com/watch?v=-BsB0HpS768">VIDEO: Paul Rouget on Mixing the web! (Mozilla Summit 2010)</a>: mixing HTML5, CSS3, WebGL, websockets&#8230; etc<br />
<a href="http://5by5.tv/bigwebshow/12">VIDEO: The Big Web Show Episode 12: Web Conferences</a>: Andy McMillan and Eric Meyer<br />
<a href="http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx">Caching Improvements in Internet Explorer 9</a><br />
<a href="http://www.lukew.com/ff/entry.asp?1149">Web App Masters: Designing for Interesting Moments</a>: notes from Bill Scott&#8217;s presentation Designing for Interesting Moments<br />
<a href="http://www.couch.io/">CouchDB 1.0 released</a></p>
<p>(thanks to <a href="http://developer.yahoo.net/blog/archives/2010/07/tech_thursday_browsers_javascript_football_and_html5_hunks.html">Chris Heilmann&#8217;s Tech Thursday</a> for some of the links)</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/friday-links-july-15/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Visit From Flickr!</title>
		<link>http://davidbcalhoun.com/2010/a-visit-from-flickr</link>
		<comments>http://davidbcalhoun.com/2010/a-visit-from-flickr#comments</comments>
		<pubDate>Fri, 16 Jul 2010 08:48:09 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[flickr]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=354</guid>
		<description><![CDATA[One of the best perks of working at Yahoo! is getting to attend first-class talks, especially when the talk is by one of your favorite groups. In this case, Flickr! Flickr schwag: lens cleaner, phone cleaner, or iPhone 4 reception-enabler? &#8230;and it helps if one of the speakers was once a member of your team [...]]]></description>
			<content:encoded><![CDATA[<p>One of the best perks of working at Yahoo! is getting to attend first-class talks, especially when the talk is by one of your favorite groups.  In this case, Flickr!</p>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4798780374/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/flickr1.jpg" alt="Flickr schwag: lens cleaner, phone cleaner, or iPhone 4 reception-enabler?" title="Flickr schwag: lens cleaner, phone cleaner, or iPhone 4 reception-enabler?" width="800" height="536" class="aligncenter size-full wp-image-360" /></a><cite>Flickr schwag: lens cleaner, phone cleaner, or iPhone 4 reception-enabler?</cite>
</div>
<p>&#8230;and it helps if one of the speakers was once a member of your team (Markus was in Yahoo! Mobile until recently).</p>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4798280388/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/flickr3.jpg" alt="Markus Spiering of Flickr" title="Markus Spiering of Flickr" width="800" height="534" class="aligncenter size-full wp-image-362" /></a><cite><a href="http://www.flickr.com/photos/spierisf/">Markus Spiering</a> of Flickr</cite>
</div>
<p>I probably can&#8217;t chat too much about the future improvements they talked about, but I&#8217;ll just say there are some exciting plans for Flickr in the coming months!  As you may already know, <a href="http://blog.flickr.net/en/2010/06/23/a-new-photo-experience-your-photos-happier/">Flickr recently launched its new photo page</a>.  Markus went over some of the key new layout improvements, including the new prominence of geolocation and camera model information, which was previously buried deep in the exif info.  He and Chris Martin also explained some of the improved photo navigation.  Also, for anyone interested to know, the entire site was redone using <a href="http://developer.yahoo.com/yui/">YUI 3</a>.</p>
<p>Chris briefly went over the <a href="http://www.flickr.com/services/api/">public Flickr API</a> they provide.</p>
<p>What&#8217;s really exciting is the amount of phones Flickr is being integrated into.  It really says something when <a href="http://www.flickr.com/cameras/">the top camera model for Flickr is the iPhone</a>.  More generally, just think of all the possibilities with packaging Flickr into lots of other phones out there (not everyone has an iPhone, after all!).</p>
<p>Markus was also proud to exclaim that not only was the native Flickr app featured in the recent <a href="http://developer.apple.com/wwdc/">WWDC</a> keynote, but it was also featured in iPhone commercials around the world (&#8220;There&#8217;s an app for that&#8230;&#8221;).  Coincidentally, later that day Apple approved <a href="http://www.flickr.com/photos/spierisf/4776109875/">the latest version of the Flickr app</a>, which now supports uploading in the background!</p>
<div class="image-block full">
  <a href="http://www.flickr.com/photos/franksvalli/4797649397/"><img src="http://davidbcalhoun.com/wp-content/uploads/2010/07/flickr2.jpg" alt="Chris Martin of Flickr" title="Chris Martin of Flickr" width="800" height="534" class="aligncenter size-full wp-image-361" /></a><cite><a href="http://www.flickr.com/photos/cjmartin/">Chris Martin</a> of Flickr</cite>
</div>
<p>Keep your eyes peeled on Flickr!  Cool improvements heading to a screen near you&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/a-visit-from-flickr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thursday links (July 8)</title>
		<link>http://davidbcalhoun.com/2010/thursday-links-july-8</link>
		<comments>http://davidbcalhoun.com/2010/thursday-links-july-8#comments</comments>
		<pubDate>Fri, 09 Jul 2010 04:00:09 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=338</guid>
		<description><![CDATA[Mobile YouTube Mobile Gets a Kick Start Battle of Champions: HTC Droid Incredible vs. Palm Pre Plus Designing for the Retina Display (326ppi) AUDIO: John Resig: You Don’t Know Mobile (Webstyle Magazine) &#8211; ~$5,000 minimum to do mobile testing Tapworthy: Designing Great iPhone Apps eMobile: We have the fastest network in Japan! Apple iPad User [...]]]></description>
			<content:encoded><![CDATA[<h3>Mobile</h3>
<p><a href="http://googlemobile.blogspot.com/2010/07/youtube-mobile-gets-kick-start.html">YouTube Mobile Gets a Kick Start</a><br />
<a href="http://blog.laptopmag.com/htc-droid-incredible-vs-palm-pre-plus">Battle of Champions: HTC Droid Incredible vs. Palm Pre Plus</a><br />
<a href="http://www.lukew.com/ff/entry.asp?1142">Designing for the Retina Display (326ppi)</a><br />
<a href="http://webstylemag.com/you-dont-know-mobile" class="audio">AUDIO: John Resig: You Don’t Know Mobile (Webstyle Magazine)</a> &#8211; ~$5,000 minimum to do mobile testing<br />
<a href="http://www.amazon.com/Tapworthy-Designing-Great-iPhone-Apps/dp/1449381650">Tapworthy: Designing Great iPhone Apps</a><br />
<a href="http://www.intomobile.com/2010/07/08/emobile-we-have-the-fastest-network-in-japan/">eMobile: We have the fastest network in Japan!</a><br />
<a href="http://ymobileblog.com/blog/2010/07/08/apple-ipad-user-analysis-%E2%80%94-phase-ii/">Apple iPad User Analysis — Phase II</a><br />
<a href="http://www.youtube.com/watch?v=6_TFHqIHBqM" class="video">VIDEO: Using iPhone with a Braille display (Victor Tsaran)</a><br />
<a href="http://www.pewinternet.org/Reports/2010/Mobile-Access-2010.aspx">Mobile Access 2010 (Pew Research)</a><br />
<a href="http://www.prnewswire.com/news-releases/comscore-reports-may-2010-us-mobile-subscriber-market-share-98031904.html">BlackBerry and iPhone losing ground to Android, overall smartphone growth (comScore data)</a></p>
<h3>JavaScript</h3>
<p><a href="http://blog.mozilla.com/dherman/2010/07/08/javascript-needs-modules/">JavaScript needs modules!</a><br />
<a href="http://www.dustindiaz.com/javascript-cache-provider/">JavaScript Cache Provider (Dustin Diaz)</a><br />
<a href="http://www.adequatelygood.com/2010/7/Writing-Testable-JavaScript">Writing Testable JavaScript</a></p>
<h3>CSS</h3>
<p><a href="http://5by5.tv/bigwebshow/11" class="video">VIDEO: Nicole Sullivan on CSS (The Big Web Show)</a><br />
<a href="http://css-tricks.com/css-media-queries/">CSS Media Queries &#038; Using Available Space</a><br />
<a href="http://www.nczonline.net/blog/2010/07/06/data-uris-make-css-sprites-obsolete/">Data URIs make CSS sprites obsolete (Nicholas Zakas)</a></p>
<h3>Books</h3>
<p><a href="http://books.alistapart.com/product/html5-for-web-designers">HTML5 For Web Designers</a><br />
<a href="http://www.amazon.com/Tapworthy-Designing-Great-iPhone-Apps/dp/1449381650">Tapworthy: Designing Great iPhone Apps</a><br />
<a href="http://www.amazon.com/HTML5-Up-Running-Mark-Pilgrim/dp/0596806027">HTML5: Up and Running</a><br />
<a href="http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752">JavaScript Patterns</a></p>
<h3>Etc.</h3>
<p><a href="http://web.enavu.com/snippets/web-forms-semantic-mark-up-in-our-forms-part-2/">Web Forms: Semantic Mark Up in our Forms [part 2]</a><br />
<a href="http://trentwalton.com/2010/07/05/non-hover/">Non Hover</a> &#8211; “Elements that rely only on mousemove, mouseover, mouseout or the CSS pseudo-class :hover may not always behave as expected on a touch-screen device such as iPad or iPhone.”<br />
<a href="http://www.xanthir.com/video/">Video to ASCII conversion with Canvas</a><br />
<a href="http://accessibiliteweb.com/stuff/captcha-slider.html">CAPTCHA slider</a><br />
<a href="http://www.google.com/support/webmasters/bin/topic.py?topic=21997">Rich snippets and structured markup (Google Webmaster Central) (SEO)</a><br />
<a href="http://hacks.mozilla.org/2010/07/firefox-4-beta-1-is-here-whats-in-it-for-web-developers/">Firefox 4 beta 1 is here – what’s in it for web developers?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/thursday-links-july-8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Targeting Internet Explorer (IE): the age-old struggle</title>
		<link>http://davidbcalhoun.com/2010/targeting-ie-the-age-old-struggle</link>
		<comments>http://davidbcalhoun.com/2010/targeting-ie-the-age-old-struggle#comments</comments>
		<pubDate>Wed, 07 Jul 2010 08:55:49 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[conditional comments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[ie hack]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[ie7]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[ie9]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=332</guid>
		<description><![CDATA[As long as I can remember, developers have always been trying to target IE one way or another. Thanks to the wonders of modern technology, there have been multiple ways to pull this off. I guess I really haven&#8217;t been keeping up with the latest frontend trends (doh!), as I&#8217;ve just recently discovered this very [...]]]></description>
			<content:encoded><![CDATA[<p>As long as I can remember, developers have always been trying to target IE one way or another.  Thanks to the wonders of modern technology, there have been multiple ways to pull this off.</p>
<p>I guess I really haven&#8217;t been keeping up with the latest frontend trends (doh!), as I&#8217;ve just recently discovered this very elegant solution circa 2008 offered by <a href="http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/">Paul Irish</a>, which sticks a class on the body tag using proprietary conditional IE tags (no JavaScript magic needed here!):</p>
<pre name="code" class="html">
&lt;!--[if lt IE 7 ]&gt; &lt;body class=&quot;ie6&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 7 ]&gt;    &lt;body class=&quot;ie7&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 8 ]&gt;    &lt;body class=&quot;ie8&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 9 ]&gt;    &lt;body class=&quot;ie9&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if gt IE 9]&gt;  &lt;body&gt;             &lt;![endif]--&gt;
&lt;!--[if !IE]&gt;&lt;!--&gt; &lt;body&gt;         &lt;!--&lt;![endif]--&gt;
</pre>
<p>No need for creating multiple stylesheets for each version of IE (that makes extra network requests&#8230; boo)!  Now you can add adjustments to your main stylesheet just as you would with CSS hacks, except now you&#8217;re doing it in a not-so-hacky way.</p>
<p>For instance, if you have some peculiar CSS quirk in IE6, you simply apply a fix like this:</p>
<pre name="code" class="css">
.some-element { width: 200px; }         /* standards-based browsers */
.ie6 .some-element { width: 160px; }  /* elegant ie6 fix! */
</pre>
<h3>The old way: CSS hacks</h3>
<p>Previously I considered some CSS hacks the most elegant solution, but that was in the days when IE6/7 ruled.  You can see that the following CSS hack gets really unruly for IE8 (that hack thanks to <a href="http://my.opera.com/dbloom/blog/2009/03/11/css-hack-for-ie8-standards-mode">David Bloom</a>):</p>
<pre name="code" class="css">
.some-element {
    width: 200px;                /* standards-based browsers */
    /* some yet-to-be-determined IE9 hack goes here */
    width /*\**/: 180px\9        /* targets IE8 standards mode */
    *width: 170px;               /* targets IE7/IE6 */
    _width: 160px;               /* targets IE6 */
}
</pre>
<p>This works, but becomes quite difficult to maintain and understand.  And it just creates a need for someone to find yet another hack for each new version of IE that&#8217;s released.  By using the IE conditional comments to add a class to the body tag, we can accomplish the same result in a way that is easier to read and maintain and is dead simple to update when a new version of IE is released:</p>
<pre name="code" class="css">
.some-element { width: 200px; }
.ie9 .some-element { width: 190px; }
.ie8 .some-element { width: 180px; }
.ie7 .some-element { width: 170px; }
.ie6 .some-element { width: 160px; }
</pre>
<p>Woohoo!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/targeting-ie-the-age-old-struggle/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using mobile-specific HTML, CSS, and JavaScript (Mobile web part 5)</title>
		<link>http://davidbcalhoun.com/2010/using-mobile-specific-html-css-javascript</link>
		<comments>http://davidbcalhoun.com/2010/using-mobile-specific-html-css-javascript#comments</comments>
		<pubDate>Wed, 30 Jun 2010 03:27:11 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[basejs]]></category>
		<category><![CDATA[blackberry.network]]></category>
		<category><![CDATA[blackberry.system]]></category>
		<category><![CDATA[capture api]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[gesture events]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[iui]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jqtouch]]></category>
		<category><![CDATA[media queries]]></category>
		<category><![CDATA[mozorientation]]></category>
		<category><![CDATA[orientationchange]]></category>
		<category><![CDATA[pastrykit]]></category>
		<category><![CDATA[touch events]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[xui]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=317</guid>
		<description><![CDATA[Mobile-specific HTML Use the viewport tag to properly fit the content to the screen: &#60;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no&#34;/&#62; Use the tel scheme for telephone numbers, allowing users to initiate calls by clicking: &#60;a href=&#34;tel:18005555555&#34;&#62;Call us at 1-800-555-5555&#60;/a&#62; Or use the sms scheme to initiate an SMS message: &#60;a href=&#34;sms:18005555555&#34;&#62; &#60;a href=&#34;sms:18005555555,18005555556&#34;&#62; &#60;!-- multiple [...]]]></description>
			<content:encoded><![CDATA[<h3>Mobile-specific HTML</h3>
<p>Use the <a href="http://davidbcalhoun.com/2010/viewport-metatag">viewport tag</a> to properly fit the content to the screen:</p>
<pre name="code" class="html">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot;/&gt;
</pre>
<p>Use the <a href="http://www.rfc-editor.org/rfc/rfc3966.txt">tel scheme</a> for telephone numbers, allowing users to initiate calls by clicking:</p>
<pre name="code" class="html">
&lt;a href=&quot;tel:18005555555&quot;&gt;Call us at 1-800-555-5555&lt;/a&gt;
</pre>
<p>Or use the <a href="http://www.rfc-editor.org/rfc/rfc5724.txt">sms scheme</a> to initiate an SMS message:</p>
<pre name="code" class="html">
&lt;a href=&quot;sms:18005555555&quot;&gt;
&lt;a href=&quot;sms:18005555555,18005555556&quot;&gt;          &lt;!-- multiple recipients --&gt;
&lt;a href=&quot;sms:18005555555?body=Text+goes+here&quot;&gt;  &lt;!-- predefined message body --&gt;
</pre>
<p>You also have access to several <a href="http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/configuringwebapplications/configuringwebapplications.html">Apple-specific tags to use in your web application (iPhone and iPod Touch)</a>:</p>
<pre name="code" class="html">
// iOS 1.1.3+: this is the icon that's used when the user adds your app to the home screen
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/custom_icon.png&quot;/&gt;

// iOS 3+: full-screen startup splash screen image
&lt;link rel=&quot;apple-touch-startup-image&quot; href=&quot;/startup.png&quot;&gt;

// enable full-screen mode
&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot; /&gt;

// controls the appearance of the status bar in full-screen mode
&lt;meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black&quot; /&gt;
</pre>
<p>And also some handy attributes to turn off annoying autocorrect features (works on iPhone, but anything else?):</p>
<pre name="code" class="html">
&lt;input autocorrect=&quot;off&quot; autocomplete=&quot;off&quot; autocapitalize=&quot;off&quot;&gt;
</pre>
<h3>Mobile-specific CSS</h3>
<p><a href="http://www.w3.org/TR/css3-mediaqueries/">Media queries</a> enable you to target specific features (screen width, orientation, resolution) within CSS itself.  You can use them two ways: 1) inline in a CSS stylesheet or 2) as the &#8220;media&#8221; attribute in the link tag, which targets an external stylesheet.  The following is an example of inline CSS that&#8217;s applied only when the device is in portrait mode:</p>
<pre name="code" class="css">
@media all and (orientation: portrait) {
	body { }
	div { }
}
</pre>
<p>Here&#8217;s the same media query using the other method, which points to an external stylesheet (not recommended, as it creates another network request):</p>
<pre name="code" class="html">
&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation: portrait)&quot; href=&quot;portrait.css&quot; /&gt;
</pre>
<p>Here&#8217;s a few examples:</p>
<pre name="code" class="css">
// target mobile devices
@media only screen and (max-device-width: 480px) {
	body { max-width: 100%; }
}

// recent Webkit-specific media query to target the iPhone 4's high-resolution Retina display
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
	// CSS goes here
}

// should technically achieve a similar result to the above query,
// targeting based on screen resolution (the iPhone 4 has 326 ppi/dpi)
@media only screen and (min-resolution: 300dpi) {
	// CSS goes here
}
</pre>
<p>Read more: <a href="https://developer.mozilla.org/en/css/media_queries">Media queries (Mozilla Developer Center)</a></p>
<h3>Mobile-specific JavaScript</h3>
<p><a href="https://developer.mozilla.org/en/DOM/window.navigator.onLine">window.navigator.onLine</a> (boolean): not strictly mobile, but helpful for apps to determine if they&#8217;re being run offline</p>
<p><a href="http://developer.apple.com/safari/library/documentation/appleapplications/reference/safarihtmlref/articles/metatags.html">window.navigator.standalone</a> (boolean, iOS 2.1+): determine if it&#8217;s running in full-screen mode (Apple only?)</p>
<p><a href="http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html">touch events (iOS, Android 2.2+)</a>: touchstart, touchmove, touchend, touchcancel</p>
<p><a href="http://developer.apple.com/safari/library/documentation/internetweb/conceptual/safarivisualeffectsprogguide/InteractiveVisualEffects/InteractiveVisualEffects.html">gesture events (Apple only, iOS 2+)</a>: gesturestart, gesturechange, gesturend give access to predefined gestures (rotation, scale, position)</p>
<p><a href="http://ajaxian.com/archives/iphone-windowonorientationchange-code">orientationchange event</a>: triggered every 90 degrees of rotation (portrait and landscape modes)</p>
<p><a href="https://developer.mozilla.org/en/Detecting_device_orientation">MozOrientation</a> (Fennec/Firefox Mobile, Firefox 3.5+): also not strictly mobile.  Gives access to the device&#8217;s accelerometer (x-y-z orientation data), updated periodically.  Works on Android phones (I tested on the Nexus One), Windows Mobile, etc.  On the desktop this works with laptops such as Thinkpads and MacBooks.</p>
<p>-near future: camera/microphone access in Android 2.3 (announced at Google I/O 2010) through the <a href="http://www.w3.org/TR/capture-api/">Capture API</a></p>
<p>If you&#8217;re developing for a BlackBerry Widget, you have access to proprietary information through the <a href="http://www.blackberry.com/developers/docs/widgetapi/Summary_system.html">blackberry object</a> (which gives access to useful information such as blackberry.network [returns values such as CDMA and Wi-Fi] and blackberry.system).</p>
<p>You also have the option to use <a href="http://phonegap.com/">PhoneGap</a>, which augments JavaScript and gives you access to more phone features that native apps would have access to.</p>
<h3>Use a mobile-optimized JavaScript library</h3>
<p>Because smartphone browsers are standards-based, the aim of a JavaScript library on mobile is less towards API normalization and more towards providing an actual UI framework, usually to emulate the feel of native apps (and to provide easier workarounds to <a href="http://doctyper.com/archives/200808/fixed-positioning-on-mobile-safari/">lack of access to position:fixed</a>).  We&#8217;ve seen a few libraries released that emulate the iPhone UI, and in the future we might see libraries emulating the Android UI, as well as entirely new UIs.</p>
<p>There&#8217;s also a bit to be said about simply loading full desktop JavaScript libraries into mobile clients.  In my opinion this doesn&#8217;t particularly make sense, especially in a world where latency and bandwidth are so much more of a concern.  It doesn&#8217;t make sense to force the user wait longer and download code that&#8217;s ultimately useless to them (hacks for desktop browsers such as IE 6, etc).</p>
<p>Here&#8217;s a few of the mobile libraries now available:<br />
-<a href="http://www.sencha.com/">Sencha Touch</a><br />
-<a href="http://paularmstrongdesigns.com/projects/basejs/">baseJS</a><br />
-<a href="http://xuijs.com/">XUI</a><br />
-<a href="http://www.jqtouch.com/">jQTouch</a>: jQuery-style mobile library that emulates the look of the iPhone UI<br />
-<a href="http://code.google.com/p/iui/">iUI</a>: the first JavaScript library to be released, emulates the look of the iPhone UI.  Originally coded by <a href="http://www.joehewitt.com/">Joe Hewitt</a>.<br />
-<a href="http://davidbcalhoun.com/2009/pastrykit-digging-into-an-apple-pie">PastryKit</a>: Apple proprietary non-public JavaScript library with no available documentation</p>
<h3>Take advantage of new stuff!</h3>
<p>While not specific to mobile, there&#8217;s a lot of new stuff in general that you can use.  If you limit yourself to the top smartphones (iPhone, Android, and maybe webOS), compared to the desktop you immediately have access to an even wider array of new stuff, especially many Webkit proprietary features, since most of these top smartphones have browsers based on Webkit.</p>
<p>-HTML: new tags (<a href="http://diveintohtml5.org/">HTML5</a> (I&#8217;m sure you&#8217;ve heard of it by now…))<br />
-CSS: <a href="http://webkit.org/blog/130/css-transforms/">2d transforms</a>, <a href="http://webkit.org/blog/386/3d-transforms/">3d transforms</a>, animation, <a href="http://border-radius.com/">border radius</a>, <a href="https://developer.mozilla.org/en/css/@font-face">custom fonts with @font-face</a>, etc.<br />
-JavaScript: <a href="http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/">strict mode</a>, <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Constants">constants</a>, <a href="http://davidbcalhoun.com/2009/javascript-tidbit-block-scope-with-let">block scope</a>, <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date">Date.now()</a>, etc.</p>
<h3>Related posts</h3>
<p>This post is part of a series on the mobile web.  You can read the other parts of the series here:<br />
<a href="http://davidbcalhoun.com/2010/viewport-metatag">Part 1: The viewport metatag</a><br />
<a href="http://davidbcalhoun.com/2010/the-mobile-developers-toolkit-mobile-web-part-2">Part 2: The mobile developer’s toolkit</a><br />
<a href="http://davidbcalhoun.com/2010/designing-buttons-that-dont-suck">Part 3: Designing buttons that don’t suck</a><br />
<a href="http://davidbcalhoun.com/2010/on-designing-a-mobile-webpage">Part 4: On designing a mobile webpage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/using-mobile-specific-html-css-javascript/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>iPhone 4 SunSpider test results (22% faster than iPhone 3GS)</title>
		<link>http://davidbcalhoun.com/2010/iphone-4-sunspider-test-results</link>
		<comments>http://davidbcalhoun.com/2010/iphone-4-sunspider-test-results#comments</comments>
		<pubDate>Fri, 25 Jun 2010 16:57:53 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone 4]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[sunspider]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=312</guid>
		<description><![CDATA[============================================ RESULTS (means and 95% confidence intervals) -------------------------------------------- Total: 10669.4ms +/- 1.0% -------------------------------------------- 3d: 1471.5ms +/- 2.1% cube: 428.7ms +/- 2.6% morph: 584.3ms +/- 4.7% raytrace: 458.5ms +/- 0.6% access: 1476.7ms +/- 1.3% binary-trees: 151.6ms +/- 1.3% fannkuch: 664.0ms +/- 0.1% nbody: 397.9ms +/- 2.1% nsieve: 263.2ms +/- 6.3% bitops: 947.2ms +/- 2.1% 3bit-bits-in-byte: 195.7ms [...]]]></description>
			<content:encoded><![CDATA[<pre>
============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:                 10669.4ms +/- 1.0%
--------------------------------------------

  3d:                   1471.5ms +/- 2.1%
    cube:                428.7ms +/- 2.6%
    morph:               584.3ms +/- 4.7%
    raytrace:            458.5ms +/- 0.6%

  access:               1476.7ms +/- 1.3%
    binary-trees:        151.6ms +/- 1.3%
    fannkuch:            664.0ms +/- 0.1%
    nbody:               397.9ms +/- 2.1%
    nsieve:              263.2ms +/- 6.3%

  bitops:                947.2ms +/- 2.1%
    3bit-bits-in-byte:   195.7ms +/- 2.0%
    bits-in-byte:        206.1ms +/- 1.0%
    bitwise-and:         179.7ms +/- 1.1%
    nsieve-bits:         365.7ms +/- 3.9%

  controlflow:           169.5ms +/- 8.0%
    recursive:           169.5ms +/- 8.0%

  crypto:                668.7ms +/- 1.0%
    aes:                 307.0ms +/- 1.4%
    md5:                 181.1ms +/- 3.1%
    sha1:                180.6ms +/- 1.0%

  date:                  838.4ms +/- 4.6%
    format-tofte:        420.9ms +/- 7.4%
    format-xparb:        417.5ms +/- 2.8%

  math:                 1161.9ms +/- 1.0%
    cordic:              424.9ms +/- 0.5%
    partial-sums:        385.1ms +/- 0.3%
    spectral-norm:       351.9ms +/- 2.9%

  regexp:               1479.3ms +/- 0.1%
    dna:                1479.3ms +/- 0.1%

  string:               2456.2ms +/- 0.9%
    base64:              347.6ms +/- 3.1%
    fasta:               408.1ms +/- 6.7%
    tagcloud:            447.7ms +/- 0.6%
    unpack-code:         797.8ms +/- 0.4%
    validate-input:      455.0ms +/- 0.4%
</pre>
<h3>Summary</h3>
<p>Thanks to my coworker for lending me his phone for a few minutes (he waited in line for 9 hours yesterday when it first went on sale!).</p>
<p>This is quite an improvement over the <a href="http://davidbcalhoun.com/2010/sunspider-ios-3-1-3-versus-ios-4-gm">iPhone 3GS running iOS4, which ran the SunSpider test in 13787ms</a>.  The iPhone 4 ran the same test in 10669ms, which makes it ~22% faster head-to-head.</p>
<h3>Processors</h3>
<p>The iPhone 3GS has a Samsung S5PC100 ARM Cortex-A8[5] 833 MHz (underclocked to 600 MHz), while the iPhone 4 has an Apple A4 1GHz (likely underclocked to an unknown speed).</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/iphone-4-sunspider-test-results/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript SunSpider: HTC Evo versus HTC Incredible versus Nexus One</title>
		<link>http://davidbcalhoun.com/2010/javascript-sunspider-htc-evo-versus-htc-incredible-versus-nexus-one</link>
		<comments>http://davidbcalhoun.com/2010/javascript-sunspider-htc-evo-versus-htc-incredible-versus-nexus-one#comments</comments>
		<pubDate>Fri, 11 Jun 2010 05:07:11 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[performance]]></category>
		<category><![CDATA[htc evo]]></category>
		<category><![CDATA[htc incredible]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[nexus one]]></category>
		<category><![CDATA[sunspider]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=292</guid>
		<description><![CDATA[Result table Test Evo (2.1) Incredible (2.1) Nexus One (2.2) Total 16167ms 15237ms 5452ms 3D 2014ms 1835ms 946ms Access 2126ms 1892ms 463ms Bitops 1519ms 1591ms 360ms Controlflow 243ms 206ms 20ms Crypto 1033ms 1003ms 344ms Date 1849ms 1896ms 639ms Math 1684ms 1419ms 602ms Regexp 1779ms 1673ms 155ms String 3920ms 3722ms 1923ms Thoughts The Incredible is just [...]]]></description>
			<content:encoded><![CDATA[<h3>Result table</h3>
<table>
<thead>
<tr>
<td>Test</td>
<td>Evo (2.1)</td>
<td>Incredible (2.1)</td>
<td>Nexus One (2.2)</td>
</tr>
</thead>
<tfoot></tfoot>
<tbody>
<tr>
<td>Total</td>
<td>16167ms</td>
<td>15237ms</td>
<td class="positive">5452ms</td>
</tr>
<tr>
<td>3D</td>
<td>2014ms</td>
<td>1835ms</td>
<td class="positive">946ms</td>
</tr>
<tr>
<td>Access</td>
<td>2126ms</td>
<td>1892ms</td>
<td class="positive">463ms</td>
</tr>
<tr>
<td>Bitops</td>
<td>1519ms</td>
<td>1591ms</td>
<td class="positive">360ms</td>
</tr>
<tr>
<td>Controlflow</td>
<td>243ms</td>
<td>206ms</td>
<td class="positive">20ms</td>
</tr>
<tr>
<td>Crypto</td>
<td>1033ms</td>
<td>1003ms</td>
<td class="positive">344ms</td>
</tr>
<tr>
<td>Date</td>
<td>1849ms</td>
<td>1896ms</td>
<td class="positive">639ms</td>
</tr>
<tr>
<td>Math</td>
<td>1684ms</td>
<td>1419ms</td>
<td class="positive">602ms</td>
</tr>
<tr>
<td>Regexp</td>
<td>1779ms</td>
<td>1673ms</td>
<td class="positive">155ms</td>
</tr>
<tr>
<td>String</td>
<td>3920ms</td>
<td>3722ms</td>
<td class="positive">1923ms</td>
</tr>
</tbody>
</table>
<h3>Thoughts</h3>
<p>The Incredible is just slightly faster than the Evo, to the point where it&#8217;s probably negligible or within a margin of error.  Both of these phones run on Android 2.1 with HTC&#8217;s Sense UI modifications, and represent the latest and greatest in Android phones available on the market today.  Both run on the same 1GHz Snapdragon processor (QSD8650). The Nexus One is a bit older, and runs with an older version of the Snapdragon processor (QSD8250), however it still runs at 1GHz just like the other two phones.</p>
<p>As you can see the Nexus One blows away all the competition because it&#8217;s running Android 2.2 Froyo.  These results were quite a shock to me and are quite impressive.  These results even blow away Apple&#8217;s new iOS 4 running on my iPhone 3GS, which clocked in at a total time of 13787ms compared to the Nexus One&#8217;s startling 5452ms.</p>
<h3>Testing methodology</h3>
<p>Test: <a href="http://www2.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html">SunSpider 0.9.1</a></p>
<p>Devices: HTC Evo (Android 2.1), HTC Incredible (Android 2.1), HTC Nexus One (Android 2.2)</p>
<p>The SunSpider test was run five times on each phone.  The phone was completely turned off and on before each test.  The most extreme values of the five tests were thrown out, and the resulting four tests were averaged (sometimes from three tests when the values were very close together).</p>
<p>Raw results:</p>
<p><a href="http://davidbcalhoun.com/wp-content/uploads/2010/sunspider-htc-evo.html">SunSpider HTC Evo results (5 tests)</a></p>
<p><a href="http://davidbcalhoun.com/wp-content/uploads/2010/sunspider-htc-incredible.html">SunSpider HTC Incredible results (5 tests)</a></p>
<p><a href="http://davidbcalhoun.com/wp-content/uploads/2010/sunspider-nexus-one.html">SunSpider HTC Nexus One results (5 tests)</a></p>
<h3>Related links</h3>
<p><a href="http://davidbcalhoun.com/2010/sunspider-ios-3-1-3-versus-ios-4-gm">JavaScript SunSpider test: iOS 3.1.3 versus iOS 4 GM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/javascript-sunspider-htc-evo-versus-htc-incredible-versus-nexus-one/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript SunSpider test: iOS 3.1.3 versus iOS 4 GM</title>
		<link>http://davidbcalhoun.com/2010/sunspider-ios-3-1-3-versus-ios-4-gm</link>
		<comments>http://davidbcalhoun.com/2010/sunspider-ios-3-1-3-versus-ios-4-gm#comments</comments>
		<pubDate>Thu, 10 Jun 2010 09:50:38 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[performance]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sunspider]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=281</guid>
		<description><![CDATA[Result table Test iOS 3.1.3 (3GS) iOS 4 GM (3GS) % change Total 15396ms 13787ms -10.5% 3D 2411ms 1917ms -20.5% Access 1884ms 1893ms +0.5% Bitops 1044ms 1239ms +18.7% Controlflow 143ms 221ms +54.5% Crypto 982ms 850ms -13.4% Date 1355ms 1065ms -21.4% Math 2053ms 1511ms -26.4% Regexp 1616ms 1916ms +18.6% String 3908ms 3175ms -18.8% Thoughts After running [...]]]></description>
			<content:encoded><![CDATA[<h3>Result table</h3>
<table>
<thead>
<tr>
<td>Test</td>
<td>iOS 3.1.3 (3GS)</td>
<td>iOS 4 GM (3GS)</td>
<td>% change</td>
</tr>
</thead>
<tfoot></tfoot>
<tbody>
<tr>
<td>Total</td>
<td>15396ms</td>
<td>13787ms</td>
<td class="positive">-10.5%</td>
</tr>
<tr>
<td>3D</td>
<td>2411ms</td>
<td>1917ms</td>
<td class="positive">-20.5%</td>
</tr>
<tr>
<td>Access</td>
<td>1884ms</td>
<td>1893ms</td>
<td class="negative">+0.5%</td>
</tr>
<tr>
<td>Bitops</td>
<td>1044ms</td>
<td>1239ms</td>
<td class="negative">+18.7%</td>
</tr>
<tr>
<td>Controlflow</td>
<td>143ms</td>
<td>221ms</td>
<td class="negative">+54.5%</td>
</tr>
<tr>
<td>Crypto</td>
<td>982ms</td>
<td>850ms</td>
<td class="positive">-13.4%</td>
</tr>
<tr>
<td>Date</td>
<td>1355ms</td>
<td>1065ms</td>
<td class="positive">-21.4%</td>
</tr>
<tr>
<td>Math</td>
<td>2053ms</td>
<td>1511ms</td>
<td class="positive">-26.4%</td>
</tr>
<tr>
<td>Regexp</td>
<td>1616ms</td>
<td>1916ms</td>
<td class="negative">+18.6%</td>
</tr>
<tr>
<td>String</td>
<td>3908ms</td>
<td>3175ms</td>
<td class="positive">-18.8%</td>
</tr>
</tbody>
</table>
<h3>Thoughts</h3>
<p>After running these SunSpider tests, it looks like overall there&#8217;s significant speed gains between iOS 3.1.3 and iOS 4 GM.  However, it&#8217;s concerning from these tests there were some things that actually ran <em>slower</em> on iOS 4.  This either represents a real speed loss between the versions, a margin of error, or some flaw or inconsistency while testing.  Or maybe I possibly have some wrong setting on my phone?  Any input would be appreciated.</p>
<h3>Testing methodology</h3>
<p>Test: <a href="http://www2.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html">SunSpider 0.9.1</a></p>
<p>Device: iPhone 3GS</p>
<p>The test was run five separate times on the same phone for each version of the OS.  The phone was completely turned off and on before each test.</p>
<p>The most extreme values of the five tests were thrown out, and the resulting four tests were averaged (sometimes from three tests when the values were very close together).  I&#8217;m no statistics expert, so if you&#8217;d like to work it out for yourself, here are my raw test results:</p>
<p><a href="http://davidbcalhoun.com/wp-content/uploads/2010/iOS-3.1.3.html">SunSpider iOS 3.1.3 results (5 tests)</a></p>
<p><a href="http://davidbcalhoun.com/wp-content/uploads/2010/iOS-4-GM.html">SunSpider iOS 4 results (5 tests)</a></p>
<h3>Related links</h3>
<p><a href="http://www.medialets.com/blog/2009/06/24/speed-test-iphone-3gs-even-faster-than-apple-claims/">Speed Test: iPhone 3GS Even Faster than Apple Claims</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/sunspider-ios-3-1-3-versus-ios-4-gm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to install obsolete Android Virtual Devices (AVDs)</title>
		<link>http://davidbcalhoun.com/2010/how-to-install-obsolete-android-virtual-devices-avds</link>
		<comments>http://davidbcalhoun.com/2010/how-to-install-obsolete-android-virtual-devices-avds#comments</comments>
		<pubDate>Thu, 10 Jun 2010 02:00:38 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[avd]]></category>
		<category><![CDATA[emulator]]></category>

		<guid isPermaLink="false">http://davidbcalhoun.com/?p=275</guid>
		<description><![CDATA[Apparently it&#8217;s no longer possible to easily download Android versions 2.0 and 2.0.1 from the AVD Manager. I noticed this problem when I got a new machine and had to install everything from scratch. In the future I suspect even more AVDs will be made obsolete, so this solution also applies to them. Why would [...]]]></description>
			<content:encoded><![CDATA[<p>Apparently it&#8217;s no longer possible to easily download Android versions 2.0 and 2.0.1 from the AVD Manager.   I noticed this problem when I got a new machine and had to install everything from scratch.  In the future I suspect even more AVDs will be made obsolete, so this solution also applies to them.</p>
<p>Why would you want to install obsolete AVDs?  In my case it&#8217;s a matter of research: I simply want to see the progress of features being added to its browser, and track those changes over time.</p>
<h3>Step 1: Manually download and inspect repository.xml</h3>
<p>When updating from &#8220;Available Packages&#8221; there&#8217;s a little one-line error saying &#8220;Some packages were found but are not compatible updates.&#8221;</p>
<p>Ok, so let&#8217;s check out the XML for ourselves to see if we can find anything.  So point your browser to <a href="https://dl-ssl.google.com/android/repository/repository.xml">https://dl-ssl.google.com/android/repository/repository.xml</a> (to see the XML, right click to view the page source if you&#8217;re using a Webkit-based browser).</p>
<p>Search for the AVD version you want.  In this case we want 2.0 and 2.0.1, so a simple search find the relevant blocks of code.  And we also find the XML tag that&#8217;s the cause of our troubles, which prevents us from easily getting the AVDs:</p>
<pre name="code" class="xml">
&lt;sdk:obsolete /&gt;
</pre>
<h3>Step 2: Get the AVDs!</h3>
<p>At this point you could do two things, either save repository.xml to your computer and remove these &#8220;obsolete&#8221; tags (then add the XML to your AVD Manager by clicking &#8220;Add Add-on Site&#8230;&#8221;), or simply find the path to the AVD and download it manually.</p>
<p>The second option is to simply manually download the paths, which are easy to find in the XML and are listed here for your convenience:<br />
<a href="https://dl-ssl.google.com/android/repository/android-2.0_r01-linux.zip">Android 2.0 AVD (Linux)</a><br />
<a href="https://dl-ssl.google.com/android/repository/android-2.0_r01-macosx.zip">Android 2.0 AVD (Mac OSX)</a><br />
<a href="https://dl-ssl.google.com/android/repository/android-2.0_r01-windows.zip">Android 2.0 AVD (Windows)</a></p>
<p><a href="https://dl-ssl.google.com/android/repository/android-2.0.1_r01-linux.zip">Android 2.0.1 AVD (Linux)</a><br />
<a href="https://dl-ssl.google.com/android/repository/android-2.0.1_r01-macosx.zip">Android 2.0.1 AVD (Mac OSX)</a><br />
<a href="https://dl-ssl.google.com/android/repository/android-2.0.1_r01-windows.zip">Android 2.0.1 AVD (Windows)</a></p>
<h3>Step 3: Install!</h3>
<p>Create directories under your Android SDK installation&#8217;s &#8220;platforms&#8221; folder.  In this case we have 2.0 (API level 5) and 2.0.1 (API level 6), so I created these folders: android-5 and android-6.  Now just unzip the contents into these folders.</p>
<p>Start up the AVD Manager and click on &#8220;Installed Packages&#8221;.  If you don&#8217;t see your new (obsolete) packages you just installed, hit the Refresh button and you should see them.</p>
<p>Now you can create new AVDs with these obsolete packages!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbcalhoun.com/2010/how-to-install-obsolete-android-virtual-devices-avds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
