App Engine is the solution that Google has put on the table to help us take the train of cloud computing. No more sleepless nights to have ready for tomorrow that database upgrade or to add a new server to our system infrastructure. We just need to concentrate on developing high quality software and let the Google engineers take care of all the necessary plumbing to deploy our apps in their data centers granting access to everybody over the web. And they will deploy it at very reasonable price, automatically scaled to our benefits and even at no charge when we’re starting off, just like it’s been doing since the beginning with free email or long-term storage. Google estimates that with the free resources an app can accommodate about 5 million page views a month.
Besides hosting our services, Google App Engine provides a development model that allows us to profit from their experience in building applications specially suited to support high volumes of traffic. We can use the large-scale services that power Google’s applications for data storage, caching, and network access.
As wonderful as it sounds, this new world comes at the cost of changing the way we think about web applications. We’ll have to forget hardly acquired principles such as table joins and all the stuff related to relational databases, and immerse ourselves into the world of big data with its distributed nature, terabytes table size, indexes, redundancy, massively parallel simultaneous access, and many others. In particular, we’re encouraged to use Python as a programming language. It’s true that there’s also support for Java but Python was launched first and therefore has more examples and tools like the App Engine Launcher that makes it especially easy to create, edit, test, and upload our app.
Being a general purpose platform, App Engine can be used in a large variety of platforms and environments. However, following this site philosophy, I’ll only write about those where I have real practice experience. This involves mainly two focuses:
- Server side: Python: After many years working with Java I was reluctant to learn a new language, specially such a cryptic one as Python appeared to be. However, after a hard learning curve Python offers a lot of surprises and once you get the feel you realise it’s extremely powerful. So I’ve decided to use Python for my App Engine developments and therefore you’re not going to find Java examples in this site. This does not mean you cannot use Java with App Engine. It seems the Eclipse plug-in (available for example in the “Eclipse IDE for Java EE Developers” bundle) provides also a very user-friendly environment for developing and debugging with App Engine.
- Client side: App Inventor or JQueryMobile: Though services deployed in App Engine are available for any web client, my real usage has mostly to do with providing services to be consumed from mobile devices. App Inventor is a platform for Android development formerly hosted by Google and hence with many architectural affinities with Google development model. It’s a very simple and pedagogical platform, but has some clear limitations that I’ve overcome via services in the server side. JQuery is one of the first JS libraries that remains as the core of many apps and platforms, and JQueryMobile is a convenient extension for mobile devices.
So here are some posts related with this experience in developing Python services for Android devices:
|The migration to Python 2.7. reduced to 4 easy steps. A quick guide for those who have simple apps and are not willing migration to become a hard task||Easy|
|How to extend fusiontables in order to support ORDER BY using multiple columns and massive UPDATE and DELETE sentences||Intermediate|
|A reflexion about whether you should deploy applications with specialized services or include several services in the same application||Easy|
|Implementation of a login system with the usual functionalities we’ll want to provide in all our apps: password encryption, mail reset…||Easy|
|How to implement the services necessary for managing password encryption||Intermediate|
|[PENDING] How to send mails from AppEngine, optimizing costs by using third party companies. Instructive usage of patterns (strategy, plugin) for dynamically choosing the sender company||Intermediate|
|[PENDING] How to import platform-dependent python libraries in the AppEngine local development server. Some issues you may face and how to solve them||Easy|