<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>QuirksBlog</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/" />
<modified>2010-08-30T13:15:43Z</modified>
<tagline></tagline>
<id>tag:www.quirksmode.org,2010:/blog//1</id>
<generator url="http://www.movabletype.org/" version="3.14">Movable Type</generator>
<copyright>Copyright (c) 2010, ppk</copyright>

<entry>
<title>Mobile market overview</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/mobile_market_o.html" />
<modified>2010-08-30T13:15:43Z</modified>
<issued>2010-08-30T13:14:47Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2005</id>
<created>2010-08-30T13:14:47Z</created>
<summary type="text/plain"><p>Over the weekend I created a mobile market overview in the form of a sortable table. I hope it gives you some insights; it certainly did for me.

For a complete overview knowledge of the current market share stats is necessary; fortunately Tomi Ahonen provides the latest. My table doesn&amp;#8217;t yet contains these stats; I still have to figure out exactly how to display them (not to mention making time to implement a new feature).

Anyway, take a look and let me know what you think. And if you have some extra facts, please provide them.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Over the weekend I created a <a href="/mobile/mobilemarket.html">mobile market overview</a> in the form of a sortable table. I hope it gives you some insights; it certainly did for me.</p>

<p>For a complete overview knowledge of the current market share stats is necessary; fortunately Tomi Ahonen <a href="http://communities-dominate.blogs.com/brands/2010/08/final-numbers-q2-of-2010-for-smartphone-market-shares.html" class="external">provides the latest</a>. My table doesn&#8217;t yet contains these stats; I still have to figure out exactly how to display them (not to mention making time to implement a new feature).</p>

<p>Anyway, take a look and let me know what you think. And if you have some extra facts, please provide them.</p>
]]>

</content>
</entry>
<entry>
<title>Mobile browser page updated; help needed</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/mobile_browser.html" />
<modified>2010-08-23T11:07:15Z</modified>
<issued>2010-08-23T11:06:00Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2004</id>
<created>2010-08-23T11:06:00Z</created>
<summary type="text/plain"><p>I have updated the mobile browser page. It now contains 18 browsers, and in addition I added some lists about which browser runs on which OS, and which device vendor uses which OS. However, I need your help in making the list exhaustive.

I have now firmly decided to test and describe only those browsers that run on one or more of the ten smartphone OSs (Android, bada, BlackBerry, iOS, LiMo, MeeGo, Phone 7, Symbian, webOS, Windows Mobile). There are just too many other OSs, but they&amp;#8217;re either feature phone only, or they&amp;#8217;ve fallen out of the race.

My question to you is to review the list and rack your brain for more data.


	Do you know if a browser runs on one of the smartphone OSs but is not yet mentioned in my lists?
	Do you know if a device vendor sells one of the smartphone OSs but is not yet mentioned in my lists?


If you do, please leave a comment with a useful link (to the browser vendor&amp;#8217;s homepage, or to a news item that mentions device vendor A selling smartphone OS B).

Thanks.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>I have updated the <a href="/mobile/browsers.html">mobile browser page</a>. It now contains 18 browsers, and in addition I added some lists about which browser runs on which OS, and which device vendor uses which OS. However, I need your help in making the list exhaustive.</p>

<p>I have now firmly decided to test and describe only those browsers that run on one or more of the ten smartphone OSs (Android, bada, BlackBerry, iOS, LiMo, MeeGo, Phone 7, Symbian, webOS, Windows Mobile). There are just too many other OSs, but they&#8217;re either feature phone only, or they&#8217;ve fallen out of the race.</p>

<p>My question to you is to review the list and rack your brain for more data.</p>

<ol>
	<li>Do you know if a browser runs on one of the smartphone OSs but is not yet mentioned in my lists?</li>
	<li>Do you know if a device vendor sells one of the smartphone OSs but is not yet mentioned in my lists?</li>
</ol>

<p>If you do, please leave a comment with a useful link (to the browser vendor&#8217;s homepage, or to a news item that mentions device vendor A selling smartphone OS B).</p>

<p>Thanks.</p>
]]>

</content>
</entry>
<entry>
<title>First serious stab at mobile browser grading</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/first_serious_s.html" />
<modified>2010-08-14T16:51:42Z</modified>
<issued>2010-08-14T16:49:49Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2003</id>
<created>2010-08-14T16:49:49Z</created>
<summary type="text/plain"><p>jQuery announced the jQuery mobile project, which aims at bringing jQuery to mobile browsers. All mobile browsers; not just Safari iPhone and Android WebKit.

Still, bringing the library to all mobile browsers is a rather tall order, since there are so bloody many of them. Therefore John Resig has spent a lot of time with mobile phones (I know all about that, so I admire his persistency) and has produced a first serious stab at mobile browser grading.

jQuery&amp;#8217;s approach differs slightly from Yahoo!&amp;#8217;s, in that it has A-, B-, C- and F-grade browsers.


A High Quality. A high quality browser with notable market share. A must-target for a mobile web developer.
B Medium Quality. Either a lower quality browser with high market share or a high quality browser with low market share. Depending upon your capabilities you should work to support these browsers, as well.
C Low Quality. Typically an extremely low quality browser with high market share. Generally not capable of running modern JavaScript or DOM code.
F Failing. A barely-functioning browser. Even though it has some market share you should avoid developing for it completely.


Safari iPhone 3+, Android WebKit, Dolfin, Opera Mobile 10+, Symbian v5 (which I call Symbian WebKit 2), BlackBerry 6.0 (the WebKit-based one), Palm WebKit, Firefox, and the MeeGo MicroB browser (Gecko-based) are the A-graded ones, and I agree.

I hope other libraries will follow suit. In fact, Dojo and YUI are already doing so, although I&amp;#8217;m not sure exactly where they are right now. (Pointers very welcome.) Ext.js has completely moved to mobile and has been renamed Sencha. My personal beef with Sencha is that they only support iPhone and Android; their examples do not work on Dolfin (Samsung bada), while that browser also supports the touch events. But that&amp;#8217;ll change

Of course I fully support all these moves. My support will likely take the form of continuing to report on the mobile browsers and their odd quirks; that&amp;#8217;s what I have been doing for the first generation of libraries, and that&amp;#8217;s what they still need most.</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>jQuery <a href="http://blog.jquery.com/2010/08/13/the-jquery-project-is-proud-to-announce-the-jquery-mobile-project/" class="external">announced</a> the jQuery mobile project, which aims at bringing jQuery to mobile browsers. <em>All</em> mobile browsers; not just Safari iPhone and Android WebKit.</p>
]]>
<![CDATA[<p>Still, bringing the library to all mobile browsers is a rather tall order, since there are so bloody many of them. Therefore John Resig has spent a lot of time with mobile phones (I know all about that, so I admire his persistency) and has produced a <a href="http://jquerymobile.com/gbs/" class="external">first serious stab at mobile browser grading</a>.</p>

<p>jQuery&#8217;s approach differs slightly from <a href="http://developer.yahoo.com/yui/articles/gbs/" class="external">Yahoo!&#8217;s</a>, in that it has A-, B-, C- and F-grade browsers.</p>

<ol>
<li><strong>A</strong> High Quality. A high quality browser with notable market share. A must-target for a mobile web developer.
<li><strong>B</strong> Medium Quality. Either a lower quality browser with high market share or a high quality browser with low market share. Depending upon your capabilities you should work to support these browsers, as well.
<li><strong>C</strong> Low Quality. Typically an extremely low quality browser with high market share. Generally not capable of running modern JavaScript or DOM code.
<li><strong>F</strong> Failing. A barely-functioning browser. Even though it has some market share you should avoid developing for it completely.
</ol>

<p>Safari iPhone 3+, Android WebKit, Dolfin, Opera Mobile 10+, Symbian v5 (which I call Symbian WebKit 2), BlackBerry 6.0 (the WebKit-based one), Palm WebKit, Firefox, and the MeeGo MicroB browser (Gecko-based) are the A-graded ones, and I agree.</p>

<p>I hope other libraries will follow suit. In fact, Dojo and YUI are already doing so, although I&#8217;m not sure exactly where they are right now. (Pointers very welcome.) Ext.js has completely moved to mobile and has been renamed <a href="http://sencha.com" class="external">Sencha</a>. My personal beef with Sencha is that they only support iPhone and Android; their examples do not work on Dolfin (Samsung bada), while that browser also supports the touch events. But that&#8217;ll change</p>

<p>Of course I fully support all these moves. My support will likely take the form of continuing to report on the mobile browsers and their odd quirks; that&#8217;s what I have been doing for the first generation of libraries, and that&#8217;s what they still need most.</p>]]>
</content>
</entry>
<entry>
<title>Fronteers 2010: Jake Archibald and Stoyan Stefanov</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/fronteers_2010_3.html" />
<modified>2010-08-06T13:42:30Z</modified>
<issued>2010-08-06T13:41:34Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2002</id>
<created>2010-08-06T13:41:34Z</created>
<summary type="text/plain"><p><![CDATA[The Fronteers 2010 conference has announced two new speakers: Jake Archibald of the BBC&#8217;s Glow library, and Stoyan Stefanov of Yahoo!

Thus the speakers&#8217; list is continuing to grow, and the conference is becoming more and more worth your &euro; 375. What are you waiting for? Order your ticket now!
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>The Fronteers 2010 conference has <a href="http://fronteers.nl/congres/2010/news/two-months-left" class="external">announced</a> two new speakers: Jake Archibald of the BBC&#8217;s Glow library, and Stoyan Stefanov of Yahoo!</p>

<p>Thus the <a href="http://fronteers.nl/congres/2010/speakers" class="external">speakers&#8217; list</a> is continuing to grow, and the conference is becoming more and more worth your &euro; 375. What are you waiting for? <a href="https://fronteers.paydro.net/" class="external">Order your ticket now</a>!</p>
]]>

</content>
</entry>
<entry>
<title>Combining media queries and JavaScript</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/combining_media.html" />
<modified>2010-08-05T13:13:12Z</modified>
<issued>2010-08-05T13:12:01Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2001</id>
<created>2010-08-05T13:12:01Z</created>
<summary type="text/plain"><p>On Tuesday Jason Grigsby challenged the conventional view that media queries are all we need to make a website mobile-friendly. Although he&amp;#8217;s right when he points out some serious problems, I do not think that media queries are the &amp;#8220;fool&amp;#8217;s gold,&amp;#8221; as Jason says. The message seems to be more that media queries alone are not enough to make your sites mobile-friendly. An additional component is required.

To recap briefly, this is a media query:


.sidebar {
	float: right;
	width: 250px;
}

@media all and (max-device-width: 600px) {
	.complicatedFunctionality {
		display: none;
	}
	.sidebar {
		float: none;
		width: auto;
	}
}


The media query asks whether the width of the device is 600px at maximum. If it is, the special styles are executed. This usually comes down to hiding advanced functionalities that do not make sense on mobile or take too much bandwidth, while it can also be used to change the site&amp;#8217;s grid from horizontally oriented to vertically oriented; for instance by placing a sidebar not right of the main content, but below it.

Technically, the .complicatedFunctionality and .sidebar declarations are added to the style sheet only when the query returns true, i.e. the device is less than 600px wide.

Now this works. Better still, media queries are the ideal way of adapting your design to different screen resolutions. Still, they are not the be-all-end-all of making your website mobile-friendly.

Jason identifies two main problem areas:


	It&amp;#8217;s all very well to hide, say, an advanced mapping application on mobile, but if you use only media queries the browser will still download the scripts associated with the application.
	Even though images might be hidden from mobile browsers, or low-source ones should be used, the browser still downloads the full-source variants.


In other words, media queries do not stop the browser from downloading assets that will not be used on a mobile phone. And with bandwidth at a premium, this is a serious problem.

He concludes:


CSS media queries are a tool, but they are not a silver bullet.


I mostly, but not entire agree. Media queries are silver bullets when it comes to pure CSS. Restricting the width of your site, moving sidebars and main navigations elsewhere, media queries can do all that and more.

The trick, however, is that a pure CSS approach is not enough. In addition we need a JavaScript that also reads out the media queries and uses the data to decide whether to download the complicated mapping script, whether to download the low-source or the full-source images, or possibly none.

As far as I know there is no direct access to media queries from JavaScript. You can&amp;#8217;t read out whether the example media query above has fired or not.

JavaScript pairing

Fortunately, there is a pretty safe way of using JavaScript in conjunction with media queries. It turns out that all browsers I tested so far have paired the width and device-width media queries with the values of document.documentElement. clientWidth and screen.width, respectively.

This is a general rule. All mobile browsers that support media queries exhibit these pairings. It&amp;#8217;s hard to believe, but I haven&amp;#8217;t found any exceptions yet &amp;#8212; and rest assured that I searched for them, because I could not believe that it would be this simple. And I will continue to keep an eye on this and report problems as soon as I find them.

One caveat, though: although the pairing exists in all browsers, some browsers report incorrect values for document.documentElement. clientWidth and screen.width. However, these browsers will also fire media queries based on these incorrect values, so the net result remains that both media query and script are executed, although at the wrong time. See the viewport compatiblity table for the gory details.

Therefore, if we want a JavaScript component that fires when the example media query above is triggered, we simply do:


if (screen.width 

I think it&amp;#8217;s best to reverse the script logic:


if (screen.width &gt;= 600) {
	// download complicated script
	// swap in full-source images for low-source ones
}


If you want to use width instead, do this:


@media all and (max-width: 900px) {
	// styles
}

if (document.documentElement.clientWidth 

Thus it is quite possible to pair a JavaScript routine with your media queries, and use it to decide which assets you should and should not download.

When these scripts are added to media queries, we&amp;#8217;re a whole lot closer to making one website that reacts to a mobile (or rather, a narrow-screen) environment both in its CSS and in its asset management.

</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>On Tuesday Jason Grigsby <a href="http://www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/" class="external">challenged the conventional view</a> that media queries are all we need to make a website mobile-friendly. Although he&#8217;s right when he points out some serious problems, I do not think that media queries are the &#8220;fool&#8217;s gold,&#8221; as Jason says. The message seems to be more that media queries alone are not enough to make your sites mobile-friendly. An additional component is required.</p>
]]>
<![CDATA[<p>To recap briefly, this is a media query:</p>

<pre>
.sidebar {
	float: right;
	width: 250px;
}

@media all and (max-device-width: 600px) {
	.complicatedFunctionality {
		display: none;
	}
	.sidebar {
		float: none;
		width: auto;
	}
}
</pre>

<p>The media query asks whether the width of the device is 600px at maximum. If it is, the special styles are executed. This usually comes down to hiding advanced functionalities that do not make sense on mobile or take too much bandwidth, while it can also be used to change the site&#8217;s grid from horizontally oriented to vertically oriented; for instance by placing a sidebar not right of the main content, but below it.</p>

<p>Technically, the <code>.complicatedFunctionality</code> and <code>.sidebar</code> declarations are added to the style sheet only when the query returns true, i.e. the device is less than 600px wide.</p>

<p>Now this works. Better still, media queries are the ideal way of adapting your design to different screen resolutions. Still, they are not the be-all-end-all of making your website mobile-friendly.</p>

<p>Jason identifies two main problem areas:</p>

<ul>
	<li>It&#8217;s all very well to hide, say, an advanced mapping application on mobile, but if you use only media queries the browser will still download the scripts associated with the application.</li>
	<li>Even though images might be hidden from mobile browsers, or low-source ones should be used, the browser still downloads the full-source variants.</li>
</ul>

<p>In other words, media queries do not stop the browser from downloading assets that will not be used on a mobile phone. And with bandwidth at a premium, this is a serious problem.</p>

<p>He concludes:</p>

<blockquote>
<p>CSS media queries are a tool, but they are not a silver bullet.</p>
</blockquote>

<p>I mostly, but not entire agree. Media queries <em>are</em> silver bullets when it comes to <em>pure CSS</em>. Restricting the width of your site, moving sidebars and main navigations elsewhere, media queries can do all that and more.</p>

<p>The trick, however, is that a pure CSS approach is not enough. In addition we need a JavaScript that also reads out the media queries and uses the data to decide whether to download the complicated mapping script, whether to download the low-source or the full-source images, or possibly none.</p>

<p>As far as I know there is no direct access to media queries from JavaScript. You can&#8217;t read out whether the example media query above has fired or not.</p>

<h3>JavaScript pairing</h3>

<p>Fortunately, there is a pretty safe way of using JavaScript in conjunction with media queries. It turns out that <em>all browsers</em> I tested so far have paired the <code>width</code> and <code>device-width</code> media queries with the values of <code>document.documentElement. clientWidth</code> and <code>screen.width</code>, respectively.</p>

<p>This is a <em>general rule</em>. All mobile browsers that support media queries exhibit these pairings. It&#8217;s hard to believe, but I haven&#8217;t found any exceptions yet &#8212; and rest assured that I searched for them, because I could not believe that it would be this simple. And I will continue to keep an eye on this and report problems as soon as I find them.</p>

<p class="smaller">One caveat, though: although the pairing exists in all browsers, some browsers report incorrect values for <code>document.documentElement. clientWidth</code> and <code>screen.width</code>. However, these browsers will also fire media queries based on these incorrect values, so the net result remains that both media query and script are executed, although at the wrong time. See the <a href="/mobile/tableViewport.html">viewport compatiblity table</a> for the gory details.</p>

<p>Therefore, if we want a JavaScript component that fires when the example media query above is triggered, we simply do:</p>

<pre>
if (screen.width < 600) {
	// don&#8217;t download complicated script
	// use low-source images instead of full-source ones
}
</pre>

<p>I think it&#8217;s best to reverse the script logic:</p>

<pre>
if (screen.width >= 600) {
	// download complicated script
	// swap in full-source images for low-source ones
}
</pre>

<p>If you want to use <code>width</code> instead, do this:</p>

<pre>
@media all and (max-width: 900px) {
	// styles
}

if (document.documentElement.clientWidth < 900) {
	// scripts
}
</pre>

<p>Thus it is quite possible to pair a JavaScript routine with your media queries, and use it to decide which assets you should and should not download.</p>

<p>When these scripts are <em>added to</em> media queries, we&#8217;re a whole lot closer to making one website that reacts to a mobile (or rather, a narrow-screen) environment both in its CSS and in its asset management.</p>
]]>
</content>
</entry>
<entry>
<title>&amp;#8220;HTML5&amp;#8221; &amp;#8212; let&amp;#8217;s move on, shall we?</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/html5_lets_move.html" />
<modified>2010-08-03T14:29:14Z</modified>
<issued>2010-08-03T14:27:51Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.2000</id>
<created>2010-08-03T14:27:51Z</created>
<summary type="text/plain"><p><![CDATA[Months ago I concluded that &#8220;HTML5&#8221; means whatever you want it to mean. This week, Jeffrey Zeldman and Jeff Croft took up the discussion, with Tantek &Ccedil;elik and Bruce Lawson commenting.

Tantek &Ccedil;elik said:


However, [the test site HTML5test.com] has one very big problem.
It tests things that it claims or implies are HTML5 (or conflates them as such) that are not actually part of HTML5.


Bruce Lawson said:


And what really makes my old-timers&#8217; blood boil is people calling CSS3 or patented Apple CSS-extensions HTML5. The work of the Web Standards Project was incredibly successful in making people aware the structure and style are different. There&#8217;s an even greater separation in HTML5.


Jeff Croft said:


Sometimes we just need a word to rally behind. And put in job descriptions. And claim we &#8220;support&#8221; (another word that is mostly meaningless). It&#8217;s a language thing and a human psychology thing. 


Needless to say, I agree with Jeff Croft here. There are several points that merit our attention:


	It&#8217;s already too late. &#8220;HTML5&#8221; has taken on meaning as a marketing term and is being used as such &#8212; not least by the browser vendors. Any opposition is pointless.
	Bruce&#8217;s argument would carry more force if the HTML5 spec hadn&#8217;t habitually blurred the line by inserting behaviour into what&#8217;s supposed to be a structure spec. Besides, any web developer is able to see that the &lt;section&gt; element, a -webkit-transform and Web Workers belong in different layers.
	The HTML5 spec is changing constantly, and time and again features are yanked out of it. No doubt that makes sense from a spec-producing point of view, but the problems of spec writers should not dictate what web developers do. We just want to use cool new stuff and sell it to our clients.


I&#8217;m sorry, but I just can&#8217;t be bothered to once again rise to righteous fury about minor semantic points. Explaining the separation of structure, presentation, and behaviour was very important in its day (hell, I was the first to discuss separation of structure and behaviour back in 2004), but the concept was accepted by the web development community long ago, and I don&#8217;t see the use &#8220;HTML5&#8221; as a broad term contributing to its decline.

And I don&#8217;t care whether something is in a document called &#8220;HTML5&#8221; or not. What matters is what the browsers support, provided they communicate with W3C in the process. (And everybody is very serious about that nowadays. Whatever else happens, we won&#8217;t slip back into a Browser War. That danger has gone forever.)

But it seems one more round of pointless semantic purity discussions is called for, and many will rise to the occasion. Not me, though.

Let&#8217;s move on, shall we?
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>HTML5</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Months ago I <a href="/blog/archives/2010/01/html5_means_wha.html">concluded</a> that &#8220;HTML5&#8221; means whatever you want it to mean. This week, <a href="http://www.zeldman.com/2010/08/03/html5-fuzzies/" class="external">Jeffrey Zeldman</a> and <a href="http://jeffcroft.com/blog/2010/aug/02/term-html5/" class="external">Jeff Croft</a> took up the discussion, with <a href="http://www.zeldman.com/2010/08/01/html5-test/#comment-56095" class="external">Tantek &Ccedil;elik</a> and <a href="http://www.zeldman.com/2010/08/03/html5-fuzzies/#comment-56120" class="external">Bruce Lawson</a> commenting.</p>

]]>
<![CDATA[<p>Tantek &Ccedil;elik said:</p>

<blockquote>
<p>However, [the test site <a href="http://html5test.com " class="external">HTML5test.com</a>] has one very big problem.</p>
<p>It tests things that it claims or implies are HTML5 (or conflates them as such) that are not actually part of HTML5.</p>
</blockquote>

<p>Bruce Lawson said:</p>

<blockquote>
<p>And what really makes my old-timers&#8217; blood boil is people calling CSS3 or patented Apple CSS-extensions HTML5. The work of the Web Standards Project was incredibly successful in making people aware the structure and style are different. There&#8217;s an even greater separation in HTML5.</p>
</blockquote>

<p>Jeff Croft said:</p>

<blockquote>
<p>Sometimes we just need a word to rally behind. And put in job descriptions. And claim we &#8220;support&#8221; (another word that is mostly meaningless). It&#8217;s a language thing and a human psychology thing. </p>
</blockquote>

<p>Needless to say, I agree with Jeff Croft here. There are several points that merit our attention:</p>

<ol>
	<li>It&#8217;s <em>already too late</em>. &#8220;HTML5&#8221; has taken on meaning as a <a href="/blog/archives/2010/03/html5_apps.html">marketing term</a> and is being used as such &#8212; not least by the browser vendors. Any opposition is pointless.</li>
	<li>Bruce&#8217;s argument would carry more force if the HTML5 spec hadn&#8217;t habitually blurred the line by inserting behaviour into what&#8217;s supposed to be a structure spec. Besides, any web developer is able to see that the <code>&lt;section&gt;</code> element, a <code>-webkit-transform</code> and Web Workers belong in different layers.</li>
	<li>The HTML5 spec is changing constantly, and time and again features are yanked out of it. No doubt that makes sense from a spec-producing point of view, but the problems of spec writers should not dictate what web developers do. We just want to use cool new stuff and sell it to our clients.</li>
</ol>

<p>I&#8217;m sorry, but I just can&#8217;t be bothered to once again rise to righteous fury about minor semantic points. Explaining the separation of structure, presentation, and behaviour was very important in its day (hell, I was the first to discuss <a href="http://www.digital-web.com/articles/separating_behavior_and_structure_2/" class="external">separation of structure and behaviour</a> back in 2004), but the concept was accepted by the web development community long ago, and I don&#8217;t see the use &#8220;HTML5&#8221; as a broad term contributing to its decline.</p>

<p>And I don&#8217;t care whether something is in a document called &#8220;HTML5&#8221; or not. What matters is what the browsers support, provided they communicate with W3C in the process. (And everybody is very serious about that nowadays. Whatever else happens, we won&#8217;t slip back into a Browser War. That danger has gone forever.)</p>

<p>But it seems one more round of pointless semantic purity discussions is called for, and many will rise to the occasion. Not me, though.</p>

<p>Let&#8217;s move on, shall we?</p>
]]>
</content>
</entry>
<entry>
<title>Front-Trends in Warsaw, 21/22 October</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/08/fronttrends_in.html" />
<modified>2010-08-03T11:21:11Z</modified>
<issued>2010-08-02T12:45:38Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.1999</id>
<created>2010-08-02T12:45:38Z</created>
<summary type="text/plain"><p><![CDATA[On 21 and 22 October the first Front Trends conference will take place in Warsaw. I will be speaking there; I&#8217;ll talk about JSON over SMS and other exciting marriages of web and mobile.

Tickets are inexpensive, not to say bloody cheap. &euro; 198 to see
a lot of good speakers (Douglas Crockford, Tantek &Ccedil;elik, Dmitry Baranovskiy of Rafael.js, plenty of others) is not expensive.

So if you&#8217;re in the neighbourhood, why not join us in Warsaw? As of this writing there are still tickets available.
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>On 21 and 22 October the first <a href="http://front-trends.com/" class="external">Front Trends</a> conference will take place in Warsaw. I will be speaking there; I&#8217;ll talk about JSON over SMS and other exciting marriages of web and mobile.</p>

<p>Tickets are inexpensive, not to say bloody cheap. &euro; 198 to see
<a href="http://front-trends.com/speakers" class="external">a lot of good speakers</a> (Douglas Crockford, Tantek &Ccedil;elik, Dmitry Baranovskiy of Rafael.js, plenty of others) is not expensive.</p>

<p>So if you&#8217;re in the neighbourhood, why not <a href="http://front-trends.com/registration" class="external">join us</a> in Warsaw? As of this writing there are still tickets available.</p>
]]>

</content>
</entry>
<entry>
<title>Four mobile links</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/07/four_mobile_lin.html" />
<modified>2010-07-30T22:55:38Z</modified>
<issued>2010-07-29T11:11:54Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.1998</id>
<created>2010-07-29T11:11:54Z</created>
<summary type="text/plain"><p>Here are four interesting mobile articles that caught my eye in the past 24 hours:


	Your mobile app is spying on you. About the danger in free apps.
	
	The study also found that a large proportion of apps contain third-party code with the capability to interact with sensitive data in a way that may not be apparent to users or the developers of the apps themselves. The third-party code is generally used for advertising or analytics. The project found that 47 percent of free Android apps included this third-party code, while 23 percent of free iPhone apps use it. Third-party code represents a security risk because it is difficult to update (and patch a vulnerability) on a global basis. Apple changed its terms of service for the iPhone recently because of its concerns about what third-party analytics and other companies were doing with private data.
	
	
	Nokia&amp;#8217;s JavaScript Peformance Best Practices. Contains a lot that was taken from Steve Souders&amp;#8217;s research and common knowledge, but also a few things I&amp;#8217;ve never heard before. I&amp;#8217;d really have to do an evaluation of some of the practices. Also contains a few ugly-but-necessary tricks for Symbian WebKit (S60).
	Also from Nokia: Introducing Ovi Browser Beta for Series 40. Nokia, too, has produced a mini-browser that relies on a server for the actual rendering and sends out the fully-rendered page, just as Opera Mini does. Now I need to lay my hands on an S40 device so that I can test it.
	From Bruce Lawson at Opera, finally, comes Mobile-friendly: The mobile web optimization guide with useful tips and tricks for making your website mobile-friendly.
	
	[...] mobile users are in a hurry; they&apos;re on the go and want to perform one specific task and then finish. A common example cited is that of a restaurant site. The mobile user wants to find the location, the menu and the opening hours so, the argument goes, the mobile site should contain this and nothing else.
	This is a good argument, but it&apos;s only half true. If it were 100% true, what would be on the &quot;full&quot; website? Presumably, a movie of the decor, some atmospheric music, animated representations of the house special dishes, and a downloadable menu in some fancy font. The fallacy here is that users of desktop computers are not task-focussed and have time to waste on an immersive branding experience.


</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Here are four interesting mobile articles that caught my eye in the past 24 hours:</p>
]]>
<![CDATA[<ul>
	<li><a href="http://mobile.venturebeat.com/2010/07/27/your-mobile-app-is-spying-on-you/" class="external">Your mobile app is spying on you</a>. About the danger in free apps.
	<blockquote>
	<p>The study also found that a large proportion of apps contain third-party code with the capability to interact with sensitive data in a way that may not be apparent to users or the developers of the apps themselves. The third-party code is generally used for advertising or analytics. The project found that 47 percent of free Android apps included this third-party code, while 23 percent of free iPhone apps use it. Third-party code represents a security risk because it is difficult to update (and patch a vulnerability) on a global basis. Apple changed its terms of service for the iPhone recently because of its concerns about what third-party analytics and other companies were doing with private data.</p>
	</blockquote>
	</li>
	<li><a href="http://wiki.forum.nokia.com/index.php/JavaScript_Performance_Best_Practices" class="external">Nokia&#8217;s JavaScript Peformance Best Practices</a>. Contains a lot that was taken from <a href="http://stevesouders.com" class="external">Steve Souders&#8217;s</a> research and common knowledge, but also a few things I&#8217;ve never heard before. I&#8217;d really have to do an evaluation of some of the practices. Also contains a few ugly-but-necessary tricks for Symbian WebKit (S60).</li>
	<li>Also from Nokia: <a href="http://betalabs.nokia.com/blog/2010/07/28/introducing-ovi-browser-beta-for-series-40-%E2%80%93-faster-easier-web-browsing-that-saves-d" class="external">Introducing Ovi Browser Beta for Series 40</a>. Nokia, too, has produced a mini-browser that relies on a server for the actual rendering and sends out the fully-rendered page, just as Opera Mini does. Now I need to lay my hands on an S40 device so that I can test it.<br>
Update: <a href="http://wapreview.com/blog/?p=7461" class="external">WAP Review tested it</a>; and confirmed you really need an S40 device.</li>
	<li>From Bruce Lawson at Opera, finally, comes <a href="http://dev.opera.com/articles/view/the-mobile-web-optimization-guide/" class="external">Mobile-friendly: The mobile web optimization guide</a> with useful tips and tricks for making your website mobile-friendly.
	<blockquote>
	<p>[...] mobile users are in a hurry; they're on the go and want to perform one specific task and then finish. A common example cited is that of a restaurant site. The mobile user wants to find the location, the menu and the opening hours so, the argument goes, the mobile site should contain this and nothing else.</p>
	<p>This is a good argument, but it's only half true. If it were 100% true, what would be on the "full" website? Presumably, a movie of the decor, some atmospheric music, animated representations of the house special dishes, and a downloadable menu in some fancy font. The fallacy here is that users of desktop computers are not task-focussed and have time to waste on an immersive branding experience.</p>

</ul>
]]>
</content>
</entry>
<entry>
<title>Opera&amp;#8217;s problems on mobile</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/07/operas_problems.html" />
<modified>2010-07-28T10:09:12Z</modified>
<issued>2010-07-28T10:07:11Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.1997</id>
<created>2010-07-28T10:07:11Z</created>
<summary type="text/plain"><p><![CDATA[In the mobile browser space all the advanced browsers are based on WebKit. That&#8217;s fine &#8212; WebKit is an excellent rendering engine &#8212; but if all browsers were based on WebKit I would start to worry about a monoculture. At least some browsers should be based on other rendering engines, as far as I&#8217;m concerned.

The only serious mobile candidate for &#8220;other rendering engine&#8221; is Opera. But I&#8217;m starting to wonder whether it can keep up with the WebKit browsers. With the recent release of Samsung Dolfin Opera Mobile has firmly dropped from third-best to fourth-best mobile browser on my list.

The problem is not that Opera isn&#8217;t innovating. It is. But I&#8217;m starting to wonder about the direction that innovation is taking.

Witness the recent release of Opera Mobile 10.1 beta for Symbian (on my 40th birthday; thanks, guys). I went through the press release, which highlights the following changes:


	Geolocation is now supported (although it doesn&#8217;t give the coordinates in my test page). That&#8217;s cool; it&#8217;s definitely something that&#8217;s extremely important on mobile.
	Vega graphics library and Carakan JavaScript engine. That&#8217;s fun to have, but I&#8217;m not sure if it&#8217;s the most important step Opera could have taken right now. I&#8217;ll get back to this.
	Various improvements to the user interface.


And that&#8217;s it, according to the press release. (border-radius is supported, maybe some other stuff too, and there will be some bug fixes here and there, but I haven&#8217;t yet studied it sufficiently to give you a full list.)

Relative importance

Nowadays all desktop browsers are innovating like mad in their JavaScript engines. For about a year and a half or so, significant improvements in JavaScript speed have been the Holy Grail of browser making, and every new release of every browser now routinely claims to be the fastest browser available.

(So routine has this claim become that I do not believe any of them any more. Besides, as far as I can tell they&#8217;re all testing JavaScript Core speed, while the biggest bottleneck is the speed with which DOM changes are made.)

Now on desktop this is a very important development. On mobile it&#8217;s also important, but I feel there are several other topics that are even more important than JavaScript speed, and that Opera is ignoring these topics.

Point is, a super-fast JavaScript engine is relatively worthless if you can&#8217;t properly set up a JavaScript-heavy interface. And the very first requirement for a JavaScript-heavy interface is that you always know exactly what the user is doing, so that you can react to his actions naturally and great UX is born.

It&#8217;s in the latter part of that equation that Opera Mobile has serious problems. I feel that, while innovating in JavaScript engines, Opera is forgetting basic mobile functionality without which a fast JavaScript engine is pointless.

Touch and viewport

There&#8217;s a reason I started my foray into mobile browsing by studying the touch events and the viewport dimensions. These two functionalities are absolutely vital to building compelling mobile interfaces.

The touch events allow us to follow exactly what the user is doing to the touchscreen. Without these events you can only detect whether the user clicks somewhere. That is enough for some interfaces, but others will definitely want to react to more subtle actions from the user.

The viewport dimensions are important for knowing how much of your site the user is currently seeing on his screen. An example will clarify why this is important.

I&#8217;m currently working on a little side project that involves writing the perfect JavaScript touch-scroll interface. This presupposes the touch events: without them it&#8217;s absolutely impossible to create a compelling UX.

However, I want several scrollable areas on the same page, and with that comes the problem of deciding when to allow a user to scroll. If the user has zoomed in and sees a little bit of one scrollable area on the edge of his screen, it makes sense not to scroll that area when he touches it, because it might confuse him. Instead, we should wait until the scrollable area covers most of the screen before allowing a scroll action. My prototype with this behaviour works pretty intuitively.

However, in order to know whether the scrollable area is on the screen I must be able to read out the dimensions of the visual viewport. I need to know which part of the page the user is currently viewing, compare it to the scrollable area, check their coordinates, and decide whether the user is allowed to scroll. That&#8217;s something that few browsers support right now.

Android and Samsung support the touch events, but not the visual viewport dimensions. Symbian, BlackBerry and IE support the visual viewport dimensions, but not the touch events. All other browsers, including Opera Mobile, support neither. So this script only works on the iPhone, which is the single browser to support both. 

So this interface, which I feel is an example of a mobile-specific UX, will not work on Opera Mobile, regardless of the speed of its JavaScript engine. That&#8217;s what I mean when I say that I&#8217;m wondering about Opera&#8217;s direction of innovation.

Opera Mobile simply must support the touch events and the viewport dimensions.

Zooming

But Opera Mobile has an even larger problem, and that is zooming. Basically it has the worst zooming functionality of any mobile browser I tested. It seems Opera ignored the emerging standard for touch-based zooming, and instead created its own system. That&#8217;s fine, as long as the system works. But it doesn&#8217;t.

So what exactly is wrong with Opera&#8217;s zooming? Basically everything.

Two levels

Opera has only two zooming levels: in and out. Initially you see the entire page, just as on all other mobile browsers. When you zoom in, however, you go to one single pre-defined zooming level, and once you&#8217;ve arrived there your only option is to zoom out again.

This behaviour is not unique to Opera Mobile. Many other second-tier mobile browsers, such as Symbian WebKit on touchscreen Nokias, or IE, have only two zoom levels.

But there are two other characteristics that make the Opera zooming experience uniquely lousy.

Pre-emptive narrowing of text

Opera kind of pre-emptively narrows your text into columns that fit snugly in the screen when you zoom in. Although that&#8217;s excellent behaviour to display when the user actually zooms in (as Android does), doing this beforehand makes no sense and has the ability to destroy your page&#8217;s graphic design.

Here&#8217;s my compatibility master page as it should display on mobile (Dolfin on Samsung Wave). Note that the text in the table stretches all the way from left to right, as it should:



And here is the same page on Opera Mobile 10.10 (Nokia N97). Here the text in the table is narrowed to the width Opera is going to take later on, when you zoom in:



In this particular case I don&#8217;t mind much, but this feature has the ability to completely destroy a well-designed page. As far as I know you can&#8217;t do anything against this effect and will have to accept the damage it does to your page.

Single tap

But by far the worst feature of Opera&#8217;s zoom is the user interaction. On touchscreens an industry standard is emerging for zooming. You either pinch-zoom or you double-tap. Some browsers don&#8217;t support pinch-zoom, but the double-tap works pretty well, too.

However, Opera in its wisdom uses not a double-tap but a single-tap interface. Tap once when zoomed out and you will zoom in on roughly the area you tapped on.

This is terrible. In order to understand why, take a look at my Touch test page. It&#8217;s fully zoomed-out:



This is how I designed the page: I want it to be usable even fully zoomed-out. Thus I can load the page, hit Record, and record an event sequence of my choice.

But what happens in Opera Mobile when I hit Record with a single tap in order to start recording? It. Bloody. Zooms. In! That makes my test page much harder to use.

To be fair, Opera Mobile 10.10 does not zoom at all in pages that have a &lt;meta viewport&gt;, as my test page has. That solves this particular issue, but I feel it&#8217;s still a stop-gap solution. All other browsers do allow the user to zoom in on a &lt;meta viewport&gt;-enhanced page. (Some even allow you to zoom out.)

Opera&#8217;s problems

Concluding, Opera Mobile has a serious zoom problem that must be addressed in addition to the touch event and viewport dimension problem.

I feel that addressing these issues is more important than yet another faster JavaScript engine or yet another UX upgrade. Besides, as long as zoom remains lousy the UX can be upgraded only so much. Zooming is a fundamental part of the mobile UX; without it many other innovations just don&#8217;t make sense.

So in order to remain relevant on the highest tier of mobile browsing, Opera will have to concentrate on three things:


	Fix zooming: double-tap interaction, many more zoom levels, no pre-emptive narrowing of text columns.
	Support the touch events.
	Allow us to read out the viewport dimensions.


I more-or-less expect the busy engineers in Oslo to be working on these problems, and I assume that the next major Opera Mobile upgrade will bring significant improvements here.

If it doesn&#8217;t, I&#8217;m afraid Opera is out of the race for the top spot. That is not necessarily bad: it could always forget about the top tier and instead concentrate on the low-end smartphone market. Right now Opera Mobile is available only for Symbian and Windows Mobile, and on those operating systems it&#8217;s the best available browser.

Without a serious upgrade of mobile-specific functionality ruling this second tier is the best Opera can hope for. The top tier will be WebKit-only.
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Opera Mobile/Mini</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>In the mobile browser space all the advanced browsers are based on WebKit. That&#8217;s fine &#8212; WebKit is an excellent rendering engine &#8212; but if <em>all</em> browsers were based on WebKit I would start to worry about a monoculture. At least some browsers should be based on other rendering engines, as far as I&#8217;m concerned.</p>

<p>The only serious mobile candidate for &#8220;other rendering engine&#8221; is Opera. But I&#8217;m starting to wonder whether it can keep up with the WebKit browsers. With the recent release of Samsung Dolfin Opera Mobile has firmly dropped from third-best to fourth-best mobile browser on my <a href="/mobile/browsers.html">list</a>.</p>

<p>The problem is not that Opera isn&#8217;t innovating. It is. But I&#8217;m starting to wonder about the direction that innovation is taking.</p>
]]>
<![CDATA[<p>Witness the recent release of Opera Mobile 10.1 beta for Symbian (on my 40th birthday; thanks, guys). I went through the <a href="http://www.opera.com/press/releases/2010/07/15/" class="external">press release</a>, which highlights the following changes:</p>

<ul>
	<li>Geolocation is now supported (although it doesn&#8217;t give the coordinates in my <a href="/html5/tests/geolocation.html">test page</a>). That&#8217;s cool; it&#8217;s definitely something that&#8217;s extremely important on mobile.</li>
	<li>Vega graphics library and Carakan JavaScript engine. That&#8217;s fun to have, but I&#8217;m not sure if it&#8217;s the most important step Opera could have taken right now. I&#8217;ll get back to this.</li>
	<li>Various improvements to the user interface.</li>
</ul>

<p>And that&#8217;s it, according to the press release. (<code>border-radius</code> is supported, maybe some other stuff too, and there will be some bug fixes here and there, but I haven&#8217;t yet studied it sufficiently to give you a full list.)</p>

<h3>Relative importance</h3>

<p>Nowadays all desktop browsers are innovating like mad in their JavaScript engines. For about a year and a half or so, significant improvements in JavaScript speed have been the Holy Grail of browser making, and every new release of every browser now routinely claims to be the fastest browser available.</p>

<p class="smaller">(So routine has this claim become that I do not believe any of them any more. Besides, as far as I can tell they&#8217;re all testing JavaScript Core speed, while the biggest bottleneck is the speed with which DOM changes are made.)</p>

<p>Now on desktop this is a very important development. On mobile it&#8217;s also important, but I feel there are several other topics that are even more important than JavaScript speed, and that Opera is ignoring these topics.</p>

<p>Point is, a super-fast JavaScript engine is relatively worthless if you can&#8217;t properly set up a JavaScript-heavy interface. And the very first requirement for a JavaScript-heavy interface is that you always know exactly what the user is doing, so that you can react to his actions naturally and great UX is born.</p>

<p>It&#8217;s in the latter part of that equation that Opera Mobile has serious problems. I feel that, while innovating in JavaScript engines, Opera is forgetting basic mobile functionality without which a fast JavaScript engine is pointless.</p>

<h3>Touch and viewport</h3>

<p>There&#8217;s a reason I started my foray into <a href="/mobile/">mobile browsing</a> by studying the touch events and the viewport dimensions. These two functionalities are absolutely vital to building compelling mobile interfaces.</p>

<p>The touch events allow us to follow exactly what the user is doing to the touchscreen. Without these events you can only detect whether the user clicks somewhere. That is enough for some interfaces, but others will definitely want to react to more subtle actions from the user.</p>

<p>The viewport dimensions are important for knowing how much of your site the user is currently seeing on his screen. An example will clarify why this is important.</p>

<p>I&#8217;m currently working on a little side project that involves writing the perfect JavaScript touch-scroll interface. This presupposes the touch events: without them it&#8217;s absolutely impossible to create a compelling UX.</p>

<p>However, I want several scrollable areas on the same page, and with that comes the problem of deciding when to allow a user to scroll. If the user has zoomed in and sees a little bit of one scrollable area on the edge of his screen, it makes sense <em>not</em> to scroll that area when he touches it, because it might confuse him. Instead, we should wait until the scrollable area covers most of the screen before allowing a scroll action. My prototype with this behaviour works pretty intuitively.</p>

<p>However, in order to know whether the scrollable area is on the screen I must be able to read out the dimensions of the visual viewport. I need to know which part of the page the user is currently viewing, compare it to the scrollable area, check their coordinates, and decide whether the user is allowed to scroll. That&#8217;s something that few browsers support right now.</p>

<p>Android and Samsung support the touch events, but not the visual viewport dimensions. Symbian, BlackBerry and IE support the visual viewport dimensions, but not the touch events. All other browsers, including Opera Mobile, support neither. So this script only works on the iPhone, which is the single browser to support both. </p>

<p>So this interface, which I feel is an example of a mobile-specific UX, will not work on Opera Mobile, regardless of the speed of its JavaScript engine. That&#8217;s what I mean when I say that I&#8217;m wondering about Opera&#8217;s direction of innovation.</p>

<p>Opera Mobile simply <em>must</em> support the touch events and the viewport dimensions.</p>

<h3>Zooming</h3>

<p>But Opera Mobile has an even larger problem, and that is zooming. Basically it has the worst zooming functionality of any mobile browser I tested. It seems Opera ignored the emerging standard for touch-based zooming, and instead created its own system. That&#8217;s fine, as long as the system works. But it doesn&#8217;t.</p>

<p>So what exactly is wrong with Opera&#8217;s zooming? Basically everything.</p>

<h4>Two levels</h4>

<p>Opera has only two zooming levels: in and out. Initially you see the entire page, just as on all other mobile browsers. When you zoom in, however, you go to one single pre-defined zooming level, and once you&#8217;ve arrived there your only option is to zoom out again.</p>

<p>This behaviour is not unique to Opera Mobile. Many other second-tier mobile browsers, such as Symbian WebKit on touchscreen Nokias, or IE, have only two zoom levels.</p>

<p>But there are two other characteristics that make the Opera zooming experience uniquely lousy.</p>

<h4>Pre-emptive narrowing of text</h4>

<p>Opera kind of pre-emptively narrows your text into columns that fit snugly in the screen when you zoom in. Although that&#8217;s excellent behaviour to display <em>when the user actually zooms in</em> (as Android does), doing this beforehand makes no sense and has the ability to destroy your page&#8217;s graphic design.</p>

<p>Here&#8217;s my <a href="/compatibility.html">compatibility master page</a> as it should display on mobile (Dolfin on Samsung Wave). Note that the text in the table stretches all the way from left to right, as it should:</p>

<img class="screenshot" alt="Compatibility page in Dolfin" src="/mobile/pix/zoom_bada.jpg">

<p>And here is the same page on Opera Mobile 10.10 (Nokia N97). Here the text in the table is narrowed to the width Opera is going to take later on, when you zoom in:</p>

<img class="screenshot" alt="Compatibility page in Opera Mobile" src="/mobile/pix/zoom_opera.jpg">

<p>In this particular case I don&#8217;t mind much, but this feature has the ability to completely destroy a well-designed page. As far as I know you can&#8217;t do anything against this effect and will have to accept the damage it does to your page.</p>

<h4>Single tap</h4>

<p>But by far the worst feature of Opera&#8217;s zoom is the user interaction. On touchscreens an industry standard is emerging for zooming. You either pinch-zoom or you double-tap. Some browsers don&#8217;t support pinch-zoom, but the double-tap works pretty well, too.</p>

<p>However, Opera in its wisdom uses not a double-tap but a single-tap interface. Tap once when zoomed out and you will zoom in on roughly the area you tapped on.</p>

<p>This is terrible. In order to understand why, take a look at my <a href="/m/tests/touch.html">Touch test page</a>. It&#8217;s fully zoomed-out:</p>

<img class="screenshot" alt="Touch test page in Opera Mobile" src="/mobile/pix/zoom_opera2.jpg">

<p>This is how I designed the page: I want it to be usable even fully zoomed-out. Thus I can load the page, hit Record, and record an event sequence of my choice.</p>

<p>But what happens in Opera Mobile when I hit Record with a single tap in order to start recording? <em>It. Bloody. Zooms. In!</em> That makes my test page much harder to use.</p>

<p>To be fair, Opera Mobile 10.10 does not zoom at all in pages that have a <code>&lt;meta viewport&gt;</code>, as my test page has. That solves this particular issue, but I feel it&#8217;s still a stop-gap solution. All other browsers <em>do</em> allow the user to zoom in on a <code>&lt;meta viewport&gt;</code>-enhanced page. (Some even allow you to zoom out.)</p>

<h3>Opera&#8217;s problems</h3>

<p>Concluding, Opera Mobile has a serious zoom problem that must be addressed in addition to the touch event and viewport dimension problem.</p>

<p>I feel that addressing these issues is more important than yet another faster JavaScript engine or yet another UX upgrade. Besides, as long as zoom remains lousy the UX can be upgraded only so much. Zooming is a fundamental part of the mobile UX; without it many other innovations just don&#8217;t make sense.</p>

<p>So in order to remain relevant on the highest tier of mobile browsing, Opera will have to concentrate on three things:</p>

<ol>
	<li>Fix zooming: double-tap interaction, many more zoom levels, no pre-emptive narrowing of text columns.</li>
	<li>Support the touch events.</li>
	<li>Allow us to read out the viewport dimensions.</li>
</ol>

<p>I more-or-less expect the busy engineers in Oslo to be working on these problems, and I assume that the next major Opera Mobile upgrade will bring significant improvements here.</p>

<p>If it doesn&#8217;t, I&#8217;m afraid Opera is out of the race for the top spot. That is not necessarily bad: it could always forget about the top tier and instead concentrate on the low-end smartphone market. Right now Opera Mobile is available only for Symbian and Windows Mobile, and on those operating systems it&#8217;s the best available browser.</p>

<p>Without a serious upgrade of mobile-specific functionality ruling this second tier is the best Opera can hope for. The top tier will be WebKit-only.</p>
]]>
</content>
</entry>
<entry>
<title>Mobile payments made easy</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2010/07/mobile_payments.html" />
<modified>2010-07-27T12:08:08Z</modified>
<issued>2010-07-27T12:06:37Z</issued>
<id>tag:www.quirksmode.org,2010:/blog//1.1996</id>
<created>2010-07-27T12:06:37Z</created>
<summary type="text/plain"><p><![CDATA[This is just in: Google seems to be taking steps to allow operator billing. If that&#8217;s true it&#8217;s huge news.

Note from the outset that the article doesn&#8217;t say in so many words that operator billing is coming, although it certainly gives that impression, and plenty of publications translate it as such.

The basic idea of operator billing is very simple: if you want to buy an app, or access to online content, the price is automatically added to your operator bill (or, I assume, deducted from your pre-paid account).

Now I&#8217;m not a mobile billing specialist by any means, but I still want to give you an idea of what we&#8217;re talking about. If I make any technical mistakes, please correct them in the comments.

The billing process

Just yesterday I made my first Android Market purchase, and although the process was relatively smooth, I still had to fill in all my credit card stuff, make mistakes, being told off, etc. Besides, when I tried to do the same a few months ago, the Android Market rejected my credit card. Why? Probably because the Dutch market wasn&#8217;t active yet &#8212; but I thought of that only much later. At the moment I was pretty pissed.

Now with operator billing I wouldn&#8217;t have all this hassle. I&#8217;d just click on whatever I want to buy, give a one-time confirmation &#8220;Yes, I do want to spend &euro; 2.39 on this&#8221; and be done. When my next operator bill comes around, the &euro; 2.39 will be added to it.

In addition, operators can verify your identity through your SIM card, without you having to do anything. No more hassle with credit card numbers. (In fact, the only parties that have a lot to lose from operator billing are the credit card companies. Expect resistance from them; they&#8217;ll probably say it&#8217;s unsafe or something.)

Thus operator billing is by far the most user-friendly way of making mobile purchases. That&#8217;s what makes it so important. Besides, it also opens up the mobile marketplace to those that do not have a credit card.

A question of identity

However, Google&#8217;s rather vague announcement does leave some questions unanswered. No doubt that&#8217;s because Google is still figuring out how to answer those questions. But let&#8217;s review them anyway:


	What do I have to do in order to make a purchase? A one-step system is within reach; I hope it will be implemented.
	How will my identity (and thus my bill) be verified?
	How will the various parties communicate?


The last question is probably the most important one. If I want to make a purchase through operator billing, there are three parties involved: me, the selling party, and the operator. Somehow, the selling party has to connect to the operator to figure out exactly who I am, and to make a request to put &euro; 2.39 on my bill for my purchase. In addition, the operator has to pay that money (maybe minus a fee) to the selling party.

The JIL 1.2 API gives us some clues as to how this system is going to work. This API, that will eventually be implemented in Vodafone 360 phones as well as, one hopes, many others, has two properties that are meant specifically for operator billing (p. 16):


Widget.Device.AccountInfo.phoneUserUniqueId
Widget.Device.AccountInfo.phoneOperatorName


Thus, when purchase times comes around, the store has some grip on your identity. It will have to send off a communication to the specified operator stating that user with unique ID X wants to make a &euro; 2.39 purchase.

The operator will have to make some effort to verify this information; after all I might be able to hack a phone to send false unique IDs. Thus the operator will probably send me an SMS &#8220;Are you sure you want to purchase product X for &euro; 2.39?&#8220; Once I reply to that SMS the purchase is made and downloading can commence.

Still, I hope that the process will become even more user-friendly. The same JIL specification defines a way to send an SMS from a widget. Thus, if I want to purchase something the system could automatically generate an SMS for me and send it off to the operator. Thus the operator will be able to verify my intent by comparing my unique user ID with the SIM card through which the SMS was sent. If they match the purchase is made and downloading can commence.

That&#8217;s one step less, and thus more user-friendly. Hell, if it&#8217;s implemented correctly I don&#8217;t even have to switch to my SMS application. (The operator still has to tell the store &#8220;Purchase made, proceed with download.&#8221; But a proper system will not bother me with the details.)

Unfortunately the JIL 1.2 spec does not yet contain the methods that will be used for actual payments, nor the exact workflow. Besides, it&#8217;s unclear which operators Google is talking to right now. Probably US-based ones, and of those only Verizon is part of the JIL consortium. The others might use other APIs. (Come to think of it, so might Verizon. One never knows.)

Future expansion

Let&#8217;s close on a positive note and assume that a system roughly similar to what I describe above will actually be in place in two years or so. Apart from the increased user-friendliness of the purchasing process, what will it bring?

The basic answer is Long Tail. Increased user-friendliness and the scrapping of the requirement to own a credit card may entice more consumers to make a mobile purchase. That would be good.

The real benefit will lie with developers, though. In theory, the system could be set up so that individual developers who offer one or two apps for download on their own site can also use it.

Thus the requirement to offer your wares through one or more app stores might also be scrapped. That could be especially important to cross-platform apps such as W3C Widgets. Whichever phone with whichever operator ends up at the developer&#8217;s site, they can all make a purchase, provided they support widgets.

One more nail in the app stores&#8217; coffin would be the opportunity to make in-app purchases; say some articles from a news site or a few new levels for your game. Operator billing is explicitly meant for such purchases, too. And if we can use operator billing in our apps, too, the app store infrastructure is basically not necessary any more.

Picture the following:


	I write a news reader app as a W3C Widget. Anyone can download it for free from my website.
	If you like my app you can share it with your friends. Just send over the widget via Bluetooth. No more complicated user-unfriendly Send-To-Friend systems necessary.
	But how do I make money? By selling access to the actual articles. Every article you want to read costs you, say &euro; 0.02. Alternatively, you can buy a day of unlimited access for, I don&#8217;t know, &euro; 0.99.
	All the billing is done in-app through the operator. My users never have to do anything beyond saying &#8220;Yes, I want to buy this article.&#8221;


Where&#8217;s the app store in this process? Nowhere. We don&#8217;t need it any more. Wouldn&#8217;t that be something?

(I should note that although sending widgets via Bluetooth is possible nowadays &#8212; I&#8217;ve done it &#8212; the process is not very user-friendly yet. But this functionality is definitely coming; it&#8217;s not a pipe dream.)

Waiting for Google

So I&#8217;m impatiently waiting for Google to announce more details. Exactly how will their system work? What does the user have to do? Which operators? Questions, questions.

Anyway, the future of mobile payments has come one step closer.
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>This is just in: Google seems to be <a href="http://android-developers.blogspot.com/2010/07/adjustment-to-market-legals.html" class="external">taking steps</a> to allow operator billing. If that&#8217;s true it&#8217;s huge news.</p>

<p>Note from the outset that the article doesn&#8217;t say in so many words that operator billing is coming, although it certainly gives that impression, and <a href="http://phandroid.com/2010/07/26/googles-introducing-new-market-purchase-options-pay-for-apps-alongside-your-monthly-bill/" class="external">plenty of</a> <a href="http://www.mobilecrunch.com/2010/07/26/carrier-billing-coming-soon-to-android/" class="external">publications</a> <a href="http://www.boygeniusreport.com/2010/07/24/carrier-billing-coming-soon-to-the-android-market/" class="external">translate it</a> as such.</p>

<p>The basic idea of operator billing is very simple: if you want to buy an app, or access to online content, the price is automatically added to your operator bill (or, I assume, deducted from your pre-paid account).</p>
]]>
<![CDATA[<p>Now I&#8217;m not a mobile billing specialist by any means, but I still want to give you an idea of what we&#8217;re talking about. If I make any technical mistakes, please correct them in the comments.</p>

<h3>The billing process</h3>

<p>Just yesterday I made my first Android Market purchase, and although the process was relatively smooth, I still had to fill in all my credit card stuff, make mistakes, being told off, etc. Besides, when I tried to do the same a few months ago, the Android Market rejected my credit card. Why? Probably because the Dutch market wasn&#8217;t active yet &#8212; but I thought of that only much later. At the moment I was pretty pissed.</p>

<p>Now with operator billing I wouldn&#8217;t have all this hassle. I&#8217;d just click on whatever I want to buy, give a one-time confirmation &#8220;Yes, I do want to spend &euro; 2.39 on this&#8221; and be done. When my next operator bill comes around, the &euro; 2.39 will be added to it.</p>

<p>In addition, operators can verify your identity through your SIM card, without you having to do anything. No more hassle with credit card numbers. (In fact, the only parties that have a lot to lose from operator billing are the credit card companies. Expect resistance from them; they&#8217;ll probably say it&#8217;s unsafe or something.)</p>

<p>Thus operator billing is by far the most user-friendly way of making mobile purchases. That&#8217;s what makes it so important. Besides, it also opens up the mobile marketplace to those that do not have a credit card.</p>

<h3>A question of identity</h3>

<p>However, Google&#8217;s rather vague announcement does leave some questions unanswered. No doubt that&#8217;s because Google is still figuring out how to answer those questions. But let&#8217;s review them anyway:</p>

<ul>
	<li>What do I have to do in order to make a purchase? A one-step system is within reach; I hope it will be implemented.</li>
	<li>How will my identity (and thus my bill) be verified?</li>
	<li>How will the various parties communicate?</li>
</ul>

<p>The last question is probably the most important one. If I want to make a purchase through operator billing, there are three parties involved: me, the selling party, and the operator. Somehow, the selling party has to connect to the operator to figure out exactly who I am, and to make a request to put &euro; 2.39 on my bill for my purchase. In addition, the operator has to pay that money (maybe minus a fee) to the selling party.</p>

<p>The <a href="https://developer.vodafone.com/getting-started" class="external">JIL 1.2 API</a> gives us some clues as to how this system is going to work. This API, that will eventually be implemented in Vodafone 360 phones as well as, one hopes, many others, has two properties that are meant specifically for operator billing (p. 16):</p>

<pre>
Widget.Device.AccountInfo.phoneUserUniqueId
Widget.Device.AccountInfo.phoneOperatorName
</pre>

<p>Thus, when purchase times comes around, the store has some grip on your identity. It will have to send off a communication to the specified operator stating that user with unique ID X wants to make a &euro; 2.39 purchase.</p>

<p>The operator will have to make some effort to verify this information; after all I might be able to hack a phone to send false unique IDs. Thus the operator will probably send me an SMS &#8220;Are you sure you want to purchase product X for &euro; 2.39?&#8220; Once I reply to that SMS the purchase is made and downloading can commence.</p>

<p>Still, I hope that the process will become even more user-friendly. The same JIL specification defines a way to send an SMS from a widget. Thus, if I want to purchase something the system could automatically generate an SMS for me and send it off to the operator. Thus the operator will be able to verify my intent by comparing my unique user ID with the SIM card through which the SMS was sent. If they match the purchase is made and downloading can commence.</p>

<p>That&#8217;s one step less, and thus more user-friendly. Hell, if it&#8217;s implemented correctly I don&#8217;t even have to switch to my SMS application. (The operator still has to tell the store &#8220;Purchase made, proceed with download.&#8221; But a proper system will not bother me with the details.)</p>

<p>Unfortunately the JIL 1.2 spec does not yet contain the methods that will be used for actual payments, nor the exact workflow. Besides, it&#8217;s unclear which operators Google is talking to right now. Probably US-based ones, and of those only Verizon is part of the JIL consortium. The others might use other APIs. (Come to think of it, so might Verizon. One never knows.)</p>

<h3>Future expansion</h3>

<p>Let&#8217;s close on a positive note and assume that a system roughly similar to what I describe above will actually be in place in two years or so. Apart from the increased user-friendliness of the purchasing process, what will it bring?</p>

<p>The basic answer is Long Tail. Increased user-friendliness and the scrapping of the requirement to own a credit card may entice more consumers to make a mobile purchase. That would be good.</p>

<p>The real benefit will lie with developers, though. In theory, the system could be set up so that individual developers who offer one or two apps for download on their own site can also use it.</p>

<p>Thus the requirement to offer your wares through one or more app stores might also be scrapped. That could be especially important to cross-platform apps such as W3C Widgets. Whichever phone with whichever operator ends up at the developer&#8217;s site, they can all make a purchase, provided they support widgets.</p>

<p>One more nail in the app stores&#8217; coffin would be the opportunity to make in-app purchases; say some articles from a news site or a few new levels for your game. Operator billing is explicitly meant for such purchases, too. And if we can use operator billing in our apps, too, the app store infrastructure is basically not necessary any more.</p>

<p>Picture the following:</p>

<ol>
	<li>I write a news reader app as a W3C Widget. Anyone can download it for free from my website.</li>
	<li>If you like my app you can share it with your friends. Just send over the widget via Bluetooth. No more complicated user-unfriendly Send-To-Friend systems necessary.</li>
	<li>But how do I make money? By selling access to the actual articles. Every article you want to read costs you, say &euro; 0.02. Alternatively, you can buy a day of unlimited access for, I don&#8217;t know, &euro; 0.99.</li>
	<li>All the billing is done in-app through the operator. My users never have to do anything beyond saying &#8220;Yes, I want to buy this article.&#8221;</li>
</ol>

<p>Where&#8217;s the app store in this process? Nowhere. We don&#8217;t need it any more. Wouldn&#8217;t that be something?</p>

<p class="smaller">(I should note that although sending widgets via Bluetooth is possible nowadays &#8212; I&#8217;ve done it &#8212; the process is not very user-friendly yet. But this functionality is definitely coming; it&#8217;s not a pipe dream.)</p>

<h3>Waiting for Google</h3>

<p>So I&#8217;m impatiently waiting for Google to announce more details. Exactly how will their system work? What does the user have to do? Which operators? Questions, questions.</p>

<p>Anyway, the future of mobile payments has come one step closer.</p>
]]>
</content>
</entry>

</feed>