<?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>Ajaxian &#187; Opera</title>
	<atom:link href="http://ajaxian.com/by/topic/opera/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Opera Dragonfly, Scope, and more tools open sourced</title>
		<link>http://ajaxian.com/archives/opera-tools-opensourced</link>
		<comments>http://ajaxian.com/archives/opera-tools-opensourced#comments</comments>
		<pubDate>Tue, 16 Feb 2010 11:31:29 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=8605</guid>
		<description><![CDATA[Built using the open web standards you know and love, Opera Dragonfly&#8217;s source is available to view. Not only that, but it is released on a open source BSD license, meaning it is free as in freedom as well as in beer. Opera is normally one of the few browsers that isn&#8217;t open source, but <a href="http://ajaxian.com/archives/opera-tools-opensourced">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Built using the open web standards you know and love, Opera Dragonfly&#8217;s source is available to view. Not only that, but it is released on a open source BSD license, meaning it is free as in freedom as well as in beer.
</p></blockquote>
<p>Opera is normally one of the few browsers that isn&#8217;t open source, but they are certainly doing more with open source itself. David Storey has <a href="http://my.opera.com/dragonfly/blog/opera-dragonfly-open-for-business">announced how Opera Dragonfly has joined the open source ranks</a>.</p>
<p>There is Dragonfly itself, but also the Scope protocol:</p>
<blockquote><p>
Starting today, Opera Dragonfly is a fully open source project, hosted on BitBucket. Since the previous version of Opera Dragonfly, a lot of work has gone on behind the scenes replacing the existing architecture with a modern version of the Scope Protocol – STP-1. Opera Dragonfly has been rewritten to use this faster and more efficient version of Scope. Now that we believe that the underlying protocol is stable and performant, and a public desktop build has been released with this included, it is time to put Opera Dragonfly on a public Mercurial repository.</p>
<p>If you have a Mercurial client you can visit the <a href="http://bitbucket.org/scope/dragonfly-stp-1">Opera Dragonfly STP-1</a> repository and check out the source code. We have provided initial documentation in the <a href="http://bitbucket.org/scope/dragonfly-stp-1/wiki/Home">Wiki</a> to get you started. This is Opera’s first full open source project, so there will be a learning curve. We ask you to bear with us while we get everything up and running and policies in place. Coming from a closed source background there are some hurdles to overcome, such as the current bug tracking system being on a closed server. We hope to migrate to an open bug tracking system as the project gets on its feet.</p>
<p>As well as the current and previous versions of the Opera Dragonfly source code, we have released a couple of tools to help with Opera Dragonfly development. The first is <a href="http://bitbucket.org/scope/dragonkeeper/">Dragonkeeper</a>. This is a standalone proxy, which translates STP (Scope Transport Protocol) to HTTP. This can also be useful for remote debugging. The second tool is <a href="http://bitbucket.org/scope/hob/">Hob</a>. Hob is a utility to create code from Protocol Buffer descriptions. Protocol Buffers are one of the formats Scope STP-1 supports along with JSON and XML.
</p></blockquote>
<p>Nice. The question is&#8230;. will others implement on STP so we can get cross browser support.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-tools-opensourced/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Opera Unite: P2P in the browser with a services model</title>
		<link>http://ajaxian.com/archives/opera-unite-p2p-in-the-browser-with-a-services-model</link>
		<comments>http://ajaxian.com/archives/opera-unite-p2p-in-the-browser-with-a-services-model#comments</comments>
		<pubDate>Tue, 16 Jun 2009 15:40:33 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6959</guid>
		<description><![CDATA[Opera has been leading us on to a bit product launch, and it came today in the form of Opera Unite a product which extends the Opera browser to contain a Web server inside allowing you to talk P2P between browsers (via a proxy at operaunite.com). On the one hand, skeptics have argued that this <a href="http://ajaxian.com/archives/opera-unite-p2p-in-the-browser-with-a-services-model">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ajaxian.com/wp-content/uploads/operaunite.png" alt="" title="operaunite" width="500" height="448" class="alignnone size-full wp-image-6960" /></p>
<p>Opera has been leading us on to a bit product launch, and it came today in the form of <a href="http://dev.opera.com/articles/view/an-introduction-to-opera-unite/">Opera Unite</a> a product which extends the Opera browser to contain a Web server inside allowing you to talk P2P between browsers (via a proxy at operaunite.com).</p>
<p>On the one hand, skeptics have argued that this has been done before. We have things like the <a href="https://addons.mozilla.org/en-US/firefox/addon/3002">Plain Old Web server</a> and P2P extensions. However, it is nice to see it packaged cleanly, and we have the advantage of more standard APIs (HTML5 APIs, Widget APIs, etc). At Mozilla (disclaimer: remember I work there ;), we also have something that overlaps with this work in <a href="https://labs.mozilla.com/projects/weave/">Weave</a>.</p>
<p>If you check out the <a href="http://dev.opera.com/articles/view/opera-unite-developer-primer/">developer primer</a> you will quickly learn that to create a service you simply whip up some JavaScript, XML, and call it good. It is definitely interesting that the &#8220;web server&#8221; is a server side JavaScript implementation too!</p>
<p>John Resig noticed that from looking at the examples you miss a decent storage API:</p>
<blockquote><p>
Reading the <a href="http://bit.ly/W55sJ">Opera Unite primer</a>. Opera really needs <a href="http://bit.ly/5pRUX">client-side SQL</a>
</p></blockquote>
<p>I believe that there is room for the browser to do more, and to truly be your &#8220;User Agent&#8221;, thus I agree with some of the core tenants of what Opera is trying to do here. That being said, I worry that for all the talk of freedom, are we locked into Opera? :)  It would be great to get this out to the community and work on getting multiple implementations and clear licensing of the protocols behind this.</p>
<p>What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-unite-p2p-in-the-browser-with-a-services-model/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Happy Birthday, Opera</title>
		<link>http://ajaxian.com/archives/happy-birthday-opera</link>
		<comments>http://ajaxian.com/archives/happy-birthday-opera#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:58:48 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6728</guid>
		<description><![CDATA[You may have already seen Opera&#8216;s celebratory home page marking their fifteenth anniversary: But did you also notice the comic depicting their founders&#8217; story? Happy Birthday, Opera.]]></description>
			<content:encoded><![CDATA[<p>You may have already seen <a href="http://www.opera.com/">Opera</a>&#8216;s celebratory home page marking their fifteenth anniversary:</p>
<p><a href="http://www.opera.com/"><img src="http://ajaxian.com/wp-content/uploads/opera.png" alt="" title="Fifteen Years of Opera" width="470" height="493" class="alignnone size-full wp-image-6729" /></a></p>
<p>But did you also notice the comic depicting their founders&#8217; story?</p>
<p><a href="http://www.opera.com/portal/15/"><img src="http://ajaxian.com/wp-content/uploads/operacomic.png" alt="" title="Opera Comic" width="470" height="287" class="alignnone size-full wp-image-6730" /></a></p>
<p>Happy Birthday, Opera.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/happy-birthday-opera/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How Can We Have More Ajax Experience Videos?</title>
		<link>http://ajaxian.com/archives/how-can-we-have-more-ajax-experience-videos</link>
		<comments>http://ajaxian.com/archives/how-can-we-have-more-ajax-experience-videos#comments</comments>
		<pubDate>Fri, 27 Mar 2009 11:00:32 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[The Ajax Experience]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=6439</guid>
		<description><![CDATA[Fresh from our hidden cache, we bring you: Ajax 2.0 with Anne van Kesteren Ajax Testing Tool Review with Ted Husted Analyzing the Ajax Application Performance with Gaurav Seth Building Your First Adobe AIR Application with Kevin Hoyt]]></description>
			<content:encoded><![CDATA[<p>Fresh from our hidden cache, we bring you:</p>
<p><b>Ajax 2.0 with Anne van Kesteren</b></p>
<p><object id="1832267350" class="BrightcoveExperience"><param name="bgcolor" value="#FFFFFF"></param><param name="width" value="470"></param><param name="height" value="392"></param><param name="playerID" value="1842749445"></param><param name="publisherID" value="1596741613"></param><param name="isVid" value="true"></param><param name="videoID" value="1832267350"></param></object></p>
<p><b>Ajax Testing Tool Review with Ted Husted</b></p>
<p><object id="1832200498" class="BrightcoveExperience"><param name="bgcolor" value="#FFFFFF"></param><param name="width" value="470"></param><param name="height" value="392"></param><param name="playerID" value="1842749445"></param><param name="publisherID" value="1596741613"></param><param name="isVid" value="true"></param><param name="videoID" value="1832200498"></param></object></p>
<p><b>Analyzing the Ajax Application Performance with Gaurav Seth</b></p>
<p><object id="1828032430" class="BrightcoveExperience"><param name="bgcolor" value="#FFFFFF"></param><param name="width" value="470"></param><param name="height" value="392"></param><param name="playerID" value="1842749445"></param><param name="publisherID" value="1596741613"></param><param name="isVid" value="true"></param><param name="videoID" value="1828032430"></param></object></p>
<p><b>Building Your First Adobe AIR Application with Kevin Hoyt</b></p>
<p><object id="1830067649" class="BrightcoveExperience"><param name="bgcolor" value="#FFFFFF"></param><param name="width" value="470"></param><param name="height" value="392"></param><param name="playerID" value="1842749445"></param><param name="publisherID" value="1596741613"></param><param name="isVid" value="true"></param><param name="videoID" value="1830067649"></param></object></p>
<p><script language="JavaScript" type="text/javascript" src="http://admin.brightcove.com/js/BrightcoveExperiences.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/how-can-we-have-more-ajax-experience-videos/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Opera comes out with new JavaScript engine in Carakan, new hardware API in Vega</title>
		<link>http://ajaxian.com/archives/opera-carakan-vega</link>
		<comments>http://ajaxian.com/archives/opera-carakan-vega#comments</comments>
		<pubDate>Thu, 05 Feb 2009 05:01:01 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5882</guid>
		<description><![CDATA[Opera isn&#8217;t sitting on their heels as the other browser vendors get snappy (even if other claim so!) Today they announced Carakan a new register based JavaScript VM that is currently 2.5 times faster than their existing one (based on SunSpider). It does native code generation including at specializing for Regex (interestingly since irregex for <a href="http://ajaxian.com/archives/opera-carakan-vega">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Opera isn&#8217;t sitting on their heels as the other browser vendors get snappy (even if other claim so!)</p>
<p>Today they announced <a href="http://my.opera.com/core/blog/2009/02/04/carakan">Carakan</a> a new register based JavaScript VM that is currently 2.5 times faster than their existing one (based on SunSpider). It does native code generation including at specializing for Regex (interestingly since irregex for Chrome was just announced too). Here is their words:</p>
<blockquote><p>
We have focused our efforts to improve upon our previous engine in three main areas:</p>
<p><b>Register-based bytecode</b></p>
<p>The last couple of generations of Opera&#8217;s ECMAScript engine have used a stack-based bytecode instruction set. This type of instruction set is based around a stack of values, where most instructions &#8220;pop&#8221; input operands from the value stack, process them, and &#8220;push&#8221; the result back onto the value stack. Some instructions simply push values onto the value stack, and others rearrange the values on the stack. This gives compact bytecode programs and is easy to generate bytecode for.</p>
<p>In the new engine, we&#8217;ve instead opted for a register-based bytecode instruction set. In a register-based machine, instead of a dynamically sized stack of values, there&#8217;s a fixed size block of them, called &#8220;registers&#8221;. Instead of only looking at the values at the top of the stack, each instruction can access any register. Since there is no need to copy values to and from the top of the stack to work on them, fewer instructions need to be executed, and less data needs to be copied.</p>
<p><b>Native code generation</b></p>
<p>Although our new engine&#8217;s bytecode instruction set permits the implementation of a significantly faster bytecode execution engine, there is still significant overhead involved in executing simple ECMAScript code, such as loops performing integer arithmetics, in a bytecode interpreter. To get rid of this overhead we are implementing compilation of whole or parts of ECMAScript programs and functions into native code.</p>
<p>This native code compilation is based on static type analysis (with an internal type system that is richer than ECMAScript&#8217;s ordinary one) to eliminte unnecessary type-checks, speculative specialization (with regards to statically indeterminate types) where appropriate, and a relatively ambitious register allocator that allows generation of compact native code with as few unnecessary inter-register moves and memory accesses as possible.</p>
<p><b>Automatic object classification</b></p>
<p>Another area of major improvement over our current engine is in the representation of ECMAScript objects. In the new engine, each object is assigned a class that collects various information about the object, such as its prototype and the order and names of some or all of its properties. Class assignment is naturally very dynamic, since ECMAScript is a very dynamic language, but it is organized such that objects with the same prototype and the same set of properties are assigned the same class.
</p></blockquote>
<p>Nice to see, and interesting that the browsers aren&#8217;t (or aren&#8217;t able too?) share their VM work. Each browser has a new VM implementation going. Wouldn&#8217;t it be nice if they could share effort?</p>
<p>Then we have <a href="http://my.opera.com/core/blog/2009/02/04/vega">Vega</a> a vector graphics library that Opera uses to power SVG, Canvas, and more.</p>
<blockquote>
<p>Vega was created shortly after we started working on SVG support.<br />
When we added SVG support in Opera we needed a vector graphics<br />
library. We looked into what what available to use and met our<br />
requirements (fast, low memory usage and works on platforms<br />
ranging from phones to TVs and desktop computers). We did not<br />
find and good match for our needs, so we decided to write our<br />
own.</p>
<p>Shortly after we created Vega we added &lt;canvas&gt; support, which<br />
also uses Vega.</p>
<p>The most recent addition to Vega is the ability to use a<br />
hardware accelerated back-end. The back-ends we are using at the<br />
moment are OpenGL and Direct3D.</p>
</blockquote>
<p>A busy day for Opera!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-carakan-vega/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Browser version 10 the new Y2K</title>
		<link>http://ajaxian.com/archives/browser-version-10-the-new-y2k</link>
		<comments>http://ajaxian.com/archives/browser-version-10-the-new-y2k#comments</comments>
		<pubDate>Fri, 19 Dec 2008 08:30:23 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5456</guid>
		<description><![CDATA[Here is a fun one for Friday, Hallvord Steen discusses the error reports coming in for Opera 10 that are to do with the version number. That&#8217;s right, it appears that a number of people use the first character as the version number, which means that Opera 10 is showing up as Opera 1: So <a href="http://ajaxian.com/archives/browser-version-10-the-new-y2k">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://files.myopera.com/hallvors/blog/BoA.png" /></p>
<p>Here is a fun one for Friday, Hallvord Steen <a href="http://my.opera.com/hallvors/blog/2008/12/19/10-is-the-one">discusses the error reports coming in for Opera 10 that are to do with the version number</a>.</p>
<p>That&#8217;s right, it appears that a number of people use the first character as the version number, which means that Opera 10 is showing up as Opera 1:</p>
<blockquote><p>
So we&#8217;re busy preparing the major upgrade from 9.5x and 9.6x &#8211; and what&#8217;s more obvious than calling it Opera 10? What&#8217;s in a name, or a version number?</p>
<p>Apparently a lot of trouble.</p>
<p>As Andrew Gregory already noticed, we&#8217;re the first browser ever to release with a two-digit version number. If websites assume that version numbers always have a one-letter &#8220;major&#8221; part and look for a single digit, they are going to &#8220;detect&#8221; Opera 1!</p>
<p>Since we released the first preview of Opera 10, we&#8217;re seeing the bug reports come in. Web sites go belly up because of their bad sniffing.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/browser-version-10-the-new-y2k/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>MAMA, who is using Web standards?</title>
		<link>http://ajaxian.com/archives/mama-web-standards</link>
		<comments>http://ajaxian.com/archives/mama-web-standards#comments</comments>
		<pubDate>Fri, 17 Oct 2008 12:17:16 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4798</guid>
		<description><![CDATA[Ars discussed the new Opera initiative MAMA, the study that only 4.13% of the web is standards-compliant whatever that means :) It is cool to see Opera doing this kind of work, with &#8220;Metadata Analysis and Mining Application (MAMA), a tool that crawls the web and indexes the markup and scripting data from approximately 3.5 <a href="http://ajaxian.com/archives/mama-web-standards">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Ars discussed the new Opera initiative <a href="http://arstechnica.com/news.ars/post/20081015-opera-study-only-4-13-of-the-web-is-standards-compliant.html">MAMA, the study that only 4.13% of the web is standards-compliant</a> whatever that means :)</p>
<p>It is cool to see Opera doing this kind of work, with &#8220;Metadata Analysis and Mining Application (MAMA), a tool that crawls the web and indexes the markup and scripting data from approximately 3.5 million pages.&#8221; </p>
<p>Ian Hickson did some great work <a href="http://code.google.com/webstats/">using the Google index</a> to look at how developers use HTML, which lead to a lot of the HTML 5 features.</p>
<p>There were a couple of reports:</p>
<blockquote><p>
<a href="http://dev.opera.com/articles/view/mama-the-url-set/">The URL set</a></p>
<p>MAMA&#8217;s analysis total is a mere fraction of even a single percent of such a daunting total. It seems odd to say that 3.5 million of anything is insignificant. So let us assume for a moment that it is not. We are just not able to look at every Web page, so we must choose a smaller group of URLs to look at and justify that this is representative of the whole Web. One option is to choose a set of URLs selected at random. I had some conversations with Rene Saarsoo (author of an excellent previous study on coding practices), and he brought up many excellent points about the structure of the Web and choices in URL sets—some of which I have tried to paraphrase here.</p>
<p><a href="http://dev.opera.com/articles/view/mama-markup-validation-report/">Markup Validation Report</a></p>
<p>Web standards are good for the Web! Most of the readers of this site will understand why this statement holds true—ease of maintenance, cross platform compatibility, access by people with disabilities, the list goes on!</p>
<p>But how does the reality of the Web hold up to these ideals? Surely with so many good reasons to code using open Web standards, the majority of sites should validate? Not so—Opera&#8217;s MAMA project has gathered a lot of quite shocking statistics showing that very few of the sites surveyed actually exhibit markup that validates.</p>
<p><a href="http://dev.opera.com/articles/view/mama-key-findings/">Key Findings Report</a></p>
<p>Analysis showing:</p>
<ul>
<li>Web servers used: Apache: 67.72%, IIS: 25.91%</li>
<li>Document structure and size</li>
<li>Flash detection</li>
<li>CSS styles used</li>
<li>Scripting</li>
<li>XMLHttpRequest object detection</li>
</ul>
</blockquote>
<p>Of course, it is easy to point to some potential flaws. Looking for &#8220;XMLHttpRequest&#8221; on a page doesn&#8217;t account for today&#8217;s reality on how XHR is used for example.</p>
<p>Doron Rosenberg pointed to <a href="http://weblogs.mozillazine.org/doron/archives/2008/10/opera_only_413_of_the_web_is_s.html">some of these issues</a>:</p>
<blockquote><p>
While it is no surprise that very few websites are completely standards compliant, their methodology seems flawed. Websites are doing more and more dynamic JavaScript stuff after page load which could affect such stats. Also, major JS libs are linked in via CDNs, so it is unclear how useful their XMLHttpRequest usage stat is.</p>
<p>But I can totally verify that chinese websites love flash. I still have nightmares from the AOL China gecko testing days. Flashing, scrolling, floating ads are scary.
</p></blockquote>
<p>That being said, it is great to see some data out there, and to give us a place to communicate. I would love to see more of this from Google, Microsoft, Yahoo!, and any provider that has a nice index of the Web.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/mama-web-standards/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Opera gets proactive and helps you fix your code</title>
		<link>http://ajaxian.com/archives/opera-gets-proactive-and-helps-you-fix-your-code</link>
		<comments>http://ajaxian.com/archives/opera-gets-proactive-and-helps-you-fix-your-code#comments</comments>
		<pubDate>Thu, 26 Jun 2008 12:34:54 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3795</guid>
		<description><![CDATA[Opera is being very pro-active and have been hiring folk to give compliance feedback for sites that aren't working well on Opera. Nik Cubrilovic covered this on the new TechCrunch IT blog: Opera Software is building a team of â€œweb evangelistsâ€ whose job it is to find sites that do not display correctly in Opera <a href="http://ajaxian.com/archives/opera-gets-proactive-and-helps-you-fix-your-code">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Opera is being very pro-active and have been hiring folk to <a href="http://www.techcrunchit.com/2008/06/25/opera-sends-website-owners-auto-compliance-feedback/">give compliance feedback for sites that aren't working well on Opera</a>.</p>
<p>Nik Cubrilovic covered this on the new TechCrunch IT blog:</p>
<blockquote><p>
Opera Software is building a team of â€œweb evangelistsâ€ whose job it is to find sites that do not display correctly in Opera and are not standards-compliant, and then email the site owners. They are sending emails with specific tips on how to fix HTML, CSS or other issues that donâ€™t make sites compliant. Opera has always been a strong advocate for web standards, and this initiative is good for not only Opera but standards support on the web in general.</p>
<p>On the Opera jobs website, there are job listings for multiple web evangelist positions. They are hiring in Norway, China, South Korea, the Czech Republic and the USA - so it is a multi-lingual global effort.
</p></blockquote>
<p>How would you take the advice? An email like this:</p>
<blockquote><p>
Hello from Opera Software,</p>
<p>We have recently come to know that [retracted] is not displaying<br />
properly in Opera. It stems from an Opera bug which we plan have resolved and should be out with the next release. However, till that time, it would be nice if you could tweak the site on your end to make it work with Opera.</p>
<p>Just add â€œoverflow-y:visible;â€ to the â€œBodyâ€ of the web page in the CSS file. Or you can just put</p>
<div class="igBar"><a href="javascript:showCodeTxt('css-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">CSS:</span>
<div id="css-2">
<div class="css">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">body <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;overflow-y:<span style="color: #993333;">visible</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>In the &lt;style&gt; section of the pages, and it should make the pages display with Opera perfectly. If you have any more questions, please feel free to contact us.
</p></blockquote>
<p>If it was for general standards as well as Opera specific comments, then I would be quite happy :)</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-gets-proactive-and-helps-you-fix-your-code/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WiiExtJS: Building Ajax apps that run on the Wii Opera browser</title>
		<link>http://ajaxian.com/archives/wiiextjs-building-ajax-apps-that-run-on-the-wii-opera-browser</link>
		<comments>http://ajaxian.com/archives/wiiextjs-building-ajax-apps-that-run-on-the-wii-opera-browser#comments</comments>
		<pubDate>Thu, 05 Jun 2008 15:12:21 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/wiiextjs-building-ajax-apps-that-run-on-the-wii-opera-browser</guid>
		<description><![CDATA[Shea Frederick has posted on building Wii-friendly web pages using the ExtJS library. Shea focuses on the various issues that come up when building something for the Wii resolution, screen size, input types, and more. For example, check out the layout: PLAIN TEXT JAVASCRIPT: &#160; Ext.ns&#40;'Ext.ux.layout'&#41;; Ext.ux.layout.wii = Ext.extend&#40;Ext.layout.FitLayout, &#123; &#160; &#160; setItemSize : function&#40;item, <a href="http://ajaxian.com/archives/wiiextjs-building-ajax-apps-that-run-on-the-wii-opera-browser">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://extjs.com/blog/wp-content/uploads/2008/06/wii-extjs.thumbnail.gif" border="0" style="float: right;" /></p>
<p>Shea Frederick has <a href="http://extjs.com/blog/2008/06/04/wiiextjs-fun-times-with-nintendos-embeded-opera-browser/">posted on</a> building Wii-friendly web pages using the ExtJS library.</p>
<p>Shea focuses on the various issues that come up when building something for the Wii resolution, screen size, input types, and more.</p>
<p>For example, check out the layout:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-5');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-5">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Ext.<span style="color: #006600;">ns</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'Ext.ux.layout'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Ext.<span style="color: #006600;">ux</span>.<span style="color: #006600;">layout</span>.<span style="color: #006600;">wii</span> = Ext.<span style="color: #006600;">extend</span><span style="color:#006600; font-weight:bold;">&#40;</span>Ext.<span style="color: #006600;">layout</span>.<span style="color: #006600;">FitLayout</span>, <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; setItemSize : <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">item</span>, size<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> viewSize = Ext.<span style="color: #006600;">getBody</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">getViewSize</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">container</span>.<span style="color: #006600;">addClass</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'ux-layout-wii'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">item</span>.<span style="color: #006600;">addClass</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'ux-layout-wii-item'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; size.<span style="color: #006600;">height</span> = <span style="color:#006600; font-weight:bold;">&#40;</span>viewSize.<span style="color: #006600;">height</span>-<span style="color:#800000;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; size.<span style="color: #006600;">width</span> = <span style="color:#006600; font-weight:bold;">&#40;</span>viewSize.<span style="color: #006600;">width</span>-<span style="color:#800000;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">item</span>.<span style="color: #006600;">setSize</span><span style="color:#006600; font-weight:bold;">&#40;</span>size<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">Ext.<span style="color: #006600;">Container</span>.<span style="color: #006600;">LAYOUTS</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">'wii'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = Ext.<span style="color: #006600;">ux</span>.<span style="color: #006600;">layout</span>.<span style="color: #006600;">wii</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And then you can detect the Wii to set this layout:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-6');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Ext.<span style="color: #006600;">isWii</span> = navigator.<span style="color: #006600;">userAgent</span>.<span style="color: #006600;">toLowerCase</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">indexOf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"wii"</span><span style="color:#006600; font-weight:bold;">&#41;</span>&gt; -<span style="color:#800000;">1</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> layout = <span style="color: #3366CC;">'fit'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> title = <span style="color: #3366CC;">'Normal'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>Ext.<span style="color: #006600;">isWii</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; layout = <span style="color: #3366CC;">'wii'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; title = <span style="color: #3366CC;">'Wii'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/wiiextjs-building-ajax-apps-that-run-on-the-wii-opera-browser/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Opera Dragonfly: New Web Tooling</title>
		<link>http://ajaxian.com/archives/opera-dragonfly-new-web-tooling</link>
		<comments>http://ajaxian.com/archives/opera-dragonfly-new-web-tooling#comments</comments>
		<pubDate>Tue, 06 May 2008 19:38:47 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/opera-dragonfly-new-web-tooling</guid>
		<description><![CDATA[Opera has posted what looks like a great new Web debugging tool Opera Dragonfly which is released in alpha. Debug JavaScript, inspect CSS and the DOM, and view any errors â€“ Opera Dragonfly makes developing using Opera easier than ever, both on your computer and mobile phone. Shawn Lauriat has a nice write-up that tells <a href="http://ajaxian.com/archives/opera-dragonfly-new-web-tooling">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.opera.com/products/dragonfly/"><img src="http://ajaxian.com/wp-content/images/operadragonfly.png" alt="Opera Dragonfly" border="0" width="512" height="318"/></a></p>
<p>Opera has posted what looks like a great new Web debugging tool <a href="http://www.opera.com/products/dragonfly/">Opera Dragonfly</a> which is released in alpha.</p>
<blockquote><p>
Debug JavaScript, inspect CSS and the DOM, and view any errors â€“ Opera Dragonfly makes developing using Opera easier than ever, both on your computer and mobile phone.
</p></blockquote>
<p>Shawn Lauriat has a nice <a href="http://www.frozen-o.com/blog/2008/05/opera-dragonfly-alpha-released.html">write-up</a> that tells the story:</p>
<blockquote><p>
It offers most of the familiar tools for DOM inspection (along with a nice DOM editing capability), error logging (with the same granularity as before wrapped in a more polished UI), a JavaScript debugger that rivals WebKit's Drosera, a JavaScript thread logger, and a lot more that I haven't explored yet.</p>
<p>Time will tell whether Dragonfly can get enough developers to use Opera and keep them there, and how much the developers behind the new developer tools listen to the community in the coming iterations, but so far this looks extremely promising.
</p></blockquote>
<p><b>Features</b></p>
<ul>
<li><b>Reach breaking point step by step</b>: Opera Dragonfly's fully featured JavaScript debugger makes building sophisticated Ajax applications easier than ever. Step through your code line by line, setting break points along the way. This allows you to make sure your application and scripts are acting as you designed them.</li>
<li><b>Redefine your style</b>: Its not just the DOM you can inspect. Check out what CSS rules apply to which element, and what rules are inherited or set by browser defaults. Overridden rules are highlighted so you can see what styles are or aren't applied. Support for editing CSS rules will be added in an upcoming version.</li>
<li><b>Spot your errors</b>: An improved error console allows you to see, filter and log any errors in your scripts, pointing to the exact position the error occurred. Use this in combination with the other tools to hunt down and fix your siteâ€™s bugs.</li>
<li><b>Debug the DOM</b>: View source isnâ€™t much use if you use DOM Scripting to alter the DOM. Opera Dragonfly allows you to inspect the updated DOM and all it's properties. Support for editing the DOM will be added in an upcoming version.</li>
</ul>
<p>The features that are not there yet, but are upcoming, include support for editing of CSS, JavaScript and the DOM, a single window mode, improved JavaScript thread handling, XHR and HTTP monitoring, improved keyboard navigation, and translation into a number of languages.</p>
<p>Have you checked it out? How do you like it?</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-dragonfly-new-web-tooling/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Browser Update: Firefox 3b5 and  Opera Mini 4.1 beta</title>
		<link>http://ajaxian.com/archives/browser-update-firefox-3b5-and-opera-mini-41-beta</link>
		<comments>http://ajaxian.com/archives/browser-update-firefox-3b5-and-opera-mini-41-beta#comments</comments>
		<pubDate>Thu, 03 Apr 2008 06:57:40 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3510</guid>
		<description><![CDATA[We have a couple of browser updates. First, we have Firefox 3 beta 5 which has improved integration with the host system, a better places organizer, and a bump: Speed improvements to our JavaScript engine as well as profile guided optimizations have resulted in continued improvements in performance. Compared to Firefox 2, web applications like <a href="http://ajaxian.com/archives/browser-update-firefox-3b5-and-opera-mini-41-beta">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>We have a couple of browser updates. First, we have <a href="http://www.mozilla.com/en-US/firefox/3.0b5/releasenotes/">Firefox 3 beta 5</a> which has improved integration with the host system, a better places organizer, and a bump:</p>
<blockquote><p>
Speed improvements to our JavaScript engine as well as profile guided optimizations have resulted in continued improvements in performance. Compared to Firefox 2, web applications like Google Mail and Zoho Office run twice as fast in Firefox 3 Beta 5, and the popular SunSpider test from Apple shows improvements over previous releases.
</p></blockquote>
<p>Opera also released a new browser with their <a href="http://www.operamini.com/beta/">Opera Mini 4.1 beta</a>. The improvements talk about "faster" a lot: performance, finding things faster, and URL completion magic. This latest mobile browser also supports JSR-75:</p>
<blockquote><p>
JSR-75 is a specification for Java applications such as Opera Mini to access device internal storage and functionality within the phone. Some of Opera Mini features like "Save Pages" and "Download/Upload Files" vary on how much JSR-75 that is supported by the phone.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/browser-update-firefox-3b5-and-opera-mini-41-beta/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Acid 3: Opera Passed?</title>
		<link>http://ajaxian.com/archives/acid-3-opera-passed</link>
		<comments>http://ajaxian.com/archives/acid-3-opera-passed#comments</comments>
		<pubDate>Wed, 26 Mar 2008 21:34:02 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/acid-3-opera-passed</guid>
		<description><![CDATA[It appears that Opera has passed Acid 3: Since the test was officially announced recently, our Core developers have been hard at work fixing bugs and adding the missing standards support. Today we reached a 100% pass rate for the first time! There are some remaining issues yet to be fixed, but we hope to <a href="http://ajaxian.com/archives/acid-3-opera-passed">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://files.myopera.com/Junyor/blog/acid3_100.png" /></p>
<p>It appears that <a href="http://my.opera.com/desktopteam/blog/2008/03/26/opera-and-the-acid3-test">Opera has passed Acid 3</a>:</p>
<blockquote><p>
Since the test was <a href="http://www.webstandards.org/press/releases/20080303/">officially announced recently</a>, our Core developers have been hard at work fixing bugs and adding the missing standards support.</p>
<p>Today we reached a 100% pass rate for the first time! There are some remaining issues yet to be fixed, but we hope to have those sorted out shortly.</p>
<p>We will release a technical preview version on <a href="http://labs.opera.com/">labs.opera.com</a> within the next week or so. For now, the screenshot above shows the Acid3 test as rendered in our latest WinGogi Desktop build. WinGogi is the Windows version of our reference builds used for the internal testing of Opera's platform independent Core.
</p></blockquote>
<p>At the same time, <a href="http://ln.hixie.ch/?start=1206565203&#038;count=1">Ian Hickson posted about changes to the test</a> and Anne has commented that Opera is passing the latest and greatest:</p>
<p>"The updates from Ian have been done since the release of the test. Opera gets 100/100 on the latest version of the test."</p>
<blockquote>
<ul>
<li><b>Sub-pixel testing</b>: It turns out that the original test accidentally required that browsers implement sub-pixel positioning and layout (and in fact the reference rendering got it wrong too, and relied on the same kind of rounding as Firefox does), which is somewhat dubious. I've changed the test to not rely on sub-pixel layout. However, it is very likely that this will be tested in Acid4, if we can get the specs to be clearer on this.</li>
<li><b>Surrogate pairs in SVG APIs</b>: One of the submitted tests assumed that SVG APIs worked on Unicode codepoints, but the SVG spec changed to work on UTF-16 codepoints, like the rest of the DOM API, so the test was changed there. (The test changed a couple of times, because I originally got the fix wrong.)</li>
<li><b>The <code>click()</code> method</b>: The test originally assumed that the <code>click()</code> method was reentrant, but the specs were vague on this and someone suggested making it fail if calls to it were nested, so I removed this part of the test (the spec hasn't been updated yet). I replaced it with an attribute test (the new second part of subtest 64).</li>
<li><b>The Performance Test</b>: I made the loop counter in the performance test (a part of subtest 63) less complicated and shorter, to make it at least plausible that browsers could be fixed to pass that test quickly enough that it wouldn't always feel jerky. At the same time, I updated the test's infrastructure to report more details about pass and fail conditions and how long each subtest takes to run.</li>
<li><b>Namespace bug</b>: Someone noticed that <code>http://www.w3.org/1998/XML/namespace</code> should have been <code>http://www.w3.org/XML/1998/namespace</code> in one of the subtests.</li>
<li><b>Linktest timeout</b></li>
<p> I made the linktest more resilient to slow network conditions. However, the test is still going to give you major issues if you are on a network with multi-second latency, or if the <a href="http://acidtests.org">acidtests.org</a> site is being slow.
</ul>
</blockquote>
<p>Congrats to the Opera team!</p>
<p>Oh, and <a href="http://webkit.org/blog/167/webkit-gets-an-a-on-acid3/">Safari is at 95/100</a> and will close in on 100 shortly.</p>
<p><b>UPDATE:</b></p>
<p>Hixie has <a href="http://ln.hixie.ch/?start=1206578003&#038;count=1">another update</a>: </p>
<blockquote><p>
Just as Reddit is celebrating Opera reaching 100/100, with the misleading headline <a href="http://reddit.com/info/6dhlj/comments/"><cite>Opera the first browser to pass the Acid3 test</cite></a> (hey, submitter: it wouldn't hurt to <em>read</em> the <a href="http://my.opera.com/desktopteam/blog/2008/03/26/opera-and-the-acid3-test">Opera blog post</a> before submitting it to Reddit), the Apple guys track me down and point out that there's yet another bug in the test. With heycam's help, we have now fixed <a href="http://acid3.acidtests.org">the test</a>. Again. This presumably means Opera is now at 99/100... the race continues!</p>
<p>I have to say, by the way, that <a href="http://www.w3.org/TR/SVG/fonts.html#KernElements">the relevant parts</a> of the SVG spec are truly worthless. Where are the UA conformance criteria? You'd think a spec that was so verbose and detailed would actually tell you stuff, instead of just rambling on without actually saying what the requirements were...
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/acid-3-opera-passed/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Opera sues Microsoft of standards compliance</title>
		<link>http://ajaxian.com/archives/opera-sues-microsoft-of-standards-compliance</link>
		<comments>http://ajaxian.com/archives/opera-sues-microsoft-of-standards-compliance#comments</comments>
		<pubDate>Fri, 14 Dec 2007 05:01:28 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3114</guid>
		<description><![CDATA[Ah, the courts. The latest case aimed at Microsoft is from Opera, as they urge Microsoft to give consumers a genuine choice of standardsâ€”compliant Web browsers: The complaint describes how Microsoft is abusing its dominant position by tying its browser, Internet Explorer, to the Windows operating system and by hindering interoperability by not following accepted <a href="http://ajaxian.com/archives/opera-sues-microsoft-of-standards-compliance">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Ah, the courts. The latest case aimed at Microsoft is from Opera, as they <a href="http://www.opera.com/pressreleases/en/2007/12/13/">urge Microsoft to give consumers a genuine choice of standardsâ€”compliant Web browsers</a>:</p>
<blockquote><p>
The complaint describes how Microsoft is abusing its dominant position by tying its browser, Internet Explorer, to the Windows operating system and by hindering interoperability by not following accepted Web standards. Opera has requested the Commission to take the necessary actions to compel Microsoft to give consumers a real choice and to support open Web standards in Internet Explorer.</p>
<p>"We are filing this complaint on behalf of all consumers who are tired of having a monopolist make choices for them," said Jon von Tetzchner, CEO of Opera. "In addition to promoting the free choice of individual consumers, we are a champion of open Web standards and cross-platform innovation. We cannot rest until we've brought fair and equitable options to consumers worldwide."</p>
<p>Opera requests the Commission to implement two remedies to Microsoftâ€™s abusive actions. First, it requests the Commission to obligate Microsoft to unbundle Internet Explorer from Windows and/or carry alternative browsers pre-installed on the desktop. Second, it asks the European Commission to require Microsoft to follow fundamental and open Web standards accepted by the Web-authoring communities. The complaint calls on Microsoft to adhere to its own public pronouncements to support these standards, instead of stifling them with its notorious "Embrace, Extend and Extinguish" strategy. Microsoft's unilateral control over standards in some markets creates a de facto standard that is more costly to support, harder to maintain, and technologically inferior and that can even expose users to security risks.
</p></blockquote>
<p>Mary Jo Foley <a href="http://blogs.zdnet.com/microsoft/?p=1042">quickly chimed in on why it is a bad idea</a>:</p>
<blockquote>
<ol>
<li>Should antitrust courts be the ones in charge of determining which versions of <a href="http://blogs.zdnet.com/BTL/?p=7332">Cascading Style Sheets (CSS), XHTML,  Document Object Model (DOM) and other Web standards</a> are the ones to which all browser/Web developers should be writing? Participants in various standards bodies canâ€™t even agree among themselves which version of these standards is the best. How are judges supposed to wade through the browser-standards confusion in a good/fair way?</li>
<li>Would it be positive for customers if Microsoft were suddenly forced to create a version of IE that looked good on paper, in terms of more complete  standards compliance, but which broke third-party and custom Web applications? Microsoft has argued that it is trying to avoid this situation with IE and is <a href="http://blogs.zdnet.com/microsoft/?p=416">working on various ways it can make IE more standards-complaint without breaking existing apps,</a> completely upsetting the partner/customer universe.</li>
<li>With Mozilla, Firefox has proved you donâ€™t need government intervention to wrest a substantial percentage of the browser market from Microsoft. You just <a href="http://blogs.zdnet.com/BTL/?p=6715">friends with deep pockets (like Google)</a> and a community of dedicated developers â€” plus a guaranteed customer base who prefer anything other than Microsoft technologies.
<p>In the end, Microsoftâ€™s own inertia, browser-security problems and inability to react quickly to market changes (<a href="http://blogs.zdnet.com/microsoft/?p=1014">where, oh where, is IE 8?</a>) will continue to help its browser competitors more than a ruling by the EU or other antitrust body would.</p>
<p>What do you think? Is Operaâ€™s attempt to get the European Commission to force the unbundling of IE from Windows too late? And whatâ€™s your take on Operaâ€™s attempt to get the courts involved in enforcing Web-standards compliance?</p>
</li>
</ol>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-sues-microsoft-of-standards-compliance/feed</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>3D Canvas in Opera</title>
		<link>http://ajaxian.com/archives/3d-canvas-in-opera</link>
		<comments>http://ajaxian.com/archives/3d-canvas-in-opera#comments</comments>
		<pubDate>Sat, 17 Nov 2007 10:51:00 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3017</guid>
		<description><![CDATA[Tim Johansson is talking about Opera's support for a 3d Canvas which differs from Mozilla's in that it doesn't map directly to OpenGL, which they did because: It makes it easier to implement on non-OpenGL platforms (such as D3D) We wanted to have some form of collision detection available What can you do? Here is <a href="http://ajaxian.com/archives/3d-canvas-in-opera">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Tim Johansson is talking about <a href="http://my.opera.com/timjoh/blog/2007/11/13/taking-the-canvas-to-another-dimension">Opera's support for a 3d Canvas</a> which differs from Mozilla's in that it doesn't map directly to OpenGL, which they did because:</p>
<ul>
<li>It makes it easier to implement on non-OpenGL platforms (such as D3D)</li>
<li>We wanted to have some form of collision detection available</li>
</ul>
<p>What can you do? Here is the interface that you get to work with:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-9');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-9">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">interface CanvasRenderingContextOpera3D <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// state</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> save<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color: #009900; font-style: italic;">// push state on state stack</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> restore<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color: #009900; font-style: italic;">// pop state stack and restore state</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// scene/frame</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> beginScene<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color: #009900; font-style: italic;">// start rendering a new frame</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> endScene<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color: #009900; font-style: italic;">// finish rendering of the scene and present the result</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// transformations</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> translate<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x, <span style="color: #000066; font-weight: bold;">in</span> float y, <span style="color: #000066; font-weight: bold;">in</span> float z<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> scale<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x, <span style="color: #000066; font-weight: bold;">in</span> float y, <span style="color: #000066; font-weight: bold;">in</span> float z<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> rotateX<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float rotation<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> rotateY<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float rotation<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> rotateZ<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float rotation<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// rendering operation</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> drawTriangle<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x1, <span style="color: #000066; font-weight: bold;">in</span> float y1, <span style="color: #000066; font-weight: bold;">in</span> float z1, <span style="color: #000066; font-weight: bold;">in</span> float tex_s1, <span style="color: #000066; font-weight: bold;">in</span> float tex_t1, </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">in</span> float x2, <span style="color: #000066; font-weight: bold;">in</span> float y2, <span style="color: #000066; font-weight: bold;">in</span> float z2, <span style="color: #000066; font-weight: bold;">in</span> float tex_s2, <span style="color: #000066; font-weight: bold;">in</span> float tex_t2, </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">in</span> float x3, <span style="color: #000066; font-weight: bold;">in</span> float y3, <span style="color: #000066; font-weight: bold;">in</span> float z3, <span style="color: #000066; font-weight: bold;">in</span> float tex_s3, <span style="color: #000066; font-weight: bold;">in</span> float tex_t3<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> draw3DModel<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> Canvas3DModel model<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// create objects</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; CanvasTexture createTexture<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> Image img<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Canvas3DModel create3DModel<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// collision detection</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; string checkIntersection<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x, <span style="color: #000066; font-weight: bold;">in</span> float y, <span style="color: #000066; font-weight: bold;">in</span> float z, <span style="color: #000066; font-weight: bold;">in</span> float radius, <span style="color: #000066; font-weight: bold;">in</span> Canvas3DModel model<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// rendering state</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute CanvasTexture texture; <span style="color: #009900; font-style: italic;">// current texture or null for no texture, default is null</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute string color; <span style="color: #009900; font-style: italic;">// current color, default is transparent black</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute float fov; <span style="color: #009900; font-style: italic;">// field of view of the scene in degrees, default is 45</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute float nearPlane; <span style="color: #009900; font-style: italic;">// distance to the near clipping plane, default is 0.1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute float farPlane; <span style="color: #009900; font-style: italic;">// distance to the far clipping plane, default is 100</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute string ztest; <span style="color: #009900; font-style: italic;">// &quot;none&quot;, &quot;less&quot;, &quot;lessequal&quot;, &quot;greater&quot;, &quot;greaterequal&quot;, &quot;equal&quot;, &quot;notequal&quot;. Default is &quot;lessequal&quot;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; attribute string blend; <span style="color: #009900; font-style: italic;">// &quot;replace&quot;, &quot;add&quot;, &quot;srcalpha&quot;, &quot;multiply&quot;. Default is &quot;replace&quot;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">interface Canvas3DModel <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> addVertex<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x, <span style="color: #000066; font-weight: bold;">in</span> float y, <span style="color: #000066; font-weight: bold;">in</span> float z, <span style="color: #000066; font-weight: bold;">in</span> float s, <span style="color: #000066; font-weight: bold;">in</span> float t<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">void</span> addTriangle<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> integer vertex1, <span style="color: #000066; font-weight: bold;">in</span> integer vertex2, <span style="color: #000066; font-weight: bold;">in</span> integer vertex3<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">interface CanvasTexture<span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And, here is an example of a rotating cube (which <a href="http://people.opera.com/timj/canvas/canvas3d_example1.html">you can see if you are using a new Opera build</a>).</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-10">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;canvas <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"canvas"</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">"200"</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">"200"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Canvas not supported!</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/canvas&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; var canvas;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; var context3d;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; var rotation;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; var texture;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; var cube;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; function render(){</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.beginScene();</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.translate(0,0,-5);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.rotateY(rotation);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.rotateX(rotation);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; rotation += 2;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.color = &quot;white&quot;;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.draw3DModel(cube);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.endScene();</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; function onTick(){</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; render();</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; function onload(){</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; canvas = document.getElementById(&quot;canvas&quot;);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d = canvas.getContext(&quot;opera-3d&quot;);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; if (!context3d)</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; alert(&quot;3d canvas not supported&quot;);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; return;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logo = new Image();</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logo.src = &quot;operalogo.png&quot;;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; texture = context3d.createTexture(logo);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; context3d.texture = texture;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube = context3d.create3DModel();</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(-1, 1, 1, 0, 0);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(1, 1, 1, 1, 0);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(-1, -1, 1, 0, 1);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(1, -1, 1, 1, 1);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(-1, 1, -1, 1, 1);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(1, 1, -1, 0, 1);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(-1, -1, -1, 1, 0);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addVertex(1, -1, -1, 0, 0);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(0,1,2);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(2,1,3);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(4,5,6);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(6,5,7);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(0,4,2);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(2,4,6);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(1,5,3);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(3,5,7);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(0,4,1);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(1,4,5);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(2,6,3);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; cube.addTriangle(3,6,7);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; setInterval(onTick, 10);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; document.onload = onload();</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/3d-canvas-in-opera/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Opera Mini 4 Released</title>
		<link>http://ajaxian.com/archives/opera-mini-4-released</link>
		<comments>http://ajaxian.com/archives/opera-mini-4-released#comments</comments>
		<pubDate>Wed, 07 Nov 2007 16:32:28 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/opera-mini-4-released</guid>
		<description><![CDATA[We just talked about how JavaScript and Ajax works in Opera Mini and today Opera released the full version. Features Opera Link We've added support for Opera Link in Opera Mini 4. With Opera Link, you're able to instantly synchronize and share your bookmarks and Speed Dial with the Opera browser for your computer. Overview <a href="http://ajaxian.com/archives/opera-mini-4-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>We just <a href="http://ajaxian.com/archives/how-js-ajax-work-in-opera-mini-4">talked about how JavaScript and Ajax works in Opera Mini</a> and today Opera <a href="http://my.opera.com/operamini/blog/the-power-of-the-web-with-opera-mini-4">released the full version</a>.</p>
<p><b>Features</b></p>
<p><strong>Opera Link</strong></p>
<p>We've added support for <a href="http://www.opera.com/products/link/" target="_blank">Opera Link</a> in Opera Mini 4. With Opera Link, you're able to instantly synchronize and share your bookmarks and Speed Dial with the Opera browser for your computer.</p>
<p><strong>Overview mode</strong></p>
<p>Opera Mini 4 includes a new rendering architecture that allows you to view webpages just like you would on your computer. When you first load a webpage, Opera Mini will show you an overview snapshot of the page; using the new mouse cursor you can instantly zoom in to the selected region of the page.</p>
<p><strong>Size of text fits width of screen</strong></p>
<p>Opera Mini 4 dynamically changes the size of the text on webpages to fit the width of your phone's screen, meaning you won't have to scroll horizontally.</p>
<p><strong>Context menu</strong></p>
<p>A context menu is displayed when pressing the number <strong><span style="font-family: courier new;">1</span></strong> key. From the context menu you could change the viewing modes to 'Mobile view', reload the page, and show webpage information. When the mouse cursor is focused on a link, the Context menu will show you the link information (i.e. where the link points to, etc.).</p>
<p><strong>Mouse cursor</strong></p>
<p>With the mouse cursor you could scroll to any direction on the page and more easily click on links.</p>
<p><strong>Scrolling shortcuts</strong></p>
<p>Pressing these number key shortcuts will help you quickly navigate around the page.</p>
<ul>
<li><strong><span style="font-family: courier new;">2</span></strong> - Page up</li>
<li><strong><span style="font-family: courier new;">8</span></strong> - Page down</li>
<li><strong><span style="font-family: courier new;">4</span></strong> - Go to the left one column</li>
<li><strong><span style="font-family: courier new;">6</span></strong> - Go to the right one column</li>
<li><strong><span style="font-family: courier new;">5</span></strong> - Zoom in and out</li>
</ul>
<p><strong>Create search</strong></p>
<p>With this new feature, you could add any search engine of your choice to the Opera Mini start page. To add a new search engine, click on the search field, press the menu button and click on the 'Create search' option.</p>
<p><strong>View pages in Landscape mode</strong></p>
<p>By pressing the <strong><span style="font-family: courier new;">*</span></strong> and <strong><span style="font-family: courier new;">#</span></strong> shortcut keys, you could switch the page view to landscape mode.</p>
<p><strong>New standards support</strong></p>
<p>Support for HTML tables, CSS handheld stylesheets, and more advanced support for CSS have been added to Opera Mini.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-mini-4-released/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How JS &amp; Ajax work in Opera Mini 4</title>
		<link>http://ajaxian.com/archives/how-js-ajax-work-in-opera-mini-4</link>
		<comments>http://ajaxian.com/archives/how-js-ajax-work-in-opera-mini-4#comments</comments>
		<pubDate>Thu, 01 Nov 2007 11:30:08 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2958</guid>
		<description><![CDATA[Chris Mills, Opera's Developer Relationship Manager, goes into great detail about Opera Mini 4's support for JavaScript and Ajax. Opera Mini is a very clever way of bringing the web to your mobile phone - it will work on most phone models, even low spec ones, as long as they will run a JVM. Basically, <a href="http://ajaxian.com/archives/how-js-ajax-work-in-opera-mini-4">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Chris Mills, Opera's Developer Relationship Manager, goes into great detail about <a href="http://dev.opera.com/articles/view/javascript-support-in-opera-mini-4/">Opera Mini 4's support for JavaScript and Ajax</a>. </p>
<blockquote><p>Opera Mini is a very clever way of bringing the web to your mobile phone - it will work on most phone models, even low spec ones, as long as they will run a JVM. Basically, when you request a web page from Opera Mini, a request is sent to the Opera Mini servers. They retrieve the page, convert it into OBML (Opera Binary Markup Language,) a very compact binary markup format that reduces the page size by up to 90%, and then serve it to your phone....But what about JavaScript?</p></blockquote>
<p>The areas covered in his article include:</p>
<ul>
<li>How Opera Mini interprets JavaScript</li>
<li>Server-side support</li>
<li>Client-side support</li>
<li>Ajax support</li>
</ul>
<p>One key point that jumped out at me is that the Opera Mini servers have full support for ECMAScript 4 on the server-side but is hindered on the client side by the limitations imposed on individual handsets.</p>
<blockquote><p>After the page has been transferred to the client, things are a lot more limited - basically all events are processed on the server. The client does absolutely no JavaScript processing at all, and instead the page is kept in the server (basically the client works as an input device for the opera running in the server).</p></blockquote>
<p>My reaction was obviously that this is a major limitation but Chris goes on to give this perspective:</p>
<blockquote><p>This sounds limiting, but there is another point to consider - Opera Mini can execute JavaScript on the server if it's triggered by the JavaScript events listed above in the client, so some complex pages work surprisingly well - for instance Facebook is able to display popup menus and popup dialogs very well on Opera Mini.</p></blockquote>
<p>There are also some considerations when trying to use Ajax, as the Opera Mini architecture handles Ajax requests slightly differently based on the expected functionality. Chris cited the use of automated page refreshes as a possible sticking point.</p>
<p>As with any mobile device or browser, a lot of homework needs to be done when developing for Opera Mini but it looks like Opera is making some good strides towards easing that pain.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/how-js-ajax-work-in-opera-mini-4/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Opera 9.5 Alpha release reviewed. Gets some nice goodies.</title>
		<link>http://ajaxian.com/archives/opera-95-alpha-release-reviewed-gets-some-nice-goodies</link>
		<comments>http://ajaxian.com/archives/opera-95-alpha-release-reviewed-gets-some-nice-goodies#comments</comments>
		<pubDate>Tue, 04 Sep 2007 12:00:43 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2739</guid>
		<description><![CDATA[CyberNet News has got a review of the alpha release of Opera 9.5, which is due out Tuesday, Sept. 4th: It looks like the Opera team really focused on the rendering engine, with some fast results displayed during CyberNet's review. Ryan, CyberNet's reviewier: ...decided to do a rather unofficial speed test to see how fast <a href="http://ajaxian.com/archives/opera-95-alpha-release-reviewed-gets-some-nice-goodies">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://cybernetnews.com/2007/09/03/cybernotes-exclusive-opera-95-features-video/">CyberNet News has got a review</a> of the alpha release of Opera 9.5, which is due out Tuesday, Sept. 4th:</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler"><param name="movie" value="http://www.viddler.com/player/8467d2c7/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/8467d2c7/" width="437" height="370" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler" ></embed></object></p>
<p>It looks like the Opera team really focused on the rendering engine, with some fast results displayed during CyberNet's review. Ryan, CyberNet's reviewier:</p>
<blockquote><p>...decided to do a rather unofficial speed test to see how fast the different browsers rank in terms of loading our site (with an empty cache). I did three tests for each browser and averaged out the time it took for each to completely load our site. Here are the results with the slowest browsers first:</p>
<ul>
<li>Internet Explorer 7: 18 seconds</li>
<li>Firefox 2: 15 seconds</li>
<li>Opera 9.23: 12 seconds</li>
<li>Firefox 3 Nightly: 11 seconds</li>
<li>Opera 9.5 Alpha: 8 seconds</li>
</ul>
</blockquote>
<p>In addition, it looks like accessibility is big on the list of enhancements with enhanced support for Window-Eyes, Jaws, and VoiceOver on OS X as well as updated keyboard shortcuts to make navigation easier. You can get more info at the Opera Desktop Team's <a href="http://my.opera.com/desktopteam/blog/2007/08/31/focus-areas-during-kestrel-development">recent blog entry about the release</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-95-alpha-release-reviewed-gets-some-nice-goodies/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>The Wii Remote API: Now your userbase is four.</title>
		<link>http://ajaxian.com/archives/the-wii-remote-api-now-your-userbase-is-four</link>
		<comments>http://ajaxian.com/archives/the-wii-remote-api-now-your-userbase-is-four#comments</comments>
		<pubDate>Mon, 06 Aug 2007 23:15:24 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/the-wii-remote-api-now-your-userbase-is-four</guid>
		<description><![CDATA[The Opera folk have released an API that allows you, the developer, to be able to monitor all of the remotes that are connected with The Wii Remote API. This means that you can watch up to four people buzzing around the screen: Polling the status of a remote The Wii Remote data is accessed <a href="http://ajaxian.com/archives/the-wii-remote-api-now-your-userbase-is-four">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The Opera folk have released an API that allows you, the developer, to be able to monitor <em>all</em> of the remotes that are connected with <a href="http://dev.opera.com/articles/view/the-wii-remote-api/">The Wii Remote API</a>.</p>
<p>This means that you can watch up to four people buzzing around the screen:</p>
<blockquote><p>
<b>Polling the status of a remote</b></p>
<p>The Wii Remote data is accessed through the opera.wiiremote object. This object offers a single method opera.wiiremote.update(n) which is used to obtain the status of an individual Wii Remote. The method expects a single parameter; the Wii Remote number. The number is zero-based, so it starts at 0 for the first remote, and ends at 3 for the fourth remote. The method returns a KpadStatus object, which has several properties that give information about the remote.</p>
<p>This update method can be called as often as is needed to obtain a fluid response, but note that the Wii is not as powerful as most desktop computers, so it is important to make sure that it is polled only as often as the script that uses that data can process it. For example, if a script uses the Wii Remote status to update the display of a canvas element, and that update will take perhaps 50 ms to update in Opera on a desktop computer, it may take over 100 ms on a Wii. Attempting to use a polling interval of less than 100 ms will cause the response to appear very sluggish.</p>
<p>Note that the opera.wiiremote object only exists in Opera on Wii, so it is important to check for its existence, as well as the existence of the opera object, before attempting to use it.
</p></blockquote>
<p><b>Examples</b></p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-12');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-12">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//Obtaining the roll of the third Wii remote in degrees</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> remote, roll = <span style="color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//check if the browser provides access to the Wii Remote data</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span> window.<span style="color: #006600;">opera</span> &amp;&amp; opera.<span style="color: #006600;">wiiremote</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">//get the KpadStatus object for the third Wii Remote</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; remote = opera.<span style="color: #006600;">wiiremote</span>.<span style="color: #006600;">update</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">//check that the remote is enabled</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span> remote.<span style="color: #006600;">isEnabled</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//get the roll angle in radians</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; roll = Math.<span style="color: #006600;">atan2</span><span style="color:#006600; font-weight:bold;">&#40;</span> remote.<span style="color: #006600;">dpdRollY</span>, remote.<span style="color: #006600;">dpdRollX</span> <span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//convert the roll to degrees</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; roll = roll * <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#800000;">180</span> / Math.<span style="color: #006600;">PI</span> <span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Checking what buttons are pressed on the second remote</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> remote, buttons = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//check if the browser provides access to the Wii Remote data</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span> window.<span style="color: #006600;">opera</span> &amp;&amp; opera.<span style="color: #006600;">wiiremote</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">//get the KpadStatus object for the third Wii Remote</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; remote = opera.<span style="color: #006600;">wiiremote</span>.<span style="color: #006600;">update</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">//check that the remote is enabled</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span> remote.<span style="color: #006600;">isEnabled</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//use the bitwise AND operator to compare against the bitmasks</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedLeft</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">1</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedRight</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">2</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedDown</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">4</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedUp</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">8</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedPlus</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">16</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressed2</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">256</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressed1</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">512</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedB</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">1024</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedA</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">2048</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedMinus</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">4096</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedZ</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">8192</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; buttons.<span style="color: #006600;">pressedC</span> = remote.<span style="color: #006600;">hold</span> &amp; <span style="color:#800000;">16384</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>There are a <a href="http://dev.opera.com/articles/view/the-wii-remote-api/remotedata.html">bunch</a> <a href="http://dev.opera.com/articles/view/the-wii-remote-api/buttonlist.html">of</a> <a href="http://dev.opera.com/articles/view/the-wii-remote-api/browsingbuttons.html">demonstrations</a>, including a <a href="http://dev.opera.com/articles/view/the-wii-remote-api/wiicanvasgame.html">simple game</a>.</p>
<p>I can't wait to see the Star Wars light sabre web game... and then see a Comet based app that grows beyond the four connected devices!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/the-wii-remote-api-now-your-userbase-is-four/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Opera Developer Console</title>
		<link>http://ajaxian.com/archives/opera-developer-console</link>
		<comments>http://ajaxian.com/archives/opera-developer-console#comments</comments>
		<pubDate>Tue, 13 Mar 2007 05:01:30 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2204</guid>
		<description><![CDATA[Shawn Lauriat has posted on the new Opera Developer Console. The tool is written in JavaScript and is an interesting little read. The tool covers: DOM The DOM tool lets the user inspect and alter various various aspects of the document. JS The JavaScript tool lets the user to inspect and search the JavaScript enviroment <a href="http://ajaxian.com/archives/opera-developer-console">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://devfiles.myopera.com/articles/59/headers.png" border="0" style="padding: 10px; float: right;" /></p>
<p>Shawn Lauriat has <a href="http://www.frozen-o.com/blog/2007/03/opera-developer-console.html">posted on</a> the <a href="http://dev.opera.com/articles/view/opera-developer-tools/?page=2">new Opera Developer Console</a>.</p>
<p>The tool is <a href="http://devfiles.myopera.com/articles/59/devConsole.js">written in JavaScript</a> and is an interesting little read.</p>
<p>The tool covers:</p>
<dl>
<dt>DOM</dt>
<dd>The DOM tool lets the user inspect and alter various various aspects of the document.</dd>
<dt>JS</dt>
<dd>The JavaScript tool lets the user to inspect and search the JavaScript enviroment initialized on the web page.</dd>
<dt>CSS</dt>
<dd>The CSS tool lets the user inspect and alter any Cascading Style Sheets attached to the page. Further, the tools allow the altered stylesheets to be exported for later use.</dd>
<dt>HTTP</dt>
<dd>The HTTP tool allows user to inspect the HTTP headers sent from the server, inspect and edit cookies, and allows logging of XMLHttpRequests sent by the document.</dd>
</dl>
<p><a href="http://www.frozen-o.com/blog/2007/03/opera-developer-console.html"><img src="http://www.frozen-o.com/advancedajax/screenshots/opera/opera_xmlhttprequest1_small.jpg" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/opera-developer-console/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Browser Wars: Mozilla, IE, Opera join up for a panel discussion</title>
		<link>http://ajaxian.com/archives/browser-wars-mozilla-ie-opera-join-up-for-a-panel-discussion</link>
		<comments>http://ajaxian.com/archives/browser-wars-mozilla-ie-opera-join-up-for-a-panel-discussion#comments</comments>
		<pubDate>Mon, 05 Mar 2007 15:00:53 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2174</guid>
		<description><![CDATA[Presented by the Silicon Valley WebBuilder, this event brought together Mike Shaver from Mozilla, Chris Wilson from Microsoft's IE team, HÃ¥kon Lie from Opera, and expertly moderator Douglas Crockford from Yahoo! to talk about the current state of the browser landscape. At first, each person got a chance to say their peace. Here are some <a href="http://ajaxian.com/archives/browser-wars-mozilla-ie-opera-join-up-for-a-panel-discussion">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Presented by the Silicon Valley WebBuilder, this event brought together Mike Shaver from Mozilla, Chris Wilson from Microsoft's IE team, HÃ¥kon Lie from Opera, and expertly moderator Douglas Crockford from Yahoo! to talk about the current state of the browser landscape.</p>
<p>At first, each person got a chance to say their peace. Here are some core items that each person said:</p>
<p><b>Chris Wilson</b></p>
<p>We are not about to enter another browser war. This isn't about destroying each other. This time it is about building the standards based web future, which means we need to work together. This isn't 1995, so let's not build that platform. The problem that we have is that as soon as you improve something, you break the web. This is especially hard since Microsoft has ~500 million users.</p>
<p>Chris queried the top 200 web sites and 50% of them are in strict mode. When he did this in IE 6, only one of them was like this. He hinted at having developers opt-in to standards mode in a different way.</p>
<p><b>Mike Shaver</b></p>
<p>Mike also said that he doesn't consider it to be a browser war..... but rather a "mindshare struggle".</p>
<p>The new "war" is having cool applications being built on the web itself. If the next flickr/gmail/... is built on the web, it is winning. </p>
<p>Don't look to the W3C for the future.</p>
<p><b>HÃ¥kon Lie</b></p>
<p>"If you need a good browser for Windows 98 we have it"</p>
<p>Ajax is bad. We need to add HTML, CSS, and the like, and he had some funny acronyms.</p>
<p>He then discussed the ACID 2 test and had a lot of fun with IE 7 showing how it compared to Opera 3.6 from 1998.</p>
<p>The Wii (which uses Opera) is going to change the web. More people are trying to get their sites rendering correctly with the Wii than "who cares about that Opera browser".</p>
<p>We need to support video as a first class citizen (and sound). "We can't leave it to plugins anymore".</p>
<p>What video formats should we support? There aren't many open formats, so they use Ogg formats.</p>
<p><b>Where's Apple?</b></p>
<p>They refused to send someone saying that "we are busy writing software".</p>
<p><embed src='http://us.i1.yimg.com/cosmos.bcst.yahoo.com/player/media/swf/FLVVideoSolo.swf' flashvars='id=2006940&#038;emailUrl=http%3A%2F%2Fvideo.yahoo.com%2Futil%2Fmail%3Fei%3DUTF-8%26vid%3Dcccd4aa02a3993ab06e56af731346f78.2006940&#038;imUrl=http%253A%252F%252Fvideo.yahoo.com%252Fvideo%252Fplay%253F%2526ei%253DUTF-8%2526vid%253Dcccd4aa02a3993ab06e56af731346f78.2006940&#038;imTitle=Browser%2BWars%2BEpisode%2BII%253A%2BAttack%2Bof%2Bthe%2BDOMs&#038;searchUrl=http://video.yahoo.com/video/search?p=&#038;profileUrl=http://video.yahoo.com/video/profile?yid=&#038;creatorValue=ZXJpY21pcmFnbGlh&#038;vid=cccd4aa02a3993ab06e56af731346f78.2006940' type='application/x-shockwave-flash' width='425' height='350'></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/browser-wars-mozilla-ie-opera-join-up-for-a-panel-discussion/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

