EuroPython 2011 Notes

These are some of my notes from EuroPython 2011. I mostly collect projects and tools that are of immediate interest to me in my own work. If you’re interested in the complete list of talks and would like to download the slides or watch the talks on video, you can find those on the EuroPython talks page. Also, Julie Pichon has summaries of some interesting talks on her site.

EuroPython Bag

Python Environment

At our company, we deploy non-interactive Python tools to our internal users. So far, we deploy these tools into the users’ local Python installations. Problems arise when the package versions that our tools require are different from the versions that the user has installed, or when updates to our tools require new dependencies to be installed. To avoid such problems, the “virtualenv” package allows you to keep separate Python environments for different tools. The “pip” package can then be used to automatically install dependencies into these environments. Alex Clemesha has an article up on his blog about the Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip.

Another useful addition to the Python toolbox is the “nose” unit-testing package, which extends the Python “unittest” module. It has advanced support for test fixtures, generated test cases, running test batteries, and more. More at the “nose” project homepage.



As a language, I find JavaScript pretty…awful. But it can be used to build pretty cool stuff for the web, so it’s worth learning. That’s why I attended Jonathan Fine’s “JavaScript for Python Programmers” training.

One of the learning resources that Jonathan recommended was “JavaScript: The Good Parts” (on YouTube):

Network Programming

For the grid computing system at our company, we rely mostly on the standard XML-RPC modules in Python. All the high-level logic, such as message queues, failure handling, authentication, etc. are custom-built on top of that.

Unsurprisingly, there is a wealth of existing libraries that might make our lives easier by not having to reinvent the wheel. (While adding their own layers of complexity, I’m sure.)

  • Django REST Framework—A library for adding a RESTful API to a Django application.
  • Celery—An asynchronous task queue based on distributed message passing.
  • ZeroMQ—A “socket library that acts as a concurrency framework.”
  • RabbitMQ—Message-oriented middleware. Jason Williams describes what it is and what it can be used for.
  • AMQP (Advanced Message Queuing Protocol)—The protocol that RabbitMQ implements.
  • gevent—”A coroutine-based Python networking library that uses greenlet to provide a high-level synchronous API on top of the libevent event loop.” Geez, I don’t even begin to understand what this means…
  • Twisted—An event-driven network engine. (Twisted training by Orestis Markou.)

Alex Clemesha’s article “Real-world real-time web apps with Python equals Django + Orbited + Twisted” describes how some of these fit in the big picture—and adds even more buzzwords and acronyms for good measure.

Some of these libraries come with implementations for the architectural patterns described in the book “Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects.”

Little Tidbits

  • Paramiko—An SSH client/server library written in Python (using PyCrypto). Jesse Noller has an introduction on his site.
  • Kivy—A “library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps.” For his lightning talk, Mathieu Virbel used a really cool presentation tool, PreseMT, that is itself based on Kivy. (Watch on YouTube)
  • scrypt key derivation function—This can be used to calculate password hashes in a way that makes brute-force attacks way harder than using traditional MD5 or SHA hashes. Python bindings exist.
  • blockdiag—A block diagram image generator. It uses an input file format that’s similar to GraphViz.

See you at EuroPython 2012!


Share this page
Share on FacebookTweet about this on TwitterShare on Google+Email this to someone

Leave a Reply

Your email address will not be published. Required fields are marked *