<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Ajaxian » Front Page</title>
	
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 29 Jul 2010 04:14:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<feedburner:info uri="ajaxian" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://ajaxian.com/index.xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>Canto.js: An Improved Canvas API</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/VkGN6XlnS_g/canto-js-an-improved-canvas-api</link>
		<comments>http://ajaxian.com/archives/canto-js-an-improved-canvas-api#comments</comments>
		<pubDate>Thu, 29 Jul 2010 04:10:24 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9889</guid>
		<description><![CDATA[Javascript author extraordinaire David Flanagan released Canto.js recently, a lightweight wrapper API for canvas, introduced here and documented at the top of the source code. Example:
PLAIN TEXT
JAVASCRIPT:


canto&#40;"canvas_id"&#41;.moveTo&#40;100,100&#41;.lineTo&#40;200,200,100,200&#41;.closePath&#40;&#41;.stroke&#40;&#41;;
&#160;


Notice three things:

 canto() returns an abstraction of the canvas - a "Canto" object.

 As with jQuery and similar libraries, there's method chaining; each method called on a Canto [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript author extraordinaire David Flanagan released <a href="http://code.google.com/p/canto-js/">Canto.js</a> recently, a lightweight wrapper API for canvas, <a href="http://www.davidflanagan.com/2010/07/cantojs-an-impr.html">introduced here</a> and documented at <a href="http://code.google.com/p/canto-js/source/browse/trunk/canto.js">the top of the source code</a>. Example:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-3');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-3">
<div class="javascript">
canto<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"canvas_id"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">moveTo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">100</span>,<span style="color:#800000;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">lineTo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span>,<span style="color:#800000;">200</span>,<span style="color:#800000;">100</span>,<span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">closePath</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">stroke</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp;</div>
</div>
</div>
<p>Notice three things:</p>
<ul>
<li> canto() returns an abstraction of the canvas - a "Canto" object.
</li>
<li> As with jQuery and similar libraries, there's method chaining; each method called on a Canto also returns the Canto.
</li>
<li> lineTo() has been extended to support multiple lines being drawn in a single call.
</li>
</ul>
<p>Instead of setting the ink properties and then painting it, you can do it all in one step:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-4">
<div class="javascript">
canto<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"canvas_id"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">moveTo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">100</span>,<span style="color:#800000;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">lineTo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span>,<span style="color:#800000;">200</span>,<span style="color:#800000;">100</span>,<span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">closePath</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">stroke</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>lineWidth: <span style="color:#800000;">15</span>, strokeStyle: <span style="color: #3366CC;">"red"</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp;</div>
</div>
</div>
<p>And plenty more syntactic sugar - check out the API in the <a href="http://code.google.com/p/canto-js/source/browse/trunk/canto.js">source code comments</a>. Sweet!</p>
<p>Thanks <a href="http://twitter.com/pkeane/statuses/19785917337">@pkeane</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=VkGN6XlnS_g:T_L2JEgipHI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=VkGN6XlnS_g:T_L2JEgipHI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=VkGN6XlnS_g:T_L2JEgipHI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=VkGN6XlnS_g:T_L2JEgipHI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/canto-js-an-improved-canvas-api/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/canto-js-an-improved-canvas-api</feedburner:origLink></item>
		<item>
		<title>YUI 3.2.0 preview release 1 – touch events support, transitions and browser-specific loading</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/V-QsdWBOxZI/yui-3-2-0-preview-release-1-touch-events-support-transitions-and-browser-specific-loading</link>
		<comments>http://ajaxian.com/archives/yui-3-2-0-preview-release-1-touch-events-support-transitions-and-browser-specific-loading#comments</comments>
		<pubDate>Tue, 27 Jul 2010 18:34:02 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[preview]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9885</guid>
		<description><![CDATA[Over at the the YUI blog the team just announced the preview release of YUI 3.2.0. YUI3 now has some interesting new features that the team wants you to try and tell them if they work out for you. The changes to the already very powerful library are quite ambitious:

Touch event support for mobile interfaces [...]]]></description>
			<content:encoded><![CDATA[<p>Over at the <a href="http://www.yuiblog.com/blog/2010/07/26/3-2-0pr1/">the YUI blog the team just announced the preview release of YUI 3.2.0</a>. YUI3 now has some interesting new features that the team wants you to try and tell them if they work out for you. The changes to the already very powerful library are quite ambitious:</p>
<ul>
<li><a href="http://yuiblog.com/sandbox/yui/3.2.0pr1/tests/event-gestures/tests/manual/gestures.html">Touch event support</a> for mobile interfaces including flick and move gestures</li>
<li>Browser capability loading - which means that every browser gets the least amount of code necessary to make it work</li>
<li><a href="http://yuiblog.com/sandbox/yui/3.2.0pr1/examples/transition/transition-usage.html">Transition support for the animation module</a> - meaning only browsers that don't support CSS3 transitions get the JavaScript animation fallback</li>
<li>An <a href="http://yuiblog.com/sandbox/yui/3.2.0pr1/examples/cssgrids/cssgrids-units.html">update to the CSS grids</a> to allow for more flexible layouts</li>
<li>A <a href="http://yuiblog.com/sandbox/yui/3.2.0pr1/examples/scrollview/index.html">ScrollView widget</a> similar to the one in Apple iOS</li>
<li>The uploader has been transitioned over from YUI2 to YUI3</li>
</ul>
<p>So check out what is on offer and give the YUI team feedback on what would be nice to have and what is broken. In their own words:</p>
<blockquote><p>The goal of a preview release is to make it as easy as possible for all of us in the community to evaluate progress of the upcoming release and provide feedback.  Please take some time to test 3.2.0pr1 and let us know what you find by filing tickets in the <a href="http://yuilibrary.com/projects/yui3/newticket?version=3.2.0%20PR1">YUI 3 bug database</a> marked as “Observed in version” 3.2.0pr1.  We’ll do our best to address preview-release questions on the <a href="http://yuilibrary.com/forum/viewforum.php?f=15" title="YUI Library :: Forums :: View forum - YUI 3.x:">YUI 3 Forums</a>, too.</p></blockquote>
<p>There are three ways to get started with the preview release:  YUI 3.2.0pr1 is available on the CDN via the 3.2.0pr1 version tag — so you can reference preview-release files like <code><a href="http://yui.yahooapis.com/combo?3.2.0pr1/build/yui/yui-min.js">http://yui.yahooapis.com/combo?3.2.0pr1/build/yui/yui-min.js</a></code>.  If you switch to this seed file for the preview release, all subsequent <code>use()</code> statements will continue to load YUI 3.2.0pr1. Or You can download the full YUI 3.2.0pr1 from <a href="http://yuilibrary.com/downloads/">YUILibrary.com</a>, including source code and examples for all components. Or you can simply explore the <a href="http://yuiblog.com/sandbox/yui/3.2.0pr1/examples/" title="YUI 3: Index of Library Examples">functioning examples roster</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=V-QsdWBOxZI:Tkj0nOzxPDM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=V-QsdWBOxZI:Tkj0nOzxPDM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=V-QsdWBOxZI:Tkj0nOzxPDM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=V-QsdWBOxZI:Tkj0nOzxPDM:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/yui-3-2-0-preview-release-1-touch-events-support-transitions-and-browser-specific-loading/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/yui-3-2-0-preview-release-1-touch-events-support-transitions-and-browser-specific-loading</feedburner:origLink></item>
		<item>
		<title>Canvas Color Cycling</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/hunOZZijfXA/canvas-color-cycling</link>
		<comments>http://ajaxian.com/archives/canvas-color-cycling#comments</comments>
		<pubDate>Tue, 27 Jul 2010 00:21:55 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9881</guid>
		<description><![CDATA[
Interest in Canvas, as well as mobile apps, has led to a renaissance of old-school 8-bit graphics. Joe Huckaby of Effect Games has been playing around with color cycling, leading to some stunning effects.

Anyone remember Color cycling from the 90s?  This was a technology often used in 8-bit video games of the era, to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.effectgames.com/demos/canvascycle/?sound=0"><img src="http://ajaxian.com/wp-content/images/Canvas-Cycle_-True-8-bit-Color-Cycling-with-HTML5.jpg" alt="" title="Canvas Cycle_ True 8-bit Color Cycling with HTML5" width="525" height="421" class="alignnone size-full wp-image-9880" /></a></p>
<p>Interest in Canvas, as well as mobile apps, has led to a renaissance of old-school 8-bit graphics. Joe Huckaby of <a href="http://www.effectgames.com/">Effect Games</a> has been playing around with color cycling, leading to some <a href="http://www.effectgames.com/demos/canvascycle/?sound=0">stunning effects</a>.</p>
<blockquote><p>
Anyone remember <a href="http://en.wikipedia.org/wiki/Color_cycling" class="dx_external_link" target="_blank">Color cycling</a> from the 90s?  This was a technology often used in 8-bit video games of the era, to achieve interesting visual effects by cycling (shifting) the color palette.  Back then video cards could only render 256 colors at a time, so a palette of selected colors was used.  But the programmer could change this palette at will, and all the onscreen colors would instantly change to match.  It was fast, and took virtually no memory.
</p></blockquote>
<p>There's a neat optimization going on here too: instead of clearing and redrawing the entire scene with each frame, he only updates the pixels that change:</p>
<blockquote><p>
In order to achieve fast frame rates in the browser, I had to get a little crazy in the engine implementation. Rendering a 640x480 indexed image on a 32-bit RGB canvas means walking through and drawing 307,200 pixels per frame, in JavaScript. That's a very big array to traverse, and some browsers just couldn't keep up. To overcome this, I pre-process the images when they are first loaded, and grab the pixels that reference colors which are animated (i.e. are part of cycling sets in the palette). Those pixel X/Y offsets are stored in a separate, smaller array, and thus only the pixels that change are refreshed onscreen. This optimization trick works so well, that the thing actually runs at a pretty decent speed on my iPhone 3GS and iPad!
</p></blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=hunOZZijfXA:5VcbFCwGFb8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=hunOZZijfXA:5VcbFCwGFb8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=hunOZZijfXA:5VcbFCwGFb8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=hunOZZijfXA:5VcbFCwGFb8:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/canvas-color-cycling/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/canvas-color-cycling</feedburner:origLink></item>
		<item>
		<title>Looking at JS emulator core for GameBoy</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/Fgnm6axN_FA/looking-at-js-emulator-core-for-gameboy</link>
		<comments>http://ajaxian.com/archives/looking-at-js-emulator-core-for-gameboy#comments</comments>
		<pubDate>Sun, 25 Jul 2010 03:29:06 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9875</guid>
		<description><![CDATA[JavaScript as a general-purpose "Turing-complete language" is illustrated - the example discussed in the first part of a series:  How a CPU can be emulated through JS, and how one might start building an emulation core for the GameBoy console. Looking forward:  How a game image can be loaded into the emulator over the Web. [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScript as a general-purpose "Turing-complete language" is illustrated - the example discussed in the first part of a series:  How a CPU can be emulated through JS, and how one might start building an emulation core for the GameBoy console. Looking forward:  How a game image can be loaded into the emulator over the Web. For now: Hello, Z80! <a href="http://imrannazar.com/GameBoy-Emulation-in-JavaScript:-The-CPU">Check out Ice Station ImRannazar!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=Fgnm6axN_FA:m6WrdHMfKVI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Fgnm6axN_FA:m6WrdHMfKVI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Fgnm6axN_FA:m6WrdHMfKVI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=Fgnm6axN_FA:m6WrdHMfKVI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/looking-at-js-emulator-core-for-gameboy/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/looking-at-js-emulator-core-for-gameboy</feedburner:origLink></item>
		<item>
		<title>Dojo 1.5 is Out and it’s Feature Packed!</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/8e2PPSSbB2w/dojo-1-5-is-out-and-its-feature-packed</link>
		<comments>http://ajaxian.com/archives/dojo-1-5-is-out-and-its-feature-packed#comments</comments>
		<pubDate>Thu, 22 Jul 2010 18:06:14 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9851</guid>
		<description><![CDATA[The Dojo project continues to pump out goodness announcing version 1.5 of the Dojo Toolkit with a number of new and exciting features. 
Dylan Schiemann had this to say about the release:
The JavaScript world is evolving at an intense pace. We're very pleased with this release of Dojo, which offers the stability needed for existing [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dojotoolkit.org/"><img src="http://ajaxian.com/wp-content/images/Dojo-1.5.png" alt="" title="Dojo 1.5" width="150" height="134" class="alignright size-full wp-image-9855" /></a><a href="http://dojotoolkit.org/">The Dojo project</a> continues to pump out goodness <a href="http://www.sitepen.com/blog/2010/07/22/dojo-1-5-ready-to-power-your-web-app/">announcing version 1.5 of the Dojo Toolkit</a> with a number of new and exciting features. </p>
<p>Dylan Schiemann had this to say about the release:</p>
<blockquote><p>The JavaScript world is evolving at an intense pace. We're very pleased with this release of Dojo, which offers the stability needed for existing apps and browsers, while introducing some of the capabilities of building great apps of the future.</p></blockquote>
<p>Some of the biggest updates came to the Dijit UI library with the addition of the <a href="http://download.dojotoolkit.org/release-1.5.0/dojo-release-1.5.0/dijit/themes/themeTester.html">new Claro theme</a> which helps provide a nice desktop look-and-feel to web applications as well as improvements to the charting and drawing components of the library.</p>
<p>And Dojo team lead Pete Higgins added:</p>
<blockquote><p>If you haven't seen the new theme Claro, you should. Julie Santilli and her awesome design team at IBM put some incredible design and style on top of an already stable and accessible UI library</p></blockquote>
<p>The <a href="http://download.dojotoolkit.org/release-1.5.0/dojo-release-1.5.0/dijit/themes/themeTester.html">theme is incredibly clean</a>. Check out some of the controls styled using Claro:</p>
<p><a href="http://ajaxian.com/wp-content/images/tree.png"><img src="http://ajaxian.com/wp-content/images/tree.png" alt="" title="tree" width="300" height="434" class="alignleft size-full wp-image-9860" /></a><br />
<a href="http://ajaxian.com/wp-content/images/sliders.png"><img src="http://ajaxian.com/wp-content/images/sliders.png" alt="" title="sliders" width="421" height="186" class="alignleft size-full wp-image-9861" /></a><br />
<a href="http://ajaxian.com/wp-content/images/buttons.png"><img src="http://ajaxian.com/wp-content/images/buttons.png" alt="" title="buttons" width="439" height="87" class="alignleft size-full wp-image-9862" /></a></p>
<p><br clear="both" /></p>
<p>Other important updates include:</p>
<ul>
<li>Strong support for HTML5 &#038; CSS3 features such as local storage, transforms and Canvas with fallback</li>
<li>Implementation of <a href="http://doughays.dojotoolkit.org/ImageResizeDemo/">dojo.Stateful</a></li>
<li>Update to dojo.Deferred to leverage a new <a href="http://www.sitepen.com/blog/2010/05/03/robust-promises-with-dojo-deferred-1-5/">underlying Promises-based API</a></li>
</ul>
<p>In addition, new initiatives are underway to provide solutions for the ever-growing and important mobile space: </p>
<ul>
<li><a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/mobile/">dojox.mobile</a>: lightweight mobile web widgets</li>
<li><a href="http://shaneosullivan.wordpress.com/2010/06/13/dojos-new-mobile-app-project/">dojox.mobile.app</a>: mobile application development framework</li>
<li><a href="http://github.com/uxebu/embedjs">embedjs</a>: Dojo API, optimized for mobile</li>
<li><a href="http://uxebu.com/blog/2010/04/27/touchscroll-a-scrolling-layer-for-webkit-mobile/">TouchScroll</a>: scrolling layer for WebKit Mobile</li>
<li><a href="http://winktoolkit.org/">wink</a>: mobile web app toolkit</li>
</ul>
<p>This release continues the project's philosophy of modularity allowing developers to leverage the library for anything from simple DOM manipulation to full-blown RIA development. <a href="http://dojotoolkit.org/download/">Dojo 1.5 is immediately available for download</a> and sports impressive, updated <a href="http://dojotoolkit.org/documentation/">documentation</a> to get you started quickly.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=8e2PPSSbB2w:zqPr-xEk1DA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=8e2PPSSbB2w:zqPr-xEk1DA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=8e2PPSSbB2w:zqPr-xEk1DA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=8e2PPSSbB2w:zqPr-xEk1DA:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dojo-1-5-is-out-and-its-feature-packed/feed</wfw:commentRss>
		<slash:comments>60</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/dojo-1-5-is-out-and-its-feature-packed</feedburner:origLink></item>
		<item>
		<title>A Little PIE with that CSS3?</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/orfn-gXlNhA/a-little-pie-with-that-css3</link>
		<comments>http://ajaxian.com/archives/a-little-pie-with-that-css3#comments</comments>
		<pubDate>Mon, 19 Jul 2010 15:51:00 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9835</guid>
		<description><![CDATA[Everyone's chomping at the bit to leverage new HTML5 and CSS3 features but with some older browsers not supporting them, hacks are still needed to make things work in a cross-browser fashion. We've seen libs that make things easier such as Remy Sharp's html5shiv and Modernizr and now we can add another one.
Jason Johnston's new [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ajaxian.com/wp-content/images/pie-logo.png"><img src="http://ajaxian.com/wp-content/images/pie-logo.png" alt="" title="pie-logo" width="194" height="127" class="alignright size-full wp-image-9836" /></a>Everyone's chomping at the bit to leverage new HTML5 and CSS3 features but with some older browsers not supporting them, hacks are still needed to make things work in a cross-browser fashion. We've seen libs that make things easier such as <a href="http://code.google.com/p/html5shiv/">Remy Sharp's html5shiv</a> and <a href="http://www.modernizr.com/">Modernizr</a> and now we can add another one.</p>
<p>Jason Johnston's new <a href="http://css3pie.com/">PIE library</a> makes it easy to rendering several of the most useful CSS3 decoration features within Internet Explorer versions 6 through 8. He took an interesting approach by using IE DHTML Behaviors to style the elements and provide the necessary functionality to emulate the CSS3 functionality.  So to add rounded corners to an element, your CSS code might look like this in plain 'ole CSS:</p>
<div class="igBar"><a href="javascript:showCodeTxt('css-7');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">CSS:</span>
<div id="css-7">
<div class="css">
<span style="color: #cc00cc;">#myElement <span style="color:#006600; font-weight:bold;">&#123;</span></span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background</span>: #EEE;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">padding</span>: 2em;<br />
&nbsp; &nbsp; -moz-border-radius: 1em;<br />
&nbsp; &nbsp; -webkit-border-radius: 1em;<br />
&nbsp; &nbsp; border-radius: 1em;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>To add support in IE 6-8 using PIE, you'd add this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('css-8');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">CSS:</span>
<div id="css-8">
<div class="css">
<span style="color: #cc00cc;">#myElement <span style="color:#006600; font-weight:bold;">&#123;</span></span><br />
&nbsp; &nbsp; ...<br />
&nbsp; &nbsp; behavior: <span style="color: #993333;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span>PIE.htc<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>PIE currently has full or partial support for:</p>
<ul>
<li>border-radius</li>
<li>box-shadow</li>
<li>border-image</li>
<li>multiple background images</li>
<li>linear-gradient background images</li>
</ul>
<p>Unfortunately, there seems to only be one demo at the moment, which is border-radius rendering via the home page, but it's still seems like a good start with a lot of future potential. </p>
<p>I've never personally used IE DHTML Behaviors or HTML Components so I looked them up and found these intro links for those who might be interested in better understanding them:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms532146.aspx">Using HTML Components to Implement DHTML Behaviors in Script</a><br />
<a href="http://msdn.microsoft.com/en-us/library/ms531079.aspx">Introduction to DHTML Behaviors</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=orfn-gXlNhA:eghAlLpzsY8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=orfn-gXlNhA:eghAlLpzsY8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=orfn-gXlNhA:eghAlLpzsY8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=orfn-gXlNhA:eghAlLpzsY8:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/a-little-pie-with-that-css3/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/a-little-pie-with-that-css3</feedburner:origLink></item>
		<item>
		<title>It’s Friday. Take the time to learn the Web with a splash of French, German, and Irish</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/PsndHyzk0Js/its-friday-take-the-time-to-learn-the-web-with-a-splash-of-french-german-and-irish</link>
		<comments>http://ajaxian.com/archives/its-friday-take-the-time-to-learn-the-web-with-a-splash-of-french-german-and-irish#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:34:34 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9824</guid>
		<description><![CDATA[The week has been long. Much code has been written. There is much more to do, but Friday is for relaxing a little. Take some time, sit back and watch, as three fantastic videos are available for you:
French: Paul Rouget of Mozilla, shows you the future
Paul builds the best demos. ever. At the Mozilla Summit [...]]]></description>
			<content:encoded><![CDATA[<p>The week has been long. Much code has been written. There is much more to do, but Friday is for relaxing a little. Take some time, sit back and watch, as three fantastic videos are available for you:</p>
<p><strong>French: Paul Rouget of Mozilla, shows you the future</strong></p>
<p>Paul builds the best demos. ever. At the Mozilla Summit in Whistler, he shows off what you can do when you remix HTML5, CSS3, SVG, WebGL, and WebSockets. A must see.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/-BsB0HpS768&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/-BsB0HpS768&amp;hl=en_US&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><strong>German: Building an awesome social HTML5 engine</strong></p>
<p>Paul Bakaus of Dextrose (and jQuery UI fame) recently launched the Aves Engine, a social gaming engine in pure HTML! Dextrose also joined forces with Effect Games to bolster its Web gaming might. Paul gave a talk at Google explaining the technology, and it just went live:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/_RRnyChxijA&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/_RRnyChxijA&amp;hl=en_US&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><strong>"Irish": Paul shows you jQuery c0de</strong></p>
<p>Ok, Irish by name, and maybe a touch by nature.... but not by nationality. Paul Irish has been doing an amazing talk at conferences where he walks through the jQuery source code to teach you fun and frolics of JavaScript. He picked up ScreenFlow and did it again to reach you all. Paul is a gem in our community, and at 52 minutes.... you will still want more:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/i_qE1iAmjFg&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/i_qE1iAmjFg&amp;hl=en_US&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>Have a great weekend!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=PsndHyzk0Js:T9tr4B0Ha0s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=PsndHyzk0Js:T9tr4B0Ha0s:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=PsndHyzk0Js:T9tr4B0Ha0s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=PsndHyzk0Js:T9tr4B0Ha0s:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/its-friday-take-the-time-to-learn-the-web-with-a-splash-of-french-german-and-irish/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/its-friday-take-the-time-to-learn-the-web-with-a-splash-of-french-german-and-irish</feedburner:origLink></item>
		<item>
		<title>Synthetic Event Library Syn Aims to Make Testing Easier</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/Uah-jk56_FU/synthetic-event-library-syn-aims-to-make-testing-easier</link>
		<comments>http://ajaxian.com/archives/synthetic-event-library-syn-aims-to-make-testing-easier#comments</comments>
		<pubDate>Wed, 14 Jul 2010 16:54:17 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9812</guid>
		<description><![CDATA[The team at Jupiter IT have release Syn, a library which allows you to create synthetic events for use in testing. This standalone library is meant to assist in testing complex UI behavior by simulating user actions such as typing, clicking, dragging the mouse.
Testing rich, dynamic web applications sucks. At Jupiter, we've tried almost every [...]]]></description>
			<content:encoded><![CDATA[<p>The team at <a href="http://jupiterjs.com/">Jupiter IT</a> have release <a href="http://jupiterjs.com/#news/syn-a-standalone-synthetic-event-library">Syn</a>, a library which allows you to create synthetic events for use in testing. This standalone library is meant to assist in testing complex UI behavior by simulating user actions such as typing, clicking, dragging the mouse.</p>
<blockquote><p>Testing rich, dynamic web applications sucks. At Jupiter, we've tried almost every testing solution available (qUnit, Quick Test Pro, Selenium, JsUnit, Env.js, TestCase) and all of them suffer from some fatal flaw. </p>
<p><strong>Problems:</strong></p>
<ul>
<li>Manual - A tester has to run the tests manually on every supported browser. &nbsp;People are lazy.&nbsp;</li>
<li>Unit Tests Only - We need to test the app as a whole and complex UI behavior like drag-drop.</li>
<li>Low fidelity - We need to make sure the tests are reporting accurate results.</li>
<li>Difficult to write - We sling JS like a ninja monkey throws poo. &nbsp;We want to write tests in a nice JS API.</li>
<li>Expensive - A QTP license is 5k a person! &nbsp;I'd rather buy a vacation.</li>
<li>Support - We want to test Mac and Linux browsers.</li>
</ul>
<p>We've solved all of these problems in our upcoming FuncUnit testing framework. It's a mashup of qUnit, Selenium, Rhino, and Env.js. But its core library, Syn, which does the work of simulating user actions with very high fidelity, is what we are releasing today.</p>
</blockquote>
<p>So by using code like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-10');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-10">
<div class="javascript">
Syn.<span style="color: #006600;">click</span><span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,<span style="color: #3366CC;">'hello'</span> <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">type</span><span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color: #3366CC;">'Hello World'</span> <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">drag</span><span style="color:#006600; font-weight:bold;">&#40;</span> $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'#trash'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#41;</span>; <br />
&nbsp;</div>
</div>
</div>
<p>you can simulate clicking an element with id='hello', typing "Hello World", and then dragging your mouse from that element to an element with id='trash'.</p>
<p>Pretty cool stuff. Check out their <a href="http://v3.javascriptmvc.com/funcunit/synthetic/synthetic.html">demo to see how playback occurs</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=Uah-jk56_FU:Hyb2_GYqJmw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Uah-jk56_FU:Hyb2_GYqJmw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Uah-jk56_FU:Hyb2_GYqJmw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=Uah-jk56_FU:Hyb2_GYqJmw:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/synthetic-event-library-syn-aims-to-make-testing-easier/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/synthetic-event-library-syn-aims-to-make-testing-easier</feedburner:origLink></item>
		<item>
		<title>An alternative way to addEventListener</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/BZC9NQqE_n4/an-alternative-way-to-addeventlistener</link>
		<comments>http://ajaxian.com/archives/an-alternative-way-to-addeventlistener#comments</comments>
		<pubDate>Tue, 13 Jul 2010 13:00:42 +0000</pubDate>
		<dc:creator>webreflection</dc:creator>
				<category><![CDATA[Examples]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[dom]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9769</guid>
		<description><![CDATA[I can't believe none of us knew DOM2
This is how a tweet from @SubtleGradient, re-tweeted by @jdalton, has been able to steal my rest tonight ... and this post is the consequence ...
What's new in a nutshell
There is a W3C Recommendation about addEventListener behavior, which clearly specify the second argument as an EventListener.
The new part [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I can't believe none of us knew DOM2</p></blockquote>
<p>This is how a tweet from <a href="http://twitter.com/SubtleGradient/status/18388549003">@SubtleGradient</a>, re-tweeted by <a href="http://twitter.com/jdalton/status/18380831635">@jdalton</a>, has been able to steal my rest tonight ... and this post is the consequence ...</p>
<h3>What's new in a nutshell</h3>
<p>There is a <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">W3C Recommendation</a> about addEventListener behavior, which clearly specify the second argument as an <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener">EventListener</a>.<br />
The new part is that no library I know has ever used a proper EventListener interface, preferring the classic attached callback instead.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-16');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-16">
<div class="javascript">
<p><span style="color: #009900; font-style: italic;">// this is how it is</span><br />
document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">"click"</span>,<br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #009900; font-style: italic;">/* stuff */</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">false</span><br />
<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp;<br />
<span style="color: #009900; font-style: italic;">// this is how it could be as well</span><br />
<span style="color: #003366; font-weight: bold;">var</span> listener = <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; handleEvent: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span> === listener; <span style="color: #009900; font-style: italic;">// true</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// and evt === classic event object</span></p>
<p>&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span>;<br />
&nbsp;<br />
document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, listener, <span style="color: #003366; font-weight: bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<h3>Benefits</h3>
<p>The most common case that may disappear is well explained in this <a href="https://developer.mozilla.org/en/DOM/element.addEventListener#Memory_issues">MDC addEventListener page</a>.<br />
Rather than bind inline or add anonymous functions to make our object call context preserved, we can simply add an <em>handleEvent</em> method to whatever object and pass it as EventListener.<br />
Moreover, being close to full ES5 support and <em>"use strict"</em> directive where <em>arguments.callee</em> disappears, it may be more than handy to be able to perform such operation:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-17');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-17">
<div class="javascript">
document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; handleEvent: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// 1 shot callback event example</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">switch</span> <span style="color:#006600; font-weight:bold;">&#40;</span>evt.<span style="color: #006600;">target</span>.<span style="color: #006600;">nodeType</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color:#800000;">1</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color:#800000;">9</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; evt.<span style="color: #006600;">target</span>.<span style="color: #006600;">removeEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; evt.<span style="color: #006600;">type</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>, <span style="color: #009900; font-style: italic;">// here we are!</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">false</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color: #003366; font-weight: bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp;</div>
</div>
</div>
<h3>An opened door for custom listeners</h3>
<p>As I have recently posted, custom listeners implementation can be truly handy when we are dealing with <a href="http://webreflection.blogspot.com/2010/05/event-driven-application-and-most-basic.html">events driven applications</a>, but as soon as I have read the tweet, I had to rewrite a fresh new way to create a listener. Please note that following code is assuming that the browser supports both DOM Level 2 and Array extras, which is true for all modern browsers, mobile oriented included.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-18">
<div class="javascript">
<span style="color: #003366; font-weight: bold;">function</span> createEventListener<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">/*! Andrea Giammarchi for Ajaxian - Mit Style */</span></p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// a function declaration reused internally</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> notifyEvent<span style="color:#006600; font-weight:bold;">&#40;</span>callback, i, stack<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// use DOM Level 0 events strategy</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//&nbsp; to stop the loop if necessary</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// checking if the result is exactly false</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>callback.<span style="color: #006600;">call</span><span style="color:#006600; font-weight:bold;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the curent object as context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the classic event as first argument</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the called callback (life easier)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callback,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// again the current context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// if the callback has been bound</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span> === <span style="color: #003366; font-weight: bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// if false, reassign the current stack ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eventListener<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">"@"</span>+event.<span style="color: #006600;">type</span><span style="color:#006600; font-weight:bold;">&#93;</span> = stack.<span style="color: #006600;">slice</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// ... and break the current forEach loop</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// (or, for the record, whatever Array.extras)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack.<span style="color: #006600;">length</span> = <span style="color:#800000;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// local scoped object, reachable internally</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// usable as mixin so instances won't be polluted</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// with all possible event types</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the type is prefixed in any case</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// so that name clashes should be</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// really rare however we use the object</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; eventListener = <span style="color:#006600; font-weight:bold;">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// we attach to a proper stack</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEvent: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>type, callback<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// try to retrieve the stack ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack = <span style="color:#006600; font-weight:bold;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// if already there ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eventListener<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">"@"</span> + type<span style="color:#006600; font-weight:bold;">&#93;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// otherwise we create it once</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>eventListener<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">"@"</span> + type<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// as addEventListener, don't attach</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the same event twice</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i = stack.<span style="color: #006600;">indexOf</span><span style="color:#006600; font-weight:bold;">&#40;</span>callback<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// so if it was not there ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>-<span style="color:#800000;">1</span> === i<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// FIFO order via stack</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack.<span style="color: #006600;">push</span><span style="color:#006600; font-weight:bold;">&#40;</span>callback<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// called via addEventListener</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the &quot;this&quot; reference will be</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// the eventListener object,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// or the current instance</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// if used as &quot;class&quot; mixin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// or via Object.create / clone / merge</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handleEvent: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// retrieve the stack</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> stack = eventListener<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">"@"</span> + e.<span style="color: #006600;">type</span><span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// and if present ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>stack<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// set temporarily the local event var</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event = e;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// notify all registered callbacks</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// using current this reference</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// as forEach context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack.<span style="color: #006600;">forEach</span><span style="color:#006600; font-weight:bold;">&#40;</span>notifyEvent, <span style="color: #000066; font-weight: bold;">this</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// let the GC handle the memory later</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event = <span style="color: #003366; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// how we remove the event, if any ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeEvent: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>type, callback<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// try to retrieve the stack ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack = eventListener<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color: #3366CC;">"@"</span> + type<span style="color:#006600; font-weight:bold;">&#93;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// find the index ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// if the stack is present</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>stack &amp;&amp; ~<span style="color:#006600; font-weight:bold;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i = stack.<span style="color: #006600;">indexOf</span><span style="color:#006600; font-weight:bold;">&#40;</span>callback<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// remove it</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack.<span style="color: #006600;">splice</span><span style="color:#006600; font-weight:bold;">&#40;</span>i, <span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// I could have called this variable tmp</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// but it's actually the current event</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// once assigned ... so ...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; event<br />
&nbsp; &nbsp; ;</p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// ready to go!</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> eventListener;</p>
<p><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p>Here a usage example:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-19');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-19">
<div class="javascript">
<span style="color: #003366; font-weight: bold;">var</span> lst = createEventListener<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p><span style="color: #009900; font-style: italic;">/** mixin example (add a slash before this line to test)</p>
<p>function MyEventListener() {}<br />
MyEventListener.prototype.addEvent = lst.addEvent;<br />
MyEventListener.prototype.handleEvent = lst.handleEvent;<br />
MyEventListener.prototype.removeEvent = lst.removeEvent;</p>
<p>lst = new MyEventListener;</p>
<p>// */</span></p>
<p>document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, lst, <span style="color: #003366; font-weight: bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p>lst.<span style="color: #006600;">addEvent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, <span style="color: #003366; font-weight: bold;">function</span> click<span style="color:#006600; font-weight:bold;">&#40;</span>e, callback, object<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; callback === click, <span style="color: #009900; font-style: italic;">// true</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span> === lst,&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// true</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span> === object,&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// true</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006600;">type</span> === <span style="color: #3366CC;">"click"</span>&nbsp; <span style="color: #009900; font-style: italic;">// true</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// test that furthermore this</span><br />
&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// callback won't be fired again</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">removeEvent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, callback<span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// add delayed a callback</span><br />
&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// without any valid reason :-)</span><br />
&nbsp; &nbsp; setTimeout<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>self<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// test addEvent again</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; self.<span style="color: #006600;">addEvent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</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>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#800000;">0</span>, <span style="color: #000066; font-weight: bold;">this</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// block the current notification</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p><span style="color: #009900; font-style: italic;">// the event fired only the second click</span><br />
lst.<span style="color: #006600;">addEvent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"click"</span>, <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">alert</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>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p><span style="color: #009900; font-style: italic;">/** de-comment the mixin example to test<br />
//&nbsp; &nbsp;that no @click is attached ;-)<br />
for (var key in lst) {<br />
&nbsp; &nbsp; alert(key);<br />
}<br />
// */</span><br />
&nbsp;</div>
</div>
</div>
<h3>Advantages</h3>
<ul>
<li>both <em>evt.stopPropagation()</em> and <em>evt.preventDefault()</em> are not able to break the current notification of all attached listeners, if added to the same node, and while the <acronym title="First In, First Out">FIFO</acronym> order gives to the node "owner" or creator the ability to pollute the event object with some flag such <em>evt.pleaseDontDoAnyOtherActionHere = true</em>, not every library, script, or framework, may respect or understand this flag. With custom events we can adopt better strategies to actually avoid any other operation if this is what we meant, because we arrived before over the node and we may like to be that privileged</li>
<li>being custom, we can also decide which argument should be passed for each callback, simplifying most common problems we may have when dealing with listeners</li>
<li>we can better decouple DOM and listeners, being able to remove whatever amount of callbacks simply calling once <em>node.removeEventListener(evt.type, this, false);</em> inside any kind of notification</li>
<li>being based on standard and modern browsers, we can use native power, in this case provided by <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach">forEach</a> and <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf">indexOf</a> operations, so that performances will be best possible</li>
<li>thanks to automatic context injection, we can still reuse callbacks for different listeners, through bind, or simply considering the current context once called (or in this case the third argument by reference, if the context is different)</li>
</ul>
<p>Last but not least, if we would like to fire an event we can bypass DOM initialization using handleEvent directly, e.g.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-20');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-20">
<div class="javascript">
lst.<span style="color: #006600;">handleEvent</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; target: document.<span style="color: #006600;">querySelector</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#myid"</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; type: <span style="color: #3366CC;">"click"</span>,<br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// custom properties</span><br />
&nbsp; &nbsp; pageX: <span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; pageY: <span style="color:#800000;">0</span>,<br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// stubbed methods</span><br />
&nbsp; &nbsp; preventDefault: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; stopPropagation: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp;</div>
</div>
</div>
<h3>Compatibility ?</h3>
<p>Apparently both W3C behavior and provided examples are compatible with every modern browser with DOM Level 2 support, and I believe this is great.<br />
The only one behind here is IE9 pre 3, but again <a href="http://twitter.com/jdalton/status/18391154901">@jdalton has acted at speed light</a>, thanks!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=BZC9NQqE_n4:tmxa906u6pw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=BZC9NQqE_n4:tmxa906u6pw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=BZC9NQqE_n4:tmxa906u6pw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=BZC9NQqE_n4:tmxa906u6pw:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/an-alternative-way-to-addeventlistener/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/an-alternative-way-to-addeventlistener</feedburner:origLink></item>
		<item>
		<title>Quilt: Stitching Your JavaScript Modules Together</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/hN2GIEPIBcU/quilt-stitching-your-javascript-modules-together</link>
		<comments>http://ajaxian.com/archives/quilt-stitching-your-javascript-modules-together#comments</comments>
		<pubDate>Tue, 13 Jul 2010 12:00:27 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9758</guid>
		<description><![CDATA[It floors me what young, talented developers are building these days. Kit Goncharov, who only recently turned 17, just cranked out Quilt, a JavaScript preprocessor written in JavaScript. 
Quilt is very similar to the Sprockets JS preprocessor in that it allows you to improve code organization by logically separating your code into multiple modules within [...]]]></description>
			<content:encoded><![CDATA[<p>It floors me what young, talented developers are building these days. Kit Goncharov, who only recently turned 17, just cranked out <a href="http://github.com/kitgoncharov/quilt">Quilt, a JavaScript preprocessor written in JavaScript</a>. </p>
<p>Quilt is very similar to the <a href="http://getsprockets.org/">Sprockets JS preprocessor</a> in that it allows you to improve code organization by logically separating your code into multiple modules within their own specific directories. Instead of having one massive JavaScript file with all your source code in it (increasing the potential for errors and complications), you can break out your code into separate physical files and at build time, allow Quilt to roll it all up, line by line, into a single file, ready for deployment. Via support for directives, you can tell Quilt about dependencies to ensure your builds are structured the right way.</p>
<p>In addition, if you use third-party frameworks in your code, Quilt allows you to specify a "load path" or "search path" which tells the preprocessor where to look for your specific lib. Then, when you build the final concatenated output, the library is included right in the source code.</p>
<p>Although Quilt was heavily inspired by Sprockets, it does have several significant differences. Perhaps the most obvious is that it's written in pure JavaScript (as opposed to Ruby) and runs on Rhino. This means it's very portable and easy for JS developers to understand. Quilt also uses a slightly different syntax than Sprockets for including files (for instance, it allows single-quoted pathnames, and uses backticks instead of angle brackets for specifying third-party code), and can strip multi-line comments as well as single-line ones.</p>
<p>As our client-side applications continue to grow, these types of solutions are becoming increasingly important for having a well-structured and maintainable codebase and it's great to see that the future development leaders are taking that into consideration. Be sure to check out <a href="http://github.com/kitgoncharov/quilt">Quilt</a> along with <a href="http://github.com/kitgoncharov">Kit's other projects on GitHub</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=hN2GIEPIBcU:-aKBQZoNnkU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=hN2GIEPIBcU:-aKBQZoNnkU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=hN2GIEPIBcU:-aKBQZoNnkU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=hN2GIEPIBcU:-aKBQZoNnkU:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/quilt-stitching-your-javascript-modules-together/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/quilt-stitching-your-javascript-modules-together</feedburner:origLink></item>
		<item>
		<title>Strobe; A hot new HTML5-touch startup founded by Charles Jolley</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/4JFWSLX2-Ys/strobe-a-hot-new-html5-touch-startup-founded-by-charles-jolley</link>
		<comments>http://ajaxian.com/archives/strobe-a-hot-new-html5-touch-startup-founded-by-charles-jolley#comments</comments>
		<pubDate>Mon, 12 Jul 2010 12:03:23 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9755</guid>
		<description><![CDATA[

Charles Jolley: "I started working in SproutCore almost 5 years ago because I believe the future of software development lies in native-style apps in the web browser. It is the platform of the future and when that shift change happens, I want to be there with the technology. Now, I believe that time is almost [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://strobeapp.com/"><img src="http://ajaxian.com/wp-content/images/strobe.png" alt="" title="strobe" width="382" height="175" class="alignnone size-full wp-image-9756" /></a></p>
<blockquote><p>
Charles Jolley: "I started working in SproutCore almost 5 years ago because I believe the future of software development lies in native-style apps in the web browser. It is the platform of the future and when that shift change happens, I want to be there with the technology. Now, I believe that time is almost finally upon us.  It’s time to double down, and that is why I am leaving Apple."
</p></blockquote>
<p>Congrats to Charles as he starts a new adventure. At Apple, he lead the charge on the open source <a href="http://sproutcore.com/">SproutCore framework</a> which powers Mobile Me and a bunch more.</p>
<p>He recently showed off <a href="http://ajaxian.com/archives/sproutcore-2010">SproutCore Touch</a> and with it a killer demo. Instead of just saying "the Web can do as good a job as 'native' apps for some purposes" he showed it. He and SproutCore folk were there with two iPads. One had the native iPad NPR app, and the other had a *week long* port to SproutCore Touch. The funny thing.... the touch version performed better and even had a nice hidden feature. If you are listening to NPR and go to another app, it kept playing! Who knew!</p>
<p>For anyone wondering what the new company means for SproutCore, Charles makes it clear:</p>
<blockquote><p>
First, SproutCore is now and will always be totally free and open source. I think this business of charging for a commercial license is not an effective way to grow a project. Sure you make a little cash, but at what expense to the community? My goal is to make SproutCore and all of the developer tools that surround it totally free to everyone. All I ask is that you participate in the community somehow to make things a little better for those who come after you.</p>
<p>Second, now that I am no longer held back by big-company legal restrictions, I am going to be much more involved with the platform. Very soon I will post some new example code. Some others are working on new documentation and build tools to ease that pain as well. Starting this fall, my new company will also start to offer online and in person training and mentoring courses to your team get up to speed quickly.  We can also finally get started in that book.</p>
<p>My goal is that by the end of the year, any average developer can pick up SproutCore, build, and deploy a basic app without feeling lost. This is open source and I can’t usually guarantee timelines but at least now we can do what we need to make it happen.
</p></blockquote>
<p>With Strobe he wants to revolutionize "digital publishing". Put your thinking hats on to noodle on that one. One thing is for clear... it isn't just about making SproutCore Inc (as he discusses above).</p>
<p>Congrats Charles!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=4JFWSLX2-Ys:T6Bsl9DsAbI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=4JFWSLX2-Ys:T6Bsl9DsAbI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=4JFWSLX2-Ys:T6Bsl9DsAbI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=4JFWSLX2-Ys:T6Bsl9DsAbI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/strobe-a-hot-new-html5-touch-startup-founded-by-charles-jolley/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/strobe-a-hot-new-html5-touch-startup-founded-by-charles-jolley</feedburner:origLink></item>
		<item>
		<title>Ben and Dion Step Down as Editors of Ajaxian.com</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/VXinK69xCro/ben-and-dion-step-down-as-editors-of-ajaxian-com</link>
		<comments>http://ajaxian.com/archives/ben-and-dion-step-down-as-editors-of-ajaxian-com#comments</comments>
		<pubDate>Wed, 07 Jul 2010 20:48:51 +0000</pubDate>
		<dc:creator>Ben Galbraith</dc:creator>
				<category><![CDATA[Ajaxian.com Announcements]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9745</guid>
		<description><![CDATA[In the spring of 2005, the two of us gave our first Ajax talk together. The subject of the talk was DHTML, but Jesse James Garrett had just coined "Ajax" a few days previous, so we sprinkled the term throughout the slide deck. We needed a place to put some source code that accompanied the [...]]]></description>
			<content:encoded><![CDATA[<p>In the spring of 2005, the two of us gave our first Ajax talk together. The subject of the talk was DHTML, but Jesse James Garrett had just coined "Ajax" a few days previous, so we sprinkled the term throughout the slide deck. We needed a place to put some source code that accompanied the talk--an RSS reader was called "RSS Bling". Ajaxian.com was born.</p>
<p>Here's a random picture someone took of us right before we gave that first talk:</p>
<p><img src="http://ajaxian.com/wp-content/images/bendion.jpg" title="Ben and Dion hacking away on their talk" alt="Ben and Dion hacking away on their talk" width="470" height="352" class="alignnone size-full wp-image-9746" /></p>
<p>(Surely we're just reviewing the slides in this pic, not hurriedly hacking together something at the last minute.)</p>
<p>Because the Ajax space was moving so quickly, we wanted a place to track the fun hacks, great libraries, and fantastic showcases that were coming out daily, so we started using Ajaxian to post Ajax news and very occasionally, an editorial. It's fun to think back to those early times; the web world was drunk with new possibilities and no one was really quite sure how the draw the boundaries.</p>
<p>After a few months, things were moving so fast we thought it would be great to get the emerging Ajax community together. With help from Jay Zimmerman of No Fluff Just Stuff and Chris Haven, we put together the first Ajax Experience show in San Francisco. It was incredibly fun seeing so many of the folks in person we'd been covering on the site, and sharing with the broader developer community what was now possible.</p>
<p><img src="http://ajaxian.com/wp-content/images/tae.jpg" alt="Dion blesses the crowd at the first Ajax Experience" title="Dion blesses the crowd at the first Ajax Experience" width="470" height="277" class="alignnone size-full wp-image-9747" /></p>
<p>Our little Ajaxian blog grew over time--we still remember with awe when someone compared the traffic Ajaxian sent them to Slashdot--and we've gone on to co-produce several more Ajax Experience shows. It's been a thrilling ride.</p>
<p>Now, years later, it's time for us to formally hang up our Ajaxian hats. We've always juggled the site with our full-time jobs (various start-ups, Google for Dion, Mozilla, Palm, and now HP), and posting daily while balancing families and work can wear on you after a while--we can't do it all anymore. TechTarget (the company that has <a href="http://www.techtarget.com/html/pr/pr-06182007.htm">owned Ajaxian.com for some time</a>) will take on editorial ownership of the site. We will still carry on posting every so often--it's in our blood--but it won't be on a regular schedule.</p>
<p>This transition comes at an important time for us. Palm was an opportunity to show the world that an OS based on the Web can be fantastic, but now, with HP's resources behind Palm, there's an even bigger opportunity ahead that will require all of our focus and energy. Oh, and it's summer, too. :-)</p>
<p>Thanks for being there for us over the years. We look forward to the next series of adventures. With HTML5 continuing to build steam and browser innovation hotter than ever, it is going to be a great time for us Web folk.</p>
<p>As always, you can keep up with us on Twitter: <a href="http://twitter.com/bgalbs">Ben</a> and <a href="http://twitter.com/dalmaer">Dion</a>.</p>
<p>All the best,</p>
<p><a href="http://galbraiths.org/blog">Ben </a><a href="http://developer.palm.com/">and</a> <a href="http://almaer.com/blog">Dion</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=VXinK69xCro:MpZOii-g3WY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=VXinK69xCro:MpZOii-g3WY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=VXinK69xCro:MpZOii-g3WY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=VXinK69xCro:MpZOii-g3WY:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ben-and-dion-step-down-as-editors-of-ajaxian-com/feed</wfw:commentRss>
		<slash:comments>69</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/ben-and-dion-step-down-as-editors-of-ajaxian-com</feedburner:origLink></item>
		<item>
		<title>text-rendering: optimizeLegibility; //Can you read me now?</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/UTk_eofZyAk/text-rendering-optimizelegibility-can-you-read-me-now</link>
		<comments>http://ajaxian.com/archives/text-rendering-optimizelegibility-can-you-read-me-now#comments</comments>
		<pubDate>Fri, 02 Jul 2010 11:27:52 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Typography]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9732</guid>
		<description><![CDATA[text-rendering: optimizeLegibility;. 

Awesome.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.aestheticallyloyal.com/public/optimize-legibility/">text-rendering: optimizeLegibility;</a>. </p>
<p><a href="http://www.aestheticallyloyal.com/public/optimize-legibility/"><img src="http://ajaxian.com/wp-content/images/optimizeLegibility.png" alt="" title="optimizeLegibility" width="460" height="399" class="alignnone size-full wp-image-9733" /></a></p>
<p>Awesome.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=UTk_eofZyAk:aErB4zt6AKI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=UTk_eofZyAk:aErB4zt6AKI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=UTk_eofZyAk:aErB4zt6AKI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=UTk_eofZyAk:aErB4zt6AKI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/text-rendering-optimizelegibility-can-you-read-me-now/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/text-rendering-optimizelegibility-can-you-read-me-now</feedburner:origLink></item>
		<item>
		<title>Firefox 4 with lots of speed improvements and inline SVG</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/7y5odf2XrXE/firefox-4-with-lots-of-speed-improvements-and-inline-svg</link>
		<comments>http://ajaxian.com/archives/firefox-4-with-lots-of-speed-improvements-and-inline-svg#comments</comments>
		<pubDate>Thu, 01 Jul 2010 15:26:49 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9742</guid>
		<description><![CDATA[Mozilla went to London, England yesterday night to give a workshop about Mozilla Add-Ons and show some of the cool new stuff coming in Firefox 4. 
Probably the most impressive thing (next to the new Add-Ons Builder based on Bespin) was the upcoming Features of Firefox 4: 

HTML5 Video display
Painting with Canvas
Image manipulation with Canvas [...]]]></description>
			<content:encoded><![CDATA[<p>Mozilla went to London, England yesterday night to give a workshop about Mozilla Add-Ons and show some of the cool new stuff coming in Firefox 4. </p>
<p>Probably the most impressive thing (next to the new Add-Ons Builder based on Bespin) was the upcoming Features of Firefox 4: </p>
<ul>
<li><span class="caps">HTML5</span> Video display</li>
<li>Painting with Canvas</li>
<li>Image manipulation with Canvas &#8211; pixel testing, face detection with opencivitas</li>
<li>Green screen technologies in images and video by detecting pixel colours.</li>
<li><span class="caps">HTML5 </span>embedded inside <span class="caps">SVG </span>(yes!)</li>
<li><span class="caps">SVG </span>as an <span class="caps">IMG </span></li>
<li><span class="caps">SVG </span>as a <span class="caps">CSS </span>background </li>
<li><span class="caps">SVG </span>filter/mask/clip</li>
<li><span class="caps">SVG </span>animations </li>
<li>Inline <span class="caps">SVG </span>inside <span class="caps">HTML5</span></li>
<li><span class="caps">CSS3 </span>(selectors, @font-face, 2D Transforms, Transitions, Shadow, Gradients ,calculations &#8211; calc(2em-10px) )</li>
<li><span class="caps">API</span>s: Geolocation, Offline (IndexDB, localStorage, AppCache, FileAPI &#8211; binary content of a file input, file drag and drop, web workers, websockets)</li>
<li>Websockets controller running the presentation from the mobile.</li>
<li>WebGL</li>
</ul>
<p>They proved some of the points with demos: </p>
<p><span class="caps">CSS3 </span>filters and <span class="caps">SVG </span>masking on <span class="caps">HTML5</span> Video:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/-G5h6MKzyDw&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-G5h6MKzyDw&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>Highly interactive video interface with <span class="caps">SVG </span>masking and transitions:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/JnEepS4rsG8&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/JnEepS4rsG8&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>WebGL in Firefox 4 and on Android:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/aQzUsxrm0eI&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aQzUsxrm0eI&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>After this, Tristan Nitot covered some of the other features of Firefox 4, especially the upcoming speed improvements:</p>
<p>As to upcoming features to the core of Firefox, we heard about:</p>
<ul>
<li>TraceMonkey (a new Javascript engine)</li>
<li>Lazy Frame Construction</li>
<li>Reducing I/O from the main thread</li>
<li>Improved startup Time </li>
<li>Hardware accelleration </li>
<li><span class="caps">GPU </span>text/graphics/video rendering </li>
<li>Using <span class="caps">GPU </span>for text rendering </li>
<li>JavaScript <span class="caps">JIT </span>(JaegerMonkey)</li>
<li><span class="caps">HTML5 </span>parser running own thread </li>
<li>slicker interface</li>
<li>no more modal dialogs</li>
<li>no startup interuptions</li>
<li>updates in the background</li>
</ul>
<p>For an in-depth report on all the things shown, check out <a href="http://www.wait-till-i.com/2010/07/01/mozilla-add-on-workshop-and-firefox4-with-html5-css3-and-svg/">this live blog post</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=7y5odf2XrXE:UdNxw0BRMqM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=7y5odf2XrXE:UdNxw0BRMqM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=7y5odf2XrXE:UdNxw0BRMqM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=7y5odf2XrXE:UdNxw0BRMqM:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/firefox-4-with-lots-of-speed-improvements-and-inline-svg/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/firefox-4-with-lots-of-speed-improvements-and-inline-svg</feedburner:origLink></item>
		<item>
		<title>Keep your vows; Keeping wed to Node</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/G090uZxNuyw/keep-your-vows-keeping-wed-to-node</link>
		<comments>http://ajaxian.com/archives/keep-your-vows-keeping-wed-to-node#comments</comments>
		<pubDate>Thu, 01 Jul 2010 11:14:55 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9728</guid>
		<description><![CDATA[Vows can be a beautiful thing. Alexis Sellier of LESS fame, is becoming an open source star. This time around he brings us Vows an asynchronous-friendly behavior driven development framework for Node.js.

Write you BBD specs like this:
PLAIN TEXT
JAVASCRIPT:


// division-by-zero-test.js
var vows = require&#40;'vows'&#41;,
&#160; &#160; assert = require&#40;'assert'&#41;;
// Create a Test Suite
vows.describe&#40;'Division by Zero'&#41;.addBatch&#40;&#123;
&#160; &#160; 'when dividing [...]]]></description>
			<content:encoded><![CDATA[<p>Vows can be a beautiful thing. <a href="http://cloudhead.io/">Alexis Sellier</a> of LESS fame, is becoming an open source star. This time around he brings us <a href="http://vowsjs.org/">Vows</a> an asynchronous-friendly behavior driven development framework for Node.js.</p>
<p><a href="http://vowsjs.org/"><img src="http://ajaxian.com/wp-content/images/vowsjs.png" alt="" title="vowsjs" width="460" height="216" class="alignnone size-full wp-image-9729" /></a></p>
<p>Write you BBD specs like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-23');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-23">
<div class="javascript">
<span style="color: #009900; font-style: italic;">// division-by-zero-test.js</span></p>
<p><span style="color: #003366; font-weight: bold;">var</span> vows = require<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'vows'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; assert = require<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'assert'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p><span style="color: #009900; font-style: italic;">// Create a Test Suite</span><br />
vows.<span style="color: #006600;">describe</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'Division by Zero'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">addBatch</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">'when dividing a number by zero'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color:#800000;">42</span> / <span style="color:#800000;">0</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'we get Infinity'</span>: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assert.<span style="color: #006600;">equal</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic, Infinity<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color: #3366CC;">'but when dividing zero by zero'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color:#800000;">0</span> / <span style="color:#800000;">0</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'we get a value which'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'is not a number'</span>: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assert.<span style="color: #006600;">isNaN</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'is not equal to itself'</span>: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assert.<span style="color: #006600;">notEqual</span> <span style="color:#006600; font-weight:bold;">&#40;</span>topic, topic<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">run</span><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;">// Run it</span><br />
&nbsp;</div>
</div>
</div>
<p>and you get a very nice report card out of the other end:</p>
<p><img src="http://ajaxian.com/wp-content/images/vowsoutput.png" alt="" title="vowsoutput" width="460" height="301" class="alignnone size-full wp-image-9730" /></p>
<p>With macros you end up with very nice DSL syntax such as:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-24');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-24">
<div class="javascript">
<span style="color:#006600; font-weight:bold;">&#123;</span>&nbsp; &nbsp;<span style="color: #3366CC;">'GET /'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: api.<span style="color: #006600;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'shoud respond with a 200 OK'</span>: assertStatus<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color: #3366CC;">'POST /'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: api.<span style="color: #006600;">post</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'shoud respond with a 405 Method not allowed'</span>: assertStatus<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">405</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color: #3366CC;">'GET /resources (no api-key)'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: api.<span style="color: #006600;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/resources'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'shoud respond with a 403 Forbidden'</span>: assertStatus<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">403</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color: #3366CC;">'GET /resources?apikey=af816e859c249fe'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; topic: api.<span style="color: #006600;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'/resources?apikey=af816e859c249fe'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'shoud return a 200 OK'</span>: assertStatus<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'should return a list of resources'</span>: <span style="color: #003366; font-weight: bold;">function</span> <span style="color:#006600; font-weight:bold;">&#40;</span>res<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assert.<span style="color: #006600;">isArray</span> <span style="color:#006600; font-weight:bold;">&#40;</span>res.<span style="color: #006600;">body</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p><span style="color: #009900; font-style: italic;">// or even</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; <span style="color: #3366CC;">'GET&nbsp; /'</span>:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;respondsWith<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; <span style="color: #3366CC;">'POST /'</span>:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;respondsWith<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">405</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; <span style="color: #3366CC;">'GET&nbsp; /resources (no key)'</span>: respondsWith<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">403</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;</div>
</div>
</div>
<p>The website itself goes into exquisite detail on the install process, sample usage, and more. The website also happens to be beautiful itself, and full of HTML5 markup to boot.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=G090uZxNuyw:YkgL21I31g0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=G090uZxNuyw:YkgL21I31g0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=G090uZxNuyw:YkgL21I31g0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=G090uZxNuyw:YkgL21I31g0:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/keep-your-vows-keeping-wed-to-node/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/keep-your-vows-keeping-wed-to-node</feedburner:origLink></item>
		<item>
		<title>The death of the pixel as we know it; The new DPI web</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/PRqIWeZ0xtw/the-death-of-the-pixel-as-we-know-it-the-new-dpi-web</link>
		<comments>http://ajaxian.com/archives/the-death-of-the-pixel-as-we-know-it-the-new-dpi-web#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:17:25 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9739</guid>
		<description><![CDATA[The Web used to be so simple. Browser request goes to server, where you do some work, and return some HTML. Then we got Ajax and finally web apps could have some semblance of UI responsiveness. Now we have richer HTML5 technologies to change expectations of our users once again.
The Web is getting some new [...]]]></description>
			<content:encoded><![CDATA[<p>The Web used to be so simple. Browser request goes to server, where you do some work, and return some HTML. Then we got Ajax and finally web apps could have some semblance of UI responsiveness. Now we have richer HTML5 technologies to change expectations of our users once again.</p>
<p>The Web is getting some new DPI love, and the new iPhone 4 display personifies this fact. The new display is fantastic for the consumer, and an opportunity for the design enlightened to build truly beautiful web sites. There is a big difference:</p>
<p><img src="http://aralbalkan.com/images/retina-vs-regular.png"/></p>
<p>However, how do we as developers deal with this new world?</p>
<p><a href="http://aralbalkan.com/3331">Aral Balkan</a> has a nice post that goes into detail on the new opportunity and shares samples and ideas.</p>
<p>As with so many things on the Web, some of this has been thought of a loooong time ago. Dave Hyatt wrote about this <a href="http://webkit.org/blog/55/high-dpi-web-sites/">back in 2006</a>.</p>
<p>Walt Dickinson put together a <a href="http://blog.iwalt.com/2010/06/targeting-the-iphone-4-retina-display-with-css3-media-queries.html">guide to the retina display and using CSS3 media queries</a>:</p>
<div class="igBar"><a href="javascript:showCodeTxt('css-27');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">CSS:</span>
<div id="css-27">
<div class="css">
&lt;link rel=<span style="color: #ff0000;">"stylesheet"</span><br />
&nbsp; &nbsp; type=<span style="color: #ff0000;">"text/css"</span><br />
&nbsp; &nbsp; href=<span style="color: #ff0000;">"/css/retina.css"</span><br />
&nbsp; &nbsp; media=<span style="color: #ff0000;">"only screen and (-webkit-min-device-pixel-ratio: 2)"</span><br />
/&gt;<br />
&nbsp;</div>
</div>
</div>
<p>Aral explains that "in the Retina-specific CSS, he loads in 32x32 icons as background images and specifies their dimensions in CSS pixels as 16x16 using the background-size CSS property."</p>
<p>It is interesting to see a device pixel ratio used rather than specifying a DPI itself.</p>
<p>What else can be done to help folks in this new world?</p>
<p>Aral talks about how the browser could natively help via convention:</p>
<blockquote><p>
I'd like to suggest that browsers adopt the same naming convention that Cocoa Touch uses to find and load high-DPI versions of image and video assets. That is, if I embed an image using the following code…</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-28');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-28">
<div class="html">
<span style="color: #009900;"><a href="http://december.com/html/4/element/img.html"><span style="color: #000000; font-weight: bold;">&lt;img</span></a> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"flower.jpg"</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">"A beautiful rose"</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></a></span><br />
&nbsp;</div>
</div>
</div>
<p>… it should load in flower.jpg when the device-pixel-ratio is 1 but it should attempt to find an image called flower@2x.jpg at the same relative path if device-pixel-ratio is 2 (and so on, for higher pixel-ratios), falling back to the original graphic if it can't find a high-resolution version.</p>
<p>(And the same convention could be used to load video assets.)
</p></blockquote>
<p>Maybe there are server side techniques that could be put in place to automatically serve up the most optimized image for a given DPI. This would stop a bunch of 404s, but requires more work on the part of the server monkey.</p>
<p>This is good news for SVG and libraries like Raphael, who are well suited for scaling. When playing with an iPhone 4 it was amazing how quickly you noticed the bitmaps that were too low res... they stick out like a sore thumb. Expectations have changed.</p>
<p>What else can we do?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=PRqIWeZ0xtw:bWwKl3pzm0s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=PRqIWeZ0xtw:bWwKl3pzm0s:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=PRqIWeZ0xtw:bWwKl3pzm0s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=PRqIWeZ0xtw:bWwKl3pzm0s:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/the-death-of-the-pixel-as-we-know-it-the-new-dpi-web/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/the-death-of-the-pixel-as-we-know-it-the-new-dpi-web</feedburner:origLink></item>
		<item>
		<title>jQuery.fn.webkitTransform: bananas on the skew-whiff</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/QyM5UJQZeTg/jquery-fn-webkittransform-bananas-on-the-skew-whiff</link>
		<comments>http://ajaxian.com/archives/jquery-fn-webkittransform-bananas-on-the-skew-whiff#comments</comments>
		<pubDate>Wed, 30 Jun 2010 12:01:09 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9725</guid>
		<description><![CDATA[
Franz Enzenhofer has created a nice new webkitTransform plugin that helps you manage transforms and state.
Franz tells us more:

With jQuery.css you can't easily change the webkitTransform CSS because webkitTransform is not your average CSS.
If in one step you add .css('-webkit-transform', "rotate(20deg)") and in the next step .css('-webkit-transform', "scale(2.0)") the rotate value gets reset, as you [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facesaerch.com/banana.html"><img src="http://ajaxian.com/wp-content/images/bananacss3.png" alt="" title="bananacss3" width="690" height="425" class="alignnone size-full wp-image-9726" /></a></p>
<p>Franz Enzenhofer has created a nice new <a href="http://www.facesaerch.com/banana.html">webkitTransform</a> plugin that helps you manage transforms and state.</p>
<p>Franz tells us more:</p>
<blockquote><p>
With jQuery.css you can't easily change the webkitTransform CSS because webkitTransform is not your average CSS.</p>
<p>If in one step you add <code>.css('-webkit-transform', "rotate(20deg)")</code> and in the next step <code>.css('-webkit-transform', "scale(2.0)")</code> the rotate value gets reset, as you have rewritten the complete -webkit-transform CSS value. </p>
<p>You could use the WebKitCSSMatrix javascript element, but it's currently buggy, not consistently implemented and a pain to use. </p>
<p>Additionally you can't just retrieve the '-webkit-transform' css with .css('-webkit-transform') as this just gives a matrix code.</p>
<p>Our goal with webkitTransform() was to fix this problem. With it, every element you assign webkit-transform css with can be edited in a simple way, without resetting every other -webkit-transform values.</p>
<blockquote></blockquote>
</blockquote>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=QyM5UJQZeTg:WjX0QHTp7-8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=QyM5UJQZeTg:WjX0QHTp7-8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=QyM5UJQZeTg:WjX0QHTp7-8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=QyM5UJQZeTg:WjX0QHTp7-8:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jquery-fn-webkittransform-bananas-on-the-skew-whiff/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/jquery-fn-webkittransform-bananas-on-the-skew-whiff</feedburner:origLink></item>
		<item>
		<title>HTML5 Video; YouTube Perspective</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/HAzL0cjotUQ/html5-video-youtube-perspective</link>
		<comments>http://ajaxian.com/archives/html5-video-youtube-perspective#comments</comments>
		<pubDate>Wed, 30 Jun 2010 11:16:41 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9723</guid>
		<description><![CDATA[The YouTube API blog put their point of view on HTML5 video on the table. I would love to know why they felt like this was the right time, and what their angle is. I find myself often confused with the Google strategy. On one hand they are doing amazing things for the Open Web [...]]]></description>
			<content:encoded><![CDATA[<p>The YouTube API blog <a href="http://apiblog.youtube.com/2010/06/flash-and-html5-tag.html">put their point of view on HTML5 video</a> on the table. I would love to know why they felt like this was the right time, and what their angle is. I find myself often confused with the Google strategy. On one hand they are doing amazing things for the Open Web (Chrome, tools, Steve Souders and Web performance work), but on the other we see an alignment with Adobe and Flash (a differentiator to Apple).</p>
<p>Man, I am torn. The pragmatist totally gets it. But the guy who realizes that it was the Web openness that allowed the likes of Google come from nothing to the powerhouse that it is today in a decade, gets confused.</p>
<p>If you are a Flash fan you see this as "see! Flash is here to stay!" As someone who wants to see the Web standards get better fast, we see some of the momentum (fact that we have audio and video, and the WebM codec) and features that we need to get in:</p>
<blockquote><p>
<b>Robust video streaming</b></p>
<p>Closely related to the need for a standard format is the need for an effective and reliable means of delivering the video to the browser. Simply pointing the browser at a URL is not good enough, as that doesn't allow users to easily get to the part of the video they want. As we’ve been expanding into serving full-length movies and live events, it also becomes important to have fine control over buffering and dynamic quality control. Flash Player addresses these needs by letting applications manage the downloading and playback of video via Actionscript in conjunction with either HTTP or the RTMP video streaming protocol. The HTML5 standard itself does not address video streaming protocols, but a number of vendors and organizations are working to improve the experience of delivering video over HTTP. We are beginning to contribute to these efforts and hope to see a single standard emerge.</p>
<p><b>Content Protection</b></p>
<p>YouTube doesn't own the videos that you watch - they're owned by their respective creators, who control how those videos are distributed through YouTube. For YouTube Rentals, video owners require us to use secure streaming technology, such as the Flash Platform's RTMPE protocol, to ensure their videos are not redistributed. Without content protection, we would not be able to offer videos like this.</p>
<p><b>Encapsulation + Embedding</b></p>
<p>Flash Player's ability to combine application code and resources into a secure, efficient package has been instrumental in allowing YouTube videos to be embedded in other web sites. Web site owners need to ensure that embedded content is not able to access private user information on the containing page, and we need to ensure that our video player logic travels with the video (for features like captions, annotations, and advertising). While HTML5 adds sandboxing and message-passing functionality, Flash is the only mechanism most web sites allow for embedded content from other sites.</p>
<p><b>Fullscreen Video</b></p>
<p>HD video begs to be watched in full screen, but that has not historically been possible with pure HTML. While most browsers have a fullscreen mode, they do not allow javascript to initiate it, nor do they allow a small part of the page (such as a video player) to fill the screen. Flash Player provides robust, secure controls for enabling hardware-accelerated fullscreen displays. While WebKit has recently taken some steps forward on fullscreen support, it's not yet sufficient for video usage (particularly the ability to continue displaying content on top of the video).</p>
<p><b>Camera and Microphone access</b></p>
<p>Video is not just a one-way medium. Every day, thousands of users record videos directly to YouTube from within their browser using webcams, which would not be possible without Flash technology. Camera access is also needed for features like video chat and live broadcasting - extremely important on mobile phones which practically all have a built-in camera. Flash Player has provided rich camera and microphone access for several years now, while HTML5 is just getting started.
</p></blockquote>
<p>Time to knuckle down and deliver great new video features in the browsers!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=HAzL0cjotUQ:-gRXLRKMN2U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=HAzL0cjotUQ:-gRXLRKMN2U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=HAzL0cjotUQ:-gRXLRKMN2U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=HAzL0cjotUQ:-gRXLRKMN2U:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/html5-video-youtube-perspective/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/html5-video-youtube-perspective</feedburner:origLink></item>
		<item>
		<title>IE9 gets a Web Timing API to measure performance</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/Yv7I5E-4gGg/ie9-gets-a-web-timing-api-to-measure-performance</link>
		<comments>http://ajaxian.com/archives/ie9-gets-a-web-timing-api-to-measure-performance#comments</comments>
		<pubDate>Wed, 30 Jun 2010 08:15:36 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ie9]]></category>
		<category><![CDATA[webtiming]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9734</guid>
		<description><![CDATA[Web site performance is a very important topic. We should not let our end users wait for our sites and optimizing them for load time and rendering can save us thousands of dollars in traffic. There is a lot of great content out there on performance (spearheaded by Yahoo a few years back). When it [...]]]></description>
			<content:encoded><![CDATA[<p>Web site performance is a very important topic. We should not let our end users wait for our sites and optimizing them for load time and rendering can save us thousands of dollars in traffic. There is a lot of great content out there on performance (spearheaded by <a href="http://developer.yahoo.com/performance/">Yahoo</a> a few years back). When it comes to testing the performance after the page has loaded though there is a lot of things you can do wrong as you need to test things with timers and hope nothing else happening to your test machine interferes with your results. </p>
<p>The IE9 team wants to make it easier for developers and added a new Web Timing API in the browser. <a href="http://dev.w3.org/2006/webapi/WebTiming/">Web Timing</a> is a W3C working draft and the API implemented the NavigationTiming part of the spec in <code>window.msPerformance.timing</code> and offers you a few sets of information without having to hack your own solution:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-31');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-31">
<div class="javascript">interface MSPerformanceTiming<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong navigationStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong fetchStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong unloadStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong unloadEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domainLookupStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domainLookupEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong connectStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong connectEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong requestStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong requestEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong responseStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong responseEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domLoading;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domInteractive;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domContentLoaded;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domComplete;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong loadStart;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong loadEnd;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong firstPaint;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong fullyLoaded;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p>You have even more granular control in <code>timingMeasures</code></p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-32');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-32">
<div class="javascript">interface MSPerformanceTimingMeasures<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong navigation;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong fetch;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong unload;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domainLookup;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong connect;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong request;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong response;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domLoading;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domInteractive;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domContentLoaded;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong domComplete;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong load;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong firstPaint;<br />
&nbsp; &nbsp; &nbsp;readonly attribute unsigned longlong fullyLoaded;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p>Read <a href="http://blogs.msdn.com/b/ie/archive/2010/06/28/measuring-web-page-performance.aspx">the original post on MSDN</a> and <a href="http://ie.microsoft.com/testdrive/Performance/msPerformance/Default.html">check out the demo on IE Test Drive</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=Yv7I5E-4gGg:VGS-N8Rv9-A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Yv7I5E-4gGg:VGS-N8Rv9-A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=Yv7I5E-4gGg:VGS-N8Rv9-A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=Yv7I5E-4gGg:VGS-N8Rv9-A:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ie9-gets-a-web-timing-api-to-measure-performance/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/ie9-gets-a-web-timing-api-to-measure-performance</feedburner:origLink></item>
		<item>
		<title>ChromeKit: Some folk love putting windows in browsers</title>
		<link>http://feedproxy.google.com/~r/ajaxian/~3/-vdWnDTzSAM/chromekit-some-folk-love-putting-windows-in-browsers</link>
		<comments>http://ajaxian.com/archives/chromekit-some-folk-love-putting-windows-in-browsers#comments</comments>
		<pubDate>Tue, 29 Jun 2010 11:10:58 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9713</guid>
		<description><![CDATA[The awesome Guillermo Rauch and Nathan White have taken one of the Web code katas and played with it. Before the Web we had [wW]indows. Maybe that is why developers are keen to implement windows within the Web page, mainly to see if it can be done. We had the great Emil and Erik building [...]]]></description>
			<content:encoded><![CDATA[<p>The awesome Guillermo Rauch and Nathan White have taken one of the Web code katas and played with it. Before the Web we had [wW]indows. Maybe that is why developers are keen to implement windows within the Web page, mainly to see if it can be done. We had the great <a href="http://eae.net/">Emil and Erik</a> building desktops on the Web before we were in Web nappies. Now we have Ext Desktop, and many more.</p>
<p>The latest fun from Guillermo and Nathan is <a href="http://github.com/guille/chromekit">ChromeKit</a>, which gives you windows that look like Google Chrome.</p>
<p>The one tweak to the code kata this time around, is their use of CSS3 goodness to <a href="http://devthought.com/wp-content/projects/chromekit/#">show off skewing windows</a> as they are tiled together.</p>
<p><a href="http://github.com/guille/chromekit"><img src="http://ajaxian.com/wp-content/images/chromekit.png" alt="" title="chromekit" width="460" height="259" class="alignnone size-full wp-image-9714" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ajaxian?a=-vdWnDTzSAM:t9UBxwu8Bn8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=-vdWnDTzSAM:t9UBxwu8Bn8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/ajaxian?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ajaxian?a=-vdWnDTzSAM:t9UBxwu8Bn8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ajaxian?i=-vdWnDTzSAM:t9UBxwu8Bn8:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/chromekit-some-folk-love-putting-windows-in-browsers/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://ajaxian.com/archives/chromekit-some-folk-love-putting-windows-in-browsers</feedburner:origLink></item>
	</channel>
</rss>
