Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I have completely fallen in love with AppEngine since the beginning of this year. It is a brilliant dev platform for prototyping and the BigTable DB is a pleasure to work with.

My prototyping platform is essentially: tornado.web with the tornado request, response, escape, auth and locale. OpenID from web.py. My own WSGIApplication that inherits from the built-in so that it uses my Controller class (which has a plugin arch), Django for templates, JSON, BeautifulSoup, Markdown, a generic 'asset' module implementing something akin to ActiveRecord on the standard DB with memcache support, a generic HTML5 getting started template, a CSS toolkit (can't recall the name) then jQuery and backbone.js with some of my own JS glue code that maps the server models to client models.

Using this stack, I can prototype form-driven web apps in hours.

I wrote a relevance view for Twitter (with Twitter oauth support) in half a day. I don't think I will use the RDBMS even when they release it - BigTable is excellent (it will be confusing if you schema the same way you schema with an RDBMS).

It is great to be able to have an idea for a quick app, register an AppEngine app, fire the code up, commit and deploy and have the app live for others to try out within hours.

The admin interface allows you to spot errors and choke points in production and fix them quickly. The pricing is better than AWS or any of the others and the platform includes hidden gems such as the MapReduce lib, multitenancy, xmpp and Google data libs (including auth)

The only real limitations that I have bumped into are:

* The max request time is around 20 seconds, so you can't have open Ajax requests

* No HTTPS support as yet (coming soon, apparently)

* Limits on the number and size of files. It isn't ideal for serving a large number of static files, but it does have zipimport support for libs

* For best performance, you need to define the indexes yourself rather than relying on the defaults that the lib generates

* There are a lot of sys calls blocked, so you can't run Tornado or any cpython modules



Is your last point the reasoning behind not using Tornado's templates? And why not Jinja? Django templates have always rubbed me the wrong way in performance and flexibility measurements.


Using Django with my prototyping framework is by no means an endorsement, it just happens to be what I fell into because when I designed the generic HTML5 template I plugged in Django vars and helpers (stubify, etc.) without really thinking through a decision on which templating lib to use.

That said, I did create a generic sketch.template wrapper for Django templates, and I have managed to swap in web.py, tornado and cheetah (sketch being the name of the framework). I have never used Jinja in production, but have been meaning to go back to it, your comment will prompt me to do just that (I assume by asking about it, it is your pref).

I will eventually push the entire framework public once I clean up some parts - it is simple and has a narrow scope/purpose but it is working really well for me


Do you also use it beyond just prototypes? Or do you find it too limited?


I have only used it for prototypes so far because that is all that I have been doing recently. One of the projects will eventually be in PHP - but I see no reason why I can't clean the code up a bit, check it in and publish it.

It is just a collection of libs for GAE with my own glue code for the app, controller, a templating wrapper and some JS glue to get the models from the server into the client. You define the models and it auto generates scaffolding which you can re-arrange with the JS. Super-easy to create form based apps, I will push it to github next week and post it here on HN (I haven't had this much fun coding in a while, especially with being able to whip up mini-projects from idea to prototype really quickly - for eg. I did a simple todo list in a few hours, and a simple crm in a day (both auth with google), the actual code is just the models, over-riding the controllers where needed and placing form/record elements




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: