Saturday, March 15, 2008

Best new blog I discovered at PyCon [so far]

I was talking to Adam Gomaa on Thursday when Ben Bangert stopped by us and told him he had an interesting blog. "If Ben says you have a good blog, I'll have to check it out," I told Adam. "That's not what I said," Ben corrected me. "I said interesting." But it is good, and I'm glad I found it.

And regarding Adam's post on declarative layers for SQLAlchemy, check out the new-in-SA 0.4.4 declarative plugin. It's almost exactly what Adam was looking for -- a little more verbose, in keeping with the "explicit is better than implicit" Python philosophy that SA shares, but creating your own superclass that creates a PK named "id" by default is just a few lines of code if that's what you prefer.

PyCon, Saturday and Sunday

Saturday I'll be at the SQLAlchemy and State of PyPy talks. Then the board game BOF in the evening. In between, probably mostly the "hallway track."

Sunday I plan to attend "What Zope did wrong" and "Core Python Containers." (I'd also like to see the Wingware presentation in the 11:35 slot, but since I can only pick one, I guess I can just cross my fingers that this year's video recordings actually get published somewhere.)

Feel free to stop me and introduce yourself.

(If we met at a previous PyCon, I've changed my hair around a lot from year to year. The photo on this blog represents what I look like now. I should probably stick with this for a couple years so people can recognize me.)

Thursday, March 13, 2008


I'm taking a break during the evening tutorial in my hotel room on the second floor where I can enjoy the pycon wireless signal (which seems to be working quite well now). My name is Jonathan, and I am an introvert [too]. I suspect a lot of PyCon attendees can empathize.

After the last tutorial session ends at 9:30, I'm planning to head down with my copy of Munchkin and see if anyone wants to start the board game social a day early.

Slides from Introduction to SQLAlchemy tutorial

My slides from this morning are up: The about 1/3 of the class did not have SA installed yet, and the network was down. Fortunately, Mike and Jason brought 5 flash drives and by the time we got to the first exercise everyone was up and running.

This was my third time doing a three-hour SQLAlchemy tutorial. Differences from (last time) include

  • updated for the 0.4 series
  • removed almost all the SQL-layer material
  • added a section on the new relation filtering api
  • Improved the parts of the Fundamentals sections that were poorly explained
  • added a short section on the new-in-0.4 transaction management.

There wasn't a wall clock in the tutorial room, so despite making an effort to be aware of time I went 10 minutes over. Sorry, guys. :)

Jason Kirtland will be posting the slides from the Advanced SQLAlchemy tutorial soon.

Friday, March 07, 2008

Pylons: first impressions

A couple co-workers and I spent some time with Pylons yesterday, enough to get to where we started to feel productive, but not much more than that. I think there's value in a newbie's first impressions, so here are mine. I'm sure at least some of these are wrong.
  1. Poor documentation of core Pylons (Mako and SQLAlchemy are fine -- thanks, Mike). I had to use the source several times. I'm still not really sure how Routes works, although I was mostly able to make it do what I wanted. The first tutorial overcomplicated things, showing how to configure things to handle semi-obscure requirements, without explaining those requirements or simpler alternatives.
  2. Helpful community. I got most of the answers I needed pretty quickly in the #pylons freenode IRC channel.
  3. Not much black magic: if you know Python you won't be struggling with weird Pylons-only concepts. It's all modules, classes, and dicts put together in an intuitive way (at least to my way of thinking).
  4. SA (SQLAlchemy) is an amazing pleasure to use. (Okay, not just in Pylons, but I had to say it.) I have a slightly unusual schema -- the details are outside my scope here -- and SA's autoload handled it perfectly.
  5. I wrote more CRUD boilerplate than I would have liked. There is no real alternative to Django's "admin app." DBMechanic looks like it's getting close, but it's TG-and-Genshi only for now. FormAlchemy is a partial solution (I did use it) but only does html generation; you'll still write boilerplate in your controllers.
  6. Genshi appeals to me in theory but in practice its XML nature makes it feel clunky. XInclude as an alternative to template inheritance? 3 lines of xmlns per template? Mako has its own verbosity problems, e.g., having to do a def to pass a title to the parent template, but these aren't inherent to Mako's approach the way they are to Genshi's (we're XML, dammit), and Mike seems mildy interested in improving this specific example for the next release.
  7. The pyfacebook tutorial is long on throwing wads of code at you and short on explaining what's actually going on. What does facebook.check_session() do? What does the facebook_middleware do? Why? Most facebook api tutorials have this same problem. Obviously I haven't written a better one, so call me a hypocrite, but tutorial authors, please explain the why and not just the what.