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

<channel>
	<title>Google Data &#187; Ben Lisbakken</title>
	<atom:link href="/author/ben-lisbakken/feed/" rel="self" type="application/rss+xml" />
	<link>https://googledata.org</link>
	<description>Everything Google: News, Products, Services, Content, Culture</description>
	<lastBuildDate>Fri, 03 Apr 2015 21:58:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<item>
		<title>Ext-core ready to go</title>
		<link>https://googledata.org/google-ajax-api/ext-core-ready-to-go/</link>
		<comments>https://googledata.org/google-ajax-api/ext-core-ready-to-go/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 16:35:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Recently, the guys over at Ext JS released ext-core under an MIT license, which was a big win for open source!  Today, they released a stable (non-beta) version of this library and we are proud to be part of that announcement by hosting the new version...]]></description>
				<content:encoded><![CDATA[Recently, the guys over at Ext JS released ext-core under an MIT license, which was a big win for open source!  Today, they released a stable (non-beta) version of this library and we are proud to be part of that announcement by hosting the new version.  You can now pull ext-core from Google servers:<pre class="code">// directly access it<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0.0/ext-core.js<br />// alias the newest 3.0.x version<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0/ext-core.js<br />// alias the newest 3.x.x version<br />http://ajax.googleapis.com/ajax/libs/ext-core/3/ext-core.js<br />// directly access the uncompressed code<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0.0/ext-core-debug.js<br /></pre>You can also use it from the loader:<pre class="code">google.load('ext-core', '3.0');<br />google.load('ext-core', '3', {uncompressed : true});<br /></pre>Thanks to all for the requests to add ext-core to our Libraries API, and big thanks to Ext JS for providing their library so openly!  For more information, head over to their <a href="http://extjs.com/blog/2009/06/10/building-a-rating-widget-with-ext-core-30-final-and-google-cdn/">blog post</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-5044731694533724177?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/ext-core-ready-to-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ext-core ready to go</title>
		<link>https://googledata.org/google-ajax-api/ext-core-ready-to-go-2/</link>
		<comments>https://googledata.org/google-ajax-api/ext-core-ready-to-go-2/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 16:35:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=36f3c32987ec24a5314093407d177fd6</guid>
		<description><![CDATA[Recently, the guys over at Ext JS released ext-core under an MIT license, which was a big win for open source!  Today, they released a stable (non-beta) version of this library and we are proud to be part of that announcement by hosting the new version...]]></description>
				<content:encoded><![CDATA[Recently, the guys over at Ext JS released ext-core under an MIT license, which was a big win for open source!  Today, they released a stable (non-beta) version of this library and we are proud to be part of that announcement by hosting the new version.  You can now pull ext-core from Google servers:<pre class="code">// directly access it<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0.0/ext-core.js<br />// alias the newest 3.0.x version<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0/ext-core.js<br />// alias the newest 3.x.x version<br />http://ajax.googleapis.com/ajax/libs/ext-core/3/ext-core.js<br />// directly access the uncompressed code<br />http://ajax.googleapis.com/ajax/libs/ext-core/3.0.0/ext-core-debug.js<br /></pre>You can also use it from the loader:<pre class="code">google.load('ext-core', '3.0');<br />google.load('ext-core', '3', {uncompressed : true});<br /></pre>Thanks to all for the requests to add ext-core to our Libraries API, and big thanks to Ext JS for providing their library so openly!  For more information, head over to their <a href="http://extjs.com/blog/2009/06/10/building-a-rating-widget-with-ext-core-30-final-and-google-cdn/">blog post</a>.]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/ext-core-ready-to-go-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Making content creation easy with the Google AJAX APIs &#8211; Guest post</title>
		<link>https://googledata.org/google-ajax-api/making-content-creation-easy-with-the-google-ajax-apis-guest-post/</link>
		<comments>https://googledata.org/google-ajax-api/making-content-creation-easy-with-the-google-ajax-apis-guest-post/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 16:06:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[We started nextstop.com with the idea that we could make it significantly easier and more fun to discover new and interesting things to do anywhere in the world, based on recommendations from people who know a place well.  Whether it was a neat museum,...]]></description>
				<content:encoded><![CDATA[We started <a href="http://www.nextstop.com/">nextstop.com</a> with the idea that we could make it significantly easier and more fun to discover new and interesting things to do anywhere in the world, based on recommendations from people who know a place well.  Whether it was a neat museum, a hidden local restaurant, or a great place to go shopping we wanted to make it super easy and fun for people to share recommendations for their favorite places, wherever they might live.<br /><br />The trick of course was in how to do this.  It was important for us to combine ease of making a recommendation -- our goal was that it should be as simple as entering the name of a place, and a few sentences about why you liked it -- with rich information about a place so it was really useful to others -- photos, contact information, maps, etc.  The solution, not surprisingly since I'm writing here, was to use a number of Google's APIs to gather related information about the recommendation and make it easy for our members to include it in their recommendation.<br /><br />You can best see how this works by going through our <a href="http://www.nextstop.com/card/new/">recommendation flow</a>, or watching the video below.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/7kGRUIh8Ek8&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7kGRUIh8Ek8&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />Let me walk you through how this is working under the hood:  <br /><br />1) When the page loads, the first thing we do is use the <a href="http://code.google.com/apis/ajax/documentation/#GoogleLoad">Google loader</a> to load the JQuery and JQuery UI libraries, as well as Google Maps.  As part of this, we also grab the user's current location using google.loader.ClientLocation and store the lat/lng if available to use later.<br /><br />2) In step 1, we ask the user for what's being recommended.  We use this string to do a Google local search for business listings and KML results that match, using the user's current location to bound the local search by setting the sll and sspn parameters.  Between local business listings and KML results, we can offer incredible global coverage of everything from restaurants to tourist attractions to hole-in-the-wall bars and clubs.  We're using the JSON version of the local search API, which we call from our servers using Python's urlopen() so that we can supplement the results with our own database of results.<br /><br />3) In step 2 we do an image search for related images using Google's image search API.  While we let users change the search terms to find just the right picture, often our default image search (which combines the name of the place and a city name) returns great results.  There are photos of almost everything, so you can even recommend a particular dish at a <a href="http://www.nextstop.com/guide/Ka2iYVinO4w/noodles-in-taipei/">restaurant in Taipei</a> and have the photos to go along with it.<br /><br />4) In step 3, we ask for a few sentences about why that place or activity really stands out to them.  After the recommendation has been submitted, we use the <a href="http://code.google.com/apis/ajaxlanguage/">Google Language APIs</a> to detect the language of the recommendation, which we can later use to filter content by your language, and we hope to someday integrate the ability to translate recommendations into your language of choice.<br /><br />Its a very simple and fast process for the user making the recommendation, but the result is a recommendation with address, phone number, map, and photo that is really useful to another user looking to discover something new.<br /><br />We've built our whole product around the Google APIs, and feel like we're just scratching the surface of what's possible.  We're planning to let users add other information (like related websites, searches, news, etc.) using Google's APIs as well.<br /><br />We'll be at <a href="http://code.google.com/io">Google I/O</a> on May 27-28 talking about what we've done so far, and will hopefully have a few new uses of the Google APIs to show off at that time.  Please come say hello -- we'd love to hear your feedback on <a href="http://www.nextstop.com/">nextstop</a>, or share tips on using the Google APIs.  You can also check out some of the places recommended near the <a href="http://www.nextstop.com/location/map/1EpIxzRL9Ck/san-francisco/?q=&tag=&lat=37.78436757145777&lng=-122.4026083946228&z=16">Moscone center</a>, or add a few of your own!<br /><br />Carl Sjogreen (co-founder, nextstop.com)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-970043522600103385?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/making-content-creation-easy-with-the-google-ajax-apis-guest-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery, YUI updates</title>
		<link>https://googledata.org/google-ajax-api/jquery-yui-updates/</link>
		<comments>https://googledata.org/google-ajax-api/jquery-yui-updates/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 19:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[We have updated versions of jQuery and YUI on our CDN.  jQuery is now at version 1.3.2 which will be what version 1 and 1.3 aliases point to.YUI's new version, 2.7.0, includes a new stylesheet utility to do dynamic CSS without looping through DOM nodes...]]></description>
				<content:encoded><![CDATA[We have updated versions of jQuery and YUI on our CDN.  jQuery is now at version 1.3.2 which will be what version 1 and 1.3 <a href="http://code.google.com/apis/ajax/documentation/#Versioning">aliases</a> point to.<br /><br />YUI's new version, 2.7.0, includes a new stylesheet utility to do dynamic CSS without looping through DOM nodes as well as some enhancements to existing functionality such as charts, DOM collection, and tree view.  Furthermore, YUI is maintaining their image as a library for professionals by beginning to add IE8 support in preparation for Microsoft's upcoming launch.<br /><br />I'd also like to remind you that all public updates to our APIs can be followed on our <a href="http://ajax-api-alerts.blogspot.com/">Google AJAX API Alerts blog</a>.  That blog is meant for minor API additions/updates/fixes, and in the future these alerts will only be posted there.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-5533132372290011666?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/jquery-yui-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playgrounds and alerts</title>
		<link>https://googledata.org/google-ajax-api/playgrounds-and-alerts/</link>
		<comments>https://googledata.org/google-ajax-api/playgrounds-and-alerts/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 18:01:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I recently launched a new product to help developers learn our APIs.  It's an open source framework for showing Javascript code samples.  The tool allows users to click through samples so that they can edit code and see their changes live.  In order to...]]></description>
				<content:encoded><![CDATA[I recently launched a new product to help developers learn our APIs.  It's an open source framework for showing Javascript code samples.  The tool allows users to click through samples so that they can edit code and see their changes live.  In order to be a more practical tool for code editing, I put "save" and "export" features in there.  You can read more about it on <a href="http://google-code-updates.blogspot.com/2009/01/playing-around-with-googles-ajax-apis.html">the official blog post</a>.<br /><br />I would also like to point you at a new blog the AJAX APIs team will be maintaining: the <a href="http://ajax-api-alerts.blogspot.com/">AJAX APIs Alert Blog</a>.  Whether you know it or not (or believe it or not!) we are constantly making changes to the APIs.  New features, bug fixes, tweaks, etc.  In the past we haven't had a way of communicating these changes to you since they can be small changes and not worth a whole blog post here.  Furthermore, there are those of you that want to know when we update the <a href="http://code.google.com/apis/ajaxlibs/">Javascript libraries</a> that we host.  So from here on out, <a href="http://ajax-api-alerts.blogspot.com/">that blog</a> will be the new home for these "alerts".  Posts will be short, to the point and we will try to update it with all public changes, so <a  href="http://ajax-api-alerts.blogspot.com/feeds/posts/default">subscribe now</a>!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-5179298436567072039?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/playgrounds-and-alerts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome YUI!, script.aculo.us gets fresh</title>
		<link>https://googledata.org/google-ajax-api/welcome-yui-script-aculo-us-gets-fresh/</link>
		<comments>https://googledata.org/google-ajax-api/welcome-yui-script-aculo-us-gets-fresh/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 17:32:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[We've been hosting most of the big powerhouse Javascript libraries and so far it's been a huge success.  However, without YUI!, our collection has been incomplete.  Well, I'm not saying that now we're complete and won't add more libraries, just that we...]]></description>
				<content:encoded><![CDATA[We've been hosting most of the big powerhouse Javascript libraries and so far it's been a huge success.  However, without YUI!, our collection has been incomplete.  Well, I'm not saying that now we're complete and won't add more libraries, just that we're less incomplete than we were... you know what I mean.<br /><br />Anyways, after getting legal approval (people actually read those licenses), we <a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#yui">pushed it live</a>.  We are equally as excited about this as <a href="http://yuiblog.com/blog/2008/11/19/yui-google/">Yahoo!</a> and the <a href="http://ajaxian.com/archives/cdns-gaining-broader-use-with-javascript-libraries">Javascript community</a>.<br />So let's take a look at how you use it:<br /><pre class="code">&lt;head&gt;<br />  &lt;script src="http://www.google.com/jsapi" type="text/javascript"<br />          charset="utf-8"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript" charset="utf-8"&gt;<br />  google.load('yui', '2.6.0');<br />  function init() {<br />    var loader = new YAHOO.util.YUILoader({<br />      require: ["button", "calendar"],<br />      base: "http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/",<br />      onSuccess: function() {<br />        // start playing with buttons and calendars!<br />      }<br />    });<br />    loader.insert();<br />  }<br />  google.setOnLoadCallback(init);<br />  &lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />  &lt;div id="calContainer"&gt;&lt;/div&gt;<br />&lt;/body&gt;</pre>That code will load the YUI loader which then loads the button and calendar widgets (combined as one script) and calls onSuccess when they are loaded.  If lazy loading scripts isn't your thing, then you can use the <a href="http://developer.yahoo.com/yui/articles/hosting/?button&calendar&MIN&nocombine&basepath&http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/&google">dependency configurator</a> to configure the perfect script URL.  In my case, to achieve the same results as above, I would use:<br /><pre class="code" style="overflow:scroll;">&lt;link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/button/assets/skins/sam/button.css"&gt; <br />&lt;link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/calendar/assets/skins/sam/calendar.css"&gt;<br />&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/yahoo-dom-event/yahoo-dom-event.js"&gt;&lt;/script&gt; <br />&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/element/element-beta-min.js"&gt;&lt;/script&gt; <br />&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/button/button-min.js"&gt;&lt;/script&gt; <br />&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.6.0/build/calendar/calendar-min.js"&gt;&lt;/script&gt;</pre>Also, we've updated <a href="http://code.google.com/apis/ajaxlibs/documentation/#script_aculo_us">script.aculo.us</a> to  the new minor release version 1.8.2.  For those of you who are using our aliases, you've already been updated!<br /><br />As always, stop by in our <a href="http://groups.google.com/group/Google-AJAX-Search-API">group</a> or <a href="http://www.mibbit.com/?server=irc.freenode.net&channel=%23googleajaxapis">IRC channel</a> to give us a piece of your mind.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-1618242440408531425?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/welcome-yui-script-aculo-us-gets-fresh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWFObject Library Added to Libraries API</title>
		<link>https://googledata.org/google-ajax-api/swfobject-library-added-to-libraries-api/</link>
		<comments>https://googledata.org/google-ajax-api/swfobject-library-added-to-libraries-api/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 03:02:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[If you're a Flash nut then you probably know about the SWFObject Javascript library.  I'm not, so I didn't.  However, since I promised myself I would play with Flex soon I am very happy that a &#34;Flasher&#34; suggested that we add it to our AJAX Li...]]></description>
				<content:encoded><![CDATA[If you're a Flash nut then you probably know about the <a href="http://code.google.com/p/swfobject/">SWFObject</a> Javascript library.  I'm not, so I didn't.  However, since I promised myself I would play with Flex soon I am very happy that a &quot;Flasher&quot; <a href="http://code.google.com/p/google-ajax-apis/issues/detail?id=126">suggested</a> that we add it to our AJAX Libraries API.  I took a look at it and found out that it's a great little must-have library!<br /><br />See, embedding a Flash video on a page is actually more complicated than it should be.  You can't just throw a tag on the page with some attributes and expect it to work.  In fact, to embed a Flash file there are different methods for different browsers such as using an &lt;embed&gt; vs. &lt;object&gt; as well as setting the parameters for the file.<br /><br />The SWFObject library simplifies the process so that all you need to worry about is including their Javascript library and using a single method to embed your Flash on the page in a safe, cross-browser manner.  It also has a few extra utility functions, such as setting a load event for the Flash object and detecting the user's Flash version.<br /><br />Because this library is open source, extremely popular, and so handy, we have <a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#swfobject">added it to our AJAX Libraries API</a> so that our caching benefits can be reaped.  If you want to express your extreme happiness then you can do so in our new IRC channel:<br />server: irc.freenode.net<br />channel: #googleajaxapis<br /><a href="http://www.mibbit.com/?server=irc.freenode.net&channel=%23googleajaxapis">http://www.mibbit.com/?server=irc.freenode.net&channel=%23googleajaxapis</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-5321462776708354928?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/swfobject-library-added-to-libraries-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Styling the SearchControl Guest Post</title>
		<link>https://googledata.org/google-ajax-api/styling-the-searchcontrol-guest-post/</link>
		<comments>https://googledata.org/google-ajax-api/styling-the-searchcontrol-guest-post/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 18:36:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[So, the other day, I was asked by the AJAX APIs dev team if I'd like to write a guest blog post, but they didn't tell me what to write about. I thought about telling you how the AJAX APIs revolutionized how I think about life, design websites, and slic...]]></description>
				<content:encoded><![CDATA[So, the other day, I was asked by the AJAX APIs dev team if I'd like to write a guest blog post, but they didn't tell me what to write about. I thought about telling you how the AJAX APIs revolutionized how I think about life, design websites, and slice bread, but then I realized that I buy my bread pre-sliced. So I started going back through the group looking for common questions or themes to threads, and I realized that a huge portion of the questions asked can be summed up like this:  "How do I style the <code>google.search.SearchControl</code>?" For instance, how would one make it so that only a result's title and URL appear (i.e., the description is not visible), or even just the URL? What if you want to change some of the default colors? What if you, being the stylish computer geek that you are, want to make your SearchControl into a 24th century Starfleet console to fit in with that first-season spandex Star Trek: The Next Generation uniform you're wearing right now?<br /><br />Well, you're in luck! Using Mozilla Firefox with the Firebug add-on installed (an absolute must-have for any web developer, by the way), you can do all this and more simply by inspecting the structure of the default search control and taking advantage of the fact that almost every one of its individual elements is given at least one className that can be used with Cascading Style Sheets to apply different style rules.  We've put together a spectacular video to provide a very brief overview of using Firefox and Firebug to inspect the structure (and tinker with) the structure of the control. <br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/2YIAX3OSaNE&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/2YIAX3OSaNE&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />For even more information on how you can do more with Firefox and Firebug, you'll want to check out <a href="http://code.google.com/apis/ajaxsearch/articles/firebug.html">Ben Lisbakken's excellent tutorial</a>, which includes even more video! And for good measure, we've included the control's structure (complete with a few of my own comments) below:<br /><br /><pre class="code" style="height: 500px;overflow: auto;">&lt;div class="gsc-control"&gt;<br />    &lt;!-- FYI: This form is the same as the google.search.SearchForm --&gt;<br />    &lt;form class="gsc-search-box"&gt;<br />        &lt;table class="gsc-search-box"&gt;<br />            &lt;tbody&gt;<br />                &lt;tr&gt;<br />                    &lt;td class="gsc-input"&gt;<br />                        &lt;!-- This next input is the search box itself --&gt;<br />                        &lt;input class="gsc-input/&gt;<br />                    &lt;/td&gt;<br />                    &lt;td class="gsc-search-button"&gt;<br />                        &lt;!-- This next input is the search button itself --&gt;<br />                        &lt;input class="gsc-search-button"/&gt;<br />                    &lt;/td&gt;<br />                    &lt;td class="gsc-clear-button"&gt;<br />                        &lt;!-- This next div is the clear button (i.e., the little x) --&gt;<br />                        &lt;div class="gsc-clear-button"/&gt;<br />                    &lt;/td&gt;<br />                &lt;/tr&gt;<br />            &lt;/tbody&gt;<br />        &lt;/table&gt;<br />        &lt;table class="gsc-branding"&gt;<br />            &lt;tbody&gt;<br />                &lt;tr&gt;<br />                    &lt;td class="gsc-branding-user-defined"/&gt;<br />                    &lt;td class="gsc-branding-text"&gt;<br />                        &lt;div class="gsc-branding-text"&gt;powered by&lt;/div&gt;<br />                    &lt;/td&gt;<br />                    &lt;td class="gsc-branding-img"&gt;<br />                        &lt;img class="gsc-branding-img"/&gt;<br />                    &lt;/td&gt;<br />                &lt;/tr&gt;<br />            &lt;/tbody&gt;<br />        &lt;/table&gt;<br />    &lt;/form&gt;<br />    &lt;!-- In tabbed mode, this is where the tabs will appear; in stacked mode, this will be absent! --&gt;<br />    &lt;div class="gsc-tabsArea"&gt;<br />        &lt;!-- The following div would be the active tab --&gt;<br />        &lt;div class="gsc-tabHeader gsc-tabhActive"/&gt;<br />        &lt;!-- These spacer divs will appear AFTER every tab to do exactly what their className would imply --&gt;<br />        &lt;div class="gs-spacer"/&gt;<br />        &lt;!-- And this one would be an inactive tab --&gt;<br />        &lt;div class="gsc-tabHeader gsc-tabhInactive"/&gt;<br />        &lt;div class="gs-spacer"/&gt;<br />    &lt;/div&gt;<br />    &lt;div class="gsc-resultsBox-visible"&gt;<br />        &lt;!-- The next divs contain the actual results. The classes in square brackets are ONLY present in TABBED mode --&gt;<br />        &lt;!-- This would be the active tab --&gt;<br />        &lt;div class="gsc-resultsRoot [gsc-tabData gsc-tabdActive]"&gt;<br />            &lt;table class="gsc-resultsHeader"&gt;<br />                &lt;tbody&gt;<br />                    &lt;tr&gt;<br />                        &lt;td class="gsc-twiddleRegionCell gsc-twiddleRegion-opened"&gt;<br />                            &lt;div class="gsc-twiddle"&gt;<br />                                &lt;!-- This next div will contain your searcher's title or label (e.g., Local), but it won't be visible in tabbed mode --&gt;<br />                                &lt;div class="gsc-title"/&gt;<br />                            &lt;/div&gt;<br />                            &lt;!-- This next div will contain your search's estimated result count, but it's invisible in tabbed mode, too! --&gt;<br />                            &lt;div class="gsc-stats"&gt;<br />                            &lt;!-- This is the selector that chooses 1, 4, or 8 visible results. Please note that only ONE of the options in square brackets will be visible --&gt;<br />                            &lt;div class="gsc-results-selector [gsc-one-result-active OR gsc-more-results-active OR gsc-all-results-active]"&gt;<br />                                &lt;div class="gsc-result-selector gsc-one-result"/&gt;<br />                                &lt;div class="gsc-result-selector gsc-more-results"/&gt;<br />                                &lt;div class="gsc-result-selector gsc-all-results"/&gt;<br />                            &lt;/div&gt;<br />                        &lt;/td&gt;<br />                        &lt;td class="gsc-configLabelCell"&gt;<br />                            &lt;!-- This next span will only be present if the searcher has configuration options --&gt;<br />                            &lt;!-- Also, it will only have ONE of the options in square brackets, depending on whether or not the configuration form is visible or not --&gt;<br />                            &lt;span class="gsc-configLabel [gsc-twiddle-closed OR gsc-twiddle-opened]"/&gt;<br />                        &lt;/td&gt;<br />                    &lt;/tr&gt;<br />                &lt;/tbody&gt;<br />            &lt;/table&gt;<br />            &lt;!-- This next div is the configuration form for a searcher. It is only present if the searcher has configuration options --&gt;<br />            &lt;!-- The exact className of the config form will depend on the type of searcher. So you'll only have ONE of the options below.  You can probably figure out which one your searcher will have --&gt;<br />            &lt;!-- By the way, I have no idea why it's gsc-locationConfig instead of gsc-localConfig :) --&gt;<br />            &lt;div class="gsc-config [gsc-locationConfig OR gsc-videoConfig OR gsc-blogConfig OR gsc-newsConfig OR gsc-patentConfig]"&gt;<br />                &lt;!-- The exact content of the config div will vary depending on your searcher's options --&gt;<br />                &lt;!-- Use Firefox with Firebug to explore the possibilities here! --&gt;<br />            &lt;/div&gt;<br />            &lt;div class="gsc-results [gsc-localResult OR gsc-webResult OR gsc-blogResult OR gsc-newsResult OR gsc-imageResult OR gsc-bookResult OR gsc-patentResult OR gsc-videoResult]"&gt;<br />                &lt;!-- This is your FIRST actual search result. All results will follow this pattern --&gt;<br />                &lt;!-- Please note, again, that only ONE of the classNames in the square brackets will apply, depending on the searcher --&gt;<br />                &lt;div class="gsc-result [gsc-localResult OR gsc-webResult OR gsc-blogResult OR gsc-newsResult OR gsc-imageResult OR gsc-bookResult OR gsc-patentResult OR gsc-videoResult]"&gt;<br />                    &lt;!-- The contents of this div will be the same as outlined in the documentation for your searcher's results --&gt;<br />                &lt;/div&gt;<br />                &lt;div class="gsc-expansionArea"&gt;<br />                    &lt;!-- This is where the REST of your search results show up, again following the same pattern as above --&gt;<br />                &lt;/div&gt;<br />            &lt;/div&gt;<br />        &lt;/div&gt;<br />        &lt;!-- And the inactive one --&gt;<br />        &lt;div class="gsc-resultsRoot [gsc-tabData gsc-tabdInactive]"&gt;<br />            &lt;!-- All the rest of the structure of this is the same as above --&gt;<br />    &lt;/div&gt;<br />&lt;/div&gt;</pre><br /><br />So, thanks to Firefox and Firebug, we have access to the SearchControl's structure.  Now we can get to work making our control look like one of those 24th-century consoles that we see every day on the starship Enterprise! To get this done, we're going to start with the stock "Hello, world" example for the AJAX Search API. Then we're going to remove the style element that comes with it and plug in a new external stylesheet below the inline script that initializes the whole thing. <br /><br />Once that's done, we need to (a) change a bunch of colors; (b) rework a number of background images; and (c) open a small hole in the space-time continuum to get ourselves a starship console to put it all on. Okay, so that last one isn't exactly possible, but we can do all the rest with a <a href="http://jgeerdes.home.mchsi.com/google/googleAjaxApiSearchControlStyled.css">little CSS</a>. And the whole thing, put together, looks <a href="http://jgeerdes.home.mchsi.com/google/googleAjaxApiSearchControlStyled.html">like this</a>.<br /><br />Now, you will notice that a number of those rules have complex selectors (e.g., .gsc-resultsHeader td.gsc-twiddle-opened...).  This is because Google's default CSS is rather specific in places.  And it's also why Firefox with Firebug is so very important.  It really makes the whole process almost painless.<br /><br />So there you have it: style. Well, for your SearchControl, at least. Next time, we'll talk about why the Starfleet quartermaster abandoned spandex.<br /><br />Until then, happy styling!<br /><br />Jeremy R. Geerdes<br />Generally Cool Guy<br />jrgeerdes@gmail.com<br /><br /><span style="font-weight:bold;">p.s. What cool custom designs have you come up with?  Share them in the <a href="http://groups.google.com/group/Google-AJAX-Search-API">Google Group</a>!  Ben Lisbakken has promised some Google schwag for interesting designs...</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-3752868313464393581?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/styling-the-searchcontrol-guest-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MooTools 1.2.1</title>
		<link>https://googledata.org/google-ajax-api/mootools-1-2-1/</link>
		<comments>https://googledata.org/google-ajax-api/mootools-1-2-1/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 02:09:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[MooTools v1.2.1 recently got released and we have received the thumbs up from the maintainers to host it, so the bits have been flipped and the pipes are ready to MOOve it over to you guys.But wait!!  Before you get started with 1.2.1, please note that...]]></description>
				<content:encoded><![CDATA[MooTools v1.2.1 recently got released and we have received the thumbs up from the maintainers to host it, so the bits have been flipped and the pipes are ready to MOOve it over to you guys.<br /><br />But wait!!  Before you get started with 1.2.1, please note that the previous version we are hosting (1.11) and the new version (1.2.1) are incompatible.  So as not to break anyone out of the blue (and put them in a bad MOOd) we have frozen the version "1" alias to 1.11.  Here's what the aliases look like for MooTools:<br /><code>google.load('mootools', '1')  // gives you version 1.11</code><br /><code>google.load('mootools', '1.11')  // gives you version 1.11</code><br /><code>google.load('mootools', '1.2.1') // gives you version 1.2.1</code><br />... you get the picture.<br /><br />If you have some extra time, stop by the <a href="http://groups.google.com/group/Google-AJAX-Search-API/">group</a> and show us what you've been up to with MooTools.  Happy grazing!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-2436643562402809429?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/mootools-1-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Libraries API Update</title>
		<link>https://googledata.org/google-ajax-api/ajax-libraries-api-update/</link>
		<comments>https://googledata.org/google-ajax-api/ajax-libraries-api-update/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 23:38:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[What's better than making a drag/drop effect in Javascript that's compatible in all browsers?  Not making a drag/drop  effect in Javascript that's compatible in all browsers.  Save your ninja-code for another day and use the JQuery UI plugin that is no...]]></description>
				<content:encoded><![CDATA[What's better than making a drag/drop effect in Javascript that's compatible in all browsers?  Not making a drag/drop  effect in Javascript that's compatible in all browsers.  Save your ninja-code for another day and use the JQuery UI plugin that is now hosted on our <a href="http://code.google.com/apis/ajaxlibs/">AJAX Libraries API</a>!  As usual, your users will get a performance boost when you use JQuery UI through our API, so get started by checking out the <a href="http://code.google.com/apis/ajaxlibs/documentation/#jqueryUI">docs</a>.<br /><br />For those of you still waiting for a MooTools 1.2 update, we apologize for the delay.  In fact, we had been waiting to release JQuery UI so we could push it with MooTools 1.2.  What happened was that when MooTools released the 1.2 update, it had 1.2dev in the version string.  We contacted MooTools and they immediately fixed this.  However, Valerio Proietti over on their side has asked us to wait until 1.2.1 is out the door to flip the switch.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-4305366464133702755?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/ajax-libraries-api-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Libraries SSL Support is Live</title>
		<link>https://googledata.org/google-ajax-api/ajax-libraries-ssl-support-is-live/</link>
		<comments>https://googledata.org/google-ajax-api/ajax-libraries-ssl-support-is-live/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 21:43:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Since the launch we've seen significant adoption for the AJAX Libraries API. Many developers have let us know that they would love to use our API on their secure sites using HTTPS (such as e-commerce), in fact it is the #1 request on our issue tracker....]]></description>
				<content:encoded><![CDATA[Since the <a href="http://googleajaxsearchapi.blogspot.com/2008/05/speed-up-access-to-your-favorite.html">launch</a> we've seen significant adoption for the AJAX Libraries API. Many developers have let us know that they would love to use our API on their secure sites using HTTPS (such as e-commerce), in fact it is the #1 request on our <a href="http://code.google.com/p/google-ajax-apis/issues/list">issue tracker</a>. So as of last Friday, we now support SSL access to the libraries.<br /><br />For those of you waiting for this feature, we apologize for the delay and appreciate your patience.  Please keep the feedback coming and know that we see each and every one.<br /><br />Now be on the lookout for new/updated AJAX libraries in our API!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-5548035347586985325?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/ajax-libraries-ssl-support-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non-Javascript LocalSearch</title>
		<link>https://googledata.org/google-ajax-api/non-javascript-localsearch/</link>
		<comments>https://googledata.org/google-ajax-api/non-javascript-localsearch/#comments</comments>
		<pubDate>Fri, 16 May 2008 22:57:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I wrote a non-Javascript version of Google Maps which is designed to show how easy it is to write an application on App Engine that makes use of two new APIs from Google: The Static Maps API and the Local Search API's REST interface.  It doesn't have f...]]></description>
				<content:encoded><![CDATA[I wrote a <a href="http://nonjslocalsearch.appspot.com">non-Javascript version of Google Maps</a> which is designed to show how easy it is to write an application on App Engine that makes use of two new APIs from Google: The Static Maps API and the Local Search API's REST interface.  It doesn't have fancy stuff like street view and public transportation, but it gives you a searchable map that you can zoom in/out on as well as save locations.  It also automatically saves your last map view so that every time you go back to the site it will show you what you were last looking at.  Check out the <a href="http://code.google.com/p/google-ajax-examples/source/browse/trunk/nonjslocalsearch/localSearch.py">source code</a>.<br /><br />It uses <a href="http://code.google.com/appengine/">App Engine</a> to store saved points, the <a href="http://code.google.com/apis/ajaxsearch/documentation/#fonje">AJAX LocalSearch REST API</a> for search functionality, and the <a href="http://code.google.com/apis/maps/documentation/staticmaps/">Static Maps API</a> to display maps.  I really enjoyed working with App Engine.  It's free, easy to learn and the data store is very useful.  Likewise, using the REST LocalSearch is beyond simple.  Here's all you have to do in Python to retrieve search results:<br /><pre class="code">query = urllib.urlencode({'q' : 'pizza near mountain view'})<br />url = 'http://ajax.googleapis.com/ajax/services/search/local?v=1.0&%s&rsz=large' \<br />  % (query)<br />local_search_points = urlfetch.fetch(url)<br />json = simplejson.loads(local_search_points.content)<br />points = json['responseData']['results']<br />for i in points:<br />  # output the information e.g. i['streetAddress']</pre>To use the Static Map API, you just need to create a URL with the proper parameters for your desired map view.  Keep in mind that you need to set the zoom level (unless you are specifying multiple points -- then it's calculated for you).  In the vast majority of cases, this is completely fine.  In my case, though, I needed to know what the zoom level was for multiple points and calculate it in cases where I only had one map point.<br /><br />Here's the code to do this.  From line <a href="http://code.google.com/p/google-ajax-examples/source/browse/trunk/nonjslocalsearch/localSearch.py#130">130</a> to about <a href="http://code.google.com/p/google-ajax-examples/source/browse/trunk/nonjslocalsearch/localSearch.py#296">296</a> you'll find the necessary functions to calculate a zoom level given a bounding box or a set of latitude/longitude points.<br /><br />It's time to start cranking out those App Engine & AJAX APIs apps!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-8329711231676724395?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/non-javascript-localsearch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gears Screencast: An Introductory Tutorial</title>
		<link>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial/</link>
		<comments>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 19:36:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Gears]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Posted by Ben Lisbakken, Gears TeamUsing a JavaScript API to cache web pages offline, interact with a client side database and introduce threading into your application isn't immediately intuitive because it's such a foreign concept for a web API.  I r...]]></description>
				<content:encoded><![CDATA[<span class="byline-author">Posted by Ben Lisbakken, Gears Team</span><br /><br />Using a JavaScript API to cache web pages offline, interact with a client side database and introduce threading into your application isn't immediately intuitive because it's such a foreign concept for a web API.  I remember when I was doing my first work with Gears -- I was a bit disoriented and in need of a walk through of how things work and why.<br /><br />To help potential Gears users that feel like my 7-month-ago-self, I wrote a tutorial application that uses a minimal amount of non-Gears code.  This application is a simple stock ticker that makes use of 5 of the Gears modules; LocalServer, Database, WorkerPool, Timer, and HTTPRequest.<br /><br />But a standalone application can't teach someone -- it needs some explaining.  Long articles generally lose my attention, so my media of choice was video.  I made a screen cast where I walk through the code in three steps, which you can find <a href="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/">here</a>.  There's also a zip file that contains the three steps of code so you can take a look at the code on your own.  Please note that there is a PHP file that is required for the application to work, so you will need a server that runs PHP in order to use this code on your own!<br/><br /><a href="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/screencast_full.mov"><img border=0 src="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/screenshot.png" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8349418849086791337-7541542053048256265?l=gearsblog.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gears Screencast: An Introductory Tutorial</title>
		<link>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial-2/</link>
		<comments>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial-2/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 19:36:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Gears]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=504c0ea818270eb31a6901decfe4e2a0</guid>
		<description><![CDATA[Posted by Ben Lisbakken, Gears TeamUsing a JavaScript API to cache web pages offline, interact with a client side database and introduce threading into your application isn't immediately intuitive because it's such a foreign concept for a web API.  I r...]]></description>
				<content:encoded><![CDATA[<span class="byline-author">Posted by Ben Lisbakken, Gears Team</span><br /><br />Using a JavaScript API to cache web pages offline, interact with a client side database and introduce threading into your application isn't immediately intuitive because it's such a foreign concept for a web API.  I remember when I was doing my first work with Gears -- I was a bit disoriented and in need of a walk through of how things work and why.<br /><br />To help potential Gears users that feel like my 7-month-ago-self, I wrote a tutorial application that uses a minimal amount of non-Gears code.  This application is a simple stock ticker that makes use of 5 of the Gears modules; LocalServer, Database, WorkerPool, Timer, and HTTPRequest.<br /><br />But a standalone application can't teach someone -- it needs some explaining.  Long articles generally lose my attention, so my media of choice was video.  I made a screen cast where I walk through the code in three steps, which you can find <a href="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/">here</a>.  There's also a zip file that contains the three steps of code so you can take a look at the code on your own.  Please note that there is a PHP file that is required for the application to work, so you will need a server that runs PHP in order to use this code on your own!<br/><br /><a href="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/screencast_full.mov"><img border=0 src="http://gears-examples.googlecode.com/svn/trunk/stock_tutorial/screenshot.png" /></a>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-gears/gears-screencast-an-introductory-tutorial-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Leap day hackathon for Google Gadgets, Maps, and more</title>
		<link>https://googledata.org/google-webmaster-central/leap-day-hackathon-for-google-gadgets-maps-and-more/</link>
		<comments>https://googledata.org/google-webmaster-central/leap-day-hackathon-for-google-gadgets-maps-and-more/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 16:37:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Webmaster Central]]></category>
		<category><![CDATA[google webmaster tools]]></category>
		<category><![CDATA[webmaster central]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Written by Ben Lisbakken, Google Developer ProgramsIf you've got JavaScript skills and you'd like to implement such things as Google Gadgets or Maps on your site, bring your laptops and come hang out with us in Mountain View.This Friday, my team (Googl...]]></description>
				<content:encoded><![CDATA[<span class="byline-author">Written by Ben Lisbakken, Google Developer Programs</span><br /><span style="color: rgb(0, 0, 0);"><br />If you've got JavaScript skills and you'd like to implement such things as Google Gadgets or Maps on your site, bring your laptops and come hang out with us in Mountain View.<br /><br />This Friday, my team (Google Developer Programs) is hosting a hackathon to get you started with our JavaScript APIs. There will be plenty of our engineers around to answer questions. We'll start with short introductions of the APIs and then break into groups for coding and camaraderie. There'll be food, and prizes too.<br /><br />The featured JavaScript APIs:<ul><li><a href="http://code.google.com/apis/gears/" id="mu68" title="Google Gears">Google Gears</a> -- make your web applications work offline</li><li><a href="http://code.google.com/apis/ajaxsearch/" id="ehuj" title="Google AJAX Search/Feeds">Google AJAX Search/Feeds</a> -- add Google search capabilities to your website</li><li><a href="http://code.google.com/apis/gadgets/" id="no84" title="Google Gadgets">Google Gadgets</a>  -- create small programs that run on your <span>i</span>Google homepage<br /></li><li>     <a href="http://code.google.com/apis/maps/index.html" id="yx86" title="Google Maps">Google Maps</a> -- embed and manipulate Google Maps on your web page</li><li><a href="http://code.google.com/apis/calendar/developers_guide_js.html" id="gklt" title="Google Calendar">Google Calendar</a> -- interact with Google Calendars on your website</li></ul>When:  <b>Friday, February 29</b> - two sessions (you're welcome to attend both)<ul><li>2-5:30 PM</li><li>6-10 PM     </li></ul>Where: The Googleplex<br />Building 40<br />1600 Amphitheatre Pkwy<br />Mountain View, CA 94043<br />Room: Seville Tech Tal<span style="color: rgb(0, 0, 0);">k</span><span style="color: rgb(204, 0, 0);"><span style="color: rgb(0, 0, 0);">, 2nd floor</span></span><br /><br />See our <a title="map" href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110238536692955634646.00044701f0f6ba65cff6d&amp;t=h&amp;z=17" id="ukia">map</a> for parking locations and where to check in. (Soon, you too, will be making maps like this! :)<br /><br />Just say yes and <a title="RSVP" href="http://googledevhackathonjsapis.googlemashups.com/" id="xz-y">RSVP</a>!<br /><br />And no worries if you're busy this Friday; future hackathons will feature other APIs and more languages. Check out the <a title="Developer Events Calendar" href="http://code.google.com/events/" id="xfgx">Developer Events Calendar</a> for future listings. Hope to see you soon.<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32069983-859045332767555039?l=googlewebmastercentral.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-webmaster-central/leap-day-hackathon-for-google-gadgets-maps-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gearsAJAXHelper: Use Google Gears with AJAX APIs for Faster Queries</title>
		<link>https://googledata.org/google-ajax-api/gearsajaxhelper-use-google-gears-with-ajax-apis-for-faster-queries/</link>
		<comments>https://googledata.org/google-ajax-api/gearsajaxhelper-use-google-gears-with-ajax-apis-for-faster-queries/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 16:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Ben Lisbakken]]></dc:creator>
				<category><![CDATA[Google Ajax API]]></category>
		<category><![CDATA[google ajax]]></category>
		<category><![CDATA[google api]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Google Gears is an API that is known for giving developers the ability to have their webpage viewable offline.  However, it can also be used to speed up your website.  In the case of the AJAX APIs, you can use the Google Gears local cache and client-si...]]></description>
				<content:encoded><![CDATA[<a href="http://code.google.com/apis/gears/">Google Gears</a> is an API that is known for giving developers the ability to have their webpage viewable offline.  However, it can also be used to speed up your website.  In the case of the <a href="http://code.google.com/apis/ajaxsearch/">AJAX APIs</a>, you can use the Google Gears local cache and client-side database to have queries load fast with cached data while requests for fresh data are done in the background.<br /><br />We decided it would be cool to write a small library to make it easy for you AJAX APIs developers to write quick-loading, always fresh searches/feeds.  The <a href="http://google-ajax-examples.googlecode.com/svn/trunk/gearsAJAXHelper/gearsAJAXHelper.js">gearsAJAXHelper</a> has two main features - it allows you to store and return key/value pairs from the local database, and it allows you to choose whether you want all resources files on the page (images, CSS, Javascript, HTML) to automatically be cached in the Gears cache.<br /><br />The key/value pair database feature let's you store the query/results as a key/value pair.  Then, the next time the query is made, the results can be served from the database while fresh results are being retrieved.  This dramatically reduces the latency in queries/feed grabs.<br /><br />The (optional) automatic cacheing of resource files will make it so that each time the user visits your webpage they will be getting resources served from their Google Gears cache, not new versions from the internet.  Be careful when using this feature, as you might not want stale content to be served.  There is also a refresh function, to clear the Google Gears cache of old files.<br /><br />Here is a <a href="http://google-ajax-examples.googlecode.com/svn/trunk/presidentialwithgears/election2008.html">sample application</a> that uses the gearsAJAXHelper to quick-load feeds.  Notice that after you have clicked on a candidate (or state) once, the next time you click it will quick-load the results.  If the results in the database are stale, you will see fresh results populate the content area.  Here's how the gearsAJAXHelper library is used in this code:<br /><pre class="code">gearsAJAXHelper.initialize("election", "election", false);<br /></pre><br />This initializes the library. The first two parameters you pass in are what you want the name of the Gears LocalServer ResourceStore and Gears Database to be named, respectively.  The third parameter specifies whether you want your page's resources to be automatically cached.<br /><br />Then there are just three other main calls that are used:<br /><pre class="code">gearsAJAXHelper.storeKeyVal(key, value);<br />gearsAJAXHelper.returnKeyVal(key);<br />gearsAJAXHelper.refresh();<br /></pre><br />When you make any requests, store the results using <code>gearsAJAXHelper.storeKeyVal(key, value)</code>.  Use the query/feed address as the key, and the results as the value.  In the case of the Presidential Application, in the <code>NewsBox.prototype.searchComplete</code> function I wait until the results have been turned into the desired HTML, then I store that as the value and the query as the key.<br /><br />The <code>NewsBox.prototype.loadNewsBox</code> function is called before any search is executed.  In here, I use <code>gearsAJAXHelper.returnKeyVal(key)</code> to check if the query has been done before - if it has we will use the HTML returned.  This should be a near-instantaneous operation.  Immediately after, I execute the search we would have done so that when it completes fresh results will be served.  If the database doesn't have the key/value pair stored, then we will execute the query as normal.<br /><br />In some cases, you might want to clear the database of old entries as well as clear the Gears LocalServer cache - use the <code>gearsAJAXHelper.refresh</code> function for this.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29072373-1903682672762349628?l=googleajaxsearchapi.blogspot.com' alt='' /></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-ajax-api/gearsajaxhelper-use-google-gears-with-ajax-apis-for-faster-queries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
