<?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>Google Data &#187; Steve Souders</title>
	<atom:link href="/author/steve-souders/feed/" rel="self" type="application/rss+xml" />
	<link>https://googledata.org</link>
	<description>Everything Google: News, Products, Services, Content, Culture</description>
	<lastBuildDate>Fri, 10 Apr 2015 22:28:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<item>
		<title>Chris Anderson: CouchDB: Relaxing Offline JavaScript</title>
		<link>https://googledata.org/google-code/chris-anderson-couchdb-relaxing-offline-javascript/</link>
		<comments>https://googledata.org/google-code/chris-anderson-couchdb-relaxing-offline-javascript/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 00:12:00 +0000</pubDate>
		<dc:creator><![CDATA[Steve Souders]]></dc:creator>
				<category><![CDATA[Google Code]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Last week I hosted Chris Anderson for a Google tech talk on CouchDB as part of the Web Exponents speaker series. Chris is an Apache CouchDB committer. He is co-author of the forthcoming O'Reilly book CouchDB: The Definitive Guide and a director of couc...]]></description>
				<content:encoded><![CDATA[Last week I hosted Chris Anderson for a Google tech talk on <a href="http://couchdb.apache.org/">CouchDB</a> as part of the <a title="Web Exponents" href="http://googlecode.blogspot.com/2009/05/web-e-x-ponents.html" id="k_kz">Web E<sup>x</sup>ponents</a> speaker series. Chris is an Apache <span>CouchDB</span> committer. He is co-author of the forthcoming O'Reilly book <a href="http://books.couchdb.org/relax/"><span>CouchDB</span>: The Definitive Guide</a> and a director of <a href="http://couch.io/" >couch.io</a>.<br /><br />Making web applications work offline is a hot topic. <a href="http://gears.google.com/">Google Gears</a> blazed the trail, and <a href="http://www.w3.org/TR/2009/WD-webstorage-20090910/">Web Storage</a> is part of HTML5. CouchDB is a NoSQL alternative that makes it easy for web apps to run offline. This is important because even as bandwidth grows, latency is still an issue for a significant number of users, and outages or zero-bars can and do happen. CouchDB makes this a non-issue by running your application close to the user, on their device or in their browser. Chris calls this "ground computing" - a refreshing counterpoint to the oft-used "cloud computing" label. Hear more from Chris in his  <a href="http://www.youtube.com/watch?v=ESDBM9-U804">video</a> and <a href="http://www.slideshare.net/jchrisa/couchdb-local-web-platform">slides</a>.<br /><br /><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/ESDBM9-U804&amp;hl=en&amp;fs=1&amp;rel=0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/ESDBM9-U804&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed></object><br /><br />Check out other <a href="http://www.youtube.com/view_play_list?p=689D6EE903ED5CB6">videos</a> in the Web Exponents speaker series:<br /><ul><li><a href="http://googlecode.blogspot.com/2009/02/john-resig-drop-in-javascript.html">John Resig: Drop-in JavaScript Performance</a></li><li><a href="http://googlecode.blogspot.com/2009/03/doug-crockford-javascript-good-parts.html">Doug Crockford: JavaScript: The Good Parts</a></li><li><a href="http://googlecode.blogspot.com/2009/03/steve-souders-lifes-too-short-write.html">Steve Souders: Life's Too Short, Write Fast Code (part 2)</a></li><li><a href="http://googlecode.blogspot.com/2009/05/rob-campbell-debugging-and-testing-web.html">Rob Campbell: Debugging and Testing the Web with Firebug</a><br /></li><li><a href="http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html">Nicholas C. Zakas: Speed Up Your JavaScript</a><br /></li><li><a href="http://googlecode.blogspot.com/2009/04/ppk-open-web-goes-mobile.html">PPK: The Open Web Goes Mobile</a></li><li><a href="http://googlecode.blogspot.com/2009/08/aza-raskin-conversational-computing.html">Aza Raskin: Conversational Computing (Ubiquity &amp; Jetpack)</a><br /></li></ul><br /><span style="font-style: italic;" class="byline-author">By Steve Souders, Performance Evangelist<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-8522364482146221870?l=googlecode.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-code/chris-anderson-couchdb-relaxing-offline-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aza Raskin: Conversational Computing (Ubiquity &amp; Jetpack)</title>
		<link>https://googledata.org/google-code/aza-raskin-conversational-computing-ubiquity-jetpack/</link>
		<comments>https://googledata.org/google-code/aza-raskin-conversational-computing-ubiquity-jetpack/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 08:47:00 +0000</pubDate>
		<dc:creator><![CDATA[Steve Souders]]></dc:creator>
				<category><![CDATA[Google Code]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aza Raskin delivered the eighth Web Exponents tech talk at Google last week. Aza is head of user experience at Mozilla Labs. He's an entrepreneur and Renaissance man, as evidenced by the breadth of topics in his presentation.What I like about Aza is th...]]></description>
				<content:encoded><![CDATA[Aza Raskin delivered the eighth <a title="Web Exponents" href="http://googlecode.blogspot.com/2009/05/web-e-x-ponents.html" id="k_kz">Web E<sup>x</sup>ponents</a> tech talk at Google last week. Aza is head of user experience at <a href="http://labs.mozilla.com/">Mozilla Labs</a>. He's an <a href="http://en.wikipedia.org/wiki/Aza_Raskin">entrepreneur and Renaissance man</a>, as evidenced by the breadth of topics in his presentation.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Wp5Crg_KI10&amp;hl=en&amp;fs=1&amp;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/Wp5Crg_KI10&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />What I like about Aza is that he's a user advocate - sharing our frustrations over the complexities and hurdles of interacting with computers. It's not that applications lack functionality. Aza points out that "90% of the feature requests for features in [Microsoft] Word are in fact for features that are already in Word." The problem is that humans can't interact with, <span style="font-style: italic;">speak with</span>, computer applications using a familiar language.<br /><br /><a href="http://labs.mozilla.com/ubiquity/">Ubiquity</a> is one of the projects from Mozilla Labs that bridges this digital divide. Ubiquity is a Firefox add-on that allows users to complete tasks using a more intuitive language. One example Aza shows is highlighting part of a web page and typing "translate this to Russian". Ubiquity acts on the user's request by replacing the text in the web page with the Russian translation. Another example is typing an address in a Yahoo! Mail message, typing "map this", and having Ubiquity embed the desired Google map inside the email.<br /><br />Aza calls this <span style="font-style: italic;">you-centric computing</span> - allowing us to interact by talking about <span style="font-style: italic;">what </span>we want to do, rather than forcing us to think about  <span style="font-style: italic;">how</span> to do it. Ubiquity achieves this, moving us from a web of nouns to a web of verbs. The point, according to Aza, is "perhaps by adding language, by making things hackable, we go from interfaces which work to our failabilities and our frailities, and instead are a little bit more human and hence a little bit more humane."<br /><br /><a href="https://jetpack.mozillalabs.com/">Jetpack</a> extends Ubiquity's theme of making the Web hackable. Aza describes it as "an incredibly fast prototyping environment for changing the Web to make the Web yours. Sort of like  taking the idea of <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> and mashing it up with extensions and giving it all steroids." Ubiquity and Jetpack allow each of us to make the Web our very own by modifying it to work the way we want.<br /><br />Empowering users to customize the Web and more easily complete tasks moves us from a feeling of helplessness to a feeling of being in control. This is an important point and reminds me of <a href="http://velocityconference.blip.tv/file/2293079/">Matt Mullenweg's talk</a> at Velocity about slow web sites (my personal bent). There Matt says, "...when an interface is faster, you feel good. And ultimately what that comes down to is you feel in control." Empowering users is a common goal, and yet today's web applications still contain many hurdles (complexity, poor interaction language, slowness) that need to be addressed to make users feel in control and ultimately happy. Thanks to Aza and the folks at Mozilla Labs, we're moving closer to the <span style="font-style: italic;">you-centric</span> Web each of us wants.<br /><br /><span style="font-style: italic;" class="byline-author">By Steve Souders, Performance Evangelist</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-4532826188899560838?l=googlecode.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-code/aza-raskin-conversational-computing-ubiquity-jetpack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nicholas C. Zakas: Speed Up Your JavaScript</title>
		<link>https://googledata.org/google-code/nicholas-c-zakas-speed-up-your-javascript/</link>
		<comments>https://googledata.org/google-code/nicholas-c-zakas-speed-up-your-javascript/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 22:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Steve Souders]]></dc:creator>
				<category><![CDATA[Google Code]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nicholas C. Zakas delivers the seventh Web Exponents tech talk at Google. Nicholas is a JavaScript guru and author working at Yahoo!. Most recently we worked together on my next book, Even Faster Web Sites. Nicholas contributed the chapter on Writing E...]]></description>
				<content:encoded><![CDATA[Nicholas C. Zakas delivers the seventh <a title="Web Exponents" href="http://google-code-updates.blogspot.com/2009/05/web-e-x-ponents.html" id="k_kz">Web E<sup>x</sup>ponents</a> tech talk at Google. Nicholas is a JavaScript guru and <a href="http://www.amazon.com/exec/obidos/search-handle-url/ref=ntt_athr_dp_sr_1?_encoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Nicholas%20C.%20Zakas">author</a> working at Yahoo!. Most recently we worked together on my next book, <a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304">Even Faster Web Sites</a>. Nicholas contributed the chapter on Writing Efficient JavaScript, containing much of the sage advice found in this talk. Check out his <a href="http://www.slideshare.net/nzakas/speed-up-your-javascript">slides</a> and watch the <a href="http://www.youtube.com/watch?v=mHtdZgou0qU&amp;feature=PlayList&amp;p=689D6EE903ED5CB6&amp;index=5">video</a>.<br /><br /><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/mHtdZgou0qU&amp;hl=en&amp;fs=1&amp;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/mHtdZgou0qU&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed></object><br /><br />Nicholas starts by asserting that users have a greater expectation that sites will be fast. Web developers need to do most of the heavy lifting to meet these expectations. Much of the slowness in today's web sites comes from JavaScript. In this talk, Nicholas gives advice in four main areas: scope management, data access, loops, and DOM.<br /><br /><span style="font-weight: bold;">Scope Management</span>: When a symbol is accessed, the JavaScript engine has to walk the scope chain to find that symbol. The scope chain starts with local variables, and ends with global variables. Using more local variables and fewer global variables results in better performance. One way to move in this direction is to store a global as a local variable when it's referenced multiple times within a function. Avoiding <span style="font-family:courier new;">with</span> also helps, because that adds more layers to the scope chain. And make sure to use <span style="font-family:courier new;">var</span> when declaring local variables, otherwise they'll end up in the global space which means longer access times.<br /><br /><span style="font-weight: bold;">Data Access:</span> In JavaScript, data is accessed four ways: as literals, variables, object properties, and array items. Literals and variables are the fastest to access, although the relative performance can vary across browsers. Similar to global variables, performance can be improved by creating local variables to hold object properties and array items that are referenced multiple times. Also, keep in mind that deeper object property and array item lookup (e.g., obj.name1.name2.name3) is slower.<br /><br /><span style="font-weight: bold;">Loops:</span> Nicholas points out that for-in and for each loops should generally be avoided. Although they provide convenience, they perform poorly. The choices when it comes to loops are for, do-while, and while. All three perform about the same. The key to loops is optimizing what is performed at each iteration in the loop, and the number of iterations, especially paying attention to the previous two performance recommendations. The classic example here is storing an array's length as a local variable, as opposed to querying the array's <span style="font-family:courier new;">length</span> property on each iteration through a loop.<br /><br /><span style="font-weight: bold;">DOM:</span> One of the primary areas for optimizing your web application's interaction with the DOM is how you handle HTMLCollection objects: document.images, document.forms, etc., as well as the results of calling getElementsByTagName() and getElementsByClassName(). As noted in the <a href="http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506">HTML spec</a>, HTMLCollections "are assumed to be <span style="font-style: italic;">live</span> meaning that they are automatically updated when the underlying document is changed." Any idea how long this code takes to execute?<br /><pre style="margin: 0pt; padding: 0pt;"><br />   var divs = document.getElementsByTagName("div");<br />   for (var i=0; i &lt; divs.length; i++) {<br />       var div = document.createElement("div");<br />       document.body.appendChild(div);<br />   }<br /></pre><br />This code results in an infinite loop! Each time a div is appended to the document, the <span style="font-family:courier new;">divs</span> array is updated, incrementing the length so that the termination condition is never reached. It's best to think of HTMLCollections as live queries instead of arrays. Minimizing the number of times you access HTMLCollection properties (hint: copy length to a local variable) is a win. It can also be faster to copy the HTMLCollection into a regular array when the contents are accessed frequently (see the slides for a code sample).<br /><br />Another area for improving DOM performance is <span style="font-style: italic;">reflow </span>- when the browser computes the page's layout. This happens more frequently than you might think, especially for web applications with heavy use of DHTML. If you have code that makes significant layout changes, consider making the changes within a <a href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20020409/core.html#ID-B63ED1A3">DocumentFragment</a> or setting the <span style="font-family:courier new;">className</span> property to alter styles.<br /><br />There is hope for a faster web as browsers come equipped with JIT compilers and native code generation. But the legacy of previous, slower browsers will be with us for quite a while longer. So hang in there. With evangelists like Nicholas in the lead, it's still possible to find your way to a fast, efficient web page.<br /><br /><span style="font-style: italic;" class="byline-author">By Steve Souders, Performance Evangelist<br /><br /></span><br />Check out other blog posts and <a href="http://www.youtube.com/view_play_list?p=689D6EE903ED5CB6">videos</a> in the Web Exponents speaker series:<br /><ul><li><a href="http://google-code-updates.blogspot.com/2009/02/john-resig-drop-in-javascript.html">John Resig: Drop-in JavaScript Performance</a></li><li><a href="http://google-code-updates.blogspot.com/2009/03/doug-crockford-javascript-good-parts.html">Doug Crockford: JavaScript: The Good Parts</a></li><li><a href="http://google-code-updates.blogspot.com/2009/03/steve-souders-lifes-too-short-write.html">Steve Souders: Life's Too Short, Write Fast Code (part 2)</a><br /></li><li><a href="http://google-code-updates.blogspot.com/2009/04/ppk-open-web-goes-mobile.html">PPK: The Open Web Goes Mobile</a></li><li><a href="http://google-code-updates.blogspot.com/2009/05/rob-campbell-debugging-and-testing-web.html">Rob Campbell: Debugging and Testing the Web with Firebug</a><br /></li></ul><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-1153502281837697220?l=googlecode.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-code/nicholas-c-zakas-speed-up-your-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
