Ah, PyCon 2009 has come and gone. I'm a little late in doing a wrap up - but that's primarily due to the fact I wanted to spend time with the family, and not on the computer since I got back mid-day Thursday of last week. That - and other things in my life are a little worse-for-wear, so my brain's been full of "other stuff" rather than basking in the glow of: The best pycon, ever
Yeah, I came out and said it. For me, it was my 4th(?) PyCon, and not to disparage the past, but this one was the best planned, best executed and most fun for me. Sure, it had a few negatives (Chicago being one of them), but by far the pluses outweighed any minuses.
Here's a summary of things I can remember.
I got in mid-day wednesday and broke into the VM summit. I was immediately slapped with the unladen-swallow announcement, which made me do a little dance and immediately start pulling down the code. For the most part, since I was past the introduction piece, I sat in back and had interesting discussions with Thomas Wouters, Brett Cannon and others.
Later that night, I sat down and spent some time with unladen swallow - mainly getting LLVM all happy and pulling down the trunk (when I should have been using the released tag). I also spent a fair amount of time massaging my slides for both of my talks. Nothing quite like last minute changes.
The next day was the language summit. Here a bunch of people much smarter than me sat down and discussed the future of the language. I can't even begin to describe everything that happened - some basic highlights are:
- Some discussions around making python 2.7 be the last release of the 2.x line. I think the general consensus was to continue to use 2.x as a ramp into 3.0, but in general if migration to (and from) 3.0 was faster/easier, then the adoption barrier for 3.x would be greatly lessened. Most of us finally agreed that the 2.x line should end with 2.7.
- On 3.0 - porting issues and pains were discussed, things like 2to3 being slow, lack of incentive (3k being "a better language" notwithstanding) being one of the big issues. Someone (Guido I think) floated the idea that big features only go into the 3.x branch, ergo providing greater upgrade incentive. I don't think a lot of people disagreed with this and in fact, I took it to heart during the sprints when looking at feature requests for multiprocessing.
- Which brings us to 3to2 - several developers expressed that if we had a tool which could translate python3 code to python2, then they could start writing their frameworks/tools in pure python3 and then back port it. I don't recall anyone disliking this idea - but no one wanted to get the ball rolling. So I raised my hand. In essence, I volunteered to get the ball rolling, which I have done. Benjamin Peterson will be heading it up primarily - but anyone is free to contribute (and some already have). It's got potential as a google summer of code project.
- After that we discussed what CPython can do to make integration/testing easier for alternative implementations. We agreed that being able to mark tests as "cpython only" and breaking things in the repository up in such a way to make integration of the standard library into alternative distributions easier. Brett has more on this, but the essential idea is to compartmentalize the standard library out into a separate project within source control, and have other implementation pull/ingrate that. Anything that's Jython/CPython/etc specific would be marked/stored appropriately. For example, multiprocessing as it exists today is a CPython artifact, and not needed for say, Jython.
- And then there was the packaging discussion. Rather then rehash everything that was discussed, I'll simply mention that I proposed a much simpler approach. Specifically, I noted that we should simplify the core of distutils, pulling in setuptools feature where appropriate, offer plugin/hooks where appropriate, standardize on a simple, extensible metadata format and remove any of the "non core" bells and whistles from distutils. In essence my argument was that things like RPM building, easy_install, virtualenv, and so on simply do not belong in core python, rather they belong outside of the core, where consumers/developers can tailor solutions to suit their needs. Ultimately disutils can help them, and make the APIs/Plugins/Metadata standard but it should not be a fully fledged "package manager" or build utility.
Ultimately, the summits were a ton of fun, and being lucky enough to be invited was really great for me. At the end I was worried about people being tired of my chirping up, but it was resoundingly a success.
This is where things begin to blur - hopping in between hotels, lightning talks, hallway discussions - it was insane. Add to that my fear/stress about both of my talks, and I simply can't fit everything that happened in my brain.
I think I started the day in "How to Give a Python Talk" by AMK - which was great, if disheartening simply due to the fact that I had made some of the mistakes he pointed out in my talks. Ergo more slide hacking. After that it was hallway discussions and hitting up "How Python is developed" by Brett - I was going to heckle him, but I played nice.
Then there was the Python VMs panel, which I swapped out of and into the "Building an Automated QA Infrastructure using Open-Source Python Tools" - which can be summed up as "Yay buildbot" (I'm hard to impress, I've built a few of these by now). I then hit up the Twisted/AMPQ talk but ducked out early to go prep for my talk.
Then, it was my multiprocessing talk time. You can see the full video here, I think it went well, and feedback has been positive. Given I've done variations on this talk elsewhere, I was a little more confident in myself. I think I could have slowed down in some parts, and stopped fidgeting as well as a few other nits. I had some great conversations with users of the package as well as people new to it which pretty much absorbed all my time until dinner. I think I hit up the lightning talks - but I can't remember.
The next day, was the now infamous LINDBERG'D lightning talk (video here) - for those who don't know - Yes, Van knew - he even wrote the legal disclaimer I have in my slides. Basically, Brett and I had stayed up until what - 1am one night laughing about this idea of sending Van (who isn't very threatening) after commenters on the internet. The day after we stayed up laughing at this (much to the dismay of our neighbors) I hit Van up for some text and let him in on it. No, it wasn't serious (people asked). Yes, I was also voted in with a pile of other people into the PSF. Good times.
Afterward, the guidonote and then know I saw the state of django talk, as well as Jack's "Class Decorators: Radically Simple" - which was fantastic (although I saw a variation at the boston python meetup the week before). I dropped in on the ORM panel, and the GAE talk (which was disappointing). Then I hit Bob's "Drop ACID and think about data" which was awesome. I again ducked out to double check my stuff for my distributed systems talk. Also on saturday was the "Writing About Python" BoF, which was cool, but in which I may have over-expressed several cough strong opinions.
The video of my second talk is here. This one, my lack of confidence is apparent, and I'm still fidgeting. I think part of my problem is I like to express with my hands, almost like a spastic air traffic control man and holding the mic/trying not to fidget made my body just sort of spaz. This time though, I rushed from my talk into Alex Martelli's excellent "Abstractions as Leverage" talk. After that, more people found me and picked my brain.
I can't stress how awesome Alex's talk was - much of my hallway discussion time was spent discussing abstractions (especially around distributed systems) with him.
We'll see how my call for some cohesion and a real "django for distributed systems" call in my second talk goes. Everyone I have spoken to likes the idea and had a lot of great feedback, but lord knows I don't have the time to lead it up right now, maybe soon.
Late saturday, was the teach me web testing BoF which I ducked into, and then past that the Testing In Python BoF which provided me much in the way of fun, ideas, discussions and uh. Beer. Yeah. I can't exactly remember what I said when Titus put me on the spot to discuss "what sucks about testing in python". But I do remember having some great laughs. I think the heckling got recursive at one point, not sure though.
Sunday came, and with it, my sorry attempt to sit in the "Functional Testing Tools in Python" panel - which was thwarted by a 45 minute bloody nose. Apparently Titus talked a lot, so I don't think I missed anything. End of main con.
Before I move into the sprints - I want to point out that I had fantastic hallway discussions with tons of people - people I look up to, and people I've never met before. I had excellent lunches with groups of people ranging from the highly experienced to someone who has learned python a week before. I can't say enough about the simple fact that you get to relax, hang out and just talk with all of these people. Python is defined by it's community - and ours is pretty awesome.
Monday morning, I was off to the python core sprint. I immediately started hacking on multiprocessing bugs - I think all told, I managed to close around 12 or so bugs by the time thursday morning came around. The sprint was awesome simply due to the fact I could look across the room/table and ask any number of core developers questions. Martin Van Loewis came to my rescue/aid a few times, and being able to bounce ideas off of everyone is pure unbridled awesome.
Having dedicated face to face time to beat on these bugs and share information/debate things is immeasurable. I also got access to snakebite thanks to Trent, who is still working out the kinks. Alas, even having access did not make cross-platform support (mainly the BSDs) any easier for multiprocessing. I spent a good chunk of my time futzing with virtual machines so I could do further work - I ended up cutting that short because I wanted to fix things at the sprints: not fart around with tool chains.
Other than hacking until late at night through the sprints, there's was quite a fun night where bourbon flowed, and many partook - much fun was had by all. There's nothing quite like having drinks and making awful threading/process/compiler jokes.
Bug fixes/patch work for multiprocessing:
- multiprocessing/pipe_connection.c compiler warning (conn_poll)
- test_multiprocessing fails on systems with HAVE_SEM_OPEN=0
- Multiprocessing package build problem on Solaris 10
- with lock fails on multiprocessing
- Bus error when calling .poll() on a closed Connection from multiprocessing.Pipe()
- multiprocessing: SocketListener should use SO_REUSEADDR
- multiprocessing queues.py doesn't include JoinableQueue in its __all__ list
- patches for multiprocessing module on NetBSD
- test_multiprocessing: test_listener_client flakiness
- multiprocessing: switch to autoconf detection of platform values: This one was a bear. All the props in the world go out to Martin Van Loewis for guiding me through getting this done.
- multiprocessing.Pipe terminates with ERROR_NO_SYSTEM_RESOURCES if large data is sent (win2000)
- implement initializer for multiprocessing.BaseManager.start()
PyCon is simply getting better - I'm looking forward to Atlanta next year, if nothing more than for better weather. I got to talk to a lot of great people - Collin Winter, Thomas Wouters, Brett Cannon (be careful, he's an odd one), Guido, Alex Martelli and many others. Having many hallway discussions with language users and encouraging them to get involved - PyCon is AwesomeCon - no where else do you get to hear so much great information, discussions and points of view.
All of the videos for this pycon are going up on pycon.blip.tv.
It was a great time, and I can't thank everyone involved enough.