<?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.klokan.cz/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:idx="urn:atom-extension:indexing" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" idx:index="no" gr:dir="ltr"><!--
Content-type: Preventing XSRF in IE.

--><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/01206061666796536906/state/com.google/starred</id><title>Klokan's starred items in Google Reader</title><gr:continuation>CK_asL67mKMC</gr:continuation><author><name>Klokan</name></author><updated>2010-09-01T06:31:37Z</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.klokan.cz/klokan-starred-news" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="klokan-starred-news" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gr:crawl-timestamp-msec="1283322697821"><id gr:original-id="tag:blogger.com,1999:blog-2437909874160353836.post-5543721988577799594">tag:google.com,2005:reader/item/4ebbbce4c5efc4f8</id><title type="html">Introducing Closure Linter</title><published>2010-08-31T22:45:00Z</published><updated>2010-08-31T23:55:09Z</updated><link rel="alternate" href="http://closuretools.blogspot.com/2010/08/introducing-closure-linter.html" type="text/html" /><link rel="replies" href="http://closuretools.blogspot.com/feeds/5543721988577799594/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=2437909874160353836&amp;postID=5543721988577799594&amp;isPopup=true" title="0 Comments" type="text/html" /><content xml:base="http://closuretools.blogspot.com/" type="html">When collaborating with lots of engineers as we do here at Google, it’s important to keep a consistent coding style.  To this end, we recently open sourced the &lt;a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml"&gt;Google JavaScript Style Guide&lt;/a&gt;.  &lt;br&gt;&lt;br&gt;Today we’re happy to announce we’re open sourcing a tool that will help you follow that style guide with minimal manual effort - the Closure Linter.&lt;br&gt;&lt;br&gt;Take for example, this code:&lt;br&gt;&lt;br&gt;&lt;pre&gt;var x = 10&lt;br&gt;var y=20;&lt;br&gt;&lt;br&gt;for(var i = 0;i &amp;lt; 10; i++ ) {&lt;br&gt;  x += i;&lt;br&gt;   y -= i;&lt;br&gt;}&lt;br&gt;&lt;br&gt;var z = [10, 20,];&lt;br&gt;&lt;br&gt;x = y + z[0]&lt;br&gt;    + 10;&lt;/pre&gt;&lt;br&gt;When we run &lt;code&gt;gjslint --strict fixme.js&lt;/code&gt; we get&lt;br&gt;&lt;pre&gt;Line 1, E:0010: (New error) Missing semicolon at end of line&lt;br&gt;Line 2, E:0002: Missing space before "="&lt;br&gt;Line 2, E:0002: Missing space after "="&lt;br&gt;Line 4, E:0002: Missing space before "("&lt;br&gt;Line 4, E:0002: Missing space after ";" in for statement&lt;br&gt;Line 4, E:0001: Extra space before ")"&lt;br&gt;Line 6, E:0006: (New error) Wrong indentation: expected any of {2} but got 3&lt;br&gt;Line 9, E:0121: Illegal comma at end of array literal&lt;br&gt;Line 12, E:0120: Binary operator should go on previous line "+"&lt;br&gt;Found 9 errors, including 2 new errors, in 1 files (0 files OK).&lt;/pre&gt;&lt;br&gt;Even better, if we run &lt;code&gt;fixjsstyle --strict fixme.js&lt;/code&gt;, 7 of the 9 errors are automatically fixed for us!&lt;br&gt;&lt;br&gt;We hope you can use the Closure Linter to improve your style consistency while simultaneously saving time.  More information on how to get started can be found on the &lt;a href="http://code.google.com/closure/utilities/docs/linter_howto.html"&gt;How to Use Closure Linter&lt;/a&gt; page.&lt;br&gt;&lt;br&gt;We welcome comments and questions in &lt;a href="http://groups.google.com/group/closure-linter-discuss"&gt;the discussion forum&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;span&gt;Posted by Robby Walker and Andy Perelson, Software Engineers&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2437909874160353836-5543721988577799594?l=closuretools.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/5aw915RQAaI" height="1" width="1"/&gt;</content><author><name>A Googler</name></author><gr:likingUser>09314580074863493347</gr:likingUser><gr:likingUser>05468177397138962964</gr:likingUser><gr:likingUser>06531986975267741339</gr:likingUser><source gr:stream-id="feed/http://closuretools.blogspot.com/atom.xml"><id>tag:google.com,2005:reader/feed/http://closuretools.blogspot.com/atom.xml</id><title type="html">Closure Tools Blog</title><link rel="alternate" href="http://closuretools.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1283203538569"><id gr:original-id="tag:blogger.com,1999:blog-2437909874160353836.post-1022065478972077188">tag:google.com,2005:reader/item/0164e792ea321b86</id><title type="html">This Var is My Var</title><published>2010-08-30T20:34:00Z</published><updated>2010-08-30T20:50:11Z</updated><link rel="alternate" href="http://closuretools.blogspot.com/2010/08/this-var-is-my-var.html" type="text/html" /><link rel="replies" href="http://closuretools.blogspot.com/feeds/1022065478972077188/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=2437909874160353836&amp;postID=1022065478972077188&amp;isPopup=true" title="0 Comments" type="text/html" /><content xml:base="http://closuretools.blogspot.com/" type="html">The Closure Compiler you know is very different than the Closure Compiler that’s familiar to Google engineers. The defaults at Google are much stricter. It forbids duplicate global variable declarations, performs type-checking, and restricts a number of other patterns that are common in non-Closure-style JavaScript. By default, the “Google build” of Closure Compiler is like running the "open source build" of Closure Compiler with the &lt;code&gt;--warning_level VERBOSE&lt;/code&gt; flag.&lt;br&gt;&lt;br&gt;Why? Almost every contributor to Closure Tools works on web applications. We want to be able to share code. Part of that means we should be able to fix the shared code, and integrate it into all our apps quickly so that, for example, &lt;a href="http://blogs.msdn.com/b/ie/archive/2010/04/26/feedback-on-the-ie9-platform-preview.aspx"&gt;fixes for IE9&lt;/a&gt; will make it out to production within a reasonable time. To integrate those changes safely, we need to be confident that they won’t break anything. Compiler restrictions help us do that. Sometimes those restrictions are obvious...sometimes less so.&lt;br&gt;&lt;br&gt;Suppose Joey writes some library code:&lt;br&gt;&lt;br&gt;&lt;pre&gt;Joey.prototype.eatHotDogs = function(hotDogs) {&lt;br&gt;  for (i = 0; i &amp;lt; hotDogs.length; i++) {&lt;br&gt;    this.eat(hotDogs[i]);&lt;br&gt;  }&lt;br&gt;};&lt;/pre&gt;&lt;br&gt;Next summer, Nathan writes an application to feed Joey HotDogs by the boxful:&lt;br&gt;&lt;br&gt;&lt;pre&gt;Nathan.prototype.runHotDogContest = function(player, boxes) {&lt;br&gt;  for (i = 0; i &amp;lt; boxes.length; i++) {&lt;br&gt;    player.eatHotDogs(this.unpackHotDogs(boxes[i]));&lt;br&gt;  }&lt;br&gt;};&lt;/pre&gt;&lt;br&gt;Surprisingly, when Nathan runs his code in a browser, it tries to feed Joey an infinite number of hot dogs and crashes the browser.&lt;br&gt;&lt;br&gt;The problem, of course, is that JavaScript "helpfully" declares variables for you if you forgot. No one declared &lt;code&gt;i&lt;/code&gt;, so a variable &lt;code&gt;i&lt;/code&gt; got magicked into the global scope. When Joey originally wrote his code, he tested it and it worked fine. But when Nathan tried to use it, he found that &lt;code&gt;eatHotDogs()&lt;/code&gt; was "resetting" the &lt;code&gt;i&lt;/code&gt; in his loop every time he called it.&lt;br&gt;&lt;br&gt;In this example, Nathan was directly calling the problematic method, and the bug was relatively easy to spot. In the general case, these bugs are "non-localized" —missing &lt;code&gt;var&lt;/code&gt; in one file may trigger a bug in an unrelated file that hasn’t been touched in years. Or it may cause a bug years later in unrelated new code. For a library shared across many codebases, non-localized bugs can stop progress quickly because it’s so hard to know where to start looking.&lt;br&gt;&lt;br&gt;In &lt;code&gt;VERBOSE&lt;/code&gt; mode, Closure Compiler enforces that all variables must be declared with the &lt;code&gt;var&lt;/code&gt; or &lt;code&gt;function&lt;/code&gt; or &lt;code&gt;catch&lt;/code&gt; keywords. Global variables may only be declared once. The Google JS style guide has &lt;a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml#Naming"&gt;naming conventions&lt;/a&gt; to make these collisions even less likely.&lt;br&gt;&lt;br&gt;This rule has some corollaries that have a big impact on how we write JavaScript. For one, there must be a way to declare variables that are "owned" by the surrounding page, and not by the code under compilation. So Closure Compiler has &lt;a href="http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs"&gt;externs files&lt;/a&gt;, which allow you to declare external variables. Conversely, external variables may not conflict with your code. If you use the default externs, you will not be able to name a variable &lt;code&gt;Node&lt;/code&gt; because it will conflict with &lt;a href="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247"&gt;DOM Nodes&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Try running Closure Compiler with &lt;code&gt;--warning_level=VERBOSE&lt;/code&gt; mode and see what you find in your code!&lt;br&gt;&lt;br&gt;&lt;span&gt;Posted by Nick Santos, Software Engineer&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2437909874160353836-1022065478972077188?l=closuretools.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/urj4K3DVCzA" height="1" width="1"/&gt;</content><author><name>A Googler</name></author><gr:likingUser>13813399869481268455</gr:likingUser><gr:likingUser>16851182905669591095</gr:likingUser><source gr:stream-id="feed/http://closuretools.blogspot.com/atom.xml"><id>tag:google.com,2005:reader/feed/http://closuretools.blogspot.com/atom.xml</id><title type="html">Closure Tools Blog</title><link rel="alternate" href="http://closuretools.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1283071216729"><id gr:original-id="tag:blogger.com,1999:blog-4741970181714760187.post-6494069169871892903">tag:google.com,2005:reader/item/694e246fdde43cd8</id><title type="html">Mapping with Google Fusion Tables</title><published>2010-08-28T15:37:00Z</published><updated>2010-08-28T21:24:26Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/thematicmapping/~3/xIt8ErKQOes/mapping-with-google-fusion-tables.html" type="text/html" /><link rel="replies" href="http://blog.thematicmapping.org/feeds/6494069169871892903/comments/default" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=4741970181714760187&amp;postID=6494069169871892903" type="text/html" /><content xml:base="http://planet.osgeo.org/" type="html">&lt;div&gt;My workplace, &lt;a href="http://www.fn.no/Om-oss/UNA-Norway"&gt;United Nations Association of Norway&lt;/a&gt; (UNA Norway), has 700 member schools across the country. We wanted to include a map on our webpage to show all our members. The map should be automatically updated when new schools are added or removed. From previous experience, I knew that having 700 markers on a single map is &lt;a href="http://www.google.com/support/forum/p/maps/thread?tid=79254a93445a8976&amp;amp;hl=en"&gt;problematic&lt;/a&gt;. Google Fusion Tables overcomes this limitation in a clever way.&lt;br&gt;
&lt;br&gt;
Especially for nerds: We use &lt;a href="http://www.sugarcrm.com/crm/community/sugarcrm-community.html"&gt;SugarCRM&lt;/a&gt; to keep track of our members. SugarCRM is highly customisable and it&amp;#39;s easy to add extra fields for latitude and longitude positions. I wrote a PHP script which synchronises a SugarCRM database (MySQL) with &lt;a href="http://code.google.com/intl/no-NO/apis/fusiontables/"&gt;Google Fusion Tables&lt;/a&gt;. The script first checks if the last modifed date or the number of rows are equal. If not, the script loops through all rows (members) in the SugarCRM database. If the member exist in Fusion Tables, it&amp;#39;s updated if modified date is different. If the member don&amp;#39;t exist in Fusion Tables, it&amp;#39;s inserted. Fusion Tables members that don&amp;#39;t exist in SugarCRM database are deleted. &lt;a href="http://code.google.com/p/vizzuality/source/browse/trunk/otrobache.com/services/fusiontableslib.php?r=3486"&gt;This script&lt;/a&gt; helped me to get started.&lt;br&gt;
&lt;br&gt;
When the data are available in Google Fusion Tables, it&amp;#39;s easy to create an embeddable map:&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://tables.googlelabs.com/embedviz?viz=MAP&amp;amp;q=select+col0,col1,col2,col3,col4,col5,col6+from+199827+&amp;amp;h=false&amp;amp;lat=64.98&amp;amp;lng=16.085&amp;amp;z=5&amp;amp;l=col4"&gt;Full screen view&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Google Fusion Tables avoids the browser limitation of showing maximum 200 markers by generating transparent PNG tiles instead of indvidual markers. &lt;a href="http://mt0.google.com/mapslt?lyrs=ft:199827%7Cs:select%2520col4%2520from%2520199827%2520%7Ch:false%7Ct:1283009032&amp;amp;x=67&amp;amp;y=37&amp;amp;z=7&amp;amp;w=256&amp;amp;h=256&amp;amp;source=maps_api&amp;amp;hl=no"&gt;This url&lt;/a&gt; shows you a PNG image of our member schools around Oslo:&lt;br&gt;
&lt;br&gt;
&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://mt0.google.com/mapslt?lyrs=ft:199827%7Cs:select%2520col4%2520from%2520199827%2520%7Ch:false%7Ct:1283009032&amp;amp;x=67&amp;amp;y=37&amp;amp;z=7&amp;amp;w=256&amp;amp;h=256&amp;amp;source=maps_api&amp;amp;hl=no" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://mt0.google.com/mapslt?lyrs=ft:199827%7Cs:select%2520col4%2520from%2520199827%2520%7Ch:false%7Ct:1283009032&amp;amp;x=67&amp;amp;y=37&amp;amp;z=7&amp;amp;w=256&amp;amp;h=256&amp;amp;source=maps_api&amp;amp;hl=no"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/4741970181714760187-6494069169871892903?l=blog.thematicmapping.org" width="1"&gt;&lt;/div&gt;&lt;img height="1" src="http://feeds.feedburner.com/~r/thematicmapping/~4/xIt8ErKQOes" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/WTU6TPliFCc" height="1" width="1"/&gt;</content><author><name>Bjørn Sandvik</name></author><source gr:stream-id="feed/http://planet.osgeo.org/atom.xml"><id>tag:google.com,2005:reader/feed/http://planet.osgeo.org/atom.xml</id><title type="html">Planet OSGeo</title><link rel="alternate" href="http://planet.osgeo.org" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282863506721"><id gr:original-id="http://www.tuaw.com/2010/08/26/royalty-free-h-264-is-a-big-win-for-html5-big-loss-for-flash/">tag:google.com,2005:reader/item/9f37ad562838ea54</id><category term="Adobe" /><category term="browsers" /><category term="Firefox" /><category term="Flash" /><category term="H.264" /><category term="HTML5" /><category term="iOS" /><category term="Mozilla" /><category term="MPEG LA" /><category term="MpegLa" /><category term="video" /><category term="vimeo" /><category term="YouTube" /><title type="html">Royalty-free H.264 is a big win for HTML5, big loss for Flash</title><published>2010-08-26T22:00:00Z</published><updated>2010-08-26T22:00:00Z</updated><link rel="alternate" href="http://www.tuaw.com/2010/08/26/royalty-free-h-264-is-a-big-win-for-html5-big-loss-for-flash/" type="text/html" /><summary xml:base="http://www.tuaw.com/" type="html">&lt;img vspace="8" hspace="8" border="0" align="right" alt="" src="http://www.blogcdn.com/www.tuaw.com/media/2010/08/no-flash-cjr.jpg"&gt;&lt;em&gt;&lt;strong&gt;Update: &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.theregister.co.uk/2010/08/26/mozilla_on_h264/"&gt;&lt;em&gt;Mozilla responds&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, saying that by 2014 (when the original fee-free license for H.264 would have expired) chances are the codec won't be relevant anymore.&lt;/em&gt;&lt;br&gt;
&lt;br&gt;
So far, one of the main arguments against widespread implementation of &lt;a href="http://www.tuaw.com/tag/HTML5/"&gt;HTML5&lt;/a&gt; &lt;a href="http://www.tuaw.com/tag/video/"&gt;video&lt;/a&gt; has been the uncertain licensing future of the &lt;a href="http://www.tuaw.com/tag/H264/"&gt;H.264&lt;/a&gt; standard. Proponents of &lt;a href="http://www.tuaw.com/tag/Flash/"&gt;Flash&lt;/a&gt; video and organizations committed to license-free software, like the &lt;a href="http://www.tuaw.com/tag/Mozilla/"&gt;Mozilla &lt;/a&gt;foundation, said that while H.264 was currently royalty-free (and would remain so until 2015), there was no guarantee that &lt;a href="http://www.tuaw.com/tag/MPEGLA/"&gt;MPEG LA&lt;/a&gt; wouldn't start charging licensing fees later on. &lt;br&gt;
&lt;br&gt;
In that event, if HTML5 had supplanted Flash as the&lt;em&gt; de facto&lt;/em&gt; standard for video on the web, it would have meant that organizations and possibly even end users would have found themselves saddled with onerous fees after 2015.&lt;br&gt;
&lt;br&gt;
That theoretical stumbling block has disappeared. &lt;a href="http://www.businesswire.com/news/home/20100825006629/en"&gt;MPEG LA has announced that H.264 will be royalty-free forever&lt;/a&gt; so long as video encoded with the standard is free to end users. This means sites like &lt;a href="http://www.tuaw.com/tag/YouTube/"&gt;YouTube&lt;/a&gt; and &lt;a href="http://www.tuaw.com/tag/vimeo/"&gt;vimeo&lt;/a&gt; will never be charged licensing fees to serve video on the web; presumably, it also means that Apple will continue to pay licensing fees to &lt;em&gt;sell&lt;/em&gt; videos in the iTunes Store.&lt;br&gt;
&lt;br&gt;
Mozilla's &lt;a href="http://www.tuaw.com/tag/Firefox/"&gt;Firefox&lt;/a&gt; browser doesn't currently support HTML5 video&lt;em&gt; (via H.264, that is -Ed)&lt;/em&gt;; the uncertainty of H.264's licensing future meant Mozilla wanted to stick with Ogg Theora, a video codec Mozilla believed would be unencumbered by patenting issues. With MPEG LA's announcement that H.264 will be royalty-free in perpetuity, it's likely only a matter of time before Firefox joins &lt;a href="http://www.tuaw.com/tag/browsers/"&gt;browsers&lt;/a&gt; like Safari, Chrome, and Internet Explorer 9 in fully supporting HTML5.&lt;br&gt;
&lt;br&gt;
This is good news for almost everyone except &lt;a href="http://www.tuaw.com/tag/Adobe/"&gt;Adobe&lt;/a&gt;. Adobe's main argument against moving away from the current Flash-dominated web video landscape to one with a &lt;em&gt;truly&lt;/em&gt; open standard like HTML5 is now invalid. While Flash may continue to hold onto its grip on interactive web content, MPEG LA's announcement likely points to an end to Flash's dominance in video. This is also the last nail in the coffin for any possibility of Flash running in &lt;a href="http://www.tuaw.com/tag/iOS/"&gt;iOS&lt;/a&gt; -- with possibly the biggest obstacle to widespread implementation of HTML5 video now gone, there's zero incentive for Apple to hitch its wagon to Flash.&lt;br&gt;
&lt;br&gt;
[Via &lt;a href="http://www.macworld.com/article/153692/2010/08/h264_royalties.html"&gt;Macworld&lt;/a&gt;]&lt;p style="padding:5px;clear:both"&gt;&lt;a href="http://www.tuaw.com"&gt;TUAW&lt;/a&gt;&lt;a href="http://www.tuaw.com/2010/08/26/royalty-free-h-264-is-a-big-win-for-html5-big-loss-for-flash/"&gt;Royalty-free H.264 is a big win for HTML5, big loss for Flash&lt;/a&gt; originally appeared on &lt;a href="http://www.tuaw.com"&gt;The Unofficial Apple Weblog (TUAW)&lt;/a&gt; on Thu, 26 Aug 2010 17:00:00 EST.  Please see our &lt;a href="http://www.weblogsinc.com/feed-terms/"&gt;terms for use of feeds&lt;/a&gt;.&lt;br style="clear:both"&gt;&lt;/p&gt;&lt;h6 style="clear:both;padding:8px 0 0 0;height:2px;font-size:1px;border:0;margin:0;padding:0"&gt;&lt;/h6&gt;&lt;a href="http://www.businesswire.com/news/home/20100825006629/en"&gt;Read&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/26/royalty-free-h-264-is-a-big-win-for-html5-big-loss-for-flash/" rel="bookmark" title="Permanent link to this entry"&gt;Permalink&lt;/a&gt; | &lt;a href="http://www.tuaw.com/forward/19610055/" title="Send this entry to a friend via email"&gt;Email this&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/26/royalty-free-h-264-is-a-big-win-for-html5-big-loss-for-flash/#comments" title="View reader comments on this entry"&gt;Comments&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/DhRkX2H39y0" height="1" width="1"/&gt;</summary><author><name>Chris Rawson</name></author><gr:likingUser>09879977286868249236</gr:likingUser><gr:likingUser>13970200089567918680</gr:likingUser><gr:likingUser>05317909289313434376</gr:likingUser><gr:likingUser>07297826196533898229</gr:likingUser><gr:likingUser>16904164933583130653</gr:likingUser><gr:likingUser>00077655114863201915</gr:likingUser><gr:likingUser>13464076067335111270</gr:likingUser><gr:likingUser>06593423470560536277</gr:likingUser><gr:likingUser>10688568359842328869</gr:likingUser><gr:likingUser>00558288576970018204</gr:likingUser><gr:likingUser>17258945714522822358</gr:likingUser><gr:likingUser>13918250687054064926</gr:likingUser><gr:likingUser>18078788385534166172</gr:likingUser><gr:likingUser>12999466221181650263</gr:likingUser><gr:likingUser>11473795823410156073</gr:likingUser><gr:likingUser>01304192866078590713</gr:likingUser><gr:likingUser>15577853104657686900</gr:likingUser><gr:likingUser>17797470872703743739</gr:likingUser><gr:likingUser>11717127235764634241</gr:likingUser><gr:likingUser>02743156463624100082</gr:likingUser><gr:likingUser>03389214148075939320</gr:likingUser><gr:likingUser>08916477404294616862</gr:likingUser><gr:likingUser>01438547033781371805</gr:likingUser><gr:likingUser>08576775400394576407</gr:likingUser><gr:likingUser>03102290008275190344</gr:likingUser><gr:likingUser>01878570166266419226</gr:likingUser><gr:likingUser>02239118771675700618</gr:likingUser><gr:likingUser>07041600341616353553</gr:likingUser><gr:likingUser>08301633117495397810</gr:likingUser><gr:likingUser>00522468460421070544</gr:likingUser><gr:likingUser>17365284859316475862</gr:likingUser><gr:likingUser>07443207332129287958</gr:likingUser><gr:likingUser>18030950754366800924</gr:likingUser><gr:likingUser>07871536681644995356</gr:likingUser><gr:likingUser>13294278795000944738</gr:likingUser><gr:likingUser>02350398319518061027</gr:likingUser><gr:likingUser>04552849239561834250</gr:likingUser><gr:likingUser>00114650730030435074</gr:likingUser><gr:likingUser>08253704319884522939</gr:likingUser><gr:likingUser>14841898617494776087</gr:likingUser><gr:likingUser>15680401575965071160</gr:likingUser><gr:likingUser>17543291858960396508</gr:likingUser><gr:likingUser>15823834078269085582</gr:likingUser><gr:likingUser>01731010402652219984</gr:likingUser><gr:likingUser>01366967176937417655</gr:likingUser><gr:likingUser>11004326527092919380</gr:likingUser><gr:likingUser>18089206075325817796</gr:likingUser><gr:likingUser>14762268017091280083</gr:likingUser><gr:likingUser>12764546999737041402</gr:likingUser><gr:likingUser>14887622271136149902</gr:likingUser><gr:likingUser>18385338218504819643</gr:likingUser><gr:likingUser>11352884445869003338</gr:likingUser><gr:likingUser>01059345005528369405</gr:likingUser><gr:likingUser>17630666125872190453</gr:likingUser><gr:likingUser>00550093195112595630</gr:likingUser><gr:likingUser>03671014110232711503</gr:likingUser><gr:likingUser>01618785004445880428</gr:likingUser><gr:likingUser>18258071009055852624</gr:likingUser><gr:likingUser>12274421750558919465</gr:likingUser><gr:likingUser>09851724590493792240</gr:likingUser><gr:likingUser>14572429779016269119</gr:likingUser><gr:likingUser>01259818698699721128</gr:likingUser><gr:likingUser>17641540245086886518</gr:likingUser><gr:likingUser>11681933194487962264</gr:likingUser><gr:likingUser>01246701147085902272</gr:likingUser><gr:likingUser>00216507789322751218</gr:likingUser><gr:likingUser>15413825185026785096</gr:likingUser><gr:likingUser>02865389680826009348</gr:likingUser><gr:likingUser>13893668160003351759</gr:likingUser><gr:likingUser>04989674471145883065</gr:likingUser><gr:likingUser>06086375819206077586</gr:likingUser><gr:likingUser>08105108932559348925</gr:likingUser><gr:likingUser>17715806621902786721</gr:likingUser><gr:likingUser>12230699844648838828</gr:likingUser><gr:likingUser>10690317933094793566</gr:likingUser><gr:likingUser>07164225132584371953</gr:likingUser><gr:likingUser>04745689606790295503</gr:likingUser><gr:likingUser>10367286442388275699</gr:likingUser><gr:likingUser>11756036699012407653</gr:likingUser><gr:likingUser>01979204825137150476</gr:likingUser><gr:likingUser>09667804537197226183</gr:likingUser><gr:likingUser>12595254809576382805</gr:likingUser><gr:likingUser>14317102305247428957</gr:likingUser><gr:likingUser>14572441356732167317</gr:likingUser><gr:likingUser>12882788237014782724</gr:likingUser><gr:likingUser>17222068649933671481</gr:likingUser><gr:likingUser>16726343577148091963</gr:likingUser><gr:likingUser>07917999171265625049</gr:likingUser><gr:likingUser>03690708602548851881</gr:likingUser><gr:likingUser>13735520342772863379</gr:likingUser><gr:likingUser>10862289847901052769</gr:likingUser><gr:likingUser>08765865802501285042</gr:likingUser><gr:likingUser>12422188036362916428</gr:likingUser><gr:likingUser>00478753473143290266</gr:likingUser><gr:likingUser>10026091361185786433</gr:likingUser><gr:likingUser>01118369186798249417</gr:likingUser><gr:likingUser>01421175107696277451</gr:likingUser><gr:likingUser>04587748544218900048</gr:likingUser><gr:likingUser>11755394440652914939</gr:likingUser><gr:likingUser>05824506427401803145</gr:likingUser><source gr:stream-id="feed/http://www.tuaw.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.tuaw.com/rss.xml</id><title type="html">The Unofficial Apple Weblog (TUAW)</title><link rel="alternate" href="http://www.tuaw.com" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282766761128"><id gr:original-id="tag:blogger.com,1999:blog-3374372.post-1034555782246465764">tag:google.com,2005:reader/item/88a26d07aa82c588</id><category term="Metadata" scheme="http://www.blogger.com/atom/ns#" /><category term="RDF" scheme="http://www.blogger.com/atom/ns#" /><title type="html">British Library Catalog</title><published>2010-08-25T14:23:00Z</published><updated>2010-08-25T14:23:13Z</updated><link rel="alternate" href="http://catalogablog.blogspot.com/2010/08/british-library-catalog.html" type="text/html" /><link rel="replies" href="http://catalogablog.blogspot.com/feeds/1034555782246465764/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=3374372&amp;postID=1034555782246465764" title="0 Comments" type="text/html" /><content xml:base="http://catalogablog.blogspot.com/" type="html">&lt;span style="clear:right"&gt;&lt;a href="http://commons.wikipedia.org/wiki/File:THE_BRITISH_LIBRARY_LONDON_3_3_2010.JPG" rel="nofollow" style="clear:right;display:block;float:right;margin-left:1em;margin-right:1em"&gt;&lt;img alt="The British Library in London main building" height="225" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/THE_BRITISH_LIBRARY_LONDON_3_3_2010.JPG/300px-THE_BRITISH_LIBRARY_LONDON_3_3_2010.JPG" style="border:medium none;font-size:0.8em" width="300"&gt;&lt;/a&gt;&lt;span style="clear:both;float:right;margin-left:1em;margin-right:1em;width:300px"&gt;Image via &lt;a href="http://commons.wikipedia.org/wiki/File:THE_BRITISH_LIBRARY_LONDON_3_3_2010.JPG"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;The British Library has made their catalog &lt;a href="http://www.bl.uk/bibliographic/datafree.html"&gt;freely available for research&lt;/a&gt;.&lt;br&gt;&lt;blockquote&gt;As part of its work to open its metadata to wider use beyond the traditional library community, the British Library is making copies of its main catalogue and British National Bibliography datasets available for research purposes. Files are initially being made available in XML and structured in an RDF/DC format (see &lt;a href="http://www.bl.uk/bibliographic/rdfdcsample.xml"&gt;sample&lt;/a&gt;). Files are distributed under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License&lt;/a&gt;.&lt;br&gt;The British Library is currently investigating options for structuring its catalogue information as &lt;a href="http://en.wikipedia.org/wiki/Linked_Data"&gt;linked data&lt;/a&gt; and is collaborating with a number of organisations in examining the issues associated with making bibliographic metadata available in this way.&lt;/blockquote&gt;&lt;div&gt;&lt;h6 style="font-size:1em;margin:1em 0pt 0pt"&gt;Related article&lt;/h6&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.bl.uk/news/2010/pressrelease20100823a.html" rel="nofollow"&gt;British Library to share millions of catalogue records&lt;/a&gt; (bl.uk)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3374372-1034555782246465764?l=catalogablog.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/XHmuY8CrrLE" height="1" width="1"/&gt;</content><author><name>David</name></author><gr:likingUser>10437945416500349726</gr:likingUser><gr:likingUser>05450036834803312705</gr:likingUser><gr:likingUser>01056328811424835753</gr:likingUser><source gr:stream-id="feed/http://catalogablog.blogspot.com/rss/catalogablog.xml"><id>tag:google.com,2005:reader/feed/http://catalogablog.blogspot.com/rss/catalogablog.xml</id><title type="html">Catalogablog</title><link rel="alternate" href="http://catalogablog.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282766554745"><id gr:original-id="http://www.tuaw.com/2010/08/25/itunes-u-breaks-300-million-downloads/">tag:google.com,2005:reader/item/6275c719ccc2ed56</id><category term="b2s" /><category term="back to school" /><category term="BackToSchool" /><category term="downloads" /><category term="itunes store" /><category term="itunes u" /><category term="ItunesStore" /><category term="ItunesU" /><title type="html">iTunes U breaks 300 million downloads</title><published>2010-08-25T18:00:00Z</published><updated>2010-08-25T18:00:00Z</updated><link rel="alternate" href="http://www.tuaw.com/2010/08/25/itunes-u-breaks-300-million-downloads/" type="text/html" /><summary xml:base="http://www.tuaw.com/" type="html">&lt;p&gt;&lt;img vspace="8" hspace="8" border="1" align="right" alt="" src="http://www.blogcdn.com/www.tuaw.com/media/2010/08/screen-shot-2010-08-25-at-10.25.29-am.png"&gt;&lt;a href="http://www.apple.com/education/why-apple/#itunes-u"&gt;iTunes U&lt;/a&gt; lets students (or anyone, really) listen in on lectures, classes and other programs from the world's top educational institutions. In fact, more than 800 universities participate, and this week Apple &lt;a href="http://www.apple.com/pr/library/2010/08/24itunes.html"&gt;announced&lt;/a&gt; the delivery of 300 million iTunes U downloads.&lt;br&gt;
&lt;br&gt;
Students can use iTunes U to find lectures and other materials related to their studies, of course, but really anyone with an interest in continued education can browse the store's contents for audio or video that meets their areas of interest. For example, &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=385664533"&gt;here's a collection&lt;/a&gt; from the Stanford Historical Society, and &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=386483191"&gt;another&lt;/a&gt; from Japan's Keio University. All iTunes U content is free.&lt;br&gt;
&lt;br&gt;
Congratulations to Apple and the participating institutions.&lt;/p&gt;&lt;p style="padding:5px;clear:both"&gt;&lt;a href="http://www.tuaw.com"&gt;TUAW&lt;/a&gt;&lt;a href="http://www.tuaw.com/2010/08/25/itunes-u-breaks-300-million-downloads/"&gt;iTunes U breaks 300 million downloads&lt;/a&gt; originally appeared on &lt;a href="http://www.tuaw.com"&gt;The Unofficial Apple Weblog (TUAW)&lt;/a&gt; on Wed, 25 Aug 2010 13:00:00 EST.  Please see our &lt;a href="http://www.weblogsinc.com/feed-terms/"&gt;terms for use of feeds&lt;/a&gt;.&lt;br style="clear:both"&gt;&lt;/p&gt;&lt;h6 style="clear:both;padding:8px 0 0 0;height:2px;font-size:1px;border:0;margin:0;padding:0"&gt;&lt;/h6&gt;&lt;a href="http://www.apple.com/pr/library/2010/08/24itunes.html"&gt;Read&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/25/itunes-u-breaks-300-million-downloads/" rel="bookmark" title="Permanent link to this entry"&gt;Permalink&lt;/a&gt; | &lt;a href="http://www.tuaw.com/forward/19607511/" title="Send this entry to a friend via email"&gt;Email this&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/25/itunes-u-breaks-300-million-downloads/#comments" title="View reader comments on this entry"&gt;Comments&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/ak9ZAdscSFM" height="1" width="1"/&gt;</summary><author><name>Dave Caolo</name></author><gr:likingUser>02521387969137911343</gr:likingUser><gr:likingUser>01366967176937417655</gr:likingUser><gr:likingUser>06590123718657996201</gr:likingUser><gr:likingUser>01753941465894237300</gr:likingUser><gr:likingUser>15172028965385575720</gr:likingUser><gr:likingUser>12635965042132673380</gr:likingUser><gr:likingUser>16751498953556151006</gr:likingUser><source gr:stream-id="feed/http://www.tuaw.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.tuaw.com/rss.xml</id><title type="html">The Unofficial Apple Weblog (TUAW)</title><link rel="alternate" href="http://www.tuaw.com" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282637408226"><id gr:original-id="tag:blogger.com,1999:blog-7270245107819847044.post-4983704263899926777">tag:google.com,2005:reader/item/b1efc70b2cfa85f7</id><category term="USA" scheme="http://www.blogger.com/atom/ns#" /><title type="html">A commitment to openness via Data.gov Provides Access to A Wealth of Geospatial Data</title><published>2010-08-19T15:52:00Z</published><updated>2010-08-19T15:52:15Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/blogspot/hTUAL/~3/biGoYYiJGc0/commitment-to-openness-via-datagov.html" type="text/html" /><content xml:base="http://gisdata.blogspot.com/" type="html">&lt;p&gt;&lt;iframe src="http://feedads.g.doubleclick.net/~ah/f/isdm5k2vkvj268cmi2udnr4i9s/468/60#http%3A%2F%2Fgisdata.blogspot.com%2F2010%2F08%2Fcommitment-to-openness-via-datagov.html" width="100%" height="60" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"&gt;&lt;/iframe&gt;&lt;/p&gt;You may have heard about the   data.gov web portal - a resource from the Feds designed to  increase public access to high value, machine  readable datasets.  Data.gov increases the ability of the public to  easily find, download, and use datasets that are generated and typically held by  the Federal Government. Data.gov provides descriptions of the Federal datasets  (metadata), information about &lt;img src="http://feeds.feedburner.com/~r/blogspot/hTUAL/~4/biGoYYiJGc0" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/GQyZOqEcDq4" height="1" width="1"/&gt;</content><author><name>MobileGeo</name></author><source gr:stream-id="feed/http://gisdata.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://gisdata.blogspot.com/feeds/posts/default</id><title type="html">Free GIS Data &amp;amp; Imagery GeoBlog</title><link rel="alternate" href="http://gisdata.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282578393677"><id gr:original-id="tag:blogger.com,1999:blog-11300808.post-2867260912019582793">tag:google.com,2005:reader/item/f60290a4fab51478</id><category term="css3" scheme="http://www.blogger.com/atom/ns#" /><category term="gmail" scheme="http://www.blogger.com/atom/ns#" /><category term="ipad" scheme="http://www.blogger.com/atom/ns#" /><title type="html">CSS3 Transitions and Transforms in Gmail for the iPad</title><published>2010-08-18T22:30:00Z</published><updated>2010-08-18T22:31:11Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/zl84GEuL1ds/css3-transitions-and-transforms-in.html" type="text/html" /><link rel="replies" href="http://googlecode.blogspot.com/feeds/2867260912019582793/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="http://googlecode.blogspot.com/2010/08/css3-transitions-and-transforms-in.html#comment-form" title="0 Comments" type="text/html" /><content xml:base="http://googlecode.blogspot.com/" type="html">The Mobile Gmail team recently announced a new &lt;a href="http://googlemobile.blogspot.com/2010/08/iterative-web-app-new-stacked-cards.html"&gt;stacked cards interface&lt;/a&gt; for the iPad. In this interface we make use of CSS3 transitions and transforms to provide a more intuitive interface that has a look and feel that is similar to native applications. In this post we will describe CSS3 transitions and transforms and how they were used to develop this interface. All of the CSS and JavaScript examples currently work only in WebKit-based browsers, such as Safari on the iPad. However, Mozilla-based browsers have their own versions of WebKit-based extensions that use the ‘&lt;span&gt;-moz&lt;/span&gt;’ prefix, and that should behave similarly.&lt;br&gt;&lt;br&gt;&lt;b&gt;CSS3 Transitions&lt;/b&gt; &lt;br&gt;&lt;br&gt;&lt;a href="http://developer.apple.com/safari/library/documentation/internetweb/conceptual/safarivisualeffectsprogguide/Transitions/Transitions.html#//apple_ref/doc/uid/TP40008032-CH4-SW1"&gt;CSS3 transitions&lt;/a&gt; allow the browser to animate the change of a CSS property from an initial value to a final value. A transition is configured by setting four CSS properties on an HTML element:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;-webkit-transition-property&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;-webkit-transition-duration&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;-webkit-transition-timing-&lt;wbr&gt;function&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;-webkit-transition-delay&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;code&gt;-webkit-transition-property&lt;/code&gt; property identifies the CSS properties where changes to the property will trigger a transition between the old value of the property and the new value. The &lt;code&gt;-webkit-transition-duration&lt;/code&gt; property specifies, in milliseconds, the length of time over which the transition should take place. The &lt;code&gt;-webkit-transition-timing-&lt;wbr&gt;function&lt;/code&gt; property describes the speed at which the transition progresses over the duration of the transition. For example, &lt;code&gt;-webkit-transition-timing-&lt;wbr&gt;function: ease-in-out&lt;/code&gt; describes a transition that will proceed slowly at the beginning and the end of the transition, but that will proceed quickly during the middle of the transition. You can also provide a custom, cubic-bezier function for a higher degree of control over the timing. The &lt;span&gt;-webkit-transition-delay&lt;/span&gt; property specifies a delay, measured in milliseconds, before the transition begins. &lt;br&gt; &lt;br&gt;The transition properties can also be set simultaneously using the &lt;code&gt;-webkit-transition&lt;/code&gt; property, by simply specifying them in the above order. Once the transitions properties are set and up to the point where the value of &lt;code&gt;-webkit-transition-property&lt;/code&gt; is changed, all modifications of the specified CSS properties will trigger transitions.&lt;br&gt;&lt;br&gt;&lt;b&gt;CSS3 Transforms&lt;/b&gt; &lt;br&gt;&lt;br&gt;&lt;a href="http://developer.apple.com/safari/library/documentation/internetweb/conceptual/safarivisualeffectsprogguide/Transforms/Transforms.html#//apple_ref/doc/uid/TP40008032-CH5-SW1"&gt;CSS3 transforms&lt;/a&gt; allow the rendering of an HTML element to be modified using 2D and 3D transformations such as rotation, scaling, and translations. Transforms are applied by setting the &lt;code&gt;-webkit-transform&lt;/code&gt; CSS property with the desired list of transforms. Each transform takes the form of a transformation function, such as &lt;code&gt;translate3d&lt;/code&gt; or &lt;code&gt;rotate&lt;/code&gt;, and a list of parameters enclosed in brackets. For example, to move an object to the right by 100 pixels and rotate it by 45 degrees you can use the &lt;code&gt;-webkit-transform&lt;/code&gt; property:&lt;br&gt;&lt;br&gt;&lt;code&gt;-webkit-transform: translate(100px, 0) rotate(45deg);&lt;/code&gt; &lt;br&gt;&lt;br&gt;Using &lt;code&gt;-webkit-transform&lt;/code&gt; as the transition property when moving an element is advantageous relative to using the standard &lt;code&gt;top&lt;/code&gt; and &lt;code&gt;left&lt;/code&gt; properties because transitions using &lt;code&gt;-webkit-transform&lt;/code&gt; are hardware-accelerated in Safari. An exception here is that it seems that 2D translations are &lt;a href="http://mir.aculo.us/2010/06/04/making-an-ipad-html5-app-making-it-really-fast/"&gt;not hardware-accelerated&lt;/a&gt;. But, since any 2D translation is equivalent to a corresponding 3D translation with the same translations in the x and y and no translation in the z axis, it is easy to use a hardware accelerated &lt;span&gt;translate3d(x, y, 0)&lt;/span&gt; transform instead of a non-hardware accelerated &lt;code&gt;translate(x, y)&lt;/code&gt; transform.&lt;br&gt;&lt;br&gt;&lt;b&gt;Terminology&lt;/b&gt; &lt;br&gt;&lt;br&gt;There are a few terms here that begin with ‘trans,’ and they can easily be confused if you are not familiar with them. Here they are again:&lt;br&gt;&lt;ul&gt; &lt;li&gt;Transition: An implicit animation of CSS properties between an initial and a final value.&lt;/li&gt;&lt;li&gt;Transform: A modification to the appearance of an HTML element by manipulating it in a 2D or 3D space.&lt;/li&gt;&lt;li&gt;Translation: A particular type of transformation that moves the HTML element in 2D or 3D space.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Stacked Cards Interface&lt;/b&gt; &lt;br&gt;&lt;br&gt;In the stacked cards interface, cards representing selected conversations transition onto the screen when their corresponding conversation is selected, and transition off of the screen when it is deselected.&lt;br&gt;&lt;br&gt;When cards are selected, they are transitioned out from underneath the conversation list on the left side of the application into the selected conversation area on the right side of the application. To move the card onto the screen, we set an initial transform, configure the transition, and finally apply the desired final transform to the element.&lt;br&gt;&lt;br&gt;To simplify the layout, the un-transformed position of each card is its normal position in the selected conversation area. This allows the card to have no translation applied when in this position, although it will need a translation to animate the movement. Initially the card has a transform that translates it to the left. The z-index property is used to ensure that the card will render underneath the conversation list. The rotation of the card is also initially applied, since we chose not to have the card rotate as it transitions onto the screen.&lt;br&gt;&lt;br&gt;&lt;code&gt;card.style.WebkitTransform =&lt;/code&gt;&lt;br&gt;&lt;code&gt;  ‘translate3d(-700px, 0, 0) rotate(5deg)’;&lt;/code&gt; &lt;br&gt;&lt;br&gt;Since the particular translation and rotation can vary, we chose to apply this property using JavaScript rather than including it in the CSS class applied to the card. It is important that the CSS3 transition is not yet applied because we do not want this transform to be a transition. Moreover, it is important that the card is rendered at its initial transform before the transition is configured and the destination transform is applied. This is easily achieved by wrapping these next steps in a call to &lt;span&gt;window.setTimeout&lt;/span&gt; with a timeout of 0 ms.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;pre&gt;window.setTimeout(function() {&lt;br&gt;  card.style.WebkitTransition =&lt;br&gt;    ‘-webkit-transform 300ms ease-in-out’;&lt;br&gt;  card.style.WebkitTransform = &lt;br&gt;    ‘translate3d(0, 0, 0) rotate(5deg)’; &lt;br&gt;}, 0);&lt;/pre&gt;&lt;/code&gt; &lt;br&gt;&lt;b&gt;Completion of the Transition&lt;/b&gt; &lt;br&gt;&lt;br&gt;It is useful to know when the transition is complete. In the stacked cards interface, we use this to improve performance by setting &lt;span&gt;display:none&lt;/span&gt; on obscured cards so that they do not need to be rendered. Adding an event listener allows the application to be notified when the transition has completed.&lt;br&gt;&lt;br&gt;&lt;code&gt;element.addEventListener(‘&lt;wbr&gt;webkitTransitionEnd’, listener, false);&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Interrupting a Transition&lt;/b&gt; &lt;br&gt;&lt;br&gt;In some cases, you may want to change a transition while it is in progress. For example, if the user unselected a conversation while the corresponding card was still animating onto the screen, we might apply a new transition to send the card back off of the screen again. When you apply a new CSS value while a transition is already in progress, a new transition will occur between the current value of the property in the transition and the new value that you apply. For example, suppose a card is halfway through it’s transition onto the screen, and we apply this CSS transform:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;pre&gt;card.style.WebkitTransform = &lt;br&gt;   ‘translate3d(-700px, 0, 0) rotate(5deg)’;&lt;/pre&gt;&lt;/code&gt; &lt;br&gt;Since the transition properties are still configured, a new transition will occur. The initial value for the transition will be the halfway point - approximately &lt;code&gt;translated3d(-350px, 0, 0)  rotate(5deg).&lt;/code&gt; The final value will be &lt;code&gt;translate3d(-700px, 0, 0) rotate(5deg).&lt;/code&gt; The full duration of the transition will still apply, so the card will move about half as quickly as it usually does. It is possible to determine the current transform applied to an HTML element using the &lt;a href="http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/doc/uid/TP40009363"&gt;WebKitCSSMatrix&lt;/a&gt; and to use this to recalculate more appropriate transition parameters, but this is outside the scope of this post. &lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion&lt;/b&gt; &lt;br&gt;I hope that this introduction to CSS3 transitions and transforms has been useful, and that the insight into the implementation of Mobile Gmail on the iPad has been interesting. Based on positive feedback, the Mobile Gmail team is looking forward to making more use of transitions and transforms in the future.&lt;br&gt;&lt;br&gt;&lt;span style="font-style:italic"&gt;By Liam Asher Segel-Brown, Software Engineering Intern, Google Mobile&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/11300808-2867260912019582793?l=googlecode.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=zl84GEuL1ds:wFy-hecE4Og:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=zl84GEuL1ds:wFy-hecE4Og:-BTjWOF_DHI" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=zl84GEuL1ds:wFy-hecE4Og:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=zl84GEuL1ds:wFy-hecE4Og:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=zl84GEuL1ds:wFy-hecE4Og:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/zl84GEuL1ds" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/YRkeNiPBQXU" height="1" width="1"/&gt;</content><author><name>Mike Marchak</name></author><gr:likingUser>08466607206752283112</gr:likingUser><gr:likingUser>03771663700121880502</gr:likingUser><gr:likingUser>01650761658069285380</gr:likingUser><gr:likingUser>14106121256890804583</gr:likingUser><gr:likingUser>04310376626742107013</gr:likingUser><gr:likingUser>05470206498773698461</gr:likingUser><gr:likingUser>13358692483422882409</gr:likingUser><gr:likingUser>13842752167963415069</gr:likingUser><gr:likingUser>12274421750558919465</gr:likingUser><gr:likingUser>12883247801568252000</gr:likingUser><gr:likingUser>01372244051781619304</gr:likingUser><gr:likingUser>06808080314659895071</gr:likingUser><gr:likingUser>14575029411551323212</gr:likingUser><gr:likingUser>03804353747040046886</gr:likingUser><gr:likingUser>03138418283946503285</gr:likingUser><gr:likingUser>00320933387269203904</gr:likingUser><source gr:stream-id="feed/http://code.google.com/feeds/updates.xml"><id>tag:google.com,2005:reader/feed/http://code.google.com/feeds/updates.xml</id><title type="html">Google Code Blog</title><link rel="alternate" href="http://googlecode.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282578295567"><id gr:original-id="tag:blogger.com,1999:blog-11300808.post-7840321334333163714">tag:google.com,2005:reader/item/2a67ab0e5d3cd1e0</id><category term="chrome web store" scheme="http://www.blogger.com/atom/ns#" /><title type="html">A developer preview for the Chrome Web Store</title><published>2010-08-19T18:15:00Z</published><updated>2010-08-19T18:16:10Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/Bt5x5dOgzVU/developer-preview-for-chrome-web-store.html" type="text/html" /><link rel="replies" href="http://googlecode.blogspot.com/feeds/7840321334333163714/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="http://googlecode.blogspot.com/2010/08/developer-preview-for-chrome-web-store.html#comment-form" title="1 Comments" type="text/html" /><content xml:base="http://googlecode.blogspot.com/" type="html">Today, &lt;a href="http://blog.chromium.org/2010/08/get-your-apps-ready-for-chrome-web.html"&gt;we released&lt;/a&gt; a developer preview of the Chrome Web Store.  Besides &lt;a href="http://code.google.com/chrome/apps/"&gt;brand&lt;/a&gt; &lt;a href="http://code.google.com/chrome/webstore/docs/check_for_payment.html"&gt;new&lt;/a&gt; &lt;a href="http://code.google.com/chrome/webstore/docs/identify_user.html"&gt;documentation&lt;/a&gt;, we now allow developers to upload their apps using the developer registration flow of the &lt;a href="https://chrome.google.com/extensions/developer/dashboard"&gt;Google Chrome Extensions Gallery&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;embed src="http://www.youtube.com/p/D7F2F8A75CD5CB48?hl=en_US&amp;amp;fs=1" width="480" height="385" allowScriptAccess="never" allowFullScreen="true" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br&gt;&lt;br&gt;The Chrome Web Store will be launching later this year. In the meantime, we’ll continue to share news on apps and the store through blog posts on the &lt;a href="http://blog.chromium.org/"&gt;Chromium&lt;/a&gt; and &lt;a href="http://googlecode.blogspot.com/"&gt;Google Code&lt;/a&gt; blogs. We also encourage you to join our &lt;a href="https://groups.google.com/a/chromium.org/group/chromium-apps/topics"&gt;discussion group for apps&lt;/a&gt; for updates on our efforts.&lt;br&gt;&lt;br&gt;&lt;span style="font-style:italic"&gt;By Rahul Roy-chowdhury, Google Chrome Team&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/11300808-7840321334333163714?l=googlecode.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Bt5x5dOgzVU:VO5ZKCH15cI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=Bt5x5dOgzVU:VO5ZKCH15cI:-BTjWOF_DHI" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Bt5x5dOgzVU:VO5ZKCH15cI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=Bt5x5dOgzVU:VO5ZKCH15cI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=Bt5x5dOgzVU:VO5ZKCH15cI:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/Bt5x5dOgzVU" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/8KCTNrWZbzY" height="1" width="1"/&gt;</content><author><name>Mike Marchak</name></author><gr:likingUser>00643130961239890258</gr:likingUser><gr:likingUser>00557665994966543407</gr:likingUser><gr:likingUser>14106121256890804583</gr:likingUser><gr:likingUser>05470206498773698461</gr:likingUser><gr:likingUser>13812664590865112349</gr:likingUser><gr:likingUser>10671741051433758229</gr:likingUser><gr:likingUser>03679067110376712551</gr:likingUser><gr:likingUser>09165208222713787019</gr:likingUser><gr:likingUser>02105874091854083487</gr:likingUser><gr:likingUser>01169615075381819584</gr:likingUser><gr:likingUser>16726343577148091963</gr:likingUser><gr:likingUser>13763064597990413873</gr:likingUser><gr:likingUser>06171124970332271246</gr:likingUser><gr:likingUser>08180880758513633341</gr:likingUser><gr:likingUser>03088541684654832793</gr:likingUser><gr:likingUser>17615297883156763703</gr:likingUser><gr:likingUser>14575029411551323212</gr:likingUser><gr:likingUser>02647982166549202037</gr:likingUser><gr:likingUser>16500897162056430000</gr:likingUser><gr:likingUser>04590721091264207171</gr:likingUser><gr:likingUser>02699524761967876288</gr:likingUser><gr:likingUser>03070789234688006213</gr:likingUser><gr:likingUser>03573529146980714171</gr:likingUser><gr:likingUser>01382794057113384822</gr:likingUser><gr:likingUser>00320933387269203904</gr:likingUser><gr:likingUser>06345339569430450442</gr:likingUser><source gr:stream-id="feed/http://code.google.com/feeds/updates.xml"><id>tag:google.com,2005:reader/feed/http://code.google.com/feeds/updates.xml</id><title type="html">Google Code Blog</title><link rel="alternate" href="http://googlecode.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282572649874"><id gr:original-id="tag:sgillies.net,2010-08-23:/blog/1044/browsing-spatially-referenced-djatoka-images-with-openlayers">tag:google.com,2005:reader/item/f346bad2e5a0477c</id><title type="html">Browsing spatially referenced Djatoka images with OpenLayers</title><published>2010-08-23T12:49:14Z</published><updated>2010-08-23T12:49:14Z</updated><link rel="alternate" href="http://sgillies.net/blog/1044/browsing-spatially-referenced-djatoka-images-with-openlayers/" type="text/html" /><content xml:base="http://planet.osgeo.org/" type="html">&lt;div&gt;&lt;p&gt;A while back my colleague Hugh Cayless wrote a &lt;a href="http://sourceforge.net/apps/mediawiki/djatoka/index.php?title=Main_Page"&gt;Djatoka&lt;/a&gt; layer &lt;a href="http://philomousos.blogspot.com/2008/12/openlayers-and-djatoka.html"&gt;for use
with OpenLayers&lt;/a&gt;. It is deployed at UNC&amp;#39;s library, allowing you to view over
3000 &lt;a href="http://www.lib.unc.edu/dc/ncmaps/"&gt;North Carolina Maps&lt;/a&gt;. View the source on any map and you&amp;#39;ll quickly get
a sense of how it&amp;#39;s rigged up. You pass a URL encoding requests for image
regions and a URL encoding requests for image metadata to the OpenURL layer
constructor, it figures out the grid and zoom levels for you, and you add the
layer to a map that&amp;#39;s configured using the layer&amp;#39;s resolution, maximum extent,
and tile size parameters. It works much like a TMS layer, but in pixel units.&lt;/p&gt;
&lt;p&gt;I began with this code for a different project and modified it to satisfy some
of my project&amp;#39;s special needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The imagery of a physical object and its annotations will be shown in their
natural units – centimeters.&lt;/li&gt;
&lt;li&gt;Square tiles will be used instead of rectangular tiles with the same aspect
ratio as the physical object (approximately 13:1).&lt;/li&gt;
&lt;li&gt;Browser and image server are in different domains, complicating discovery
of image metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I decided to go with Djatoka instead of an open source GIS map server like
GeoServer or MapServer because the project, while spatial in nature, doesn&amp;#39;t
require cartographic projections or spatial indexing; I was interested in
trying something new; and NYU&amp;#39;s already got one running (Thanks, Hugh!). I
ended up modifying Hugh and Cliff&amp;#39;s &lt;a href="http://github.com/hcayless/djatoka-openlayers-image-viewer/blob/master/lib/OpenLayers/Layer/OpenURL.js"&gt;OpenURL.js&lt;/a&gt; considerably. Now, it&amp;#39;s more
like a hybrid between OpenLayers.Layer.Image and OpenLayers.Layer.WMS. The code
is at &lt;a href="http://github.com/sgillies/tpeutb/blob/master/OpenURL.js"&gt;http://github.com/sgillies/tpeutb/blob/master/OpenURL.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unlike a GIS map
server, Djatoka doesn&amp;#39;t pad requests: it fails if you ask for regions outside
the image. To have square pixels, I&amp;#39;ve had to pad my imagery a bit. It&amp;#39;s now 43008 pixels wide by 3072 pixels high, exactly 14:1. This
makes the right tile size 192 x 192 pixels. As things stand, my new OpenURL
layer can&amp;#39;t be used in the same map as Hugh&amp;#39;s, so I haven&amp;#39;t bothered to rename
it yet. It&amp;#39;s used like this:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;var&lt;/span&gt; &lt;span&gt;RES&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;60.3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt; &lt;span&gt;// Centimeters per pixel&lt;/span&gt;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;size&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Size&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;43008&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;3072&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;origin&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LonLat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;16.6222&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;-&lt;/span&gt;&lt;span&gt;1.2174&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;extent&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Bounds&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;
    &lt;span&gt;origin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lon&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;origin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lat&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;origin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lon&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;size&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;origin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lat&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;size&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;

&lt;span&gt;// Zoom factors of 1/8 to 4&lt;/span&gt;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;resolutions&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;8.0&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;4.0&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;2.0&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;0.25&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;RES&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;

&lt;span&gt;// At zoom level 0, the image is covered by 2 x 28 tiles&lt;/span&gt;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;tileSize&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Size&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;192&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;192&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;

&lt;span&gt;var&lt;/span&gt; &lt;span&gt;mosaic&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Layer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;OpenURL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;
  &lt;span&gt;&amp;#39;All section, mosaicked&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
  &lt;span&gt;&amp;#39;http://dl-img.home.nyu.edu/&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
  &lt;span&gt;&amp;#39;http://pipsqueak.atlantides.org/mosaic.tif&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;// for example, 404 in reality&lt;/span&gt;
  &lt;span&gt;extent&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
  &lt;span&gt;size&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
  &lt;span&gt;{&lt;/span&gt; &lt;span&gt;format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&amp;#39;image/jpeg&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;units&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&amp;#39;cm&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;tileSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;tileSize&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;resolutions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;resolutions&lt;/span&gt; &lt;span&gt;}&lt;/span&gt;
  &lt;span&gt;);&lt;/span&gt;

&lt;span&gt;var&lt;/span&gt; &lt;span&gt;map&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; &lt;span&gt;OpenLayers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;
  &lt;span&gt;&amp;#39;map&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
  &lt;span&gt;{&lt;/span&gt; &lt;span&gt;units&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&amp;#39;cm&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;tileSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;tileSize&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;resolutions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;resolutions&lt;/span&gt; &lt;span&gt;}&lt;/span&gt;
  &lt;span&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A very simple application of this layer can be seen at &lt;a href="http://pipsqueak.atlantides.org/tpeutv/djatoka.html"&gt;http://pipsqueak.atlantides.org/tpeutv/djatoka.html&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/wE9V_9BGzsw" height="1" width="1"/&gt;</content><author><name>Sean Gillies</name></author><source gr:stream-id="feed/http://planet.osgeo.org/atom.xml"><id>tag:google.com,2005:reader/feed/http://planet.osgeo.org/atom.xml</id><title type="html">Planet OSGeo</title><link rel="alternate" href="http://planet.osgeo.org" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282548179427"><id gr:original-id="http://mike.teczno.com/notes/tilestache">tag:google.com,2005:reader/item/eb1bc763e1c648e7</id><title type="html">presenting tilestache</title><published>2010-08-17T17:21:47Z</published><updated>2010-08-17T17:21:47Z</updated><link rel="alternate" href="http://mike.teczno.com/notes/tilestache.html" type="text/html" /><content xml:base="http://mike.teczno.com/notes/" type="html">&lt;p&gt;Named in the spirit of the pun-driven life, &lt;strong&gt;&lt;a href="http://tilestache.org/"&gt;TileStache&lt;/a&gt;&lt;/strong&gt; is a response to a few years of working with tile-based map geographic data and cartography, and an answer to certain limitations I've encountered in MetaCarta's venerable &lt;a href="http://tilecache.org"&gt;TileCache&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;The edges I've bumped into might be esoteric, but I think they're also indicative of our many experiments in tile-based web mapping since 2007. The core functional needs of a tiling system are well handled by existing software: imagery from bitmap sources of aerial and scanned imagery, Mapnik renderings of OpenStreetMap data, and caches of remote WMS tiles. None of this is really the core point of TileStache, though it's all certainly table stakes. &lt;/p&gt;&lt;p&gt;The place where I've found a need for a new project is somewhere in the intersection between synthetic imagery, composites of existing imagery, and delivery of raw vector data to browsers. More and more we're dealing with the &lt;a href="http://prettymaps.stamen.com/201008/about/"&gt;expressive possibilities of new web cartography in project like Pretty Maps&lt;/a&gt;, and TileStache is a possible approach to data publishing that borrows a lot of the simplicity of TileCache while adding a dose of designed-in extensibility for creating new kinds of maps. &lt;/p&gt;&lt;p&gt;&lt;a href="http://prettymaps.stamen.com/201008/#13.00/37.8124/-122.3287"&gt;&lt;img src="http://mike.teczno.com/img/prettymaps.jpg" border="1" alt=""&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Isotiles&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;After developing &lt;a href="http://stamen.com/clients/mysociety"&gt;Travel Time Maps&lt;/a&gt; with MySociety in 2008, we adapted our bitmap data imagery technique to tiled delivery. The follow-on &lt;a href="http://mapumental.channel4.com/"&gt;Mapumental&lt;/a&gt; project hypothetically covers the entirety of the UK with dynamic, temporal data. &lt;/p&gt;&lt;p&gt;Here's a screenshot from one of the early demos, showing travel times around a city, lit up over the coastline: &lt;/p&gt;&lt;p&gt;&lt;img src="http://mike.teczno.com/img/mapumental-isochrones.png" border="1" alt=""&gt; &lt;/p&gt;&lt;p&gt;It's not animated (check the &lt;a href="http://mapumental.channel4.com/"&gt;Channel4 site&lt;/a&gt; for a video of Mapumental), but this is one of the constituent map tiles underlying the image: &lt;/p&gt;&lt;p&gt;&lt;img src="http://mike.teczno.com/img/mapumental-isotile.png" border="1" alt=""&gt; &lt;/p&gt;&lt;p&gt;Each pixel in this tile is a 24-bit value encoded in the red, green, and blue channels, expressing a time and speedily decoded by the Flash application in the browser. This part of the project is driven by a custom Layer class in TileCache, that pulls pre-computed time points (e.g. transit stations) from a database and renders cones around them. &lt;a href="https://secure.mysociety.org/cvstrac/dir?d=mysociety/iso/tiles"&gt;Some of the code&lt;/a&gt; might be findable in MySociety's source repository. &lt;/p&gt;&lt;p&gt;What's interesting here is the idea of completely synthetic providers, i.e. those not directly based on GDAL sources, Mapnik renderings, or WMS servers. It's something I'm demonstrating in the &lt;a href="http://tilestache.org/doc/TileStache.Goodies.Providers.Grid.html"&gt;TileStache Grid provider&lt;/a&gt;, an implementation of the UTM grid (U.S. National Grid and Military Grid Reference System) for overlay onto other spherical mercator maps. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Composites&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Lars Ahlzen's &lt;a href="http://wiki.openstreetmap.org/wiki/TopOSM"&gt;TopOSM&lt;/a&gt; is a longtime rendering project based on OpenStreetMap data and cartography built from constituent pieces of Mapnik. TopOSM combines renderings of streets, hills, and labels to create a beautiful, dimensional result: &lt;/p&gt;&lt;p&gt;&lt;img src="http://mike.teczno.com/img/toposm-yosemite.jpg" border="1" alt=""&gt; &lt;/p&gt;&lt;p&gt;Lars builds the final map up from a stack of images, many of which might themselves be expressed as tile layers: &lt;/p&gt;&lt;p&gt;&lt;img src="http://mike.teczno.com/img/toposm-flow.jpg" border="1" alt=""&gt; &lt;/p&gt;&lt;p&gt;In attempting to build a new Layer class for Tile&lt;em&gt;Cache&lt;/em&gt; that expresses this idea, I found that it seemed to be impossible to access the full configuration of the system from within a given layer. There was no way to create a derived map sandwich, and I knew that Lars's own method was a homebrew of ImageMagick and similar tools. I'm interested in something a bit more systematic that implements something like Photoshop layers for cartography. The &lt;a href="http://tilestache.org/doc/TileStache.Goodies.Providers.Composite.html"&gt;current Composite provider&lt;/a&gt; in Tile&lt;em&gt;Stache&lt;/em&gt; provides layers, alpha channels, color fills and masks, and I'd like to implement transfer modes (e.g. Photoshop's &lt;em&gt;hard light&lt;/em&gt;) if this sample proves to be interesting. &lt;/p&gt;&lt;p&gt;We've delivered this sort of composite cartography to clients in the past, but always through a combination of spit and chewing gum. &lt;/p&gt;&lt;p&gt;&lt;a href="http://stamen.com/clients/locog_maps"&gt;&lt;img src="http://mike.teczno.com/img/locog-composite.jpg" border="1" alt=""&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;GeoJSON Data&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Most recently, we've been developing &lt;a href="http://github.com/simplegeo/polymaps"&gt;Polymaps, an SVG-based map engine&lt;/a&gt; that can show regular image tiles in combination with vector overlays driven by GeoJSON data. Tiles turn out to be just as helpful for publishing and requesting vector data as they are for pixel-based images. We've modified TileCache to support this use in the past, but there are simply too many places where the code assumes pixel-based images for the exercise to be anything but frustrating. TileStache is designed to accommodate data-only tiles, including an &lt;a href="http://tilestache.org/doc/TileStache.Goodies.Providers.PostGeoJSON.html"&gt;example PostGeoJSON provider that converts PostGIS data to GeoJSON&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;As the ability of browsers to interpret and display a wider variety of imagery improves, we're going to see this data tile concept become increasingly useful. Why stop at image tiles, when you might want to render roads that can be rolled-over or clicked directly? Why assume dynamic data services, when TMS-style tile URLs (e.g. &lt;a href="http://tile.openstreetmap.org/12/656/1582.png"&gt;*/12/656/1582.png&lt;/a&gt;) can be hosted from &lt;a href="https://s3.amazonaws.com/"&gt;simple storage services&lt;/a&gt; or plain filesystems? &lt;/p&gt;&lt;p&gt;Anyway. &lt;/p&gt;&lt;p&gt;It's early days, but we're finding that the limitations around in-browser display of layers and data are increasingly down to the display of SVG or Canvas rather than any particular native slowness in Javascript itself, so we're thinking that our &lt;a href="http://prettymaps.stamen.com/201008/about/"&gt;still-fairly-intensive experimental demos&lt;/a&gt; getting a few kinds words from friends like &lt;a href="http://flowingdata.com/2010/08/16/stamen-makes-experimental-prettymaps/"&gt;Nathan&lt;/a&gt;, &lt;a href="http://www.fastcodesign.com/1662124/data-viz-whiz-kids-launch-stunning-map-experiment"&gt;Alyssa&lt;/a&gt;, and &lt;a href="http://twitter.com/jenbee/status/21239881625"&gt;Jen&lt;/a&gt; will calmly scroll into the window of normalcy within the next year or so. We also know that other developers are thinking about some of the same concerns that the motivating goodies above address. For example, &lt;a href="http://dbsgeo.com/"&gt;Dane&lt;/a&gt; tells me that the current bleeding edge of the map-rendering library &lt;a href="http://mapnik.org/"&gt;Mapnik&lt;/a&gt;  includes basic image compositing, masking, and GeoJSON output right there in the core. &lt;/p&gt;&lt;p&gt;Really what we're looking at is a future filled with work like Brett Camper's amazing &lt;a href="http://8bitcity.com/map"&gt;8-Bit Cities&lt;/a&gt;, "an attempt to make the city feel foreign yet familiar ... to evoke the same urge for exploration, abstract sense of scale, and perhaps most importantly unbounded excitement." &lt;/p&gt;&lt;p&gt;What are the tools that help make this possible? &lt;/p&gt;&lt;p&gt;&lt;a href="http://tilestache.org/"&gt;Get TileStache&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://8bitcity.com/map"&gt;&lt;img src="http://mike.teczno.com/img/8bit-nyc.png" border="1" alt=""&gt;&lt;/a&gt; &lt;/p&gt;        &lt;p&gt;
            &lt;a href="http://mike.teczno.com/notes/tilestache.html#comments"&gt;Comments&lt;/a&gt;
                    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/HDB5zMsU9Fo" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>17256335611292746096</gr:likingUser><gr:likingUser>15754073229024257363</gr:likingUser><source gr:stream-id="feed/http://mike.teczno.com/notes/index.xml"><id>tag:google.com,2005:reader/feed/http://mike.teczno.com/notes/index.xml</id><title type="html">tecznotes</title><link rel="alternate" href="http://mike.teczno.com/notes/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282548155768"><id gr:original-id="http://mike.teczno.com/notes/release-often">tag:google.com,2005:reader/item/f27b2018491e5195</id><title type="html">release often</title><published>2010-08-21T18:42:25Z</published><updated>2010-08-21T18:42:25Z</updated><link rel="alternate" href="http://mike.teczno.com/notes/release-often.html" type="text/html" /><content xml:base="http://mike.teczno.com/notes/" type="html">&lt;p&gt;A few code-like things I've been working on lately. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Polymaps&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Polymaps is a result of our &lt;a href="http://blog.simplegeo.com/post/983045400/announcing-polymaps"&gt;summerlong collaboration with SimpleGeo&lt;/a&gt;. We've been &lt;a href="http://github.com/simplegeo/polymaps"&gt;working on it for some time&lt;/a&gt;, but yesterday we announced it for realsies and saw an amazing response from &lt;a href="http://radar.oreilly.com/2010/08/opensource-and-javascript-poly.html"&gt;all over&lt;/a&gt; &lt;a href="http://flowingdata.com/2010/08/20/design-advanced-online-and-interactive-maps-with-polymaps/"&gt;the internet&lt;/a&gt;. This one's been doubly rewarding for us, since it's also the result of a summerlong collaboration with &lt;a href="http://graphics.stanford.edu/~mbostock/"&gt;Mike Bostock&lt;/a&gt; of &lt;a href="http://vis.stanford.edu/protovis/"&gt;Protovis fame&lt;/a&gt;. Mike's been on our radar since he showed off Protovis when &lt;a href="http://www.tom-carden.co.uk/"&gt;Tom&lt;/a&gt; and I visited Stanford a while back. It was a week-old at the time and already full of promise. This Javascript thing, &lt;a href="http://mike.teczno.com/notes/canvas-warp.html"&gt;I think it will go far&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://polymaps.org"&gt;&lt;img src="http://mike.teczno.com/img/polymaps-examples.jpg" border="1" alt=""&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Census Tools&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://mike.teczno.com/notes/census-tools.html"&gt;Census Tools&lt;/a&gt; is a small thing I put together last week, to extract data from the 2000 U.S. Census by subject and geography. I've just added the ludicrously detailed &lt;a href="http://census-tools.teczno.com/SF3-p062-84-subject-locator.pdf"&gt;Summary File 3&lt;/a&gt; with loads of information on housing, commutes, and other topics. Also, &lt;a href="http://github.com/shawnbot"&gt;Shawn&lt;/a&gt; added &lt;a href="http://github.com/migurski/census-tools/blob/master/text2geojson.py"&gt;a second script, text2geojson.py&lt;/a&gt;, which converts the textual output of census2text.py into neatly-formed &lt;a href="http://geojson.org"&gt;GeoJSON&lt;/a&gt;. This makes it trivially compatible with PolyMaps! &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Walking Papers&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Walking Papers gained two new translations recently. &lt;a href="http://github.com/simgislab"&gt;Maxim Dubinin&lt;/a&gt; provided a complete version of the site in Russian, while &lt;a href="http://github.com/knarf-se"&gt;Frank Eriksson&lt;/a&gt; has been working on it in Swedish. This will bring our total number of languages to ten, and it's a fascinating case study in the power of using Git (and Github) for open source projects. Generally speaking, most of the translators haven't had to ask for permission or even informed me of their work until they were basically done. A staging site and a few &lt;em&gt;git pulls&lt;/em&gt; later and we've got a new translation! &lt;/p&gt;&lt;p&gt;Maxim who did the Russian version was the first person to translate the title of the project in addition to the text content. He said they had a pretty good pun going as well: &lt;/p&gt;&lt;blockquote&gt;Well, as I recall, "walking papers" are docs you're getting when you're fired, right? Turns out "Обходной лист" is exactly the same thing in russian - a piece of paper ("лист"), that you're getting when you're fired and use to "walk around people" ("обходить") in your org collecting signatures that you returned what you had too etc, so it is means almost exactly the same. Funny that that you can literally translate some idioms and they will still make sense. In the context of OSM I guess it translates as well you walk around, now geographically, not people wise and it is a piece of paper :) &lt;/blockquote&gt;&lt;p&gt;So good.         &lt;p&gt;
            &lt;a href="http://mike.teczno.com/notes/release-often.html#comments"&gt;Comments&lt;/a&gt;
                    &lt;/p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/06mVkPbMZsM" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://mike.teczno.com/notes/index.xml"><id>tag:google.com,2005:reader/feed/http://mike.teczno.com/notes/index.xml</id><title type="html">tecznotes</title><link rel="alternate" href="http://mike.teczno.com/notes/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282547187694"><id gr:original-id="http://linfiniti.com/?p=529">tag:google.com,2005:reader/item/47e99a1ff2724053</id><category term="General FOSSGIS" /><category term="Postgres &amp; PostGIS" /><title type="html">Overpainting with Mapnik</title><published>2010-08-21T21:00:32Z</published><updated>2010-08-21T21:00:32Z</updated><link rel="alternate" href="http://linfiniti.com/2010/08/overpainting-with-mapnik/" type="text/html" /><content xml:base="http://planet.osgeo.org/" xml:lang="en" type="html">&lt;div&gt;&lt;h2&gt;The problem&lt;/h2&gt;
&lt;p&gt;I’ve been having a little poke around with &lt;a href="http://mapnik.org/"&gt;Mapnik&lt;/a&gt; today (awesome software!). One of the things on my todo list has been to sort out rendering issues with roads we have been having. Our last iteration described roads something like this:&lt;/p&gt;
&lt;p&gt;A style…&lt;/p&gt;
&lt;pre&gt;    &amp;lt;Style name=&amp;quot;Freeway30th_style&amp;quot;&amp;gt;
        &amp;lt;Rule&amp;gt;
            &amp;lt;LineSymbolizer&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke&amp;quot;&amp;gt;rgb(169,170,153)&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-width&amp;quot;&amp;gt;12.26&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linejoin&amp;quot;&amp;gt;bevel&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linecap&amp;quot;&amp;gt;round&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-opacity&amp;quot;&amp;gt;1&amp;lt;/CssParameter&amp;gt;
            &amp;lt;/LineSymbolizer&amp;gt;
            &amp;lt;LineSymbolizer&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke&amp;quot;&amp;gt;rgb(255,172,88)&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-width&amp;quot;&amp;gt;12.16&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linejoin&amp;quot;&amp;gt;miter&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linecap&amp;quot;&amp;gt;round&amp;lt;/CssParameter&amp;gt;
            &amp;lt;/LineSymbolizer&amp;gt;
        &amp;lt;/Rule&amp;gt;
    &amp;lt;/Style&amp;gt;
&lt;/pre&gt;
&lt;p&gt;…and this layer definition…&lt;/p&gt;
&lt;pre&gt;        &amp;lt;Layer name=&amp;quot;Freeway30th&amp;quot; srs=&amp;quot;+init=epsg:&amp;amp;srid&amp;quot; maxzoom=&amp;quot;39105.90277777778&amp;quot;&amp;gt;
        &amp;lt;StyleName&amp;gt;Freeway30th_style&amp;lt;/StyleName&amp;gt;
        &amp;lt;Datasource&amp;gt;
            &amp;lt;Parameter name=&amp;quot;dbname&amp;quot;&amp;gt;&amp;amp;dbname&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;estimate_extent&amp;quot;&amp;gt;0&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;extent&amp;quot;&amp;gt;&amp;amp;extent&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;geometry_field&amp;quot;&amp;gt;&amp;amp;geometry_field;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;host&amp;quot;&amp;gt;&amp;amp;host&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;password&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;port&amp;quot;&amp;gt;&amp;amp;port&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;srid&amp;quot;&amp;gt;&amp;amp;srid&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;table&amp;quot;&amp;gt;(SELECT * FROM &amp;quot;l_roads&amp;quot; WHERE &amp;quot;type&amp;quot; = \
            &amp;#39;Freeway&amp;#39; ORDER BY LENGTH(&amp;amp;geometry_field;) DESC) as &amp;quot;l_roads&amp;quot;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;type&amp;quot;&amp;gt;&amp;amp;datasourcetype;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;user&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
        &amp;lt;/Datasource&amp;gt;
    &amp;lt;/Layer&amp;gt;
&lt;/pre&gt;
&lt;p&gt;With the idea being to render freeways with a gray outline and orange center. Unfortunately, it doesnt produce good results:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/linfiniti/4913592225"&gt;&lt;img src="http://farm5.static.flickr.com/4139/4913592225_eb4e83322d.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The problem being those little line ends you see making gray splodges at the end of each segment.&lt;/p&gt;
&lt;h2&gt;The solution&lt;/h2&gt;
&lt;p&gt;Michael Migurski’s blog discusses this issue a little &lt;a href="http://mike.teczno.com/notes/mapnik.html"&gt;in this article&lt;/a&gt; but doesnt directly explain how to achieve the desired effect. So here is what you do:&lt;/p&gt;
&lt;p&gt;First the styles are split into two…&lt;/p&gt;
&lt;pre&gt;     &amp;lt;Style name=&amp;quot;Freeway30th_style-bottom&amp;quot;&amp;gt;
        &amp;lt;Rule&amp;gt;
            &amp;lt;LineSymbolizer&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke&amp;quot;&amp;gt;rgb(169,170,153)&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-width&amp;quot;&amp;gt;12.26&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linejoin&amp;quot;&amp;gt;bevel&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linecap&amp;quot;&amp;gt;round&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-opacity&amp;quot;&amp;gt;1&amp;lt;/CssParameter&amp;gt;
            &amp;lt;/LineSymbolizer&amp;gt;
        &amp;lt;/Rule&amp;gt;
    &amp;lt;/Style&amp;gt;
    &amp;lt;Style name=&amp;quot;Freeway30th_style-top&amp;quot;&amp;gt;
        &amp;lt;Rule&amp;gt;
            &amp;lt;LineSymbolizer&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke&amp;quot;&amp;gt;rgb(255,172,88)&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-width&amp;quot;&amp;gt;12.16&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linejoin&amp;quot;&amp;gt;miter&amp;lt;/CssParameter&amp;gt;
                &amp;lt;CssParameter name=&amp;quot;stroke-linecap&amp;quot;&amp;gt;round&amp;lt;/CssParameter&amp;gt;
            &amp;lt;/LineSymbolizer&amp;gt;
        &amp;lt;/Rule&amp;gt;
    &amp;lt;/Style&amp;gt;
&lt;/pre&gt;
&lt;p&gt;and then the layer is now rendered as two layers, the bottom layer first, then the top:&lt;/p&gt;
&lt;pre&gt;    &amp;lt;Layer name=&amp;quot;Freeway30th-bottom&amp;quot; srs=&amp;quot;+init=epsg:&amp;amp;srid&amp;quot; maxzoom=&amp;quot;39105.90277777778&amp;quot;&amp;gt;
        &amp;lt;StyleName&amp;gt;Freeway30th_style-bottom&amp;lt;/StyleName&amp;gt;
        &amp;lt;Datasource&amp;gt;
            &amp;lt;Parameter name=&amp;quot;dbname&amp;quot;&amp;gt;&amp;amp;dbname&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;estimate_extent&amp;quot;&amp;gt;0&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;extent&amp;quot;&amp;gt;&amp;amp;extent&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;geometry_field&amp;quot;&amp;gt;&amp;amp;geometry_field;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;host&amp;quot;&amp;gt;&amp;amp;host&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;password&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;port&amp;quot;&amp;gt;&amp;amp;port&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;srid&amp;quot;&amp;gt;&amp;amp;srid&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;table&amp;quot;&amp;gt;(SELECT * FROM &amp;quot;l_roads&amp;quot; WHERE &amp;quot;type&amp;quot; = \
            &amp;#39;Freeway&amp;#39; ORDER BY LENGTH(&amp;amp;geometry_field;) DESC) as &amp;quot;l_roads&amp;quot;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;type&amp;quot;&amp;gt;&amp;amp;datasourcetype;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;user&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
        &amp;lt;/Datasource&amp;gt;
    &amp;lt;/Layer&amp;gt;
    &amp;lt;Layer name=&amp;quot;Freeway30th-top&amp;quot; srs=&amp;quot;+init=epsg:&amp;amp;srid&amp;quot; maxzoom=&amp;quot;39105.90277777778&amp;quot;&amp;gt;
        &amp;lt;StyleName&amp;gt;Freeway30th_style-top&amp;lt;/StyleName&amp;gt;
        &amp;lt;Datasource&amp;gt;
            &amp;lt;Parameter name=&amp;quot;dbname&amp;quot;&amp;gt;&amp;amp;dbname&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;estimate_extent&amp;quot;&amp;gt;0&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;extent&amp;quot;&amp;gt;&amp;amp;extent&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;geometry_field&amp;quot;&amp;gt;&amp;amp;geometry_field;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;host&amp;quot;&amp;gt;&amp;amp;host&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;password&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;port&amp;quot;&amp;gt;&amp;amp;port&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;srid&amp;quot;&amp;gt;&amp;amp;srid&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;table&amp;quot;&amp;gt;(SELECT * FROM &amp;quot;l_roads&amp;quot; WHERE &amp;quot;type&amp;quot; = \
            &amp;#39;Freeway&amp;#39; ORDER BY LENGTH(&amp;amp;geometry_field;) DESC) as &amp;quot;l_roads&amp;quot;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;type&amp;quot;&amp;gt;&amp;amp;datasourcetype;&amp;lt;/Parameter&amp;gt;
            &amp;lt;Parameter name=&amp;quot;user&amp;quot;&amp;gt;&amp;amp;password&amp;lt;/Parameter&amp;gt;
         &amp;lt;/Datasource&amp;gt;
    &amp;lt;/Layer&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/linfiniti/4913592213"&gt;&lt;img src="http://farm5.static.flickr.com/4141/4913592213_684a7fe00f.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A much cleaner rendering!&lt;/p&gt;
&lt;h2&gt;Note&lt;/h2&gt;
&lt;p&gt;This approach consumes more cpu time and hits your database harder than the ‘messier’ approach shown first.&lt;/p&gt;
&lt;p&gt;Also you can see in the example above, I have adopted Michaels approach of rendering long lines first.&lt;/p&gt;
&lt;p&gt;Have fun with your mapnik maps!&lt;/p&gt;
&lt;img alt="pixelstats trackingpixel" src="http://linfiniti.com/wp-content/plugins/pixelstats/trackingpixel.php?post_id=529&amp;amp;ts=1283419185"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/mz05CV4QHkI" height="1" width="1"/&gt;</content><author><name>Tim Sutton</name></author><source gr:stream-id="feed/http://planet.osgeo.org/atom.xml"><id>tag:google.com,2005:reader/feed/http://planet.osgeo.org/atom.xml</id><title type="html">Planet OSGeo</title><link rel="alternate" href="http://planet.osgeo.org" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282080652783"><id gr:original-id="tag:blogger.com,1999:blog-8501956666581132164.post-1093476551377144696">tag:google.com,2005:reader/item/f33eb116a9014170</id><title type="html">Multi-tenancy Support,  High Performance Image Serving, Increased Datastore Quotas and More Delivered In New App Engine Release</title><published>2010-08-17T21:01:00Z</published><updated>2010-08-17T21:11:22Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/fqqA0jFVjdA/multi-tenancy-support-high-performance_17.html" type="text/html" /><link rel="replies" href="http://googleappengine.blogspot.com/feeds/1093476551377144696/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1093476551377144696" title="0 Comments" type="text/html" /><content xml:base="http://googleappengine.blogspot.com/" type="html">&lt;p&gt;Today marks the 1.3.6 release of App Engine for Java and Python. In this release we have made available several exciting new features, relaxed quota and datastore limitations, and added various issue fixes.&lt;/p&gt;

&lt;b&gt;Multi-tenant Apps Using the Namespaces API
&lt;/b&gt;
&lt;p&gt;We are pleased to announce support for multi-tenancy for applications via the Namespaces API. With multi-tenancy, multiple client organizations (or “tenants”) can all run the same application, segregating data using a unique namespace for each client. This allows you to easily serve the same app to multiple different customers, with each customer seeing their own unique copy of the app. No changes in your code are necessary to use this API-- just a little extra configuration. Further, the API is also designed to be very customizable, with hooks into your code that you can control, so you can set up multi-tenancy in any way you choose.&lt;/p&gt;

&lt;p&gt;Check out our application examples for &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fp%2Fgoogle-app-engine-samples%2Fsource%2Fbrowse%2F%23svn%2Ftrunk%2Fgwtguestbook-namespaces%2Fsrc%2Fcom%2Fgoogle%2Fgwt%2Fsample%2Fgwtguestbook%2Fserver"&gt;Java&lt;/a&gt; and &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fp%2Fgoogle-app-engine-samples%2Fsource%2Fbrowse%2F%23svn%2Ftrunk%2Fguestbook_namespaces%253Fstate%253Dclosed"&gt;Python&lt;/a&gt; to demonstrate how to use the Namespaces API in your application. The API works will all of the relevant App Engine APIs (Datastore, Memcache, and Task Queues). Check out our docs for &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fjava%2Fmultitenancy%2F"&gt;Java&lt;/a&gt; and &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fpython%2Fmultitenancy%2F"&gt;Python&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;b&gt;High-Performance Image Serving&lt;/b&gt;

&lt;p&gt;This release also includes a new, high-performance image serving system for your applications, based on the same infrastructure we use to serve images for Picasa. This feature allows you to generate a stable, dedicated URL for serving web-suitable image thumbnails. You simply store a single copy of your original image in Blobstore, and then request a high-performance per-image URL. This special URL can serve that image resized and/or cropped automatically, and serving from this URL does not incur any CPU or dynamic serving load on your application (though bandwidth is still charged as usual). It’s easy to use, just call the Python function &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fpython%2Fimages%2Ffunctions.html"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;get_serving_url&lt;/span&gt;&lt;/a&gt;, or the Java function &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fjava%2Fjavadoc%2Fcom%2Fgoogle%2Fappengine%2Fapi%2Fimages%2FImagesService.html%23getServingUrl(com.google.appengine.api.blobstore.BlobKey)"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;getServingUrl&lt;/span&gt;&lt;/a&gt; and supply a Blob key (with optional serving size and/or crop arguments), and you can now serve dozens or hundreds of thumbnails on a single page with ease. To enable high performance image serving in your deployed application, you'll need to enable billing.&lt;/p&gt;

&lt;b&gt;Custom Error Pages
&lt;/b&gt;
&lt;p&gt;Since launch, many developers have asked to be able to serve custom error pages instead of those automatically served by App Engine. We are happy to announce today we are supporting static HTML error pages that can be served for you automatically for over quota, DoS, timeout and other generic error cases, that you previously could not control. You can configure custom error handlers in your &lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;app.yaml &lt;/span&gt;or &lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;appengine-web.xml&lt;/span&gt; file. Check out the &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fjava%2Fconfig%2Fappconfig.html"&gt;Java&lt;/a&gt; or &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fpython%2Fconfig%2Fappconfig.html"&gt;Python&lt;/a&gt; docs for more information.&lt;/p&gt;

&lt;b&gt;Increased Quotas
&lt;/b&gt;
&lt;p&gt;We have also continued the trend of lifting some system limitations that have been in place since launch. The Datastore no longer enforces a 1000 entity limit on for &lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;count&lt;/span&gt; and &lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;offset&lt;/span&gt;. Queries using these will now safely execute until they return or your application reaches the request timeout limit. Also, based on your feedback, we have raised nearly all of the burst quotas for free apps to the same level as the burst quotas for billed apps. Check out the &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fquotas.html"&gt;docs&lt;/a&gt; for more information on quota limits.&lt;/p&gt;

&lt;b&gt;Other features included in 1.3.6:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:normal"&gt;Java developers can now use the same &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fjava%2Fconfigyaml%2F"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;"&gt;app.yaml&lt;/span&gt; configuration file&lt;/a&gt; that App Engine uses for Python applications instead of appengine-web.xml (if preferred).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:normal"&gt;You can now pause task queues via the Admin Console interface.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:normal"&gt;Dashboard graphs in the Admin Console will now begin showing up to 30 days worth of data.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:normal"&gt;Content-Range headers are now supported with the Blobstore API.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/b&gt;You can read all about these features in the App Engine documentation for &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fjava%2Foverview.html"&gt;Java&lt;/a&gt; and &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdocs%2Fpython%2Foverview.html"&gt;Python&lt;/a&gt;. The new versions of the SDK can be found on our &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fappengine%2Fdownloads.html"&gt;downloads page&lt;/a&gt;.

&lt;p&gt;In addition to all of the new features, we’ve included several bug fixes which you can read all about in the release notes for &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fp%2Fgoogleappengine%2Fwiki%2FSdkForJavaReleaseNotes"&gt;Java&lt;/a&gt; and &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcode.google.com%2Fp%2Fgoogleappengine%2Fwiki%2FSdkReleaseNotes"&gt;Python&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;-- Posted by the App Engine team&lt;/p&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/8501956666581132164-1093476551377144696?l=googleappengine.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/fqqA0jFVjdA" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/AkkRw-fhb58" height="1" width="1"/&gt;</content><author><name>The App Engine Team</name></author><gr:likingUser>11287820633902558792</gr:likingUser><gr:likingUser>09518644329432801632</gr:likingUser><gr:likingUser>11096544829929468070</gr:likingUser><gr:likingUser>17179637118302863536</gr:likingUser><gr:likingUser>03861438843967088177</gr:likingUser><gr:likingUser>07918640802302023825</gr:likingUser><gr:likingUser>04576282046737218176</gr:likingUser><gr:likingUser>07592376323135115679</gr:likingUser><gr:likingUser>09870762661421625672</gr:likingUser><gr:likingUser>02194987417510382281</gr:likingUser><gr:likingUser>11352884445869003338</gr:likingUser><gr:likingUser>04130243895513766868</gr:likingUser><gr:likingUser>05499436200550257813</gr:likingUser><gr:likingUser>08880023713431627278</gr:likingUser><gr:likingUser>16684181232016952298</gr:likingUser><gr:likingUser>05875385289110195900</gr:likingUser><gr:likingUser>02924665938094374122</gr:likingUser><gr:likingUser>03785606733463025295</gr:likingUser><gr:likingUser>00761107209134230964</gr:likingUser><gr:likingUser>08296349792222620407</gr:likingUser><gr:likingUser>14531159523224126217</gr:likingUser><gr:likingUser>08725652041167378087</gr:likingUser><gr:likingUser>08752474928067666524</gr:likingUser><source gr:stream-id="feed/http://googleappengine.blogspot.com/atom.xml"><id>tag:google.com,2005:reader/feed/http://googleappengine.blogspot.com/atom.xml</id><title type="html">Google App Engine Blog</title><link rel="alternate" href="http://googleappengine.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282025104467"><id gr:original-id="tag:blogger.com,1999:blog-28924572.post-5906126859793571080">tag:google.com,2005:reader/item/ed41dbf6e3f8957d</id><category term="Open Street Map" scheme="http://www.blogger.com/atom/ns#" /><category term="Video" scheme="http://www.blogger.com/atom/ns#" /><category term="Open Source" scheme="http://www.blogger.com/atom/ns#" /><category term="Heat Map" scheme="http://www.blogger.com/atom/ns#" /><category term="Openlayers" scheme="http://www.blogger.com/atom/ns#" /><title type="html">Open Layers Heatmaps</title><published>2010-08-16T03:09:00Z</published><updated>2010-08-16T03:09:00Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/mapperz/~3/H0ZUHW708AQ/open-layers-heatmaps.html" type="text/html" /><summary xml:base="http://mapperz.blogspot.com/" type="html">Open Layers Heatmaps

"Making Open Street Maps even hotter!"


A Great Mashup to show 'HeatMaps' using Open Layers and Open Street Map Features (OSM).
Select a number of OSM Features and create...&lt;br&gt;
&lt;br&gt;
Map and GIS News finding blog. With so many Maps and GIS sites online now it is hard to find the good from the not so good. This blog tries to cut the cream and provide you with the newest, fastest, cleanest and most user friendly maps that are available online. News has location and it is mapped.&lt;p&gt;&lt;iframe src="http://feedads.g.doubleclick.net/~ah/f/itn20051t7o0jonrmkoebocn90/468/60#http%3A%2F%2Fmapperz.blogspot.com%2F2010%2F08%2Fopen-layers-heatmaps.html" width="100%" height="60" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mapperz?a=H0ZUHW708AQ:6MZqmkpAXBY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mapperz?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mapperz/~4/H0ZUHW708AQ" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/Dq5SEq-HDuQ" height="1" width="1"/&gt;</summary><author><name>noreply@blogger.com (Mapperz)</name></author><gr:likingUser>18120468709065437730</gr:likingUser><source gr:stream-id="feed/http://mapperz.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://mapperz.blogspot.com/feeds/posts/default</id><title type="html">Mapperz - The Mapping News Blog</title><link rel="alternate" href="http://mapperz.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1282024411754"><id gr:original-id="tag:blogger.com,1999:blog-11300808.post-7667174094496016913">tag:google.com,2005:reader/item/5c8700cfdb7d1aff</id><category term="html5" scheme="http://www.blogger.com/atom/ns#" /><title type="html">HTML5: Still Rocking!</title><published>2010-08-13T21:36:00Z</published><updated>2010-08-13T21:37:20Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/blogspot/Dcni/~3/OnX3AhqqsPA/html5-still-rocking.html" type="text/html" /><link rel="replies" href="http://googlecode.blogspot.com/feeds/7667174094496016913/comments/default" title="Post Comments" type="application/atom+xml" /><link rel="replies" href="http://googlecode.blogspot.com/2010/08/html5-still-rocking.html#comment-form" title="0 Comments" type="text/html" /><content xml:base="http://googlecode.blogspot.com/" type="html">As announced on the &lt;a href="http://blog.chromium.org/2010/08/html5rocks-v2-more-guides-new-studio.html"&gt;chromium.org blog&lt;/a&gt;, we’ve just pushed a bunch of new content to our &lt;a href="http://www.html5rocks.com/"&gt;HTML5Rocks.com&lt;/a&gt; developer site, which &lt;a href="http://blog.chromium.org/2010/06/html5-rocks-resource-for-open-web.html"&gt;launched&lt;/a&gt; earlier this summer.&lt;br&gt;&lt;br&gt;Anyone that’s following HTML5 knows how fast things are moving! To keep you informed with all of the amazing features landing in today’s browsers, we’ve added &lt;a href="http://www.html5rocks.com/tutorials/"&gt;five new articles&lt;/a&gt;, a heap of &lt;a href="http://www.html5rocks.com/resources.html"&gt;new resources&lt;/a&gt;, and a much needed &lt;a href="http://www.html5rocks.com/tutorials/index.xml"&gt;RSS feed&lt;/a&gt; for staying tuned in. We're also revealing a new component of the site, the &lt;a href="http://studio.html5rocks.com/"&gt;HTML5 Studio&lt;/a&gt;. It’s a collection of standalone demos that highlight hot, new HTML5 features working together.&lt;br&gt;&lt;br&gt;If you'd like to contribute code, guides, or samples, we’re working on a third-party contributors guide. Please stay tuned! In the meantime, you can get in touch with us on &lt;a href="http://code.google.com/p/html5rocks/issues/list"&gt;the bug tracker&lt;/a&gt; or via &lt;a href="http://twitter.com/ChromiumDev"&gt;@ChromiumDev&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;span style="font-style:italic"&gt;By Eric Bidelman, Google Chrome Developer Relations&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/11300808-7667174094496016913?l=googlecode.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=OnX3AhqqsPA:S-aScCvHJ6c:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=OnX3AhqqsPA:S-aScCvHJ6c:-BTjWOF_DHI" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=OnX3AhqqsPA:S-aScCvHJ6c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Dcni?a=OnX3AhqqsPA:S-aScCvHJ6c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Dcni?i=OnX3AhqqsPA:S-aScCvHJ6c:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Dcni/~4/OnX3AhqqsPA" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/krN1C3YbllI" height="1" width="1"/&gt;</content><author><name>Mike Marchak</name></author><gr:likingUser>07753216095665996846</gr:likingUser><gr:likingUser>10341200156461583669</gr:likingUser><gr:likingUser>14106121256890804583</gr:likingUser><gr:likingUser>04310376626742107013</gr:likingUser><gr:likingUser>14072178322358936223</gr:likingUser><gr:likingUser>05470206498773698461</gr:likingUser><gr:likingUser>10576402064275097792</gr:likingUser><gr:likingUser>10671741051433758229</gr:likingUser><gr:likingUser>03572252891252970590</gr:likingUser><gr:likingUser>12883247801568252000</gr:likingUser><gr:likingUser>02220058273359534291</gr:likingUser><gr:likingUser>17810565786015263703</gr:likingUser><gr:likingUser>16684181232016952298</gr:likingUser><gr:likingUser>14900004161396011070</gr:likingUser><gr:likingUser>17525275556772939305</gr:likingUser><gr:likingUser>17615297883156763703</gr:likingUser><gr:likingUser>14575029411551323212</gr:likingUser><gr:likingUser>16500897162056430000</gr:likingUser><gr:likingUser>06108589654550337495</gr:likingUser><gr:likingUser>00320933387269203904</gr:likingUser><gr:likingUser>16599268362263278289</gr:likingUser><source gr:stream-id="feed/http://code.google.com/feeds/updates.xml"><id>tag:google.com,2005:reader/feed/http://code.google.com/feeds/updates.xml</id><title type="html">Google Code Blog</title><link rel="alternate" href="http://googlecode.blogspot.com/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1281726171426"><id gr:original-id="http://www.zarb.org/~pterjan/blog/?date=20100813#p01">tag:google.com,2005:reader/item/86411be44ae1369c</id><title type="html">Pascal Terjan: Google Geolocation API</title><published>2010-08-13T18:50:51Z</published><updated>2010-08-13T18:50:51Z</updated><link rel="alternate" href="http://www.zarb.org/~pterjan/blog/?date=20100813#p01" type="text/html" /><summary xml:base="http://planet.gnome.org/" type="html">&lt;img src="http://planet.gnome.org/heads/pterjan.png" alt="" align="right"&gt; &lt;p&gt;I found today the &lt;a href="http://code.google.com/intl/fr-FR/apis/gears/geolocation_network_protocol.html"&gt;API documentation&lt;/a&gt; to use http://www.google.com/loc/json in order to get a location from the seen wifi APs or GSM/CDMA cells.&lt;/p&gt;
&lt;p&gt;It is very easy to use:&lt;/p&gt;&lt;pre&gt;$ curl -X POST -d '{
  "version": "1.1.0",
  "host": "perdu.com",
  "request_address": true,
  "address_language": "en_GB",
  "wifi_towers": [
    {
      "mac_address": "56:7a:e8:68:15:4B"
    }
  ]
}' http://www.google.com/loc/json
{"location":{"latitude":48.868646,"longitude":2.355392,"address":{
"country":"France","country_code":"FR","region":"Ile-de-France","county":"Paris",
"city":"Paris","street":"Rue Sainte-Apolline","street_number":"2","postal_code":"75003"
},"accuracy":150.0},"access_token":"2:yWOkYM4kI79VH1Bj:cvMZFkJhXSflywZB"}&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I guess this is what was used for &lt;a href="http://www.bbc.co.uk/news/technology-10850875"&gt;this attack&lt;/a&gt;, and this seems to be used by Firefox and Chrome geolocation features.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: I found on &lt;a href="http://code.google.com/p/gears/wiki/GeolocationAPI"&gt;http://code.google.com/p/gears/wiki/GeolocationAPI&lt;/a&gt; the following note: &lt;i&gt;"Note that the JSON protocol described here and at http://code.google.com/apis/gears/geolocation_network_protocol.html is published to allow developers to provide their own network location server for use through the Gears API. Google's network location server is only to be used through the Gears API"&lt;/i&gt;, so this is nice but you can't use it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/MQBEBkyPNHQ" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>02438731866835478013</gr:likingUser><gr:likingUser>17311887303618556006</gr:likingUser><source gr:stream-id="feed/http://planet.gnome.org/rss20.xml"><id>tag:google.com,2005:reader/feed/http://planet.gnome.org/rss20.xml</id><title type="html">Planet GNOME</title><link rel="alternate" href="http://planet.gnome.org/" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1281447294444"><id gr:original-id="http://www.tuaw.com/2010/08/10/gyro-air-drums-makes-rhythmic-use-of-the-iphone-4s-gyroscope/">tag:google.com,2005:reader/item/7627f68175fff6fe</id><category term="drums" /><category term="gyro air drums" /><category term="gyro-air-drums" /><category term="GyroAirDrums" /><category term="gyroscope" /><category term="iPhone" /><category term="iphone4" /><title type="html">Gyro Air Drums makes rhythmic use of the iPhone 4's gyroscope</title><published>2010-08-10T14:00:00Z</published><updated>2010-08-10T14:00:00Z</updated><link rel="alternate" href="http://www.tuaw.com/2010/08/10/gyro-air-drums-makes-rhythmic-use-of-the-iphone-4s-gyroscope/" type="text/html" /><summary xml:base="http://www.tuaw.com/" type="html">&lt;div align="center"&gt;&lt;embed src="http://www.youtube.com/v/8QBWoTGRmTI&amp;amp;hl=en_US&amp;amp;fs=1" allowScriptAccess="never" allowFullScreen="true" width="480" height="385" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/div&gt;
&lt;br&gt;
While most of the apps making use of the iPhone 4's gyroscope have centered around augmented reality, here's one doing something different. &lt;a href="http://itunes.apple.com/us/app/gyro-air-drums/id383027843?mt=8"&gt;Gyro Air Drums&lt;/a&gt; is an app that supposedly lets you use your iPhone as a "virtual drumstick," waving and tapping it on a virtual drum. You can move your iPhone in a 300 degree rotation in real life, hitting various drums on upper or lower levels. And when you move the iPhone, your screen will rotate along with the movement, viewing all of the various instruments, from the snare and hi-hat to more fun things like a cowbell or &lt;a href="http://en.wikipedia.org/wiki/Taiko"&gt;a taiko drum&lt;/a&gt;. &lt;br&gt;
&lt;br&gt;
As you can see above, it's only one drum hit at a time, but presumably if you have two iPhone 4s, or a quick and accurate wrist, you'll be able to play a full drum beat. But at least it's a cool idea -- I was hoping we'd see more inventive uses of the gyroscope like this. The app is US$2.99 on the App Store right now, or there's &lt;a href="http://itunes.apple.com/us/app/gyro-air-drums-lite/id385220859?mt=8"&gt;a free lite version&lt;/a&gt; with a limited number of drums if you just want to play around.&lt;p style="padding:5px;clear:both"&gt;&lt;a href="http://www.tuaw.com"&gt;TUAW&lt;/a&gt;&lt;a href="http://www.tuaw.com/2010/08/10/gyro-air-drums-makes-rhythmic-use-of-the-iphone-4s-gyroscope/"&gt;Gyro Air Drums makes rhythmic use of the iPhone 4's gyroscope&lt;/a&gt; originally appeared on &lt;a href="http://www.tuaw.com"&gt;The Unofficial Apple Weblog (TUAW)&lt;/a&gt; on Tue, 10 Aug 2010 09:00:00 EST.  Please see our &lt;a href="http://www.weblogsinc.com/feed-terms/"&gt;terms for use of feeds&lt;/a&gt;.&lt;br style="clear:both"&gt;&lt;/p&gt;&lt;h6 style="clear:both;padding:8px 0 0 0;height:2px;font-size:1px;border:0;margin:0;padding:0"&gt;&lt;/h6&gt;&lt;a href="http://www.youtube.com/watch?v=8QBWoTGRmTI"&gt;Read&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/10/gyro-air-drums-makes-rhythmic-use-of-the-iphone-4s-gyroscope/" rel="bookmark" title="Permanent link to this entry"&gt;Permalink&lt;/a&gt; | &lt;a href="http://www.tuaw.com/forward/19586721/" title="Send this entry to a friend via email"&gt;Email this&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/10/gyro-air-drums-makes-rhythmic-use-of-the-iphone-4s-gyroscope/#comments" title="View reader comments on this entry"&gt;Comments&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/8uY7n1vEmj0" height="1" width="1"/&gt;</summary><author><name>Mike Schramm</name></author><gr:likingUser>09309550959103164454</gr:likingUser><gr:likingUser>18078788385534166172</gr:likingUser><gr:likingUser>17543291858960396508</gr:likingUser><gr:likingUser>02909488616720846262</gr:likingUser><gr:likingUser>15813009959843630822</gr:likingUser><gr:likingUser>05849328736047557547</gr:likingUser><gr:likingUser>16178348048462130980</gr:likingUser><gr:likingUser>04048168569800639590</gr:likingUser><gr:likingUser>04312204109771562006</gr:likingUser><gr:likingUser>00203077831143447644</gr:likingUser><gr:likingUser>05291828455228147933</gr:likingUser><gr:likingUser>10411030752040985536</gr:likingUser><source gr:stream-id="feed/http://www.tuaw.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.tuaw.com/rss.xml</id><title type="html">The Unofficial Apple Weblog (TUAW)</title><link rel="alternate" href="http://www.tuaw.com" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1281388239227"><id gr:original-id="tag:blogger.com,1999:blog-14903426.post-9220564513978512526">tag:google.com,2005:reader/item/e8abcf72db2c8c22</id><title type="html">Take this Tree and Pack it</title><published>2010-08-06T22:51:00Z</published><updated>2010-08-07T22:03:03Z</updated><link rel="alternate" href="http://blog.cleverelephant.ca/2010/08/take-this-tree-and-pack-it.html" type="text/html" /><link rel="replies" href="http://blog.cleverelephant.ca/feeds/9220564513978512526/comments/default" type="application/atom+xml" /><link rel="replies" href="https://www.blogger.com/comment.g?blogID=14903426&amp;postID=9220564513978512526" type="text/html" /><content xml:base="http://planet.osgeo.org/" type="html">&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_uYlrslhrgyY/SrvWIvKAeWI/AAAAAAAAABg/OJ25YFNVCN8/s400/packed.png" style="float:right;padding:3px;width:200px"&gt;Noticing this a little late, but have a peak at these posts from Chris Hodgson about how the R-Tree &lt;a href="http://cognitivelychris.blogspot.com/2008/10/nitpicking-pick-split.html"&gt;fails for variable density GIS&lt;/a&gt; data, and his &lt;a href="http://cognitivelychris.blogspot.com/2009/09/send-your-r-trees-packing.html"&gt;approach to a packing process&lt;/a&gt;.  Unfortunately, packing is a post-facto process, and it&amp;#39;s not clear to me how we would do it with the GiST infrastructure that undergirds the PostGIS database. But it&amp;#39;s nice to see a good R-Tree and a reminder of just how ugly they can get under the covers.&lt;br&gt; &lt;div&gt;&lt;img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/14903426-9220564513978512526?l=blog.cleverelephant.ca" width="1"&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/6L3q6lkZPRA" height="1" width="1"/&gt;</content><author><name>Paul Ramsey</name></author><source gr:stream-id="feed/http://planet.osgeo.org/atom.xml"><id>tag:google.com,2005:reader/feed/http://planet.osgeo.org/atom.xml</id><title type="html">Planet OSGeo</title><link rel="alternate" href="http://planet.osgeo.org" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1280948833123"><id gr:original-id="http://www.tuaw.com/2010/08/04/capo-2-detects-chords-and-tabs-in-your-favorite-songs/">tag:google.com,2005:reader/item/7fd57f47c2c9c9fc</id><category term="apps" /><category term="capo" /><category term="capo-2" /><category term="chord" /><category term="chords" /><category term="chorus" /><category term="detection" /><category term="music" /><category term="supermegaultragroovy" /><category term="verse" /><title type="html">Capo 2 detects chords and tabs in your favorite songs</title><published>2010-08-04T15:30:00Z</published><updated>2010-08-04T15:30:00Z</updated><link rel="alternate" href="http://www.tuaw.com/2010/08/04/capo-2-detects-chords-and-tabs-in-your-favorite-songs/" type="text/html" /><summary xml:base="http://www.tuaw.com/" type="html">&lt;div style="text-align:center"&gt;&lt;img vspace="4" hspace="4" border="1" alt="" src="http://www.blogcdn.com/www.tuaw.com/media/2010/08/caposcreenshot-1280910620.jpg"&gt;&lt;/div&gt;
We reported on &lt;a href="http://www.tuaw.com/2009/04/21/capo-gives-you-play-along-tempo-controls-for-39/"&gt;the original version of Capo&lt;/a&gt; a while back, and now the folks at SuperMegaUltraGroovy have released version 2 &lt;a href="http://supermegaultragroovy.com/products/Capo/"&gt;over on their website&lt;/a&gt;. The biggest feature in the new release is "a highly detailed spectrogram visualization," which basically means that they've implemented what the first app couldn't do; there's actual chord detection in the software. As you play the song, you can see visualizations of where the notes fall on the scale, and you can lay down chord markers that will automatically mark out your chords. Basically, you can reverse engineer the song.&lt;br&gt;
&lt;br&gt;
It's pretty wild. You'll still need some musical insight since the app doesn't always get it perfectly right, and you'll need to know where the chord changes are in order to mark them out. It's impressive, though. I was able to get a basic chord structure out of the first verse of the Decemberists song above, and if I played around with it some more, I bet that I could reproduce the song on the guitar.&lt;br&gt;
&lt;br&gt;
You can also have it write out tabs for you, and all of the features of the first version are back; you can mark out choruses and verses on all of your songs, correct pitch and speed, and set up loops to play along with. If you do any amount of playing around with your favorite songs, it's a fun tool to have. Capo 2 is US $49 as a new purchase or US $19 as an upgrade from the first version. It's also available as a free five minute trial download from the site.&lt;p style="padding:5px;clear:both"&gt;&lt;a href="http://www.tuaw.com"&gt;TUAW&lt;/a&gt;&lt;a href="http://www.tuaw.com/2010/08/04/capo-2-detects-chords-and-tabs-in-your-favorite-songs/"&gt;Capo 2 detects chords and tabs in your favorite songs&lt;/a&gt; originally appeared on &lt;a href="http://www.tuaw.com"&gt;The Unofficial Apple Weblog (TUAW)&lt;/a&gt; on Wed, 04 Aug 2010 10:30:00 EST.  Please see our &lt;a href="http://www.weblogsinc.com/feed-terms/"&gt;terms for use of feeds&lt;/a&gt;.&lt;br style="clear:both"&gt;&lt;/p&gt;&lt;h6 style="clear:both;padding:8px 0 0 0;height:2px;font-size:1px;border:0;margin:0;padding:0"&gt;&lt;/h6&gt;&lt;a href="http://supermegaultragroovy.com/products/Capo/"&gt;Read&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/04/capo-2-detects-chords-and-tabs-in-your-favorite-songs/" rel="bookmark" title="Permanent link to this entry"&gt;Permalink&lt;/a&gt; | &lt;a href="http://www.tuaw.com/forward/19579411/" title="Send this entry to a friend via email"&gt;Email this&lt;/a&gt; | &lt;a href="http://www.tuaw.com/2010/08/04/capo-2-detects-chords-and-tabs-in-your-favorite-songs/#comments" title="View reader comments on this entry"&gt;Comments&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/klokan-starred-news/~4/IG1xGYEtmgg" height="1" width="1"/&gt;</summary><author><name>Mike Schramm</name></author><gr:likingUser>01650761658069285380</gr:likingUser><gr:likingUser>05811184787797974732</gr:likingUser><gr:likingUser>01867880815236897424</gr:likingUser><gr:likingUser>17258945714522822358</gr:likingUser><gr:likingUser>18078788385534166172</gr:likingUser><gr:likingUser>01139409666286218998</gr:likingUser><gr:likingUser>15577853104657686900</gr:likingUser><gr:likingUser>08960826541422808351</gr:likingUser><gr:likingUser>06399857261161633037</gr:likingUser><gr:likingUser>03102290008275190344</gr:likingUser><gr:likingUser>00968103515743729304</gr:likingUser><gr:likingUser>13628064431157545820</gr:likingUser><gr:likingUser>01305576505815135965</gr:likingUser><gr:likingUser>16962824904601760347</gr:likingUser><gr:likingUser>07871536681644995356</gr:likingUser><gr:likingUser>01907674241516629606</gr:likingUser><gr:likingUser>17413711667026811003</gr:likingUser><gr:likingUser>04264571176446326028</gr:likingUser><gr:likingUser>17744152915142578052</gr:likingUser><gr:likingUser>15902000445656616529</gr:likingUser><gr:likingUser>03637936323773793724</gr:likingUser><gr:likingUser>07366586794568088847</gr:likingUser><gr:likingUser>08409422844604922208</gr:likingUser><gr:likingUser>16894523955281292716</gr:likingUser><gr:likingUser>06535436408181045014</gr:likingUser><gr:likingUser>11860469904545435168</gr:likingUser><gr:likingUser>10553208531349052599</gr:likingUser><gr:likingUser>01259818698699721128</gr:likingUser><gr:likingUser>07343436283483900305</gr:likingUser><gr:likingUser>14838592557623315246</gr:likingUser><gr:likingUser>02865389680826009348</gr:likingUser><gr:likingUser>06134768033234770169</gr:likingUser><gr:likingUser>02142760151176031799</gr:likingUser><gr:likingUser>15237570062890348487</gr:likingUser><gr:likingUser>10001508543374244748</gr:likingUser><gr:likingUser>11005995735752801118</gr:likingUser><gr:likingUser>04529471144860209755</gr:likingUser><gr:likingUser>11152384434289412428</gr:likingUser><gr:likingUser>05485446364999629278</gr:likingUser><gr:likingUser>02719702971469440070</gr:likingUser><gr:likingUser>06682196928262715167</gr:likingUser><gr:likingUser>12134860017824485549</gr:likingUser><gr:likingUser>18354807052120544632</gr:likingUser><gr:likingUser>11137906418953521021</gr:likingUser><gr:likingUser>15922228808524427254</gr:likingUser><gr:likingUser>07046417815808303854</gr:likingUser><gr:likingUser>05262245224081530893</gr:likingUser><gr:likingUser>18288570829876230996</gr:likingUser><gr:likingUser>13270112105483290995</gr:likingUser><gr:likingUser>09059091325480224474</gr:likingUser><gr:likingUser>03339007859269342697</gr:likingUser><gr:likingUser>10445920748775397371</gr:likingUser><gr:likingUser>00405367162430320253</gr:likingUser><gr:likingUser>12394294225977370818</gr:likingUser><gr:likingUser>10275972484147440962</gr:likingUser><gr:likingUser>16240582404985175275</gr:likingUser><gr:likingUser>12070652444838789820</gr:likingUser><gr:likingUser>18096006379329813481</gr:likingUser><gr:likingUser>13121415764950703902</gr:likingUser><gr:likingUser>16171468115442328541</gr:likingUser><gr:likingUser>03644581774699355785</gr:likingUser><gr:likingUser>09364732384011302924</gr:likingUser><gr:likingUser>01770022134899060650</gr:likingUser><gr:likingUser>01564959425318552483</gr:likingUser><gr:likingUser>00173581083973132434</gr:likingUser><gr:likingUser>15983018110975575325</gr:likingUser><gr:likingUser>01182333904562525052</gr:likingUser><gr:likingUser>09695732722818274986</gr:likingUser><gr:likingUser>10203908680721724229</gr:likingUser><gr:likingUser>15702195691286255041</gr:likingUser><gr:likingUser>05755252844547017210</gr:likingUser><gr:likingUser>06167383512279276649</gr:likingUser><gr:likingUser>11818275094573128259</gr:likingUser><gr:likingUser>02605975624337565341</gr:likingUser><gr:likingUser>14393114398919089883</gr:likingUser><gr:likingUser>06547031092060364351</gr:likingUser><gr:likingUser>17616057005541646587</gr:likingUser><gr:likingUser>12239469589340524268</gr:likingUser><gr:likingUser>05011016834850780983</gr:likingUser><gr:likingUser>17911148596023839484</gr:likingUser><gr:likingUser>10851961811731110991</gr:likingUser><gr:likingUser>11349813561871323128</gr:likingUser><gr:likingUser>11034157769474668849</gr:likingUser><gr:likingUser>02971385870103157047</gr:likingUser><source gr:stream-id="feed/http://www.tuaw.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.tuaw.com/rss.xml</id><title type="html">The Unofficial Apple Weblog (TUAW)</title><link rel="alternate" href="http://www.tuaw.com" type="text/html" /></source></entry></feed>
