Worried about the future of Python 3? Wondering when lambda will be fixed? Angry about the GIL? Eager to get your package into the standard library? In this keynote, Python’s BDFL will address these issues and many others from his unique, personal perspective. Learn how not to be a troll!
by Alex Martelli
Grace Murray Hopper’s famous motto, “It’s easier to ask forgiveness than permission”, has many useful applications – in Python, in concurrency, in networking, as well of course as in real life. However, it’s not universally valid. This talk explores both useful and damaging applications of this principle.
I start by introducing the motto “It’s easier to ask forgiveness than permission” and the woman who used it, Rear Admiral Grace Murray Hopper, also known as the “mother of Cobol” and the author of the first ever programming-language compiler.
I then move on to the Python context, where the motto supports the proper usage of exception-catching rather than preliminary checks; and the “rule that proves the exception” introduced by abstract base classes.
Expanding the subject, I show how “optimistic concurrency” applies that motto (while locking would “ask permission”, in essence, STM “asks forgiveness"), and how collision-detection focused networking protocols have similarly triumphed over more highly structured, “ask permission” ones like token-ring.
Moving to the fuzzier context of real life, I then show how this daring approach does not work quite as well as in the technical realm – except when applied correctly, in the right circumstances… and I try to evince a general law describing what the right circumstances for its application are, comparing and contrasting with the similar issue of “do it right the first time” versus “launch and iterate” (and the latter’s cognate “fail, but fail fast” principle).
by Febo Cincotti
Brain-computer interfaces (BCIs) collect the waveforms generated by the brain during its activity, and processes them in real-time, with the aim of translating human thoughts into the actions of a machine upon the surrounding environment. Though at the state of the art they cannot compete with more traditional forms of Human-computer interaction, both in terms of speed and in terms of accuracy, indeed they constitute an inspiring challenge for the neuroscientist, at the boundary between science and fiction. Pioneers talked about BCIs already fourthy years ago, but only in the last 15 years we witnessed their diffusion as research topic in the scientific community. More recently, BCIs appeared in the market arena. Entertainment is the mainstream target, but a minor, more important goal is being pursued: using these interfaces to let a person with severe motor disabilities be able to express himself, and control the surrounding environment. This option is still being actively investigated by scientists, thus cannot be of help for those who are in a locked-in state today. The Brindisys project aims at demonstrating the viability of this option, by developing novel technology to restore at least in part the independence of persons with Amyotrophic Lateral Sclerosis.
In the first part of the keynote we will present the current status of PyPy, with a particular focus on what happened in the last year. We will give a brief overview of the current speed and the on-going development efforts.
The second part of the keynote is about one particular feature whose development is in progress in PyPy: Automatic Mutual Exclusion. What it is needs some explanation:
The GIL, or Global Interpreter Lock, is a well-known issue for Python programmers that want to have a single program using the multiple cores of today’s machines.
This keynote is not about writing a GIL-less Python interpreter; although hard, this has been done before, notably in Jython. The real issue is that writing each and every multi-threaded Python programs is hard too. The threading module offers locks in several variants, conditions, events, semaphores… But using them correctly without missing one case is difficult, impossible to seriously test, often impossible to retrofit into existing programs, and arguably doesn’t scale. (Other solutions like the multiprocessing module are at best workarounds, suffering some of the same issues plus their own ones.)
Instead, this keynote is about an alternate solution: a minimal thread-less API that lets programs use multiple cores, without worrying about races. This may sound impossible, but is in fact similar to the API simplification of using a garbage collected language over an explicitly managed one — what is not minimal is “just” the internal implementation of that API. I will explain how it can actually be done using Automatic Mutual Exclusion, a technique based on Transactional Memory. I will give preliminary results on a modified version of the PyPy Python interpreter that show that it can actually work. I will also explain how the API is used, e.g. in a modified Twisted reactor that gives multi-core capability to any existing, non-thread-based Twisted program.
Are you a professional looking for a job? Is your company looking for proficient programmers? EuroPython is your greatest opportunity to hire the best Python programmers!
The special recruiting sessions allow you to get and offer a job in Python programming.
Important firms in the international IT sector will find room to present their own career opportunities to very special candidates. As shown by the well known "Python Paradox", Python programmers are typically among the very best on the market!
If you are looking for a job, bring your resumé to EuroPython, at least ten printed copies (as much as we would like to live in a hundred-percent digital world, a printed copy will allow you to immediately discuss your resumé and capabilities with a recruiter, while a digital copy on a USB pendisk will probably be less useful in a crowded situation).
If you are a company with open positions, have a look at the opportunities offered by EuroPython. Access to the recruiting sessions and all the other recruiting opportunities at EuroPython is in fact restricted to sponsors.
An open session where the BDFL will answer questions from attendees.
Questions must be submitted (and voted) through Google Moderator; we will ask the most popular questions to Guido during this session.
A complex network is a network that has non trivial topological properties, i.e., properties hinting the presence of elaborate relationships among the actors, opposed to simple networks such as regular lattices or random graphs. Examples of complex networks are most social, technological or biological networks, such as the internet, the web, a professional network, the nervous system of an animal or the contact network of any social networking system.
Network analysis has many practical applications, e.g., ranking or grouping items on the basis of their position in the network, and is also the basis of some collective intelligence and data mining techniques. Recently network analysis is also applied to security problems in the form of trust networks.
Along with the basic concepts, working Python code is presented, both using existing network analysis Python tools and numeric packages. The focus is mainly placed on code, which will be shown and discussed together with the theory, with the idea that running code and simulations are easier to understand that formal maths. Since complex network datasets are typically huge, some high-level optimization techniques are also discussed.
Although formulas are kept at the minimum, some maths skills are required along with basic knowledge of the Python programming language.
by Thomas Perl
The goal of this training is to show you how to start developing full Android applications using only Python. Different technologies will be demonstrated, including PySide-based QML GUIs using the Necessitas Qt port and the Py4A/SL4A-based approach, which can be combined with Android’s WebKit and re-use Python web frameworks.
While Android already has a good SDK out of the box, being able to use Python instead of Java is a big advantage for some developers - it allows for quicker turnaround times, and reuse of Python libraries. Python on Android uses a native CPython build, so its performance and compatibility is very good. Combined with PySide (which uses a native Qt build) and Qt’s support for OpenGL ES acceleration, you can create fluent UIs even with Python.
The resulting PySide-based applications run on Android, but also at least on Mac OS X, Windows, Linux and Maemo and MeeGo - basically all platforms on which Qt is available. The SL4A/Py4A-based applications will run on Android only, but will be able to utilize Android-specific APIs. Both approaches can also be combined.
The Python web framework Django can handle extremely high levels of traffic… with appropriate design and support. We’ll go over techniques to keep your Django site from being crushed under high load.
We’ll also discuss caching.
PyGame continues to be Python’s most popular 2D game library, even though there is growing competition from more modern OpenGL-based libraries. It is still an excellent way to learn how our favorite games work internally and to write similar games ourselves.
During this tutorial I want to introduce the basics of using PyGame to create interactive, animated graphical applications (such as games), and then help the participants make their own start at a simple adventure game, which they can later develop further into projects of their own. I want to concentrate on commonly used techniques and patterns in game development, which are useful no matter what library is used in the implementation. In particular I will be discussing animations, tile-based maps, collision detection, event systems, internal representation of game state and different approaches to code organisation and internal structure of games.
I have previously created a (much simpler) tutorial for creating a turn-based tile-based PyGame game and a couple of games, such as Z-Day and Jelly . I will be using the materials and experiences from those projects in the tutorial.
Please bring your laptop with Python 2.7 and PyGame installed.
OpenStack is a large and relatively new platform for building IaaS public and private clouds, which has attracted widespread backing from many companies. Covered in the talk is:
Nel corso dell’ultimo anno abbiamo lavorato all’implementazione Python di una RESTful Web API completa. Abbiamo imparato un bel po’ di cose sui best pattern REST e, naturalmente, abbiamo messo alla prova le ben note capacità web di Python, rilasciando nel frattempo un paio di progetti Open Source. Nel corso del mio intervento condividerò quel che abbiamo imparato. Prenderemo in considerazione il problematico design di una REST API ‘pura’. Vedremo che cosa offre Python in questo campo e scenderemo infine nel dettaglio, dando una occhiata al codice che abbiamo scritto. Alcune tecnologie/stack che tratteremo sono (in nessun ordine particolare): Flask, PyMongo, MongoDB, REST, JSON, XML, Heroku. Lo sapevi? Che ti piaccia o no, c’è una REST API nel tuo futuro.
Tornado is a non-blocking light-weight web server and framework. There’s been many introductory talks about it, and it’s time to look deeper into it: not just what Tornado does, but how it does it and what can we learn from it when designing our own concurrent systems.
We’ll cover each topic in two parts: first we’ll see how to use a certain feature in our applications; then, we’ll dig into Tornado’s source code to see how it really works. How much time we’ll spend in the “how to use” will depend on the audience’s knowledge of Tornado.
Getting Started: quickly get a simple Tornado application up and running. We’ll keep digging into, changing and poking this Application for most of the talk.
So you have selected the best possible programming language; you learned about object oriented design, functional paradigmas, test driven development and the Structure and interpretation of computer programs.
What else can you do? Harald did research and experimented outside computer sciences. What methods and substances are available to tune your brain for programming? This talk will describe personal experiences with various motivational, self discipline, learning and information management techniques; substances and exercises to tune your brains operating system. There will be expeditions into results from brain research. A critical judgement, pointing out snake oil and stuff that worked.
Python has great support for interfacing with C/C++ code, and this has been used to great advantage by exposing many C/C++ libraries as Python modules. In this talk, I will reverse the equation. I will show you how you can - and why you might want to - build C++ APIs on top of Python modules and use them directly from your C++ programs.
The topics will include:
I will also discuss the reasons why C++ APIs on Python code represent a very useful and often powerful technique. The reasons range from simple pragmatism (you want to use an existing Python module in an existing C++ program) to productivity (writing Python code plus a C++ wrapper can be easier and faster than writing pure C++.)
Juju is a new opensource configuration management and tool for deploying services into a cloud and data center environments.
Juju provides a higher level semantic to its users of service level management rather than machine management. By rethinking this focus, Juju is able to provide real reuse of service definitions in much the same way that package management allows deployment and reuse of software bits in many different context. Juju’s goal is to be the apt of the clouds. By providing these higher level semantics to end users, juju aims to be a preferred solution for deploying services to the cloud.
by Davide Corio
OpenERP 6.1 è uno dei più importanti free e opensource software scritti in Python. Immergiamoci nel framework a scopriamo come progettare la nostra applicazione.
Durante la presentazione exploreremo gli strumenti integrati a disposizione degli sviluppatori per la creazione di nuove funzionalità, la progettazione di stampe o per dialogare con dispositivi mobile e applicazioni di terze parti.
Spotify’s current catalog contains 15 million songs. Original storage of audio and metadata is over 500 terabytes and we’re transcoding 500 000 new audio streams a day. At it’s best the system can make an album playable just few minutes after it’s delivery.
This talk is about building the music pipeline, all the way from the labels, who deliver music and metadata XML to our system, to the clients. Problems here are the concurrency, massive amount of data, enriching the metadata to provide better quality and to actually deliver 100 gigabytes of indexes daily.
ABOUT THE TALK
What is Flask? Is it any better than Django? Can I use Flask on Google AppEngine? Fortunately, during the course of this talk I will not have to answer any of these questions. This talk is a showcase of our experience with using Flask to build flexible and scalable web service and it focuses strongly on Flask and Flask extensions’ internals.
WHO SHOULD COME TO THIS TALK
Basically anybody who’s looking to invest into learning Flask or already started using Flask. Even though this talk focuses strongly on Flask-related topics, it also raises important points relevant to any web development framework or library.
The talk targets developers who wish to publish applications to an international audience and will discuss three topics that developers have to deal with: handling Unicode, localizing the software with gettext and handling time zones.
First, the talk will address what Unicode is and how to write applications that deal with Unicode correctly. Then, the talk will discuss software localization using gettext and will conclude with a discussion of time zone handling in Python.
No prerequisites are necessary.
by Nicola Larosa
Prenditi cura della cosa più importante, il benessere psicofisico, e fallo in modo efficiente.
Non bisogna patire la fame (magari solo un pochino), fare tanta ginnastica (magari solo un pochino) e impiegare tanto tempo e soldi (magari solo un pochino… sembra di intravedere uno schema di fondo :-) ). Occorre soltanto prendersi cura del proprio corpo usando ciò che ci permette di programmare i computer: la nostra mente.
No, il corpo umano non è una “macchina”, come spesso si dice: è molto più complesso. Ciononostante, conoscere alcuni fatti, qualche principio guida e alcuni strumenti tecnologici (dopo tutto siamo geek, no? :-) ) può decisamente migliorare la nostra vita.
A short overview how PostgreSQL can be used for tasks that are currently often delegated to heterogeneous bunch of data storage solutions referred to by common name NoSQL. Covered topics from traditional NoSQL area are:
And from SQL part
The Python Standard Library contains all kinds of useful stuff - healthy, wholesome stuff like a wide array of support libraries for file formats, a web server, easy access to OS services and functional programming tools.
Among those benevolent libraries hide other, darker libraries. They offer tremendous power to anyone who learns how to wield them, but they also carry the threat of destroying your software’s readability, comprehension and very structure.
This session will be a hands-on-keyboard dive into the dark magic parts of the standard library, and participants will learn valid (for a given value of valid) use-cases for practices that will give any software engineering professor nightmares. It focuses on learning by doing, and (evil?) koans are used to teach some of the most ‘clever’ tricks of standard Python.
by Roberto De Ioris
Siamo tutti capaci di far girare una applicazione WSGI su un server (indipendentemente da quale sia), ma che succede quando ne vogliamo eseguire centinaia scritte da programmatori che non conosciamo (o che conosciamo fin troppo bene e quindi non vorremmo avere sui nostri server) ? uWSGI e’ un application server estremamente avanzato, usato principalmente per l’esecuzione di applicazioni WSGI. Nginx e’ un webserver estremamente performante e leggero. Il task mostrera’ come usare entrambi per costruire una infrastruttura per il deployment di applicazioni WSGI per voi, i vostri collaboratori e i vostri clienti, tenendo i costi hardware (e umani) al minimo sindacale
Based on our (Philipp Wassibauer and Jannis Leidel) experiences building Gidsy.com this talk will give you valuable insight as to how your infrastructure will evolve and how to set up the basic components (Loadbalancer, Webservers, DB, Caching, Celery, CDN, …) of your site.
by Péter Szabó
The earlier a bug is discovered, the cheaper it is to fix it. Method restrictions (such as abstract, final and @Override) help the programmer in discovering incompatibilities between a class and its subclass early (i.e. at startup time for Python and at compile time for compiled languages). Python doesn’t provide method restrictions out of the box. To implement them, we take a deep dive to the realms of Python metaprogramming (decorators, metaclasses, method wrappers, traceback inspection and builtins). Lots of short and code examples will be provided to show the building blocks and how we combine them.
In one intensive four-hour tutorial, we will cover everything that a Python developer needs to know to set up, maintain, and get best performance out of a PostgreSQL database:
The focus is the skills needed by developers in a devops environment who need to step into the database administrator role. No previous database administration experience is assumed.
by Antonio Cuni
Python is a powerful language. Beginners appreciate its surface of simplicity and ease to use, where (almost) everything “just works” (TM) as expected. However, under the hood, there is a whole world of rules and layers which can be (ab)used by experienced programmers to tweak the language in unexpected ways.
Often, these techniques are labeled as “hacks” or “black magic”, to indicate that they should not used in production or that you should not look at it unless you are “initiated” to some not better specified sorcery.
However, if used with care and in the right places, these techniques can lead to better, faster and/or more readable code, or can be extremely useful during debugging, and thus deserve the definition of “white magic” which programmers can use to improve their code. Moreover, looking at how they are implemented is a good way to learn about some of the deep corners of the language.
This talk presents some of these advanced techniques which I have seen in use in real code, e.g. in PyPy or pdb++. Including, but not limited to: creating new functions by reusing existing code objects, instantiating multiple copies of the same module, playing with metaclasses in various ways, changing the __class__ of an object on the fly to get specialized behavior, automatically entering the debugger when a certain event occur, etc.
2nd–8th July 2012