<?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>Continuing Intermittent Incoherency</title>
	<atom:link href="http://alex.dojotoolkit.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://alex.dojotoolkit.org</link>
	<description>Alex Russell's notes on Dojo, Chrome, politics, and the like</description>
	<lastBuildDate>Thu, 25 Jun 2009 03:15:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Benchmarking Is Hard: Reddit Edition</title>
		<link>http://alex.dojotoolkit.org/2009/06/benchmarking-is-hard-reddit-edition/</link>
		<comments>http://alex.dojotoolkit.org/2009/06/benchmarking-is-hard-reddit-edition/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 02:22:31 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[reddit]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=1015</guid>
		<description><![CDATA[In which I partially defend Microsoft and further lament the state of tech &#8220;journalism&#8221;.
A very short open letter:

Dear interwebs:
Please stop mis-representing the results of benchmarks. Or, at a minimum, please stop blogging the results in snide language that shows your biases. It makes the scientific method sad.
Thank you.
Alex Russell
Today&#8217;s example of failure made manifest comes [...]]]></description>
			<content:encoded><![CDATA[<p><i>In which I partially defend Microsoft and further lament the state of tech &#8220;journalism&#8221;.</i></p>
<p>A very short open letter:</p>
<div style="margin: 1em; padding: 1em; font-family: Consolas, Courier New, mono; font-weight: bold; background-color: #f7f8d2; -webkit-border-radius: 10px;">
Dear interwebs:</p>
<p>Please stop mis-representing the results of benchmarks. Or, at a minimum, please stop blogging the results in snide language that shows your biases. It makes the scientific method sad.</p>
<p>Thank you.</p>
<p>Alex Russell</p></div>
<p><a href="http://www.codexon.com/posts/a-real-benchmark-real-websites-with-chrome-firefox-opera-safari-ie" >Today&#8217;s example of failure made manifest</a> comes  via Reddit&#8217;s <a href="http://www.reddit.com/r/programming/" >programming section</a> (easy target, I know), but deserves some special attention thanks to such witty repartee as:</p>
<blockquote><p>Using slow-motion video? What a great idea. Maybe we can benchmark operating systems like that.</p></blockquote>
<p>Maybe we can&#8230;.and maybe we should. It might yield improvements in areas of OS performance that impact user experience. With a methodology that represents end-user perception, you should be able to calculate the impact of different scheduling algorithms on UI responsiveness, something that desktop Linux has struggled with.</p>
<p>The test <a rel="nofollow" href="http://www.youtube.com/watch?v=1QLtMtpoC-E" >under mockery</a> may have problems, but they&#8217;re not the ones the author assumes. It turns out that watching for visual indications of &#8220;doneness&#8221; is a better-than-average way to judge overall browser performance (assuming fixed hardware, testing from multiple network topologies, etc.). After all, perceived performance in browsing is all that matters. No one discounts a website&#8217;s performance because when you visit they happen to let browsers cache resources that get used across pages or because they use a CDN to improve resource loading parallelism. In the real world, anything you can do to improve the perceived latency of a web site or application is a win.</p>
<p><a rel="nofollow" href="http://download.microsoft.com/download/3/4/6/3463634E-9443-4F37-8439-1ED3A97599C6/Measuring%20Browser%20Performance.pdf" >MSFT&#8217;s test methodology (pdf)</a> does a good job in balancing several factors that affect latency for end-users, including resources that are loaded <em>after</em> <code>onload</code>  or in sub-documents, potential DNS lookup timing issues, and the effects of network-level parallelism on page loading. Or at least it would in theory. The IE team&#8217;s published methodology is silent on points such as how and where DNS caches may be in play and what was done to mitigate them, but the level of overall rigor is quite good.</p>
<p>So what&#8217;s wrong with the MSFT test? Not much, except that they didn&#8217;t publish their code or make the test rig available for new releases of browsers to be run against. As a result, the data is more likely to be incorrect because it&#8217;s stale than to be incorrect due to methodology problems. New browser versions are being released all the time, rendering the conclusions from the Microsoft study already obsolete. Making the tests repeatable by opening up the test rig or filling in the gaps in the methodology would fix that issue while lending the tests the kind of credibility that the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html" >Sun Spider</a> and <a href="http://v8.googlecode.com/svn/data/benchmarks/v3/run.html" >V8</a> benchmarks now enjoy.</p>
<p>This stands in stark opposition to this latest &#8220;benchmark&#8221;. Indeed, while the source code was posted, it only deepens my despair. By loading the &#8220;real world sites&#8221; from a local copy, much of the excellent work being done to improve browser performance at the network level is totally eliminated. Given the complexity of real-world sites and the number of resources loaded by say, Facebook.com, changes that eliminate the effects of the network make the tests highly suspect. While excoriating JavaScript benchmarks as not representing the real world accurately, the test author eliminated perhaps the largest contributor to page loading latency and perceived performance. Ugg.</p>
<p>Instead of testing real-world websites (where network topology and browser networking makes a difference), the author tested local, &#8220;dehydrated&#8221; versions of websites. The result is that &#8220;loading times&#8221; weren&#8217;t tested, but rather a test of &#8220;local resource serving times and site-specific optimizations around the <code>onload</code> event&#8221;  was run . Testing load times would have accounted for resources loaded <em>after</em> the <code>onload</code> event fired, too. There&#8217;s reason to think that neither time to load from local disk nor time for a page to fire the onload handler dominate (or even indicate) real world performance.</p>
<p>I&#8217;m grateful that this test showed that Chrome loads and renders things quickly from local disk. I also have no doubt that Chrome loads real websites very quickly, but this test doesn&#8217;t speak to that. </p>
<p>It&#8217;s frustrating that the Reddits and Slashdots of the world have such poor collective memory and such faulty filtering that they can&#8217;t seem to keep themselves from promoting these types of bias re-enforcing stories on a regular basis. Why, oh why, can&#8217;t we have better tech journalism?</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/06/benchmarking-is-hard-reddit-edition/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Online Shrinksafe App Fixed</title>
		<link>http://alex.dojotoolkit.org/2009/06/online-shrinksafe-app-fixed/</link>
		<comments>http://alex.dojotoolkit.org/2009/06/online-shrinksafe-app-fixed/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 06:10:11 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[shrinksafe]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/06/online-shrinksafe-app-fixed/</guid>
		<description><![CDATA[I&#8217;m not sure how long it was b0rked, but the online ShrinkSafe app is back up and working.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure how long it was b0rked, but <a href="http://shrinksafe.dojotoolkit.org" >the online ShrinkSafe app is back up and working</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/06/online-shrinksafe-app-fixed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Visual History of Dojo</title>
		<link>http://alex.dojotoolkit.org/2009/06/a-visual-history-of-dojo/</link>
		<comments>http://alex.dojotoolkit.org/2009/06/a-visual-history-of-dojo/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 01:16:23 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[lucid]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/06/a-visual-history-of-dojo/</guid>
		<description><![CDATA[Dojo&#8217;s has as long a history as any chunk of JavaScript in wide use, and it&#8217;s easy to forget how long the road has been and how far the project has come. Will of the Lucid Desktop project has put together a code_swarm visualization of the project&#8217;s history to date. Lots of fun to see [...]]]></description>
			<content:encoded><![CDATA[<p>Dojo&#8217;s has as long a history as any chunk of JavaScript in wide use, and it&#8217;s easy to forget how long the road has been and how far the project has come. Will of the <a href="http://www.lucid-desktop.org/" >Lucid Desktop</a> project has <a href="http://www.lucid-desktop.org/blog/2009/jun/09/dojo-toolkit-codeswarm-visualization/" >put together</a> a <a href="http://vis.cs.ucdavis.edu/~ogawa/codeswarm/" >code_swarm</a> visualization of the project&#8217;s history to date. Lots of fun to see old friends appear and think back on when what happened:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/LSZsMEIvOe4&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/LSZsMEIvOe4&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Thanks, Will!</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/06/a-visual-history-of-dojo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Quick Word On Dojo and Patents</title>
		<link>http://alex.dojotoolkit.org/2009/05/a-quick-word-on-dojo-and-patents/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/a-quick-word-on-dojo-and-patents/#comments</comments>
		<pubDate>Tue, 26 May 2009 18:19:39 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[patent]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/a-quick-word-on-dojo-and-patents/</guid>
		<description><![CDATA[A relatively light-on-data article is up at Slashdot right now, and it casts aspersions both on the IBMers who contribute to Dojo and on the Foundation itself based on the Free Software party line that all software patents are inherently evil.
I won&#8217;t address the background point regarding software patents here. I&#8217;ll only to say that [...]]]></description>
			<content:encoded><![CDATA[<p>A relatively <a href="http://yro.slashdot.org/article.pl?sid=09/05/26/159249" >light-on-data article is up at Slashdot</a> right now, and it casts aspersions both on the IBMers who contribute to Dojo and on the Foundation itself based on the Free Software party line that all software patents are inherently evil.</p>
<p>I won&#8217;t address the background point regarding software patents here. I&#8217;ll only to say that reasonable people can disagree on this, particularly when it comes to proposed solutions. What I <em>would</em> like to focus some attention on is the background that this patent filing is made against.</p>
<p>IBM has executed a <a href="http://www.dojotoolkit.org/files/dojo-ccla.pdf" >CCLA with the Dojo Foundation</a>. This agreement gives Dojo (and the rest of the OSS community) a license to whatever patent rights may be embodied in contributions of code. While IBM may file patents on things they build and contribute to Dojo, there&#8217;s no risk to any users regarding use of that code or &#8220;submarine&#8221; issues of patent infringement. As a result of the Dojo Foundation&#8217;s insistence that ALL code come with CLAs, Dojo is more trustable in terms of IP than most of the JavaScript you can choose to use. A similar patent claim in a less rigorously developed toolkit would indeed be apocalyptic, but the Dojo community has adopted a mature process for dealing with IP that both makes the concerns plain and then works to eliminate them, step-by-step. That&#8217;s what licensing agreements are, after all: links in the chain that together help you trust that your anchor is indeed set.</p>
<p>It&#8217;s clear to me that IBM filed this patent <em>fully aware</em> that they were giving away all follow-on rights to enforce it in anything but a defensive way for the benefit of the Foundation and users of Dojo. After watching IBM counsel decimate SCO in court, does anyone in the OSS world <em>really</em> think that IBM&#8217;s lawyers are fools? And if so, to what end?</p>
<p>It&#8217;s sad that Slashdot hasn&#8217;t, for a decade of coverage of IP issues, learned that licensing is harder than the zealots would have you believe and that malice isn&#8217;t always the intent of those who participate in communities with a commercial interest.</p>
<p>The good news here, of course, is that IBM is just as generous today toward the OSS and Dojo communities as they were yesterday. We have the legal documents to prove it.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/a-quick-word-on-dojo-and-patents/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Chrome 2.0: Bam!</title>
		<link>http://alex.dojotoolkit.org/2009/05/chrome-20-bam/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/chrome-20-bam/#comments</comments>
		<pubDate>Thu, 21 May 2009 21:01:41 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2.0]]></category>
		<category><![CDATA[chrome]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/chrome-20-bam/</guid>
		<description><![CDATA[No less than the Times has chastised the Chrome team&#8217;s marketing efforts, noting unsubtly that for months now we&#8217;ve been burying the lead: Chrome&#8217;s killer feature isn&#8217;t that it&#8217;s got an awesome UI (it does) or that it supports new web features&#8230;no, the real story that we haven&#8217;t been telling well is that it&#8217;s wicked [...]]]></description>
			<content:encoded><![CDATA[<p>No less than <a rel="nofollow" href="http://gadgetwise.blogs.nytimes.com/2009/05/11/chromes-hidden-feature-blazing-speed/?partner=rss&#038;emc=rss" >the Times</a> has chastised the Chrome team&#8217;s marketing efforts, noting unsubtly that for months now we&#8217;ve been burying the lead: Chrome&#8217;s killer feature isn&#8217;t that it&#8217;s got an awesome UI (it does) or that it supports new web features&#8230;no, the real story that we haven&#8217;t been telling well is that it&#8217;s wicked fast.</p>
<p>I&#8217;m sure all the blags will be a-twitter with this shortly, but <a rel="nofollow" href="http://chrome.blogspot.com/2009/05/speedier-google-chrome-for-all-users.html" >Chrome 2.0 is now out to everyone, and it&#8217;s even faster</a>. Yes, V8 got even more polish (new compiler infrastructure FTW!), but the big speed news from my perspective comes from other parts of the browser. Chrome 2.0 moves fully away from the Windows networking stack to Chrome&#8217;s faster networking infrastructure and includes changes to memory allocation that make the DOM go like hell. There&#8217;s lots of great feature work in 2.0, of course, but now&#8217;s not the time for us to bury the real story: Chrome, fast as it was, just got even faster. Thanks to silent auto-update, it&#8217;ll even make the web faster <a href="http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/" >faster</a>.</p>
<p><a rel="nofollow" href="http://google.com/chrome" >Bam!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/chrome-20-bam/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>On JS &#8220;Lambdas&#8221;</title>
		<link>http://alex.dojotoolkit.org/2009/05/on-js-lambdas/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/on-js-lambdas/#comments</comments>
		<pubDate>Wed, 20 May 2009 17:01:42 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lambda]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=976</guid>
		<description><![CDATA[The ES working group is hard at work on &#8220;Harmony&#8221;, the goals of which are significantly more sane than previous attempts to build a new language from JavaScript. Namely, they&#8217;re being careful to be able to express things in new syntax based on old syntax. This is referred to as &#8220;de-sugaring&#8221;. Many new bits of [...]]]></description>
			<content:encoded><![CDATA[<p>The ES working group is hard at work on &#8220;Harmony&#8221;, the goals of which are significantly more sane than previous attempts to build a new language from JavaScript. Namely, they&#8217;re being careful to be able to express things in new syntax based on old syntax. This is referred to as &#8220;de-sugaring&#8221;. Many new bits of syntax will be expressed in old syntax in a resulting spec, and so it will be with any new lambda syntax.</p>
<p>One of the things I find most persistently annoying about the language as we have it is the verbose and wordy way of saying &#8220;build me a new invokable thing&#8221;. Since JS builds dynamic scopes based on on functions, this is particularly annoying when writing event handlers, callbacks, and arguments to <code>forEach</code> and friends. Needless to say, these are the things we do <em>all the time</em> in JavaScript. If there was anything that deserved syntactic sugar, this is it.</p>
<p>This brings us to &#8220;lambdas&#8221;. Languages like Ruby have a great syntax for expressing &#8220;a thing you can invoke&#8221; in a terse way. Python has something along these lines based on the keyword <code>lambda</code>, but Guido insists on keeping them <a href="http://docs.python.org/tutorial/controlflow.html#lambda-forms" >neutered</a> based on (AFAICT from in-person discussions) a dislike of functional programming. Java is <a href="http://www.javac.info/" >dangerously close to getting useful closures</a> but it&#8217;s so syntactically handicapped that it&#8217;ll probably be <em>another</em> decade before the masses rebel and demand a terse way to say what they mean. Or maybe they&#8217;ll all have just defected to <a href="http://jruby.codehaus.org/" >JRuby</a>. For most of these languages, being able to say &#8220;here&#8217;s a new invokable thing&#8221; tersely is a Nice To Have feature. No real-world program will be slowed down by the size of a keyword. Indeed, Java makes you do so much work for the compiler that it&#8217;s practically taken as a badge of honor that you have to type it all out over and over and over.</p>
<p>JavaScript is different. Unlike nearly every other language, the terseness of JavaScript code is a key determinant in the performance of a web application. The bigger your scripts, the slower your app loads. It&#8217;s as simple as that.</p>
<p>It&#8217;s a crime, then, that we still have to type:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript">node.<span style="color: #006600;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evt<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009966; font-style: italic;">/* ... */</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// or</span>
&nbsp;
<span style="color: #009900;">&#91;</span><span style="color: #006600; font-style: italic;">/* ... */</span><span style="color: #009900;">&#93;</span>.<span style="color: #006600;">forEach</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009966; font-style: italic;">/* ... */</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>The syntax for &#8220;an anonymous invokable thing&#8221; should be a lot shorter given how much exercise it gets in the real world. What real-world script authors don&#8217;t need is something other than &#8220;a shorter way to say <code>function</code>&#8220;. Anything different than this isn&#8217;t strictly useful. Anything that requires you to use a more wordy syntax to name arguments is a failure, and anything that uses a name longer than the shortest possible thing just re-introduces that bug that needs fixing in the first place. There have been proposals at the ES working group to date regarding &#8220;lambdas&#8221; and most assume that they will be something that serves to make implementer&#8217;s roles easier when it comes to de-sugaring but fail in one of these ways. Folks who write actual scripts should start speaking up and telling the Harmony working group what needs to be clearly and un-ambiguiously said:</p>
<h4>Don&#8217;t fuck with the semantics of <code>function</code>, just let me stop typing it so often</h4>
<p>What might a better syntax for <code>function</code> look like?</p>
<p>The best that <a href="http://erik.eae.net/" >Erik</a> and I could come up with that is relatively unambiguious for parsers, doesn&#8217;t introduce hard-to-type characters on certain keyboard layouts, and doesn&#8217;t mess with the semantics of <code>function(){}</code> is this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre>// empty function body, zero arguments
var lambda = #(){ /*... */ }<SEMI>
&nbsp;
// empty function body, arguments list elided away
var lambda = #{ /* ... */ }<SEMI>
&nbsp;
// we can re-write the previous examples as:
node.addEventListener(&quot;click&quot;, #(evt){ /* ... */ }, false)<SEMI>
&nbsp;
// and
&nbsp;
[/* ... */].forEach(#(i){ /* ... */ })<SEMI></pre></td></tr></table></div>

<p>The long history of the word &#8220;lambda&#8221; coupled with the different interpretations that various languages place on them make using the word &#8220;lambda&#8221; to say &#8220;a short name for something you can invoke&#8221; particularly loaded. Perhaps instead we should just call this new syntax that crams a lot of meaning into a short &#8220;keyword&#8221; something else entirely.</p>
<p>&#8220;Cramdas&#8221;, anyone?</p>
<p><b>Update:</b> &#8230;and James Padolsey <a href="http://james.padolsey.com/javascript/custom-javascript-with-parsescripts/" >makes it so!</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/on-js-lambdas/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Dojo Wins Mobile Slickspeed Shootout</title>
		<link>http://alex.dojotoolkit.org/2009/05/dojo-wins-mobile-slickspeed-shootout/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/dojo-wins-mobile-slickspeed-shootout/#comments</comments>
		<pubDate>Thu, 14 May 2009 19:26:46 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[acme]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/dojo-wins-mobile-slickspeed-shootout/</guid>
		<description><![CDATA[Stefan K. has posted a fascinating run-down of mobile browser performance with regards to JavaScript toolkits. No big shock, but Dojo once again brings home the bacon. I&#8217;d love to see these tests re-run with TaskSpeed instead of SlickSpeed, but when you&#8217;re doing progressive enhancement it turns out that selector engine performance really matters. Dojo [...]]]></description>
			<content:encoded><![CDATA[<p>Stefan K. has <a href="http://blog.stefankolb.de/2009/05/13/javascript-frameworks-within-mobile-widgets/" >posted a fascinating run-down</a> of mobile browser performance with regards to JavaScript toolkits. No big shock, but Dojo once again brings home the bacon. I&#8217;d love to see these tests re-run with <a href="http://dante.dojotoolkit.org/taskspeed/" >TaskSpeed</a> instead of SlickSpeed, but when you&#8217;re doing progressive enhancement it turns out that selector engine performance really matters. Dojo continues to do very well in both TaskSpeed and SlickSpeed because the <a href="http://alex.dojotoolkit.org/2009/03/dojo-13b3-is-out/" >Acme selector engine</a> is so darned fast. In the real world, selector speed matters and the faster it gets, the more queries we seem to do.</p>
<p>I&#8217;m not entirely sold that the right solution going forward is to use the toolkits we already have, but if you&#8217;re building a mobile app today and you&#8217;re going to use a toolkit, it looks like (as on desktop browsers), Dojo should be your first choice. The <a href="http://alex.dojotoolkit.org/2009/01/webkit-mobile/" >webkitMobile variant of Dojo points to one possible way out</a> of the &#8220;what to do about mobile?&#8221; conundrum regarding size and IE-induced bloat, but I have some hope that WebKit will improve quickly enough to make the toolkits of today obsolete on mobile phones entirely. Time will tell.</p>
<p><em>Hat tip: the <a href="http://blog.uxebu.com/2009/05/13/javascript-framworks-within-mobile-widgets/" >Uxebu blog</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/dojo-wins-mobile-slickspeed-shootout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZF 1.8 Is Out</title>
		<link>http://alex.dojotoolkit.org/2009/05/zf-18-is-out/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/zf-18-is-out/#comments</comments>
		<pubDate>Thu, 07 May 2009 21:17:10 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/zf-18-is-out/</guid>
		<description><![CDATA[Congrats to the Zend Framework team on releasing ZF 1.8! This release updates the Dojo/Dijit integration and includes Dojo 1.3. Not only can you use the ZF view helpers to generate existing widgets, now you can use the view helpers to declare instances of your own components too.
If you haven&#8217;t tried out ZF, it really [...]]]></description>
			<content:encoded><![CDATA[<p>Congrats to the Zend Framework team on <a href="http://devzone.zend.com/article/4524-Zend-Framework-1.8.0-Released" >releasing ZF 1.8!</a> This release updates the Dojo/Dijit integration and includes Dojo 1.3. Not only can you use the ZF view helpers to generate existing widgets, now you can use the view helpers to declare instances of your own components too.</p>
<p>If you haven&#8217;t tried out ZF, it really does make building sophisticated Dojo-based UI&#8217;s really simple. A bit part of that is that it helps automate a lot of the stuff that may be confusing when you&#8217;re first starting out with Dojo.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/zf-18-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acme: Sometimes Being Generic Is A Win</title>
		<link>http://alex.dojotoolkit.org/2009/05/acme-sometimes-being-generic-is-a-win/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/acme-sometimes-being-generic-is-a-win/#comments</comments>
		<pubDate>Wed, 06 May 2009 19:27:47 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[acme]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[selector]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/acme-sometimes-being-generic-is-a-win/</guid>
		<description><![CDATA[Shane O&#8217;Sullivan, recently minted as as Dojo committer, has updated his GreaseMonkey script for skipping welcome screens to use Acme instead of Sizzle. Short story: fewer browser crashes and better performance.
If you&#8217;re not using Dojo, now might be a good time to ask why your library isn&#8217;t using Acme too.
]]></description>
			<content:encoded><![CDATA[<p>Shane O&#8217;Sullivan, recently minted as as Dojo committer, has <a rel="nofollow" href="http://shaneosullivan.wordpress.com/2009/05/02/using-dojoquery-greasemonkey-to-skip-welcome-screens/" >updated his GreaseMonkey script for skipping welcome screens</a> to use Acme instead of Sizzle. Short story: fewer browser crashes and better performance.</p>
<p>If you&#8217;re not using Dojo, now might be a good time to ask why your library isn&#8217;t using <a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dojo/_base/query.js" >Acme</a> too.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/acme-sometimes-being-generic-is-a-win/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perspective Is Not A Liquid Asset</title>
		<link>http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/#comments</comments>
		<pubDate>Tue, 05 May 2009 20:11:27 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/</guid>
		<description><![CDATA[ZDNet has an article out discussing a study that shows that that Chrome&#8217;s (Open Source) auto-update system makes the browser more secure than the alternatives. Disclosure: Google co-authored the study. I work for Google, on Chrome. Caveat emptor.
Back when I did security for a living, I quickly noted a distinction between those who saw things [...]]]></description>
			<content:encoded><![CDATA[<p>ZDNet has <a href="http://blogs.zdnet.com/security/?p=3316" >an article</a> out discussing <a href="http://www.techzoom.net/publications/silent-updates/" >a study that shows</a> that that Chrome&#8217;s (<a href="http://alex.dojotoolkit.org/2009/04/omaha-goes-open-source/" >Open Source</a>) auto-update system makes the browser more secure than the alternatives. Disclosure: Google co-authored the study. I work for Google, on Chrome. Caveat emptor.</p>
<p>Back when I did security for a living, I quickly noted a distinction between those who saw things as white vs. black and those who viewed things in risks. White vs. black is the mentality of the attacker (you only need to pwn one system, not every system) and of green defenders who can&#8217;t yet distinguish severity or haven&#8217;t been thought to think about defense in depth. A risk-based view of security pays a lot more attention to questions of who you&#8217;re securing a system against and for how long. In this world view, threats are risks to be evaluated and mitigated, not a constant stream of sky-is-falling crises. A risk based view says &#8220;yes, the sky might be falling somewhere, but what are the odds it&#8217;s falling on <em>me</em>? And even if it is, what&#8217;s the worst that can happen?&#8221; If the likelihood is high and the severity is high, spend a lot of time on it. When you view security in terms of risks to be mitigated, you make very different tradeoffs. If you think you need to (or even can) control and eliminate every risk, than you might be tempted to build brittle systems. If, on the other hand, you acknowledge that humans are invoked (and are fallible) and that sometimes things break, you might give up a little control to get to a better place on average and be willing to suffer some minor setbacks on the way there.</p>
<p>The difference between Chrome&#8217;s update system and that of other browsers is that the Chrome updater turns the dial all the way in the direction of mitigation, treating the window of vulnerability as the most important factor in the risk of an attack. It&#8217;s more important in this world to mitigate an attack than to have asked the user if they want their system to be updated. Is there any other right answer to that question for most users than &#8220;yes&#8221;?</p>
<p>Here&#8217;s where the knives come out: rational people with very different perspectives often want totally different things. System administrators for large organizations &ndash; tallented people whose job it is to personally assess and deal with risks &ndash; may disagree with this policy since it introduces new risks which they can&#8217;t effectively mitigate. The Chrome answer to these concerns has been to treat them as the special case they are. <a rel="nofollow" href="http://www.google.com/chrome/eula.html?standalone=1" >You can easily get the standalone installer that doesn&#8217;t include auto-update</a>, but it&#8217;s not something that&#8217;s advertised on the <a rel="nofollow" href="http://www.google.com/chrome" >main download page</a>. Why? Because it&#8217;s not what will keep <em>most</em> users secure.</p>
<p>The default Chrome update model is designed around the perspective of the average Chrome user. Not the vocal minority of those who know enough to build Chrome from source or even for corporate IT administrators. Their needs are real, and their perspective is valid, but it is not common and should not dominate the discussion about what is best for the majority. If we&#8217;ve learned anything through most GUI Open Source projects, it&#8217;s that developers have a hard time empathizing with the needs and skills of most users. This shows up in many places, but perhaps the most curious place of all is the extra confirmation box that asks you if you&#8217;d like to have a secure browser or an insecure browser. To anyone but an IT administrator or a developer, it&#8217;s not a legitimate choice, it&#8217;s an opportunity for failure with the deck stacked against you. </p>
<p>I&#8217;m glad the Chrome team has prioritized security <em>through</em> convenience at the expense of the illusion of control. It&#8217;s one of those things that&#8217;s obvious once you change your perspective. Too bad it&#8217;s not nearly as easy as it sounds. Everyone&#8217;s selling their point of view, but there are predictably few buyers amongst the already enfranchised.</p>
<p><i>Hat tip: Glen&#8217;s excellent <a href="http://www.chatgraph.com/?q=chrome" >ChatGraph</a>.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>JSON-P hacks</title>
		<link>http://alex.dojotoolkit.org/2009/05/json-p-hacks/</link>
		<comments>http://alex.dojotoolkit.org/2009/05/json-p-hacks/#comments</comments>
		<pubDate>Mon, 04 May 2009 16:53:35 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[json-p]]></category>
		<category><![CDATA[uxebu]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/2009/05/json-p-hacks/</guid>
		<description><![CDATA[The Uxebu guys show how to use Google Spreadsheets as a cross-domain data source. Clever.
]]></description>
			<content:encoded><![CDATA[<p>The Uxebu guys <a href="http://blog.uxebu.com/2009/04/30/jsonp-for-google-spreadsheets/" >show how to use Google Spreadsheets as a cross-domain data source</a>. Clever.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/05/json-p-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Now For Something Entire&#8230;.Oooh! Shiny!</title>
		<link>http://alex.dojotoolkit.org/2009/04/an-now-for-something-entireoooh-shiny/</link>
		<comments>http://alex.dojotoolkit.org/2009/04/an-now-for-something-entireoooh-shiny/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 18:42:28 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[openweb]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=951</guid>
		<description><![CDATA[The Google O3D team just launched and the news stories are already starting to trickle out.

Ok, so it&#8217;s shiny&#8230;but so what?
First, O3D embeds V8. This means that while you might be running your O3D code in a browser with a terrible JavaScript engine, or worse, an engine with terrible GC pauses, your O3D content isn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>The Google <a rel="nofollow" href="http://code.google.com/apis/o3d/" >O3D team just launched</a> and the news stories are already starting to <a href="http://arstechnica.com/software/news/2009/04/google-releases-3d-graphics-plugin-for-browsers.ars" >trickle out</a>.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/uofWfXOzX-g&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uofWfXOzX-g&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Ok, so it&#8217;s shiny&#8230;but so what?</p>
<p>First, O3D embeds <a rel="nofollow" href="http://code.google.com/p/v8/" >V8</a>. This means that while you might be running your O3D code in a browser with a terrible JavaScript engine, or worse, an engine with terrible GC pauses, your O3D content isn&#8217;t subject to those problems. This is a Big Win (TM). Most of the web can limp by with bad GC behavior, but interactive 3D just can&#8217;t. You might have seen the difference this makes by running <a href="http://www.chromeexperiments.com/detail/monster/" >Dean&#8217;s Monster demo</a> in Chrome and then trying it in other browsers.</p>
<p>Next, O3D presents a scene graph. Direct-mode proposals to the 3D-on-the-web discussion are based on the idea that JavaScript programmers will ship enormous toolsets down the wire in order to re-create the scene graph and/or to parse shape descriptions. Having direct access to the OpenGL surface description is <a href="http://ajaxian.com/archives/metatunnel-the-future-web-strikes-back" >incredibly powerful</a>, but I suspect not sufficient in the long term to really bootstrap a world where 3D is a first-class citizen. Also, using the web as a way to break-open some of the closed interchange challenges of today&#8217;s 3D world isn&#8217;t going to happen when everyone&#8217;s description of things is entirely programmatic, so I&#8217;m excited by the direction of O3D as a force for good.</p>
<p>Congrats to the O3D team. It&#8217;s a big day for them and the deserve huge props for shipping concurrently on Windows and Mac.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/04/an-now-for-something-entireoooh-shiny/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ending The ga.js Wait</title>
		<link>http://alex.dojotoolkit.org/2009/04/ending-the-gajs-wait/</link>
		<comments>http://alex.dojotoolkit.org/2009/04/ending-the-gajs-wait/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 04:10:16 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=908</guid>
		<description><![CDATA[Google Analytics is ubiquitous, not least of all because it&#8217;s better at what it does than most of the alternatives. Also, it doesn&#8217;t require any install or maintenance. And it&#8217;s free. What&#8217;s not to like?
Frankly, not much, but if I had to nit pick, I&#8217;d note that the worst part of Google Analytics is the [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" href="http://www.google.com/analytics/" >Google Analytics</a> is ubiquitous, not least of all because it&#8217;s better at what it does than most of the alternatives. Also, it doesn&#8217;t require any install or maintenance. And it&#8217;s free. What&#8217;s not to like?</p>
<p>Frankly, not much, but if I had to nit pick, I&#8217;d note that the worst part of Google Analytics is the <a href="http://www.google-analytics.com/ga.js" ><code>ga.js</code></a> script that does the actual tracking of content. It&#8217;s not bad, in and of itself, but it tends to load slowly. There are several reasons for this:</p>
<ul>
<li><b>Another DNS lookup to resolve <code>http://www.google-analytics.com/</code></b>. This DNS entry is likely to be &#8220;warm&#8221; given how frequently <code>ga.js</code> is used on the web, but as <a href="http://blog.chromium.org/2008/09/dns-prefetching-or-pre-resolving.html" >Jim Roskind explained on the Chromium blog</a>, it&#8217;s the outliers that kill you.</li>
<li><b>It&#8217;s kinda big</b>. At 9K on the wire (22K unzipped), <code>ga.js</code> is kinda chunky for what it does most of the time, namely tracking a single page load.</li>
<li><b>The <a rel="nofollow" href="http://code.google.com/apis/analytics/docs/tracking/gaTrackingOverview.html" >default instructions</a> are bone-headed</b>. They direct you to do a <code>document.write()</code> which is a blocking, synchronous operation WRT page loading. This is tres <a href="http://raibledesigns.com/rd/entry/oscon_2008_even_faster_web" >dumb</a>. Reasonable people should just include <code>ga.js</code> with a <code>&lt;script&gt;</code> tag, but nearly nobody does. Turns out that sane defaults still matter.</li>
<li><b>Load times seem totally random.</b> As with DNS lookup, <code>ga.js</code>&#8217;s latency varies wildly. This isn&#8217;t backed up by anything empirical, but many pages feel blocked by <code>ga.js</code> for a near eternity.</li>
</ul>
<p>So how to fix this? Dojo 1.3&#8217;s <code>dojox.analytics.Urchin</code> to the rescue!  Given that I was going to be including Dojo on the page to do other things anyway, I can use 1.3&#8217;s new Urchin system to help amortize the cost of using Google Analytics. The code running on this blog now includes the following code (more or less):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre>&lt;script type=&quot;text/javascript&quot;
  src=&quot;http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js&quot;&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  dojo.addOnLoad(function(){
    setTimeout(function(){
      dojo.require(&quot;dojox.analytics.Urchin&quot;)<SEMI>
      dojo.addOnLoad(function(){
        var tracker = new dojox.analytics.Urchin({
          acct: &quot;UA-XXXXXX-X&quot; // your tracking # here
        })<SEMI>
      })<SEMI>
    }, 100)<SEMI>
  })<SEMI>
&lt;/script&gt;</pre></td></tr></table></div>

<p>You can see the real thing by looking at the bottom of this page which pulls in <a href="http://alex.dojotoolkit.org/wp-content/themes/sandbox/custom.js" >custom.js</a> which includes this logic. <a href="http://higginsforpresident.net/2008/06/google-analytics-after-onload/" >Pete Higgins blogged about how the module works when he first wrote it</a>, and the strategy is to load Dojo from a CDN (since the page wanted it for other things) and wait until after the page has loaded to include <code>ga.js</code>. This delayed loading ensures that the page is responsive before we start doing anything related to tracking. The nested calls to <code>dojo.addOnLoad</code> show how we can wait for one set of modules to finish before kicking off another group, and in this case we also wait until after the page is responsive to load <code>dojox.analytics.Urchin</code>. This module further delays loading of <code>ga.js</code>, meaning that it doesn&#8217;t matter how long it takes for things like DNS to resolve and for Google to serve <code>ga.ja</code> since it&#8217;s not ever blocking the user.</p>
<p>Looking at the &#8220;before&#8221; and &#8220;after&#8221; shots in firebug gives you some idea of how this technique can really make a difference:</p>
<div style="padding-left: 50px; font-style: italic;">
<div id="attachment_940" class="wp-caption aligncenter" style="width: 310px"><a href="http://alex.dojotoolkit.org/wp-content/uploads/2009/04/before_loading_detail.png" ><img src="http://alex.dojotoolkit.org/wp-content/uploads/2009/04/before_loading_detail-300x103.png" alt="onload waits for ga.js" title="before_loading_detail" width="300" height="103" class="size-medium wp-image-940" /></a><p class="wp-caption-text">onload waits for ga.js</p></div></p>
<p><div id="attachment_941" class="wp-caption aligncenter" style="width: 310px"><a href="http://alex.dojotoolkit.org/wp-content/uploads/2009/04/loading_detail.png" ><img src="http://alex.dojotoolkit.org/wp-content/uploads/2009/04/loading_detail-300x102.png" alt="using dojox.analytics.Urchin, we can get a responsive page and *then* track usage" title="loading_detail" width="300" height="102" class="size-medium wp-image-941" /></a><p class="wp-caption-text">using dojox.analytics.Urchin, we can get a responsive page and *then* track usage</p></div>
</div>
<p>We get page tracking and the user gets an interactive page faster. Rad.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/04/ending-the-gajs-wait/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Omaha Goes Open Source</title>
		<link>http://alex.dojotoolkit.org/2009/04/omaha-goes-open-source/</link>
		<comments>http://alex.dojotoolkit.org/2009/04/omaha-goes-open-source/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 23:01:14 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[omaha]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=933</guid>
		<description><![CDATA[Google Updater, aka &#8220;Omaha&#8221;, has gone Open Source!
This is the auto-update system that&#8217;s key to keeping Chrome secure by always ensuring that the version you&#8217;re running is the freshest it can be. It&#8217;s huge for the Omaha team to be out in the open, particularly given how many inaccurate articles have been penned about the [...]]]></description>
			<content:encoded><![CDATA[<p>Google Updater, aka &#8220;Omaha&#8221;, has <a rel="nofollow" href="http://google-opensource.blogspot.com/2009/04/google-update-goes-open-source.html" >gone Open Source</a>!</p>
<p>This is the auto-update system that&#8217;s key to keeping Chrome secure by always ensuring that the version you&#8217;re running is the freshest it can be. It&#8217;s huge for the Omaha team to be out in the open, particularly given how many inaccurate articles have been penned about the update system. Now you, dear user and/or journalist, can know exactly what the update system is doing all the time. It&#8217;s all <a rel="nofollow" href="http://code.google.com/p/omaha/" >right there in the code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/04/omaha-goes-open-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo 1.3 Is Out!</title>
		<link>http://alex.dojotoolkit.org/2009/03/dojo-13-is-out/</link>
		<comments>http://alex.dojotoolkit.org/2009/03/dojo-13-is-out/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 15:52:58 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[dhtml]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[openweb]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[dojo13]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=905</guid>
		<description><![CDATA[Dojo 1.3 is here! (download site)
If you&#8217;re already using Dojo, this should be a no-brainer upgrade. It&#8217;s out-and-out better. As a quick example, dojo.create("tagname", { /*properties*/ }) is now the preferred way to build DOM nodes quickly. Its simple API will be natural to anyone who has used dojo.attr(). Even better, Pete&#8217;s exciting PlugD version [...]]]></description>
			<content:encoded><![CDATA[<p>Dojo 1.3 <a href="http://www.dojotoolkit.org/2009/03/31/dojo-1-3-now-available" >is here</a>! (<a href="http://download.dojotoolkit.org/release-1.3.0/" >download site</a>)</p>
<p>If you&#8217;re already using Dojo, this should be a no-brainer upgrade. It&#8217;s out-and-out better. As a quick example, <code>dojo.create("tagname", { /*properties*/ })</code> is now the preferred way to build DOM nodes quickly. Its simple API will be natural to anyone who has used <code>dojo.attr()</code>. Even better, Pete&#8217;s <a rel="nofollow" href="http://code.google.com/p/plugd" >exciting PlugD version of dojo.js has been updated to 1.3 as well</a>.</p>
<p>1.3&#8217;s Core features the new &#8220;Acme&#8221; CSS selector engine which provides a big boost in speed for many operations in the fast-path. <a href="http://alex.dojotoolkit.org/2009/03/dojo-13b3-is-out/" >I blogged before</a> about the work we did to make Acme fast, and rest assured it is (in aggregate, across all use cases) quicker than any other selector system you can get your hands on today. But selector performance isn&#8217;t where it&#8217;s really at, and I&#8217;ve been saying that for a long time. </p>
<p>Luckily, Pete Higgins decided to prove it and has been working on a new set of benchmarks with the help of other toolkit vendors (to ensure fairness) called &#8220;<a href="http://dante.dojotoolkit.org/taskspeed/" >TaskSpeed</a>&#8220;. Dojo 1.3 wins by a wide margin. Across all the reported browsers so far, <b>Dojo is <em>at least</em> 2 times faster than other toolkits on common DOM operations</b>. We&#8217;ve worked very hard over the years to make sure that Dojo&#8217;s APIs don&#8217;t encourage you to do things that will hurt you later, and TaskSpeed finally shows how much this philosophy pays off:</p>
<p><a href="http://dante.dojotoolkit.org/taskspeed/report/charts.html" ><img src="http://alex.dojotoolkit.org/wp-content/uploads/2009/03/taskspeed.png" alt="taskspeed" title="taskspeed" width="560" height="400" class="aligncenter size-medium wp-image-916" /></a></p>
<div style="padding-left: 3em; padding-right: 3em;"><i>The numbers above are from <a href="http://dante.dojotoolkit.org/taskspeed/" >TaskSpeed</a>, a new toolkit benchmark developed by Pete Higgins with tests contributed by other toolkit authors to ensure fairness. Shorter is better.</i></div>
<p><strike>Given that DOM is the primary bottleneck in most apps</strike> <em>DOM is a big bottleneck in today&#8217;s apps, usually just behind network I/O</em> and these tests demonstrate how Dojo&#8217;s approach to keeping things fast pays off not just on micro benchmarks like CSS selector speed, performance improvements to single toolkit functions, or even file size &#8211; but on aggregate performance where it really matters. Dojo&#8217;s modern, compact syntax for these common operations doesn&#8217;t slow it down, either. For instance, if you go check out the <a href="http://dante.dojotoolkit.org/taskspeed/report/charts.html" >TaskSpeed reporting page</a>, you&#8217;ll see that where browsers are slowest (IE6/7/8, etc.), Dojo&#8217;s focus on performance pays off most. Why use a toolkit that&#8217;s going to hurt you when it really counts, particularly when Dojo so easy to get started with?  Dojo&#8217;s Core has been designed from the ground up with APIs that encourage you to do things that are fast and keep you from doing things that are slow unless you really know what you&#8217;re doing. In some cases, we&#8217;ve made hard size-on-the-wire tradeoffs in order to keep actual app performance speedy. That hard engineering doesn&#8217;t show up in micro-benchmarks or single test release-over-release improvements or the &#8220;my toolkit is smaller&#8221; comparisons that some would prefer that web developers focus on. It&#8217;s easy to win rigged games, after all. It&#8217;s only when you see APIs composed together in real-world ways, across browsers, that you can start to see the real impact of a toolkit&#8217;s design philosophy. Dojo is designed to help you make things that are awesome for users, and that means they need to be <em>FAST</em>.</p>
<p>Other toolkits have released performance numbers of late, and most of them have been either reported badly or run without much rigor, so it&#8217;s exciting to see everyone finally pitching in to build end-to-end tests that show how library design decisions interact with real-world realities of browsers. The TaskSpeed tests have been designed to be both even-handed and reliable (no times below timer resolution, etc.). The <a href="http://dante.dojotoolkit.org/taskspeed/report/charts.html" >reporting page is also designed to make the results understandable</a> and put them in context. A lot of care has been taken to keep this benchmark honest. JavaScript developers have suffered at the hand of <a href="http://ajaxian.com/archives/querying-the-dom-on-the-sly" >chart junk</a> for far too long.</p>
<p>I can&#8217;t do 1.3 justice in a single blog post, so I recommend that you check out these resources and then just dive in:</p>
<ul>
<li><a href="http://www.dojotoolkit.org/2009/03/31/dojo-1-3-now-available" >Pete&#8217;s release announcement</a></li>
<li><a href="http://www.dojotoolkit.org/book/dojo-1-3-release-notes" >The Official 1.3 Release Notes</a></li>
<li><a href="http://docs.dojocampus.org/" >The new Documentation (at Dojo Campus)</a></li>
<li><a href="http://download.dojotoolkit.org/release-1.3.0/cheat.html" >The new 1.3 Core Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://code.google.com/p/plugd/" >PlugD: An even easier way to get going with Dojo</a></li>
<li><a href="http://dante.dojotoolkit.org/taskspeed/" >Run the TaskSpeed tests for yourself</a> then <a href="http://dante.dojotoolkit.org/taskspeed/report/charts.html" >see how the toolkits stack up</a> (hint: everything you thought you knew about JS library performance was probably wrong.)</li>
<li>Check out integrations for Dojo that you can probably drop right in to your workflow, no matter what stack you&#8217;re using: , <a href="http://www.springsource.org/webflow" >Spring Web Flow (Java)</a>, <a rel="nofollow" href="http://code.google.com/p/dojango/" >Dojango (Django/Python)</a>, <a rel="nofollow" href="http://code.google.com/p/d-rails/" >DRails (Ruby/RoR)</a>, <a rel="nofollow" href="http://code.google.com/p/tatami/" >Tatami (Java/GWT)</a>, <a href="http://framework.zend.com/" >Zend (PHP)</a>, or <a href="http://dojomino.com/" >Dojomino (Domino Server)</a>.</li>
</ul>
<p>Big thanks to the folks who tried out the betas and RC&#8217;s and helped make 1.3 solid.</p>
]]></content:encoded>
			<wfw:commentRss>http://alex.dojotoolkit.org/2009/03/dojo-13-is-out/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
