PyCon

Monday 26 February 2007This is over 17 years old. Be careful.

I just got back from my first PyCon. It was a fascinating experience. It’s hard to make a cohesive report, so here are my impressions.

People

I got to meet lots of people I knew by name or reputation, but had no face for. As a blogger, I constantly feel like my writings here are of little interest, and that their quantity and quality are decreasing over time. So I was pleasantly surprised that people approached me to say they read my blog, like Jay Graves, David Schein, David Montgomery, Jeremy Jones, Patrick Maupin, William McVey, and Jorge Gajon.

I finally got to meet all the Django people I’ve been reading and emailing with: Adrian Holovaty, Jacob Kaplan-Moss, Jeremy Dunck, and James Bennett. They are a smart, fun, energetic bunch. Thanks for the pizza! Sitting in on their mini-sprint Saturday night was inspiring. It makes me want to contribute more significantly to the Django project, but I’ll be heading in to work soon, where the realities of a start-up will likely put that idea out of my head!

Talks

I got to hear some talks which let me finally get a handle on some technologies I’d heard about but never really was able to spend the time on to understand. Now I feel like I know the elevator pitch, and can dig deeper offline:

  • WSGI: a web page technology in the spirit of CGI (hews closely to HTTP concepts, and doesn’t care how you build your pages), but without the process-per-request overhead. Can be composed as decorators. A similar architectural feel as Unix pipes: build small pieces, then combine them to create something larger.
  • SQLAlchemy: the Cadillac of database layers. Uses data mapping rather than active records, so your class structure doesn’t have to be a slave to relational limitations. Sophisticated unit of work support and identity mapper preserve semantics between the layers.
  • Deploying with Eggs: Nope, still don’t get how to do it. ez_setup, easyinstall, distutils, setuptools. It’s too much. One of these days I’ll figure it out, and maybe write a How-To.

I missed the keynote Friday morning, about the One Laptop Per Child project, which everyone agreed was a great presentation. The View Source button earned universal kudos as Cool.

I saw Adele Goldberg’s keynote about the state of e-Learning in public education, which was well-presented and Important, though not what many people expected her to talk about. Also, she pooh-pooh’ed much of e-Learning as simple drilling, and then ended with a demo of her latest software, which looked a lot like simple drilling to me.

The panels were an interesting way to get a taste from the buffet of options, but mostly were a good way to get a sense of people’s personalities. With eight or ten people on stage, it can easily become an entertaining round of one-liners and zingers, which is not a bad thing. I wasn’t able to pay good attention to the web frameworks panel due to a crisis elsewhere, but from the testing tools panel:

  • Chad Whitacre: “I’m addicted to dots.” If you don’t know what that means, you need to write (or run) more unit tests.
  • Titus Brown: “I don’t use test-driven development, I use stupidity-driven testing: when I do something stupid, I wrote a test to make sure I don’t do it again.”

Lots of people are looking to hire Python programmers. So many people giving lightning talks were looking for workers that it got to be a running joke: the few who weren’t hiring would always start with: “First off, I’m not hiring.”

Culture

Perhaps the most thought-provoking discussion was in Adam Keys’ car driving to a mis-placed restaurant Friday night. Adam is a Ruby guy, but was attending PyCon as an exercise in technical comparative anthropology. His opinion was that compared to the Ruby camp, Python has no highly-visible educators and evangelists. The Python ethic is straight out of engineering. Write some good code, then let it speak for itself. I have much more to say about this, which I’ll hold for a later post.

How to attend PyCon

PyCon is an odd gathering: it’s a lot of geeks, which means people don’t necessarily have the best social skills. And we’re the types that let the code speak for itself. This means that there were lots of people wandering the halls who would have been fascinating to speak to, but I didn’t know who they were. The ultimate example of this is that I was sitting next to Michael Bayer and his wife at dinner, but I didn’t know that he was the author of SQLAlchemy, Myghty, and Mako.

Michael Fletcher had the right idea: he hand-annotated his conference badge with the names of his projects, so that although his name didn’t ring a bell, PyDispatcher and simpleparse did.

Here’s my advice for attending PyCon:

Talk to people.

Really, that’s it. If you recognize someone, and think they wouldn’t want to talk to you, you are probably wrong. Talk to them. If you find yourself next to someone, and you don’t know who they are, talk to them to find out — chances are good you will make a connection you will value.

Wrap-up

PyCon was fun, I’m glad I went. I wasn’t sure the talks would be worth it, since each of them sounds roughly like a really good blog post, and I’m used to getting my information that way. In truth, the talks are not the main reason to go — the quality is uneven, and much of their content can be better consumed online.

The thing I take away from the experience is the face-to-face connections I made, and the sense of the community as a whole. I hear PyCon 2008 will be in Chicago, and I’m looking forward to attending.

Comments

[gravatar]
Ned, your blog rocks, it's one of my favorites.

What does he mean by dots? Is it related to this?
[gravatar]
I know you had to leave early but Sunday's keynote by Robert Lefkowitz was excellent. I highly recommend watching the video when/if it is posted.
[gravatar]
Ned,

I saw someone in a Tabblo T-Shirt, but I was not able to get close enough to see if it was you and thank you for your blog in person. I would guess you are more widely-read than you suppose - I know its on my must-read list.
[gravatar]
I want to also also say that I love reading you blog - don't get disheartened and stop!

My badge would say "pywinauto" :-)
[gravatar]
This is an excellent summary of the event! I absolutely agree with you that talking to the other pythonistas was so interesting. I also agree that the impromptu Django sprint was inspiring.

Also, even just hearing about how tabblo works behind the scenes was very inspiring too.

Now that I've found your blog, I'm going to start reading it too. By the way, you asked me if I had a blog that you may read, and it's linked in the www of this post, so you can see if it is something that you read.
[gravatar]
Egg distribution shouldn't be confusing. I think it's just hard to find simple introductory instructions. Here's my attempt at explaining the basics of eggs in 30 seconds:

1) install setuptools. there's probably a package for your OS/distro. shouldn't be any more or less difficult than installing any other python library.
2) installing setuptools should put the 'easy_install' command somewhere in your path. you can then use that to install eggs in one of three ways:
2a) easy_install path/to/downloaded.egg
2b) easy_install http://www.example.com/some/package.egg
2c) easy_install PackageName (if the package has been published in the cheeseshop)
3) to package your own stuff, you make a setup.py file like for distutils, but instead of "from distutils.core import *" you do "from setuptools import *"
4) run 'python setup.py bdist_egg' and it will create an egg for the package in the 'dist/' subdirectory. You can then put that egg somewhere and install it with easy_install as in step 2. 'python setup.py sdist' will create a traditional tarball.
5) to put stuff in the cheeseshop, you can either manually upload your egg through the web interface or, if you already have an account set up and have put the author info, license, etc into your setup.py, you can run 'python setup.py bdist_egg register upload' and it will do everything for you.
6) ez_setup.py is just a convenient script that people can use to install an egg very easily if they don't already have setuptools installed. If that's a use case you care about, look into it more; if not, it's not very important to understand.

There's a ton more to eggs/setuptools like dependencies, version specifications, egg info directories, and entry points, but for the basics of installing eggs and packaging your own stuff, you don't really need to know more than the above info. Once you understand that, the existing setuptools documentation should be more useful as a reference for when you need to get into the more advanced stuff.

One additional really nice thing about setuptools that doesn't get mentioned very often is that when libraries are installed from eggs, the exact version of the library will show up in the pathnames in tracebacks. This is really handy when people are posting tracebacks to mailing lists; developers can then either quickly see that someone is using an exceptionally old or new version of a library or they can set up a testing environment with exactly the same version of the library to try to duplicate the bug.
[gravatar]
Thanks everyone for the kind words. Bill: the dots Chad was referring to were the dots printed by the unit test runner as each test succeeds.

Anders: thanks for the info. One of these days I will really need to buckle down and pay attention, and maybe it's made so simple, I don't feel like I understand it yet.
[gravatar]
Ned,
Thanks for your very detailed walkthrough of the tabblo framework at the django open space talk. It was fantastic to learn how the stack was built and see your development environment in action! (please do post your logging extension!)

I would also like to point out the OpenSpace talks and BoF's as something to check out. Many are better than the scheduled talks and allow for a better exchange of knowldge. We had 54 recorded open space talks! (as many as we had scheduled talks last year). There were many which just happened out of the eather which were not recorded as well, like the IP law talk.

Add a comment:

Ignore this:
Leave this empty:
Name is required. Either email or web are required. Email won't be displayed and I won't spam you. Your web site won't be indexed by search engines.
Don't put anything here:
Leave this empty:
Comment text is Markdown.