<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUYBRH86cCp7ImA9WxNbEk4.&quot;"><id>tag:blogger.com,1999:blog-11300808</id><updated>2009-11-14T14:19:15.118-08:00</updated><title type="text">Google Code Blog</title><subtitle type="html">Updates from Google's open source projects.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://googlecode.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Chris DiBona</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>590</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/blogspot/Dcni" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DEMCQ3w5cSp7ImA9WxNUGEQ.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-1859951683125381709</id><published>2009-11-10T15:40:00.000-08:00</published><updated>2009-11-10T15:41:02.229-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T15:41:02.229-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Go: A New Programming Language</title><content type="html">Have you heard about Go? We released a new, experimental systems programming language today.  It is open source and we're excited about sharing it with the development community. For more information, check out the &lt;a href="http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html"&gt;Google Open Source blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Robert Griesemer, Rob Pike, Ken Thompson, Ian Taylor, Russ Cox, Jini Kim and Adam Langley - The Go Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-1859951683125381709?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=y2S8feofpjE:gOOf3YkSLaU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=y2S8feofpjE:gOOf3YkSLaU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=y2S8feofpjE:gOOf3YkSLaU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/y2S8feofpjE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/1859951683125381709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/go-new-programming-language.html#comment-form" title="22 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/1859951683125381709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/1859951683125381709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/y2S8feofpjE/go-new-programming-language.html" title="Go: A New Programming Language" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">22</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/go-new-programming-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUESHw8eip7ImA9WxNbEU4.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-3637099642721036094</id><published>2009-11-09T12:00:00.000-08:00</published><updated>2009-11-13T10:16:49.272-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T10:16:49.272-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="faster web" /><title>Use compression to make the web faster</title><content type="html">Every day, more than 99 human years are wasted because of &lt;a href="http://en.wikipedia.org/wiki/File_compression" id="mb4g" target="_blank" title="uncompressed content"&gt;uncompressed content&lt;/a&gt;. Although support for compression is a standard feature of all modern browsers, there are still many cases in which users of these browsers do not receive compressed content. This wastes bandwidth and slows down users' interactions with web pages.&lt;br /&gt;&lt;br /&gt;Uncompressed content hurts all users. For bandwidth-constrained users, it takes longer just to transfer the additional bits. For broadband connections, even though the bits are transferred quickly, it takes several round trips between client and server before the two can communicate at the highest possible speed.&amp;nbsp; For these users the number of round trips is the larger factor in determining the time required to load a web page. Even for well-connected users these round trips often take tens of milliseconds and sometimes well over one hundred milliseconds.&lt;br /&gt;&lt;br /&gt;In Steve Souders' book&amp;nbsp;&lt;i&gt;&lt;a href="http://www.stevesouders.com/blog/2009/04/23/even-faster-web-sites/" id="mwy1" target="_blank" title="Even Faster Web Sites"&gt;Even Faster Web Sites&lt;/a&gt;&lt;/i&gt;, Tony Gentilcore presents data showing the page load time increase with compression disabled.&amp;nbsp; We've reproduced the results for three highest ranked sites from the Alexa top 100 with permission here:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvTLbNKnhlI/AAAAAAAAC10/SEAqXE4YcDY/s1600-h/compresssion1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 110px; border: 0;" src="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvTLbNKnhlI/AAAAAAAAC10/SEAqXE4YcDY/s400/compresssion1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401165521375168082" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;font size=1&gt;Data, with permission, from Steve Souders, "Chapter 9: Going Beyond Gzipping," in &lt;i&gt;&lt;a href="http://www.stevesouders.com/blog/2009/04/23/even-faster-web-sites/" id="s7eq" target="_blank" title="Even Faster Web Sites"&gt;Even Faster Web Sites&lt;/a&gt; &lt;/i&gt;(Sebastapol, CA: O'Reilly, 2009), 122.&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The data from Google's web search logs show that the average page load time for users getting uncompressed content is 25% higher compared to the time for users getting compressed content. In a randomized experiment where we forced compression for some users who would otherwise not get compressed content, we measured a latency improvement of 300ms.&amp;nbsp; While this experiment did not capture the full difference, that is probably because users getting forced compression have older computers and older software.&lt;br /&gt;&lt;br /&gt;We have found that there are 4 major reasons why users do not get compressed content: anti-virus software, browser bugs, web proxies, and misconfigured web servers.&amp;nbsp; The first three modify the &lt;a href="http://en.wikipedia.org/wiki/HTTP_request#Request_message" id="i83q" target="_blank" title="web request"&gt;web request&lt;/a&gt; so that the web server does not know that the browser can uncompress content. Specifically, they remove or mangle the Accept-Encoding header that is normally sent with every request.&lt;br /&gt;&lt;br /&gt;Anti-virus software may try to minimize CPU operations by intercepting and altering requests so that web servers send back uncompressed content.&amp;nbsp; But if the CPU is not the bottleneck, the software is not doing users any favors.&amp;nbsp; Some popular antivirus programs interfere with compression.&amp;nbsp; Users can check if their anti-virus software is interfering with compression by visiting the&amp;nbsp;&lt;a title="browser compression test page" href="http://www.browserscope.org/network/test?test_key=gzip" id="dbh7"&gt;browser compression test page&lt;/a&gt; at Browserscope.org.&lt;br /&gt;&lt;br /&gt;By default, Internet Explorer 6 downgrades to HTTP/1.0 when behind a proxy, and as a result does not send the Accept-Encoding request header. The table below, generated from Google's web search logs, shows that IE 6 represents 36% of all search results that are sent without compression.&amp;nbsp; This number is far higher than the percentage of people using IE 6.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvTL2BJf_QI/AAAAAAAAC18/hxbW9EVp-8o/s1600-h/compression2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 200px; border: 0;" src="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvTL2BJf_QI/AAAAAAAAC18/hxbW9EVp-8o/s400/compression2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401165982005722370" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;font size=1&gt;Data from Google Web Search Logs&lt;/font&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;There are a handful of ISPs, &amp;nbsp;where the percentage of uncompressed content is over 95%.&amp;nbsp; One likely hypothesis is that either an ISP or a corporate proxy removes or mangles the Accept-Encoding header.&amp;nbsp; As with anti-virus software, a user who suspects an ISP is interfering with compression should visit the &lt;a title="browser compression test page" href="http://www.browserscope.org/network/tests/gzip" id="ecuz"&gt;browser compression test page&lt;/a&gt; at Browserscope.org.&lt;br /&gt;&lt;br /&gt;Finally, in many cases, users are not getting compressed content because the websites they visit are not compressing their content.&amp;nbsp; The following table shows a few popular websites that do not compress all of their content. If these websites were to compress their content, they could decrease the page load times by hundreds of milliseconds for the average user, and even more for users on modem connections.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EuCTzLdp3vE/SvTMrfWT0fI/AAAAAAAAC2E/oeqUJl1Ts0A/s1600-h/compression3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 66px; border: 0;" src="http://3.bp.blogspot.com/_EuCTzLdp3vE/SvTMrfWT0fI/AAAAAAAAC2E/oeqUJl1Ts0A/s400/compression3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401166900645581298" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;font size=1&gt;&lt;i&gt;Data generated using &lt;a title="PageSpeed" href="http://code.google.com/speed/page-speed/" id="krpp"&gt;Page Speed&lt;/a&gt;&lt;/font&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;To reduce uncompressed content, we all need to work together.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Corporate IT departments and individual users can upgrade their browsers, especially if they are using IE 6 with a proxy. Using the latest version of&amp;nbsp;&lt;a href="http://www.mozilla.com/en-US/firefox/upgrade.html" id="uwkg" target="_blank" title="Firefox"&gt;Firefox&lt;/a&gt;, &lt;a href="http://ie8.msn.com/" target="_blank" title="MSIE"&gt;Internet Explorer&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.opera.com/" id="m-d9" target="_blank" title="Opera"&gt;Opera&lt;/a&gt;, &lt;a href="http://www.apple.com/safari/" id="pg0m" target="_blank" title="Safari"&gt;Safari&lt;/a&gt;, or &lt;a href="http://www.google.com/chrome" target="_blank" title="Chrome"&gt;Google Chrome&lt;/a&gt; will increase the chances of getting compressed content. &amp;nbsp;A recent editorial in &lt;a href="http://www.spectrum.ieee.org/telecom/internet/we-come-to-bury-ie6" id="a7oz" target="_blank" title="IEEE"&gt;IEEE Spectrum&lt;/a&gt;&amp;nbsp;lists additional reasons - besides compression - for upgrading from IE6.&lt;/li&gt;&lt;li&gt;Anti-virus software vendors can start handling compression properly and would need to stop removing or mangling the Accept-Encoding header in upcoming releases of their software.&lt;/li&gt;&lt;li&gt;ISPs that use an HTTP proxy which strips or mangles the Accept-Encoding header can upgrade, reconfigure or install a better proxy which doesn't prevent their users from getting compressed content.&lt;/li&gt;&lt;li&gt;Webmasters can use &lt;a href="http://code.google.com/speed/page-speed/" id="ydqr" target="_blank" title="PageSpeed"&gt;Page Speed&lt;/a&gt; (or other similar tools) to check that the content of their pages is compressed.&lt;/li&gt;&lt;/ul&gt;For more articles on speeding up the web, check out &lt;a href="http://code.google.com/speed/articles/"&gt;http://code.google.com/speed/articles/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Arvind Jain, Engineering Director and Jason Glasgow, Staff Software Engineer&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-3637099642721036094?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=sTz5JoUTCyw:mVnZnJEAkm0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=sTz5JoUTCyw:mVnZnJEAkm0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=sTz5JoUTCyw:mVnZnJEAkm0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/sTz5JoUTCyw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/3637099642721036094/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/use-compression-to-make-web-faster.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3637099642721036094?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3637099642721036094?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/sTz5JoUTCyw/use-compression-to-make-web-faster.html" title="Use compression to make the web faster" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvTLbNKnhlI/AAAAAAAAC10/SEAqXE4YcDY/s72-c/compresssion1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/use-compression-to-make-web-faster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQFSXc4fyp7ImA9WxNUFEk.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-3771887164161872998</id><published>2009-11-05T10:30:00.000-08:00</published><updated>2009-11-05T11:11:58.937-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T11:11:58.937-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="faster web" /><title>Introducing Closure Tools</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvIwmKttuCI/AAAAAAAAC1U/h9AdUMdkEO4/s1600-h/closure.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 72px; height: 72px; border:0" src="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvIwmKttuCI/AAAAAAAAC1U/h9AdUMdkEO4/s200/closure.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5400432335439902754" /&gt;&lt;/a&gt;Millions of Google users worldwide use JavaScript-intensive applications such as &lt;a href="http://mail.google.com/" id="nlv9" title="Gmail"&gt;Gmail&lt;/a&gt;, &lt;a href="http://docs.google.com/" id="zq_3" title="Google Docs"&gt;Google Docs&lt;/a&gt;, and &lt;a href="http://maps.google.com/" id="lh23" title="Google Maps"&gt;Google Maps&lt;/a&gt;. Like developers everywhere, Googlers want great web apps to be easier to create, so we've built many tools to help us develop these (and many other) apps. We're happy to announce the open sourcing of these tools, and proud to make them available to the web development community.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Closure Compiler&lt;/b&gt;&lt;br /&gt;&lt;a href="http://code.google.com/closure/compiler" title="Closure Compiler"&gt;Closure Compiler&lt;/a&gt; is a JavaScript optimizer that compiles web apps down into compact, high-performance JavaScript code. The compiler removes dead code, then rewrites and minimizes what's left so that it will run fast on browsers' JavaScript engines. The compiler also checks syntax, variable references, and types, and warns about other common JavaScript pitfalls. These checks and optimizations help you write apps that are less buggy and easier to maintain. You can use the compiler with &lt;a href="http://code.google.com/closure/compiler/docs/inspector.html" title="Closure Inspector"&gt;Closure Inspector&lt;/a&gt;, a Firebug extension that makes debugging the obfuscated code almost as easy as debugging the human-readable source. &lt;br /&gt;&lt;br /&gt;Because JavaScript developers are a diverse bunch, we've set up a number of ways to run the Closure Compiler. We've open-sourced a&amp;nbsp;&lt;a href="http://code.google.com/p/closure-compiler/downloads/list" title="command-line tool"&gt;command-line tool&lt;/a&gt;. We've created a&amp;nbsp;&lt;a href="http://closure-compiler.appspot.com/" title="web application"&gt;web application&lt;/a&gt;&amp;nbsp;that accepts your code for compilation through a text box or a RESTful API. We are also offering a Firefox extension that you can use with &lt;a href="http://code.google.com/speed/page-speed/download.html" title="Page Speed"&gt;Page Speed&lt;/a&gt; to conveniently see the performance benefits for your web pages.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Closure Library&lt;/b&gt;&lt;br /&gt;&lt;a href="http://code.google.com/closure/library" id="qnzg" title="Closure Library"&gt;Closure Library&lt;/a&gt;&amp;nbsp;is a broad, well-tested, modular, and cross-browser JavaScript library. Web developers can pull just what they need from a wide set of reusable UI widgets and controls, as well as lower-level utilities for the DOM, server communication, animation, data structures, unit testing, rich-text editing, and much, much more. (Seriously. Check&amp;nbsp;&lt;a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html" id="q11v" title="the docs"&gt;the docs&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;JavaScript lacks a standard class library like the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Standard_Template_Library" id="novt" title="STL"&gt;STL&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Java_Development_Kit" id="lrab" title="JDK"&gt;JDK&lt;/a&gt;. At Google, Closure Library serves as our "standard JavaScript library" for creating large, complex web applications. It's purposely server-agnostic and intended for use with the Closure Compiler. You can make your project big and complex (with namespacing and type checking), yet small and fast over the wire (with compilation). The Closure Library provides clean utilities for common tasks so that you spend your time writing your app rather than writing utilities and browser abstractions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Closure Templates&lt;/b&gt; &lt;br /&gt;&lt;a href="http://code.google.com/closure/templates" id="j_2h" title="Closure Templates"&gt;Closure Templates&lt;/a&gt;&amp;nbsp;grew out of a desire for web templates that are precompiled to efficient JavaScript. &amp;nbsp;Closure Templates have a simple syntax that is natural for programmers. &amp;nbsp;Unlike traditional templating systems, you can think of Closure Templates as small components that you compose to form your user interface, instead of having to create one big template per page.&lt;br /&gt;&lt;br /&gt;Closure Templates are implemented for both JavaScript and Java, so you can use the same templates both on the server and client side.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Closure Compiler, Closure Library, Closure Templates, and Closure Inspector all started as &lt;a href="http://googleblog.blogspot.com/2006/05/googles-20-percent-time-in-action.html" id="ghae" title="20% projects"&gt;20% projects&lt;/a&gt;&amp;nbsp;and hundreds of Googlers have contributed thousands of patches. Today, each Closure Tool has grown to be a key part of the JavaScript infrastructure behind web apps at Google. &amp;nbsp;That's why we're particularly excited (and humbled) to open source them to encourage and support web development outside Google. We want to hear what you think, but more importantly, we want to see what you make. So have at it and have fun!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By the Closure Tools team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-3771887164161872998?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=hknf8RP9JBQ:rf9_bL6k3j8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=hknf8RP9JBQ:rf9_bL6k3j8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=hknf8RP9JBQ:rf9_bL6k3j8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/hknf8RP9JBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/3771887164161872998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/introducing-closure-tools.html#comment-form" title="61 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3771887164161872998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3771887164161872998?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/hknf8RP9JBQ/introducing-closure-tools.html" title="Introducing Closure Tools" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_EuCTzLdp3vE/SvIwmKttuCI/AAAAAAAAC1U/h9AdUMdkEO4/s72-c/closure.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">61</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/introducing-closure-tools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMNQXg4eip7ImA9WxNUE0g.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-1864423490001668537</id><published>2009-11-04T08:50:00.000-08:00</published><updated>2009-11-04T08:51:30.632-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-04T08:51:30.632-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="social" /><category scheme="http://www.blogger.com/atom/ns#" term="google friend connect" /><title>New personalization features in Google Friend Connect</title><content type="html">Today, we're excited to announce several new features for &lt;a id="fuwf" href="http://www.google.com/friendconnect" title="Google Friend Connect"&gt;Google Friend Connect&lt;/a&gt; that make it possible for website owners to get to know their users, encourage users to get to know each other, and match their site content (including Google ads) to visitors' interests. Check out the &lt;a href="http://googlesocialweb.blogspot.com/2009/11/google-friend-connect-now-more.html"&gt;Google Social Web Blog&lt;/a&gt; for an overview of these new features.&lt;br /&gt;&lt;br /&gt;We also want to point out that there are APIs for developers who want to play with the interests data programmatically. With the new interest data described on the Social Web Blog, developers can write custom polls and access the interests data directly.&amp;nbsp;&lt;a id="hqnx" href="http://code.google.com/apis/friendconnect/interests.html" title="Friend Connect provides API level access"&gt;Friend Connect provides API level access&lt;/a&gt; to both individual interests information as well as aggregate information for all users of a site. Interests information can be added programmatically for the signed-in user or via the poll gadget, and it can be accessed via both the &lt;a id="ehrf" href="http://code.google.com/apis/friendconnect/opensocial_and_gfc.html#profile" title="JavaScript API"&gt;JavaScript API&lt;/a&gt; and the &lt;a id="ndw4" href="http://code.google.com/apis/friendconnect/opensocial_rest_rpc.html#endpoints" title="OpenSocial REST API"&gt;OpenSocial REST API&lt;/a&gt;. The &lt;a id="olt1" href="http://www.ossamples.com/guitar-universe/" title="Guitar Universe example site"&gt;Guitar Universe example site&lt;/a&gt; should give you an idea of some of the things that are possible with this new launch.&lt;br /&gt;&lt;br /&gt;As always, feel free to ask technical questions related to the Friend Connect APIs in the &lt;a href="http://groups.google.com/group/google-friend-connect-developers?pli=1"&gt;developer forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Mussie Shore, Product Manager, Google Friend Connect&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-1864423490001668537?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=vuwrCaSZlIs:F2dR8AZIIVs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=vuwrCaSZlIs:F2dR8AZIIVs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=vuwrCaSZlIs:F2dR8AZIIVs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/vuwrCaSZlIs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/1864423490001668537/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/new-personalization-features-in-google.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/1864423490001668537?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/1864423490001668537?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/vuwrCaSZlIs/new-personalization-features-in-google.html" title="New personalization features in Google Friend Connect" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/new-personalization-features-in-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4EQXkzcSp7ImA9WxNUEks.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-6665355092803757245</id><published>2009-11-03T09:05:00.000-08:00</published><updated>2009-11-03T09:05:00.789-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T09:05:00.789-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="google apps" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>OAuth Enhancements</title><content type="html">Google has recently added three important enhancements to our OAuth support:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The ability to use OAuth without registration&lt;br&gt;&lt;/li&gt;&lt;li&gt;Support for software apps installed on a computer or mobile phone&lt;/li&gt;&lt;li&gt;Additional controls for our Google Apps Premier and Education customers which allows administrators to give another web application access to a subset of the data Google stores for that organization&lt;/li&gt;&lt;/ol&gt;Below is an overview of each enhancement, or you can refer to our updated&amp;nbsp;&lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html" id="wzth" title="OAuth documentation"&gt;OAuth documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. The ability to use OAuth without registration&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Based on consistent feedback from our developers, we added the ability to use OAuth without having to register the website ahead of time. This change is especially helpful for developers working on test servers that cannot be accessed directly from the Internet.&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;2. Support for software apps installed on a computer or mobile phone&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Many of the larger enterprises that use the &lt;a id="uryv" href="http://www.google.com/a" title="Google Apps"&gt;Google Apps&lt;/a&gt; service choose to run their own login system. They accomplish this by leveraging our support for the &lt;a id="kzow" href="http://code.google.com/apis/apps/sso/saml_reference_implementation.html" title="SAML protocol"&gt;SAML protocol&lt;/a&gt; which defines a way for Google to redirect the user to the company's login system to be authenticated before accessing their mailbox at Google. &amp;nbsp;However, in this situation Google normally does not have a password for the user — especially if the enterprise authenticates the user with a password and with a second factor of authentication (such as a token generator they carry on a keychain). Unfortunately, there are many installed software applications created by both Google and ISV developers that use Google's APIs, and those applications are hardcoded to ask a user for their email and password using Google's ClientLogin API. With this new OAuth feature, the software application can now launch a web browser and start a process that both logs the user in through their central SAML login system, and that also gets the user's consent to access their data hosted at Google. Because the user authentication is done in the web browser, it will work with the enterprise's existing login system. &amp;nbsp;Google is encouraging any ISV that uses the ClientLogin API to add support for this new OAuth flow, enabling usage by the large enterprise customers described above. Google is also planning to enhance our &lt;a href="https://tools.google.com/dlpage/gappssync" id="ddpv" title="Google Apps Sync"&gt;Google Apps Sync&lt;/a&gt; for Microsoft Outlook to support this feature such that Outlook can be used with both Google Apps and an enterprise's central login system.&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;3. Additional controls for our Google Apps Premier and Education customers which allows administrators to give another web application access to a subset of the data Google stores for that organization&lt;/b&gt;&lt;br /&gt;  &lt;br /&gt;This feature for our Google Apps Premier customers enhances our existing &lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html#GoogleAppsOAuth" id="kp3:" title="OAuth for Google Apps domain administrators"&gt;OAuth for Google Apps domain administrators&lt;/a&gt;, also known as 2-legged OAuth. This feature enables domain administrators to allow specific IT apps or third party web services limited access to user accounts via a centralized permissions system under the control of the&amp;nbsp; domain administrator. For example, with this new system, an administrator can use the Google Documents API to configure every user in the domain to have a Google Docs folder named "Human Resources" that is automatically populated with common employee forms. &amp;nbsp;The company might also sign up with an Enterprise SaaS vendor such as &lt;a id="ewj:" href="http://www.manymoon.com" title="Manymoon"&gt;Manymoon&lt;/a&gt; and specify that Manymoon can access the Google Calendars of all of their users, providing tighter integration with Manymoon's project scheduling features. Previously, this feature required giving the third party vendor access to all of the data that Google stored for that organization, but with this new feature, administrators can limit access to particular data sources (Calendar, Documents, etc). Refer to our &lt;a id="e2vr" href="http://www.google.com/support/a/bin/answer.py?hl=en&amp;amp;answer=61017" title="documentation"&gt;documentation&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Eric Sachs, Product Manager, Google Security&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-6665355092803757245?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=NQjGGa1nZ10:f-buJJkTpfI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=NQjGGa1nZ10:f-buJJkTpfI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=NQjGGa1nZ10:f-buJJkTpfI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/NQjGGa1nZ10" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/6665355092803757245/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/oauth-enhancements.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/6665355092803757245?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/6665355092803757245?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/NQjGGa1nZ10/oauth-enhancements.html" title="OAuth Enhancements" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/oauth-enhancements.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNQno_cCp7ImA9WxNUEks.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-5925880629562754672</id><published>2009-11-03T09:00:00.000-08:00</published><updated>2009-11-03T09:13:13.448-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T09:13:13.448-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Hybrid Onboarding</title><content type="html">Do you operate a website and wish you could increase the percentage of users who finish the registration process? As discussed on Google's &lt;a id="pm.j" href="http://googleblog.blogspot.com/2009/11/cutting-back-on-your-long-list-of.html" title="main blog"&gt;main blog&lt;/a&gt;, Google has been working with Plaxo and Facebook to improve the registration success rate for Gmail users. We now see success rates as high as 90%, compared to the 50-60% rate that most websites see with traditional registration mechanisms. This result was achieved using a combination of our &lt;a href="http://code.google.com/apis/accounts/docs/OpenID.html" id="m3i1" title="OpenID"&gt;OpenID&lt;/a&gt;, &lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html" id="ebnq" title="OAuth"&gt;OAuth&lt;/a&gt; and &lt;a href="http://code.google.com/apis/contacts/docs/poco/1.0/developers_guide.html" id="lf4t" title="Portable Contacts"&gt;Portable Contacts&lt;/a&gt; APIs. While those APIs have been available for over a year, we have added a number of refinements based on our experience with Plaxo and Facebook. Our documentation now has information on those new features, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OpenID User Interface Extension 1.0 (including the ability to display the favicon of the website)&lt;/li&gt;&lt;li&gt;x-has-session, which is an enhacement to checkid_immediate requests via the UI extension. If the request includes "openid.ui.x-has-session," it will be echoed in the response only if Google detects an authenticated session&lt;/li&gt;&lt;li&gt;Support for the US Government's GSA profile for OpenID&lt;/li&gt;&lt;li&gt;PAPE (Provider Authentication Policy Extension) to support forced password reprompts&lt;/li&gt;&lt;li&gt;Support for not only Google Accounts, but also our Google Apps customers, as discussed on the &lt;a href="http://googleenterprise.blogspot.com/2009/11/single-sign-on-to-zoho-tripit-socialwok.html" id="d5aa" title="Enterprise blog"&gt;Enterprise blog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;For more details, please refer to our &lt;a href="http://code.google.com/apis/accounts/docs/OpenID.html" id="v6tc" title="OpenID"&gt;OpenID&lt;/a&gt; documentation.&lt;br /&gt;  &lt;br /&gt;While these technologies are all standards-based, the methods for how to combine them to achieve this success rate are not obvious, and took a while for the industry to refine. More information is available in the &lt;a href="http://sites.google.com/site/oauthgoog/UXFedLogin/hybridonboarding" id="mih9" title="Hybrid Onboarding Guide"&gt;Hybrid Onboarding Guide&lt;/a&gt;, but below is a quick summary of some of the best practices for this hybrid onboarding technique:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The technique is primarily for websites with an existing login system based on email addresses.&lt;/li&gt;&lt;li&gt;It also assumes the website will send email to users who are not yet registered, whether it is through traditional email marketing or social network invitations.&lt;/li&gt;&lt;li&gt;The website owner then needs to choose a small set of email providers such as Yahoo and Google that support these standards.&lt;/li&gt;&lt;li&gt;Whenever the website sends email to a user at one of those providers, any hyperlinks that promote registration at the website should be modified to communicate the email address (or at least domain) of the user back to the website's registration page.&lt;/li&gt;&lt;li&gt;If the registration page detects a user from one of these domains, it should NOT start the traditional process of asking the user to enter a password, password confirmation, and email. Instead, it should prominently show a single button that says "Sign up with your Google Account" — where Google is replaced with the name of the email provider.&lt;/li&gt;&lt;li&gt;If the user clicks that button, the website should use the OpenID protocol to ask the email provider to authenticate the user, provide their email address, and optionally ask for access to their address book using the hybrid OpenID/OAuth protocol and the Portable Contacts API. More details about this flow are available on the&amp;nbsp;&lt;a href="http://openid.net/2009/09/25/more-powerful-and-easier-to-use/" rel="nofollow" title="OpenID blog"&gt;OpenID blog.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Once the user returns to the website, it can create an account entry for the user. The website can also mark the email address as verified without having to send a traditional "email verification" link to the user. If the website received the user's permission to access their address book, it can now download it and look for information about the user's friends.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;In the unusual case where an account already exists for that email address, the website can simply log the user into that pre-existing account.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;For any newly registered user, the website should then display a page that confirms the user is registered and that indicates how they should sign in in the future.&lt;/li&gt;&lt;li&gt;To make the login process simple, the website should modify their login box to include a logo for each of the trusted email providers it supports, or use one of the other&amp;nbsp;&lt;a href="http://sites.google.com/site/oauthgoog/UXFedLogin/summary" title="user experiences for Federated Login"&gt;user experiences for Federated Login.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;If a user clicks the email provider button, they can again be sent to that provider's site using the OpenID protocol. When the user comes back, the website can either detect that they previously registered, or if it is a new user, the website can create an account for them on the fly.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;In some cases the account may already exist for that email address, but it was not initially registered using OpenID. In that case, the website can simply log the user in to that pre-existing account.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Eric Sachs, Product Manager, Google Security&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-5925880629562754672?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=qJ_wwjwNZto:ilfBROPGAWY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=qJ_wwjwNZto:ilfBROPGAWY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=qJ_wwjwNZto:ilfBROPGAWY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/qJ_wwjwNZto" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/5925880629562754672/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/11/hybrid-onboarding.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5925880629562754672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5925880629562754672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/qJ_wwjwNZto/hybrid-onboarding.html" title="Hybrid Onboarding" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/11/hybrid-onboarding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGRH4zcSp7ImA9WxNVGU4.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-7019798791105040236</id><published>2009-10-30T11:30:00.000-07:00</published><updated>2009-10-30T13:40:25.089-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-30T13:40:25.089-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google code" /><category scheme="http://www.blogger.com/atom/ns#" term="app engine" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="visualization" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><title>Google Analytics API on App Engine Treemap Visualization</title><content type="html">It's Friday, time for some fun!&lt;br /&gt;&lt;br /&gt;Here is a captivating way to visualize your Google Analytics data in a Treemap visualization and you can &lt;a href="http://analytics-api-sample.appspot.com/"&gt;visualize your own data&lt;/a&gt; with our live demo.&lt;br /&gt;(note: IE currently not supported for visualization part)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://docs.google.com/a/google.com/File?id=agncg6gxcc_173d42w8pfj_b"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 607px;" src="https://docs.google.com/a/google.com/File?id=agncg6gxcc_173d42w8pfj_b" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CnYDv9X2Cx4&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CnYDv9X2Cx4&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The goal of this example was to teach people how to use the Google Analytics API on App Engine in Java. As well as demonstrating how to use both OAuth and AuthSub along with the App Engine's various services. The code looked great, but the output was a boring HTML table. So I used some open source tools to transform the table into a pretty tree map visualization!&lt;br /&gt;&lt;br /&gt;All the code has been &lt;a href="http://code.google.com/p/ga-api-java-samples/source/browse/trunk/src/v1/appengine-sample/"&gt;open sourced&lt;/a&gt; on Google Project hosting. I also wrote an &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataAppEngine.html"&gt;article describing how this application works&lt;/a&gt; making it easy for developers to use this example as a starting point for new data visualizations and other Google Data projects.&lt;br /&gt;&lt;br /&gt;For the data retrieval part, this example uses the &lt;a href="http://code.google.com/appengine/docs/java/overview.html"&gt;App Engine Java SDK&lt;/a&gt; and the &lt;a href="http://code.google.com/apis/analytics/docs/gdata/1.0/gdataJava.html"&gt;Google Analytics Data Export API Java Client Library&lt;/a&gt; to retrieve data from Google Analytics. The example code implements both unsigned &lt;a href="http://code.google.com/apis/accounts/docs/AuthSub.html"&gt;AuthSub&lt;/a&gt; and registered &lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html"&gt;OAuth&lt;/a&gt; authorization methods allowing developers to get up and running quickly in development environments and later switch to a secure authorization method in production environments. The application also uses the &lt;a href="http://en.wikipedia.org/wiki/Model_view_controller"&gt;Model-View-Controller&lt;/a&gt; pattern, making it flexible and allowing developers to extend the code for new applications. (like adding support for other Google Data APIs)&lt;br /&gt;&lt;br /&gt;For the visualization part, I used the open-sourced &lt;a href="http://vis.stanford.edu/protovis/"&gt;Protovis SVG Visualization Library&lt;/a&gt; to create the Treemap. This JavaScript library is maintained by the Stanford Visualization Group and excels at creating brand new visualizations from a data set (in this case a boring HTML table). To handle all of the interactions, including rollover, tooltips and slider controls, I used &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;. Here is the &lt;a href="http://code.google.com/p/ga-api-java-samples/source/browse/trunk/src/v1/appengine-sample/war/js/ga.treemap.js"&gt;JavaScript source to the visualization&lt;/a&gt; part of the sample.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Nick Mihailovski, The Google Analytics API Team&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;P.S. If you have created any cool new visualizations using the Google Analytics Data Export API, &lt;a href="mailto:analytics-api@google.com"&gt;email us&lt;/a&gt; so we can highlight them as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-7019798791105040236?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=3Qo1LWjY_Xg:ay29JBEP3VE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=3Qo1LWjY_Xg:ay29JBEP3VE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=3Qo1LWjY_Xg:ay29JBEP3VE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/3Qo1LWjY_Xg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/7019798791105040236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/google-analytics-api-on-app-engine.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7019798791105040236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7019798791105040236?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/3Qo1LWjY_Xg/google-analytics-api-on-app-engine.html" title="Google Analytics API on App Engine Treemap Visualization" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/google-analytics-api-on-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MMSHk-fCp7ImA9WxNVFk0.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-3843028457288256078</id><published>2009-10-26T15:40:00.001-07:00</published><updated>2009-10-26T18:04:49.754-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-26T18:04:49.754-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google code" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="feeds" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="themes" /><category scheme="http://www.blogger.com/atom/ns#" term="custom search" /><title>Customize your results snippets with structured data</title><content type="html">Custom Search themes make it easy for you to customize the look and feel of your search results pages. And if you want to take the customization gig further, you can also customize the result snippet—a small sample of content that gives search users an idea of what's in the webpage—by using structured data.&lt;br /&gt;&lt;br /&gt;When you are reading a webpage that reviews a film, you can figure out what the title is, what reviewers thought of the film, and how they rated it. You can even search for stores with the best prices for the DVD. Structured data can convey the meaning of such key information to computers.&lt;br /&gt;&lt;br /&gt;Structured data formats—such as microformats, RDFa, and PageMaps—are semantic markup that you add to your HTML page. Structured data  make web content more meaningful to machines. These attributes do not change the formatting of your website, they just make the text enclosed within the XHTML tags "understandable" by computers and influence what shows up in the result snippets.&lt;br /&gt;&lt;br /&gt;When you tag your webpages with structured data, Custom Search indexes them and sends the metadata back in the XML results for your page. You can then take this XML feed and transform it into HTML results that showcase key information—such as image thumbnails, summaries, dates, authorship, ratings, and prices. Having the most relevant information in your search results makes the webpages in your site more compelling to your users.&lt;br /&gt;&lt;br /&gt;You can, for example, create the following kind of rich snippets:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EuCTzLdp3vE/SuZGRvOGRBI/AAAAAAAAC08/LyQqPCo8csQ/s1600-h/cse-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 64px;" src="http://1.bp.blogspot.com/_EuCTzLdp3vE/SuZGRvOGRBI/AAAAAAAAC08/LyQqPCo8csQ/s400/cse-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5397078473997435922" /&gt;&lt;/a&gt;&lt;br /&gt;You can even add thumbnails and actions that let your users download files or make purchases.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EuCTzLdp3vE/SuZG0fN2FnI/AAAAAAAAC1M/p15TaMltSXw/s1600-h/cse-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 97px;" src="http://4.bp.blogspot.com/_EuCTzLdp3vE/SuZG0fN2FnI/AAAAAAAAC1M/p15TaMltSXw/s400/cse-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5397079070996829810" /&gt;&lt;/a&gt;&lt;br /&gt;To learn more, read the &lt;a href="http://code.google.com/apis/customsearch/docs/snippets.html"&gt;Custom Search Developer's Guide&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Kevin Griffin Lim, Custom Search Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-3843028457288256078?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=6TIRg3PDyWc:sh4zwFaDweA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=6TIRg3PDyWc:sh4zwFaDweA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=6TIRg3PDyWc:sh4zwFaDweA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/6TIRg3PDyWc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/3843028457288256078/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/customize-your-results-snippets-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3843028457288256078?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3843028457288256078?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/6TIRg3PDyWc/customize-your-results-snippets-with.html" title="Customize your results snippets with structured data" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_EuCTzLdp3vE/SuZGRvOGRBI/AAAAAAAAC08/LyQqPCo8csQ/s72-c/cse-1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/customize-your-results-snippets-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UFRX8zeSp7ImA9WxNVFk0.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-5679559156926462165</id><published>2009-10-26T15:40:00.000-07:00</published><updated>2009-10-26T18:00:14.181-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-26T18:00:14.181-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google code" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="custom search" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Customize your search results page with themes</title><content type="html">If you can select headgear for your &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.lego.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzffuk5B8PdN5XJeJ_en-7j9c9kpsw"&gt;LEGO ®&lt;/a&gt; action figures, your search engine should let you customize the theme for your search results page, right? Darn tooting!&lt;br /&gt;&lt;br /&gt;True, Custom Search already lets you customize the look and feel of your search results page, but we're making it easier. You can now go to the &lt;a href="http://www.google.com/cse/manage/all"&gt;control panel&lt;/a&gt; and select one of the predefined themes that broadly matches the look and feel of your website. &lt;br /&gt;&lt;br /&gt;If the standard themes are not quite what you want, you can make further changes. You can tinker with the page layout (Why stick with a single column of results, when you can have two?) and play with the font colors and types. The standard themes paired with the "Compact" layout option are optimized for mobile devices, so they work well on iPhone, Android devices, and Pre.&lt;br /&gt;&lt;br /&gt;If you want a greater level of control than that, you can download the CSS, tweak it in a text editor, and host the CSS in your website. You can make your search results page blend with the style of the rest of your website.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EuCTzLdp3vE/SuZF_MHv8ZI/AAAAAAAAC00/hexKx3eJywE/s1600-h/cse_shiny.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 208px;" src="http://4.bp.blogspot.com/_EuCTzLdp3vE/SuZF_MHv8ZI/AAAAAAAAC00/hexKx3eJywE/s400/cse_shiny.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5397078155337920914" /&gt;&lt;/a&gt;&lt;br /&gt;To learn more, read the &lt;a href="http://code.google.com/apis/customsearch/docs/ui.html"&gt;Custom Search Developer's Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Kevin Gnome Lim, Custom Search Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-5679559156926462165?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=HMQ6JAJlq0U:tdPl-KrzYFs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=HMQ6JAJlq0U:tdPl-KrzYFs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=HMQ6JAJlq0U:tdPl-KrzYFs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/HMQ6JAJlq0U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/5679559156926462165/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/customize-your-search-results-page-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5679559156926462165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5679559156926462165?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/HMQ6JAJlq0U/customize-your-search-results-page-with.html" title="Customize your search results page with themes" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_EuCTzLdp3vE/SuZF_MHv8ZI/AAAAAAAAC00/hexKx3eJywE/s72-c/cse_shiny.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/customize-your-search-results-page-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QDQ3c8eyp7ImA9WxNVEEs.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-5078243409313930166</id><published>2009-10-20T12:02:00.000-07:00</published><updated>2009-10-20T12:02:52.973-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-20T12:02:52.973-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="website optimizer" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><title>Introducing the Website Optimizer Experiment Management API</title><content type="html">Today at the eMetrics conference in Washington DC we announced the new Website Optimizer Experiment Management API. The API allows for the creation and management of experiments outside of the Website Optimizer interface.&lt;br /&gt;&lt;br /&gt;If you're not familiar with &lt;a href="http://www.google.com/websiteoptimizer" target="_blank"&gt;Google Website Optimizer&lt;/a&gt;, it's a free tool for running A/B and multivariate experiments on a website. Website Optimizer handles splitting a website's traffic, serving different variations, and crunching the numbers to find statistical significance.&lt;br /&gt;&lt;br /&gt;Creating experiments with Website Optimizer usually involves a lot of back and forth between your website and the Website Optimizer interface. Using the API, you can integrate Website Optimizer into your platform. In short, you can create and launch experiments from whatever tool you use to edit your site.&lt;br /&gt;&lt;br /&gt;You'll find more about the GWO API on its Google Code site: &lt;a href="http://code.google.com/apis/analytics/docs/gwo/" target="_blank"&gt;http://code.google.com/apis/analytics/docs/gwo/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can also join the Website Optimizer engineers for a webinar on the Website Optimizer Experiment Management API. The webinar will be held on October 28th at 10AM PDT. During the webinar, Website Optimizer engineers will walk you through how the API works. Additionally, two platforms that have already integrated using the API will demonstrate their integrations.&lt;br /&gt;&lt;br /&gt;You need to register for the webinar, which you can do &lt;a href="https://googleonline.webex.com/googleonline/onstage/g.php?t=a&amp;amp;d=577316679" target="_blank"&gt;here&lt;/a&gt;. We'll record the webinar as well so you can reference it later.&lt;br /&gt;&lt;br /&gt;We're very excited about the Website Optimizer API and what it means for website testing. Let us know your thoughts in the comments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Gary Kačmarčík and Erika Rice Scherpelz, Google Website Optimizer team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-5078243409313930166?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=4_zpPYlzz9o:GscKMbZnjaQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=4_zpPYlzz9o:GscKMbZnjaQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=4_zpPYlzz9o:GscKMbZnjaQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/4_zpPYlzz9o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/5078243409313930166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/introducing-website-optimizer.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5078243409313930166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5078243409313930166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/4_zpPYlzz9o/introducing-website-optimizer.html" title="Introducing the Website Optimizer Experiment Management API" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/introducing-website-optimizer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBRXg6eip7ImA9WxNWF0k.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-2292837349042220404</id><published>2009-10-16T18:11:00.000-07:00</published><updated>2009-10-16T18:17:34.612-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-16T18:17:34.612-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="faster web" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><title>Let's make the mobile web faster</title><content type="html">This week, we've been &lt;a href="http://googlemobile.blogspot.com/2009/10/captains-log.html"&gt;celebrating all things mobile&lt;/a&gt; across Google. Of course, this wouldn't be complete without a component for mobile web developers! Two months ago we asked you to &lt;a href="http://googlecode.blogspot.com/2009/06/lets-make-web-faster.html"&gt;make the web faster&lt;/a&gt;. Now, we've asked the Google Mobile team for some best practices, tips, and resources for mobile web development, and we've come up with a few things we wanted to share. "Go Mobile!" with our &lt;a href="http://code.google.com/speed/articles/mobile.html"&gt;Make the mobile web faster article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Jeremy Weinstein, Google Webmaster&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-2292837349042220404?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=bWORSzpWfqA:zvgWaaXiYsQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=bWORSzpWfqA:zvgWaaXiYsQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=bWORSzpWfqA:zvgWaaXiYsQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/bWORSzpWfqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/2292837349042220404/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/lets-make-mobile-web-faster.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2292837349042220404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2292837349042220404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/bWORSzpWfqA/lets-make-mobile-web-faster.html" title="Let's make the mobile web faster" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/lets-make-mobile-web-faster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4HRn44fip7ImA9WxNWF08.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-7480955848343941210</id><published>2009-10-16T12:07:00.000-07:00</published><updated>2009-10-16T14:02:17.036-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-16T14:02:17.036-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="20% project" /><category scheme="http://www.blogger.com/atom/ns#" term="google code project hosting" /><title>Issue Tracker Data API for Project Hosting</title><content type="html">I'm excited to announce the Issue Tracker Data API for Project Hosting on Google Code! The Issue Tracker Data API is a &lt;a href="http://code.google.com/apis/gdata/"&gt;Google Data API&lt;/a&gt; that you can use to programmatically add new issues, make changes to existing issues, or simply access issues for your open source project.&lt;br /&gt;&lt;br /&gt;This means that the issue tracker data for your open source code is now &lt;a href="http://www.dataliberation.org/google/code-project-hosting"&gt;liberated&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;To get started with the API, please refer to the following documentation:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/wiki/IssueTrackerAPI"&gt;Issue Tracker Data API Overview&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/wiki/IssueTrackerAPIJava"&gt;Issue Tracker Data API for Java&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/wiki/IssueTrackerAPIPython"&gt;Issue Tracker Data API for Python&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/wiki/IssueTrackerAPIReference"&gt;Issue Tracker Data API Reference&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;If you find yourself digging into the API and creating something useful that others can use, please let us &lt;a href="http://groups.google.com/group/google-code-hosting"&gt;know&lt;/a&gt; and we'll be sure to add it to our documentation. As always, your &lt;a href="http://groups.google.com/group/google-code-hosting"&gt;feedback&lt;/a&gt; is also welcome.&lt;br /&gt;&lt;br /&gt;The team would also like to thank Joe LaPenna, who contributed the Python client for the Issue Tracker Data API in his 20% time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Jacob Moon, Google Project Hosting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://blog.bestpractical.com/2009/10/netgooglecode-now-with-support-for-googles-issues-api.html"&gt;Net::Google::Code now supports the Issue Tracker Data API&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-7480955848343941210?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=x8lEsOK-gl8:RJRW-pVvlDM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=x8lEsOK-gl8:RJRW-pVvlDM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=x8lEsOK-gl8:RJRW-pVvlDM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/x8lEsOK-gl8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/7480955848343941210/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/issue-tracker-data-api-for-project.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7480955848343941210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7480955848343941210?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/x8lEsOK-gl8/issue-tracker-data-api-for-project.html" title="Issue Tracker Data API for Project Hosting" /><author><name>Ali Pasha</name><uri>http://www.blogger.com/profile/09111985048728097364</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03532655683070876489" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/issue-tracker-data-api-for-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkADSXcyeyp7ImA9WxNWFUg.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-2613125250359590205</id><published>2009-10-14T15:13:00.000-07:00</published><updated>2009-10-14T15:19:38.993-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-14T15:19:38.993-07:00</app:edited><title>"View Source" - a new series about sites using HTML5</title><content type="html">View Source is a new series where we crack open cool web sites and applications and detail how they were made, step by step. The series will be hosted on Ajaxian, but the Code blog will always carry a link to any new posts that come out in the series. We hope that the articles will help you understand how developers out there are using HTML5 and other Open Web technologies.&lt;br /&gt;&lt;br /&gt;Here are links to two articles from this series that were published over the last few days:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ajaxian.com/archives/view-source-tutorial-sticky-notes-with-html5-and-css3"&gt;"View Source Tutorial: Sticky Notes With HTML5 and CSS3"&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ajaxian.com/archives/view-source-tutorial-fancy-web-page-using-html5-css-and-svg"&gt;&lt;br /&gt;"View Source Tutorial: Fancy Web Page Using HTML5, CSS, and SVG"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Brad Neuberg, Google Developer Programs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-2613125250359590205?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=YVl53V_GZjU:ZIE5zSyHGLE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=YVl53V_GZjU:ZIE5zSyHGLE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=YVl53V_GZjU:ZIE5zSyHGLE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/YVl53V_GZjU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/2613125250359590205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/view-source-new-series-about-sites.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2613125250359590205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2613125250359590205?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/YVl53V_GZjU/view-source-new-series-about-sites.html" title="&quot;View Source&quot; - a new series about sites using HTML5" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/view-source-new-series-about-sites.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QASX8yeip7ImA9WxNWE0U.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-2663305785476427197</id><published>2009-10-12T10:03:00.000-07:00</published><updated>2009-10-12T14:02:28.192-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-12T14:02:28.192-07:00</app:edited><title>Mark your calendars for Google I/O 2010</title><content type="html">We're excited to share the dates for Google I/O 2010! Mark your calendars:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Google I/O&lt;br /&gt;May 19 - 20, 2010&lt;br /&gt;Moscone Center, San Francisco&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Here's a quick look back at this year's event:&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/00rXOI_we9c&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/00rXOI_we9c&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Early registration for I/O 2010 will open in January. Until then, you can &lt;a href="http://www.twitter.com/googleio"&gt;follow us on Twitter&lt;/a&gt; and check out &lt;a href="http://code.google.com/io"&gt;code.google.com/io&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See you in May!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Christine Tsai, Google Developer Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-2663305785476427197?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=7jUVbDl65C8:nxnTiY9Aco0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=7jUVbDl65C8:nxnTiY9Aco0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=7jUVbDl65C8:nxnTiY9Aco0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/7jUVbDl65C8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/2663305785476427197/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/mark-your-calendars-for-google-io-2010.html#comment-form" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2663305785476427197?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2663305785476427197?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/7jUVbDl65C8/mark-your-calendars-for-google-io-2010.html" title="Mark your calendars for Google I/O 2010" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">17</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/mark-your-calendars-for-google-io-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNQXY4eCp7ImA9WxNWEU8.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-3173483142774108088</id><published>2009-10-09T13:26:00.001-07:00</published><updated>2009-10-09T13:34:50.830-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-09T13:34:50.830-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google code project hosting" /><title>Mercurial server-side clone support for Project Hosting on Google Code</title><content type="html">When we &lt;a id="dotl" href="http://googlecode.blogspot.com/2009/04/mercurial-support-for-project-hosting.html" title="launched Mercurial support"&gt;launched Mercurial support&lt;/a&gt; our goal was to get to a point where we could enable a social coding experience. Today, I am happy to announce that today we have support for both 'project' clones and 'user' clones.&lt;br /&gt;&lt;br /&gt;Project owners can now create multiple repositories for their project, and they can choose to make any of those new repositories a clone of any of the project's other repositories. These project clones share the same commit access permissions as the original project and make it easier for project members to work together on new features. A common pattern in the Mercurial world is to place each "official" branch into a separate repository with naming conventions like "project-crew", "project-stable", and so on.&lt;br /&gt;&lt;br /&gt;In addition to project clones, any user can visit any Mercurial repository and create a server-side user clone of that repository, without asking permission from the project owner. These personal user clones can be easily shared with other developers -- who also can make a clone of that clone. Once a user has finished her changes in a user clone, she can coordinate with the canonical project's contributors to review and incorporate her changes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4E9RvKH2MuA/Ss-cou5ocuI/AAAAAAAAOBo/xKeQBHMlKeo/s1600-h/Clones.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://4.bp.blogspot.com/_4E9RvKH2MuA/Ss-cou5ocuI/AAAAAAAAOBo/xKeQBHMlKeo/s320/Clones.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5390699502584230626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;User clones aren't &lt;a id="khp5" href="http://catb.org/jargon/html/F/fork.html" title="forks"&gt;forks&lt;/a&gt;, in the traditional sense, where a fork has little intention to contribute back to the original project. Rather, the entire purpose of a user clone is to allow users to contribute to projects without requiring official commit access permissions. Because mercurial is a distributed (peer-to-peer) version control system, it excels at branching and merging.  If the project maintainers like the new code, they just "pull" the changesets from the clone and merge them into an official project repository.  It's all much more elegant than emailing patches back and forth, anonymous contributors get to use the same tools as core developers.&lt;br /&gt;&lt;br /&gt;The instructions for creating a user clone can be found on the checkout page for any Mercurial project (e.g. &lt;a href="http://code.google.com/p/twisty/source/checkout" id="p9o6" title="twisty" style="color: rgb(85, 26, 139); "&gt;twisty&lt;/a&gt;) and existing clones for a project can be found under the Clones sub-tab under Source.&lt;br /&gt;&lt;br /&gt;Please let us know if you have any &lt;a href="http://groups.google.com/group/google-code-hosting" id="vy7h" title="feedback" style="color: rgb(85, 26, 139); "&gt;feedback&lt;/a&gt; or find any &lt;a href="http://code.google.com/p/support/issues" id="kqin" title="issues"&gt;issues&lt;/a&gt;. Happy cloning!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Nathaniel Manista and Jacob Lee, Project Hosting on Google Code &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-3173483142774108088?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=6IJFbti_qrY:cnqxdLepZ1I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=6IJFbti_qrY:cnqxdLepZ1I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=6IJFbti_qrY:cnqxdLepZ1I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/6IJFbti_qrY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/3173483142774108088/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/mercurial-server-side-clone-support-for.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3173483142774108088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/3173483142774108088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/6IJFbti_qrY/mercurial-server-side-clone-support-for.html" title="Mercurial server-side clone support for Project Hosting on Google Code" /><author><name>Ali Pasha</name><uri>http://www.blogger.com/profile/09111985048728097364</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03532655683070876489" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_4E9RvKH2MuA/Ss-cou5ocuI/AAAAAAAAOBo/xKeQBHMlKeo/s72-c/Clones.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/mercurial-server-side-clone-support-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8ARHY6fip7ImA9WxNXF0U.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-2021886599231968682</id><published>2009-10-05T15:39:00.000-07:00</published><updated>2009-10-05T16:04:05.816-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-05T16:04:05.816-07:00</app:edited><title>Refreshing code.google.com/speed</title><content type="html">Today, we're happy to share some updates on &lt;a href="http://code.google.com/speed"&gt;code.google.com/speed&lt;/a&gt; with you.&lt;br /&gt;&lt;br /&gt;We launched code.google.com/speed &lt;a href="http://googleblog.blogspot.com/2009/06/lets-make-web-faster.html"&gt;in June&lt;/a&gt;, to give web developers access to tools and resources that help them improve the performance of their applications. Since then, the developer community provided us with plenty of suggestions on how to improve our site.  Based on your feedback, we made the following improvements:&lt;ul&gt;&lt;li&gt;We added new content:&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Four new best practice articles on topics such as optimizing JavaScript&lt;/li&gt;&lt;li&gt;Two new tech talks on new developer tools&lt;/li&gt;&lt;li&gt;A blog gadget that aggregates performance related posts from Google blogs.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;We improved the layout to make navigation between different tutorials, tech talks and tools smoother.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_V9QJMrmy0es/Ssp6C_OLQJI/AAAAAAAAABQ/SOgRbWC6isU/s1600-h/dgt2xz5_33d9pddrf2_b.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 255px;" src="http://3.bp.blogspot.com/_V9QJMrmy0es/Ssp6C_OLQJI/AAAAAAAAABQ/SOgRbWC6isU/s400/dgt2xz5_33d9pddrf2_b.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5389254095851438226" /&gt;&lt;/a&gt;&lt;br /&gt;Just as making the web faster is an ongoing process, we plan to continue updating and enhancing code.google.com/speed with more resources. Currently, we are focusing on increasing community involvement, such as adding more tutorials and tech talks from non-Google authors. So, as a first step, if you have recently written an interesting article on web performance, please let us know by filling in this &lt;a href="http://spreadsheets.google.com/viewform?hl=en&amp;amp;formkey=dE5SSEVEdm1QNzlnVG9wcHRhNjA5c1E6MA"&gt;form&lt;/a&gt;. Our team will evaluate all entries and may contact you for potential next steps.&lt;br /&gt;&lt;br /&gt;Together, let's make the web faster!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Yi Wang, Product Manager&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-2021886599231968682?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=A9-meEKYhug:DBGt5i64hQM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=A9-meEKYhug:DBGt5i64hQM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=A9-meEKYhug:DBGt5i64hQM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/A9-meEKYhug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/2021886599231968682/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/refreshing-codegooglecomspeed.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2021886599231968682?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2021886599231968682?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/A9-meEKYhug/refreshing-codegooglecomspeed.html" title="Refreshing code.google.com/speed" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_V9QJMrmy0es/Ssp6C_OLQJI/AAAAAAAAABQ/SOgRbWC6isU/s72-c/dgt2xz5_33d9pddrf2_b.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/refreshing-codegooglecomspeed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMEQ307eip7ImA9WxNXFU0.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-962425344379911057</id><published>2009-10-02T11:00:00.000-07:00</published><updated>2009-10-02T11:00:02.302-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-02T11:00:02.302-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="internet explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="SVG" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><title>SVG at Google and in Internet Explorer</title><content type="html">At Google we're excited about new web technologies like HTML 5, CSS 3, Web Fonts, SVG, faster JavaScript, and more. It's an exciting time to be a web developer, especially with the major advancements made in modern browsers like Firefox, Safari, Opera, and Chrome the last two years. In this blog post I want to share some of the work we've been doing with SVG in particular.&lt;br /&gt;&lt;br /&gt;Today kicks off the start of the &lt;a href="http://www.svgopen.org/2009/" id="y6h6" title="SVG Open 2009 conference"&gt;SVG Open 2009 conference&lt;/a&gt;, hosted at Google this year. The SVG Open conference is an annual conference where the SVG community comes together for three-days. Other &lt;a href="http://www.svgopen.org/2009/sponsors.shtml" id="clrb" title="sponsors"&gt;sponsors&lt;/a&gt; of the conference this year include Microsoft and IBM.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is SVG?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;SVG, or &lt;a title="Scalable Vector Graphics" href="http://www.w3.org/Graphics/SVG/" id="a5gh"&gt;Scalable Vector Graphics&lt;/a&gt;, is an open web standard that makes it easy to add interactive vector graphics to your web pages. Vector graphics, as opposed to bitmap graphics like JPG, GIF, or PNG files, describe the shapes on your screen with mathematical equations rendered by your computer rather than pixels. This allows vector graphics to stay beautiful and crisp whether displayed on a 40" monitor or a small mobile device.&lt;br /&gt;&lt;br /&gt;&lt;div id="wi1e" style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/b/b4/VectorBitmapExample.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 250px;" src="http://upload.wikimedia.org/wikipedia/commons/b/b4/VectorBitmapExample.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;Just as HTML gives you simple tags such as &amp;lt;form&amp;gt; or &amp;lt;table&amp;gt; to add to your web pages, SVG gives you such graphical tags as &amp;lt;circle&amp;gt; or &amp;lt;rect&amp;gt; for a rectangle that you can drop into your web page. Working with SVG is very similar to working with HTML - you use JavaScript to animate and make things interactive, CSS (Cascading Style Sheets) to add style, etc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why Google is Excited About SVG&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We're excited about SVG for a host of reasons:&lt;br /&gt;&lt;br /&gt;First, SVG is part of the &lt;a title="HTML 5" href="http://en.wikipedia.org/wiki/HTML5" id="fquh"&gt;HTML 5&lt;/a&gt; family of technologies. One of the major new features of HTML 5 is the fact that you can now drop SVG tags into normal HTML, directly embedded into your page. We're excited about how this will empower developers. Here, for example, is a small code sample that embeds an SVG circle and rectangle right into an HTML 5 page:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;h1&amp;gt;SVG/HTML 5 Example&amp;lt;/h1&amp;gt;&lt;br /&gt;    &amp;lt;svg&amp;gt;&lt;br /&gt;      &amp;lt;circle id="myCircle"&lt;br /&gt;              cx="100" cy="75" r="50"&lt;br /&gt;              fill="blue"&lt;br /&gt;              stroke="firebrick"&lt;br /&gt;              stroke-width="3" /&amp;gt;&lt;br /&gt;      &amp;lt;text x="60" y="155"&amp;gt;Hello World&amp;lt;/text&amp;gt;&lt;br /&gt;        &amp;lt;/svg&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Produces:&lt;br /&gt;&lt;br /&gt;&lt;div id="sc:j" style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://codinginparadise.org/temp/snippetresults2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 218;" src="http://codinginparadise.org/temp/snippetresults2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Second, we like that SVG is composed of text and markup, just like HTML. Because it's markup, search engines have a much easier time working with SVG; server-side languages like &lt;a title="PHP" href="http://www.php.net/" id="bf05"&gt;PHP&lt;/a&gt; or &lt;a title="Google App Engine" href="http://code.google.com/appengine/" id="cayl"&gt;Google App Engine&lt;/a&gt; can simply emit SVG just like they generate HTML; and users and developers can easily view the source just like a normal web page to learn and move things forward. It's also easy to import and export SVG into tools like the open source &lt;a title="Inkscape" href="http://www.inkscape.org/" id="t8j8"&gt;Inkscape&lt;/a&gt; drawing package or &lt;a title="Adobe Illustrator" href="http://www.adobe.com/products/illustrator/" id="jk13"&gt;Adobe Illustrator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Third, the compact size of SVG when combined with &lt;a title="HTTP GZip compression" href="http://www.websiteoptimization.com/speed/tweak/compress/" id="oow:"&gt;HTTP GZip compression&lt;/a&gt; can easily make the images on a page roughly an order of magnitude smaller, and when directly embedded into an HTML 5 page can decrease the latency of a page by reducing the number of fetches. Small and fast are definitely two things we like at Google, and we like that SVG helps enable both.&lt;br /&gt;&lt;br /&gt;Fourth, SVG integrates with the rest of the web stack, including JavaScript, CSS, and the DOM (Document Object Model). Even better, developers can easily adapt the skills they already know when working with SVG.&lt;br /&gt;&lt;br /&gt;Finally, SVG is an open standard that is vendor-neutral. It also has accessibility built in, so when screen readers start to work with SVG your content will be future-proofed with accessibility baked in. We also like that SVG is now natively supported on all modern browsers, including the iPhone.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What Are Some Places We Use SVG?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We use SVG ourselves in a range of products. In &lt;a title="Google Docs" href="http://docs.google.com/" id="y1_p"&gt;Google Docs&lt;/a&gt;, for example, you can insert drawings, illustrations, and diagrams using a built in drawing tool:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://codinginparadise.org/temp/fish.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" src="http://codinginparadise.org/temp/fish.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;On all browsers we use SVG to build this user interface; on Internet Explorer we have to revert to an older technology named Vector Markup Language (VML) unfortunately.&lt;br /&gt;&lt;br /&gt;&lt;div id="ev.z" style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://codinginparadise.org/temp/gviz-logo.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 160px; height: 118px;" src="http://codinginparadise.org/temp/gviz-logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Another example is the &lt;a title="Google Visualization API" href="http://code.google.com/apis/visualization/" id="r7rv"&gt;Google Visualization API&lt;/a&gt;, which lets you access multiple sources of structured data that you can display, choosing from a large selection of visualizations. Some of these visualizations (such as &lt;a title="this one" href="http://spreadsheets.google.com/pub?key=pCQbetd-CptEo95YZxwZ2RA" id="s6xy"&gt;this one&lt;/a&gt; and &lt;a title="this one" href="http://code.google.com/apis/visualization/documentation/gallery/piechart.html" id="efd5"&gt;this one&lt;/a&gt;) use SVG to do their drawing on all browsers except Internet Explorer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Canvas Or SVG? Oh My!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A natural question is how SVG compares to the &lt;a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29" id="kvys" title="Canvas tag"&gt;Canvas tag&lt;/a&gt;. In our opinion both are needed for the web and are suitable for different applications.&lt;br /&gt;&lt;br /&gt;The Canvas tag can best be thought of as a scriptable image tag that you build up yourself using JavaScript. This means it is lower-level, requiring you to keep track of all objects you have placed on the canvas. This can be a benefit if you want to do a large degree of non-interactive animation, but can quickly become a burden if you need to build sophisticated user interfaces.&lt;br /&gt;&lt;br /&gt;SVG, meanwhile, is higher-level, doing the bookkeeping necessary to keep track of where everything is, making things like mouse interaction much easier. If you don't need this interaction, however, the overhead imposed by SVG can get in the way of certain applications. Because SVG is markup, importing and exporting is much easier, including SEO and accessibility.&lt;br /&gt;&lt;br /&gt;We believe that Canvas versus SVG is a &lt;a href="http://en.wikipedia.org/wiki/False_dilemma" id="e_d-" title="false dichotomy"&gt;false dichotomy&lt;/a&gt;. A great example of both technologies working together is the &lt;a href="http://downloadstats.mozilla.com/" id="vw9r" title="Firefox Download Tracker"&gt;Firefox Download Tracker&lt;/a&gt;. This page shows real time updates across the world whenever a copy of Firefox is downloaded. SVG is used to draw the map of the world; this is an appropriate use, since we don't want thousands of lines of JavaScript for this but rather markup from a tool like Inkscape. Red circles are drawn on top of the SVG using the Canvas tag as copies are downloaded; this is perfect for Canvas as the circles are non-interactive and might number in the thousands if copies are being downloaded rapidly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SVG In Internet Explorer and in Wikipedia&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now that you know a bit more about SVG, why we like it, and some of the places we use it, let me tell you a bit about some of the work we've been doing to support SVG lately.&lt;br /&gt;&lt;br /&gt;In addition to hosting this years conference, we are also helping to address the fact that SVG can't be used on Internet Explorer. It's hard for developers to use new web technologies if they can't deploy them on IE. In response to this, we've been working with others in the open source community on a drop-in JavaScript library named &lt;a href="http://code.google.com/p/svgweb/" id="go_o" title="SVG Web"&gt;SVG Web&lt;/a&gt; that brings SVG to Internet Explorer.&lt;br /&gt;&lt;br /&gt;SVG Web cleverly uses existing facilities on Internet Explorer 6, 7, and 8 to instantly enable SVG support without the user having to download any new software or plugins. Using SVG Web plus native SVG support you can now target close to 100% of the existing installed web base, today. Before SVG Web you could only target about ~30% of web browsers with SVG.&lt;br /&gt;&lt;br /&gt;Once dropped in SVG Web gives you partial support for SVG 1.1, SVG Animation (SMIL), Fonts, Video and Audio, DOM and style scripting through JavaScript, and more in about a 60K library. Your SVG content can be embedded directly into normal HTML 5 or through the OBJECT tag. If native SVG support is already present in the browser then that is used. No downloads or plugins are necessary other than Flash which is used for the actual rendering, so it's very easy to use and incorporate into an existing web site. Here's a quick one minute introduction to SVG Web:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XCk22AaRxiE&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XCk22AaRxiE&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;SVG Web is currently in alpha and is a developer release. It's also important to note that it is a collaboration with many others in the open source community outside Google, including Rick Masters at &lt;a href="http://www.f5.com/" id="ax_y" title="F5 Networks"&gt;F5 Networks&lt;/a&gt; and James Hight at &lt;a href="http://labs.zavoo.com/" id="oxic" title="Zavoo Labs"&gt;Zavoo Labs&lt;/a&gt;. Google is just one participant in this open source project. Finally, a JavaScript library will never be as fast as native support; this doesn't take Internet Explorer off the hook for needing to implement SVG, but it does help developers in the here and now deploy their SVG today to get the wheel turning.&lt;br /&gt;&lt;br /&gt;In addition to helping enable SVG on Internet Explorer, we've been working with Wikipedia. Wikipedia has an impressively large collection of SVG files that are under &lt;a href="http://creativecommons.org/" id="mwm6" title="Creative Commons"&gt;Creative Commons&lt;/a&gt; licenses. Every one of these files is available in the Wikimedia Commons; for example &lt;a href="http://commons.wikimedia.org/wiki/File:Tux.svg" id="nz-5" title="here is the Linux penguin Tux"&gt;here is the Linux penguin Tux&lt;/a&gt; as SVG. We've been working with Wikipedia to enable interactive zooming and panning of these SVG files, similar to &lt;a href="http://maps.google.com/" id="isa_" title="Google Maps"&gt;Google Maps&lt;/a&gt;; even better, this functionality works in Internet Explorer thanks to the SVG Web library on the sixth largest site on the web.&lt;br /&gt;&lt;br /&gt;Today at the SVG Open show we are demoing a prototype of the Wikipedia SVG Zoom and Pan tool; deployment to the wider base of Wikipedia users will happen after the conference and an appropriate QA period. Here's a screencast showing the tool in action:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jV1dq6yWWWY&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jV1dq6yWWWY&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;We hope you are as excited as we are about SVG and other new web technologies in the pipeline!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Brad Neuberg, Google Developer Programs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-962425344379911057?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=jNXR8RPN2p0:kn_N4zafKOw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=jNXR8RPN2p0:kn_N4zafKOw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=jNXR8RPN2p0:kn_N4zafKOw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/jNXR8RPN2p0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/962425344379911057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/10/svg-at-google-and-in-internet-explorer.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/962425344379911057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/962425344379911057?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/jNXR8RPN2p0/svg-at-google-and-in-internet-explorer.html" title="SVG at Google and in Internet Explorer" /><author><name>Neel Kshetramade</name><uri>http://www.blogger.com/profile/01823824960774657238</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="07303384689839753712" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/10/svg-at-google-and-in-internet-explorer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYARXo6fyp7ImA9WxNXEUU.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-8522364482146221870</id><published>2009-09-28T17:12:00.000-07:00</published><updated>2009-09-28T17:12:24.417-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-28T17:12:24.417-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google tech talk" /><category scheme="http://www.blogger.com/atom/ns#" term="web exponents" /><category scheme="http://www.blogger.com/atom/ns#" term="couchdb" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="nosql" /><category scheme="http://www.blogger.com/atom/ns#" term="souders" /><title>Chris Anderson: CouchDB: Relaxing Offline JavaScript</title><content type="html">Last week I hosted Chris Anderson for a Google tech talk on &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt; as part of the &lt;a title="Web Exponents" href="http://googlecode.blogspot.com/2009/05/web-e-x-ponents.html" id="k_kz"&gt;Web E&lt;sup&gt;x&lt;/sup&gt;ponents&lt;/a&gt; speaker series. Chris is an Apache &lt;span&gt;CouchDB&lt;/span&gt; committer. He is co-author of the forthcoming O'Reilly book &lt;a href="http://books.couchdb.org/relax/"&gt;&lt;span&gt;CouchDB&lt;/span&gt;: The Definitive Guide&lt;/a&gt; and a director of &lt;a href="http://couch.io/" target="_blank"&gt;couch.io&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Making web applications work offline is a hot topic. &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt; blazed the trail, and &lt;a href="http://www.w3.org/TR/2009/WD-webstorage-20090910/"&gt;Web Storage&lt;/a&gt; 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  &lt;a href="http://www.youtube.com/watch?v=ESDBM9-U804"&gt;video&lt;/a&gt; and &lt;a href="http://www.slideshare.net/jchrisa/couchdb-local-web-platform"&gt;slides&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ESDBM9-U804&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/ESDBM9-U804&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Check out other &lt;a href="http://www.youtube.com/view_play_list?p=689D6EE903ED5CB6"&gt;videos&lt;/a&gt; in the Web Exponents speaker series:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/02/john-resig-drop-in-javascript.html"&gt;John Resig: Drop-in JavaScript Performance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/03/doug-crockford-javascript-good-parts.html"&gt;Doug Crockford: JavaScript: The Good Parts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/03/steve-souders-lifes-too-short-write.html"&gt;Steve Souders: Life's Too Short, Write Fast Code (part 2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/05/rob-campbell-debugging-and-testing-web.html"&gt;Rob Campbell: Debugging and Testing the Web with Firebug&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html"&gt;Nicholas C. Zakas: Speed Up Your JavaScript&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/04/ppk-open-web-goes-mobile.html"&gt;PPK: The Open Web Goes Mobile&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/2009/08/aza-raskin-conversational-computing.html"&gt;Aza Raskin: Conversational Computing (Ubiquity &amp;amp; Jetpack)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Steve Souders, Performance Evangelist&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-8522364482146221870?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=lmWbe8AJv6U:iAoqg6fgoaM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=lmWbe8AJv6U:iAoqg6fgoaM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=lmWbe8AJv6U:iAoqg6fgoaM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/lmWbe8AJv6U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/8522364482146221870/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/chris-anderson-couchdb-relaxing-offline.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/8522364482146221870?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/8522364482146221870?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/lmWbe8AJv6U/chris-anderson-couchdb-relaxing-offline.html" title="Chris Anderson: CouchDB: Relaxing Offline JavaScript" /><author><name>Steve Souders</name><uri>http://www.blogger.com/profile/07051900511910570322</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13542999685442726967" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/chris-anderson-couchdb-relaxing-offline.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUGRX89eCp7ImA9WxNQGE4.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-167552381736209450</id><published>2009-09-24T16:00:00.000-07:00</published><updated>2009-09-24T16:00:24.160-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-24T16:00:24.160-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sites api" /><category scheme="http://www.blogger.com/atom/ns#" term="gdata" /><title>Google Sites: Now with an API!</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EuCTzLdp3vE/SrvakkijYTI/AAAAAAAACz0/f0aDovqLkzU/s1600-h/sites_api.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 145px;" src="http://3.bp.blogspot.com/_EuCTzLdp3vE/SrvakkijYTI/AAAAAAAACz0/f0aDovqLkzU/s200/sites_api.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5385138101270307122" /&gt;&lt;/a&gt;Today, we launched a new &lt;a href="http://code.google.com/apis/gdata/"&gt;Google Data API&lt;/a&gt; for Google Sites. The API supports most of the functionality found in Google Sites, which includes the ability to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Retrieve, create, modify, and delete pages and content.&lt;/li&gt;&lt;li&gt;Upload/download attachments.&lt;/li&gt;&lt;li&gt;Review the revision history across a site.&lt;/li&gt;&lt;li&gt;Display recent user activity.&lt;/li&gt;&lt;/ul&gt;To get started, see the full &lt;a href="http://code.google.com/apis/sites/"&gt;documentation&lt;/a&gt;, &lt;a href="http://code.google.com/apis/sites/docs/1.0/developers_guide_java.html"&gt;Java Developer's Guide&lt;/a&gt;, or dive into our &lt;a href="http://code.google.com/apis/sites/code.html"&gt;code samples&lt;/a&gt;. We're also open-sourcing an &lt;a href="http://code.google.com/p/google-sites-liberation/"&gt;import/export tool&lt;/a&gt; that uploads or creates a local back-up of an entire Google Site.&lt;br /&gt;&lt;br /&gt;Visit us in our new &lt;a href="http://groups.google.com/group/google-sites-data-api"&gt;developer forum&lt;/a&gt; if you have questions!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Eric Bidelman, Google Sites API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-167552381736209450?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=2D6d1psj0eI:Ini49Xtto2M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=2D6d1psj0eI:Ini49Xtto2M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=2D6d1psj0eI:Ini49Xtto2M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/2D6d1psj0eI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/167552381736209450/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/google-sites-now-with-api.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/167552381736209450?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/167552381736209450?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/2D6d1psj0eI/google-sites-now-with-api.html" title="Google Sites: Now with an API!" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_EuCTzLdp3vE/SrvakkijYTI/AAAAAAAACz0/f0aDovqLkzU/s72-c/sites_api.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/google-sites-now-with-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4MQX89eSp7ImA9WxNQF04.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-5877290118493990910</id><published>2009-09-23T12:42:00.000-07:00</published><updated>2009-09-23T12:43:00.161-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-23T12:43:00.161-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="gmail" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Gmail for Mobile HTML5 Series: CSS Transforms and Floaty Bars</title><content type="html">&lt;i&gt;On April 7th, Google launched a new version of Gmail for mobile for iPhone and Android-powered devices. We shared the behind-the-scenes story through &lt;a href="http://googlecode.blogspot.com/2009/04/html5-and-webkit-pave-way-for-mobile.html" title="this blog"&gt;this blog&lt;/a&gt; and decided to share more of what we've learned in a brief series of follow-up blog posts. This week, I'll talk about different ways to animate the floaty bar.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Even from the earliest brainstorming days for our new version of Gmail for iPhone and Android-powered devices, we knew we wanted to try something novel with menu actions: a context-sensitive, always-accessible UI element that follows conveniently as a user scrolls.  Thus, the "floaty bar" was born!  It took us a surprisingly long time, experimenting with different techniques and interactions, to converge on the design you see today.  Let's look under the covers to see how the animation is achieved.  You may be surprised to find that the logic is actually quite simple!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EuCTzLdp3vE/Srpihi2V3FI/AAAAAAAACzk/3SdzErEuClU/s1600-h/gmail_floaty1.png"&gt;&lt;img style="margin-left: 20px;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_EuCTzLdp3vE/Srpihi2V3FI/AAAAAAAACzk/3SdzErEuClU/s320/gmail_floaty1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5384724632904784978" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EuCTzLdp3vE/Srpio_Hlj3I/AAAAAAAACzs/-fvFyuSoxFY/s1600-h/gmail_floaty2.png"&gt;&lt;img style="margin-left: 60px;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_EuCTzLdp3vE/Srpio_Hlj3I/AAAAAAAACzs/-fvFyuSoxFY/s320/gmail_floaty2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5384724760752394098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-left: 150px;"&gt;Screenshots of the floaty bar in action&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In CSS:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;.CSS_FLOATY_BAR {&lt;br /&gt; ...&lt;br /&gt; top: -50px;  /* start off the screen, so it slides in nicely */&lt;br /&gt; -webkit-transition: top 0.2s ease-out;&lt;br /&gt; ...&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;In JavaScript:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;// Constructor for the floaty bar&lt;br /&gt;gmail.FloatyBar = function() {&lt;br /&gt; this.menuDiv = document.createElement('div');&lt;br /&gt; this.menuDiv.className = CSS_FLOATY_BAR;&lt;br /&gt; ...&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Called when it's time for the floaty bar to move&lt;br /&gt;gmail.FloatyBar.prototype.setTop = function() {&lt;br /&gt; this.menuDiv.style.top = window.scrollY + 'px';&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Called when the floaty bar menu is dismissed&lt;br /&gt;gmail.FloatyBar.prototype.hideOffScreen = function() {&lt;br /&gt; this.menuDiv.style.top = '-50px';&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;gmail.floatyBar = new gmail.FloatyBar();&lt;br /&gt;&lt;br /&gt;// Listen for scroll events on the top level window&lt;br /&gt;window.onscroll = function() {&lt;br /&gt; ...&lt;br /&gt; gmail.floatyBar.setTop();&lt;br /&gt; ...&lt;br /&gt;};&lt;/pre&gt;&lt;/code&gt;The essence here is that when the viewport scrolls, the floaty bar 'top' is set to the new viewport offset.  The &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;-webkit-transition&lt;/span&gt; rule specifies the animation parameters.  (The 'top' property is to be animated, over 0.2s, using the ease-out timing function.)  This is the animation behavior we had at launch, and it works just fine on Android and mobile Safari browsers.&lt;br /&gt;&lt;br /&gt;However, there's actually a better way to achieve the same effect, and the improvement is particularly evident on mobile Safari.  The trick is to use "CSS transforms".  CSS transforms is a mechanism for applying different types of affine transformations to page elements, specified via CSS.  We're going to use a simple one which is &lt;b&gt;translateY&lt;/b&gt;.  Here's the same logic, updated to use CSS transforms.&lt;br /&gt;&lt;br /&gt;In CSS:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;.CSS_FLOATY_BAR {&lt;br /&gt; ...&lt;br /&gt; top: -50px;  /* start off the screen, so it slides in nicely */&lt;br /&gt; -webkit-transition: -webkit-transform 0.2s ease-out;&lt;br /&gt; ...&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;In JavaScript:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;// Called when it's time for the floaty bar to move&lt;br /&gt;gmail.FloatyBar.prototype.setTop = function() {&lt;br /&gt; var translate = window.scrollY - (-50);&lt;br /&gt; this.menuDiv.style['-webkit-transform'] = 'translateY(' + translate + 'px)';&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Called when the floaty bar menu is dismissed&lt;br /&gt;gmail.FloatyBar.prototype.hideOffScreen = function() {&lt;br /&gt; this.menuDiv.style['-webkit-transform'] = 'translateY(0px)';&lt;br /&gt;};&lt;/pre&gt;&lt;/code&gt;Upon every scroll event, the floaty bar is translated vertically to the new viewport offset (modulo the offscreen offset which is important to the floaty bar's initial appearance).  And, why exactly is this such an improvement?  Even though the logic is equivalent, iPhone OS's implementation of CSS transforms is "&lt;a id="duhm" href="http://developer.apple.com/safari/library/documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Transforms/Transforms.html" title="is performance enhanced"&gt;performance enhanced&lt;/a&gt;", whilst our first iteration (animating the 'top' property) is performed by the OS in software. That's why the experience was unfortunately somewhat chunky at times, depending on the speed of the iPhone hardware.&lt;br /&gt;&lt;br /&gt;You'll see smoother looking floaty bars coming very soon to an iPhone near you. This is just the first in a series of improvements we're planning for the mobile Gmail floaty bar. Watch for them in our iterative webapp, rolling out over the next couple of weeks and months!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Joanne McKinley, Software Engineer, Google Mobile&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Previous posts from Gmail for Mobile HTML5 Series:&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;a href="http://googlecode.blogspot.com/2009/04/html5-and-webkit-pave-way-for-mobile.html" title="HTML5 and Webkit pave the way for mobile web applications"&gt;HTML5 and Webkit pave the way for mobile web applications&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/04/gmail-for-mobile-html5-series-using.html" title="Using AppCache to launch offline - Part 1"&gt;Using AppCache to launch offline - Part 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/05/gmail-for-mobile-html5-series-part-2.html" title="Using AppCache to launch offline - Part 2"&gt;Using AppCache to launch offline - Part 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/05/gmail-for-mobile-html5-series-part-3.html" title="Using AppCache to launch offline - Part 3"&gt;Using AppCache to launch offline - Part 3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/05/gmail-for-mobile-html5-series-common.html" title="A Common API for Web Storage"&gt;A Common API for Web Storage&lt;/a&gt;&lt;br /&gt;&lt;a href="http://google-code-updates.blogspot.com/2009/06/gmail-for-mobile-html5-series.html" title="Suggestions for better performance"&gt;Suggestions for better performance&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/06/gmail-for-mobile-html5-series-cache.html" title="Cache pattern for offline HTML5 web application"&gt;Cache pattern for offline HTML5 web application&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series-using.html" title="Using timers effectively"&gt;Using timers effectively&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series.html" id="kwz7" title="Autogrowing Textareas"&gt;Autogrowing Textareas&lt;/a&gt;&lt;br /&gt;&lt;a title="Let's Make the Web Faster" href="http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-reducing.html" id="sdb5"&gt;Reducing Startup Latency&lt;/a&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-5877290118493990910?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Cnk8AneT-EI:pgXXx2_KgtI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Cnk8AneT-EI:pgXXx2_KgtI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=Cnk8AneT-EI:pgXXx2_KgtI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/Cnk8AneT-EI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/5877290118493990910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-css.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5877290118493990910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5877290118493990910?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/Cnk8AneT-EI/gmail-for-mobile-html5-series-css.html" title="Gmail for Mobile HTML5 Series: CSS Transforms and Floaty Bars" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_EuCTzLdp3vE/Srpihi2V3FI/AAAAAAAACzk/3SdzErEuClU/s72-c/gmail_floaty1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-css.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcEQXY9eCp7ImA9WxNQF08.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-8810350750858696943</id><published>2009-09-23T09:06:00.000-07:00</published><updated>2009-09-23T09:06:40.860-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-23T09:06:40.860-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sidewiki" /><category scheme="http://www.blogger.com/atom/ns#" term="gdata" /><title>Announcing the Google Sidewiki API</title><content type="html">Alongside the exciting release of &lt;a href="http://google.com/sidewiki/#tbbrand=GZEG" title="Google Sidewiki"&gt;Google Sidewiki&lt;/a&gt; today, we're also happy to announce the availability of the first version of the Google Sidewiki Data API. Google Sidewiki is a new feature of Google Toolbar (for Firefox and Internet Explorer) that lets everyone contribute helpful information next to any webpage. Our &lt;a href="http://googleblog.blogspot.com/2009/09/help-and-learn-from-others-as-you.html" title="post"&gt;post&lt;/a&gt;&amp;nbsp;over on the Google Blog goes into more detail and also has a &lt;a href="http://www.youtube.com/watch?v=CsjJOsx84MA" id="rcan" title="video"&gt;video&lt;/a&gt; that shows Sidewiki in action. To start using it yourself, go to&amp;nbsp;&lt;a href="http://www.google.com/sidewiki/#tbbrand=GZEG" id="c7d5" title="http://www.google.com/sidewiki"&gt;google.com/sidewiki&lt;/a&gt; and install Google Toolbar with Sidewiki.&lt;br /&gt;&lt;br /&gt;On the developer side, we're releasing a Google Sidewiki Data API today that lets you work freely with the content that's created in Google Sidewiki. You can use it to retrieve all entries written about a particular webpage as well as all entries written by a given Sidewiki author.&lt;br /&gt;&lt;br /&gt;So after you've played with Sidewiki in the browser, give it a whirl in your console too -- we have &lt;a href="http://code.google.com/apis/gdata/clientlibs.html" id="spsh" title="client libraries"&gt;client libraries&lt;/a&gt;, &lt;a href="http://code.google.com/apis/sidewiki/" id="b4bo" title="documentation"&gt;documentation&lt;/a&gt; and &lt;a href="http://code.google.com/apis/gdata/samples.html" id="js5t" title="code samples ready"&gt;code samples&lt;/a&gt; ready to go for you. We'll be excited to see what gadgets, projects and extensions you'll think of. A &lt;a id="xphd" href="http://code.google.com/apis/ajaxlanguage/" title="translation"&gt;translation&lt;/a&gt; gadget that displays and translates Sidewiki entries on the fly? A &lt;a href="http://code.google.com/appengine/" id="p2xy" title="Google App Engine"&gt;Google App Engine&lt;/a&gt;-powered browser of all Sidewiki entries? Your own browser extension or Greasemonkey script?&lt;br /&gt;&lt;br /&gt;The &lt;a id="gbqg" href="http://code.google.com/apis/sidewiki/" title="Google Sidewiki API"&gt;Google Sidewiki API&lt;/a&gt; is available in &lt;a href="http://code.google.com/labs/" id="fu8l" title="Google Code Labs"&gt;Google Code Labs&lt;/a&gt; and is read-only at the moment. We've set up a developer-oriented &lt;a href="http://groups.google.com/group/google-sidewiki-api" id="ef7f" title="discussion group"&gt;discussion group&lt;/a&gt; and &lt;a href="http://code.google.com/p/gdata-issues/issues/list?q=label:API-Sidewiki" id="bhgq" title="issue tracker"&gt;issue tracker&lt;/a&gt; where you can discuss your experiences with the API and where we'd love to hear about your feedback and projects. Keep us posted!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Roman Shuvaev, Google Sidewiki engineer&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-8810350750858696943?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=gIjz7Uy_bNs:aKYP2q6sbbA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=gIjz7Uy_bNs:aKYP2q6sbbA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=gIjz7Uy_bNs:aKYP2q6sbbA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/gIjz7Uy_bNs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/8810350750858696943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/announcing-google-sidewiki-api.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/8810350750858696943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/8810350750858696943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/gIjz7Uy_bNs/announcing-google-sidewiki-api.html" title="Announcing the Google Sidewiki API" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/announcing-google-sidewiki-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ERXYzfCp7ImA9WxNQFkg.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-2613292854544289845</id><published>2009-09-22T15:00:00.000-07:00</published><updated>2009-09-22T15:00:04.884-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T15:00:04.884-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><title>Video Introduction to HTML 5</title><content type="html">Are you interested in &lt;a href="http://dev.w3.org/html5/spec/Overview.html"&gt;HTML 5&lt;/a&gt; and what's coming down the pipeline but haven't had time to read any articles yet? We've put together an educational Introduction to HTML 5 video that goes over many of the major aspects of this new standard, including: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web vector graphics with the Canvas tag and Scalable Vector Graphics (SVG)&lt;/li&gt;&lt;li&gt;The Geolocation API&lt;/li&gt;&lt;li&gt;HTML 5 Video&lt;/li&gt;&lt;li&gt;The HTML 5 Database and Application Cache&lt;/li&gt;&lt;li&gt;Web workers&lt;/li&gt;&lt;/ul&gt;In the video we also crack open the HTML 5 YouTube Video prototype to show you some of the new HTML 5 tags, such as nav, article, etc. It's chock full of demos and sample source code.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/siOHh0uzcuY&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/siOHh0uzcuY&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Brad Neuberg, Google Developer Programs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-2613292854544289845?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=repQ8bpvMCA:rBZB1pY4N6A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=repQ8bpvMCA:rBZB1pY4N6A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=repQ8bpvMCA:rBZB1pY4N6A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/repQ8bpvMCA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/2613292854544289845/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/video-introduction-to-html-5.html#comment-form" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2613292854544289845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/2613292854544289845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/repQ8bpvMCA/video-introduction-to-html-5.html" title="Video Introduction to HTML 5" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/video-introduction-to-html-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGSXY-fip7ImA9WxNQFkk.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-5825244421679874136</id><published>2009-09-22T11:12:00.000-07:00</published><updated>2009-09-22T11:47:08.856-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T11:47:08.856-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="internet explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="google chrome" /><title>Introducing Google Chrome Frame</title><content type="html">Today, we're releasing an early version of &lt;a href="http://code.google.com/chrome/chromeframe" id="n2uk" title="Google Chrome Frame"&gt;Google Chrome Frame&lt;/a&gt;, an open source plug-in that brings HTML5 and other open web technologies to Internet Explorer.&lt;br /&gt;&lt;br /&gt;We're building Google Chrome Frame to help web developers deliver faster, richer applications like &lt;a id="f8t." href="http://googlewavedev.blogspot.com/2009/09/google-wave-in-internet-explorer.html" title="Google Wave"&gt;Google Wave&lt;/a&gt;. Recent JavaScript performance improvements and the emergence of HTML5 have enabled web applications to do things that could previously only be done by desktop software. One challenge developers face in using these new technologies is that they are not yet supported by Internet Explorer. Developers can't afford to ignore IE -- most people use some version of IE -- so they end up spending lots of time implementing work-arounds or limiting the functionality of their apps.&lt;br /&gt;&lt;br /&gt;With Google Chrome Frame, developers can now take advantage of the latest open web technologies, even in Internet Explorer. From a faster Javascript engine, &amp;nbsp;to support for current web technologies like HTML5's offline capabilities and &amp;lt;canvas&amp;gt;, to modern CSS/Layout handling, Google Chrome Frame enables these features within IE with no additional coding or testing for different browser versions.&lt;br /&gt;&lt;br /&gt;To start using Google Chrome Frame, all developers need to do is to add a&amp;nbsp;&lt;a href="http://blogs.msdn.com/ie/archive/2008/06/10/introducing-ie-emulateie7.aspx" id="snzt" title="single tag"&gt;single tag&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-FAMILY:'Times New Roman'"&gt;&lt;font face="Courier New"&gt;&lt;font size="3"&gt;&lt;span class="tag" style="COLOR:#000088"&gt;&amp;lt;meta &lt;/span&gt;&lt;span class="atn" style="COLOR:#660066"&gt;http-equiv&lt;/span&gt;&lt;span class="tag" style="COLOR:#000088"&gt;=&lt;/span&gt;&lt;span class="atv" style="COLOR:#008800"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="atn" style="COLOR:#660066"&gt;content&lt;/span&gt;&lt;span class="tag" style="COLOR:#000088"&gt;=&lt;/span&gt;&lt;span class="atv" style="COLOR:#008800"&gt;"chrome=1"&lt;/span&gt;&lt;span class="tag" style="COLOR:#000088"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When Google Chrome Frame detects this tag it switches automatically to using Google Chrome's speedy &lt;a href="http://www.webkit.org" id="gxuz" title="WebKit-based"&gt;WebKit-based&lt;/a&gt; rendering engine. It's that easy. For users, installing Google Chrome Frame will allow them to seamlessly enjoy modern web apps at blazing speeds, through the familiar interface of the version of IE that they are currently using.&lt;br /&gt;&lt;br /&gt;We believe that Google Chrome Frame makes life easier for web developers as well as users. While this is still an early version intended for developers, our team invites you to try out this for your site. You can start by reading our &lt;a id="yp6g" href="http://code.google.com/chrome/chromeframe/developers_guide.html" title="getting started guide"&gt;documentation&lt;/a&gt;. Please share your feedback in our &lt;a href="http://groups.google.com/group/google-chrome-frame" id="nmdp" title="discussion group"&gt;discussion group&lt;/a&gt; and file any bugs you find through the Chromium &lt;a href="http://code.google.com/p/chromium/issues/list" id="zm7c" title="issue tracker"&gt;issue tracker&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/sjW0Bchdj-w"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/sjW0Bchdj-w" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;(Cross-posted on the &lt;a href="http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html"&gt;Chromium Blog&lt;/a&gt;)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Amit Joshi, Alex Russell and Mike Smith, Google Chrome Frame Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-5825244421679874136?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=TnHTr9Tv5CM:3a7-zC_iLmY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=TnHTr9Tv5CM:3a7-zC_iLmY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=TnHTr9Tv5CM:3a7-zC_iLmY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/TnHTr9Tv5CM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/5825244421679874136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/introducing-google-chrome-frame.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5825244421679874136?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/5825244421679874136?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/TnHTr9Tv5CM/introducing-google-chrome-frame.html" title="Introducing Google Chrome Frame" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/introducing-google-chrome-frame.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MQHgyfCp7ImA9WxNQEEk.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-6504566272774082303</id><published>2009-09-15T13:50:00.000-07:00</published><updated>2009-09-15T13:53:01.694-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-15T13:53:01.694-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google developer day" /><category scheme="http://www.blogger.com/atom/ns#" term="gdd09" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title>Registration Opens for fall 2009 Google Developer Days</title><content type="html">We are excited to open registration for our second round of &lt;a id="plw:" href="http://code.google.com/events/developerday/2009/" title="Google Developer Day"&gt;Google Developer Day&lt;/a&gt; events this year:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;November 6, 2009 -- &lt;a id="ch4m" href="http://code.google.com/intl/cs/events/developerday/2009/home.html" title="Prague, Czech Republic"&gt;Prague, Czech Republic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;November 10, 2009 -- &lt;a id="h1vv" href="http://code.google.com/intl/ru/events/developerday/2009/home.html" title="Moscow, Russia"&gt;Moscow, Russia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Both events will offer opportunities to learn the latest about our APIs and developer tools, including &lt;a href="http://code.google.com/android/"&gt;Android&lt;/a&gt;, &lt;a href="http://code.google.com/chromium/"&gt;Google Chrome&lt;/a&gt;, &lt;a id="m4w." href="http://code.google.com/apis/wave" title="Google Wave"&gt;Google Wave&lt;/a&gt;, &lt;a href="http://code.google.com/appengine/"&gt;App Engine&lt;/a&gt;, &lt;a href="http://code.google.com/apis/ajax/"&gt;AJAX APIs&lt;/a&gt; and more.  There will also be time for developers to socialize - whether at "office hours" or the "after hours". &amp;nbsp;You'll be able to chat about your latest project or discuss that brain-busting question with fellow developers and Google engineers.&lt;br /&gt;&lt;br /&gt;Similar to our &lt;a id="feez" href="http://code.google.com/events/io/" title="Google I/O"&gt;Google I/O&lt;/a&gt; event in the US, the Developer Days will host a &lt;a id="mudd" href="http://code.google.com/events/io/sandbox.html" title="developer sandbox"&gt;developer sandbox&lt;/a&gt; area, highlighting partners who have used Google developer products to build their own unique applications. &amp;nbsp;You can also take the opportunity to share a project or coding experience during our lightning talks. We look forward to seeing what developers bring to the table this year!&lt;br /&gt;&lt;br /&gt;Space is limited so &lt;a id="qmw4" href="http://code.google.com/events/developerday/2009/" title="register"&gt;register&lt;/a&gt; soon!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Alyssa England Sachs, Google Developer Programs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-6504566272774082303?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Dpapw9HV4KM:7K_LR80Oj6o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Dpapw9HV4KM:7K_LR80Oj6o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=Dpapw9HV4KM:7K_LR80Oj6o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/Dpapw9HV4KM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/6504566272774082303/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/registration-opens-for-fall-2009-google.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/6504566272774082303?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/6504566272774082303?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/Dpapw9HV4KM/registration-opens-for-fall-2009-google.html" title="Registration Opens for fall 2009 Google Developer Days" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/registration-opens-for-fall-2009-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cBR307cSp7ImA9WxNRGUs.&quot;"><id>tag:blogger.com,1999:blog-11300808.post-7172296512164687722</id><published>2009-09-14T15:57:00.000-07:00</published><updated>2009-09-14T15:57:36.309-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T15:57:36.309-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="igoogle" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title>Legacy gadget API deprecation</title><content type="html">If you're a gadget developer, you've probably used the &lt;a href="http://code.google.com/apis/gadgets/docs/dev_guide.html" title="gadgets.*"&gt;gadgets.*&lt;/a&gt; API, a re-namespaced and improved version of the original &lt;a href="http://code.google.com/apis/gadgets/docs/legacy/dev_guide.html" title="legacy"&gt;legacy&lt;/a&gt;, or _IG_*, gadgets API. The gadgets.* API has gained wide acceptance, both on Google and non-Google gadget containers, and is the standard API for gadget development.&lt;br /&gt;&lt;br /&gt;However, there remains a number of gadgets using the legacy API, primarily gadgets developed for iGoogle, and the time to upgrade those gadgets is now. As of today, the legacy gadgets API is officially deprecated. For a period of one year, gadgets using the legacy API will continue to be supported, and function. After that, the legacy API will be turned off for the majority of Google containers (such as iGoogle, orkut, Gmail, and Calendar).&lt;br /&gt;&lt;br /&gt;For more specifics on how the deprecation affects iGoogle developers, and details on coming resources to help in the API transition, check out &lt;a href="http://igoogledeveloper.blogspot.com/2009/09/more-things-change-more-they-stay-same.html" title="this post"&gt;this post&lt;/a&gt; on the iGoogle developer blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="byline-author"&gt;By Dan Holevoet, Developer Programs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11300808-7172296512164687722?l=googlecode.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=f2Wu9pSQsOg:7sp4vV2Oj_w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=f2Wu9pSQsOg:7sp4vV2Oj_w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=f2Wu9pSQsOg:7sp4vV2Oj_w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/f2Wu9pSQsOg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googlecode.blogspot.com/feeds/7172296512164687722/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googlecode.blogspot.com/2009/09/legacy-gadget-api-deprecation.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7172296512164687722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11300808/posts/default/7172296512164687722?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/f2Wu9pSQsOg/legacy-gadget-api-deprecation.html" title="Legacy gadget API deprecation" /><author><name>Mike Marchak</name><uri>http://www.blogger.com/profile/09046869427384152063</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04643631162663437722" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://googlecode.blogspot.com/2009/09/legacy-gadget-api-deprecation.html</feedburner:origLink></entry></feed>
