<?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;C0MGQXc6cSp7ImA9WhRUFks.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164</id><updated>2012-01-27T02:50:20.919-08: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>181</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;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><entry gd:etag="W/&quot;CkYARXsyfSp7ImA9WhRSE0o.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-7927017812074918653</id><published>2011-11-14T13:35:00.000-08:00</published><updated>2011-11-15T07:15:44.595-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T07:15:44.595-08:00</app:edited><title>Google BigQuery Service: Big data analytics at Google speed</title><content type="html">&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;i style="background-color: rgba(255, 255, 255, 0.917969); color: #222222;"&gt;Our post today,&amp;nbsp;&lt;/i&gt;&lt;i style="background-color: rgba(255, 255, 255, 0.917969); color: #222222;"&gt;cross-posted with the &lt;a href="http://googleenterprise.blogspot.com/2011/11/google-bigquery-service-big-data.html"&gt;Google Enterprise Blog&lt;/a&gt;,&lt;/i&gt;&lt;i style="background-color: rgba(255, 255, 255, 0.917969); color: #222222;"&gt;&amp;nbsp;comes from one of our sister projects, BigQuery. We know that many of you are interested in processing large volumes of data and we encourage you to try it out.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;i style="background-color: rgba(255, 255, 255, 0.917969); color: #222222;"&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Rapidly crunching terabytes of big data can lead to better business decisions, but this has traditionally required tremendous IT investments.  Imagine a large online retailer that wants to provide better product recommendations &lt;/span&gt;by analyzing website usage and purchase patterns from millions of website visits.  Or consider a car manufacturer that wants to maximize its advertising impact by learning how its last global campaign performed across billions of multimedia impressions.  Fortune 500 companies struggle to unlock the potential of data, so it’s no surprise that it’s been even harder for smaller businesses.
&lt;br /&gt;
&lt;br /&gt;
We developed &lt;a href="http://code.google.com/apis/bigquery/#utm_campaign=cloudplatform&amp;amp;utm_source=en-entblog-na-us-cloudplatform_11142011&amp;amp;utm_medium=blog"&gt;Google BigQuery Service&lt;/a&gt; for large-scale internal data analytics.  At &lt;a href="http://googlecode.blogspot.com/2010/05/bigquery-and-prediction-api-get-more.html"&gt;Google I/O last year&lt;/a&gt;, we opened a preview of the service to a limited number of enterprises and developers. Today we're releasing some big improvements, and putting one of Google's most powerful data analysis systems into the hands of more companies of all sizes.

&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;We’ve added a graphical user interface for analysts and developers to rapidly explore massive data through a web application.
&lt;/li&gt;
&lt;li&gt;We’ve made big improvements for customers accessing the service programmatically through the API.  The new REST API lets you run multiple jobs in the background and manage tables and permissions with more granularity.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Whether you use the BigQuery web application or API, you can now write even more powerful queries with JOIN statements.  This lets you run queries across multiple data tables, linked by data that tables have in common.
&lt;/li&gt;
&lt;li&gt;It’s also now easy to manage, secure, and share access to your data tables in BigQuery, and export query results to the desktop or to &lt;a href="http://www.google.com/enterprise/cloud/storage/#utm_campaign=cloudplatform&amp;amp;utm_source=en-entblog-na-us-cloudplatform_11142011&amp;amp;utm_medium=blog"&gt;Google Cloud Storage&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-lBq6UQ6z86g/TsFZf_FB01I/AAAAAAAAA3w/2Edkpbi9ySE/s1600/1nIWO46qUp4CsH_t01DWrq3n4j1Hbhrk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-lBq6UQ6z86g/TsFZf_FB01I/AAAAAAAAA3w/2Edkpbi9ySE/s400/1nIWO46qUp4CsH_t01DWrq3n4j1Hbhrk.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Michael J. Franklin, Professor of Computer Science at UC Berkeley, &lt;a href="http://cacm.acm.org/magazines/2011/6/108670-technical-perspective-data-analysis-at-astonishing-speed/fulltext"&gt;remarked&lt;/a&gt; that BigQuery (internally known as Dremel) leverages “thousands of machines to process data at a scale that is simply jaw-dropping given the current state of the art.”  We’re looking forward to helping businesses innovate faster by harnessing their own large data sets.  BigQuery is available free of charge for now, and we’ll let customers know at least 30 days before the free period ends.  We’re bringing on a new batch of pilot customers, so &lt;a href="https://docs.google.com/a/google.com/spreadsheet/viewform?hl=en_US&amp;amp;formkey=dGl4TUlob1RDRndMWVpIb21ORmJPZWc6MA#gid=0"&gt;let us know&lt;/a&gt; if your business wants to test-drive BigQuery Service. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Posted by Ju-Kay Kwek, Product Manager&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-7927017812074918653?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/pi3W25l-JoI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/7927017812074918653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=7927017812074918653" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7927017812074918653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7927017812074918653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/pi3W25l-JoI/google-bigquery-service-big-data.html" title="Google BigQuery Service: Big data analytics at Google speed" /><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://4.bp.blogspot.com/-lBq6UQ6z86g/TsFZf_FB01I/AAAAAAAAA3w/2Edkpbi9ySE/s72-c/1nIWO46qUp4CsH_t01DWrq3n4j1Hbhrk.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/11/google-bigquery-service-big-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEERX0yeSp7ImA9WhRTF00.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-7272333457829333736</id><published>2011-11-07T12:40:00.000-08:00</published><updated>2011-11-07T14:56:44.391-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T14:56:44.391-08:00</app:edited><title>App Engine 1.6.0 Out of Preview Release</title><content type="html">&lt;div class="c2"&gt;
Three and a half years after App Engine’s first &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/articles/cf1-text.html"&gt;Campfire One&lt;/a&gt;&lt;/span&gt;, App Engine has graduated from Preview and is now&amp;nbsp;a fully supported Google product.&amp;nbsp;We started out with the simple philosophy that App Engine should be ‘easy to use, easy to scale, and free to get started.’ And with 100 billion+ monthly hits, 300,000+ active apps, and 100,000+ developers using our product every month it’s clear that this philosophy resonates. Thanks to your support, Google is making a long term investment in App Engine!&lt;/div&gt;
&lt;br /&gt;
&lt;div class="c2"&gt;
When we announced our plans to leave preview earlier this year, we made a commitment to improving the service by adding support for &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/docs/python/python27/"&gt;Python 2.7&lt;/a&gt;&lt;/span&gt;, &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/docs/premier/index.html"&gt;Premier Accounts&lt;/a&gt;&lt;/span&gt;&amp;nbsp;and &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/docs/python/backends/"&gt;Backends&lt;/a&gt;&lt;/span&gt;&amp;nbsp;as well as several changes launching today:&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li class="c0"&gt;&lt;b&gt;Pricing&lt;/b&gt;: The new &lt;span class="c6"&gt;&lt;a class="c1" href="http://www.google.com/enterprise/cloud/appengine/pricing.html"&gt;pricing structure&lt;/a&gt;&lt;/span&gt;&amp;nbsp;announced in May (and updated based on feedback from the community)&amp;nbsp;will be reflected in your bill&amp;nbsp;starting on Nov 7th as &lt;span class="c6"&gt;&lt;a class="c1" href="http://googleappengine.blogspot.com/2011/09/few-adjustments-to-app-engines-upcoming.html"&gt;previously announced&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;Terms of Service&lt;/b&gt;: We have a new business-friendly &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/terms.html"&gt;terms of service&lt;/a&gt;&lt;/span&gt;&amp;nbsp;and &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/program_policies.html"&gt;acceptable use policy&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;Service Level Agreement&lt;/b&gt;: All paid applications on the High Replication Datastore are covered by our &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/sla.html"&gt;99.95% SLA&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c2"&gt;
We are also holding a series of App Engine Office hours&amp;nbsp;via Google+ this week for any users who have questions about how these changes impact their applications. The list of times can be found on the &lt;span class="c6"&gt;&lt;a class="c1" href="https://developers.google.com/events/"&gt;Google Developers events&lt;/a&gt;&lt;/span&gt;&amp;nbsp;page, with links to join the hangout while the office hours are scheduled. &amp;nbsp;Also, please don’t hesitate to contact us at &lt;span class="c6"&gt;&lt;a class="c1" href="mailto:appengine_updated_pricing@google.com"&gt;appengine_updated_pricing@google.com&lt;/a&gt;&lt;/span&gt; with any questions or concerns.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="c2"&gt;
In addition to leaving Preview, we have several additional changes to announce today.&lt;/div&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;br /&gt;
&lt;span class="c5"&gt;&lt;b&gt;Production Changes&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c2"&gt;
For billing enabled apps, we are offering two more scheduler controls and some additional changes:&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c0"&gt;&lt;b&gt;Min Idle Instances&lt;/b&gt;: You can now adjust the minimum number of Idle Instances for your application, from 1 to 100. Users who had previously signed up for “Always On” can now set the number of idle instances for their applications using this setting.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;Max Pending Latency&lt;/b&gt;: For applications that care about user facing latency, this slider &amp;nbsp;allows you to set a limit to the amount of time a request spends in the pending queue before starting up a new instance.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;Blobstore API&lt;/b&gt;: You can now use the Blobstore API without signing up for billing.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="c2"&gt;
&lt;span class="c5"&gt;&lt;b&gt;Datastore Changes&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;High Replication Datastore Migration Tool&lt;/span&gt;:&lt;/b&gt; We are releasing an experimental tool that allows you to easily migrate your data from Master/Slave to High Replication Datastore, and seamlessly switch your application’s serving to the new HRD application.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;Query Planning Improvements&lt;/span&gt;:&lt;/b&gt; We’ve &lt;span class="c6"&gt;&lt;a class="c1" href="http://code.google.com/appengine/articles/indexselection.html"&gt;published an article&lt;/a&gt;&lt;/span&gt;&amp;nbsp;that details recent improvements to our query planner that eliminate the need for exploding indexes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;span class="c5"&gt;&lt;b&gt;Python&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;MapReduce&lt;/span&gt;:&lt;/b&gt; We are releasing the full MapReduce framework in experimental for Python. The framework includes the Map, Shuffle, and Reduce phases.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;Python 2.7 in the SDK:&lt;/span&gt;&amp;nbsp;&lt;/b&gt;The SDK now supports the Python 2.7 runtime, so you can test out your changes before uploading them to production.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;b&gt;&lt;span class="c5"&gt;Java&lt;/span&gt;&lt;span class="c5 c11"&gt;™&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;Memcache API Improvements&lt;/span&gt;&lt;/b&gt;: The Memcache API&amp;nbsp;for Java now supports asynchronous calls. Additionally, putIfUntouched() and getIdentifiable() now support batch operations.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;Capability Testing&lt;/span&gt;:&lt;/b&gt; We’ve added the ability to simulate the capability state of local API implementations to test your application’s behavior if a service is unavailable.&lt;/li&gt;
&lt;li class="c0"&gt;&lt;b&gt;&lt;span class="c5"&gt;Datastore Callbacks&lt;/span&gt;:&lt;/b&gt; You can now specify actions to perform before or after a put() or delete() call.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
The full list of changes with this release can be found in the release notes (&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Python&lt;/a&gt;, &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;Java&lt;/a&gt;). We’d love to hear your feedback about this release in the groups. And we’d like to thank you all for investing in our platform for the last three years. We’re excited for this milestone in App Engine history, and we look forward to what the future will bring.&lt;br /&gt;
&lt;br /&gt;
Posted by The App Engine Team&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;i&gt;Oracle and Java are registered trademarks of Oracle and/or its affiliates.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2 c3"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-7272333457829333736?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/USNtG-QXYLE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/7272333457829333736/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=7272333457829333736" title="18 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7272333457829333736?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7272333457829333736?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/USNtG-QXYLE/app-engine-160-out-of-preview-release.html" title="App Engine 1.6.0 Out of Preview Release" /><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>18</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/11/app-engine-160-out-of-preview-release.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMRnYyeyp7ImA9WhdaF04.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4636388472893449809</id><published>2011-10-27T10:33:00.000-07:00</published><updated>2011-10-27T10:33:07.893-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T10:33:07.893-07:00</app:edited><title>ProdEagle - Analyzing your App Engine apps in real-time</title><content type="html">&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.28592914226464927" style="background-color: transparent; font-family: Arial; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today’s post comes to us from Andrin von Rechenberg of MiuMeet who has developed an easy to use analysis framework, ProdEagle, for App Engine apps. ProdEagle enables you to easily count and visualize events to help better understand both performance and usage of your site.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&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&gt;&lt;span style="background-color: transparent; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.prodeagle.com/"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"&gt;ProdEagle&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; allows you to monitor your system, lets you analyse in real-time what is going on and can alert you if something goes wrong.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; 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: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The story&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We are a small start-up that created an incredibly fast growing social dating platform called &lt;/span&gt;&lt;a href="http://www.miumeet.com/"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"&gt;MiuMeet&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. We used App Engine from the start and within 6 months we had over 1 million registered users - the system scaled beautifully. One of the world’s leading online dating companies invested in our start-up and gave us a very good piece of advice: Before you build new features, you need to understand what’s actually going on in your system. Of course we thought we knew exactly what is going on in our system. We had the App Engine Dashboard and we had Google Analytics and we ran a couple of daily MapReduces to collect some statistics. But honestly, compared to today, we didn’t have any idea what was going on.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Understanding your system&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;From our MapReduces we knew that most users who accessed our dating platform used our Android app and only very few users used our iPhone app. We weren’t exactly sure what the reason for that was, but we wanted to improve the experience for our iPhone users. So we had to start measuring what was different for iPhone vs Android users.&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But how do you do this? You start recording everything that happens in your system. And by “everything” we don’t mean the status code of an HTTP response but human understandable events, like “an Android user starts a conversation”, “the average length of a conversation”, “how often iPhone users log in” and so on. We realized that iPhone users are much less active and reply less often - not because they don’t want to, but because they don’t know immediately that they got a new message. Android users are informed by Push-Notifications, iPhone users via email. We did not expect that this would make such a big difference, but now it’s pretty obvious what the next feature we should build to improve the iPhone experience. Our conclusions are based on hard numbers and not guesses.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We used ProdEagle to collect and analyse the data that allowed us to realize this. ProdEagle can count, display and compare events in real-time and can even alert you if something is going wrong.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How to measure events&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Let’s start with a simple Python example. We would like to record the devices from which messages are sent in our system. All we have to do is add the green lines to our sendMessage function:&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr"&gt;
&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&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-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="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;import prodeagle&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; 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: white; color: #333333; font-family: 'Courier New'; 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: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;def sendMessage(from, to, text, device):&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;mailbox = getMailbox(to)&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;mailbox.addMessage(from, text)&lt;/span&gt;&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; 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: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;prodeagle.counter.incr("Message." + device)&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Arial; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Arial; white-space: pre-wrap;"&gt;This one line of code and a few clicks in the ProdEagle dashboard allows us to create the following graphs:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 10pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="594px;" src="https://lh3.googleusercontent.com/5wfikrZGtq0OSz-wCTmHTUlCPvFQsdE1wTw0Mv6dSLlREafjy22sn_zdBrBpl-xh4pTFphfAQrunS3INmRpKQ0CifN0YujwG-L4eojZ4zgRsZ1I47gM" width="464px;" /&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #b7b7b7; font-family: Arial; font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*The numbers in these graphs are just examples.&lt;/span&gt;&lt;span style="background-color: white; color: #cccccc; font-family: Arial; font-size: 10pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 10pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 10pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Analysing your system in “real-time”&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With ProdEagle you can count whatever you want. The advantage over traditional analytics systems is that you don’t have to wait for a day for the data to appear. Data appears within 1 minute in your dashboard. This means that you can monitor your system almost in real-time and set up alerts if something goes wrong.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In the following example we measure how long it takes to execute a datastore query:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr"&gt;
&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&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-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="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;def searchPeople(query):&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;timestamp = time.time()&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;query.execute()&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;prodeagle.counter.incr("Search.People.Count")&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; 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: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;prodeagle.counter.incr("Search.People.Latency",&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.time() - timestamp)&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In the ProdEagle Dashboard we can specify that “Search.People.Latency” should &amp;nbsp;be divided by “Search.People.Count” and plot it as a graph. Additionally we can set up an email alert that fires if the latency was more than 4000ms for 5 minutes:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="199px;" src="https://lh6.googleusercontent.com/9fBZu2nBaBTmj_rfxl8a_bGEh9uXMnyE8WdKPBB5vW-FXqq3_tMraFL6gl0YUkzFPNG9_CxKlAEmYkPuFownWw1MU9zRQnJfULfqIB2BXOgo6XseCzM" width="456px;" /&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If the latency is above all the red dots you get an email alert.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Being able to measure latency in real-time is particularly useful when you are trying to optimize your system and want to try out different strategies to answer queries.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The magic behind ProdEagle&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Whenever you call &lt;/span&gt;&lt;span style="background-color: white; color: #6aa84f; font-family: 'Courier New'; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;prodeagle.counter.incr(counter_name)&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;the ProdEagle library increments a counter in memcache - &amp;nbsp;this shouldn’t add any noticeable latency to your app, unless it is the first call made by a serving instance. Every few minutes, the ProdEagle service that we run collects all these memcache counters and persists them, creates the graphs and alerts you if something is wrong.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Obviously, the system isn’t robust if your memcache gets flushed. To address this, ProdEagle uses 1024 dummy counters to check when your memcache gets flushed and to approximate the inaccuracy of the data in your graphs. This is based on the assumption that elements with the same size in memcache are freed in a “least-recently-used” fashion and that the 1024 dummy counters hit all memcache shards. We have used ProdEagle for MiuMeet for a couple of months now and our approximated accuracy was never below 99.8%.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I like! How can I get it?&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; 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: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ProdEagle is currently completely free of charge. You can download the python client libraries and sign up for your dashboard on &lt;/span&gt;&lt;a href="http://www.prodeagle.com/"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"&gt;www.prodeagle.com&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&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-4636388472893449809?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/M3BNt7Q3Oo0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4636388472893449809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4636388472893449809" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4636388472893449809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4636388472893449809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/M3BNt7Q3Oo0/prodeagle-analyzing-your-app-engine.html" title="ProdEagle - Analyzing your App Engine apps in real-time" /><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/2011/10/prodeagle-analyzing-your-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEMQH06fSp7ImA9WhdaEEk.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6842955895481358001</id><published>2011-10-19T10:01:00.000-07:00</published><updated>2011-10-19T10:01:21.315-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T10:01:21.315-07:00</app:edited><title>App Engine SSL for Custom Domains in Testing</title><content type="html">&lt;span id="internal-source-marker_0.34135858877561986" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The long awaited SSL for Custom Domains is entering testing and we are now looking for trusted testers. If you are interested in signing up to test this feature, please fill in this &lt;/span&gt;&lt;a href="https://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dHFoZFhlUTM1MUNpelFWcVJqcVAwckE6MQ"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;form&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&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; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&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 id="internal-source-marker_0.2982632212806493" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We will be offering two types of SSL service, &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Server_Name_Indication"&gt;Server Name Indication (SNI)&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and Virtual IP (VIP). SNI will be significantly less expensive than VIP when this service is launched, however unlike VIP it does &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Server_Name_Indication#No_support"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;not work&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; in all browsers that support SSL. VIP is a premium service with a dedicated IP and full browser support. Both VIP and SNI support wildcard certificates and certificates with alternate names.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We look forward to making this widely available as soon as possible and as always we welcome your feedback in the &lt;/span&gt;&lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/d7fb200cbe9d2010"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;group&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-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-6842955895481358001?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/3SZhXq60sMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6842955895481358001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6842955895481358001" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6842955895481358001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6842955895481358001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/3SZhXq60sMM/app-engine-ssl-for-custom-domains-in.html" title="App Engine SSL for Custom Domains in Testing" /><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/2011/10/app-engine-ssl-for-custom-domains-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGQHw4eyp7ImA9WhdbE0g.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2768630522162078716</id><published>2011-10-11T10:15:00.000-07:00</published><updated>2011-10-11T10:15:21.233-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T10:15:21.233-07:00</app:edited><title>App Engine 1.5.5 SDK Release</title><content type="html">&lt;div class="c9"&gt;
2011&amp;nbsp;has seen some exciting releases for App Engine. As the days get shorter, the weather gets colder, and all that Halloween candy starts tempting everyone in the grocery store, we’ve been hard at work on our latest action packed release. &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c3"&gt;&lt;b&gt;Premier Accounts&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c9"&gt;
When choosing a platform for your most critical business applications, we recognize that uptime guarantees, easy management and paid support&amp;nbsp;are often just as important as product features. So today we’re launching Google App Engine &lt;span class="c2"&gt;&lt;a class="c1" href="http://code.google.com/appengine/docs/premier/index.html"&gt;premier accounts&lt;/a&gt;&lt;/span&gt;. &amp;nbsp;&lt;span class="c5"&gt;For $500 per month &lt;/span&gt;&lt;span class="c5"&gt;(not including the cost &lt;/span&gt;&lt;span class="c5"&gt;to&lt;/span&gt;&lt;span class="c5"&gt;&amp;nbsp;provision internet services)&lt;/span&gt;&lt;span class="c5"&gt;, you’ll receive:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c6"&gt;&lt;span class="c5"&gt;Premium support (see the&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;span class="c2 c5"&gt;&lt;a class="c1" href="http://support.google.com/enterprise/doc/terms/tssg_cloud.html"&gt;Technical Support Services Guidelines&lt;/a&gt;&lt;/span&gt;&lt;span class="c5"&gt;&amp;nbsp;for details).&lt;/span&gt;
&lt;li class="c6"&gt;&lt;span class="c5"&gt;A 99.95% uptime Service Level Agreement (see the&amp;nbsp;&lt;/span&gt;&lt;span class="c2 c5"&gt;&lt;a class="c1" href="http://code.google.com/appengine/sla.html"&gt;draft agreement&lt;/a&gt;&lt;/span&gt;&lt;span class="c5"&gt;, the final agreement will be in the signed offline&lt;/span&gt;&lt;span class="c5"&gt;&amp;nbsp;agreement)&lt;/span&gt;&lt;span class="c5"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li class="c6"&gt;&lt;span class="c5"&gt;The ability to create an unlimited number of apps on your premier account domain.&lt;/span&gt;&lt;/li&gt;
&lt;li class="c6"&gt;&lt;span class="c5"&gt;No minimum monthly fees per app. Pay only for the resources you use.&lt;/span&gt;&lt;/li&gt;
&lt;li class="c6"&gt;&lt;span class="c5"&gt;Monthly billing via invoice.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c7"&gt;
&lt;span class="c5"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c5"&gt;To sign up for a premier account, please contact our sales team at &lt;/span&gt;&lt;span class="c2 c5"&gt;&lt;a class="c1" href="mailto:appengine_premier_requests@google.com"&gt;appengine_premier_requests@google.com&lt;/a&gt;&lt;/span&gt;&lt;span class="c5"&gt;. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c7"&gt;
&lt;span class="c3"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c3"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="c3"&gt;&lt;b&gt;Python 2.7&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c9"&gt;
PIL? NumPy? Concurrent requests? Python 2.7 has it all, and today we’re opening up Python 2.7 as an experimental release. We’ve put together a &lt;span class="c2"&gt;&lt;a class="c1" href="http://code.google.com/appengine/docs/python/python27/newin27.html"&gt;list of all the known differences&lt;/a&gt;&lt;/span&gt;&amp;nbsp;between the current 2.5 runtime and the new runtime. &lt;/div&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c3"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="c3"&gt;&lt;b&gt;Overall Changes&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c9"&gt;
We know that bumping up against hard limits can be frustrating, and we’ve talked all year about our continued push to lift our system limits. With this release we are raising several of these:&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c6"&gt;Request Duration: The frontend request deadline has been increased from 30 seconds to 60 seconds. We’ve increased the maximum URLFetch deadline to match from 10&amp;nbsp;seconds to 60 seconds.&lt;/li&gt;
&lt;li class="c6"&gt;File limits: We’ve increased the number of files you can upload with your application from 3,000 to 10,000 files, and the file size limit has also been increased from 10MB to 32MB.&lt;/li&gt;
&lt;li class="c6"&gt;API Limits: Post payloads for URLFetches are now capped at 5MB instead of 1MB.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
We’re also announcing several limited preview features and trusted tester programs:&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c6"&gt;Cloud SQL&amp;nbsp;Preview: We&amp;nbsp;&lt;a href="http://googleappengine.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html"&gt;announced&lt;/a&gt; last week that we are offering a preview of SQL support in App Engine. Give it a try and let us know what you think.&lt;/li&gt;
&lt;li class="c6"&gt;Full-text Search: We are looking for early trusted testers for our long anticipated Full-Text Search API. Please fill out this &lt;span class="c2"&gt;&lt;a class="c1" href="https://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dEdWcnRJUXZ2VGR3YmVsT1Q1WVB2Smc6MQ"&gt;form&lt;/a&gt;&lt;/span&gt;&amp;nbsp;if you’re interested in trying it out.&lt;/li&gt;
&lt;li class="c6"&gt;Conversion API: Ever wanted to convert from text to PDF in your App? Then consider &lt;span class="c2"&gt;&lt;a class="c1" href="https://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dEtMTTVKN0Rrd0RyNlc2VkFCaXRlZHc6MQ"&gt;signing up&lt;/a&gt;&lt;/span&gt;&amp;nbsp;as a trusted tester for the Conversion API.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c3"&gt;&lt;b&gt;Datastore&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Cross Group (XG) Transactions: For those who need transactional writes to entities in multiple entity groups (and that's everyone, right?), XG Transactions are just the thing. This feature uses two phase commit to make cross group writes atomic just like single group writes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
&lt;span class="c3"&gt;&lt;b&gt;Platform Improvements&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="c6"&gt;Experimental Google Cloud Storage&amp;nbsp;Integration&lt;span class="c3"&gt;: &lt;/span&gt;As&amp;nbsp;Google Cloud Storage, formerly Google Storage for Developers,&amp;nbsp;&lt;a href="http://googlecode.blogspot.com/2011/10/google-cloud-storage-is-out-of-code.html"&gt;graduates from labs&lt;/a&gt;, we are improving our integration by adding &lt;a href="http://code.google.com/appengine/docs/python/googlestorage/"&gt;access via the files API&lt;/a&gt;. &lt;/li&gt;
&lt;li class="c6"&gt;Prediction API: Another of our friends graduating from labs&amp;nbsp;is the&amp;nbsp;&lt;a href="http://googlecode.blogspot.com/2011/10/google-prediction-api-graduates-from.html"&gt;Prediction API&lt;/a&gt;. Check out some of the&amp;nbsp;&lt;a href="http://code.google.com/apis/predict/docs/libraries.html#featuredsamples"&gt;App Engine examples&lt;/a&gt;&amp;nbsp;in their getting started guide.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c9"&gt;
Of course, these are just the high level changes. This release is packed full of features and bug fixes, and&amp;nbsp;as always, we welcome your feedback in the group.&lt;/div&gt;
&lt;div class="c7"&gt;
&lt;/div&gt;
&lt;div class="c7"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span class="byline-author"&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-2768630522162078716?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/IF8xtgql1gc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2768630522162078716/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2768630522162078716" title="18 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2768630522162078716?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2768630522162078716?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/IF8xtgql1gc/app-engine-155-sdk-release.html" title="App Engine 1.5.5 SDK Release" /><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>18</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/10/app-engine-155-sdk-release.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EHRH47eCp7ImA9WhdUGU8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-5173012821722895771</id><published>2011-10-06T12:33:00.000-07:00</published><updated>2011-10-06T12:33:55.000-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T12:33:55.000-07:00</app:edited><title>Google Cloud SQL: Your database in the cloud</title><content type="html">&lt;em&gt;Cross-posted from the &lt;a href="http://googlecode.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html"&gt;Google Code Blog&lt;/a&gt;&lt;/em&gt;
&lt;br&gt;&lt;br&gt;
One of App Engine’s most requested features has been a simple way to develop traditional database-driven applications. In response to your feedback, we’re happy to announce the limited preview of &lt;a href="http://code.google.com/apis/sql/"&gt;Google Cloud SQL&lt;/a&gt;.

You can now choose to power your App Engine applications with a familiar relational database in a fully-managed cloud environment. This allows you to focus on developing your applications and services, free from the chores of managing, maintaining and administering relational databases.

Google Cloud SQL brings many benefits to the App Engine community:
&lt;ul&gt;
&lt;li&gt;No maintenance or administration - we manage the database for you.&lt;/li&gt;
&lt;li&gt;High reliability and availability - your data is replicated synchronously to multiple data centers. Machine, rack and data center failures are handled automatically to minimize end-user impact.&lt;/li&gt;
&lt;li&gt;Familiar &lt;a href="http://en.wikipedia.org/wiki/MySQL"&gt;MySQL&lt;/a&gt; database environment with &lt;a href="http://en.wikipedia.org/wiki/Java_Database_Connectivity"&gt;JDBC&lt;/a&gt; support (for Java-based App Engine applications) and &lt;a href="http://wiki.python.org/moin/DatabaseProgramming/"&gt;DB-API&lt;/a&gt; support (for Python-based App Engine applications).&lt;/li&gt;
&lt;li&gt;Comprehensive user interface for administering databases.&lt;/li&gt;
&lt;li&gt;Simple and powerful integration with &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
The service includes database import and export functionality, so you can move your existing MySQL databases to the cloud and use them with App Engine.

Cloud SQL is available free of charge for now, and we will publish pricing at least 30 days before charging for it.  The service will continue to evolve as we work out the kinks during the preview, but &lt;a href=" http://goo.gl/jVq1m"&gt;let us know&lt;/a&gt; if you’d like to take it for a spin.
&lt;br&gt;&lt;br&gt;
&lt;em&gt;Posted by Navneet Joneja, Product Manager for Google Cloud SQL&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-5173012821722895771?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/lWnIjz0CXUs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/5173012821722895771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=5173012821722895771" title="21 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5173012821722895771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5173012821722895771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/lWnIjz0CXUs/google-cloud-sql-your-database-in-cloud.html" title="Google Cloud SQL: Your database in the cloud" /><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>21</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04AQn86eip7ImA9WhdUEEs.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8090562433515504904</id><published>2011-09-26T11:32:00.000-07:00</published><updated>2011-09-26T11:32:23.112-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T11:32:23.112-07:00</app:edited><title>Project WOW</title><content type="html">&lt;div class="c0"&gt;
&lt;i&gt;&lt;span class="c5"&gt;Today's post &lt;/span&gt;&lt;span class="c5"&gt;is contributed by&lt;/span&gt;&lt;span class="c5"&gt;&amp;nbsp;Edward Hartwell Goose of PA Consulting, who is working on an App for the UK’s &lt;/span&gt;&lt;span class="c8 c10"&gt;&lt;a class="c4" href="http://www.metoffice.gov.uk/"&gt;Met Office&lt;/a&gt;&lt;/span&gt;&lt;span class="c5"&gt;&amp;nbsp;to report everyone's favorite bit of small talk, the &lt;/span&gt;&lt;span class="c5"&gt;weather. &lt;/span&gt;&lt;span class="c5"&gt;W&lt;/span&gt;&lt;span class="c5"&gt;e hope you find the discussion of his team's experience using App Engine illuminating&lt;/span&gt;&lt;span class="c5"&gt;.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;i&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
The UK’s &lt;span class="c8"&gt;Met Office&lt;/span&gt;&amp;nbsp;is one of the world’s leading organisations&amp;nbsp;in weather forecasting, providing reports throughout the day for the UK and the rest of the world. The weather information they provide is consumed by a variety of industries from&amp;nbsp;shipping to aircraft, and powers some of the UK’s leading media organisations, such as the BBC.&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
Although the Met Office is&amp;nbsp;the biggest provider of weather data, they aren’t the only ones collecting information. Thousands of enthusiasts worldwide collect their own weather data, from a wide variety of weather stations - either simple temperature sensors or highly sophisticated stations that rival the Met Office’s own equipment. The question of course is: how do you harness the power of this crowd?&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c1"&gt;&lt;b&gt;Enter the Weather Observations Website&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
The Met Office and our&amp;nbsp;team from PA Consulting worked together to answer this question late last year. The end result was &lt;span class="c8"&gt;&lt;a class="c4" href="http://wow.metoffice.gov.uk/"&gt;The Weather Observations Website&lt;/a&gt;&lt;/span&gt;, or “&lt;span class="c8"&gt;WOW&lt;/span&gt;” for short. In the 3 months since launch on the 1st June 2011, WOW has recorded &lt;span class="c10"&gt;5.5 million weather reports &lt;/span&gt;from countries throughout the world. Furthermore, we can retrieve current reports in sub second times, providing a real time map of worldwide weather. We haven’t got the whole globe covered just yet and the&amp;nbsp;UK carries the most sites, but most countries in Western Europe are reporting. We also have reports from a medley of countries throughout the world, from Mauritius, Brazil and&amp;nbsp;as far away as New Zealand. We&amp;nbsp;even have one site reporting at regular intervals in &lt;span class="c8"&gt;&lt;a class="c4" href="http://wow.metoffice.gov.uk/latestobservationservlet?siteID=688218"&gt;Oman&lt;/a&gt;&lt;/span&gt;&amp;nbsp;(it’s hot!).&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
Better yet, as a development team of 2, since launch, we’ve spent almost no time at all doing anything but casual monitoring of WOW. No one carries a pager, and the one time we did have problems (we underestimated demand, and our quota ran out), I&amp;nbsp;was able to upgrade the quota in a minute or so. And I did it from my sofa. On my phone. &lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
How good is that?&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&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;a href="http://3.bp.blogspot.com/-YrOewIpAgIM/ToCQpYkSGaI/AAAAAAAAAK4/eM2_ahb28mM/s1600/image00.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="367" src="http://3.bp.blogspot.com/-YrOewIpAgIM/ToCQpYkSGaI/AAAAAAAAAK4/eM2_ahb28mM/s400/image00.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;WOW - Showing Live Temperature Data Across Europe&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="c0"&gt;
&lt;b&gt;&lt;span class="c1"&gt;Lessons Learn&lt;/span&gt;&lt;span class="c1"&gt;t Building for App Engine&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
We learnt&amp;nbsp;a lot building WOW. A huge amount in fact. And we’d love to share our insights with you. We’d also love to tell you what we love about App Engine&amp;nbsp;- and why you should use it too. And so you know we’re honest - we’ll tell you what we don’t like too!&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
Firstly - the good stuff. We think App Engine is a fantastic tool for prototyping and any team working in an agile environment. We’re big fans of &lt;span class="c8"&gt;&lt;a class="c4" href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;SCRUM&lt;/a&gt;&lt;/span&gt;&amp;nbsp;at PA Consulting, and App Engine was a dream to work with. Compared to some of our colleagues working with difficult build procedures and environments, our full release procedure never took more than 5 minutes. Better yet, App Engine’s deployment tools all hook&amp;nbsp;up with &lt;span class="c8"&gt;&lt;a class="c4" href="http://ant.apache.org/"&gt;ANT&lt;/a&gt;&lt;/span&gt;&amp;nbsp;and &lt;span class="c8"&gt;&lt;a class="c4" href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;&lt;/span&gt;&amp;nbsp;(our continuous build system), allowing us to run unit tests and deploy new code on every check-in&amp;nbsp;to our code repository. This allowed us as developers to get on with&amp;nbsp;what we do best: develop!&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
The APIs are great too. The documentation is fantastic and is regularly updated. We use all but the Channel API at the moment (sadly, it uses Google Talk&amp;nbsp;Infrastructure behind the scenes and this gets blocked by some corporate environments). If I could offer any advice to a budding App Engine developer it would be to thoroughly read the&amp;nbsp;documentation, and place the following three questions and their solutions at the forefront of everything you do:&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. Can I do it in the background? - Task Queue API&lt;/div&gt;
&lt;div class="c0"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2. Can I use the low-level API? - Datastore API&lt;/div&gt;
&lt;div class="c0"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3. Can I cache the result? - Memcache&amp;nbsp;API&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
These three principles have given WOW the performance it has, and will allow it to scale effectively over the coming years. We’ve got some big changes coming over the next couple of months too that should provide even higher performance as well as exciting new features. &lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c1"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c1"&gt;&lt;b&gt;Future Developments&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
So,&amp;nbsp;how about improvements App Engine could make?&amp;nbsp;There are definitely a few, although how important they are will depend on the problems you’re trying to solve.&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
To begin with, improvements to some of the non technical elements are needed before App Engine becomes truly mainstream. Needing a credit card to pay is a showstopper for some organisations. Backup and restore is also missing, unless you implement it yourself. This is perfectly possible, but can add significant man days to your development effort if your data structure is complex and fast changing.&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
We also struggled with how to estimate quota to begin with too. One of the brilliant features of App Engine is how easy it is to spool up (and down) new instances to deal with demand. Unfortunately, this also means it can be quite easy to &lt;span class="c10"&gt;accidentally&lt;/span&gt;&amp;nbsp;spool up too many instances and burn quota quickly.&amp;nbsp;Although this has never affected the actual data, it can cause an unpleasant spike in the amount of dollars spent. We also had a similar problem with a MapReduce job getting stuck overnight that caused a scare the next morning. Hopefully the new monitoring API should provide a bit more visibility of these issues as well as automatic email notifications to help catch these issues.&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
Aside from that, other features will probably depend on the application you’re trying to build. Built in support for geo-queries would be invaluable for WOW. Currently we use an external library, but this adds some extra overhead on our development. Another common feature request is full text search which is essential for projects dealing with large text corpa. Both of these features would allow us to provide better search facilities for our users - for example search by site name or geographic location. These queries can be implemented in App Engine as it is now, but achieving optimal performance and optimal cost are difficult problems that we struggle to complete ourselves.&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c1"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c1"&gt;&lt;b&gt;Final Thoughts&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
Overall, we’re really impressed by App Engine. The App Engine team regularly releases new versions, and although it does have limitations it has&amp;nbsp;allowed us to concentrate on what really matters to us - the weather. We know WOW will scale without any problems, and we don’t have to worry about any of the hardware configuration&amp;nbsp;or system administration that can easily consume time. Our small team of developers spends all of their time understanding the business problems and improving WOW.&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
We’re really looking forward to taking WOW forward in the future, we hope you can join us: &lt;span class="c8"&gt;&lt;a class="c4" href="http://wow.metoffice.gov.uk/"&gt;http://wow.metoffice.gov.uk&lt;/a&gt;&lt;/span&gt;.&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0"&gt;
Edward Hartwell Goose&amp;nbsp;(&lt;span class="c8"&gt;&lt;a class="c4" href="http://twitter.com/edhgoose"&gt;@edhgoose&lt;/a&gt;&lt;/span&gt;)&lt;/div&gt;
&lt;div class="c0"&gt;
Developer&lt;/div&gt;
&lt;div class="c0"&gt;
&lt;span class="c8"&gt;&lt;a class="c4" href="http://www.paconsulting.com/"&gt;PA Consulting&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c0 c6"&gt;
&lt;/div&gt;
&lt;div class="c3"&gt;
&lt;div class="c0 c2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8090562433515504904?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/TSSFs9CTqXs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8090562433515504904/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8090562433515504904" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8090562433515504904?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8090562433515504904?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/TSSFs9CTqXs/project-wow.html" title="Project WOW" /><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://3.bp.blogspot.com/-YrOewIpAgIM/ToCQpYkSGaI/AAAAAAAAAK4/eM2_ahb28mM/s72-c/image00.png" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/09/project-wow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYHQX07eyp7ImA9WhdaFUo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2948473387449036151</id><published>2011-09-22T07:30:00.000-07:00</published><updated>2011-10-25T13:22:10.303-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-25T13:22:10.303-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="devfests" /><category scheme="http://www.blogger.com/atom/ns#" term="location" /><category scheme="http://www.blogger.com/atom/ns#" term="app engine" /><category scheme="http://www.blogger.com/atom/ns#" term="developer days" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Fall 2011 App Engine events</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div style="text-align: -webkit-auto;"&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.17332692863419652" style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Buenos días desde Buenos Aires!! Wow, we are just blazing through the summer! We had an exciting &lt;/span&gt;&lt;a href="http://google.com/io"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google I/O&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; in May where we saw the &lt;/span&gt;&lt;a href="http://blog.golang.org/2011/05/go-and-google-app-engine.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;launch of the Go runtime&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, introduction of the &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/app-engine-150-release.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Backends&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; feature, and confirmed Google's commitment to the platform with our&lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;plans to leave preview mode&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, not to mention the &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;five&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; releases since that time. We then hit the road this summer with team members appearing around the globe, including mega events like the &lt;/span&gt;&lt;a href="http://cloudcomputingexpo.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Cloud Computing Expo&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://europython.eu/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;EuroPython&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and &lt;/span&gt;&lt;a href="http://oscon.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;OSCON&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Google I/O, many App Engine team members gave in-depth technical sessions. Alfred Fuller, an App Engine Datastore engineer, &lt;/span&gt;&lt;a href="http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;revealed how the High Replication datastore gives greater reliability and availability for users&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Michael Handler, one of App Engine’s talented Site Reliability Engineers, discussed &lt;/span&gt;&lt;a href="http://www.google.com/events/io/2011/sessions/life-in-app-engine-production.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;how App Engine works in production&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. At OSCON, the largest open source event in the world, yours truly gave a &lt;/span&gt;&lt;a href="http://www.oscon.com/oscon2011/public/schedule/detail/18981"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;three-hour App Engine overview and workshop&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;to help new users get up to speed, and earlier in the year at PyCon, described how Python users can avoid “vendor lock-in” via the &lt;/span&gt;&lt;a href="http://allbuttonspressed.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Django-nonrel&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; project by &lt;/span&gt;&lt;a href="http://us.pycon.org/2011/schedule/presentations/237"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;porting their applications from webapp to Django&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, allowing them to move on to or off of App Engine as they please with only minor configuration changes. We participate in events like these because we like to communicate with users to find out what they like &amp;amp; don’t like about the platform, and we often take their suggestions to heart! &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This fall we have a full schedule, appearing at &lt;/span&gt;&lt;a href="http://code.google.com/events/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;many developer events worldwide&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, including &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Days&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="http://code.google.com/events/devfests"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google DevFests&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. At the Google events, we'll &lt;a href="http://www.google.com/events/developerday/2011/buenos-aires/agenda/session_3001.html"&gt;recap App Engine&lt;/a&gt; and those announcements we made at I/O, and you’ll learn &lt;/span&gt;&lt;a href="http://www.google.com/events/developerday/2011/buenos-aires/agenda/session_3002.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;how to build exciting applications using App Engine and other Google cloud technologies&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;as well as &lt;/span&gt;&lt;a href="http://www.google.com/events/developerday/2011/buenos-aires/agenda/session_3005.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;how to build games in the cloud&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Here are the dates, events, and locations that we will be visiting:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Fall 2011&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sep 19-20 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/buenos-aires"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Argentina&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Buenos Aires - Wesley Chun, Chris Schalk&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sep 19-23 - &lt;/span&gt;&lt;a href="http://strataconf.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Strata&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; - New York - Chris Schalk&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sep 23-24 - &lt;/span&gt;&lt;a href="http://ar.pycon.org/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;PyCon Argentina&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Junín - Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sep 26-30 - &lt;/span&gt;&lt;a href="http://www.each.usp.br/cbsoft2011/ingles/index_en.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Congresso Brasileiro de Software&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; - São Paulo - Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sep 29-Oct 1 - &lt;/span&gt;&lt;a href="http://pythonbrasil.org.br/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Python Brasil[7]&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- São Paulo - Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Oct 8-9 - &lt;/span&gt;&lt;a href="http://siliconvalley-codecamp.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Silicon Valley CodeCamp&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Los Altos Hills - Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Oct 10 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/moscow"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Russia&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Moscow - Iein Valdez, Fred Sauer&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Oct 18 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/prague"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Czech Republic&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Prague - Iein Valdez, Fred Sauer&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Oct 20 - &lt;/span&gt;&lt;a href="http://code.google.com/events/devfests/2011/europe.html#paris"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google DevFest France&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Paris - Iein Valdez, Johan “Proppy“ Euphrosine&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 1 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/tokyo"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Japan&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Tokyo - Takashi Matsuo, Johan “Proppy“ Euphrosine&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 8 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/sydney"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Australia&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Sydney - Chris Schalk, Johan “Proppy“ Euphrosine&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 12 - &lt;/span&gt;&lt;a href="http://code.google.com/events/devfests/2011/seasia.html#singapore"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google DevFest Singapore&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Singapore - Chris Schalk, Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 13 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/tel-aviv"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Israel&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Tel-Aviv - Michael Manoochehri&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 16 - &lt;/span&gt;&lt;a href="http://code.google.com/events/devfests/2011/seasia.html#jakarta"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google DevFest Indonesia&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Jakarta - Chris Schalk, Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nov 19 - &lt;/span&gt;&lt;a href="http://google.com/events/developerday/2011/berlin"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Developer Day Germany&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- Berlin - Michael Manoochehri, Wesley Chun&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;If these aren't close enough to you, keep an eye out on this list as we'll add new events and locations as they are scheduled. A calendar with all of &lt;a href="http://code.google.com/events"&gt;Google's developer events&lt;/a&gt; is also available. We look forward to meeting you soon!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Posted by Wesley Chun (&lt;a href="http://twitter.com/wescpy"&gt;@wescpy&lt;/a&gt;), Google cloud &lt;a href="http://code.google.com/team"&gt;Developer Relations team&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2948473387449036151?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/WamHwiWmWls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2948473387449036151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2948473387449036151" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2948473387449036151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2948473387449036151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/WamHwiWmWls/fall-2011-app-engine-events.html" title="Fall 2011 App Engine events" /><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/2011/09/fall-2011-app-engine-events.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ASHo4cCp7ImA9WhdVFEg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6043097594916634403</id><published>2011-09-19T11:29:00.000-07:00</published><updated>2011-09-19T11:29:09.438-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T11:29:09.438-07:00</app:edited><title>Pictarine: pictures in the cloud</title><content type="html">&lt;i&gt;&lt;a href="http://www.pictarine.com/"&gt;Pictarine&lt;/a&gt; is a photo management web application, launched in 2010, that allows people to easily manage and share all of their photos from Flickr, Picasa, Facebook, Twitter and other sites. Pictarine developers Guillaume Martin and Maxime Rafalimanana have contributed the following post discussing their experiences using Google App Engine and Google Web Toolkit.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
From the start, we used Google technologies in developing Pictarine and we wanted to share our experience with them so far. In this post, we will shed some light on the weaknesses and strengths we found in Google Web Toolkit (GWT) and Google App Engine. We will also discuss how we leveraged GWT to build a new technology that allows Pictarine to seamlessly display photos from the computer directly into the browser. The following diagram is an overview of how our application works.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-GemnON2mJzs/Tndvp79Y-5I/AAAAAAAAAKs/PrGqX7DwVzA/s1600/Screen+shot+2011-09-19+at+9.36.27+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-GemnON2mJzs/Tndvp79Y-5I/AAAAAAAAAKs/PrGqX7DwVzA/s400/Screen+shot+2011-09-19+at+9.36.27+AM.png" width="358" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Building a mashup in the cloud with Google App Engine&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The Pictarine team is made of a web designer and two developers who previously worked mainly with Java based enterprise technologies and had a little experience with web technologies. When we started the project in early 2009, we were quite open on learning new languages like Python or Ruby, but when App Engine announced that Java would be supported, we were really excited to give Google App Engine a try.&lt;br /&gt;
&lt;br /&gt;
The first few months, learning about the App Engine environment was quite easy and dare I say fun. Testing our code on Google’s servers from Eclipse IDE was only one click away. So we built our first prototype fast and we quickly decided to adopt App Engine. Then we started to build the core of our application: the engine that uses the API from Flickr, Picasa, Facebook to fetch the users’ photos. This is where we hit the first limitations of App Engine. Most users have a lot of photos on these services and retrieving them can take some time. But App Engine has strict limits on how long a request should last: an outgoing HTTP request cannot last more than 10 seconds and cannot process a request for more than 30 seconds. So while building our architecture we found ourselves writing approximately one third of our code dealing with these limitations: paginating our requests, creating background tasks to store data in small batches, etc.&lt;br /&gt;
&lt;br /&gt;
In early 2010, when we launched our alpha version, everything went smoothly. We had some good press coverage and App Engine met our expectations in handling our first users. During 2010, we worked on implementing new features requested by our users, and during this period of time we were really impressed by the way App Engine evolved. Many of the limitations were lifted and great new features were added. We are now able to use Task Queues for requests that last up to 10 minutes, which we fully use to sync our users’ photos and albums. One of the features we like the most is the Channel API, a push notification system that allows us to instantly show a photo in every connected browser as soon as it is uploaded.
App Engine is still not perfect but has greatly improved and when we see its roadmap, we are quite confident it will continue to improve.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Building a fresh photo experience with Google Web Toolkit&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
When we started Pictarine, we wanted a fast, distraction free interface that would allow our users to focus on their photos. We wanted the interface to adapt to the screen resolution, displaying a lot of photos on large screens and fewer on small ones. We wanted it to be automatically updated when new comments or new photos are added. We wanted a web application. As we eliminated Flash quite quickly (based on our user experience...) we started to look at tools to build HTML/CSS/Javascript applications. We settled quickly on GWT: while coding in Java, with all the tools we are used to (even the debugger), we could produce optimized Javacript that would run in every browser! When we started with GWT, it was already 3 years old, so we had few complaints about it. The main issue was that we had to always keep in mind that the Java code we produced was ultimately translated to Javascript. So some Java methods, such as the Reflection API, are not allowed. Another thing that was not obvious to us when we started with GWT was that a java developer needs an intimate knowledge of HTML/CSS if he/she wants to go beyond the basic user interface provided by the GWT widgets.&lt;br /&gt;
&lt;br /&gt;
What we really like about GWT in our architecture is the ability to share code between client and server: we can use the same Photo or Album class on the client and the server and the GWT RPC system allows us to automatically share the same Java object on both side. We can also have the same data validation code on both sides: we can alert the user immediately on errors and still validate the data on the server just in case.&lt;br /&gt;
&lt;br /&gt;
Another great feature we like about GWT is its handling of internationalisation. From the beginning we wanted to build a website available for all Internet users, so supporting English as well as our native language (French) was almost obligatory. Fortunately, GWT makes it really easy to generate centralized localization files so that we just have to translate.&lt;br /&gt;
&lt;br /&gt;
Finally, to illustrate how great Javascript generation is, when IE9 came out, we waited a few weeks for GWT to support it and our application was compatible after a recompile! Of course, the IE9 team also did a good job with their HTML5/CSS3 engine.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Building an universal uploader&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
After the launch of our alpha in 2010, our users were able to see and share their photos from Flickr, Picasa, Facebook. But they still had to put their photos on these websites first before coming to Pictarine. This limitation quickly became the first request on our feedback system. We needed to let our users do everything from Pictarine, including uploading photos. Uploading many photos from a website is still not a trivial process. Most websites choose Flash to allow users to upload multiple files at once, but our experience with it was that it often crashed after a while. Some use Java applets, but they are never well integrated and always look odd. At Pictarine we decided to tackle this problem by using Java Applet for their stability across all platforms but without using it to render photos or folders.&lt;br /&gt;
&lt;br /&gt;
We have built a technology that uses the GWT RPC mechanism to talk to a Java Applet: photos, upload progression are rendered in HTML/CSS and the applet takes care of photos resizing and uploading. Sharing a photo from a camera is now a one-step process. This technology also allows users to browse their local files directly in their browser and it is fully integrated in our design.&lt;br /&gt;
&lt;br /&gt;
We believe that this new use of Java applets can help blur the line between the Desktop and the Cloud by seamlessly integrating desktop files in any web application.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-uC4dltxgzcg/TndwESMVmPI/AAAAAAAAAKw/Mj69ZA-iIMw/s1600/Screen+shot+2011-09-19+at+9.38.13+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://3.bp.blogspot.com/-uC4dltxgzcg/TndwESMVmPI/AAAAAAAAAKw/Mj69ZA-iIMw/s400/Screen+shot+2011-09-19+at+9.38.13+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In conclusion, we can say that we are really happy with the choices we made with App Engine and GWT. App Engine is a great service that perfectly handled the spike in traffic we saw right after articles on &lt;a href="http://mashable.com/2011/07/20/pictarine/"&gt;Mashable&lt;/a&gt; and &lt;a href="http://lifehacker.com/5823450/pictarine-takes-your-photos-on-various-sharing-sites-and-puts-them-in-one-place"&gt;Lifehacker&lt;/a&gt; were published. So we recommend it to every lean startup out there who loves developing in Java, Python or Go.

&lt;span class="byline-author"&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-6043097594916634403?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/M_jdO_conKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6043097594916634403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6043097594916634403" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6043097594916634403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6043097594916634403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/M_jdO_conKI/pictarine-pictures-in-cloud.html" title="Pictarine: pictures in the cloud" /><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://3.bp.blogspot.com/-GemnON2mJzs/Tndvp79Y-5I/AAAAAAAAAKs/PrGqX7DwVzA/s72-c/Screen+shot+2011-09-19+at+9.36.27+AM.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/09/pictarine-pictures-in-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCQX88fCp7ImA9WhdWGEs.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2401182800673271444</id><published>2011-09-12T12:59:00.000-07:00</published><updated>2011-09-12T15:06:00.174-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T15:06:00.174-07:00</app:edited><title>App Engine 1.5.4 SDK Release</title><content type="html">&lt;p&gt;It’s been a busy four weeks for us (you may have heard), but we are still on track with our new monthly release schedule. Today we have new SDKs for you, with some new features as well as some bug fixes.&lt;/p&gt;
&lt;h3&gt;Overall Changes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Blobstore API&lt;/b&gt; - We’ve introduced an option to specify a limit on your blob upload size. This feature will allow you to expose blob uploads to your users, while still being able to ensure that their uploads won't exceed your preferred limits.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Datastore Query Improvements&lt;/b&gt; - We’re also continuing our theme from the past few releases to tune our Datastore query planner to give users more flexibility. Starting with 1.5.4, queries with equality filters on multiple properties will now continue scanning up to the 30 second Datastore query deadline.  Many of these queries that used to generate an error due to inefficient indexes will now succeed.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Datastore Write Ops in the SDK&lt;/b&gt; - In response to the feedback from our recent Side By Side Bills release, we are now displaying the number of write ops needed to store an entity in the SDK dataviewer.  Write ops include both the entity write as well as the index writes that are executed when an entity is added. You can always reduce the number of write ops by turning your indexed properties into unindexed properties, just make sure you don’t reference those properties in any of your queries! (&lt;a href="http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Entity.html#setUnindexedProperty(java.lang.String, java.lang.Object)"&gt;Java&lt;/a&gt;, &lt;a href="http://code.google.com/appengine/docs/python/datastore/propertyclass.html#Property"&gt;Python&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Prospective Search API&lt;/b&gt; - We’ve released the experimental Java version of our Prospective Search API. Prospective Search lets you detect and take action on datastore entities that match certain criteria when they are written.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Python&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Memcache&lt;/b&gt; - You can now make calls asynchronously with the Memcache API. With Asynchronous Memcache, your application does not need to block on calls to the Memcache API and can continue processing a request instead of waiting for a response from Memcache.  Fear not Java friends, we’ll have matching functionality for you in an upcoming release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full release notes can be found in the usual location (&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;), and we’re always listening for your feedback in the groups. Happy coding!&lt;/p&gt;

&lt;span class="byline-author"&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-2401182800673271444?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/PK8FN17yBLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2401182800673271444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2401182800673271444" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2401182800673271444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2401182800673271444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/PK8FN17yBLs/app-engine-154-sdk-release.html" title="App Engine 1.5.4 SDK Release" /><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/09/app-engine-154-sdk-release.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMEQX87cCp7ImA9WhdWFUQ.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-853560962824881593</id><published>2011-09-09T11:52:00.000-07:00</published><updated>2011-09-09T11:53:20.108-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T11:53:20.108-07:00</app:edited><title>A few adjustments to App Engine’s upcoming pricing changes</title><content type="html">Last week &lt;a href="http://googleappengine.blogspot.com/2011/08/50-credit-for-new-billing-signups-and.html"&gt;we rolled out side-by-side billing&lt;/a&gt; to give you a more detailed preview of how you’ll be affected by the price changes &lt;a href="http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html"&gt;that we announced in May&lt;/a&gt;.  We received a variety of feedback and have made a few important changes based on it.  Our intent is to be as open and transparent about the changes as possible and to give you enough time to prepare.  In that spirit, our Engineering Director &lt;a href="https://plus.google.com/110401818717224273095/posts/AA3sBWG92gu"&gt;has also shared some of his personal thoughts&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
We understand that the new rates surprised some of you. We’ve been listening closely to your feedback, and we wanted to share an update on the changes we’re making to help ensure you have an accurate picture of how the new pricing will affect your app. Although prices will increase, we’re confident that you’ll find App Engine still provides great value.&lt;br /&gt;
&lt;br /&gt;
Based on your feedback we’re taking the following steps:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Extended review period&lt;/b&gt;: We’re now giving you almost eight weeks before introducing the new pricing.  You now have until November 1 to configure and tune your application to manage your costs.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Increased free Instance Hours&lt;/b&gt;: We are increasing the number of free Instance Hours from 24 to 28.  This means that people who are using a free app to try out App Engine can run a single instance all day with a few spikes and still remain below our free quota. &amp;nbsp;This will be reflected in the comparison bills soon.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Extended discount&lt;/b&gt;: We’ll continue to offer the 50% discount on instance prices until December 1st, at which time Python 2.7 should be available.  Python 2.7 will include support for concurrent requests, which could further lower your costs.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Faster Usage Reports&lt;/b&gt;: We appreciate the importance of quickly being able to see the effect your tuning has on your bill and starting today we’ll provide your Usage Report (and the included comparison bills) within one day instead of the previous three.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Better analysis tools&lt;/b&gt;: We are working on better ways for you to model the cost of your apps.  We will add the “billing” line into the instances graph on the Admin Console.  We’re adding datastore billing information into the dev console to making it easier for you to track how the changes you make affect your bill, which should also help lower the cost.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Premier accounts&lt;/b&gt;: we know a lot of our customers are eagerly awaiting Premier accounts to get operational support, offline billing, unlimited accounts, and the SLA.  So we will not wait until November 1st for this, but rather launch Premier accounts as soon as possible. &amp;nbsp;If you are interested in a Premier account, please contact us at&amp;nbsp;&lt;a href="mailto:appengine_premier_requests@google.com"&gt;appengine_premier_requests@google.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
We also wanted to share some of the main ways for you to lower your bill and get a better sense of the true cost of App Engine:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Set Max Idle instances&lt;/b&gt;: Setting Max Idle Instances to a lower level will help lower your costs as we will only charge for idle instances up to the maximum you set.  This could impact your performance so it’s worth reading up on the ramifications.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Always-On reflected in bills&lt;/b&gt;: Currently the side-by-side bills still include the cost of always-on even though it will be retired when the new pricing launches (to be replaced by min idle instances). We’re working on a fix for this.  Until then you can comfortably subtract 48 instance hours per day from the estimate.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reserved instance hours&lt;/b&gt;: The simplest way to lower the charge for instance hours is to consider using reserved instance hours.  They are 37.5% cheaper than on-demand, but you do need to commit to a certain number of them over the course of a week.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Managing resources&lt;/b&gt;: Check out &lt;a href="http://code.google.com/appengine/articles/managing-resources.html"&gt;this article&lt;/a&gt;, which provides more helpful advice on how to efficiently manage your resources and lower costs.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
We launched App Engine in preview three years ago to make it easier for you to build, maintain and scale web applications. Since then, we’ve added many features like Java and Go language support, created a High Replication Datastore, and added many other APIs.  And there’s a lot more cool stuff to come. It’s heartening to us that so many developers- 150,000 and counting- have chosen to use App Engine to run their apps. While we can’t continue to offer App Engine at our original prices, we can commit to listening to your feedback, acting on it, and working hard to give you a great platform for your apps at the most competitive price possible. If you find that’s not the case, or have any questions about this at all, please feel free to contact us at &lt;a href="mailto:appengine_updated_pricing@google.com"&gt;appengine_updated_pricing@google.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The App Engine Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-853560962824881593?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/aGxJujKYTB8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/853560962824881593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=853560962824881593" title="16 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/853560962824881593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/853560962824881593?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/aGxJujKYTB8/few-adjustments-to-app-engines-upcoming.html" title="A few adjustments to App Engine’s upcoming pricing changes" /><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>16</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/09/few-adjustments-to-app-engines-upcoming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AHRns6fSp7ImA9WhdXGE8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-440551119768598226</id><published>2011-08-31T14:22:00.000-07:00</published><updated>2011-08-31T14:22:17.515-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T14:22:17.515-07:00</app:edited><title>$50 Credit for new billing signups and budget changes</title><content type="html">&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span id="internal-source-marker_0.5021221602801234" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Google I/O this year, we &lt;/span&gt;&lt;a href="http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;announced&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; that App Engine will be going out of preview before the end of the year. &amp;nbsp;One aspect of leaving preview is our &lt;/span&gt;&lt;a href="http://www.google.com/enterprise/cloud/appengine/pricing.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;new pricing model&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. &amp;nbsp;As promised we have started providing the ability for any application Admin to compare their existing cost to their new costs in the Admin Console (under “Billing History”). &amp;nbsp;Now that you have an idea of what changes may impact your app, we’ve also written an article to help you &lt;/span&gt;&lt;a href="http://code.google.com/appengine/articles/managing-resources.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;optimize your application&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. &amp;nbsp;We know many of you would rather code than think about your budget and billing settings, so to help with the transition we are extending a one-time courtesy credit of $50 to all free Apps that sign up for billing and all paid Apps that modify their budgets between now and October 31, 2011. &amp;nbsp;Once you have signed up or made changes to your billing settings, a $50 credit will appear in the “Billing History” area of the Admin Console for your application. For more information on how to enable billing or change your settings, please see &lt;/span&gt;&lt;a href="http://code.google.com/appengine/docs/billing.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Billing and Budgeting Resources&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: 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;br /&gt;
&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;This is a big step for the App Engine Team; thank you for your continued support and feedback, and we hope you find these tools useful as we get closer to our goal of leaving preview!&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: 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;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: 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;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-440551119768598226?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/JrW1Cj61Gc0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/440551119768598226/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=440551119768598226" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/440551119768598226?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/440551119768598226?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/JrW1Cj61Gc0/50-credit-for-new-billing-signups-and.html" title="$50 Credit for new billing signups and budget changes" /><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>14</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/08/50-credit-for-new-billing-signups-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEASHs_eip7ImA9WhdQFkg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4438885528274274342</id><published>2011-08-17T10:11:00.000-07:00</published><updated>2011-08-18T00:30:49.542-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-18T00:30:49.542-07:00</app:edited><title>App Engine 1.5.3 SDK Released</title><content type="html">We’re pleased to announce another App Engine release today.  You might have noticed that the rate of releases has gone up slightly in the past few months.  We’ve made some changes internally so we are looking to push out a new release every month.  This month includes a few Datastore updates, some changes to Blobstore API and Memcache API, and finally a new feature for Java developers.&lt;br /&gt;
&lt;br /&gt;
Python and Java Changes
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Blobstore API&lt;/b&gt; - We’ve removed the limits on the size of blob uploads. You can now upload files of any size, allowing your app to serve images, video, or anything your internet connection can handle.&lt;/li&gt;
&lt;/ul&gt;
Datastore Changes
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Index retrieval&lt;/b&gt; - We’ve added the ability for you to programmatically retrieve the list of indexes you’ve currently defined in the datastore, as well as their statuses.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Datastore Admin&lt;/b&gt; - You can now &lt;a href="http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html"&gt;enable the Datastore Admin&lt;/a&gt; function from the Admin Console. This will allow Java users to make use of this functionality, like deleting all entities of a certain kind, without having to upload a Python version of their application. And for Python developers, you no longer need to enable this in your app.yaml file.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HRD Migration Trusted Testers&lt;/b&gt; - We are seeking early adopters to try out an improved HRD migration tool that requires a read-only period relative to your datastore write rate (as opposed to your datastore size, which is how the current version behaves).  Please see the release notes for more information.&lt;/li&gt;
&lt;/ul&gt;
Python Updates&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Memcache API&lt;/b&gt; - We now support the CAS (compare-and-swap) operation in our Python Memcache API (Java already had it). This can be used to update a value in Memcache only if no other requests have updated it between when the value was retrieved and when you go to update it.&lt;/li&gt;
&lt;/ul&gt;
Java Updates&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://code.google.com/appengine/docs/java/tools/uploadinganapp.html"&gt;Download app&lt;/a&gt;&lt;/b&gt; - Using the AppCfg download_app command, you can download any files that were uploaded from your war directory when you last updated the app version.&lt;/li&gt;
&lt;/ul&gt;
This release also contains small updates and bugfixes for both &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Python&lt;/a&gt; and &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;Java&lt;/a&gt; so be sure to check out the full release notes. Feedback, discussion, and questions can be posted in our &lt;a href="https://groups.google.com/group/google-appengine?pli=1"&gt;Google Group&lt;/a&gt;.&lt;br /&gt;
&lt;span class="byline-author"&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-4438885528274274342?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/_5OlEFNM47E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4438885528274274342/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4438885528274274342" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4438885528274274342?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4438885528274274342?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/_5OlEFNM47E/app-engine-153-sdk-released.html" title="App Engine 1.5.3 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>13</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/08/app-engine-153-sdk-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQHg_fyp7ImA9WhdRFUU.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8608107423956037924</id><published>2011-08-05T16:35:00.000-07:00</published><updated>2011-08-05T16:46:41.647-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-05T16:46:41.647-07:00</app:edited><title>Google App Engine receives SAS70 and SSAE-16 certification</title><content type="html">&lt;p&gt;As we get ready for App Engine to leave preview release later this year, we want to make clear that in addition to improving our reliability, adding new features, and introducing developer support, we are also committed to demonstrating we have sufficient controls in place to safeguard the data you store with us.&lt;/p&gt;
&lt;p&gt;Today we are happy to announce that over the past few weeks Google App Engine successfully completed the audit process for the &lt;a href="http://en.wikipedia.org/wiki/Statement_on_Auditing_Standards_No._70:_Service_Organizations"&gt;SAS70 Type II&lt;/a&gt;, &lt;a href="http://www.ssae-16.com/"&gt;SSAE 16 Type II&lt;/a&gt;, and &lt;a href="http://isae3402.com/"&gt;ISAE 3402 Type II&lt;/a&gt; standards.&lt;/p&gt;
&lt;p&gt;You can read more about the Google’s certifications and commitment to protect user data on the &lt;a href="http://googleenterprise.blogspot.com/2011/08/security-first-google-apps-and-google.html"&gt;Enterprise blog&lt;/a&gt;.&lt;/p&gt;

&lt;span class="byline-author"&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-8608107423956037924?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/tvGENYEK5fs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8608107423956037924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8608107423956037924" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8608107423956037924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8608107423956037924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/tvGENYEK5fs/google-app-engine-receives-sas70-and.html" title="Google App Engine receives SAS70 and SSAE-16 certification" /><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/2011/08/google-app-engine-receives-sas70-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QDQ3kzeCp7ImA9WhdSEko.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-7887877895263685265</id><published>2011-07-21T08:52:00.000-07:00</published><updated>2011-07-21T13:16:12.780-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-21T13:16:12.780-07:00</app:edited><title>App Engine 1.5.2 SDK Released</title><content type="html">&lt;p&gt;As the summer heat descends on the Northern Hemisphere we thought we’d release our newest App Engine version with some changes that are sure to keep you playing around in the cool, air-conditioned indoors (hey, you don’t want your computer to overheat, right?).&lt;/p&gt;
&lt;h3&gt;Production Changes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Adjustable Scheduler Parameters - As we previously discussed, we are introducing two scheduler knobs (okay, they actually look like sliders) that will allow you to control some of the parameters that influence how many Instances run your application. Today you will be able to set the minimum pending latency and maximum number of idle instances for your application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Datastore Changes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Advanced Query Planning - We are removing the need for exploding indexes and reducing the custom index requirements for many queries. The SDK will suggest better indexes in several cases and an upcoming article will describe what further optimizations are possible.&lt;/li&gt;
&lt;li&gt;Namespaced Datastore Stats - Now, in addition to getting overall datastore stats, we are providing a new option to query datastore stats per namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Task Queue Changes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New Task Queue details page - We’ve revamped the Task Queue details page in the Administration Console to provide more information about the tasks being run. You can now see the headers included in the enqueued task, the payload, and information from previous task runs.&lt;/li&gt;
&lt;li&gt;1MB Pull Task Size - It’s our belief that there is only one way for size limits to go - and that’s up! So with this release we’ve increased the size for pull tasks to 1MB.&lt;/li&gt;
&lt;li&gt;Pull queue lease modification - We’ve introduced a new method for Pull Queues that allows you to extend the lease on existing tasks if the initial lease on the task was insufficient.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lastly, we have some exciting news related to the experimental Go runtime. While it still remains experimental, starting with 1.5.2, all HRD apps will have access to the Go runtime in production.&lt;/p&gt;
&lt;p&gt;As always, there are also some small features and bug fixes, the full list of which can be found in our release notes (&lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Python&lt;/a&gt;, &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;Java&lt;/a&gt;). We look forward to your feedback and questions in our forum.&lt;/p&gt;
&lt;span class="byline-author"&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-7887877895263685265?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/igISIyMkF8s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/7887877895263685265/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=7887877895263685265" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7887877895263685265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7887877895263685265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/igISIyMkF8s/app-engine-152-sdk-released.html" title="App Engine 1.5.2 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>6</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2011/07/app-engine-152-sdk-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGSXw5fip7ImA9WhdQEUo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3317630004859582502</id><published>2011-07-20T12:24:00.000-07:00</published><updated>2011-08-12T10:47:08.226-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-12T10:47:08.226-07:00</app:edited><title>Postmortem: Java App Engine outage, July 14, 2011</title><content type="html">&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Last week, we posted about a limited outage on July 14, 2011.  Now that our internal postmortem is complete, we thought you would also like to get more detail about what went wrong and what we are going to do to ensure this doesn't happen again.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Root Cause and Analysis&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
The main lesson learned is to improve our live traffic testing as a relatively minor bug triggered a corner case for some of our customers. The bug was in a new release of the infrastructure in the App Engine Java execution environment.  During development, testing, and qualification, this bug was essentially hidden from view because it only manifested itself under specific load patterns.  During the outage, requests to affected applications would fail with errors when traffic was routed to affected instances. Application logs would have shown affected instances experienced high latency, error rates, or were not reachable from the Internet. This could have been caught by letting the live traffic testing run longer.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
In order for live traffic testing to work properly, we need to improve our monitoring as well. In this case, having more points from which to do black box monitoring would have helped immensely. We are currently working on much broader monitoring for App Engine and will be integrating more extensive black box testing in upcoming quarters.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Once again, we’d like to point out that we could have done a much better job of communicating issues to all of you.  While we strive to strike a balance between letting you know about major issues and not bothering you about the day-to-day operations; we clearly should have communicated this incident to you sooner.  Rest assured you’ll be better informed of issues in the future.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span"&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Timeline&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
July 14, 2011 - 11:30 AM US/Pacific - The new Java execution environment is released to production.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
July 14, 2011 - 5:00-6:00 PM US/Pacific - The previously scheduled Master/Slave read-only maintenance period occurred.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
July 14, 2011 - 8:00-9:30 PM US/Pacific - Monitoring shows error rates and latency for Java applications using the Master/Slave datastore are slowly increasing across the entire system. Investigation reveals that the new Java execution environment is malfunctioning.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
July 14, 2011 - 9:30 PM US/Pacific - Rollback of the Java execution environment to the previous version begins. Latency and error rates begin to fall.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
July 14, 2011 - 11:30 PM US/Pacific - Rollback of the Java execution environment to the previous version completes. Java Master/Slave applications are functioning normally.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Remediation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Faster notification on our status site and downtime-notify mailing list&lt;/li&gt;
&lt;li&gt;More live traffic stress tests for new releases&lt;/li&gt;
&lt;li&gt;Better black box monitoring to detect small impacts more quickly&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
[Edit] Clarification: no HR datastore apps were affected.&amp;nbsp;Overall, the outage resulted in a 1.9% error rate, affecting approximately 0.005% of all App Engine traffic at peak.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;span class="byline-author"&gt;Posted by Wesley Chun, Google 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-3317630004859582502?l=googleappengine.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/BJJH7TlN8Rw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3317630004859582502/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3317630004859582502" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3317630004859582502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3317630004859582502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/BJJH7TlN8Rw/postmortem-java-app-engine-outage-july.html" title="Postmortem: Java App Engine outage, July 14, 2011" /><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/2011/07/postmortem-java-app-engine-outage-july.html</feedburner:origLink></entry></feed>

