<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk4FRnk5fyp7ImA9WxJWE0s.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164</id><updated>2009-06-18T15:41:57.727-07:00</updated><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></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/GoogleAppEngineBlog" type="application/atom+xml" /><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;Dk4FRnk8fSp7ImA9WxJWE0s.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2781718930017307832</id><published>2009-06-18T14:56:00.000-07:00</published><updated>2009-06-18T15:41:57.775-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-18T15:41:57.775-07:00</app:edited><title>The new Task Queue API on Google App Engine</title><content type="html">&lt;p&gt;
With release 1.2.3 of the Python SDK, we are psyched to present an exciting new feature - the Task Queue API. You can now perform offline processing on App Engine by scheduling bundles of work (tasks) for automatic execution in the background. You don't need to worry about managing threads or polling - just write the task processing code, queue up some input data, and App Engine handles the rest. If desired, you can even organize and control task execution by defining custom queues. A quick example:
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
   # for each user, add a task to send a custom email message
   for u in users:
       taskqueue.add(url='/work/sendmail',
          params=dict(to=u.email, subject='Hello ' + u.name, body='this is a message!'))
  
   return # finished now, emails will be sent offline when tasks execute

   ...

   # task handler at /work/sendmail, automatically called for each task created above
   class MailWorker(webapp.RequestHandler):
      def post(self):
         mail.send_mail(
            'from_me@example.com',
            self.request.get('to'),
            self.request.get('subject'),
            self.request.get('body'))
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
We're eager to help you learn and experiment with Task Queues. The team recently presented the feature at Google I/O and &lt;a href="http://code.google.com/events/io/sessions/OfflineProcessingAppEngine.html"&gt;the video is now available&lt;/a&gt; (slides are &lt;a href="http://dl.google.com/io/2009/pres/Th_1045_Offline_Processing_On_App_Engine_A_Look_Ahead.pdf"&gt;here&lt;/a&gt;). We've also prepared &lt;a href="http://googleappengine.googlecode.com/svn/trunk/python/demos/taskqueue_examples/"&gt;a set of demos&lt;/a&gt; to help you get started. And of course, don't miss the &lt;a href="http://code.google.com/appengine/docs/python/taskqueue/overview.html"&gt;feature documentation&lt;/a&gt;. The Task Queue API is Python-only for now; we'll have a Java language version available soon.
&lt;/p&gt;

&lt;p&gt;
Please note that the Task Queue API is currently a Labs release - we want to get your feedback on its usability and functionality before finalizing the API. You'll notice that its Python import path currently includes the 'labs' module (google.appengine.api.labs.taskqueue). Before the feature is promoted out of Labs, we may need to:
&lt;ul&gt;
&lt;li&gt;
Change the quotas and limits which apply to Task execution (definitely, we hope to raise the number of Tasks you can use per day).
&lt;/li&gt;
&lt;li&gt;
Change the API itself if there are usability or functionality issues.
&lt;/li&gt;
&lt;li&gt;
Change how we bill for Task Queue usage.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Once we're ready to promote the feature out of Labs, we'll give weeks of notice and provide a transition path for our developers.
&lt;/p&gt;

&lt;p&gt;
Last but not least, the 1.2.3 release is full of other new stuff as well! Stay tuned to the blog for more updates or check &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;the release notes&lt;/a&gt; for exciting info on:
&lt;ul&gt;
&lt;li&gt;
Asynchronous urlfetch support
&lt;/li&gt;
&lt;li&gt;
Django 1.0 support
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Visit &lt;a href="http://code.google.com/appengine/downloads.html"&gt;the Downloads page&lt;/a&gt; to get SDK 1.2.3 now!
&lt;/p&gt;

&lt;p&gt;
The Task Queue API is the first milestone of our plan to deliver rich support for offline processing. There's more to come, but we hope the simplicity and power of this first release opens a new range of possibilities for our developers. Try it out and let us know! We'll be watching &lt;a href="http://groups.google.com/group/google-appengine-python"&gt;the Group&lt;/a&gt; for your input.
&lt;/p&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-2781718930017307832?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/aElHeSEMqvg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2781718930017307832/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2781718930017307832" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2781718930017307832?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2781718930017307832?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/aElHeSEMqvg/new-task-queue-api-on-google-app-engine.html" title="The new Task Queue API on Google App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/06/new-task-queue-api-on-google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYAQHg6eip7ImA9WxJXF0s.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8997403421625182748</id><published>2009-06-11T17:10:00.000-07:00</published><updated>2009-06-11T17:22:21.612-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-11T17:22:21.612-07:00</app:edited><title>App Engine @ Google I/O goodness for all to enjoy</title><content type="html">&lt;div&gt;Back in April when &lt;a id="lfsg" href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html" title="we launched Java support"&gt;we launched Java support&lt;/a&gt;, we gave the first 10,000 developers who signed up access to the new runtime. In case you haven't heard, we recently announced at Google I/O that App Engine for Java &lt;a id="e5e7" href="http://appengine.google.com/" title="signup is now open"&gt;signup is now open&lt;/a&gt;. We're excited to see more developers joining our community!&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&lt;/div&gt;
For those who missed Google I/O or want a refresher on the sessions, the videos are now posted online. From building a complex and scalable app on App Engine to offline processing, there are a lot of things to learn from these sessions. You can find a more detailed write up of the App Engine sessions in &lt;a id="vi7z" href="http://google-code-updates.blogspot.com/2009/06/google-app-engine-io-java-offline.html" title="this post to the Google Code Blog"&gt;this post to the Google Code Blog&lt;/a&gt;, but here's the complete list:
&lt;div&gt;
&lt;p style="margin-right: 0px; margin-left: 0px;"&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/FromSparkPlugToDriveTrain.html" style="color: rgb(0, 0, 204);"&gt;From Spark Plug to Drive Train: Life of an App Engine Request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/BuildingScalableComplexApps.html" style="color: rgb(0, 0, 204);"&gt;Building Scalable, Complex Apps on App Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/OfflineProcessingAppEngine.html" style="color: rgb(0, 0, 204);"&gt;Offline Processing on App Engine: a Look Ahead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/SofterSideofSchemas.html" style="color: rgb(0, 0, 204);"&gt;The Softer Side Of Schemas - Mapping Java Persistence Standards To the Google App Engine Datastore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html" style="color: rgb(0, 0, 204);"&gt;Transactions Across Datacenters (and Other Weekend Projects)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/AppEngineNittyGritty.html" style="color: rgb(0, 0, 204);"&gt;App Engine Nitty-Gritty: Scalability, Fault Tolerance, and Integrating Amazon EC2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/JrubyAppEngineJava.html" style="color: rgb(0, 0, 204);"&gt;JRuby and Ioke on Google App Engine for Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/AppEngineNowJava.html" style="color: rgb(85, 26, 139);"&gt;App Engine: Now Serving Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/DesignDistributedTransactionLayerAppEngine.html" style="color: rgb(0, 0, 204);"&gt;A Design for a Distributed Transaction Layer for Google App Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/ConnectingCloudsIntergratingAppEngine.html" style="color: rgb(0, 0, 204);"&gt;Connecting The Clouds: Integrating Google App Engine for Java with Force.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/ThoughtWorksAppEngineJava.html" style="color: rgb(0, 0, 204);"&gt;ThoughtWorks on App Engine for Java: An Enterprise Cumulonimbus?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/events/io/sessions/GroovyGrailsAppEngine.html" style="color: rgb(0, 0, 204);"&gt;Groovy and Grails in App Engine&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style="margin-right: 0px; margin-left: 0px;"&gt;&lt;a href="http://code.google.com/events/io/sessions/ConnectingCloudsIntergratingAppEngine.html" style="color: rgb(0, 0, 204);"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style="margin-right: 0px; margin-left: 0px;"&gt;&lt;a href="http://code.google.com/events/io/sessions/FromSparkPlugToDriveTrain.html" style="color: rgb(0, 0, 204);"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;Apart from the sessions, we also had a Developer Sandbox featuring App Engine partners and customers. We got a chance to interview and ask many of them to share their experience developing on App Engine. Check out these video interviews to get more insight to App Engine:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;a id="wik." href="http://code.google.com/events/io/sandbox/3scale.html" title="3Scale Networks"&gt;3Scale Networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="k3jh" href="http://code.google.com/events/io/sandbox/bestbuy.html" title="Best Buy"&gt;Best Buy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="g209" href="http://code.google.com/events/io/sandbox/caucho.html" title="Caucho Technology"&gt;Caucho Technology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="mwu_" href="http://code.google.com/events/io/sandbox/ezasset.html" title="EZasset"&gt;EZasset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="mcq." href="http://code.google.com/events/io/sandbox/gigapan.html" title="Gigapan.org"&gt;Gigapan.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="nhzu" href="http://code.google.com/events/io/sandbox/lifeaware.html" title="LifeAware"&gt;LifeAware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="rfqr" href="http://code.google.com/events/io/sandbox/lingospot.html" title="LingoSpot"&gt;LingoSpot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a id="n.26" href="http://code.google.com/events/io/sandbox/walkscore.html" title="WalkScore"&gt;WalkScore&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;

&lt;/div&gt;

&lt;div&gt;Last but not least, we've also made available the handy Python cheat sheet we gave out during Google I/O. You can download it &lt;a id="zhjj" href="http://googleappengine.googlecode.com/files/google_app_engine_cheat_sheet_python_122_11.pdf" title="here"&gt;here&lt;/a&gt;. We want to thank our partners and the App Engine developer community for a fantastic Google I/O 2009! It was great meeting those of you who were there. We look forward to the next year!&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&lt;/div&gt;

&lt;span class="byline-author"&gt;Posted by Amanda Surya, App Engine Team&lt;/span&gt;&lt;br&gt;
&lt;i&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-8997403421625182748?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/sHD02SL0bFU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8997403421625182748/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8997403421625182748" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8997403421625182748?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8997403421625182748?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/sHD02SL0bFU/app-engine-google-io-goodness-for-all.html" title="App Engine @ Google I/O goodness for all to enjoy" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/06/app-engine-google-io-goodness-for-all.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBQ3s4eyp7ImA9WxJXF0k.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3620194035259126190</id><published>2009-06-10T18:47:00.000-07:00</published><updated>2009-06-11T10:29:12.533-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-11T10:29:12.533-07:00</app:edited><title>Changing Quotas To Keep Most Apps Serving Free</title><content type="html">&lt;p&gt;Since App Engine launched, our goal has been to offer substantial free hosting resources to as many developers as possible. As previously announced, we are changing our free resource quota levels, effective on June 22nd. Our target level of free support has been 5 million page views per month for a reasonably efficient web application.&lt;/p&gt;&lt;p&gt;When we launched App Engine, we were intentionally generous in our free quotas, both because we didn't know resources usage of a typical request, and because we didn't offer a billing feature to allow developers to buy more resources for a higher-traffic app. Since our billing feature launched in February, developers with high-traffic applications can purchase additional resources far beyond our original fixed free quotas. Having been live for more than a year, we now have good empirical data on the average resource consumption per request, so we're able to set our quotas to more accurately support our 5 million page views target.&lt;/p&gt;&lt;p&gt;This change in the free quotas offered to every application is intended to allow us to continue to offer substantial free application hosting to any interested developer. We have grown a lot in the last year, with over 80,000 applications created, and with these changes to our free quotas, more than 90% of these applications will continue to serve completely free. To empirically determine reasonable levels for our quotas, we measured resource usage for all applications running on App Engine over a recent 7-day period. For each of the quotas, we took the highest daily average resource usage per HTTP request out of the 7-day period:&lt;/p&gt;&lt;div style="margin-left: 40px;"&gt;CPU: 0.14 CPU-seconds/request&lt;br&gt;Outbound data transfer: 6149 bytes out&lt;br&gt;Inbound data transfer: 803 bytes in&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;Multiplied by 5 million requests spread over a 30 day month, these per-request resource statistics translate to daily resource usage of 6.4 CPU-hours and 1.02 gigabytes of outbound data transfer. We top off the numbers by offering 6.5 CPU-hours and 1.07 gigabytes of outbound transfer. Though typically inbound data transfer is a small fraction of outbound data transfer, we made inbound and outbound data transfer symmetric to ease initial data uploads.&lt;/p&gt;&lt;p&gt;Finally — what do we mean by reasonably efficient applications? Simply put, efficient applications avoid unnecessary computation or data transfer, and two techniques common to efficient App Engine applications are the use of caching headers and memcache. Caching headers in an HTTP response prevent a user's browser from needlessly re-downloading information that hasn't changed, both speeding up the user experience and saving bandwidth. Similarly, memcache keeps frequently accessed data in a memory cache on App Engine servers, rather than always reading from disk in the Datastore, therefore saving CPU usage and Datastore load.&lt;/p&gt;&lt;p&gt;Again, these changes ensure we can keep our continuing promise to make it free to get started with App Engine.&lt;/p&gt;
&lt;span class="byline-author"&gt;Posted by Chris Beckmann, 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-3620194035259126190?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/rwhgYjEYm-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3620194035259126190/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3620194035259126190" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3620194035259126190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3620194035259126190?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/rwhgYjEYm-U/changing-quotas-to-keep-most-apps.html" title="Changing Quotas To Keep Most Apps Serving Free" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/06/changing-quotas-to-keep-most-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADQ3c6fSp7ImA9WxJXFEo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-231994490060950257</id><published>2009-06-05T14:44:00.000-07:00</published><updated>2009-06-08T07:52:52.915-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-08T07:52:52.915-07:00</app:edited><title>10 things you (probably) didn't know about App Engine</title><content type="html">&lt;p&gt;What could be better than nine nifty tips and tricks about App Engine? Why, ten of course. As we've been participating in the &lt;a href="http://code.google.com/appengine/community.html"&gt;discussion groups&lt;/a&gt;, we've noticed that some features of App Engine often go unnoticed so we've come up with just under eleven fun facts which might just change the way that you develop your app. Without further ado, bring on the first tip:&lt;/p&gt;&lt;h4&gt;1. App Versions are strings, not numbers&lt;/h4&gt;&lt;p&gt;Although most of the examples show the 'version' field in app.yaml and appengine-web.xml as a number, that's just a matter of convention. App versions can be any string that's allowed in a URL. For example, you could call your versions "live" and "dev", and they would be accessible at "live.latest.&lt;em&gt;yourapp&lt;/em&gt;.appspot.com" and "dev.latest.&lt;em&gt;yourapp&lt;/em&gt;.appspot.com".&lt;/p&gt;&lt;h4&gt;2. You can have multiple versions of your app running simultaneously&lt;/h4&gt;&lt;p&gt;As we alluded to in point 1, App Engine permits you to deploy multiple versions of your app and have them running side-by-side. All the versions share the samedatastore and memcache, but they run in separate instances and have different URLs. Your 'live' version always serves off yourapp.appspot.com as well as any domains you have mapped, but all your app's versions are accessible at version.latest.yourapp.appspot.com. Multiple versions are particularly useful for testing a new release in a production environment, on real data, before making it available to all your users.&lt;/p&gt;&lt;p&gt;Something that's less known is that the different app versions don't even have to have the same runtime! It's perfectly fine to have one version of an app using the Java runtime and another version of the same app using the Python runtime.&lt;/p&gt;&lt;h4&gt;3. The Java runtime supports any language that compiles to Java bytecode&lt;/h4&gt;&lt;p&gt;It's called the Java runtime, but in fact there's nothing stopping you from writing your App Engine app in any other language that compiles to JVM bytecode. In fact, there are already people writing App Engine apps in JRuby, Groovy, Scala, Rhino (a JavaScript interpreter), Quercus (a PHP interpreter/compiler), and even Jython! Our community has shared notes on what they've found to work and not work on the following &lt;a href="http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1"&gt;wiki page&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;4. The 'IN' and '!=' operators generate multiple datastore queries 'under the hood'&lt;/h4&gt;&lt;p&gt;The 'IN' and '!=' operators in the Python runtime are actually implemented in the SDK and translate to multiple queries 'under the hood'.&lt;/p&gt;&lt;p&gt;For example, the query "SELECT * FROM People WHERE name IN ('Bob', 'Jane')" gets translated into two queries, equivalent to running "SELECT * FROM People WHERE name = 'Bob'" and "SELECT * FROM People WHERE name = 'Jane'" and merging the results. Combining multiple disjunctions multiplies the number of queries needed, so the query "SELECT * FROM People WHERE name IN ('Bob', 'Jane') AND age != 25" generates a total of four queries, for each of the possible conditions (age less than or greater than 25, and name is 'Bob' or 'Jane'), then merges them together into a single result set.&lt;/p&gt;&lt;p&gt;The upshot of this is that you should avoid using excessively large disjunctions. If you're using an inequality query, for example, and you expect only a small number of records to exactly match the condition (e.g. in the above example, you know very few people will have an age of exactly 25), it may be more efficient to execute the query without the inequality filter and exclude any returned records that don't match it yourself.&lt;/p&gt;&lt;h4&gt;5. You can batch put, get and delete operations for efficiency&lt;/h4&gt;&lt;p&gt;Every time you make a datastore request, such as a query or a get() operation, your app has to send the request off to the datastore, which processes the request and sends back a response. This request-response cycle takes time, and if you're doing a lot of operations one after the other, this can add up to a substantial delay in how long your users have to wait to see a result.&lt;/p&gt;&lt;p&gt;Fortunately, there's an easy way to reduce the number of round trips: batch operations. The db.put(), db.get(), and db.delete() functions all accept lists in addition to their more usual singular invocation. When passed a list, they perform the operation on all the items in the list in a singledatastore round trip and they are executed in parallel, saving you a lot of time. For example, take a look at this common pattern:&lt;/p&gt;&lt;pre&gt;for entity in MyModel.all().filter("color =",
    old_favorite).fetch(100):
  entity.color = new_favorite
  entity.put()&lt;/pre&gt;&lt;p&gt;Doing the update this way requires one datastore round trip for the query, plus one additional round trip for each updated entity - for a total of up to 101 round trips! In comparison, take a look at this example:&lt;/p&gt;&lt;pre&gt;updated = []
for entity in MyModel.all().filter("color =",
    old_favorite).fetch(100):
  entity.color = new_favorite
  updated.append(entity)
db.put(updated)&lt;/pre&gt;&lt;p&gt;By adding two lines, we've reduced the number of round trips required from 101 to just 2!&lt;/p&gt;&lt;h4&gt;6. Datastore performance doesn't depend on how many entities you have&lt;/h4&gt;&lt;p&gt;Many people ask about how the datastore will perform once they've inserted 100,000, or a million, or ten million entities. One of the datastore's major strengths is that its performance is totally independent of the number of entities your app has. So much so, in fact, that every entity for every App Engine app is stored in a singleBigTable table! Further, when it comes to queries, all the queries that you can execute natively (with the notable exception of those involving 'IN' and '!=' operators - see above) have equivalent execution cost: The cost of running a query is proportional to the number of results returned by that query.&lt;/p&gt;&lt;h4&gt;7. The time it takes to build an index isn't entirely dependent on its size&lt;/h4&gt;&lt;p&gt;When adding a new index to your app on App Engine, it sometimes takes a significant amount of time to build. People often inquire about this, citing the amount of data they have compared to the time taken. However, requests to build new indexes are actually added to a queue of indexes that need to be built, and processed by a centralized system that builds indexes for all App Engine apps. At peak times, there may be other index building jobs ahead of yours in the queue, delaying when we can start building your index.&lt;/p&gt;&lt;h4&gt;8. The value for 'Stored Data' is updated once a day&lt;/h4&gt;&lt;p&gt;Once a day, we run a task to recalculate the 'Stored Data' figure for your app based on your actual datastore usage at that time. In the intervening period, we update the figure with an estimate of your usage so we can give you immediate feedback on changes in your usage. This explains why many people have observed that after deleting a large number of entities, theirdatastore usage remains at previous levels for a while. For billing purposes, only the authoritative number is used, naturally.&lt;/p&gt;&lt;h4&gt;9. The order that handlers in app.yaml, web.xml, and appengine-web.xml are specified in matters&lt;/h4&gt;&lt;p&gt;One of the more common and subtle mistakes people make when configuring their app is to forget that handlers in the application configuration files are processed in order, from top to bottom. For example, when installing remote_api, many people do the following:&lt;/p&gt;&lt;pre&gt;handlers:
- url: /.*
  script: request.py

- url: /remote_api
  script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
  login: admin&lt;/pre&gt;&lt;p&gt;The above looks fine at first glance, but because handlers are processed in order, the handler for request.py is encountered first, and all requests - even those for remote_api - get handled by request.py. Since request.py doesn't know about remote_api, it returns a 404 Not Found error. The solution is simple: Make sure that the catchall handler comes after all other handlers.&lt;/p&gt;&lt;p&gt;The same is true for the Java runtime, with the additional constraint that all the static file handlers in appengine-web.xml are processed before any of the dynamic handlers in web.xml.&lt;/p&gt;&lt;h4&gt;10. You don't need to construct GQL strings by hand&lt;/h4&gt;&lt;p&gt;One anti-pattern that comes up a lot looks similar to this:&lt;/p&gt;&lt;pre&gt;q = db.GqlQuery("SELECT * FROM People "
    "WHERE first_name = '" + first_name 
    + "' AND last_name = '" + last_name + "'")&lt;/pre&gt;&lt;p&gt;As well as opening up your code to injection vulnerabilities, this practice introduces escaping issues (what if a user has an apostrophe in their name?) and potentially, encoding issues. Fortunately,GqlQuery has built in support for parameter substitution, a common technique for avoiding the need to substitute in strings in the first place. Using parameter substitution, the above query can be rephrased like this:&lt;/p&gt;&lt;pre&gt;q = db.GqlQuery("SELECT * FROM People "
    "WHERE first_name = :1 "
    "AND last_name = :2", first_name, last_name)&lt;/pre&gt;&lt;p&gt;GqlQuery also supports using named instead of numbered parameters, and passing a dictionary as an argument:&lt;/p&gt;&lt;pre&gt;q = db.GqlQuery("SELECT * FROM People "
    "WHERE first_name = :first_name "
    "AND last_name = :last_name", 
    first_name=first_name, last_name=last_name)&lt;/pre&gt;&lt;p&gt;Aside from cleaning up your code, this also allows for some neat optimizations. If you're going to execute the same query multiple times with different values, you can useGqlQuery .bind() to 'rebind' the values of the parameters for each query. This is faster than constructing a new query each time, because the query only has to be parsed once:&lt;/p&gt;&lt;pre&gt;q = db.GqlQuery("SELECT * FROM People "
    "WHERE first_name = :first_name "
    "AND last_name = :last_name")
for first, last in people:
  q.bind(first, last)
  person = q.get()
  print person&lt;/pre&gt;

&lt;span class="byline-author"&gt;Posted by Nick Johnson, App Engine Team&lt;/span&gt;&lt;p&gt;&lt;i&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-231994490060950257?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/sU7lLvGeLQM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/231994490060950257/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=231994490060950257" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/231994490060950257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/231994490060950257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/sU7lLvGeLQM/10-things-you-probably-didnt-know-about.html" title="10 things you (probably) didn't know about App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/06/10-things-you-probably-didnt-know-about.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4FR3Y9cSp7ImA9WxJREks.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2974664116752008737</id><published>2009-05-13T17:59:00.000-07:00</published><updated>2009-05-13T18:01:56.869-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-13T18:01:56.869-07:00</app:edited><title>Java SDK version 1.2.1 now available</title><content type="html">&lt;p&gt;Version 1.2.1 of the App Engine SDK for Java is now available to &lt;a href="http://code.google.com/appengine/downloads.html"&gt;download&lt;/a&gt;. This was the first update to our new Java language support and includes a number of bug fixes and feature additions including:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for unindexed datastore properties of arbitrary types&lt;/li&gt;&lt;li&gt;Embedded UTF-8 characters in JSPs now render correctly&lt;/li&gt;&lt;li&gt;Increase in response size limit from 1MB to 10MB&lt;/li&gt;&lt;li&gt;Support for Thread.setContextLoader()&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are a host of updates for the JDO/JPA layer as well. The &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes"&gt;project wiki&lt;/a&gt; has a full list of fixes and new features.&lt;/p&gt;&lt;p&gt;As always, we're very interested in your feedback with the SDK, especially during this early look period -- please feel free to share your experiences in the &lt;a href="http://groups.google.com/group/google-appengine-java"&gt;Java runtime discussion group&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;i&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="byline-author"&gt;Posted by Jason Cooper, App Engine Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2974664116752008737?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/rOk2z0ZHs_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2974664116752008737/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2974664116752008737" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2974664116752008737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2974664116752008737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/rOk2z0ZHs_E/java-sdk-version-121-now-available.html" title="Java SDK version 1.2.1 now available" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/05/java-sdk-version-121-now-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCRXkyfyp7ImA9WxJREEs.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6629562777722809796</id><published>2009-05-11T09:47:00.000-07:00</published><updated>2009-05-11T10:04:24.797-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T10:04:24.797-07:00</app:edited><title>web2py support, new datastore backend for apps, and more!</title><content type="html">&lt;p&gt;It has been an exciting month and a half for App Engine since the last community update. In addition to two SDK updates, Cron support, new Java runtime, etc., there have been a host of noteworthy community developments as well, only a few of which are mentioned below.&lt;/p&gt;&lt;p&gt;&lt;b&gt;web2py Python framework now supports App Engine&lt;/b&gt;&lt;br/&gt;We are always interested in frameworks that natively support App Engine, and the &lt;a href="http://www.web2py.com/"&gt;web2py&lt;/a&gt; framework recently came to our attention. Completely written in Python, web2py is described as a "free and open source full-stack enterprise framework for agile development of fast, secure and portable database-driven web-based applications." If your framework has native App Engine support let us know and we'll include you in a future blog post.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Alternative datastore backend for App Engine applications released&lt;/b&gt;&lt;br/&gt;&lt;a href="http://arachnid.github.com/bdbdatastore/"&gt;bdbdatastore&lt;/a&gt; is an alternative datastore backend for App Engine applications. Now at version 0.2, bdbdatastore has complete feature parity with the App Engine's production datastore, meaning you can run your App Engine application on your own hardware with bdbdatastore as the storage backend without having to change any of the code written previously to access App Engine's native datastore. Intended primarily for developers who want to host their own App Engine-based apps, bdbdatastore manages to be far more robust and scalable than the datastore included with the development server while being more manageable than larger backends like HBase and HyperTable.&lt;/p&gt;&lt;p&gt;&lt;b&gt;App Engine supports White House town hall meeting&lt;/b&gt;&lt;br/&gt;In late March, the &lt;a href="http://www.whitehouse.gov/"&gt;White House&lt;/a&gt; hosted an online town hall meeting, soliciting questions from concerned citizens directly through its website. To manage the large stream of questions and votes, the White House used &lt;a href="http://moderator.appspot.com/"&gt;Google Moderator&lt;/a&gt;, which runs on App Engine. At its peak, the application received 700 hits per second, and across the 48-hour voting window, accepted over 104,000 questions and 3,600,000 votes. Despite this traffic, App Engine continued to scale and none of the other 50,000 hosted applications were impacted.&lt;/p&gt;&lt;p&gt;For more on this project, including a graph of the traffic and more details on how App Engine was able to cope with the load, see the &lt;a href="http://google-code-updates.blogspot.com/2009/04/google-developer-products-help.html"&gt;Google Code blog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;App Engine "Sprint" held in Taipei&lt;/b&gt;&lt;br/&gt;The Taipei App Engine Sprint was a coding event at Google Taipei office in mid-March. Seventeen Python developers split into five teams and worked for 10 hours straight to build a new application from scratch. in 10 hours. The winning application, &lt;a href="http://sighthistory.appspot.com/"&gt;Sight History&lt;/a&gt;, is a Picasa search-based application which displays a time distribution chart, slide show links, and a Google Map for photos queried from &lt;a href="http://code.google.com/apis/picasaweb/overview.html"&gt;Picasa Web Albums&lt;/a&gt;. Only one of the four developers on this team was an active web developer, which illustrates how easy it can be to turn a good idea into a working web application with App Engine and other Google APIs.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Earth Hour 2009 site hosted on App Engine&lt;/b&gt;&lt;br/&gt;&lt;a href="http://www.earthhour.org/home/"&gt;Earth Hour&lt;/a&gt;, an initiative of WWF, encourages individuals, businesses, and governments to turn off their lights for one hour to show their support for action on climate change. The site aims to raise awareness of climate change and to show people and companies how easy it is to take action to avoid global warming. After launching this past December on App Engine, the site was able to scale seamlessly to handle over 450 hits per second during the Earth Hour event on March 28, making it one of the top App Engine applications served that day.&lt;/p&gt;&lt;p&gt;&lt;span class="byline-author"&gt;Posted by Jason Cooper, Google App Engine Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-6629562777722809796?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/N2ZbHA_iYQU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6629562777722809796/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6629562777722809796" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6629562777722809796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6629562777722809796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/N2ZbHA_iYQU/web2py-support-new-datastore-backend.html" title="web2py support, new datastore backend for apps, and more!" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/05/web2py-support-new-datastore-backend.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAFQH46eSp7ImA9WxJSGE8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-5215143233053312368</id><published>2009-05-08T15:39:00.000-07:00</published><updated>2009-05-08T15:45:11.011-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T15:45:11.011-07:00</app:edited><title>Python SDK version 1.2.2 released</title><content type="html">&lt;p&gt;
We've released version 1.2.2 of the App Engine SDK for Python. Some highlights from the release notes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Urlfetch fetch now has support for user configurable deadlines.
&lt;/li&gt;&lt;li&gt;
Datastore indexes on single properties can now be disabled by setting indexed=False on the property constructor.
&lt;/li&gt;&lt;li&gt;
Datastore now supports Key-only queries, using either SELECT __key__ or db.Query(Model, keys_only=True)
&lt;/li&gt;&lt;li&gt;
Bulk Loader improvements:  New appcfg download_data command. Better backoff support and debugging output for long requests.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list see the &lt;a title="SdkReleaseNotes wiki page" href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" id="y5e2"&gt;SdkReleaseNotes wiki page&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Downloads for Windows, Mac, and Linux are available on the &lt;a title="Downloads" href="http://code.google.com/appengine/downloads.html"&gt;Downloads&lt;/a&gt; page. This SDK update was for the Python runtime, so please post your feedback in the &lt;a title="Python runtime discussion group" href="http://groups.google.com/group/google-appengine-python"&gt;Python runtime discussion group&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-5215143233053312368?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/8p0yASGCiFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/5215143233053312368/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=5215143233053312368" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5215143233053312368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5215143233053312368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/8p0yASGCiFI/python-sdk-version-122-released.html" title="Python SDK version 1.2.2 released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/05/python-sdk-version-122-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUGQH86fyp7ImA9WxJTFEk.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-8629414220985748521</id><published>2009-04-22T17:52:00.000-07:00</published><updated>2009-04-22T17:57:01.117-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-22T17:57:01.117-07:00</app:edited><title>SDK version 1.2.1 released</title><content type="html">&lt;p&gt;We've released version 1.2.1 of the SDK for the Python runtime. Here are some highlights from the release notes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Stable, unique IDs for
User objects. The Users service now provides a unique user_id for each
user that stays the same even if a user changes her email address.&lt;/li&gt;
&lt;li&gt;The Images API now supports compositing images and calculating a color histogram for an image.&lt;/li&gt;
&lt;li&gt;New allowed mail attachment types: ics, vcf&lt;/li&gt;
&lt;li&gt;Urlfetch requests can now set the User-Agent header.&lt;/li&gt;
&lt;li&gt;An App Engine-specific version of the Python PyCrypto cryptography library is now available. Learn more at &lt;a href="http://code.google.com/appengine/docs/python/tools/libraries.html"&gt;http://code.google.com/appengine/docs/python/tools/libraries.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The bulk loader configuration format has changed to allow non-CSV input.
This change is not backwards compatible, so if you've written code for the bulk loader, it will need to be updated.&lt;/li&gt;
&lt;li&gt;An early release of the bulk downloader is also now
available in &lt;code&gt;bulkloader.py&lt;/code&gt;. Learn more about these changes at: &lt;a href="http://code.google.com/appengine/docs/python/tools/uploadingdata.html"&gt;http://code.google.com/appengine/docs/python/tools/uploadingdata.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
For a full list see the &lt;a title="SdkReleaseNotes wiki page" href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" id="y5e2"&gt;SdkReleaseNotes wiki page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Downloads for Windows, Mac, and Linux are available on the &lt;a title="Downloads" href="http://code.google.com/appengine/downloads.html"&gt;Downloads&lt;/a&gt; page. This SDK update was for the Python runtime, so please post your feedback in the &lt;a title="Python runtime discussion group" href="http://groups.google.com/group/google-appengine-python"&gt;Python runtime discussion group&lt;/a&gt;.&lt;/p&gt;

&lt;span class="byline-author"&gt;Posted by Jeff Scudder, 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-8629414220985748521?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/tY-dZkiKnBE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/8629414220985748521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=8629414220985748521" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8629414220985748521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/8629414220985748521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/tY-dZkiKnBE/sdk-version-121-released.html" title="SDK version 1.2.1 released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/04/sdk-version-121-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DRXw-eCp7ImA9WxVaGE8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-846753420851259680</id><published>2009-04-15T14:04:00.000-07:00</published><updated>2009-04-15T14:11:14.250-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-15T14:11:14.250-07:00</app:edited><title>Early Look at Java language support expanded to 25,000 developers</title><content type="html">&lt;p&gt;
Have you &lt;a title="signed up" href="http://appengine.google.com/promo/java_runtime" id="vd28"&gt;signed up&lt;/a&gt; to try Google App Engine for Java yet? We were so overwhelmed with the response to our early look at Java support on App Engine that we decided to let more developers in now, without waiting. Thus, we're expanding the early look signups to 25,000 developers, in order to give more of you a chance to try it out. So please sign up, give it a try, and let us know what you think. We've already seen a number of interesting apps built and deployed. Stay tuned for us to point some of the cooler ones out in the coming weeks.
&lt;/p&gt;&lt;p&gt;
On another note, if you haven't delved down into the SDK and taken a look around, you may have missed the demo directory. Inside this directory you'll find a number of projects which demonstrate various features of &lt;a title="Google App Engine for Java" href="http://code.google.com/appengine/" id="t3oy"&gt;Google App Engine for Java&lt;/a&gt;. These demos are a great place to start if you want to learn more about App Engine by example, or if you just want to get hacking on something quickly. Last but not least, we hope these demos are of practical value too, as we included example Ant build scripts and organized the code with standard directory layouts and naming conventions.
&lt;/p&gt;&lt;p&gt;
Looking to create an end-to-end Java AJAX application? &lt;a title="Try out Sticky" href="http://sticky.appspot.com/" id="q.-m"&gt;Try out Sticky&lt;/a&gt;, the sticky note app written using &lt;a title="Google Web Toolkit" href="http://code.google.com/webtoolkit/" id="jjsy"&gt;Google Web Toolkit&lt;/a&gt; and App Engine. You'll find useful patterns you can use in your own code, the sample source itself is Apache licensed so feel free to use it directly.
&lt;/p&gt;&lt;p&gt;
Are your eyes set on a mobile app? Check out the source for &lt;a title="Task Engine" href="http://taskengine.appspot.com/" id="opzf"&gt;Task Engine&lt;/a&gt; . Also built with GWT, this simple task app is written with the iPhone and Android in mind.
&lt;/p&gt;&lt;p&gt;
If scaling your infrastructure is more your cup of tea, you can check out the shardedcounter example. It demonstrates how to implement distributed incrementing counters, which are useful for understanding how to scale larger applications on App Engine.
&lt;/p&gt;&lt;p&gt;
Note: If you installed the App Engine SDK with the &lt;a title="Google Plugin for Eclipse" href="http://code.google.com/eclipse/" id="vkg."&gt;Google Plugin for Eclipse&lt;/a&gt;, the SDK and accompanying demos can be found in your Eclipse installation directory, under plugins/com.google.appengine.eclipse.sdkbundle_&lt;i&gt;1.2.0.vXXX&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-846753420851259680?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/EJzKGMolfuk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/846753420851259680/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=846753420851259680" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/846753420851259680?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/846753420851259680?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/EJzKGMolfuk/early-look-at-java-language-support.html" title="Early Look at Java language support expanded to 25,000 developers" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/04/early-look-at-java-language-support.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCR3o8eCp7ImA9WxVaFks.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4665417814360664627</id><published>2009-04-13T17:00:00.000-07:00</published><updated>2009-04-13T17:19:26.470-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-13T17:19:26.470-07:00</app:edited><title>Many languages, and in the runtime bind them</title><content type="html">&lt;p&gt;
While working on &lt;a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html" id="srt_" title="App Engine's new Java runtime"&gt;App Engine's new Java runtime&lt;/a&gt;, we realized that we were missing something important. Something the Python runtime already had. Something sleek, yet powerful ... and approximately 80 characters wide and 25 characters tall. Yes, we're talking about the Python runtime's nifty &lt;a href="http://shell.appspot.com/" id="hm2q" title="shell app"&gt;shell demo app.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Naturally, we wanted to take the existing shell demo and extend its functionality for our new Java environment. Our idea was that we'd create one &lt;a href="http://en.wikipedia.org/wiki/REPL" id="rg6o" title="REPL"&gt;REPL&lt;/a&gt; to rule them all: a shell demo that supports several different JVM-based languages simultaneously. It was an easy decision to use &lt;a href="http://gwt.google.com/" id="j-jk" title="GWT"&gt;GWT&lt;/a&gt; to build the user-interface, making the terminal interface a cinch. Once we had the basic shell framework, we then added some languages: Beanshell, Clojure, Groovy, JavaScript, Python, Ruby, Scala, and Scheme.
&lt;/p&gt;
&lt;p&gt;
This helps us underscore two important compatibility features of Java App Engine:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Google App Engine for Java accepts Java bytecode, not Java source code. &lt;span style="background-color: rgb(255, 255, 255);"&gt;It even supports loading bytecode generated at run time. That &lt;/span&gt;means that our new Java runtime can support any language with a compiler that targets the JVM. In fact, many advanced scenarios work as well - such as libraries that rely on runtime bytecode generation (such as &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection" id="naz9" title="dependency injection"&gt;dependency injection&lt;/a&gt; frameworks, &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" id="mmdf" title="AOP"&gt;AOP&lt;/a&gt; libraries, and &lt;a href="http://en.wikipedia.org/wiki/Expression_Language" id="ptbp" title="expression-language"&gt;expression-language&lt;/a&gt; runtimes).
&lt;/li&gt;
&lt;li&gt;
The security &lt;a href="http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox" id="skag" title="sandbox"&gt;sandbox&lt;/a&gt; in Google App Engine for Java is flexible. Other techniques for sandboxing Java can be restrictive about the permissions they grant to untrusted code, limiting the types of constructs you can use. For example, many secure Java environments don't allow you to create custom ClassLoaders or use tricks for reflection like &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible%28boolean%29" id="y0oa" title="setAccessible"&gt;setAccessible&lt;/a&gt;. Java App Engine attempts to provide this type of functionality in a secure fashion, making it possible to run more types of code (and more languages).
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Now, it must be said: please note that this is a demonstration app we developed to show off the power and flexibility of our new Java runtime; it's not a production service, and you shouldn't rely on it for anything important. Further, since this is a single shared instance of this application, running server code code from many users at once, you should exercise caution in entering any sensitive data like passwords into this demo. Finally, though we've worked to ensure rich functionality for as many languages as possible, this is still a proof of concept, and there is surely some language functionality missing from our environment.
&lt;/p&gt;
&lt;p&gt;
But, without further ado, may we present to you, the &lt;a href="http://lotrepls.appspot.com/" id="voow" title="Lord of the REPLS"&gt;Lord of the REPLS&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;-- Google Software Engineers, Toby Reyelts and James Robinson.&lt;/p&gt;
&lt;i&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4665417814360664627?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/eY7tQZGkCYA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4665417814360664627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4665417814360664627" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4665417814360664627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4665417814360664627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/eY7tQZGkCYA/many-languages-and-in-runtime-bind-them.html" title="Many languages, and in the runtime bind them" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/04/many-languages-and-in-runtime-bind-them.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ARn45fCp7ImA9WxVaEUs.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2843184328265306364</id><published>2009-04-07T17:28:00.000-07:00</published><updated>2009-04-07T22:00:47.024-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-07T22:00:47.024-07:00</app:edited><title>Seriously this time, the new language on App Engine: Java™</title><content type="html">&lt;p&gt;Today, we're very excited to announce the availability of a new programming language for Google App Engine. Please welcome the Java runtime!&lt;/p&gt;&lt;p&gt;When the two of us first heard the promise of Google App Engine, we realized that the chance to bring this kind of simplicity to Java developers was too good of an opportunity to pass up.  When App Engine launched publicly, we were excited to see that Java language support was both &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=1"&gt;the first and the most popular request&lt;/a&gt; filed in the Issue Tracker. We were also thrilled to see that this enthusiasm extended beyond the Java language to all of the &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=102"&gt;various programming languages&lt;/a&gt; that have been implemented on top of the Java virtual machine -- not to mention all of the popular web frameworks and &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=30"&gt;libraries&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;But we also knew that Java developers are choosy:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;They live by their powerful tools (Eclipse, Intellij, NetBeans, Ant, etc.).&lt;/li&gt;&lt;li&gt;They try to avoid lock-in and strive for re-use. Standards-based development (defacto or otherwise) is key.&lt;/li&gt;&lt;li&gt;They harness sophisticated libraries to perform language feats which are nearly magical (&lt;a href="http://gwt.google.com/"&gt;GWT&lt;/a&gt;, &lt;a href="http://code.google.com/p/google-guice/"&gt;Guice&lt;/a&gt;, CGLIB, AspectJ, etc...).&lt;/li&gt;&lt;li&gt;They even use alternate languages on the JVM, like &lt;a href="http://blog.springsource.com/2009/04/07/write-your-google-app-engine-applications-in-groovy/"&gt;Groovy&lt;/a&gt;, Scala, and JRuby.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We wanted to give developers something that they could be ecstatic about, but we knew we would have to marry the simplicity of Google App Engine with the power and flexibility of the Java platform. We also wanted to leverage the App Engine infrastructure -- and by extension Google's infrastructure -- as much as possible, without giving up compatibility with existing Java standards and tools.&lt;/p&gt;&lt;p&gt;And so that's what we did. App Engine now supports the standards that make Java tooling great. (We're working on the tooling too, with &lt;a href="http://code.google.com/eclipse"&gt;Google Plugin for Eclipse&lt;/a&gt;). It provides the current App Engine API's and wraps them with standards where relevant, like the Java Servlet API, JDO and JPA, javax.cache, and javax.mail. It also provides a secure sandbox that's powerful enough to run your code safely on Google's servers, while being flexible enough for you to break abstractions at will.&lt;/p&gt;&lt;p&gt;There is a vast amount of Java code out there, much of it written without consideration of sandboxing, and we can't test it all. We know that there will be some rough edges when it comes to compatibility, but we're looking forward to working with you to smooth those out. To that end, we're giving the first 10,000 interested developers an early look at Java language support, so please &lt;a href="http://appengine.google.com/promo/java_runtime"&gt;sign up&lt;/a&gt;, give it a whirl, and &lt;a href="http://groups.google.com/group/google-appengine-java"&gt;give us lots of feedback&lt;/a&gt;.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dLfQMJsmsaI/SdvwPx8hz5I/AAAAAAAAACY/I_DEfn6nQjc/s1600-h/ae_gwt_java.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 247px;" src="http://2.bp.blogspot.com/_dLfQMJsmsaI/SdvwPx8hz5I/AAAAAAAAACY/I_DEfn6nQjc/s320/ae_gwt_java.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5322111538564288402" /&gt;&lt;/a&gt;&lt;p&gt;The team has also been working on many other improvements to App Engine, which we're really excited to launch to you as well:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/securedataconnector/"&gt;Access to firewalled data&lt;/a&gt;: grant policy-controlled access to your data behind the firewall.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/appengine/docs/python/config/cron.html"&gt;Cron support&lt;/a&gt;: schedule tasks like report generation or DB clean-up at an interval of your choosing.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/appengine/docs/python/tools/uploadingdata.html"&gt;Database import&lt;/a&gt;: move GBs of data easily into your App Engine app. Matching export capabilities are coming soon, hopefully within a month.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Last but not least, the App Engine team will be at the upcoming &lt;a href="http://code.google.com/events/io#utm_source=appengineblog&amp;amp;utm_medium=link&amp;amp;utm_campaign=io2009_campfire"&gt;Google I/O developer event&lt;/a&gt; on May 27-28 in San Francisco, so please come meet us in person.&lt;/p&gt;&lt;p&gt;We look forward to seeing your applications. Get coding!&lt;/p&gt;&lt;p&gt;&lt;span class="byline-author"&gt;Posted by Don Schwarz and Toby Reyelts, Software Engineers, Google App Engine Team&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2843184328265306364?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/qbQRNFfJdtQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2843184328265306364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2843184328265306364" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2843184328265306364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2843184328265306364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/qbQRNFfJdtQ/seriously-this-time-new-language-on-app.html" title="Seriously this time, the new language on App Engine: Java&amp;trade;" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_dLfQMJsmsaI/SdvwPx8hz5I/AAAAAAAAACY/I_DEfn6nQjc/s72-c/ae_gwt_java.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBRn0-eip7ImA9WxVbFk8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2698849804257865750</id><published>2009-04-01T14:22:00.000-07:00</published><updated>2009-04-01T14:29:17.352-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-01T14:29:17.352-07:00</app:edited><title>A Brand New Language on Google App Engine!</title><content type="html">&lt;span class="byline-author"&gt;Posted by Alon Levi, App Engine Team&lt;/span&gt;&lt;br/&gt;

&lt;p&gt;It's been almost a year since we've launched App Engine with support for Python, and what a year it's been!  We've gotten fantastic &lt;a href="http://code.google.com/p/googleappengine/issues/list"&gt;feedback&lt;/a&gt; from developers, and we've released &lt;a href="http://code.google.com/appengine/docs/roadmap.html"&gt;loads of new features&lt;/a&gt;!  When we launched, we promised support for another runtime language, and indeed this has been among the most requested features from our developers since day one.&lt;/p&gt;


&lt;p&gt;Well, we fed Google's new &lt;a href="http://www.google.com/intl/en/landing/cadie/index.html"&gt;CADIE Strategic Decision Maker&lt;/a&gt; the App Engine issue tracker, our groups, and various blog posts around the internet to help select a new runtime language for App Engine.  Today we're excited to officially announce support for &lt;a href="http://en.wikipedia.org/wiki/Fortran"&gt;FORTRAN 77!&lt;/a&gt;&lt;/p&gt;


&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dLfQMJsmsaI/SdPbX3uXlQI/AAAAAAAAACQ/_p2qiTuwVFc/s1600-h/appengine_fortran.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_dLfQMJsmsaI/SdPbX3uXlQI/AAAAAAAAACQ/_p2qiTuwVFc/s320/appengine_fortran.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319836787996595458" /&gt;&lt;/a&gt;

&lt;p&gt;If you're an enterprise customer and want to take advantage of Google App Engine, but have a large and cumbersome legacy system, we want to make it easy for you to port to &lt;emph&gt;the cloud&lt;/emph&gt;. By providing a Fortran 77 runtime, along with a familiar, easy-to-use deployment mechanism, we hope to make this process efficient and straightforward.&lt;/p&gt;

&lt;p&gt;Want to give it a try?  Download our &lt;a href="http://upload.wikimedia.org/wikipedia/en/1/18/FortranCodingForm.png"&gt;SDK&lt;/a&gt; and deploy your application by mailing punch cards to:&lt;/p&gt;

&lt;p style="text-align:center"&gt;
Google App Engine, C/O APPCFG&lt;br/&gt;
1600 Amphitheatre Pkwy&lt;br/&gt;
Mountain View, CA 94043&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;and we'll take care of the rest!  We welcome your feedback on our newest addition to the App Engine family--you can discuss it on our &lt;a href="http://groups.google.com/group/google-appengine?pli=1"&gt;Google Group&lt;/a&gt;!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-2698849804257865750?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/M3XuoBlZ7Oo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2698849804257865750/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2698849804257865750" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2698849804257865750?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2698849804257865750?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/M3XuoBlZ7Oo/brand-new-language-on-google-app-engine.html" title="A Brand New Language on Google App Engine!" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dLfQMJsmsaI/SdPbX3uXlQI/AAAAAAAAACQ/_p2qiTuwVFc/s72-c/appengine_fortran.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/04/brand-new-language-on-google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8BRHk_eCp7ImA9WxVUFE4.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-614432720368755026</id><published>2009-03-18T20:44:00.000-07:00</published><updated>2009-03-18T20:54:15.740-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T20:54:15.740-07:00</app:edited><title>Google App Engine on the Road</title><content type="html">&lt;p&gt;More members of the App Engine team are hitting the road in the next two
weeks. If you'll be at any of the following events we'd love to meet and talk
shop! Here's where you can find us: &lt;/p&gt; 

&lt;p&gt;&lt;b&gt; Wednesday March 18th&lt;br&gt; 5:00
    pm - 6:00 pm&lt;br&gt;
    New York City&lt;br&gt; &lt;/b&gt;&lt;/p&gt; 

&lt;p&gt;Pete Koomen will be at &lt;a
    title="CommunityOne East"
    href="http://developers.sun.com/events/communityone/2009/east/"&gt;CommunityOne
    East&lt;/a&gt; participating in the Closing Panel Discussion – "Enterprises and
the Cloud". The panel will be moderated by David Berlind, Editor-At-Large of
InformationWeek, and the panelists include Adam Gross, Vice President of
Developer Marketing, Salesforce and Lew Tucker, Vice President and CTO, Cloud
Computing, Sun Microsystems, Inc.  &lt;/p&gt;

&lt;p&gt;&lt;b&gt;
    Wednesday March 25th&lt;br&gt;
    9:00 am - 12:20 pm&lt;br&gt;
    Chicago&lt;/b&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Joe Gregorio will be
teaching a half-day tutorial at PyCon 2009 entitled &lt;a title="An Introduction
    to Google App Engine"
    href="http://us.pycon.org/2009/tutorials/schedule/1AM6/"&gt;An
    Introduction to Google App Engine&lt;/a&gt;. From the session description:
"Google App Engine allows you to build scalable web applications and host them
on Google hardware. This hands on tutorial will walk you through the steps of
building a basic web application, from setting up the SDK through to using the
major APIs that App Engine provides."&lt;/p&gt;
&lt;p&gt; &lt;b&gt;
    Thursday March 26th&lt;br&gt;
    1:30 pm - 2:30 pm&lt;br&gt; 
    Philadelphia&lt;br&gt; &lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Joe Gregorio will be giving the
presentation "Under the Covers of the App Engine Datastore" on March 26th
at the &lt;a title="Emerging Technologies for the Enterprise conference in
    Philadephia" href="http://www.phillyemergingtech.com/"&gt;Emerging
    Technologies for the Enterprise conference in Philadephia&lt;/a&gt;. 

From the session description: "This talk walks through the
internals of the App Engine Datastore, how data is stored, how indexes are
built, and how queries are executed. We then discuss how those
architectural decisions make the App Engine datastore scalable and finally
go into how those constraints affect how you design your applications
schema so your application can take full advantage of that
scalability."
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Wednesday April 1st&lt;br&gt;
    Time TBD&lt;br&gt; 
    New York City&lt;br&gt; &lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
For the second time in two weeks we return to New York City
where Joe Gregorio will be giving the same "Under the Covers of the App
Engine Datastore" talk at the &lt;a title="Cloud Computing Expo in New
    York City" href="http://cloudcomputingexpo.com/"&gt;Cloud Computing
    Expo in New York City&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;Posted by Joe Gregorio, App Engine Team&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-614432720368755026?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/6jeU76TBw3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/614432720368755026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=614432720368755026" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/614432720368755026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/614432720368755026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/6jeU76TBw3A/google-app-engine-on-road_18.html" title="Google App Engine on the Road" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/03/google-app-engine-on-road_18.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDRno5fyp7ImA9WxVUEk4.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3800974304806872325</id><published>2009-03-16T11:26:00.000-07:00</published><updated>2009-03-16T12:09:37.427-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-16T12:09:37.427-07:00</app:edited><title>Jaiku moves to App Engine, new article on remote_api, and more!</title><content type="html">&lt;p&gt;A number of exciting App Engine-related snippets have made the rounds over the past couple of weeks. Here's a quick summary:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Jaiku moves to App Engine&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Last April, Jaiku's official blog &lt;a href="http://jaikido.blogspot.com/2008/04/wroom-were-moving-to-google-app-engine.html"&gt;confirmed&lt;/a&gt; that Jaiku was being ported to App Engine. We are pleased to announce that not only is Jaiku now &lt;a href="http://jaikido.blogspot.com/2009/03/jaiku-is-becoming-jaikuengine.html"&gt;hosted on App Engine&lt;/a&gt;, but substantial progress is being made on the related open source effort to build out the Jaiku-based microblogging platform, &lt;a href="http://code.google.com/p/jaikuengine/"&gt;Jaiku Engine&lt;/a&gt;, which allows organizations, groups, and invidivuals to deploy their own microblogging service to App Engine. For more details, check out the official &lt;a href="http://jaikido.blogspot.com/2009/03/jaikuengine-is-now-open-source.html"&gt;Jaiku blog posting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Trender apps launched on App Engine&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Jaiku isn't the only application to launch on App Engine in recent weeks. Enter &lt;a href="http://tyn-search.appspot.com/"&gt;NYT Trender&lt;/a&gt; and &lt;a href="http://flickrtrends.appspot.com/"&gt;Flickr Trends&lt;/a&gt; which allow users to view the popularity of search terms over time based on occurrence in the New York Times and Flickr respectively. Both mashups display relevant photos for the terms entered, adding to the richness of the experience.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;New remote_api article available&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Googler Nick Johnson recently published a handy &lt;a href="http://code.google.com/appengine/articles/remote_api.html"&gt;guide&lt;/a&gt; introducing the remote_api module which debuted with release 1.1.9 of the App Engine SDK. The module allows remote access to an application's datastore and Nick's guide describes how to set up and use it with plenty of sample code to help you build your own interactive console and map framework. Also, in case you missed them when they were first posted, the articles on &lt;a href="http://code.google.com/appengine/articles/paging.html"&gt;paging&lt;/a&gt; and avoiding datastore contention using &lt;a href="http://code.google.com/appengine/articles/sharding_counters.html"&gt;sharded counters&lt;/a&gt; are great reads as well, particularly if you're interested in building a highly scalable and efficient apps.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;App Engine at WeekendApps&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Over the weekend of Feb. 20th, 130 developers descended on the Googleplex in order to design, build, and launch an OpenSocial-based application as part of the &lt;a href="http://opensocial.weekendapps.com/"&gt;WeekendApps - OpenSocial&lt;/a&gt; event. While &lt;a href="http://www.opensocial.org/"&gt;OpenSocial&lt;/a&gt; was the star of the show, App Engine garnered a lot of interest itself with &lt;a href="http://code.google.com/appengine/casestudies.html#buddypoke"&gt;BuddyPoke!&lt;/a&gt; creator Dave Westwood and App Engine advocate Fred Sauer in attendance. In the end, over 14 new applications were presented, at least 3 of which were built on App Engine. Of these three, the team behind &lt;a href="http://www.orkut.com/Main#AppInfo.aspx?appUrl=http%3A%2F%2Fbuddyquiz.appspot.com%2Fstatic%2Fcontainers%2Forkut.xml"&gt;Buddy Quiz!&lt;/a&gt; won a Google I/O pass for "best product vision" and another, &lt;a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewProfile&amp;friendID=455465207"&gt;Yumie Date&lt;/a&gt;, recently received an Editor's Pick promotion from MySpace. Neither team had ever used App Engine prior to the event and one had never even worked with Python.&lt;/p&gt;

&lt;p&gt;&lt;span class="byline-author"&gt;Posted by Jason Cooper, Google App Engine Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3800974304806872325?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/TLank7EyPxw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3800974304806872325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3800974304806872325" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3800974304806872325?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3800974304806872325?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/TLank7EyPxw/jaiku-moves-to-app-engine-new-article.html" title="Jaiku moves to App Engine, new article on remote_api, and more!" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/03/jaiku-moves-to-app-engine-new-article.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGSHY-eip7ImA9WxVVF0Q.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4405069814967259983</id><published>2009-03-11T00:23:00.000-07:00</published><updated>2009-03-11T10:27:09.852-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-11T10:27:09.852-07:00</app:edited><title>Join App Engine at SXSW</title><content type="html">&lt;br&gt;
&lt;p&gt;
Several of the App Engine team members are excited to be heading to Austin, Texas for &lt;a href="http://sxsw.com/interactive"&gt;SXSW Interactive 2009&lt;/a&gt;. SXSW always brings together an talented variety of web developers, entrepreneurs, and visionaries. If you'll be there too, we'd love to meet and talk shop!
If you are interested in participating in an App Engine User Study while at SXSW, please fill out this &lt;a href="https://spreadsheets.google.com/viewform?formkey=cjFRMDRxbVpUM1FuTUtSMFhUSng3dWc6MA.."&gt;form&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Sunday, March 14th&lt;br&gt;

10:00 pm - 1:00 am&lt;/span&gt;&lt;br&gt;

The App Engine team is joining forces with the Blogger and Reader teams for a bash "Read. Write. Drink." at &lt;a href="http://www.sixlounge.com/"&gt;Six Lounge&lt;/a&gt; (117 W 4th St @ Colorado). Come share a beer and tales of website building and hosting with us! Bring your SXSW Interactive Badge, or find an App Engine team member at the conference and ask for an invitation. Before the party, Engineers from the App Engine team, including Tech Lead, Kevin Gibbs, are having "office hours" from 8-10pm at Halcyon Coffeeshop (218 W 4th St) where we'll hang out, sip coffee and talk shop  - we want to answer your tough technical questions and to help you learn if App Engine is a good fit for your application or business. We'll have some T-shirts, and copies of our new &lt;a href="http://googleappengine.googlecode.com/files/google_app_engine_cheat_sheet_119_1.pdf"&gt;cheat sheet&lt;/a&gt;!
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Tuesday March 17th&lt;br&gt;

10:00 - 11:00 am, Room 8&lt;/span&gt;&lt;br&gt;

Kevin Gibbs, App Engine's Tech Lead, will be participating in the panel "Cloud Computing: Defending the Undefinable" along with Yousef Khalidi, Distinguished Engineer at Microsoft and Werner Vogels, the CTO at Amazon.com. Here's the panel description:
"The brave new world of cloud computing is radically changing how we build web applications. What is a platform, what is a service, and how will the future of web applications be built? More importantly, how do these various clouds compare, and what do the differences mean? Are they ready for your world-rockin' startup? In this panel, we'll get nerdy with technical details, you'll yell at us, and we'll argue why your app should already be in the cloud."
&lt;/p&gt;
&lt;p&gt;
&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Monday March 16th&lt;br&gt;
&lt;a href="http://www.20x2.org/"&gt;9th Annual 20x2 Event&lt;/a&gt;&lt;br&gt;
7:00 - 9:30 PM, The Parish on 6th St in Austin&lt;/span&gt;&lt;br&gt;
20x2 brings together 20 different participants from all walks of creative life and each person has two minutes to answer/interpret the same question before a live audience. The question for this show is "What's It Gonna Take?" App Engine team member Lindsey Simon will be speaking.
&lt;/p&gt;
&lt;p&gt;
If you're in the area, stop by!  If not, you can always leave feedback in our &lt;a href="http://groups.google.com/group/google-appengine"&gt;Google Group&lt;/a&gt;!
&lt;/p&gt;
&lt;span class="byline-author"&gt;Posted by Lindsey Simon, 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-4405069814967259983?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/XDs-srNcrEs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4405069814967259983/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4405069814967259983" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4405069814967259983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4405069814967259983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/XDs-srNcrEs/join-app-engine-at-sxsw.html" title="Join App Engine at SXSW" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/03/join-app-engine-at-sxsw.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCSX09eSp7ImA9WxVWFU8.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3634098955054684710</id><published>2009-02-24T12:40:00.000-08:00</published><updated>2009-02-24T18:31:08.361-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-24T18:31:08.361-08:00</app:edited><title>New! Grow your app beyond the free quotas!</title><content type="html">&lt;span class="byline-author"&gt;Posted by Brett Slatkin, App Engine Team&lt;/span&gt;
&lt;br&gt;&lt;br&gt;
&lt;p&gt;We're psyched to announce that developers can now purchase additional computing resources on App Engine, enabling apps to scale beyond our free quotas. This has been our most requested improvement to App Engine and we're thrilled to deliver it, &lt;a href="http://googleappengine.blogspot.com/2008/12/system-status-dashboard-quota-details.html"&gt;as promised.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we released App Engine last April, it was completely free to use, but each application was limited to a set of fixed resource usage quotas.  The free quotas are still there, but now you can grow beyond them.&lt;/p&gt;

&lt;p&gt;You can now set a daily budget for your app that represents the maximum amount you're willing to pay for computing resources each day.  You allocate this budget across CPU, bandwidth, storage, and email, and you pay for only what your app consumes beyond the free thresholds -- prorated up to the nearest penny.  We've put together a handy screencast to help explain the process:&lt;/p&gt;


&lt;div style="text-align: center;"&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xZwH_2MVmKI&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xZwH_2MVmKI&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;


&lt;p&gt;App Engine remains free to get started.  However, along with many performance improvements over the past ten months, we've learned that we overestimated our initial free quota values.    Therefore, in 90 days we will be &lt;a href="http://code.google.com/appengine/docs/quotas.html#Free_Changes"&gt;reducing the free quota resources&lt;/a&gt;. We believe these new levels will continue to support a reasonably efficient application serving around 5 million page views per month, completely free.&lt;/p&gt;

&lt;p&gt;The pricing for resources beyond those free quotas is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$0.10 per CPU core hour. This covers the actual CPU time an application uses to process a given request, as well as the CPU used for any Datastore usage.&lt;/li&gt;
&lt;li&gt;$0.10 per GB bandwidth incoming, $0.12 per GB bandwidth outgoing.  This covers traffic directly to/from users, traffic between the app and any external servers accessed using the URLFetch API, and data sent via the Email API.&lt;/li&gt;
&lt;li&gt;$0.15 per GB of data stored by the application per month.&lt;/li&gt;
&lt;li&gt;$0.0001 per email recipient for emails sent by the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data stored in the datastore incurs additional overhead, depending on the number of indexes, as well as the number (and size) of associated properties.  This overhead can be significant in some cases, and it's something that we have been underreporting up until now.  Thus, you may notice an increase in the amount of data stored by your application that is listed in the Admin Console.&lt;/p&gt;

&lt;p&gt;To decrease the impact of this change in the way we calculate storage usage, we've doubled the free storage quota to 1GB.  To learn more about how our quotas work, upcoming changes to our quota levels, how they relate to billing, and overall resource consumption limitations, see the &lt;a href="http://code.google.com/appengine/docs/quotas.html"&gt;Quotas section&lt;/a&gt; of the docs. The &lt;a href="http://code.google.com/appengine/docs/billing.html"&gt;Purchasing Additional Quota section&lt;/a&gt; has more detail about how to purchase additional computational resources for your app, and there's also a &lt;a href="http://code.google.com/appengine/kb/billing.html"&gt;Billing FAQ&lt;/a&gt;.  We've also made some changes to our &lt;a href="http://code.google.com/appengine/terms.html"&gt;terms of service&lt;/a&gt; to include language around payments, fees, and disallowing the use of multiple applications to avoid incurring fees.&lt;/p&gt;

&lt;p&gt;As always, we welcome feedback in our &lt;a href="http://groups.google.com/group/google-appengine"&gt;discussion group&lt;/a&gt;, and don't forget to check out the App Engine sessions at our upcoming developer conference, &lt;a href="http://code.google.com/events/io/"&gt;Google I/O!&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3634098955054684710?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/8hlnGxj5eJo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3634098955054684710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3634098955054684710?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/8hlnGxj5eJo/new-grow-your-app-beyond-free-quotas.html" title="New! Grow your app beyond the free quotas!" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/new-grow-your-app-beyond-free-quotas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYBQnk-eCp7ImA9WxVWEEQ.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-6086208418924141770</id><published>2009-02-19T11:07:00.000-08:00</published><updated>2009-02-19T17:25:53.750-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-19T17:25:53.750-08:00</app:edited><title>Back to the Future for Data Storage</title><content type="html">&lt;p&gt;Building a massive, distributed datastore which can service requests at an extremely high throughput is something that we've focused on at Google. We created something called &lt;a title="Big Table" href="http://labs.google.com/papers/bigtable.html"&gt;Bigtable&lt;/a&gt; that underlies the datastore in App Engine. The design for Bigtable focused on scalability across a distributed system so it may operate a bit differently than databases you've worked with before, such as not supporting joins. This isn't an accident -- when you build a system that can scale to the size that Bigtable can there's no way to do a general purpose join on data sets that size and still have them be performant.&lt;/p&gt;&lt;p&gt;Google isn't alone in offering an non-Relational datastore to enable scaling. For example, Amazon has &lt;a href="http://aws.amazon.com/simpledb/"&gt;SimpleDB&lt;/a&gt;:  &lt;/p&gt;&lt;blockquote&gt;A traditional, clustered relational database requires a sizable upfront capital outlay, is complex to design, and often requires a DBA to maintain and administer. Amazon SimpleDB is dramatically simpler, requiring no schema, automatically indexing your data and providing a simple API for storage and access.&lt;/blockquote&gt;&lt;p&gt;There are also a range of non-relational open source datastores now available such as &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt; and &lt;a href="http://hypertable.org/"&gt;Hypertable&lt;/a&gt;. Those are just two examples, there are &lt;a href="http://en.wikipedia.org/wiki/Database_models"&gt;many more&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;While you might think this is all new, it's actually a bit of a return to the past. You see, there was a time when "RDBMS" wasn't always the answer regardless of what the question was. At the time Codd published his paper, "&lt;a href="http://scholar.google.com/scholar?hl=en&amp;amp;lr=&amp;amp;cluster=11288196461778692465"&gt;A Relational Model of Data for Large Shared Data Banks&lt;/a&gt;," there were many different approaches to datastores. It was only in the '80s that relational databases won the majority of the mindshare. Having settled on a single metaphor the industry has developed many tools and techniques to make developing on a relational database easier.&lt;/p&gt;&lt;p&gt;Unfortunately that majority mindshare is also a problem because while RDBMS' are useful in many situations, they are not useful in &lt;i&gt;all&lt;/i&gt; situations. Their dominance in the mindshare means that useful alternatives aren't used, and huge amounts of time and money can be wasted trying to force non-relational problems into a relational model.&lt;/p&gt;&lt;p&gt;We are in the middle of a renaissance in data storage with the application of many new ideas and techniques; there's huge potential for breaking out of thinking about data storage in just one way. Michael Stonebraker pointed out in his paper, &lt;a href="http://scholar.google.com/scholar?hl=en&amp;amp;lr=&amp;amp;cluster=15454859772549443008"&gt;"One Size Fits All": An Idea Whose Time Has Come and Gone&lt;/a&gt;, that there are common datastore use cases, such as Data Warehousing and Stream Processing that are not well served by a general purpose RDBMS and that abandoning the general purpose RDBMS can give you a performance increase of one or two orders of magnitude.&lt;/p&gt;&lt;p&gt;It's an exciting time, and the takeaway here isn't to abandon the relational database, which is a very mature technology that works great in its domain, but instead to be willing to look outside the RDBMS box when looking for storage solutions.&lt;/p&gt;

&lt;span class="byline-author"&gt;Posted by Joe Gregorio, 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-6086208418924141770?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/L0HbGKmeF5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/6086208418924141770/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=6086208418924141770" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6086208418924141770?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/6086208418924141770?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/L0HbGKmeF5M/back-to-future-for-data-storage.html" title="Back to the Future for Data Storage" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/back-to-future-for-data-storage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYMQn46eyp7ImA9WxVXFUo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-3523639530475399565</id><published>2009-02-13T16:08:00.000-08:00</published><updated>2009-02-13T17:49:43.013-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-13T17:49:43.013-08:00</app:edited><title>Web App Wednesday, Mashup, Backup, and Decay</title><content type="html">&lt;span class="byline-author"&gt;Posted by Jeff Scudder, App Engine Team&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.linkedin.com/in/michaelbernstein"&gt;Michael Bernstein&lt;/a&gt; is doing something I find very interesting. Not only is he creating applications on App Engine, he creates a new one every Wednesday. His site, appropriately named &lt;a href="http://www.webappwednesday.com/" id="u5iv" title="Web App Wednesday"&gt;Web App Wednesday&lt;/a&gt;, is where he is creating a new web application every Wednesday, starting first with the site itself, followed by &lt;a href="http://license-info.appspot.com/" id="f0:p" title="F/OSS License Info"&gt;F/OSS License Info&lt;/a&gt;, a single-page site that displays information about the most common Open Source software licenses. Another recent app, &lt;a href="http://1linqr.appspot.com/" id="qsu1" title="LinQR"&gt;LinQR&lt;/a&gt; , is a URL shortening service and QR code generator. Good luck to Michael and we look forward to seeing what he comes up with next Wednesday.&lt;/p&gt;&lt;p&gt;If you're doing something cool with App Engine please let us know! We'd love to highlight it here on the blog or even have you write up an article explaining what you've done, like &lt;a title="shelftalkers" href="http://code.google.com/appengine/articles/shelftalkers.html"&gt;this new article&lt;/a&gt; from &lt;a href="http://twitter.com/appleweed"&gt;Omar Abdelwahed&lt;/a&gt; on Creating a Facebook App with Google App Engine and Best Buy Remix.&lt;/p&gt;&lt;p&gt;Speaking of articles, &lt;a href="http://twitter.com/aral"&gt;Aral Balkan&lt;/a&gt; has written an article on his &lt;a title="backup and restore utility" href="http://code.google.com/appengine/articles/gae_backup_and_restore.html"&gt;backup and restore utility&lt;/a&gt;  and our own &lt;a href="http://twitter.com/jcgregorio"&gt;Joe Gregorio&lt;/a&gt; published &lt;a title="overheard" href="http://code.google.com/appengine/articles/overheard.html"&gt;an article&lt;/a&gt; on a design for popularity ranking using voting and time-based decay.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-3523639530475399565?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/BhTTPSAabsA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/3523639530475399565/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=3523639530475399565" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3523639530475399565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/3523639530475399565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/BhTTPSAabsA/web-app-wednesday-mashup-backup-and.html" title="Web App Wednesday, Mashup, Backup, and Decay" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/web-app-wednesday-mashup-backup-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYFRXozcSp7ImA9WxVXFEQ.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-5847154622096596457</id><published>2009-02-12T16:05:00.000-08:00</published><updated>2009-02-12T18:45:14.489-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-12T18:45:14.489-08:00</app:edited><title>The sky's (almost) the limit! "High CPU" is no more.</title><content type="html">&lt;span class="byline-author"&gt;Posted by Pete Koomen, App Engine Team&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;

&lt;p&gt;
We're very excited today to announce that we've raised limits on several App Engine operations:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;No more "High CPU Requests"!&lt;/b&gt;  App Engine Apps were once allowed no more than 2 CPU-intensive requests per minute.  We've made some adjustments to the way we handle requests, and have eliminated this limitation altogether. To learn more about how this works and the implications for your app, see our &lt;a href="http://code.google.com/appengine/docs/quotas.html#Request_Limits"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Response deadline raised to 30 seconds.&lt;/b&gt; The amount of time an App Engine app can take to respond to an incoming request has been raised from 10 to 30 seconds!  There are limits on the number of simultaneous active requests an application can process at any given moment--see our &lt;a href="http://code.google.com/appengine/docs/quotas.html#Request_Limits"&gt;docs&lt;/a&gt; to learn more.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Size limits on code files, static files, and requests/responses raised to 10MB!&lt;/b&gt; App Engine apps can now receive requests and send responses of up to 10MB in size, and users can upload 10MB code and static files as well.  Note that API requests (e.g. memcache.set(), db.put()) are still limited to 1MB in size.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
These changes were inspired and driven by a great deal of developer feedback, and we're not done!  Please let us know what you'd like to see next on App Engine in our &lt;a href="http://groups.google.com/group/google-appengine"&gt;Google Group&lt;/a&gt;!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-5847154622096596457?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/3JzZBpmi2ws" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/5847154622096596457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=5847154622096596457" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5847154622096596457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/5847154622096596457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/3JzZBpmi2ws/skys-almost-limit-high-cpu-is-no-more.html" title="The sky's (almost) the limit! &quot;High CPU&quot; is no more." /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/skys-almost-limit-high-cpu-is-no-more.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DRHk8eSp7ImA9WxVXFUk.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4700831643205339045</id><published>2009-02-09T17:24:00.000-08:00</published><updated>2009-02-13T09:26:15.771-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-13T09:26:15.771-08:00</app:edited><title>SDK version 1.1.9 Released</title><content type="html">&lt;p&gt;
Today we released version 1.1.9 of our SDK.  Here's what's new in this release:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now use the Python standard libraries &lt;a href="http://www.python.org/doc/2.5.2/lib/module-urllib.html"&gt;urllib&lt;/a&gt;, &lt;a href="http://www.python.org/doc/2.5.2/lib/module-urllib2.html"&gt;urllib2&lt;/a&gt; or &lt;a href="http://www.python.org/doc/2.5.2/lib/module-httplib.html"&gt;httplib &lt;/a&gt; to make HTTP requests.  This has been a frequent &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=61"&gt;request&lt;/a&gt; on our issue tracker.&lt;/li&gt;
&lt;li&gt;We've been working on a set of tools that will make the process of uploading and downloading data from App Engine applications easier.  Today we're excited to announce an early release of our new bulk uploading client.  You can try it out &lt;a href="http://code.google.com/appengine/docs/python/tools/uploadingdata.html
"&gt;here&lt;/a&gt;.  Let us know what you think in our &lt;a href="http://groups.google.com/group/google-appengine"&gt;Google Group&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Several updates to our datastore, including the automatic generation of single property indexes and the addition of IN and != operators to db.Query.  See the &lt;a href="http://code.google.com/appengine/docs/python/datastore/"&gt;Datastore API docs&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;A bunch of additional bugfixes and enhancements, listed in our &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes"&gt;Release Notes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can download version 1.1.9 of the SDK for Windows, Mac, and Linux now on our &lt;a href="http://code.google.com/appengine/downloads.html"&gt;Downloads&lt;/a&gt; page.  As always, we spend a lot of time reading (and posting!) on our &lt;a href="http://groups.google.com/group/google-appengine"&gt;Google Group&lt;/a&gt;, and we welcome your feedback!
&lt;/p&gt;


&lt;span class="byline-author"&gt;Posted by Pete Koomen, 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-4700831643205339045?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/lJnsDyK6Vp8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4700831643205339045/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4700831643205339045" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4700831643205339045?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4700831643205339045?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/lJnsDyK6Vp8/sdk-version-119-released.html" title="SDK version 1.1.9 Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/sdk-version-119-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcERn0_cCp7ImA9WxVQGUo.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-7434591488966729272</id><published>2009-02-06T17:59:00.000-08:00</published><updated>2009-02-06T19:06:47.348-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-06T19:06:47.348-08:00</app:edited><title>A roadmap update!</title><content type="html">&lt;span class="byline-author"&gt;Posted by Joe Gregorio, App Engine Team&lt;/span&gt;

&lt;p&gt;
The App Engine team has been plugging away and we're excited about some pretty big announcements in the near future.  In the meantime, we decided to refresh our App Engine roadmap for the next six months with some of the great new APIs in our pipeline:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for running scheduled tasks&lt;/li&gt;
&lt;li&gt;Task queues for performing background processing&lt;/li&gt;
&lt;li&gt;Ability to receive and process incoming email&lt;/li&gt;
&lt;li&gt;Support for sending and receiving XMPP (Jabber) messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As always, keep in mind that development schedules are notoriously difficult to predict, and release dates may change as work progresses. We'll do our best to update this roadmap as our engineers continue development and keep you abreast of any changes!
&lt;/p&gt;
&lt;p&gt;
You'll have the opportunity to discuss this roadmap (and all things App Engine) with us and your fellow developers during &lt;a href="http://code.google.com/events/io/"&gt;Google I/O&lt;/a&gt;, coming up in May.  Check out the App Engine &lt;a href="http://code.google.com/events/io/sessions.html"&gt;sessions&lt;/a&gt; we've already announced and don't forget to discuss in our &lt;a href="http://groups.google.com/group/google-appengine"&gt;Google Group&lt;/a&gt;!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-7434591488966729272?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/O5tdEssts1M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/7434591488966729272/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=7434591488966729272" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7434591488966729272?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/7434591488966729272?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/O5tdEssts1M/roadmap-update.html" title="A roadmap update!" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/roadmap-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYMRHwzfyp7ImA9WxVQFk0.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4463107188561367449</id><published>2009-02-02T12:13:00.000-08:00</published><updated>2009-02-02T12:23:05.287-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-02T12:23:05.287-08:00</app:edited><title>Best Buy's Giftag on App Engine</title><content type="html">&lt;span class="byline-author"&gt;Posted by Amanda Surya, Google App Engine Team&lt;/span&gt;
&lt;br&gt;&lt;br&gt;
&lt;p&gt;
Built by &lt;a href="http://www.bestbuy.com"&gt;Best Buy&lt;/a&gt;, &lt;a href="http://www.giftag.com"&gt;Giftag&lt;/a&gt; is a gift registry add-on for FireFox and Internet Explorer that enables you to create a wish list and share it with others. The Giftag team first built a prototype of the application on another platform and went live on September 2008. About 10 weeks later, the team relaunched Giftag on App Engine just in time for Black Friday. Since then, they've been getting &lt;a href="http://www.readwriteweb.com/archives/giftag_social_wishlists_using_open_standards.php"&gt;positive reviews&lt;/a&gt; from users about the product.
&lt;/p&gt;
&lt;p&gt;
We're happy to share this video created by Jerry St. Sauver, Curtis Thompson, and Thomas Bombach, Jr., the development team behind Giftag. In this video, they share their thoughts on App Engine, their development experience, tips on getting started with App Engine, and finally a demo of Giftag in action.
&lt;/p&gt;
&lt;p&gt;
&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uwFvCz4pkMQ&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uwFvCz4pkMQ&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
To learn more about what the Giftag team is up to, check out the official &lt;a href="http://blog.giftag.com/2009/01/26/giftaggoogle-app-engine-case-study/"&gt;Giftag blog&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
To share your own experience using Google App Engine, tell us your story (or even your own video) in &lt;a href="http://groups.google.com/group/google-appengine"&gt;our developer forum&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4463107188561367449?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/ULmLTmfKNX8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4463107188561367449/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4463107188561367449" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4463107188561367449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4463107188561367449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/ULmLTmfKNX8/best-buys-giftag-on-app-engine.html" title="Best Buy's Giftag on App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/02/best-buys-giftag-on-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4AQXk9eip7ImA9WxVQE0k.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-4355093381021236503</id><published>2009-01-30T10:32:00.000-08:00</published><updated>2009-01-30T10:42:20.762-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T10:42:20.762-08:00</app:edited><title>Google Code Jam's Ranking Library Released</title><content type="html">&lt;span class="byline-author"&gt;Posted by Bartholomew Furrow and Sebastian Kanthak, Google Code Jam Team&lt;/span&gt;
&lt;p&gt;At Google, we like to use our own projects for internal development. Following that philosophy, one of the first apps ever made for Google App Engine was the contest platform for &lt;a href="http://code.google.com/codejam/contest"&gt;Google Code Jam&lt;/a&gt;.  The application was a good fit: a rich web interface, real-time user interaction, and a heavily parallel design.  But we faced one major challenge, which was how to handle the huge scoreboard -- in the first round, we had over 11,000 contestants.&lt;/p&gt;
&lt;p&gt;While App Engine's datastore allows you to sort entities by score, it doesn't have a built-in mechanism to answer the following two requests:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Given a user, what is his or her rank on the scoreboard? In other words, for some arbitrary row in that scoreboard, what is its position amongst the 11,000 spots?  This is useful for showing your own rank, as well as the ranks of your friends.&lt;/li&gt;
&lt;li&gt;Give me all users on the n-th page of the scoreboard. While it is possible to get all users in sorted order, datastore queries don't allow you to start at page n, and iterating over all of the users on the first n pages takes too much time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To solve these issues, we came up with a library that maintains a data structure to efficiently support these use cases. We imagine that other applications will have similar problems (e.g., a high-score list in a game), and so we're happy to release our work as the "google-appengine-ranklist" library.&lt;/p&gt;
&lt;p&gt;The library supports three different operations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setting the score of a given user.&lt;/li&gt;
&lt;li&gt;Given a score, what's the rank of a user with this score? This is used to answer the "What's the rank of person U?" use case.&lt;/li&gt;
&lt;li&gt;Given a rank, what's the score S for this rank? This can be used to solve the paging problem, by constructing a query that returns the first few users with a score less than or equal to S, in sorted order&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you think this library could be useful for you, take a look at the &lt;a href="http://code.google.com/p/google-app-engine-ranklist/source/browse/trunk/ranker/ranker.py"&gt;documentation&lt;/a&gt; and at the &lt;a href="http://ranklist-example.appspot.com/"&gt;example application&lt;/a&gt;. We'd love to hear from you in our &lt;a href="http://groups.google.com/group/google-app-engine-ranklist"&gt;Google Group&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-4355093381021236503?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/1bv5VvWDruI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/4355093381021236503/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=4355093381021236503" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4355093381021236503?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/4355093381021236503?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/1bv5VvWDruI/google-code-jams-ranking-library.html" title="Google Code Jam's Ranking Library Released" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2009/01/google-code-jams-ranking-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFSXs7cCp7ImA9WxRaGUU.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-444092464024885425</id><published>2008-12-22T14:13:00.000-08:00</published><updated>2008-12-22T14:18:38.508-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-22T14:18:38.508-08:00</app:edited><title>Getting Creative with App Engine</title><content type="html">&lt;span class="byline-author"&gt;Posted by Marzia Niccolai, App Engine Team&lt;br /&gt;
Gregory Pennington and James Bogosian, Advertising Platform Solutions Team&lt;/span&gt;
&lt;p&gt;When inspiration strikes, it's nice to go from concept to reality in the shortest possible amount of time.  We're happy to let you know about two new tools that will help you shorten the path on App Engine from conception to clicks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://creator.zoho.com/"&gt;Zoho Creator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For those used to rapidly developing apps with Zoho Creator, we are happy to announce that Zoho have made it possible to &lt;a href="http://blogs.zoho.com/general/zoho-creator-deploys-to-google-app-engine/"&gt;deploy these apps using Google App Engine&lt;/a&gt;.  Zoho Creator enables you to develop data backed business applications, and once you have developed your app in Creator, simply download the Python code and upload it to Google App Engine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App Engine Site Creator&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://code.google.com/p/app-engine-site-creator/"&gt;App Engine Site Creator&lt;/a&gt; is a lightweight content management system with a full GUI for content creation and administration.  It provides a hierarchical site structure, an authentication system, user and group level access controls, file attachments and a WYSIWYG interface for editing page HTML.&lt;/p&gt;
&lt;p&gt;The resulting managed site is designed to be themed and branded, and the back end Site Creator code was written with readability and extensibility in mind.  &lt;a href="http://code.google.com/p/app-engine-site-creator/source/checkout"&gt;Check out the code&lt;/a&gt; to learn more or visit the &lt;a href="http://code.google.com/p/app-engine-site-creator/"&gt;project page&lt;/a&gt; to learn how to download and deploy your own instance.  As always, we welcome your feedback in our &lt;a href="http://groups.google.com/group/app-engine-site-creator"&gt;Google Group&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501956666581132164-444092464024885425?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/HbuO75q3kPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/444092464024885425/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=444092464024885425" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/444092464024885425?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/444092464024885425?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/HbuO75q3kPA/getting-creative-with-app-engine.html" title="Getting Creative with App Engine" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2008/12/getting-creative-with-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8MR3o6fip7ImA9WxRaFUg.&quot;"><id>tag:blogger.com,1999:blog-8501956666581132164.post-2266104631181762831</id><published>2008-12-16T10:11:00.000-08:00</published><updated>2008-12-17T14:44:46.416-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-17T14:44:46.416-08:00</app:edited><title>System Status Dashboard, Quota Details Page, and a Billing Sneak Preview</title><content type="html">&lt;p&gt;We're excited to announce a couple new features and a preview for you today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an App Engine &lt;a href="http://code.google.com/status/appengine"&gt;System Status Site&lt;/a&gt; that monitors the latency and uptime of various components and provides real-time visibility into their performance&lt;/li&gt;  
&lt;li&gt;a new &lt;a href="#quotadetails"&gt;Quota Details Dashboard&lt;/a&gt;, detailing all of the resource quotas that affect your application&lt;/li&gt;
&lt;li&gt;a &lt;a href="#sneakpeak"&gt;sneak peak&lt;/a&gt; at our upcoming billing feature, which will enable your app to grow beyond our free quotas!
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;System Status Site&lt;/strong&gt;&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/REgUHZMTaa8&amp;hl=en&amp;fs=1&amp;fmt=22"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/REgUHZMTaa8&amp;hl=en&amp;fs=1&amp;fmt=22" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;p&gt;
The new &lt;a href="http://code.google.com/status/appengine"&gt;System Status Site&lt;/a&gt; provides a detailed view into the performance of various App Engine components using some of the same raw monitoring data that our engineering team uses internally.  This includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;up-to-the-minute overview of our system status with real-time, unedited data&lt;/li&gt;
&lt;li&gt;daily overall serving status for each of our APIs, including any outages or downtime&lt;/li&gt;
&lt;li&gt;detailed historical latency and error-rate graphs for the App Engine Datastore, Images, Mail, Memcache, Serving, URL Fetch, and Users components&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In addition to the &lt;a href="http://groups.google.com/group/google-appengine-downtime-notify"&gt;Downtime Notify Google Group&lt;/a&gt;, we'll use this dashboard to announce scheduled downtime and explain any issues that affect App Engine applications.  You'll be able to see real data behind any issues that we experience along with explanations from our team.
&lt;/p&gt;
&lt;p&gt;
We'll continue to tune this dashboard to make sure we're providing useful and accurate information about App Engine's uptime.  We expect this tool will complement others offered by other companies, such as Hyperic's &lt;a href="http://www.cloudstatus.com"&gt;CloudStatus&lt;/a&gt;.
&lt;/p&gt;

&lt;p id="quotadetails"&gt;&lt;strong&gt;Quota Details Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
For each App Engine application, we now provide a Quota Details Dashboard.  This makes it easier to track how much of the free quota your app is using up across bandwidth, CPU, etc.  Use it to get detailed information about all of the resource quotas that affect your application.
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dLfQMJsmsaI/SUfyc85XDII/AAAAAAAAABw/9pv7ute1sUo/s1600-h/quota_details.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 161px;" src="http://4.bp.blogspot.com/_dLfQMJsmsaI/SUfyc85XDII/AAAAAAAAABw/9pv7ute1sUo/s400/quota_details.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5280455667312168066" /&gt;&lt;/a&gt;

&lt;p&gt;
To use the Quota Details Dashboard, click the "Quota Details" link on the dashboard for any app.
&lt;/p&gt;

&lt;p id="sneakpeak"&gt;&lt;strong&gt;Sneak Preview: Purchasing Additional Resources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
As mentioned in the &lt;a href="http://code.google.com/appengine/docs/roadmap.html"&gt;product roadmap&lt;/a&gt;, soon you'll be able to buy additional capacity beyond the free quotas. (For reference, we described our &lt;a href="http://googleappengine.blogspot.com/2008/05/announcing-open-signups-expected.html"&gt;expected pricing&lt;/a&gt; earlier.)  In the mean time, we wanted to give you a brief update on this feature.
&lt;/p&gt;
&lt;p&gt;
You'll be able to buy capacity based on a daily budget for your app, similar to the way AdWords spending works.  You'll have fine-grained control over this daily budget so you can apply it across CPU, network bandwidth, disk storage, and email as you see fit.  You'll only pay for the resources your app actually uses, not to exceed the budget you set.  Here are a couple screenshots from the beta interface:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dLfQMJsmsaI/SUg3NOeljVI/AAAAAAAAACA/Yh0ug378x6g/s1600-h/billing-blog-post-100percent.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 269px;" src="http://4.bp.blogspot.com/_dLfQMJsmsaI/SUg3NOeljVI/AAAAAAAAACA/Yh0ug378x6g/s400/billing-blog-post-100percent.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5280531263456120146" /&gt;&lt;/a&gt;

&lt;p&gt;Of course, we're still working on this feature, so we'll likely make additional changes before releasing it.&lt;/p&gt;

&lt;p&gt;We hope you like these new features--please let us know what you think in the &lt;a href="http://groups.google.com/group/google-appengine"&gt;discussion group&lt;/a&gt;!
&lt;/p&gt;

&lt;span class="byline-author"&gt;Posted by Brett Slatkin, 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-2266104631181762831?l=googleappengine.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/f7Q9AI2gRgs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googleappengine.blogspot.com/feeds/2266104631181762831/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8501956666581132164&amp;postID=2266104631181762831" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2266104631181762831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8501956666581132164/posts/default/2266104631181762831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAppEngineBlog/~3/f7Q9AI2gRgs/system-status-dashboard-quota-details.html" title="System Status Dashboard, Quota Details Page, and a Billing Sneak Preview" /><author><name>The App Engine Team</name><uri>http://www.blogger.com/profile/13153619670612749384</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04912443691516065869" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dLfQMJsmsaI/SUfyc85XDII/AAAAAAAAABw/9pv7ute1sUo/s72-c/quota_details.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://googleappengine.blogspot.com/2008/12/system-status-dashboard-quota-details.html</feedburner:origLink></entry></feed>
