Wednesday, April 22, 2009

SDK version 1.2.1 released

We've released version 1.2.1 of the SDK for the Python runtime. Here are some highlights from the release notes:

  • 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.
  • The Images API now supports compositing images and calculating a color histogram for an image.
  • New allowed mail attachment types: ics, vcf
  • Urlfetch requests can now set the User-Agent header.
  • An App Engine-specific version of the Python PyCrypto cryptography library is now available. Learn more at
  • 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.
  • An early release of the bulk downloader is also now available in Learn more about these changes at:

For a full list see the SdkReleaseNotes wiki page.

Downloads for Windows, Mac, and Linux are available on the Downloads page. This SDK update was for the Python runtime, so please post your feedback in the Python runtime discussion group.

Wednesday, April 15, 2009

Early Look at Java language support expanded to 25,000 developers

Have you signed up 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.

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 Google App Engine for Java. 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.

Looking to create an end-to-end Java AJAX application? Try out Sticky, the sticky note app written using Google Web Toolkit 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.

Are your eyes set on a mobile app? Check out the source for Task Engine . Also built with GWT, this simple task app is written with the iPhone and Android in mind.

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.

Note: If you installed the App Engine SDK with the Google Plugin for Eclipse, the SDK and accompanying demos can be found in your Eclipse installation directory, under plugins/

Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.

Monday, April 13, 2009

Many languages, and in the runtime bind them

While working on App Engine's new Java runtime, 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 shell demo app.

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 REPL to rule them all: a shell demo that supports several different JVM-based languages simultaneously. It was an easy decision to use GWT 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.

This helps us underscore two important compatibility features of Java App Engine:

  1. Google App Engine for Java accepts Java bytecode, not Java source code. It even supports loading bytecode generated at run time. That 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 dependency injection frameworks, AOP libraries, and expression-language runtimes).
  2. The security sandbox 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 setAccessible. 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).

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.

But, without further ado, may we present to you, the Lord of the REPLS.

-- Google Software Engineers, Toby Reyelts and James Robinson.

Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.

Tuesday, April 7, 2009

Seriously this time, the new language on App Engine: Java™

Today, we're very excited to announce the availability of a new programming language for Google App Engine. Please welcome the Java runtime!

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 the first and the most popular request filed in the Issue Tracker. We were also thrilled to see that this enthusiasm extended beyond the Java language to all of the various programming languages that have been implemented on top of the Java virtual machine -- not to mention all of the popular web frameworks and libraries.

But we also knew that Java developers are choosy:

  • They live by their powerful tools (Eclipse, Intellij, NetBeans, Ant, etc.).
  • They try to avoid lock-in and strive for re-use. Standards-based development (defacto or otherwise) is key.
  • They harness sophisticated libraries to perform language feats which are nearly magical (GWT, Guice, CGLIB, AspectJ, etc...).
  • They even use alternate languages on the JVM, like Groovy, Scala, and JRuby.

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.

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 Google Plugin for Eclipse). 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.

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 sign up, give it a whirl, and give us lots of feedback.

The team has also been working on many other improvements to App Engine, which we're really excited to launch to you as well:

  • Access to firewalled data: grant policy-controlled access to your data behind the firewall.
  • Cron support: schedule tasks like report generation or DB clean-up at an interval of your choosing.
  • Database import: move GBs of data easily into your App Engine app. Matching export capabilities are coming soon, hopefully within a month.

Last but not least, the App Engine team will be at the upcoming Google I/O developer event on May 27-28 in San Francisco, so please come meet us in person.

We look forward to seeing your applications. Get coding!

Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.

Wednesday, April 1, 2009

A Brand New Language on Google App Engine!

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 feedback from developers, and we've released loads of new features! 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.

Well, we fed Google's new CADIE Strategic Decision Maker 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 FORTRAN 77!

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 the cloud. By providing a Fortran 77 runtime, along with a familiar, easy-to-use deployment mechanism, we hope to make this process efficient and straightforward.

Want to give it a try? Download our SDK and deploy your application by mailing punch cards to:

Google App Engine, C/O APPCFG
1600 Amphitheatre Pkwy
Mountain View, CA 94043

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 Google Group!