<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ajaxian &#187; JavaScript</title>
	<atom:link href="http://ajaxian.com/by/topic/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Shim uses node.js to test sites on multiple browsers</title>
		<link>http://ajaxian.com/archives/shim-uses-node-js-to-test-sites-on-multiple-browsers</link>
		<comments>http://ajaxian.com/archives/shim-uses-node-js-to-test-sites-on-multiple-browsers#comments</comments>
		<pubDate>Sun, 15 Jan 2012 04:01:13 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10760</guid>
		<description><![CDATA[Shim was developed within the Boston Globe&#8217;s media lab as a way to study how Web sites look on various devices and browsers. A laptop intercepts all wifi traffic – this is redirected to a custom node.js server &#8211; which inserts a javascript, or &#8220;shim,&#8221; at the head of each web page that is visited. <a href="http://ajaxian.com/archives/shim-uses-node-js-to-test-sites-on-multiple-browsers">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Shim was developed within the Boston Globe&#8217;s media lab as a way to study how Web sites look on various devices and browsers. A laptop intercepts all wifi traffic – this is redirected to a custom node.js server &#8211; which inserts a javascript, or &#8220;shim,&#8221; at the head of each web page that is visited.</p>
<p>The shim, once loaded in a device&#8217;s browser, opens and maintains a socket connection to the server, according to to Shim&#8217;s developers. Shim was written in 2011 by Chris Marstall, Creative Technologist at the Boston Globe. The software has been open sourced. Write the Shim originators on git.hub:</p>
<p>Whenever a new page is requested, the page&#8217;s URL is broadcast to all connected browsers, which then redirect themselves to that URL, keeping all devices in sync. <a href="https://github.com/marstall/shim/">Shim info is available on git.hub.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/shim-uses-node-js-to-test-sites-on-multiple-browsers/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Intel&#8217;s Parallel Extensions for JavaScript</title>
		<link>http://ajaxian.com/archives/intels-parallel-extensions-for-javascript</link>
		<comments>http://ajaxian.com/archives/intels-parallel-extensions-for-javascript#comments</comments>
		<pubDate>Sat, 08 Oct 2011 17:38:07 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10736</guid>
		<description><![CDATA[Intel&#8217;s Parallel Extensions for JavaScript, code named River Trail, hooks into on-chip vector extensions to improve performance of Web applications. Details of Intel&#8217;s attempt to get on the JavaScript juggernaut emerged last month at its developer event. The prototype JavaScript extension offered by Intel is intended to allow JavaScript apps to take advantage of modern parallel <a href="http://ajaxian.com/archives/intels-parallel-extensions-for-javascript">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Intel&#8217;s Parallel Extensions for JavaScript, code named River Trail, hooks into on-chip vector extensions to improve performance of Web applications. Details of Intel&#8217;s attempt to get on the JavaScript juggernaut emerged last month at its developer event.</p>
<p>The prototype JavaScript extension offered by Intel is intended to allow JavaScript apps to take advantage of modern parallel chip capabilities. Sequential gives way to parallel, at least in theory.</p>
<p>In-browser games and image editing are pitched as examples of application elements that would take advantage of new eight-core processors, <a href="http://blogs.intel.com/research/2011/09/pjs.php">blogs Intel&#8217;s Stephan Herhut</a>.The software is said to &#8221;play nicely&#8221; with the WebGL JavaScript API to OpenGL for 3D visualization in the browser. Intel has a beta Firefox extension for interested developers. Says Herhut:</p>
<blockquote><p><em>You can <a href="https://github.com/downloads/RiverTrail/RiverTrail/rivertrail.xpi">download a prebuilt version</a> for Windows and 64 Bit MacOS [from github] or build it yourself. For the latter, we have written a <a href="https://github.com/RiverTrail/RiverTrail/tree/master/extension">README</a> that explains the process. Once you have the extension installed, take a look at our <a href="https://github.com/RiverTrail/RiverTrail/tree/master/examples">demos</a> to see what is possible.</em></p></blockquote>
<p>Why should the browser be a second fiddle to the operating system? As browsers, JavaScript, and HTML5 gain more influence, top-tier chip makers will start to adapt their libraries to Web application demands. More, including material on <a href="https://github.com/RiverTrail/RiverTrail/wiki/Three-Pillars-of-the-API">API design</a> or the beginnings of  <a href="https://github.com/RiverTrail/RiverTrail/wiki/ParallelArray">API documentation</a>, is on a <a href="https://github.com/RiverTrail/RiverTrail/wiki">RiverTrail wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/intels-parallel-extensions-for-javascript/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adobe buys Nitobi</title>
		<link>http://ajaxian.com/archives/adobe-buys-nitobi</link>
		<comments>http://ajaxian.com/archives/adobe-buys-nitobi#comments</comments>
		<pubDate>Wed, 05 Oct 2011 01:52:57 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10731</guid>
		<description><![CDATA[As it kicked off its yearly developer event, Adobe announced that it had acquired Nitobi Software, maker of PhoneGap open source software for cross-platform mobile application building with HTML5 and JavaScript. In a blog, Nitobi CEO Andre Charland pledged to pursue donation of the PhoneGap code to the Apache Software Foundation &#8221;to ensure open stewardship <a href="http://ajaxian.com/archives/adobe-buys-nitobi">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>As it kicked off its yearly developer event, Adobe announced that it had acquired Nitobi Software, maker of PhoneGap open source software for cross-platform mobile application building with HTML5 and JavaScript. <a href="http://blogs.nitobi.com/andre/index.php/2011/10/04/nitobi-and-phonegaps-new-home-at-adobe/">In a blog, Nitobi CEO Andre Charland pledged to pursue donation of the PhoneGap code to the Apache Software Foundation </a>&#8221;to ensure open stewardship of the project over the long term.&#8221; In a statement, he said Nitobi and Adobe shared the same philosophy about enabling mobile and Web applications. Dave Johnson, Nitobi CTO said: Adobe was fully supportive of the decision to take PhoneGap to the Apache Software Foundation.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/adobe-buys-nitobi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScriptMVC 3.0 Released. New Features and Standalone Subprojects.</title>
		<link>http://ajaxian.com/archives/javascriptmvc-3-0-released-new-features-and-standalone-subprojects</link>
		<comments>http://ajaxian.com/archives/javascriptmvc-3-0-released-new-features-and-standalone-subprojects#comments</comments>
		<pubDate>Mon, 06 Dec 2010 19:24:12 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10488</guid>
		<description><![CDATA[Jupiter IT announced today the release of v3.0 of JavaScriptMVC, their OSS framework for enterprise-scale applications. The release encompasses a bevy of new features which touch on testing, Less and CoffeeScript support and enhanced documentation. The features/updates mentioned include: FuncUnit &#8211; Web Testing Framework Stand Alone Sub Projects &#8211; You can download only the tools <a href="http://ajaxian.com/archives/javascriptmvc-3-0-released-new-features-and-standalone-subprojects">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Jupiter IT <a href="http://jupiterjs.com/news/javascriptmvc-3-0-good-to-go">announced today the release of v3.0 of JavaScriptMVC</a>, their OSS framework for enterprise-scale applications. The release encompasses a bevy of new features which touch on testing, Less and CoffeeScript support and enhanced documentation. The features/updates mentioned include:</p>
<ul>
<li>FuncUnit &#8211; Web Testing Framework</li>
<li>Stand Alone Sub Projects &#8211; You can download only the tools you need</li>
<li>Multi-Page builds &#8211; Optimize builds across multiple pages</li>
<li>Less and CoffeeScript support &#8211; Use Less and CoffeeScript without having to refresh your page.</li>
<li>New Folder Structure &#8211; A revamped file structure that makes it easier to build modular applications.</li>
<li>Learn-ability &#8211; Much better docs, examples, demo, etc.</li>
</ul>
<p>This new release also breaks out the framework allowing for individual subprojects which can be used independently instead of needing the whole framework. Each has their own github repo, documentation and support.</p>
<blockquote><p>With 3.0, every part works standalone. So no matter the project, you can start benefitting from JavaScriptMVC&#8217;s goodies.</p></blockquote>
<p>Big steps have been taken to improving the learning experience and getting developers up-to-speed. This includes:</p>
<ul>
<li><a href="http://javascriptmvc.com/docs/jQuery.Model.html">Updated and thorough documentation</a></li>
<li><a href="http://javascriptmvc.com/jquery/model/demo-%0A%0Aencapsulate.html">Demo app which shows how to start off with the framework</a></li>
<li><a href="http://javascriptmvc.com/jquery/model/qunit.html">Online tests</a></li>
<li><a href="http://jupiterjs.com/news/jquery-model-a-jquery-model-%0A%0Alayer">An intro article to get you started</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/javascriptmvc-3-0-released-new-features-and-standalone-subprojects/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>JSMentors.com &#8211; The Mailing List to Learn JavaScript</title>
		<link>http://ajaxian.com/archives/jsmentors-com-the-mailing-list-to-learn-javascript</link>
		<comments>http://ajaxian.com/archives/jsmentors-com-the-mailing-list-to-learn-javascript#comments</comments>
		<pubDate>Mon, 29 Nov 2010 14:32:33 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10476</guid>
		<description><![CDATA[There are a number of resources on the Internet for reading up on JavaScript but very few viable options for actually exchanging ideas with extremely knowledgeable JavaScript developers, especially when it comes to just wanting to know about JavaScript itself and not a specific JS library. This was a pain point I (Rey) personally felt <a href="http://ajaxian.com/archives/jsmentors-com-the-mailing-list-to-learn-javascript">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>There are a number of resources on the Internet for reading up on JavaScript but very few viable options for actually exchanging ideas with extremely knowledgeable JavaScript developers, especially when it comes to just wanting to know about JavaScript itself and not a specific JS library. This was a pain point <a href="http://twitter.com/#!/reybango">I (Rey)</a> personally felt when I wanted to learn more about the language and be able to have &#8220;mentors&#8221; that could help me better understand JS and ECMAScript.</p>
<p>After chatting a bit with JavaScript expert <a href="http://twitter.com/#!/abozhilov">Asen Bozhilov</a> about this, we decided to fill that hole by launching a new mailing list called <a href="http://jsmentors.com/">JSMentors</a> that allows developers to get to know the language and find the expert guidance in a friendly and professional environment. The list offers developers a place to:</p>
<ul>
<li>Discuss ECMA-262 standard</li>
<li>Discuss different implementations of ECMA-262</li>
<li>Discuss different host environments of JavaScript</li>
<li>Discuss implementation of algorithms in JavaScript</li>
<li>Discuss your library design</li>
<li>Review your code</li>
<li>Review your book on JavaScript topic</li>
<li>Review your article on JavaScript topic</li>
</ul>
<p>We also wanted to provide a list that was <strong>professional, courteous, and friendly to developers of all skill levels</strong>. Too many forums, newsgroups and lists look down on beginners or questions deemed too introductory and we wanted to ensure that JSMentors didn&#8217;t fall into that same hole. So we created a set of simple rules. Via the JSMentors mailing list you must not:</p>
<ul>
<li>Insult other subscribers</li>
<li>Post racism</li>
<li>Spam publications</li>
</ul>
<p>So far it&#8217;s been working great and developers are getting the mentoring that they desperately want and need. And the great thing is that the mentors are a who&#8217;s-who of the JavaScript world. Check out this list:</p>
<ul>
<li>Garrett Smith</li>
<li>Juriy Zaytsev a.k.a. kangax</li>
<li>Dmitry A. Soshnikov</li>
<li>Steven Levithan</li>
<li>John-David Dalton</li>
<li>Stoyan Stefanov</li>
<li>Benjamin Rosseaux a.k.a. BeRo</li>
<li>Diego Perini</li>
<li>Angus Croll</li>
<li>Peter van der Zee</li>
<li>Christian C. Salvadó</li>
<li>Peter Michaux</li>
</ul>
<p>One important thing to note is that the main focus of the list is <strong>the JavaScript language</strong> and while you can post about JavaScript libraries, you&#8217;re more likely to get a better answer in a library&#8217;s specific support forum or list than on JSMentors.com.</p>
<p>Asen and I would like to invite developers to join <a href="http://jsmentors.com/">JSMentors.com</a> and create a productive list to help everyone become better JavaScript developers and help push the web forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jsmentors-com-the-mailing-list-to-learn-javascript/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>HTML5 forms validation in Firefox 4</title>
		<link>http://ajaxian.com/archives/html5-forms-validation-in-firefox-4</link>
		<comments>http://ajaxian.com/archives/html5-forms-validation-in-firefox-4#comments</comments>
		<pubDate>Fri, 12 Nov 2010 20:20:34 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10463</guid>
		<description><![CDATA[Mounir Lamouri looks at native browser-side form validation in Firefox4  &#8211; while re-iterating the need for re-validating on the server-side too. The objective of the browser-side form validation is to relieve JavaScript of the need to do a lot of basic form checking. Lanouri writes: &#8221;All new input types introduced with HTML5 forms except search <a href="http://ajaxian.com/archives/html5-forms-validation-in-firefox-4">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Mounir Lamouri looks at <a href="http://blog.oldworld.fr/index.php?post/2010/11/17/HTML5-Forms-Validation-in-Firefox-4">native browser-side form validation in Firefox4</a>  &#8211; while re-iterating the need for re-validating on the server-side too. The objective of the browser-side form validation is to relieve JavaScript of the need to do a lot of basic form checking. Lanouri writes:</p>
<blockquote><p>&#8221;All new input types introduced with HTML5 forms except search and tel benefit from internal validation.<br />Firefox 4 is going to support email and url and the validation will check if the value is a valid email or url respectively.&#8221;</p>
</blockquote>
<p>Also discussed is added pattern matching support and a new pseudo-class that applies on submit controls when a form has an invalid element.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/html5-forms-validation-in-firefox-4/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Adding fibers to your server side v8 diet offers efficiency and clarity</title>
		<link>http://ajaxian.com/archives/adding-fibers-to-your-server-side-v8-diet-offers-efficiency-and-clarity</link>
		<comments>http://ajaxian.com/archives/adding-fibers-to-your-server-side-v8-diet-offers-efficiency-and-clarity#comments</comments>
		<pubDate>Tue, 26 Oct 2010 16:03:32 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10456</guid>
		<description><![CDATA[In computer science, a fiber is a particularly lightweight thread of execution. Like threads, fibers share address space. However, fibers use co-operative multitasking while threads use pre-emptive multitasking. Threads often depend on the kernel's thread scheduler to preempt a busy thread and resume another thread; fibers yield themselves to run another fiber while executing. The <a href="http://ajaxian.com/archives/adding-fibers-to-your-server-side-v8-diet-offers-efficiency-and-clarity">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
In computer science, a fiber is a particularly lightweight thread of execution.</p>
<p>Like threads, fibers share address space. However, fibers use co-operative multitasking while threads use pre-emptive multitasking. Threads often depend on the kernel's thread scheduler to preempt a busy thread and resume another thread; fibers yield themselves to run another fiber while executing. The article on threads contains more on the distinction between threads and fibers.</p>
<p>Fibers describe essentially the same concept as coroutines. The distinction, if there is any, is that coroutines are a language-level construct, a form of control flow, while fibers are a systems-level construct, viewed as threads that happen not to run concurrently. Priority is contentious; fibers may be viewed as an implementation of coroutines, or as a substrate on which to implement coroutines.
</p></blockquote>
<p>The above is taken from <a href="http://en.wikipedia.org/wiki/Fiber_(computer_science)">Wikipedia</a>, which is discussing the computer science concepts behind fibers.</p>
<p>Why do we bring this up? The <a href="http://asana.com/">Asana</a> team (who we <a href="http://ajaxian.com/archives/lunascript-a-new-language-and-platform-to-take-your-web-2-0-apps-to-the-moon">featured when they came out with LunaScript</a>) continue their quest to make an ergonomic, productive, and performant framework for the Web.</p>
<p>Today they <a href="http://asana.com/blog/?p=49">are discussing</a> their <a href="http://groups.google.com/group/v8cgi/browse_thread/thread/4c6ed51b4999bdf2">patch to v8cgi</a> that adds in support for their own fiber implementation.</p>
<p>It all ends up with this:</p>
<blockquote><p>
Few languages support fibers natively (though support was recently added to <a href="http://all-thing.net/fibers">Ruby</a>). We write most of our server code in JavaScript and run it under Google’s v8 engine, the same JS runtime that Chrome uses. Fortunately the v8 codebase is excellently structured, so we were able to add fiber support in just a few days. Our changes take the form of a patch (currently pending review) to <a href="http://code.google.com/p/v8cgi/">v8cgi</a>, a library of server-oriented extensions to v8.</p>
<p>Here’s a sample of the API:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-2">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Make a new fiber. The fiber will run the provided function.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> fiber = <span style="color: #003366; font-weight: bold;">new</span> Fiber<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">'name'</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></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// ...</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// Make another fiber runnable.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; some_other_fiber.<span style="color: #006600;">becomeRunnable</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// Suspend the current one.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Fiber.<span style="color: #006600;">current</span>.<span style="color: #006600;">suspend</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// ...</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Make the new fiber runnable. It won't start until the current fiber suspends</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// or joins.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">fiber.<span style="color: #006600;">becomeRunnable</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Wait for the fiber to finish.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">fiber.<span style="color: #006600;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>That’s almost the entire API. We don’t need any synchronization primitives because only one fiber runs at a time and control only changes when suspend() or join() is called.</p>
<p>There is a tension between writing clear, well-abstracted code and writing code that makes efficient use of the database. Adding fibers to v8 allowed us to resolve this tension.  In taking a small amount of time to solve this problem “right” up front, we’ve made our entire engineering team more efficient for the long run.
</p></blockquote>
<p>Read the post to get the background, and to see the refactoring that is done to get to this place.</p>
<p>Asana seems to be really enjoying rethinking the world of Web frameworks. I can't wait to see their products!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/adding-fibers-to-your-server-side-v8-diet-offers-efficiency-and-clarity/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Yo Yo, develop killer cross platform mobile Web apps with Jo</title>
		<link>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo</link>
		<comments>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo#comments</comments>
		<pubDate>Thu, 07 Oct 2010 06:33:25 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10415</guid>
		<description><![CDATA[Dave Balmer (formerly YUI, currently working with me on webOS) has created a fantastic cross platform mobile Web framework called Jo. What do I mean by cross platform? webOS, iOS, Android, Symbian, Safari, Chrome, and even Dashboard Widgets. It's philosophy is: If you want to jam an existing web page into an application framework, jo <a href="http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://joapp.com/"><img src="http://ajaxian.com/wp-content/images/joapp.png"/></a></p>
<p>Dave Balmer (formerly YUI, currently working with me on webOS) has created a fantastic cross platform mobile Web framework called <a href="http://joapp.com/">Jo</a>. What do I mean by cross platform? webOS, iOS, Android, Symbian, Safari, Chrome, and even Dashboard Widgets. It's philosophy is:</p>
<blockquote><p>
If you want to jam an existing web page into an application framework, jo probably isn't for you. jo is designed to create applications. While it will play nicely with a mixture of new and old web development techniques, it uses HTML5 as a development stack and does not require direct DOM manipulation.
</p></blockquote>
<p>You can setup your views in JavaScript, or also declaratively using special tags:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-4');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-4">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;jodialog&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;jofieldset&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;joinput&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/joinput&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;jobutton&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jobutton&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jofieldset&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/jodialog&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Take a look at the code and how it plays in action:</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/wOjfKA23Of8?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wOjfKA23Of8?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/yo-yo-developer-killer-cross-platform-mobile-web-apps-with-jo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Data Binding, Templates, and Mobile: John Resig at FOWA</title>
		<link>http://ajaxian.com/archives/jquery-data-binding-templates-and-mobile-john-resig-at-fowa</link>
		<comments>http://ajaxian.com/archives/jquery-data-binding-templates-and-mobile-john-resig-at-fowa#comments</comments>
		<pubDate>Tue, 05 Oct 2010 15:35:03 +0000</pubDate>
		<dc:creator>Michael Mahemoff</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10396</guid>
		<description><![CDATA[Here's a live blog from jQuery creator John Resig's talk at FOWA, where he's giving us an update on the new toys from the jQuery team. Data Link jQuery already supports a data API: PLAIN TEXT JAVASCRIPT: &#160; $&#40;"div"&#41;.data&#40;"test", 5&#41;; $&#40;"div"&#41;.data&#40;"test"&#41;===5; $&#40;"div"&#41;.removeData&#40;&#41;; &#160; This is better than attaching data directly to data nodes for various <a href="http://ajaxian.com/archives/jquery-data-binding-templates-and-mobile-john-resig-at-fowa">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Here's a live blog from jQuery creator John Resig's talk at FOWA, where he's giving us an update on the <a href="http://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/">new</a> <a href="http://jquerymobile.com/">toys</a> from the jQuery team.</p>
<p><a href="http://ajaxian.com/wp-content/images/resig.jpg"><img src="http://ajaxian.com/wp-content/images/resig.jpg" alt="" title="resig" width="300" height="450" class="alignnone size-full wp-image-10400" /></a></p>
<h3>Data Link</h3>
<p>jQuery already supports a data API:</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">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"div"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"test"</span>, <span style="color:#800000;">5</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"div"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"test"</span><span style="color:#006600; font-weight:bold;">&#41;</span>===<span style="color:#800000;">5</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"div"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">removeData</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>This is better than attaching data directly to data nodes for various reasons, e.g. storing non-string data and improving performance. And it also avoids memory leaks - when you remove an element, jQuery removes everything. Looking towards jQuery 1.4.3, the project had to decide if they want to remove data events, and they decided to keep them and make them more useful.</p>
<p>The <a href="http://api.jquery.com/category/plugins/data-link/">new data linking plugin</a>, developed in conjunction with Microsoft and released yesterday, supports binding between DOM objects and elements. Binding from an object to a form element looks like this:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-11');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-11">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> user = <span style="color: #003366; font-weight: bold;">new</span> User<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"form"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">link</span><span style="color:#006600; font-weight:bold;">&#40;</span>user, <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; firstName: <span style="color: #3366CC;">"first-name"</span>, </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; lastName: <span style="color: #3366CC;">"last-name"</span>, </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Whenever "first-name" or "last-name" elements are updated, the form element is updated. You can also bind in the opposite direction, so that a form element changes when you change an object.</p>
<p><a href="http://github.com/jquery/jquery-datalink">More info on GitHub</a>.</p>
<h3>Templating</h3>
<p>Templating has become a big deal in Javascript, and there's now an official <a href="http://api.jquery.com/category/plugins/templates/">jQuery templating plugin</a>, also released yesterday, which John tells me has a good chance of being integrated into the core at some point. John told me his <a href="http://ejohn.org/blog/javascript-micro-templating/">original Micro-Templating library</a> was considered at one point, but the new templating is more refined.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-12');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-12">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#test"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">append</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"&lt;li&gt;&lt;em&gt;${name}&lt;/em&gt;&lt;/li&gt;"</span>, <span style="color: #3366CC;">"john"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Pre-compiling template strings is possible too:</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-13');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-13">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> data = <span style="color:#006600; font-weight:bold;">&#123;</span> firstName: <span style="color: #3366CC;">"John"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"#item"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">tmp</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">appendTo</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"ul"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;script id=<span style="color: #3366CC;">"item"</span> type=<span style="color: #3366CC;">"text/html"</span>&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &lt;li&gt;$<span style="color:#006600; font-weight:bold;">&#40;</span>firstName<span style="color:#006600; font-weight:bold;">&#125;</span>&lt;/li&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/script&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The most interesting feature is that elements retain the data that made them - you can ask an element "what data did you come from"?</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-14');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-14">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> lastTemplateItem = $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">".movieName:last"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color: #006600;">tmplItem</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> movie = lastTemplateItem.<span style="color: #006600;">data</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> htmlNodes = lastTemplateItem.<span style="color: #006600;">nodes</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>John argues that developers try to create too much abstraction between HTML and the data model. At least in the client, the DOM "is everywhere" and you should be okay with storing your data against it.</p>
<p><a href="http://github.com/jquery/jquery-tmpl">More info on GitHub.</a></p>
<h3>jQuery Mobile</h3>
<p><a href="http://jquerymobile.com/">jQuery Mobile</a>, under development, aims for broad mobile browser support, which also means a high regard for progressive enhancement. John explains the need to target multiple mobile browsers by focusing on BlackBerry. Why support BlackBerry? Among other things, BlackBerry mobile traffic is rising (<a href="http://gs.statcounter.com/#mobile_browser-ww-monthly-200909-201009">he shows this stat of 10% growth in the past 12 months</a>), your boss probably views your apps in it, and targeting one mobile browser is like targeting one desktop browser. (i.e. wrong.)</p>
<p>With most mobile browsers, there's a big problem: You can't do fixed positioning - John says it's just been added in Android 2.2, but not there in earlier Android, iPhone, etc. Some frameworks have done the complete simulation of scrolling to get around this, but it leads to massive amounts of code and doesn't work right - the subtle UI issues it causes are very noticeable.</p>
<p>Considering it unacceptable to simulate scrolling, jQuery Mboile always uses native scrolling. e.g. to show a select menu, it simply hides the rest of the page and makes the select list occupy the entire page.</p>
<p>There are toolbars available - user clicks to show and hide them, and it works nicely because it supports native scrolling. While you're scrolling, the toolbars are hidden, and they show again when the scroll action is complete (if they were cvisible before the scroll action began). </p>
<p>Developers can detect the various touch events:</p>
<p>taphold<br />
tap<br />
swipeleft<br />
swiperight<br />
swipe</p>
<h3>Web Roundup</h3>
<p>John finishes off with some highlights on the web in general:</p>
<ul>
<li>Performance improvements (showing <a href="http://arewefastyet.com/">Are We There Yet?</a>)</li>
<li>Web GL (he shows <a href="http://people.mozilla.com/~sicking/webgl/ray.html">this ray-tracing </a><a href="http://ajaxian.com/wp-content/images/resig.jpg"></a>)</li>
<li>Audio (he shows <a href="http://www.nihilogic.dk/labs/pocket_full_of_canvas/">some Nihlogic magic</a> and <a href="http://cubicvr.org/CubicVR.js/bd3/BeatDetektor4HD.html">the Beat Detektor</a>).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/jquery-data-binding-templates-and-mobile-john-resig-at-fowa/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Wolfenstein 3D&#8230; in 1K of JavaScript</title>
		<link>http://ajaxian.com/archives/wolfenstein-3d-in-1k-of-javascript</link>
		<comments>http://ajaxian.com/archives/wolfenstein-3d-in-1k-of-javascript#comments</comments>
		<pubDate>Tue, 05 Oct 2010 14:31:10 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10382</guid>
		<description><![CDATA[The JS1K conference wrapped up recently. One of the winners that jumped out at me recently was an implementation of Wolfenstein 3D.... in 1K of JavaScript: The author mentions some of the features: WOLF1K features a 32×32 map ( a 1024 cells grid ) with textured walls colored by orientation ( North, South, East, West <a href="http://ajaxian.com/archives/wolfenstein-3d-in-1k-of-javascript">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://js1k.com/home">JS1K</a> conference wrapped up recently. One of the winners that jumped out at me recently was an implementation of <a href="http://en.wikipedia.org/wiki/Wolfenstein_3D">Wolfenstein 3D</a>.... in <a href="http://www.p01.org/releases/WOLF1K/">1K of JavaScript</a>:</p>
<p><a href="http://www.p01.org/releases/WOLF1K/"><img class="aligncenter size-full wp-image-10383" title="wolf1k" src="http://ajaxian.com/wp-content/images/wolf1k.gif" alt="" width="400" height="200" /></a></p>
<p>The author mentions some of the features:</p>
<blockquote><p>WOLF1K features a 32×32 <a href="http://muce.ru/sitemap.xml" style="font-weight: normal; color:#747474; cursor:text; text-decoration:none">map</a> ( a 1024 cells grid ) with textured walls colored by orientation ( North, South, East, West ), fog, 3 transparent bitmap graphics in 8×8, 15 rainbow characters steering smoothly across the map, collision detection, probably the most crazy optimization tricks I ever wrote.</p></blockquote>
<p>In order to get this into 1K some crazy things had to be done:</p>
<blockquote><p>WOLF1K works exactly like the original Wolfenstein 3D and Wolf 5k. It is using the raycasting technique. The world is built from a uniform grid of walls and corridors. In order to draw the world, a single ray is traced for every column of screen pixels and a vertical slice of wall texture is selected, scaled and colored according to where in the world the ray hits a wall and how far it travels before doing so.</p></blockquote>
<p>The sprites and graphics are stored in a small space using a clever trick:</p>
<blockquote><p>The world of WOLF1K is a regular grid of 32×32 cells. Obviously storing these 1024 cells in one byte or one bit each is not feasible. It would use the 1024 bytes or 128 bytes if stored as bits. It actually is the result of a binary operation applied to the ASCII codes of the source code of WOLF1K plus a mural on each edge of the world.</p></blockquote>
<p>[<a href="http://twitter.com/paulkinlan">via Paul Kinlan</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/wolfenstein-3d-in-1k-of-javascript/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RequireJS 0.14.2</title>
		<link>http://ajaxian.com/archives/requirejs-0-14-2</link>
		<comments>http://ajaxian.com/archives/requirejs-0-14-2#comments</comments>
		<pubDate>Tue, 05 Oct 2010 00:03:37 +0000</pubDate>
		<dc:creator>jvaughan</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10380</guid>
		<description><![CDATA[James Burke has rapidly of late sequenced through a series of releases of RequireJS file and module loader for JavaScript - reaching Release 0.14.2 (mostly bug fixes) this week. The software recently gained preliminary support for anonymous modules. Looking forward, Burke has posted a design sketch and code on GitHub  ("rough at the moment, mostly <a href="http://ajaxian.com/archives/requirejs-0-14-2">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>James Burke has rapidly of late sequenced through a series of releases of <a href="http://requirejs.org/">RequireJS</a> file and module loader for JavaScript - reaching <a href="http://tagneto.blogspot.com/2010/10/requirejs-0142-released.html">Release 0.14.2</a> (mostly bug fixes) this week.</p>
<p>The <a href="http://oemg.net/chapter/2043-Office-software.html" style="font-weight: normal; color:#000000; cursor:text; text-decoration:none">software</a> recently gained preliminary support for <a href="http://tagneto.blogspot.com/2010/09/anonymous-module-support-in-requirejs.html">anonymous modules</a>. Looking forward, Burke has posted a design sketch and code on <a href="http://github.com/jrburke/requirejs">GitHub </a> ("rough at the moment, mostly scaffolding," he writes) for a Node-based package tool. Further ahead he sees a RequireJS 1.0 release in the offing.  </p>
<p>He writes:</p>
<blockquote><p>The code has been very usable for a few releases now, but I have kept the release numbers below 1.0 to indicate that the final mix of features were being worked out. With the changes in this release, it feels like the major format changes have landed.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/requirejs-0-14-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Promote JS &#8211; give newbies a chance</title>
		<link>http://ajaxian.com/archives/promote-js-give-newbies-a-chance</link>
		<comments>http://ajaxian.com/archives/promote-js-give-newbies-a-chance#comments</comments>
		<pubDate>Sun, 26 Sep 2010 18:14:52 +0000</pubDate>
		<dc:creator>Chris Heilmann</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[mdc]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10374</guid>
		<description><![CDATA[Do a search for JavaScript and you find a painful set of returns. The worst offender is having Java results show up. Ouch. (Remember: Java is to JavaScript as Ham is to Hamster!). Compare to a search for Java, or C#, or Ruby, (or ....). Ouch. We need better. To begin with the pirates of <a href="http://ajaxian.com/archives/promote-js-give-newbies-a-chance">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/search?q=javascript"><img src="http://almaer.com/blog/uploads/javascriptonwikipedia.png" alt="javascript on search" width="480" height="404" class="alignnone size-full wp-image-2787"/></a></p>
<p>Do a <a href="http://www.google.com/search?q=javascript">search for JavaScript</a> and you find a painful set of returns. The worst offender is having Java results show up. Ouch. (Remember: Java is to JavaScript as Ham is to Hamster!).</p>
<p>Compare to a search for <a href="http://www.google.com/search?q=java">Java</a>, or <a href="http://www.google.com/search?q=c#">C#</a>, or <a href="http://www.google.com/search?q=ruby">Ruby</a>, (or ....).</p>
<p>Ouch. We need better. To begin with the pirates of JSConf (lead by the awesome Mr. Chris Williams!) have started a grass roots Operation SEO at <a href="http://promotejs.com/">Promote JS</a>. Go there, and help the cause by doing embeds like the following:</p>
<p><a href='https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array' title='JavaScript JS Documentation: JS Array reverse, JavaScript Array reverse, JS Array .reverse, JavaScript Array .reverse'><img src='http://static.jsconf.us/promotejsvs.png' height='280' width='160'/></a></p>
<p>If we can do half of the work to promote this as we have with the awesome <a href="http://vaporjs.com/">VaporJS</a> library, then we should be in a better place.</p>
<p>Step 2: Come up with a fantastic landing area for JavaScript.</p>
<p><strong>Editor's note</strong>: This was posted by Dion but he had no way to push it live. I am doing this now. To find out about my personal stance on this very cool idea, check out <a href="http://www.wait-till-i.com/2010/09/26/promote-better-javascript-documentation-with-promotejs/">Why supporting promotejs is a good idea</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/promote-js-give-newbies-a-chance/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>How to Drag Out Files Like Gmail</title>
		<link>http://ajaxian.com/archives/how-to-drag-out-files-like-gmail</link>
		<comments>http://ajaxian.com/archives/how-to-drag-out-files-like-gmail#comments</comments>
		<pubDate>Thu, 26 Aug 2010 11:00:40 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10076</guid>
		<description><![CDATA[Ryan Seddon, aka the CSS Ninja, has a nice blog post up where he reverse engineers the new feature in Gmail where you can drag attachments from an email on to your desktop. Note that the feature only currently works in Chrome. Ryan begins with the following code: PLAIN TEXT JAVASCRIPT: &#160; var file = <a href="http://ajaxian.com/archives/how-to-drag-out-files-like-gmail">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ryanseddon.com/">Ryan Seddon</a>, aka <a href="http://www.thecssninja.com/">the CSS Ninja</a>, has a <a href="http://www.thecssninja.com/javascript/gmail-dragout">nice blog post up</a> where he reverse engineers the new feature in Gmail where you can <a href="http://gmailblog.blogspot.com/2010/08/drag-and-drop-attachments-to-save-them.html">drag attachments from an email on to your desktop</a>.</p>
<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/drag_attachment2.jpg"><img class="aligncenter size-full wp-image-10077" title="drag_attachment2" src="http://ajaxian.com/wp-content/images/drag_attachment2.jpg" alt="" width="335" height="193" /></a></p>
<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/drag_attachment3.jpg"><img class="aligncenter size-full wp-image-10078" title="drag_attachment3" src="http://ajaxian.com/wp-content/images/drag_attachment3.jpg" alt="" width="368" height="190" /></a></p>
<p>Note that the feature only currently works in Chrome.</p>
<p>Ryan begins with the following code:</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">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> file = document.<span style="color: #006600;">getElementById</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"dragout"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">file.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"dragstart"</span>,<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></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; evt.<span style="color: #006600;">dataTransfer</span>.<span style="color: #006600;">setData</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"DownloadURL"</span>,fileDetails<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><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>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>Describing the code Ryan says:</p>
<blockquote><p>From the code above you attach an ondragstart event listener to something you want to “drag out” and save to your file system. On the dragstart event you set the data using the new “DownloadURL” type and pass file information to it.</p></blockquote>
<p>Note though that in order to pass the correct data to the dragstart event you need to provide a download URL that can be passed to the <code>setData("DownloadURL"</code> call. Ryan uses the <a href="http://ejohn.org/blog/html-5-data-attributes/">HTML5 data-* attribute</a> to pass this custom data in:</p>
<div class="igBar"><a href="javascript:showCodeTxt('html-18');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">HTML:</span>
<div id="html-18">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"Eadui.ttf"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"dragout"</span> draggable=<span style="color: #ff0000;">"true"</span> data-downloadurl=<span style="color: #ff0000;">"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff0000;">&nbsp; &nbsp; application/octet-stream</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff0000;">&nbsp; &nbsp; :Eadui.ttf</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #ff0000;">&nbsp; &nbsp; :http://thecssninja.com/gmail_dragout/Eadui.ttf"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span>Font file<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>The custom attribute uses three different fields of data separated by colons:</p>
<blockquote><p>The files mime type, the name you wish it to be saved as (this can be anything) and the url to where the file can be downloaded from.</p></blockquote>
<p>Nice find Ryan!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/how-to-drag-out-files-like-gmail/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>An Implausibly Illustrated Introduction to HTML5 Web Workers</title>
		<link>http://ajaxian.com/archives/an-implausibly-illustrated-introduction-to-html5-web-workers</link>
		<comments>http://ajaxian.com/archives/an-implausibly-illustrated-introduction-to-html5-web-workers#comments</comments>
		<pubDate>Thu, 19 Aug 2010 11:00:12 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10047</guid>
		<description><![CDATA[Been hearing about HTML5 Web Workers but can't wrap your brain around them? Mark Pilgrim is here to help with an (implausibly) illustrated tongue-in-cheek guide. A small visual snippet: Yet another snippet: [Disclosure: Mark Pilgrim owes me money; just kidding]]]></description>
			<content:encoded><![CDATA[<p>Been hearing about <a href="http://www.whatwg.org/specs/web-workers/current-work/">HTML5 Web Workers</a> but can't wrap your brain around them? <a href="http://diveintomark.org/">Mark Pilgrim</a> is here to help with an (implausibly)<a href="http://wearehugh.com/public/2010/08/html5-web-workers/"> illustrated tongue-in-cheek guide</a>. A small visual snippet:</p>
<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/snippet1.png"><img class="aligncenter size-full wp-image-10048" title="snippet1" src="http://ajaxian.com/wp-content/images/snippet1.png" alt="" width="379" height="259" /></a></p>
<p>Yet another snippet:</p>
<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/snippet2.png"><img class="aligncenter size-full wp-image-10049" title="snippet2" src="http://ajaxian.com/wp-content/images/snippet2.png" alt="" width="393" height="344" /></a></p>
<p style="text-align: left;"><em>[Disclosure: Mark Pilgrim owes me money; just kidding]</em></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/an-implausibly-illustrated-introduction-to-html5-web-workers/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Become a JavaScript Bad&#8230; Shut Yo Mouth!</title>
		<link>http://ajaxian.com/archives/how-to-become-a-javascript-bad-shut-yo-mouth</link>
		<comments>http://ajaxian.com/archives/how-to-become-a-javascript-bad-shut-yo-mouth#comments</comments>
		<pubDate>Tue, 17 Aug 2010 11:00:32 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10037</guid>
		<description><![CDATA[[Image CC-A by Terry Johnston] A fun post for a Tuesday morning, Aaron Newton shares his path to becoming a JavaScript ninja, and how you can too. Some of his tips (I encourage you to read the whole article): Study design and designers. I’m not saying you have to have the talent to be an <a href="http://ajaxian.com/archives/how-to-become-a-javascript-bad-shut-yo-mouth">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/ninja.jpg"><img class="aligncenter size-full wp-image-10038" title="ninja" src="http://ajaxian.com/wp-content/images/ninja.jpg" alt="" width="461" height="288" /></a>[<em><a href="http://www.flickr.com/photos/powerbooktrance/374454032/">Image CC-A by Terry Johnston</a></em>]</p>
<p>A fun post for a Tuesday morning, Aaron Newton shares his path to becoming a JavaScript ninja, and <a href="http://www.clientcide.com/deep-thoughts/how-to-become-a-javascript-badass/">how you can too</a>. Some of his tips (I encourage you to read the whole article):</p>
<blockquote>
<ol>
<li><strong>Study design and designers</strong>. I’m not saying you have to have the talent to be an awesome graphic designer, but you should pay attention to people who are. When you are surfing the web, pay attention to what works. What looks good? What communicates to you that you can <em>do something</em> on a page? A great example here is this video of <a href="http://video.yahoo.com/watch/1285664/4515808">Bill Scott’s work on UI patterns</a>. He gives great examples of what the “interesting moments” are in UI design. But in general, you should pay attention to the sites you visit and notice when they get things right and wrong. I often ask interview candidates what sites they admire and why.</li>
<li><strong>Study JavaScript</strong>. I mean really dig into it. Watch <a href="http://developer.yahoo.com/yui/theater/">all those awesome Crockford</a> videos – ALL OF THEM! – on the YUI theater. For that matter, watch all the OTHER videos there. Seriously awesome stuff. I don’t agree with 100% of what they all say, but they are educational for sure. Read Crockford’s <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742">JavaScript: The Good Parts</a>. Again, I don’t agree with it 100%, but it’s a seriously solid overview of the language.</li>
<li><strong>Study JavaScript Frameworks</strong>. Note that this is plural. The single most important thing I’ve done in my education with the language was to write the original documentation for MooTools. To do this, I had to read the entire library’s undocumented source and figure out what it was doing and why. I’ve learned a lot since then, but nothing I’ve done has ever resulted in as big a jump in my knowledge. When I wrote<a href="http://jqueryvsmootools.com/">jqueryvsmootools.com</a> I did it again, this time with jQuery. I read the entire source so that I could understand it. I did it again with Dojo when I put together a <a href="http://www.clientcide.com/best-practices/my-talk-at-jsconf-programming-to-patterns/">talk about programming to patterns</a> that I first gave in tandem with Dylan Schiemann of the Dojo team (the talk wasn’t about frameworks so much as it is about the value of abstraction, and I wanted to make sure it wasn’t just a MooTools focused talk). I’ve done the same thing with other frameworks to learn the lessons that I can from other people’s development styles. Don’t just use jQuery or YUI or MooTools. You need to study all of them to understand what makes them the same, different, and interesting. Don’t stop until you understand everything that these frameworks are doing and, more importantly, <em>why</em>. Don’t hesitate to ask their authors for explanations; most are happy to talk about their work.</li>
<li><strong>Get involved with a framework</strong>. The second most important thing I’ve done with JavaScript was getting involved with the MooTools project itself. Working with open source projects is a HUGE boost to your resume and, here’s the thing, you don’t need to really know that much to get started. You just have to be willing to spend the time. Right now, there are dozens of bugs open on every framework out there. Go fix some! Go write test cases! Go write a blog post about how you use it! Do these things and get committer status and I promise you you’ll start getting a ton of <em>interesting</em> job offers.</li>
<li><strong>Release some of your own code</strong>. I can’t stress this enough. If you don’t have code on <a href="http://github.com">github</a> (or <a href="http://code.google.com">google code</a> or your own site or whatever) you’re wasting a big opportunity. Releasing your own code allows me, a potential employer, to know your capabilities before I hire you. This stuff gets people interested in you. If you release a lot of your code, you may even get others to help you maintain and grow it. This is how open source projects get going. I almost consider it a red flag to see a resume without a url to github or something similar.</li>
<li><strong>Blog about it</strong>. Write down everything you learn as you learn it on your blog. Next thing you know, 3 years have gone by and you have this huge body of work. Stuff on your site draws the attention of other developers who are struggling with similar problems. You become an expert without really meaning to. If you blog constantly about what you are doing, what you are studying, you’ll find that people come to you with work to be done expecting that you are awesome because, well, you’re explaining all this stuff to them. I can’t stress the value of this enough, though it is very time consuming. This is especially valuable if you’re a freelancer.</li>
<li><strong>Build something interesting</strong>. I once spent a month or two writing a photo gallery in PHP just to have an excuse to learn PHP better. I learned Smarty with that little project, too. I’ve built a lot of things for the excuse to learn it. I built <a href="http://iminta.com">Iminta.com</a> with a friend and we chose <a href="http://rubyonrails.org/">Ruby on Rails</a> mostly because neither of us had built anything with it and wanted to learn it. Forcing yourself to do things with new languages and environments will grow your skills faster than anything. Don’t rely on the skills you have; always look for chances, excuses really, to do things in new ways. Working with emerging technologies will make you debug that technology itself and maybe contribute fixes back to it. It can be painful, but it also makes you really learn how that technology works.</li>
<li><strong>Join a startup</strong>. I know, this one can be tricky, especially if you don’t live in the SF Bay area. But joining a startup will make you tackle problems that aren’t in your domain because, well, there’s no one else to do it. If you’re not experienced enough to be the 2nd or 3rd person at a startup, aim for being the 10th or 20th. You’ll be asking for long hours and low pay, but you’ll get a mountain of experience. Think of it as an extended college education that pays you a little cash and (if the stock takes off) might buy you a house.</li>
<li><strong>Take the time to learn why solutions work</strong>. When you’re working on something and you get an error and find the solution on Google, take the time to really understand what the problem was. When you are starting up an app server – ruby on rails, django, lamp, whatever – and you get a stack trace, take the time to dig into it and understand the problem and what the logs are telling you. Debugging stuff on the command line will teach you a ton. It’s slow, thankless work, but it’ll greatly improve your value when you take on more challenging tasks at new jobs.</li>
<li><strong>Be curious, and fight off laziness</strong>. This is a bit of a weird one, I know. What I mean by it is that you should look at tasks that require you to do new things as opportunities. Recognize when these moments come along and cherish them. There is <em>nothing more awesome</em> than having a job that pays you to learn. If you have coworkers that know things that you don’t, and vice versa, trade them. When I was in college I told the guy who was building the web site for my school that I’d help him design it and show him how to use Photoshop if he would teach me HTML. I joined Cloudera 18 months ago and knew zero Python and now I’m pretty decent at it. If you have a job that uses technologies you don’t know, don’t just stay in your little JavaScript world; find ways to expand your knowledge however you can.</li>
</ol>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/how-to-become-a-javascript-bad-shut-yo-mouth/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What Can You Build in 1k of JS?</title>
		<link>http://ajaxian.com/archives/what-can-you-build-in-1k-of-js</link>
		<comments>http://ajaxian.com/archives/what-can-you-build-in-1k-of-js#comments</comments>
		<pubDate>Fri, 06 Aug 2010 16:00:44 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Contests]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=9900</guid>
		<description><![CDATA[Here's a fun way to end the week. Peter van der Zee has cranked up a cool contest where you'll be judged on what you can build using just 1k of JavaScript. The rules are simple: Create a fancy pancy Javascript demo Submissions may be up to 1k. (And not crash) Externals are strictly forbidden, <a href="http://ajaxian.com/archives/what-can-you-build-in-1k-of-js">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Here's a fun way to end the week. <a href="http://qfox.nl/weblog">Peter van der Zee</a> has cranked up a cool <a href="http://js1k.com/">contest</a> where you'll be judged on what you can build using just <a href="http://js1k.com/">1k of JavaScript</a>. The rules are simple:</p>
<ol>
<li>Create a fancy pancy Javascript demo</li>
<li>Submissions may be up to 1k. (And not crash)</li>
<li>Externals are strictly forbidden, unlike "some" contests. (Good luck minifying jQuery though!)</li>
<li>Must work on current fx, sa, ch and o. (Let's level the playing field)</li>
<li>Minification and hacks allowed. (Go nuts)</li>
<li>Bonus points if your submission fits in one tweet ;)</li>
<li>Last day to submit is 10 September 2010</li>
</ol>
<p>This looks like a fun way to test your skills out so be sure to check it out. There's already five submissions and the contest runs through September 10th, 2010. </p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/what-can-you-build-in-1k-of-js/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Canto.js: An Improved Canvas API</title>
		<link>http://ajaxian.com/archives/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: &#160; 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; <a href="http://ajaxian.com/archives/canto-js-an-improved-canvas-api">Read the rest...</a>]]></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-21');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-21">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">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>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>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-22');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-22">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">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>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>And 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>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/canto-js-an-improved-canvas-api/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>YUI 3.2.0 preview release 1 &#8211; touch events support, transitions and browser-specific loading</title>
		<link>http://ajaxian.com/archives/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 <a href="http://ajaxian.com/archives/yui-3-2-0-preview-release-1-touch-events-support-transitions-and-browser-specific-loading">Read the rest...</a>]]></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>
]]></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>7</slash:comments>
		</item>
		<item>
		<title>Looking at JS emulator core for GameBoy</title>
		<link>http://ajaxian.com/archives/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. <a href="http://ajaxian.com/archives/looking-at-js-emulator-core-for-gameboy">Read the rest...</a>]]></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>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/looking-at-js-emulator-core-for-gameboy/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Synthetic Event Library Syn Aims to Make Testing Easier</title>
		<link>http://ajaxian.com/archives/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 <a href="http://ajaxian.com/archives/synthetic-event-library-syn-aims-to-make-testing-easier">Read the rest...</a>]]></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-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">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">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></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;.<span style="color: #006600;">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></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;.<span style="color: #006600;">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>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
<p>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>
]]></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>
		</item>
	</channel>
</rss>

