The first speaker was Ben Bangert, who gave us an overview of his Python Web framework, Pylons. I hope I'll get the actual slides from Ben, and I'll post a link here as soon as I can (UPDATE: here are the slides in PDF format). In the mean time, I'll use my notes to give you an idea of what Ben talked about:
- Pylons was created with simplicity in mind (it consists of only 1,400 lines of code)
- It uses WSGI as the glue between various components
- It follows the Model-View-Controller pattern: Pylons itself is the Controller, the ORM (SQLAlchemy) is the Model, and the template language (Mako) is the view
- The core components of Pylons are: Routes for URL configuration, Beaker for session/caching management, WebError for exception handling/debugging info, WebOb for easier HTTP request/response handling, and Paste for WSGI loading/configuration
- All these components are examples of what is called 'WSGI Middleware'
- Pylons recommends SQLAlchemy for the database/ORM layer, and Mako for templating, but it supports other ORM and templating modules too (examples of alternative templating tools are Genshi and Jinja)
One thing I didn't quite realize before Ben's presentation is that Pylons and its core/recommended components are the work of a triumvirate which I'm tempted to call 'B Cubed', or The Bangert-Bicking-Bayer Ensemble. As Ian Bicking says, Ben Bangert lords over Pylons, Route and Beaker, Ian lords over Paste, WebOb and FormEncode, while Mike Bayer lords over SQLAlchemy and Mako.
The second presenter was Pablo M. He showed us a practical example of a Google App Engine application called tapapps and built using Flash as the front-end. His goal for this app is to be a portal that aggregates content from various sources. He will then synchronize his iPhone with this one app, as opposed to syncing it to a multitude of content sources. For now though, the app just accepts user input, saves it on the Google BigTable, and displays it to the other users. Pablo was impressed with the ease of deployment of a GAPE application. He modified his Flash source, rebuilt the swf file, then ran appcfg.py to upload a new version of the app to the Google cloud.
A lively discussion ensued following Pablo's presentation. The discussion mostly centered on the current shortcomings of the Google AppEngine environment. For example, any task launched from within your application will be killed after 3 seconds. This means that inserts into the Google Big Table better take less than 3 seconds. Ben actually witnessed how an operation that attempted to insert 50 records at a time was killed because it was too slow. Apparently, writes to the Big Table are very slow, but reads are very fast. Also, the lack of cron-type scheduling is something that really hurts GAPE applications. Not to mention the lack of various Python modules (such as socket, or compiler) -- of which I also complained in another post. Overall though, a Python interest group should have very little to complain about when it comes to the GAPE environment. After all, as Dave Winer said, GAPE turned Python into the new BASIC!
I'd like to thank Steven Wagner from Gorilla Nation for hosting the meeting, Ben Bangert and Pablo M. for presenting at the meeting, and Andre Stechert for facilitating Ben's presence at the meeting.