<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUUARHs4fip7ImA9WhVbF0Q.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164</id><updated>2012-06-04T00:00:45.536-07:00</updated><category term="toolkit" /><category term="rental" /><category term="java" /><category term="html5" /><category term="taskqueue" /><category term="kaazing" /><category term="datastore" /><category term="canoe" /><category term="entity group" /><category term="pipeline" /><category term="events" /><category term="websockets" /><category term="open source" /><category term="api" /><category term="cloud" /><category term="1.1.2" /><category term="django" /><category term="getting started" /><category term="put" /><category term="mapreduce" /><category term="gps" /><category term="batch" /><category term="sustainability" /><category term="green" /><category term="location" /><category term="research project" /><category term="googlenew" /><category term="android" /><category term="delete" /><category term="paypal" /><category term="appengine" /><category term="agile" /><category term="python" /><category term="bicycle" /><category term="norex" /><category term="twilio" /><category term="index" /><category term="video" /><category term="developer days" /><category term="email" /><category term="payment" /><category term="casestudy" /><category term="io2010" /><category term="workflows" /><category term="app engine" /><category term="conferences" /><category term="google" /><category term="devfests" /><title type="text">Google App Engine Blog</title><subtitle type="html">News, notes, tips and tricks from the Google App Engine Team.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://googleappengine.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>A Googler</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>197</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GoogleAppEngineBlog" /><feedburner:info uri="googleappengineblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/GoogleAppEngineBlog" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FGoogleAppEngineBlog" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry gd:etag="W/&quot;DU8DQ348cCp7ImA9WhVUF0w.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6406696031776645687</id><published>2012-05-22T13:17:00.000-07:00</published><updated>2012-05-22T13:17:52.078-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-22T13:17:52.078-07:00</app:edited><title>1.6.6 SDK Released</title><content type="html">&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;While the Search API was a feature that was just so exciting we couldn’t wait to &lt;a href="http://googleappengine.blogspot.com/2012/05/looking-for-search-find-it-on-google.html"&gt;&lt;span class="s1"&gt;share it&lt;/span&gt;&lt;/a&gt;, we still have our regularly scheduled release for May full of new offerings, fixes and refinements with a little something for everyone.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Search API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;For the Search API, we’ve included a change that displays the current experimental quota limits in the Admin Console. We've also made several bug fixes and small naming changes in the API to improve consistency.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Service Refinements&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;As a result of the &lt;a href="http://googleappengine.blogspot.com/2012/04/masterslave-datastore-thanks-for-all.html"&gt;&lt;span class="s1"&gt;Master/Slave datastore deprecation&lt;/span&gt;&lt;/a&gt;, new users will no longer be able to create new Master/Slave applications. We strongly suggest that developers &lt;a href="https://developers.google.com/appengine/docs/adminconsole/migration"&gt;&lt;span class="s1"&gt;move their existing Master/Slave applications to HRD&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Feature Updates&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;We are always looking for ways to remove our system limits so that developers can get the most out of the App Engine platform. With this release, apps that have billing enabled can now configure up to 100 cron jobs.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;Lastly, we will be prompting a small percentage of admin console users each week to participate in an optional user satisfaction survey.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;Of course, we can’t get to all the new things we have for you here, so don’t forget to read the full release notes for &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;&lt;span class="s1"&gt;Python&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;&lt;span class="s1"&gt;Java&lt;/span&gt;&lt;/a&gt;, and &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes"&gt;&lt;span class="s1"&gt;Go&lt;/span&gt;&lt;/a&gt;. &lt;a href="http://stackoverflow.com/questions/tagged/google-app-engine"&gt;&lt;span class="s1"&gt;Stack Overflow&lt;/span&gt;&lt;/a&gt; for App Engine is an amazing way to get technical help from the community and members of the App Engine team, and we continue the lively discussion about App Engine over on our &lt;a href="https://groups.google.com/forum/?fromgroups#!forum/google-appengine"&gt;&lt;span class="s1"&gt;Google Group&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span style="font-family: inherit;"&gt;- Posted by the Google App Engine Team&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;i&gt;Interested in working with the Google App Engine team? We are hiring &lt;/i&gt;&lt;a href="http://www.google.com/about/jobs/locations/mountain-view/client-facing/technical-sales/solutions-architect-cloud-platforms-mountain-view.html"&gt;&lt;span class="s1"&gt;&lt;i&gt;solutions architects&lt;/i&gt;&lt;/span&gt;&lt;/a&gt;&lt;i&gt; to help support our premier customers and engage with the community to broaden the impact of Google's cloud offerings.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-6406696031776645687?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/gxhtOJOpNqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6406696031776645687/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6406696031776645687" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6406696031776645687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6406696031776645687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/gxhtOJOpNqc/166-sdk-released.html" title="1.6.6 SDK Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/05/166-sdk-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGQHc8cSp7ImA9WhVVFks.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6093501885231040898</id><published>2012-05-10T10:05:00.001-07:00</published><updated>2012-05-10T10:05:21.979-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-10T10:05:21.979-07:00</app:edited><title>Cloud SQL: pick the plan that fits your app</title><content type="html">&lt;span id="internal-source-marker_0.18458157475106418"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;One of the most requested additions to the Google App Engine platform has been a SQL database, and more than 10,000 developers have signed up for the Google Cloud SQL service since the preview launch last October. &lt;/span&gt;&lt;a href="https://developers.google.com/cloud-sql/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Cloud SQL&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; automatically provisions and maintains your databases, allowing you to focus on your applications and services. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Since launch, we’ve been busy working on improving the performance, and adding features like scheduled backups and multihoming to increase availability and improve performance. We are also now offering more powerful instances with up to 4GB of RAM.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Today we are announcing our &lt;/span&gt;&lt;a href="https://developers.google.com/cloud-sql/docs/billing" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;pricing&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, which will take effect on June 12th with two options to choose from:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style="font-weight: bold; margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;For developers who want to try out the service, or who have lightweight applications - we offer a flexible “per use” pricing scheme. For example, you can get started with a cloud hosted MySQL database for around a dollar per month. You pay for just what you use.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style="margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="font-weight: bold; list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;For developers with more traffic, there are packages that offer a discount and help you predict your costs in advance.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Cloud SQL is currently in limited preview. If you want to give us a try, start here &lt;/span&gt;&lt;a href="https://developers.google.com/cloud-sql/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;https://developers.google.com/cloud-sql/.&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by Joe Faith on behalf of the Google Cloud SQL team&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-6093501885231040898?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/GBCsXMVi1OM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6093501885231040898/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6093501885231040898" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6093501885231040898?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6093501885231040898?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/GBCsXMVi1OM/cloud-sql-pick-plan-that-fits-your-app.html" title="Cloud SQL: pick the plan that fits your app" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/05/cloud-sql-pick-plan-that-fits-your-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8FRn0_fSp7ImA9WhVVFUw.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8375401675151597202</id><published>2012-05-08T14:33:00.000-07:00</published><updated>2012-05-08T14:33:37.345-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-08T14:33:37.345-07:00</app:edited><title>Looking for search? Find it on Google App Engine</title><content type="html">&lt;b id="internal-source-marker_0.850047857966274"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;For almost as long as we can remember, full text search has been one of the &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=217&amp;amp;colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log" target="_blank"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;top feature requests&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; for Google App Engine. Since our &lt;/span&gt;&lt;a href="http://www.youtube.com/watch?v=7B7FyU9wW8Y" target="_blank"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;talk at Google I/O last year&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, we’ve been hard at work getting search ready for our developers, and today we’re happy to announce that we are making it available as an Experimental feature. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.850047857966274"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/docs/python/search/overview" style="font-weight: bold;" target="_blank"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Search API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, like many other features of Google App Engine, allows you to take advantage of parts of Google’s infrastructure to add full text search to your application. This release includes a host of features including searching specific fields and ranges as well as more advanced features like scoring and snippeting. Whether you want to index products and search price ranges or just match keywords over articles and comments, the Search API is ready for you to test drive. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;To help you start integrating search into your application, we’ve created a &lt;a href="http://code.google.com/p/google-app-engine-samples/source/browse/trunk/search" target="_blank"&gt;sample application&lt;/a&gt; and walkthrough and documented our &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/list?can=2&amp;amp;q=Component%3DFullTextSearch+&amp;amp;sort=component&amp;amp;colspec=ID+Type+Component+Status+Stars+Summary+Language+Priority+Owner+Log&amp;amp;cells=tiles" style="font-weight: bold;" target="_blank"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;known issues&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. We are extending a limited &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/docs/python/search/overview#Quotas" style="font-weight: bold;" target="_blank"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;free quota&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; for testing during our Experimental period. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;As always, we’re grateful to all of our trusted testers for their patience and feedback in preparation for this launch, and we look forward to your feedback on the groups. Happy searching (and finding)!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by the Google App Engine Full Text Search Team&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8375401675151597202?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/xJXilG0DMCc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8375401675151597202/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8375401675151597202" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8375401675151597202?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8375401675151597202?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/xJXilG0DMCc/looking-for-search-find-it-on-google.html" title="Looking for search? Find it on Google App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>9</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/05/looking-for-search-find-it-on-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIDRXc4eSp7ImA9WhVWE00.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1331088564746736645</id><published>2012-04-24T14:31:00.000-07:00</published><updated>2012-04-24T14:56:14.931-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-24T14:56:14.931-07:00</app:edited><title>App Engine 1.6.5 Released</title><content type="html">April showers -- and &lt;a href="http://www.flickr.com/photos/philmcgrew/6926707884/" target="_blank"&gt;a bit more than showers&lt;/a&gt; -- have kept us happily inside working away on our fourth release of this year (we are really looking forward to those flowers). Today’s release includes some updates to the Datastore and the runtimes, new features for the Images API, and more!&lt;br /&gt;
&lt;h2&gt;Datastore&lt;/h2&gt;We’ve introduced an experimental type of query, &lt;a href="https://developers.google.com/appengine/docs/python/datastore/queries#Query_Projection" target="_blank"&gt;projection queries&lt;/a&gt;, in the Datastore. For the SQL fans amongst us, this is similar to queries of the form:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;SELECT Property1, Property2 FROM MyEntity ORDER BY Property3
&lt;/pre&gt;&lt;br /&gt;
Projection queries have the same cost and performance characteristics as keys-only queries but return entity objects populated only with the requested properties.&lt;br /&gt;
We are also adding several other Datastore features in this release:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Each entity group now has a numeric version property that strictly increases on every entity group change. You can use this counter, for example, to easily and consistently cache the results of an ancestor query, such as the count of all entities in an entity group (&lt;a href="https://developers.google.com/appengine/docs/java/datastore/metadataqueries#entity_group" target="_blank"&gt;Java&lt;/a&gt;®, &lt;a href="https://developers.google.com/appengine/docs/python/datastore/metadataqueries#entity_group" target="_blank"&gt;Python&lt;/a&gt; examples).&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Backup_And_Restore" target="_blank"&gt;Datastore Admin&lt;/a&gt; now allows you to restore individual Kinds from an existing backup, abort in-progress backups, and view more detailed backup and restore information.&lt;/li&gt;
&lt;li&gt;For Python users, the &lt;code&gt;@db.transactional&lt;/code&gt; decorator now supports concurrent transactions. We’ve also expanded the options available for the &lt;code&gt;db.run_in_transtion_options()&lt;/code&gt; function.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Images API&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="https://developers.google.com/appengine/docs/python/images/overview" target="_blank"&gt;Images API&lt;/a&gt; can now access image objects stored in Google Cloud Storage.&lt;/li&gt;
&lt;li&gt;The URLs generated by &lt;code&gt;&lt;a href="https://developers.google.com/appengine/docs/python/images/functions#Image_get_serving_url" target="_blank"&gt;get_serving_url()&lt;/a&gt;&lt;/code&gt;/&lt;code&gt;&lt;a href="https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/images/ImagesService#getServingUrl(com.google.appengine.api.blobstore.BlobKey, int, boolean)" target="_blank"&gt;getServingUrl()&lt;/a&gt;&lt;/code&gt; that make use of our high-speed image serving infrastructure can now be generated to serve over HTTPS.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Task Queue&lt;/h2&gt;We are looking for Trusted Testers for Task Queue Statistics. Task Queue Statistics allows you to fetch statistics and information about your task queue from within your application. &lt;a href="https://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dEVrN2p5d2pyRGRwcU5CNHo4empib0E6MQ" target="_blank"&gt;Apply now to be a Trusted Tester.&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Request Headers&lt;/h2&gt;In this release, we are including additional &lt;a href="https://developers.google.com/appengine/docs/java/runtime#Request_Headers" target="_blank"&gt;request headers&lt;/a&gt; to provide more detailed information about the origin of a request. We’ve added &lt;a href="https://developers.google.com/appengine/docs/python/runtime#Request_Headers" target="_blank"&gt;Region, City and LatLng&lt;/a&gt; headers to each request where this information can be inferred from the IP address.&lt;br /&gt;
&lt;h2&gt;Java&lt;/h2&gt;&lt;p&gt;Finally, an important piece of news for our Java developers: the &lt;code&gt;&amp;lt;threadsafe&amp;gt;&lt;/threadsafe&gt;&lt;/code&gt; element is now required in &lt;code&gt;appengine-web.xml&lt;/code&gt; file; omitting it will cause an error in the dev appserver.&lt;/p&gt;&lt;p&gt;As always, send us feedback in our &lt;a href="https://groups.google.com/forum/?fromgroups#!forum/google-appengine" target="_blank"&gt;Google Group&lt;/a&gt;, send us technical questions on &lt;a href="http://stackoverflow.com/questions/tagged/google-app-engine" target="_blank"&gt;Stack Overflow&lt;/a&gt;, and read the complete release notes for all the new features and fixes in this release for &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes" target="_blank"&gt;Java&lt;/a&gt;, &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" target="_blank"&gt;Python&lt;/a&gt;, and &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes" target="_blank"&gt;Go&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;span class="byline-author"&gt;Posted by the App Engine Team&lt;/span&gt;&lt;br /&gt;
&lt;span class="byline-author"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="byline-author"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span class="byline-author"&gt;&lt;b id="internal-source-marker_0.4298951125238091"&gt;&lt;span style="background-color: white; font-family: Arial; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-size: x-small;"&gt;Java is a registered trademark of Oracle and/or its affiliates.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1331088564746736645?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/ikP4xac5rW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1331088564746736645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1331088564746736645" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1331088564746736645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1331088564746736645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/ikP4xac5rW4/app-engine-165-released.html" title="App Engine 1.6.5 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/04/app-engine-165-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAESH8yeip7ImA9WhVXGUg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1541833185067964223</id><published>2012-04-20T12:38:00.000-07:00</published><updated>2012-04-20T12:38:29.192-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-20T12:38:29.192-07:00</app:edited><title>App Engine and Google’s new Deprecation Policy</title><content type="html">&lt;b id="internal-source-marker_0.026125260395929217"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;As you may have seen on the &lt;/span&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://googledevelopers.blogspot.com/2012/04/changes-to-deprecation-policies-and-api.html"&gt;Google Developer’s Blog&lt;/a&gt; &lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;today, Google is changing the Deprecation Policy for all Developer products as a matter of corporate policy. We would like to clarify how this impacts App Engine and you, our customers. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Once the new deprecation policy takes effect, App Engine’s new Deprecation Period will be one year, the longest deprecation period Google offers across APIs and developer products. Practically, this means that &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/docs/features"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Production Features&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; deprecated after the new policy takes effect will continue to be supported at least until 2015 or for one year, whichever period is longer. In our four year history, we have only &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2012/04/masterslave-datastore-thanks-for-all.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;deprecated one Production Feature, the Master/Slave Datastore&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, and in that case it was in favor of a &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2012/01/happy-birthday-high-replication.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;more reliable alternative&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. &amp;nbsp;We take considerable care that once a feature has graduated from Experimental status it will stand the test of time, and we do not anticipate frequent deprecations in the future. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Although the official deprecation period is one year, at a minimum, if it does become necessary to deprecate a feature of App Engine we will give our customers enough advance notice to adjust their applications accordingly. Some very large customers might require more than one year; please &lt;/span&gt;&lt;a href="http://www.google.com/enterprise/cloud/contact.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;contact us&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and we’d be happy to work with you to understand your specific needs.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We want to reiterate that Google strongly supports App Engine and is excited about its steady growth. &amp;nbsp;You can see the change in our &lt;/span&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://developers.google.com/appengine/upcoming_terms"&gt;upcoming new Terms of Service&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; (which will take effect July 20, 2012) and as always if you have any questions or comments, please let us know in our &lt;/span&gt;&lt;a href="http://groups.google.com/group/google-appengine"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by Greg D’Alesandre, Senior Product Manager, App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1541833185067964223?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/4M_72T0MKHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1541833185067964223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1541833185067964223" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1541833185067964223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1541833185067964223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/4M_72T0MKHw/app-engine-and-googles-new-deprecation.html" title="App Engine and Google’s new Deprecation Policy" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/04/app-engine-and-googles-new-deprecation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AEQH0_cSp7ImA9WhVQFUo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3496204245656336315</id><published>2012-04-04T13:35:00.000-07:00</published><updated>2012-04-04T13:35:01.349-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-04T13:35:01.349-07:00</app:edited><title>Master/Slave Datastore, thanks for all your hard work</title><content type="html">&lt;span id="internal-source-marker_0.8859010271262378"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;b id="internal-source-marker_0.8859010271262378" style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Almost 4 years after &lt;/span&gt;&lt;a href="http://googleblog.blogspot.com/2008/04/developers-start-your-engines.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;launch&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, we’ve seen fantastic growth both in Google App Engine and the apps that run on it. And although the Master/Slave Datastore was a big part of our early success, it's time to announce the deprecation of the Master/Slave Datastore in favor of the High-Replication Datastore (HRD). HRD has provided us with &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2012/01/happy-birthday-high-replication.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;higher availability and better, more predictable performance&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. Many upcoming features will be HRD-only and we strongly encourage you to migrate all your applications as soon as possible &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/docs/adminconsole/migration"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;using the migration tools&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;found in the Application Settings tab of the Administration Console. The deprecation period will follow the guidelines set in our &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/terms#Deprecation"&gt;&lt;span style="background-color: white; color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;terms of service&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. &lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;If you have any questions or concerns, please contact us at &lt;/span&gt;&lt;span style="color: #1155cc; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;ms-datastore-deprecation@googlegroups.com&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline;"&gt;&lt;span style="white-space: pre-wrap;"&gt;- Posted by Max Ross, on behalf of the App Engine Datastore Team   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3496204245656336315?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/mJbWcjlyBrY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3496204245656336315/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3496204245656336315" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3496204245656336315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3496204245656336315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/mJbWcjlyBrY/masterslave-datastore-thanks-for-all.html" title="Master/Slave Datastore, thanks for all your hard work" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/04/masterslave-datastore-thanks-for-all.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDQn46cSp7ImA9WhVQE0U.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1963827306420778755</id><published>2012-04-01T01:32:00.001-07:00</published><updated>2012-04-02T09:16:13.019-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-02T09:16:13.019-07:00</app:edited><title>Happy April Fools! The Google Cloud API: cloud coverage anywhere, anytime</title><content type="html">&lt;span id="internal-source-marker_0.8515096427872777"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We are thrilled to announce a project the App Engine team has been working on for a long time: the Cloud API. The Cloud API allows developers unprecedented control over cloud deployments in their area.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
We think the Cloud API is a huge step forward for developers. For the first time, developers can simply and easily gain cloud coverage in locations around the globe within minutes. With the Cloud API developers can drive increased cloud awareness for a wide range of new users and enterprises. This will not only allow totally new applications in the agricultural and metrology sectors to flourish but also provide a welcome addition to mobile, social and gaming. The Cloud API provides the scalability you would expect from App Engine with clouds seeded on demand and dispersed when they are no longer needed. Clouds are created using cloud engines which are specially designed jet engines with three fins.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;b&gt;&lt;img height="247px;" src="https://lh3.googleusercontent.com/Kph3in_lH-Jf_DuVpxA66vj4O85Uk2Jchd-nI6IsobegvgKIRYAasuHSNPoH_SESm-BieznNvAlGMfa9dtUE_qoUU8ZkVpGjrIJL0vyi3XW33TNwqek" width="276px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: x-small; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;A Cloud Deployed Using the Cloud API. Imagery ©2012 GeoEye, DigitalGlobe, Cnes/Spot Image, TerraMetrics&lt;/i&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The Cloud API is supported in Python, Java and Go, check out the &lt;/span&gt;&lt;a href="http://gaeaprilfools2012.appspot.com/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Getting Started Guide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; to find out how simple it is to integrate clouds into your applications.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;b&gt;&lt;img height="355px;" src="https://lh3.googleusercontent.com/3abSZsLbjycS4R8rfdRf9ZO0JbRAjENMdCoh_fNJ8QdVn9D4YbsuUmjW3BDfOJ-87D7VXq0H3n2EQY1oAcYtYv6xaewtkA7Eh5LV_9IZYL0Fe27WyKg" width="425px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;As with other parts of App Engine, the Cloud API is backed by an SLA of 99.95% uptime along with an accuracy of ±5m. Clouds come in configurable sizes ranging up to 5m&lt;sup&gt;3&lt;/sup&gt; for free customers with paid and premier customers able to extend clouds to 10km&lt;sup&gt;3&lt;/sup&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Pricing for the Cloud API are based on the likelihood of cloud in the location the cloud is requested. A cloud pricing calculator will be released in the coming days, however example pricing is provided below: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="font-weight: bold;"&gt;
&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-image: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; width: 475px;"&gt;&lt;colgroup&gt;&lt;col width="*"&gt;&lt;/col&gt;&lt;col width="*"&gt;&lt;/col&gt;&lt;col width="*"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Example Location&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Likelihood of Cloud&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Price/Cloud Hour/10m&lt;sup&gt;3&lt;/sup&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 29px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Seattle, WA, US&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;55%&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Free*&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Brisbane, AU&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;20%&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;$0.10&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Yuma, AZ, US&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;10%&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;$0.20&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;*Removal of cloud from high cloud areas such as Seattle has a cost of $0.10 per Cloud Hour per 10m&lt;sup&gt;3&lt;/sup&gt;. &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;If you have any questions or comments send them to the &lt;/span&gt;&lt;a href="http://groups.google.com/group/google-appengine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. We'd love to hear from you.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by the App Engine team&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1963827306420778755?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/-WKFiCeRG7w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1963827306420778755/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1963827306420778755" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1963827306420778755?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1963827306420778755?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/-WKFiCeRG7w/google-cloud-api-cloud-coverage.html" title="Happy April Fools! The Google Cloud API: cloud coverage anywhere, anytime" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>9</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/04/google-cloud-api-cloud-coverage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYERng7cSp7ImA9WhVQEEg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2932041577699291390</id><published>2012-03-29T12:41:00.000-07:00</published><updated>2012-03-29T12:41:47.609-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-29T12:41:47.609-07:00</app:edited><title>Announcing App Engine Research Awards</title><content type="html">&lt;b id="internal-source-marker_0.5036937007680535"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;One of the most rewarding things about working on App Engine is watching our customers use the platform in new and unexpected ways. We're lucky to have a front row seat to the growth and success of so many innovative new projects, and in that spirit, we are pleased to announce the Google App Engine Research Awards.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;This new awards program will &lt;/span&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;support 15 projects by providing App Engine credits in the amount of $60,000 to each&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; project for one year, additional Google services such as Google Cloud Storage will be coming soon as part of the program.&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We are committed to supporting scientific and academic research and welcome university faculty from all fields to participate. &amp;nbsp;Award projects may focus on activities such as social or economic experiments, developing academic aids, analysis of gene sequence data, or using App Engine MapReduce in ways we hadn’t even considered! &amp;nbsp;If your research has the potential to advance discovery, generates heavy data loads or is in need of an easy-to-use, easy-to-scale platform, we encourage you to submit your proposal. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;You can find details on how to apply on our &lt;/span&gt;&lt;a href="http://research.google.com/university/relations/appengine/index.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Research website&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. Applications will be accepted until &lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;11:59 p.m. PST, May 11, 2012. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;- Posted by the App Engine Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2932041577699291390?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/EzSNsN7axJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2932041577699291390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2932041577699291390" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2932041577699291390?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2932041577699291390?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/EzSNsN7axJs/announcing-app-engine-research-awards.html" title="Announcing App Engine Research Awards" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>2</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/03/announcing-app-engine-research-awards.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8MRn0zfyp7ImA9WhVRGUg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4725390038792713533</id><published>2012-03-28T09:08:00.000-07:00</published><updated>2012-03-28T09:08:07.387-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-28T09:08:07.387-07:00</app:edited><title>Go Version 1 now on App Engine</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-6qQrpCpHwsQ/T3MscypyVlI/AAAAAAAAALQ/wrYfDNTsq3U/s1600/gophergoggles33.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-6qQrpCpHwsQ/T3MscypyVlI/AAAAAAAAALQ/wrYfDNTsq3U/s200/gophergoggles33.jpeg" width="169" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b id="internal-source-marker_0.26783485943451524"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Today, with the &lt;/span&gt;&lt;a href="http://blog.golang.org/2012/03/go-version-1-is-released.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;release of Go 1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, a stable version of the Go language, libraries and tools, we're releasing a new Google App Engine &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;SDK for the Go runtime&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.26783485943451524"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Go is a statically typed, compiled language with a dynamic and lightweight feel. With Go you get the efficiency benefits of being close to the machine–your programs compile to native code–with the productivity and quick turnaround of a scripting language. Go apps are easy to write, start fast, and run fast. There has never been a better way to build scalable high-performance cloud applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The Go runtime provides clean, idiomatic &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/go/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Go APIs&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; for the popular App Engine services (Blobstore, Datastore, Memcache, and so on) and a straightforward development process. As with&amp;nbsp;the Python and Java SDKs, Go apps can be tested locally with the &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/go/tools/devserver.html" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;development server&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and, most convenient, the development server automatically compiles your Go code, so to test a change all you need to do is to refresh your browser.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The Go 1 SDK also brings improvements and bug fixes. It uses the new Go 1 &lt;/span&gt;&lt;a href="http://golang.org/pkg/time/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;time API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; throughout the SDK, provides a MultiError type for error handling in batch operations, and &amp;nbsp;supports Datastore Cursors and the &lt;/span&gt;&lt;a href="http://developers.google.com/appengine/docs/go/xmpp/overview" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;XMPP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="https://developers.google.com/appengine/docs/go/log/reference" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Log&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; services. See the &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;release notes&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; for the details.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Although the Go App Engine runtime is still in experimental status for now, the language stability offered by Go 1 is a major milestone. To learn more about Go 1, see the announcement post at the &lt;/span&gt;&lt;a href="http://blog.golang.org/2012/03/go-version-1-is-released.html" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Go blog&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and the wealth of documentation at &lt;/span&gt;&lt;a href="http://golang.org/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;golang.org&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by the Go and App Engine Teams&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4725390038792713533?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/FiypR2WGhkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4725390038792713533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4725390038792713533" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4725390038792713533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4725390038792713533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/FiypR2WGhkI/go-version-1-now-on-app-engine.html" title="Go Version 1 now on App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-6qQrpCpHwsQ/T3MscypyVlI/AAAAAAAAALQ/wrYfDNTsq3U/s72-c/gophergoggles33.jpeg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/03/go-version-1-now-on-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcFRHg9eSp7ImA9WhVRGEU.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8009636280600030837</id><published>2012-03-27T13:26:00.000-07:00</published><updated>2012-03-27T13:26:55.661-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-27T13:26:55.661-07:00</app:edited><title>App Engine 1.6.4 Released</title><content type="html">&lt;span id="internal-source-marker_0.09177301707677543"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine’s march of progress continues with another release that’s full of new features, system improvements, and bug fixes. As we spring forward into pre-&lt;/span&gt;&lt;a href="https://developers.google.com/events/io/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google I/O&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; season, we’re keeping our focus on product polish and this release is a shining example.&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;System Wide Changes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style="margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/adminconsole/applicationsettings#Retain_Application_Logs"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Logs&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - &lt;/span&gt;&lt;b id="internal-source-marker_0.09177301707677543"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Now that the new settings for log storage have been available for one month, logs over the limit you specify will be deleted. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #b7b7b7; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style="margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/datastore/stats"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Datastore Index Stats&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - The Datastore Statistics page in the Admin Console now displays the storage used by your Datastore Indexes in addition to your Datastore Entities.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/adminconsole/migration#Using_the_Migration_Tool"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Blobstore Migration&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - The Datastore Migration tool now includes an experimental option which allows you to migrate your Blobstore objects during the migration process from M/S to HRD. We strongly encourage all applications to migrate to HRD.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/adminconsole/datastoreadmin"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Datastore Backup to Google Cloud Storage&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - In 1.6.3, we launched backup and restore to Blobstore, and in this release we’ve added the ability to backup your data to Google Cloud Storage.&lt;/span&gt;&lt;span style="text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/memcache/overview"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Memcache viewer&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - We’ve introduced the ability to view Memcache statistics and examine memcache entries by key. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/blobstore/functions"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Serve objects from Google Cloud Storage&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - You can now serve blobs directly from Google Cloud Storage as well as Blobstore. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Runtime Changes&lt;/span&gt;&lt;ul style="font-weight: bold; margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/backends/overview#background_threads"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Threads&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - Both Java and Python now offer background threads when running on backends as an experimental feature. Additionally, we’ve added the ability to use threads for frontend requests in Java to match Python 2.7.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Datastore Framework Changes&lt;/span&gt;&lt;ul style="font-weight: bold; margin-bottom: 0pt; margin-top: 0pt;"&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/ndb/"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;NDB for Python&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; - The NDB API has graduated from experimental and is now a fully supported feature. This next-generation datastore API &lt;/span&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;improves data modeling and querying and has been built from the ground up to support an asynchronous computing model. &lt;/span&gt;&lt;span style="text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;JPA 2 and JDO 3 for Java - We have made significant improvements to App Engine’s DataNucleus plugin. This experimental release of version 2.0 of the plugin adds support for JPA 2, JDO 3, and contains over 40 bug fixes. Check out the full release notes &lt;/span&gt;&lt;a href="http://code.google.com/p/datanucleus-appengine/source/browse/branches/2_0_0/dist/RELEASE_NOTES.ORM"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;And that’s not all, you can read about all the new features and bug fixes in our release notes (&lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Python&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Java&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;). Send all your feedback to our &lt;/span&gt;&lt;a href="https://groups.google.com/forum/#!forum/google-appengine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, and if you have coding questions, find help from us and other talented developers on &lt;/span&gt;&lt;a href="http://stackoverflow.com/questions/tagged/google-app-engine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Stack Overflow&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;- Posted by the App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8009636280600030837?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/KK4Csl5oYrs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8009636280600030837/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8009636280600030837" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8009636280600030837?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8009636280600030837?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/KK4Csl5oYrs/app-engine-164-released.html" title="App Engine 1.6.4 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>7</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/03/app-engine-164-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFRno8eyp7ImA9WhVRFEk.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8495754177722610106</id><published>2012-03-22T12:15:00.000-07:00</published><updated>2012-03-22T12:15:17.473-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T12:15:17.473-07:00</app:edited><title>App Engine Community Update</title><content type="html">&lt;span id="internal-source-marker_0.9592890017665923"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;One of the best things about App Engine is our lively developer community. This week, we’re officially moving technical and development questions to &lt;/span&gt;&lt;a href="http://stackoverflow.com/questions/tagged/google-app-engine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Stack Overflow&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and retiring the language-specific App Engine Google groups. With this week’s move, we wanted to take a moment to highlight some of the best ways to engage with the community.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Technical &amp;amp; Development Questions&lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;For technical and development questions big and small, add the &lt;/span&gt;&lt;a href="http://stackoverflow.com/questions/tagged/google-app-engine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;google-app-engine tag&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; to your App Engine questions on Stack Overflow. You can also join our &lt;/span&gt;&lt;a href="http://developer.google.com/events" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;hangouts or office hours&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; to talk directly with App Engine team members. &lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Google+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Many community and &lt;/span&gt;&lt;a href="https://plus.google.com/u/0/111042085517496880918/posts/aif8jDGM5US" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;team members&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; are active on Google+, using the &lt;/span&gt;&lt;a href="https://plus.google.com/s/%23appengine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;#appengine&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; hashtag. Our &lt;/span&gt;&lt;a href="https://plus.google.com/111042085517496880918/posts/Q2hw1NR7rer" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;weekly community updates&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and chats with App Engine &lt;/span&gt;&lt;a href="https://plus.google.com/110554344789668969711/posts/BzXr8fZHzFL" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;community&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="https://plus.google.com/111042085517496880918/posts/3RpQtM6SzS8" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;team members&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; are a great source of tips and tricks and to learn more about what our&lt;/span&gt;&lt;/span&gt;&lt;b id="internal-source-marker_0.6417831785511225"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="https://plus.google.com/111042085517496880918/posts/8CHm8KKqXWU"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;community members&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;are up to. &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Groups&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;For general discussion about the platform, use the &lt;/span&gt;&lt;a href="https://groups.google.com/forum/#!forum/google-appengine" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google App Engine group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Happy coding!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by the App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8495754177722610106?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/QF8_DHZM7zg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8495754177722610106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8495754177722610106" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8495754177722610106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8495754177722610106?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/QF8_DHZM7zg/app-engine-community-update.html" title="App Engine Community Update" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/03/app-engine-community-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8CQ309cCp7ImA9WhVSGE8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8737411406530386685</id><published>2012-03-15T09:11:00.000-07:00</published><updated>2012-03-15T09:11:02.368-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-15T09:11:02.368-07:00</app:edited><title>Using the updated Google Prediction API in App Engine applications</title><content type="html">&lt;span id="internal-source-marker_0.01934555033221841"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Although we can’t reliably compare its future-predicting abilities to a crystal ball, the &lt;/span&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="https://developers.google.com/prediction/"&gt;Google Prediction API&lt;/a&gt;&lt;/span&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; unlocks a powerful mechanism to use machine learning in your applications. &lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;The Prediction API allows developers to train their own predictive models, taking advantage of Google’s world-class machine learning algorithms. It can be used for all sorts of classification and recommendation problems from spam detection to message routing decisions. In the &lt;/span&gt;&lt;a href="http://googledevelopers.blogspot.com/2012/03/google-prediction-api-15-adds.html"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;latest release&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;, the Prediction API has added more detailed debugging information on trained models and a new &lt;/span&gt;&lt;a href="http://code.google.com/p/try-prediction/"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine sample&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;, which illustrates how to use the Google Prediction API for the Java and Python runtimes. &lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;To help App Engine developers get started with the prediction API, we’ve published an &lt;a href="https://developers.google.com/appengine/articles/prediction_service_accounts"&gt;article and walkthrough&lt;/a&gt; detailing how to create and manage predictive models in App Engine apps with simple authentication using OAuth2 and service accounts. Check out the walkthrough and let us know what you think on the &lt;a href="https://groups.google.com/forum/?fromgroups#!forum/google-appengine"&gt;group&lt;/a&gt;. Happy coding!&lt;/span&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;- Posted by the App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8737411406530386685?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/87PVgNZlHrs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8737411406530386685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8737411406530386685" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8737411406530386685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8737411406530386685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/87PVgNZlHrs/using-updated-google-prediction-api-in.html" title="Using the updated Google Prediction API in App Engine applications" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/03/using-updated-google-prediction-api-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFRXYzcSp7ImA9WhVTFEg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1459055499042000201</id><published>2012-02-28T10:51:00.000-08:00</published><updated>2012-02-28T10:51:54.889-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-28T10:51:54.889-08:00</app:edited><title>App Engine 1.6.3 Released</title><content type="html">&lt;b id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Our second release of this year will have you leaping into action to start using the new features immediately. What could be more exciting than a feature to support A/B testing on your app? Or DKIM signing when you send email from your Google Apps domain? This release has plenty of exciting changes to keep you busy on your extra day this year.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;1.6.3 Platform Changes:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;A new Experimental feature called &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/adminconsole/trafficsplitting.html"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Traffic Splitting&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; lets you send a percentage of your traffic to different versions of your app. Traffic can be split based either on IP or on cookie.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="list-style-type: disc; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;When an email is sent either from a user of a Google Apps domain from a request originating on that domain, or from an app administrator with an account on a Google Apps domain, a &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/mail/overview.html#DKIM"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;DKIM signature&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; will be automatically applied to the email. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;1.6.3 Admin Console Changes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;b id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;Billed applications can &lt;/span&gt;&lt;a href="http://code.google.com/appengine/articles/logging.html"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;now specify&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; the amount of storage used for logs and the duration of time these logs are stored (default is 90 days) as well as view the currently stored amount in the Admin Console. The first gigabyte of logs storage is free and additional storage will be charged at $0.24/G/month. These settings are now available, but additional storage will not be charged for at least 4 weeks, at that point any logs beyond the configured amount will be deleted.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;You can now manually shut down an instance in the &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/adminconsole/instances.html#The_Instances_View"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Instances view&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt; of the Admin Console.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;span style="vertical-align: baseline; white-space: pre-wrap;"&gt;The Logs Viewer for each request now provides a link to the instance that served that request (as long as the instance is still active).&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/ul&gt;
&lt;b id="internal-source-marker_0.9008843044284731"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;These are just some of the highlights in 1.6.3. As usual, our release notes for &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Python®&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Java®&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; contain the full list of all the new features and bug fixes, so be sure to check out all the exciting things we’ve been working hard to release this past month.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span class="byline-author"&gt;Posted by the App Engine Team&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1459055499042000201?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/WCtcMjdIwlI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1459055499042000201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1459055499042000201" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1459055499042000201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1459055499042000201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/WCtcMjdIwlI/app-engine-163-released.html" title="App Engine 1.6.3 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/02/app-engine-163-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CQHc7fip7ImA9WhVTE0s.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-5025036547303832759</id><published>2012-02-27T10:21:00.000-08:00</published><updated>2012-02-27T10:21:01.906-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-27T10:21:01.906-08:00</app:edited><title>Announcing the General Availability of the Python 2.7 Runtime for App Engine</title><content type="html">&lt;b id="internal-source-marker_0.6271523837931454"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;A few months ago we &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/10/app-engine-155-sdk-release.html"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;announced&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; an experimental version of the the Python&lt;/span&gt;&lt;span style="color: #222222; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;®&lt;/span&gt;&lt;span style="color: #222222; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;2.7 runtime for App Engine. Since then we’ve been hard at work fixing bugs and adding optimizations.&amp;nbsp;Today we’re happy to announce that this runtime has graduated from Experimental status and is a fully supported feature of App Engine.&amp;nbsp;To get started, download the latest &lt;/span&gt;&lt;a href="http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Python"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine SDK for Python&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and check out the &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/gettingstartedpython27/"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Getting Started Guide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We think the Python 2.7 runtime for App Engine is a great step forward for our developers. &amp;nbsp;First, it allows applications to take advantage of &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/python27/newin27.html#Concurrent_Requests"&gt;&lt;span style="background-color: white; color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;concurrent requests&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;, allowing you to build more performant and efficient applications. If your application wasn't fully utilizing the CPU, chances are that you'll be able to use concurrent requests to reduce the total number of instances and serve more with less.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;We've also added some of the most highly requested libraries: PIL, NumPy, and lxml are all part of the Python 2.7 runtime. These three libraries alone have been requested nearly 2,000 times. Check out our &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/tools/libraries27.html"&gt;&lt;span style="background-color: white; color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;updated list of supported libraries&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; and let us know &lt;/span&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/list"&gt;&lt;span style="background-color: white; color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;what libraries you would like us to add&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; (be sure to add the tag ‘[Python Library]’ to the summary).&lt;/span&gt;&lt;span style="background-color: white; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Whether you’re looking to migrate an existing application or build a new application, the Python 2.7 runtime is ready to go.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;If you have any questions or comments send them to the &lt;/span&gt;&lt;a href="https://groups.google.com/forum/?fromgroups#!forum/google-appengine"&gt;&lt;span style="background-color: white; color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine group&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. We'd love to hear from you.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: white; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img height="322px;" src="https://lh5.googleusercontent.com/ip6NwTRTblgBTXrnK7GXm7GsYV1Bg9GcEKxu4616b8mQJcLX89fxMIm-5IfbHzm979tGxioRbbhCDJkDN2K1WavZvZ1Zbd9y3mYQZZ5d-WYj10yuZZw" style="margin-left: auto; margin-right: auto;" width="402px;" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Python 2.7 launch cake&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.6271523837931454"&gt;&lt;span style="font-family: inherit;"&gt;Posted by Chris Ramsdale, PM Python 2.7 Runtime for App Engine&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="font-weight: bold; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-style: italic; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-size: x-small;"&gt;(Python and the Python logos are trademarks of the Python Software Foundation)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-5025036547303832759?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/eFqT-FUB9TQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/5025036547303832759/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=5025036547303832759" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5025036547303832759?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5025036547303832759?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/eFqT-FUB9TQ/announcing-general-availability-of.html" title="Announcing the General Availability of the Python 2.7 Runtime for App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/02/announcing-general-availability-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDSHs9cSp7ImA9WhRbFkg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4555042538438981900</id><published>2012-02-07T14:21:00.000-08:00</published><updated>2012-02-07T14:21:19.569-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-07T14:21:19.569-08:00</app:edited><title>The BugSense hybrid app: experiences using Clojure on Google App Engine</title><content type="html">&lt;span style="font-family: inherit; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today’s post comes to us from &lt;/span&gt;&lt;span style="font-family: inherit; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"&gt;Jon Vlachogiannis&lt;/span&gt;&lt;span style="font-family: inherit; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;span style="font-family: inherit; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"&gt;Panos Papadopoulos&lt;/span&gt;&lt;span style="font-family: inherit; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, founders of &lt;/span&gt;&lt;a href="http://www.bugsense.com/" style="font-family: inherit; font-weight: bold;"&gt;&lt;span style="color: #000099; font-style: italic; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;BugSense&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a mobile error analytics service. We hope you find their insights on using Clojure on Google App Engine informative. &lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.18339269538410008"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;BugSense is a cross-platform error analytics infrastructures for mobile devices. BugSense uses Google App Engine to power its backend, processing more than 1.6 million daily errors, generated by more than 45 million devices around the world. Chances are one of the applications installed on your smart phone (like &lt;/span&gt;&lt;a href="http://www.soundcloud.com/" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;SoundCloud&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; or &lt;/span&gt;&lt;a href="http://www.trulia.com/" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Trulia&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;) is already using BugSense.&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Problem&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lots of our clients want to optimize and protect their mobile apps (through code obfuscation) using &lt;/span&gt;&lt;a href="http://proguard.sourceforge.net/" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;ProGuard&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. ProGuard&lt;/span&gt;&lt;span style="background-color: white; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; creates more compact code, resulting in faster transfer across networks, faster loading, and smaller memory footprints. On top of that it makes programs and libraries harder to reverse-engineer.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However, because the Android Market doesn't automatically de-obfuscate of stack traces from ProGuard-ed apps, developers who want to analyse errors from their apps must get the stack trace from the Market, format it and use ProGuard locally. The whole process for just a single error could take more than 3 minutes, so we decided to add support for ProGuard to BugSense to make debugging easier and faster.&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Solution: Clojure and Python&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The main data-serving portion of our app is written in Python, our language of choice, but ProGuard&lt;/span&gt;&lt;span style="color: #666666; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;is an open source project in Java. For easier development, we ported parts of ProGuard to &lt;/span&gt;&lt;span style="font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a dynamic language belonging to the Lisp family that runs on the JVM. This allows us to “&lt;/span&gt;&lt;a href="http://paulgraham.com/avg.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;beat the averages&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;” by exploiting all the great features that a LISP language offers (such as &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Macro_(computer_science)" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;macros&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;and &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Exploratory_programming" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;exploratory programming&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;). Using Clojure and having access to a vast number of Java libraries assisted us in tackling the difficult problem of de-obfuscation, with great results. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Once we were done, we deployed using &lt;/span&gt;&lt;a href="https://github.com/gcv/appengine-magic" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;AppEngineMagic&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and now it's trivial (one click) for our users to de-obfuscate their stacktraces. Now we have the best of two worlds: Python for serving data and Java/Clojure for doing calculations, all in the same Google App Engine application. And it scales automatically and runs even faster than running ProGuard on your laptop!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;b&gt;&lt;img height="578px;" src="https://lh3.googleusercontent.com/sg_wxLOdWd0PBXqDB8HruvhoG3wppj_NZSorFlkgcyYN7On-HXynfbZAPlUBhBphgh3XKMKSBPlpDclFg_hfyowI932gj30Psu2nSfwKkCsly5Mo4m0" width="450px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Practically, that means that we can have a heterogeneous app on Google App Engine so that we can keep programming in our favourite language, Python, but still harness the tremendous wealth of Java libraries using Clojure. Running a hybrid app on App Engine is trivial since they share the same resources task queues, Datastore, and memcache. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However, because our app is implemented in multiple languages, we need to start two different local instances (one for Python and one for Clojure). We use a combination of mocks for both of the instances in order to emulate the hybrid app and their interaction in a local environment for development and testing. &lt;/span&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Google App Engine, a success factor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We started as a two-developer startup and our product rapidly became popular across the world. Building on Google App Engine helped us focus on product development and forget about infrastructure and administration, thus enabling us to focus more on our customers' needs. (And sleep tight at night.) Furthermore it helped us to keep costs low and iterate quickly.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To learn more about BugSense, check out our &lt;/span&gt;&lt;a href="http://www.bugsense.com/" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;website&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. If you have comments or questions about this post or just want to reach out directly, you can find us at &lt;/span&gt;&lt;a href="https://plus.google.com/117468621612200276461/posts" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;+jonromero&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; or &lt;/span&gt;&lt;a href="https://plus.google.com/103226772461872983128/posts" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;+bugsense&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4555042538438981900?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/nHwJebxPmFg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4555042538438981900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4555042538438981900" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4555042538438981900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4555042538438981900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/nHwJebxPmFg/bugsense-hybrid-app-experiences-using.html" title="The BugSense hybrid app: experiences using Clojure on Google App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/02/bugsense-hybrid-app-experiences-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YDRH4yeyp7ImA9WhRbEEg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3422127474274482924</id><published>2012-01-31T15:06:00.000-08:00</published><updated>2012-01-31T15:06:15.093-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T15:06:15.093-08:00</app:edited><title>App Engine 1.6.2 Released</title><content type="html">&lt;b id="internal-source-marker_0.5868992926552892"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Some of you may think of dragons as ferocious, treasure-hoarding, fire-breathing monsters. But the App Engine team is embracing the dragon as a symbol of fortune and good luck, and we are excited to announce our first release in the Year of the Dragon.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.5868992926552892"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Experimental Datastore Backup/Restore&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Using the Datastore Admin functionality in the Admin Console, you can now use the &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;experimental Datastore Backup/Restore tool&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to backup your Datastore to Blobstore. You can also select a backup to restore from. The Datastore Backup/Restore feature runs as a MapReduce within your application and counts against your Instance, Datastore Ops, and Storage quotas.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Django® + Cloud SQL &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;For Python fans of &lt;/span&gt;&lt;a href="https://developers.google.com/cloud-sql/" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google’s Cloud SQL&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (currently available in limited preview), the long awaited out-of-the-box &lt;/span&gt;&lt;a href="https://developers.google.com/cloud-sql/docs/django" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;support for the Django framework&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; has arrived and is now available as an experimental feature. Now you can easily use Cloud SQL within the Django framework as you would use any other SQL database.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;...And More &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Additional features available in 1.6.2 include: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;b id="internal-source-marker_0.5868992926552892"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="http://code.google.com/appengine/docs/python/channel/"&gt;&lt;span style="color: #1155cc; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;Channel API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;:&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Developers can now specify how long a channel token will last until it expires, with the default remaining two hours. Channel API quota is now measured both in calls to create a channel and the number of hours of channel time requested.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Task Queues&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: A new &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/taskqueue/overview-push.html#Task_Request_Headers"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;X-Appengine-TaskETA header&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; has been added which can be used to measure task delivery latency.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Blobstore&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: The &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/blobstore/overview.html#Making_Asynchronous_Requests"&gt;&lt;span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;"&gt;Python API for the Blobstore&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; now provides asynchronous API calls for creating upload URLs and fetching and deleting data.&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/ul&gt;
&lt;b id="internal-source-marker_0.5868992926552892"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The full list of our features and bug fixes can be found on our release notes (&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;Java&lt;/a&gt;, &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Python&lt;/a&gt;). Join in the discussion about this release and all things App Engine related in our &lt;/span&gt;&lt;a href="https://groups.google.com/forum/#!forum/google-appengine"&gt;&lt;span style="color: #1155cc; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by The App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3422127474274482924?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/cihIbeHto0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3422127474274482924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3422127474274482924" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3422127474274482924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3422127474274482924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/cihIbeHto0w/app-engine-162-released.html" title="App Engine 1.6.2 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/01/app-engine-162-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDRH8zeyp7ImA9WhRUFkw.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6652368267107508213</id><published>2012-01-26T13:47:00.000-08:00</published><updated>2012-01-26T13:47:55.183-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T13:47:55.183-08:00</app:edited><title>My summer with the Google App Engine Team</title><content type="html">&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.6802192865870893"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today’s post is contributed by our Summer 2011 team intern, Chris Bunch. Chris did some great work on our Logs and MapReduce APIs and is also the first “App Engine Triple Crown” winner for developing the Experimental Logs Reader API in Python, Java and Go simultaneously. &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Four years ago, I was a brand-new Ph.D. student at the University of California, Santa Barbara and when our research group (the &lt;/span&gt;&lt;a href="http://www.cs.ucsb.edu/~ckrintz/racelab.html"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;RACELab&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;) heard about Google App Engine, we were intrigued. We thought it presented a new model that enabled apps to scale the right way without severely constricting the types of programs users would write. &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;b id="internal-source-marker_0.6802192865870893"&gt;&lt;div style="display: inline !important;"&gt;
&lt;b id="internal-source-marker_0.6802192865870893"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But we wanted to experiment with the core functionality of App Engine: the APIs, the scheduler, etc., and so we built &lt;/span&gt;&lt;a href="http://appscale.cs.ucsb.edu/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;AppScale&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, an open-source implementation of the Google App Engine APIs that allows users to deploy applications written in Python, Java, and Go to the &lt;/span&gt;&lt;a href="http://appscale.cs.ucsb.edu/infrastructure.html"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;infrastructure of their choice&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/b&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Wherever possible, we implement support for the App Engine APIs with alternative open-source technologies. We’ve added support for &lt;/span&gt;&lt;a href="http://appscale.cs.ucsb.edu/datastores.html"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;nine different databases&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, database-agnostic transactions, a &lt;/span&gt;&lt;a href="http://active-cloud-db.appspot.com/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;REST interface&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; that users of any programming language can communicate with (via an App Engine app), and the ability to &lt;/span&gt;&lt;a href="http://www.neptune-lang.org/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;run high performance computing programs&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; over the whole thing and talk to it from your App Engine app. And here’s my favorite part - it all deploys automatically! You don’t need to tell it what block size you want for the distributed file system, or the size of the read buffers: we configure the necessary services automatically. Since AppScale is completely open source, if you don’t like the defaults, change them!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;After creating our own system to run Google App Engine apps, I wanted to see how Google does it. Therefore, I decided to become an intern on the App Engine team and see if I could give them (and by extension, the App Engine community) something amazing over the summer. I started off with some work on the MapReduce API, making the &lt;/span&gt;&lt;a href="http://code.google.com/p/appengine-mapreduce/source/browse/#svn%2Ftrunk%2Fpython%2Fdemo"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;sample app&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; much easier to use and prettier all around. I also made a &lt;/span&gt;&lt;a href="http://www.youtube.com/watch?v=3OMH63DDqvc"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;YouTube video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; showing how it all works and how easy it is to run MapReduce jobs over App Engine. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I then looked at a recurring question that App Engine users encounter: “How can I get my logging information for my application to answer data analytic questions?” It was an excellent problem to tackle, as we have users who want to be able to determine application-specific queries that Google Analytics or the Admin Console don’t answer. Currently users have to use &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;appcfg&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to grab all their application’s data to a remote machine and run some analysis script over it.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To solve this problem, I created the &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/python/logservice/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Logs API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, which gives applications programmatic access to their logs from within App Engine itself. Applications can use it to query small numbers of logs within a single request, and they can utilize the Pipeline, MapReduce, or Backends APIs if they have lots of logs they want to analyze. Logs contain both request-level information (e.g., the URL accessed, the HTTP response code returned) as well as logging info generated by the application (the &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;logging&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; module in Python, the &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Logger&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; class in Java, and the logging methods that Go’s &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;appengine&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; package provides). The Logs API is available for use as of App Engine 1.6.1 by programmers using the Python, Java, or Go runtimes, in both the production environment and the local SDK.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I had a great time putting the Logs API together, and had a unique experience interning with the App Engine team. Programming in Python, Java, and Go on a daily basis was an exciting new challenge, and I loved it!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;b&gt;&lt;img height="300" src="https://lh4.googleusercontent.com/FjXi4mIqEZG3qQkf0RP8h6OYC2kTLiiJldofb51knQQOyxbK59Q8TLdsdPJWn3jEx-L9Q9XxUYvATqCqQ9XEszn04VbmW957r_kmAChlUEGkH2JbG6o" width="400" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Interested in interning with the App Engine team? Check out &lt;/span&gt;&lt;a href="http://google.com/students" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-style: italic; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;google.com/students&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; for more information on internships.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-6652368267107508213?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/v50TwBq3RBc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6652368267107508213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6652368267107508213" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6652368267107508213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6652368267107508213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/v50TwBq3RBc/my-summer-with-google-app-engine-team.html" title="My summer with the Google App Engine Team" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/01/my-summer-with-google-app-engine-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8GSH46fSp7ImA9WhRUEE0.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-274223758526075641</id><published>2012-01-19T13:17:00.000-08:00</published><updated>2012-01-19T13:17:09.015-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-19T13:17:09.015-08:00</app:edited><title>Google Cloud Storage: concurrency controls and deeper App Engine integration</title><content type="html">&lt;i&gt;Cross posted from the &lt;a href="http://googlecode.blogspot.com/2012/01/google-cloud-storage-concurrency.html"&gt;Google Code Blog&lt;/a&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://developers.google.com/storage/"&gt;Google Cloud Storage&lt;/a&gt; is a &lt;a href="https://developers.google.com/storage/docs/sla"&gt;robust&lt;/a&gt;, high-performance service that enables developers and businesses to use Google’s infrastructure to store and serve their data. Today, we’re announcing a new feature that gives you greater control over concurrent writes to the same object, and the availability of an App Engine Files API that makes it easier to read and write data from Java App Engine applications.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Write concurrency control&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A number of our customers have asked us for greater control over concurrent writes, in order to implement features like strongly consistent write operations and distributed locking semantics in the cloud. In response to your feedback, we’re announcing the release of &lt;a href="https://developers.google.com/storage/docs/developer-guide#versions"&gt;version-based concurrency control&lt;/a&gt;. Every time you update an object, it gets assigned a 32-bit, monotonically increasing sequence number. This version number is returned as a header with every GET or HEAD request. You can then use a conditional write operation to manage concurrent updates to the object (for example, when you want read-modify-write semantics). This feature is currently experimental.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;AppEngine Files API for Java applications&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Last fall, we &lt;a href="http://googlecode.blogspot.com/2011/10/google-cloud-storage-is-out-of-code.html"&gt;announced&lt;/a&gt; the ability to read and write your Google Cloud Storage data using the App Engine Files API for Python applications. Today, we’re making the &lt;a href="http://code.google.com/appengine/docs/java/googlestorage/"&gt;Files API available to Java App Engine applications&lt;/a&gt; too. This feature is currently experimental, and we’ll continue to enhance it in the months to come.&lt;br /&gt;
&lt;br /&gt;
As always, we welcome your feedback in our &lt;a href="https://groups.google.com/group/gs-discussion"&gt;discussion group&lt;/a&gt;. If you haven’t tried Google Cloud Storage yet, you can sign up and get started &lt;a href="https://developers.google.com/storage/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-274223758526075641?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/qJSP-6GgyyU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/274223758526075641/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=274223758526075641" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/274223758526075641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/274223758526075641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/qJSP-6GgyyU/google-cloud-storage-concurrency.html" title="Google Cloud Storage: concurrency controls and deeper App Engine integration" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/01/google-cloud-storage-concurrency.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFSHs-fSp7ImA9WhRVGE8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-410640849868560149</id><published>2012-01-17T10:36:00.000-08:00</published><updated>2012-01-17T10:36:59.555-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T10:36:59.555-08:00</app:edited><title>Happy New Year from the App Engine team</title><content type="html">&lt;b id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Happy New Year! As we return from our New Year's celebrations, brush the dust off our workstations and gear up for our first release of 2012, we thought it would be fun to take a look back at improvements we have made and what developers have accomplished with App Engine in 2011.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Let’s start with the features and functionality we added last year: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;ul&gt;&lt;b id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/ul&gt;
&lt;span id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;ul&gt;&lt;span id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;li style="list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Language Support: &lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We released the initial version of &lt;a href="http://code.google.com/appengine/docs/python/python27/" style="white-space: normal;"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Python 2.7&lt;/span&gt;&lt;/a&gt; support and added &lt;a href="http://code.google.com/appengine/docs/go/overview.html" style="white-space: normal;"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Go&lt;/span&gt;&lt;/a&gt; as an experimental runtime.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Storage&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: We launched the &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2012/01/happy-birthday-high-replication.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;High Replication Datastore&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and added support for &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/03/announcing-app-engine-143-release_30.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;the Files API&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #000099; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in Python and Java. We also announced the limited preview of &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Cloud SQL&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a familiar relational database in a fully managed cloud environment.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Computation&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: We introduced &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/app-engine-150-release.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Backends&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; for building larger, long-lived and/or memory intensive infrastructure, &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/app-engine-150-release.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Pull Queues&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;to allow developers to “pull” tasks from a queue as applications are ready to process them and two larger &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/12/app-engine-161-released.html"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Frontend instance classes&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. We also released the GAE &amp;nbsp;&lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/11/app-engine-160-out-of-preview-release.html"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;MapReduce&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; framework as an experimental feature for Python. &lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Security&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: We &lt;/span&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;successfully completed the audit process for the &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Statement_on_Auditing_Standards_No._70:_Service_Organizations"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;SAS70 Type II&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://www.ssae-16.com/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;SSAE 16 Type II&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and &lt;/span&gt;&lt;a href="http://isae3402.com/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ISAE 3402 Type II&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; standards.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Business Readiness&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: We modified our &lt;/span&gt;&lt;a href="http://code.google.com/appengine/sla.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;SLA&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/billing.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;billing plans&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/quotas.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;service limits&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and now offer fully supported &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/10/app-engine-155-sdk-release.html"&gt;&lt;span style="color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;Premier Accounts&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;
&lt;span id="internal-source-marker_0.08003178983926773"&gt;&lt;span style="font-family: inherit;"&gt;
&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Best of all, with your continued support we accomplished our goal of &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/11/app-engine-160-out-of-preview-release.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;graduating from preview&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and became a full fledged Google product. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We’ve seen excellent growth and adoption over the past year, with businesses like &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/11/scaling-with-kindle-fire.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Pulse&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/whos-at-google-io-evite.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Evite&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/02/pushing-updates-with-channel-api.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Best Buy&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; choosing App Engine for their applications. Even St. James’s Palace chose App Engine to host the &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/03/something-old-something-new-technology.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Royal Wedding site&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. We had so much fun collaborating with &lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;17 of the world’s most renowned museums for the &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/02/beauty-on-outside-high-replication-on.html" style="font-weight: bold;"&gt;&lt;span style="background-color: white; color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Art Project&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and with other Googlers building iGoogle gadgets and &lt;/span&gt;&lt;a href="http://www.google.com/logos/2011/lespaul.html" style="font-weight: bold;"&gt;&lt;span style="background-color: white; color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Doodles&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; on App Engine. &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We’ve added more than 1 million registered applications and have more than 150,000 active developers on the App Engine platform generating more than 5 billion page hits per day.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Back in our &lt;/span&gt;&lt;a href="http://googleblog.blogspot.com/2008/04/developers-start-your-engines.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;first blog post&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; in 2008, we asked you to “start your engines” and what a ride we’ve taken. Thank you for making 2011 our best year yet and here’s to making 2012 even better!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by Peter Magnusson, Engineering Director&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-410640849868560149?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/Nw91LeEbZzs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/410640849868560149/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=410640849868560149" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/410640849868560149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/410640849868560149?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/Nw91LeEbZzs/happy-new-year-from-app-engine-team.html" title="Happy New Year from the App Engine team" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>6</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/01/happy-new-year-from-app-engine-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUEQXgyfyp7ImA9WhRWF0Q.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-7618826974553220248</id><published>2012-01-05T12:43:00.000-08:00</published><updated>2012-01-05T12:43:20.697-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T12:43:20.697-08:00</app:edited><title>Happy Birthday High Replication Datastore: 1 year, 100,000 apps, 0% downtime</title><content type="html">&lt;span style="font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Once upon a time, the only way to store persistent data in App Engine was to use the Master/Slave Datastore. Although it was a transactional, massively scalable, fully managed, distributed storage system running on Google’s world-class infrastructure, its availability was tied to the availability of a single datacenter, and when you’re serving hundreds of thousands of applications, relying on any single datacenter is simply not sufficient.&amp;nbsp;One year ago today we &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/01/announcing-high-replication-datastore.html" style="font-family: inherit; font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;unveiled&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; a new offering that was specifically designed to address this weakness: the High Replication Datastore (HRD). Still transactional, still massively scalable, still fully managed, still running on Google’s world-class infrastructure, &lt;/span&gt;&lt;span style="font-family: inherit; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;but with the ability to withstand multiple datacenter outages and no planned downtime!&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span id="internal-source-marker_0.35553023009561"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;By the time Google I/O came around last May, HRD was performing beautifully and our customers were happy, so we took the next step and made HRD the default option for all new App Engine applications. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In June we made HRD available in our SDK so that customers could easily experiment with the new consistency guarantees (paxos on your laptop!), and we launched the first version of our migration tool to make it easy to move your apps from Master/Slave to HRD.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In October we released XG Transactions, our first HRD-only feature, which allows users to transact across entity groups.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In November we brought App Engine &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/11/app-engine-160-out-of-preview-release.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;out of preview&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and added a 99.95% &lt;/span&gt;&lt;a href="http://code.google.com/appengine/sla.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;SLA&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; for HRD applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In our most recent release we launched an updated version of our HRD migration tool that ties the duration of the read-only period to your write-rate, rather than the size of your dataset. This makes your migration quick, simple, and easy to plan for regardless of how much data you have. One App Engine customer recently migrated over 500G of Datastore data with only a 10 minute read-only period!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Throughout all this, &lt;/span&gt;&lt;span style="font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;HRD has had no system-wide downtime (planned or unplanned)&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and has grown to serve over 3 billion requests per day. Needless to say it’s been a phenomenal year.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We realize that moving data requires planning, testing, coordination, and a strong stomach. However, we believe strongly that HRD provides a fundamentally better service than Master/Slave, and we encourage all our customers to migrate to HRD. Over the coming months you can expect to see further improvements to our migration tools (Blob migrations are on the way!), more HRD-only features like Full Text Search, and of course, more 9s than you can shake a stick at.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by Max Ross, Datastore Tech Lead&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-7618826974553220248?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/E1vajWT11no" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/7618826974553220248/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=7618826974553220248" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7618826974553220248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7618826974553220248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/E1vajWT11no/happy-birthday-high-replication.html" title="Happy Birthday High Replication Datastore: 1 year, 100,000 apps, 0% downtime" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>10</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2012/01/happy-birthday-high-replication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EMQHY-fCp7ImA9WhRXE0w.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3270466205228097508</id><published>2011-12-19T09:28:00.000-08:00</published><updated>2011-12-19T09:28:01.854-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T09:28:01.854-08:00</app:edited><title>Simple development of App Engine apps using Cloud SQL - Introducing Google Plugin for Eclipse 2.5</title><content type="html">&lt;br /&gt;
&lt;div&gt;
&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Since we added SQL support to App Engine in the form of &lt;/span&gt;&lt;a href="http://code.google.com/apis/sql/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Cloud SQL&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, the Google Plugin for Eclipse (GPE) team has been working hard on improving the developer experience for developing App Engine apps that can use a Cloud SQL instance as the backing database. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We are pleased to announce&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;the availability of &lt;/span&gt;&lt;a href="http://code.google.com/eclipse/docs/getting_started.html"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Plugin for Eclipse 2.5&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;GPE 2.5 simplifies app development by eliminating the need for manual tasks like copying Cloud JDBC drivers, setting classpaths, typing in JDBC URLs or filling in JVM arguments for connecting to local/remote database instances. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;GPE 2.5 provides support for:&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Configuring Cloud SQL/MySQL instances&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Auto-completion for JDBC URLs&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Creating database connections in Eclipse database development perspective&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OAuth 2.0 for authentication. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Configuring Cloud SQL/MySQL instances&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;App Engine provides a local development environment in which you can develop and test your application before deploying to App Engine. With GPE 2.5, you now have the ability to configure your local development server to use a local MySQL instance or a Cloud SQL instance for testing. When you choose to deploy your app, it will use the configured Cloud SQL instance for App Engine.&lt;/span&gt;&lt;/span&gt;&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="295px;" src="https://lh5.googleusercontent.com/eydK1KGeTh4LWN3gQiNbSh0oPlyjqokKteewx35tTHA_E3XU8wYisjyxoygQ6c6wcZLPB14L_DV7DAb1e0Yjm81K0PhQT_PsZ9kIecfN5KvTgoEsr6s" width="333px;" /&gt;&lt;br /&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Auto-completion for JDBC URLs&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;GPE 2.5 supports auto-completion for JDBC URLs, and quick-fix suggestions for incorrect JDBC URLs.&lt;/span&gt;&lt;/span&gt;&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="57" src="https://lh4.googleusercontent.com/6oqM68KcmHKHiIzwzHPDDwV9SuPwrcoiMm1fzM7VchopoF-uRZpbwWUJH60SGokHtGCtw1M20nZ2Pt6GQD2tNIeDTDaJzG9dfxL-nFLWJ7uEPFWFn_A" width="400" /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Creating database connections in Eclipse database development perspective&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The &lt;/span&gt;&lt;a href="http://eclipse.org/datatools/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Eclipse database development perspective&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; can be used to configure database connections, browse the schema and execute SQL statements on your database.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Using GPE 2.5, database connections are automatically configured in the Eclipse database development perspective for the Development SQL instance and the App Engine SQL instance.&lt;/span&gt;&lt;/span&gt;&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="87px;" src="https://lh6.googleusercontent.com/-pz7gC48ad7zZAwNwsbeXVpvzi3M_B0n7lcSNylo0j_mWgR7wDtOZwwAuNf2LvKgBrK56OtoFtJGZE5q7K5YauvpAuKIDIbH1rWATLXBCox2rbfYUOg" width="348px;" /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;You can also choose to manually create a new database connection for a Cloud SQL instance. In GPE 2.5, we have added a new connection profile for Cloud SQL.&lt;/span&gt;&lt;/span&gt;&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="220px;" src="https://lh5.googleusercontent.com/blDWvhBZdfinRM-HFyscCgGMO75Yf_yV_rByOGNNYUsy4wCfi3O7HEQ38X84MHAYBQXyZTRYeMw7dZJhWKBHzS882uLFhGH-xhKTMP7eN1GFQ2pyqdc" width="305px;" /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;GPE 2.5 now uses &lt;/span&gt;&lt;a href="http://oauth.net/2/"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;OAuth 2.0&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (earlier versions were using OAuth 1.0) &amp;nbsp;to securely access Google services (including Cloud SQL) from GPE. OAuth 2.0 is the latest version of the OAuth protocol focussing on simplicity of client development.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Can’t wait to get started?&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Download GPE &lt;/span&gt;&lt;a href="http://code.google.com/eclipse/docs/getting_started.html#installing"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and write your first App Engine and Cloud SQL application using GPE by following the instructions &lt;/span&gt;&lt;a href="http://code.google.com/eclipse/docs/cloudsql.html"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We hope GPE 2.5 will make cloud application development using App Engine and Cloud SQL a breeze. We always love to hear your feedback and the &lt;/span&gt;&lt;a href="https://groups.google.com/group/google-plugin-eclipse"&gt;&lt;span style="color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;GPE group&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is a great place to share your thoughts.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted on behalf of the Google Plugin for Eclipse Team&lt;/span&gt;&lt;/span&gt;&lt;span style="clear: left; float: left; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;b id="internal-source-marker_0.49521966790780425"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3270466205228097508?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/rqYfKB3lbqM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3270466205228097508/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3270466205228097508" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3270466205228097508?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3270466205228097508?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/rqYfKB3lbqM/simple-development-of-app-engine-apps.html" title="Simple development of App Engine apps using Cloud SQL - Introducing Google Plugin for Eclipse 2.5" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>13</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/12/simple-development-of-app-engine-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcNQH09eSp7ImA9WhRVFE0.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1990366438679444</id><published>2011-12-13T11:06:00.000-08:00</published><updated>2012-01-12T13:34:51.361-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T13:34:51.361-08:00</app:edited><title>App Engine 1.6.1 Released</title><content type="html">&lt;b id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We have one more release this year to make our developers merry, and while some members of our team enjoy the &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://google-au.blogspot.com/2011/11/app-engine-down-under.html"&gt;summer sunshine down under&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, we’ll be taking a short winter break from releases. Don’t worry, we’ll be back to our normal schedule in January, but we couldn’t resist tempting you with some new features that will keep you up tinkering well past midnight on January 1st.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Platform Changes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;b id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;
&lt;li style="background-color: transparent; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/appengine/docs/adminconsole/performancesettings.html#Setting_the_Frontend_Instance_Class"&gt;Frontend Instance Classes&lt;/a&gt; &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- For applications that need more CPU and/or memory to serve requests, we’ve introduced two larger frontend instance classes. Before today, all apps were allocated a fixed instance size no matter what the app was computing in its requests. Now, apps that need more computing power can upgrade the size of their instances.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;High Replication Datastore (HRD) &lt;a href="http://code.google.com/appengine/docs/adminconsole/applicationsettings.html#Using_the_Migration_Tool"&gt;Migration Tool&lt;/a&gt; Has Graduated &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- The HRD migration tool is now a fully supported feature. The tool allows you to easily migrate your data, limits the downtime required to complete the migration, and also allows you to choose its precise time. Every app can now start the new year off right, improving their uptime and reliability by migrating to HRD!&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/ul&gt;
&lt;b id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;
&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;New APIs &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;b id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;
&lt;li style="background-color: transparent; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/appengine/docs/python/conversion/"&gt;Conversion API&lt;/a&gt; (Experimental) &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Converting between formats within your application can be a pain, but with the experimental Conversion API you can now easily convert between PDF, HTML, text and images. Generating PDF invoices from HTML, displaying PDF menus as HTML or extracting text from images using OCR is now as simple as an API call. &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/appengine/docs/python/backends/logserviceapi.html"&gt;Logs Reader API&lt;/a&gt; (Experimental) &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Want to summarize latency by handler? Summarize request statistics by user? The new logs reader API allows you to programmatically access your logs to build reports, gather statistics, and analyze requests to your heart’s content.&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/ul&gt;
&lt;b id="internal-source-marker_0.2760067314375192"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;
&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Read the full release notes for &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;Java&lt;/a&gt; and &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Python&lt;/a&gt; to get all the details on 1.6.1. We always love to hear what you think, so keep the feedback on our groups coming. App Engine releases will resume again with our regular schedule around the end of January.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Posted by The App Engine Team&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1990366438679444?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/6vO_QxS12WI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1990366438679444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1990366438679444" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1990366438679444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1990366438679444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/6vO_QxS12WI/app-engine-161-released.html" title="App Engine 1.6.1 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>6</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/12/app-engine-161-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcGRng5fyp7ImA9WhRQEU0.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4776730437216360475</id><published>2011-12-05T10:00:00.000-08:00</published><updated>2011-12-05T10:00:27.627-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-05T10:00:27.627-08:00</app:edited><title>Whentotweet.com - Twitter analytics for the masses</title><content type="html">&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Our post today comes from Stefan and Niklas of &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://whentotweet.com/"&gt;Whentotweet.com&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a nifty site that recommends the best time of day to tweet based on your followers’ habits. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Twitter handles an amazing number of Tweets - &lt;a href="http://blog.twitter.com/2011/06/200-million-tweets-per-day.html"&gt;over 200 million tweets are sent per day&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We saw that many Twitter users were tweeting interesting content but much of it was lost in the constant stream of tweets. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Whentotweet.com is born&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;While there were many tools for corporate Twitter users that performed deep analytics and provided insight into their tweets, there were none that answered the most basic question: what time of the day are my followers actually using Twitter?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;And so the idea behind Whentotweet was born. In its current form, Whentotweet analyzes when your followers tweet and gives you a personalized recommendation of the best time of day to tweet to reach as many as possible. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Given the massive amount of data we needed to analyze, we knew it would be a huge engineering challenge to build what we wanted using the tools we had used previously. We also wanted to make sure we could offer at least a basic product for free. Not only did we need to process massive amounts of data - we also needed a way to do it without a second mortgage on our houses!&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Technology Used&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As we went over the alternatives we started to sketch different ways of hosting our application. We had previous experience building web sites and knew that traditional cloud hosting would be expensive and difficult to manage for the kind of computing that we needed. After some quick back-of-the-envelope calculations it seemed clear that Google App Engine would give us both the kind of pricing we needed and a way to scale. We decided to write a quick test application to test our assumptions.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The test application blew our minds. Apart from proving our initial assumptions around pricing and scale we started appreciating the quick deploys. On previous projects we were used to one deploy per month. Almost immediately we shifted our schedule to one or sometimes several deploys per day to push new code to customers. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The main APIs that Whentotweet relies on are Google App Engine's task queues and Datastore. Whenever a new user requests a report it is added as a task. A typical report requires a huge number of interactions with external sites. By breaking down each external interaction into separate tasks in different queues it became easy to make sure we kept a steady rate of API calls to external sites without risking that a huge influx of users would break our API limits.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The initial task then spawns new tasks until finally one of the tasks decides that the report is complete and tweets a summary of the result and a link to a more detailed report. Whentotweet uses a "fail fast" technique so whenever any request fails, internal or external, the task terminates and puts itself back on the queue.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Datastore saves a finished or ongoing analysis. Sometimes a single analysis will be updated several times a second by tasks as they finish and store their results.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Result&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;After a few weeks of intense coding, we were ready to test our code on a small sized Twitter account with less than three hundred followers. The results came back in just a few minutes. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;After verifying that everything had actually worked as well as we thought, we decided to try another account. This time one of the largest Twitter accounts on the planet: @techcrunch. Handling a Twitter account with over a million followers took the application one week. But after the analysis started, Whentotweet would quietly work in the background without us having to lift a finger.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Whentotweet got off to a better start than we imagined. During the initial launch thousands of people tested it on their Twitter accounts. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;After a while blog posts appeared, recommending Whentotweet as an invaluable Twitter tool. Each post would generate a sudden huge spike in traffic. Sometimes, a blog owner would mail us and ask if we were ready for the sudden increase in traffic this would bring. But Whentotweet was built to scale and even massive sites such as Mashable.com didn't slow it down. The most amazing thing is that we didn't need to write a single extra line of code to handle these massive variations in load. Instead, as soon as we wrapped our head around the tools in the App Engine toolbox we knew that Whentotweet would easily scale. App Engine forced us to think outside the box and avoid the fallacies of traditional hosting that create bottlenecks. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Currently, over 38,000 people have tried Whentotweet and we see from the user feedback that they love it. Give it a try at: &lt;a href="http://www.whentotweet.com/"&gt;www.whentotweet.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Niklas Agevik (@niklas_a) and Stefan Ålund (@stefan_alund) of Whentotweet.com&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4776730437216360475?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/V9x-nAGA09o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4776730437216360475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4776730437216360475" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4776730437216360475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4776730437216360475?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/V9x-nAGA09o/whentotweetcom-twitter-analytics-for.html" title="Whentotweet.com - Twitter analytics for the masses" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/12/whentotweetcom-twitter-analytics-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MQ3c5eyp7ImA9WhRRFUQ.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2326334555220926052</id><published>2011-11-29T10:02:00.000-08:00</published><updated>2011-11-29T10:23:02.923-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T10:23:02.923-08:00</app:edited><title>Scaling with the Kindle Fire</title><content type="html">&lt;span style="background-color: transparent; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today’s blog post comes to us from Greg Bayer of &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.pulse.me/"&gt;Pulse&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a popular news reading application for iPhone, iPad and Android devices. Pulse has used Google App Engine as a core part of their infrastructure for over a year and they recently celebrated a significant launch. We hope you find their experiences and tips on scaling useful.&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="201" src="https://lh3.googleusercontent.com/U5F0xCSrqpeus5QQjAtbEwoq_WyiZ-GGtcHFh-XvZGD0A9hYQ0de5f_tO6KCkjRbYtoSOikaZjOoIHIolp-RlH0XZzBOEWK9_cBJnRxOff1SMWYvtCA" width="400" /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As part of the much anticipated Kindle Fire launch, &lt;/span&gt;&lt;span style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Pulse&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; was &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://blog.pulse.me/post/12978740559/kindle-fire-welcome-to-the-pulse-family"&gt;announced&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; as one of the only preloaded apps. When you first un-box the Fire, Pulse will be there waiting for you on the home row, next to Facebook and IMDB!&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Scale&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Kindle Fire is projected to sell over &lt;/span&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://techcrunch.com/2011/11/09/amazon-ups-orders-from-kindle-fire-suppliers-to-5-million-units/"&gt;five million units&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; this quarter alone. This means that those of us who work on backend infrastructure at Pulse have had to prepare for nearly &lt;/span&gt;&lt;span style="background-color: white; color: #c1760b; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://techcrunch.com/2011/11/16/pulse-scores-key-spot-on-kindles-home-shelf-co-founder-says-it-may-pass-10m-users-this-year/"&gt;doubling our user-base&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; in a very short period. We also need to be ready for spikes in load due to press events and the holiday season.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Architecture&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As I’ve discussed previously on the &lt;/span&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://eng.pulse.me/"&gt;Pulse Engineering Blog&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, Pulse’s infrastructure has been designed with scalability in mind from the beginning. We’ve built our web site and client APIs on top of Google App Engine, which has allowed us to grow steadily from 10s to many 1000s of requests per second, without needing to re-architect our systems.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;While restrictive in some ways, we’ve found App Engine’s frontend serving instances (running Python in our case) to be extremely scalable, with minimal operational support from our team. We’ve also found the datastore, memcache, and task queue facilities to be equally scalable.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Pulse’s backend infrastructure provides many critical services to our native applications and web site. For example, we cache and serve optimized feed and image data for each source in our catalog. This allows us to minimize latency and data transfer and is especially important to providing an exceptional user experience on limited mobile connections. Providing this service for millions of users requires us to serve 100Ms of requests per day. As with any &lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;well designed App Engine app&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, the vast majority of these requests are served out of &lt;/span&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/appengine/docs/python/memcache/usingmemcache.html"&gt;memcache&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and never hit the datastore. Another useful technique we use is to &lt;/span&gt;&lt;span style="background-color: white; color: #c1760b; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.google.com/events/io/2011/sessions/scaling-app-engine-applications.html"&gt;set public cache control headers&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; wherever possible, to allow Google’s edge cache (shown as cached requests on the graph below) and ISP / mobile carrier caches to serve unchanged content directly to users.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="107" src="https://lh3.googleusercontent.com/xaOt8sq_CEdPvNZFHCxL0oy6ERAZl_b4ZWj6OHo60yuPt-4N0WK-zodh9_OXu3nc9_46xyqXYodeZk6uGBylsXw3oqrp-f231pGcwznXOfCyLYpaLQo" width="400" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Costs&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Based on App Engine’s projected billing statements leading up to the recent &lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;a href="http://www.google.com/enterprise/cloud/appengine/pricing.html"&gt;pricing changes&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, we were concerned that our costs might increase significantly&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. To prepare for these changes and the expected additional load from Kindle Fire users, we invested some time in diagnosing and reducing these costs. In most cases, the increases turned out to be an indicator of inefficiencies in our code and/or in the App Engine scheduler. With a little optimization, we have reduced these costs dramatically. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The new tuning sliders for the scheduler make it possible to rein in overly aggressive instance allocation. In the old pricing structure, idle instance time wasn’t charged for at all, so these inefficiencies were usually ignored. Now App Engine charges for all instance time by default. However, any time App Engine runs more idle instances than you’ve allowed, those hours are free. This acts as a hint to the scheduler, helping it reduce unneeded idle instances. By doing some testing to find the optimal cost vs spike latency tolerance and setting the sliders to those levels, we were able to reduce our frontend instance costs to near original levels. Our heavy usage of memcache (which is still free!) also helps keep our instance hours down.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="147" src="https://lh6.googleusercontent.com/2B16xvOfmnpE1RnlVNhOls9PiK2tMKlebno63qoObPfK0-VAeDw8yKVmBxpQEsQs_GR3n6oz_x2bkumlOh35r6Ng1Xq4titsPEIuI-6PEGmLCVmB2mo" width="400" /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Since datastore operations used to be charged under the umbrella of CPU hours, it was difficult to know the cost of these operations under the old pricing structure. This meant it was easy to miss application inefficiencies, especially for write-heavy workloads where additional indexes can have a&lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: #c1760b; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/appengine/docs/billing.html"&gt;multiplicative effect&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; on costs. In our case, the new datastore write operations metric led us to notice some inefficiencies in our design and a tendency to overuse indexes. We are now working to minimize the number of indexes our queries rely on, and this has started to reduce our write costs.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Preparing for the Kindle Fire Launch&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We took a few additional steps to prepare for the expected load increase and spikes associated with the Fire’s launch. First, we contacted App Engine’s support team to warn them of the expected increase. This is recommended for any app at or near 10,000 requests per second (to make sure your application is correctly provisioned). We also signed up for a&lt;/span&gt;&lt;span style="background-color: white; color: #c1760b; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;a href="http://code.google.com/appengine/docs/premier/index.html"&gt;Premier&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;account which gets us additional support and simpler billing.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Architecturally, we decided to split our load across three primary applications, each serving different use cases. While this makes it harder to access data across these applications, those same boundaries serve to isolate potential load-related problems and make tuning simpler. In our case, we were able to divide certain parts of our infrastructure, where cross application data access was less important and load would be significant. Until App Engine provides more visibility into and control of memcache eviction policies, this approach also helps prevent lower priority data from evicting critical data.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I’m hopeful that in the near future such division of services will not be required. Individually tunable load isolation zones and memcache controls would certainly make it a lot more appealing to have everything in a single application. Until then, this technique works quite well, and helps to simplify how we think about scaling.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To learn more about Pulse, check out &lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;our &lt;/span&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.pulse.me/"&gt;website&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;! If you have comments or questions about this post or just want to reach out directly, &lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;you can find me &lt;/span&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://twitter.com/gregbayer"&gt;@gregbayer&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2326334555220926052?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/YoI0nz5rMFw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2326334555220926052/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2326334555220926052" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2326334555220926052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2326334555220926052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/YoI0nz5rMFw/scaling-with-kindle-fire.html" title="Scaling with the Kindle Fire" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/11/scaling-with-kindle-fire.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIGRX0zeip7ImA9WhRSFEs.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-1219967613240087336</id><published>2011-11-16T09:12:00.000-08:00</published><updated>2011-11-16T09:12:04.382-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T09:12:04.382-08:00</app:edited><title>New Datastore client library for Python ready for a test drive</title><content type="html">&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.8633554433472455" style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Last week we &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;a href="http://googleappengine.blogspot.com/2011/11/app-engine-160-out-of-preview-release.html"&gt;announced&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; that App Engine has left preview and is now an officially supported product here at Google. And while the release (and the announcement) was chock-full of great features, one of the features that we’d like to call specific attention to is the new Datastore client library for Python (a.k.a “NDB”). &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/p/appengine-ndb-experiment/"&gt;NDB&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; has been unde&lt;/span&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;r development for some time and this release marks its availability to a larger audience as an experimental feature. Some of the benefits of this new library include:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ul&gt;
&lt;li style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The StructuredProperty class, which allows entities to have nested structure&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Integrated two-level caching, using both memcache and a per-request in-process cache&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;High-level asynchronous API using Python generators as coroutine&lt;/span&gt;s (&lt;/span&gt;&lt;span style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.python.org/dev/peps/pep-0342/"&gt;PEP 342&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #222222; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;New, cleaner implementations of Key, Model, Property and Query classes&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The version of NDB contained in the 1.6.0 runtime and SDK corresponds to NDB 0.9.1, which is currently the latest NDB release.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Given that this feature is still experimental, it is subject to change, but that’s exactly why we encourage you to give it a test drive and send us any feedback that you might have.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; The &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://code.google.com/p/appengine-ndb-experiment/issues/list"&gt;NDB project&lt;/a&gt; hosted&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; on Google&lt;/span&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Code is the best place to send this feedback. Happy coding!&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #222222; font-family: Arial; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by Guido van Rossum, Software Engineer on the App Engine Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-1219967613240087336?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/G0GfplR-OtI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/1219967613240087336/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=1219967613240087336" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1219967613240087336?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/1219967613240087336?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/G0GfplR-OtI/new-datastore-client-library-for-python.html" title="New Datastore client library for Python ready for a test drive" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="25" src="http://1.bp.blogspot.com/_dLfQMJsmsaI/TK6YcuzyYCI/AAAAAAAAAHc/Re6vRjLwqTw/S220/appengine-engine.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/11/new-datastore-client-library-for-python.html</feedburner:origLink></entry></feed>

