List of videos

Matthieu Rigal - Bringing PostgreSQL towards zero downtime migration with Python

Matthieu Rigal - Bringing PostgreSQL towards zero downtime migration with Python [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] Using an SQL database offers a bunch of advantages; first of all its maturity and that it is understood by almost every software developer. But it has at least one main disadvantage. As the data is structured, if you want to modify the structure, for example on a long-running project, you need a migration and therefore almost for sure, a downtime. When you have to make a migration, to modify the structure of data for a small amount of records, it is so fast that it never gets problematic. But if you think to modify the structure of tables containing millions or billions of records, the time required to simply apply the structural change is problematic. Here are some changes we are working on at orderbird to go towards zero downtime migrations using some of the latest improvements of PostgreSQL 9.4, mainly logical replication and mixing in a little magic of some python scripting with psycopg.

Watch
Shahriar Tajbakhsh - Parallelism Shootout: threads vs asyncio vs multiple processes

Shahriar Tajbakhsh - Parallelism Shootout: threads vs asyncio vs multiple processes [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] You need to download data from lots and lots of URLs stored in a text file and then save them on your machine. Sure, you could write a loop and get each URL in sequence, but imagine that there are so many URLs that the sun may burn out before that loop is finished; or, you're just too impatient. For the sake of making this instructive, pretend you can only use one box. So, what do you do? Here are some typical solutions: Use a single process that creates lots of threads. Use many processes. Use a single process and a library like asyncio, gevent or eventlet to yield between coroutines when the OS blocks on IO. The talk will walk through the mechanics of each approach, and then show benchmarks of the three different approaches.

Watch
Vasilij Litvinov - Tuning Python applications can dramatically increase performance

Vasilij Litvinov - Tuning Python applications can dramatically increase performance [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] Traditional Python profiling tools have limitations. Standard tools like **cProfile** and most all third party tools (like **Python Tools** plugin for Microsoft Visual Studio) suffer from common flaws. First, the profiling overhead is high (up to 50%). Second, the information provided is “function-level” i.e. the tool shows how much time was spent within a function, but not actionable “line-level” information to show which exact lines are _the bottleneck_ in a function. Adding “line-level” information to most tools causes the application to run even slower. Third, some tools require modification of the application source code to enable profiling thus disrupting development. This talk presents an experimental Python profiler. It typically has less than 15% overhead, shows line-level information and does not require modification of application source code. Experiments using it resulted in performance gains of 2x and more. Of course results vary by application, but in a typical application there may be quick optimizations easily identified by this type of profiler. The talk will briefly describe the basics of what, why and how to profile. The profiler‘s use and results will be shown in the presentation with examples based on real-life applications. Previous experience of working with profilers and trying to optimize an application is a plus, but not required, to gain a better appreciation of the work presented.

Watch
Julian Berman - Just Because You Can, Doesn't Mean You Should

Julian Berman - Just Because You Can, Doesn't Mean You Should [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] Python is a powerful language that provides many tools for creating highly dynamic programs. It offers tools all across the complexity spectrum that library authors can use to make their libraries seem convenient to use for users. While it's true that there are a wealth of techniques with huge positive benefits, there are a number of common antipatterns which can deceptively cause a net-loss in flexibility, readability, and predictability for users. We'll explore a few specific commonalities in this area of library and object API design, and talk about the ramifications they have on each of these programmer concerns.

Watch
Rob Collins - DumbDev -- eight rules for dumb development

Rob Collins - DumbDev -- eight rules for dumb development [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] So often, we've been encouraged to be smart in our development. "Work smarter not harder!" say the encouraging posters. But the desire to be smart, and be seen to be smart, is hurting. The design suffers, the code suffers, and it's hard to recruit developers smart enough to cope with the problems caused. In this talk, I'm proposing an alternative to being smart: **_DumbDev_**. Let's use our brains for enjoyable, interesting things, rather than wrestling with code written for smart developers. **So what do I mean by _dumb_?** Well, I don't mean 'ignorant'. A clever person can be ignorant of some important information, and learn it. With ignorance, there is hope. I'm also not talking about its opposite, 'stupidity'. This occurs when someone is given the information or advice, and chooses to ignore it. Dumb isn't stupid. Nor is it silent, as in someone who can't speak. Instead, the picture I have is of one of the early computers: very small RAM, disk space measured in KB, and a woefully inadequate CPU. In other words, slow, with very little working memory and limited persistent storage. Hey, this describes my brain -- and I realise that's an asset! I will write better software if I take this into account. So, I'm a **_DumbDev_**, which means I can't hold in my mind the infamous [Plone Site class hierarchy][1] (see [Michele Simionato's article][2]). Rather than beat myself up about this, I can say, "Hold on, maybe deep inheritance is a bad idea..." There is some debate about the number of things we can think about simultaneously: it may be 7, 9, 5, 4 or even only 3. We can learn some tricks to appear to cope with more, but most of us can't easily do 38. Here's the first **_DumbDev_** rule, putting a sensible limit on complexity: > **1. All diagrams must fit on a Noughts and Crosses (Tic-tac-toe) board**. > _One central class/concept and up to eight things linked. Larger structures need to be subdivided._ There are seven further rules for me to explain in this talk. I will demonstrate the benefits of the **_DumbDev_** approach, with good and bad examples. At the end of the presentation, I hope you will realise that you're a better developer than you thought at the start. The next time it takes you two hours to debug a simple exception, you'll know that it's not you. It's because the system wasn't written using **_DumbDev_** rules. Let's free our brains for more interesting things, like having ideas and solving problems. Let's do **_DumbDev_**. [1]: http://www.phyast.pitt.edu/~micheles/python/plone-hierarchy.png [2]: http://www.artima.com/weblogs/viewpost.jsp?thread=246341

Watch
Arrested Development - surviving the awkward adolescence of a microservices-based application

Scott Triglia - Arrested Development - surviving the awkward adolescence of a microservices-based application [EuroPython 2015] [24 July 2015] [Bilbao, Euskadi, Spain] The potential upside of microservices is significant and exciting. So much so that Yelp's Transaction Platform committed from the start to an architecture of small, cooperative microservices. This talk explores the inevitable complications that arise for Python developers in as the services grow larger and stretch both their own architecture and the developers responsible for them. Come hear tales of terror (tight coupling! low test coverage!), stories which will warm your heart (agility! strong interfaces!), and everything in between as we follow the adventures of our plucky team. The talk will be focused on the functional, cultural, and reliability challenges which occur as a microservices-based project evolves and expands over time. Particular attention will be paid to where these diverge from the utopian way microservices are often described, and to the particular difficulties faced by Python developers trying to implement such systems. My goal is to share with attendees some mistakes we've made, some successful methods for growing gracefully, and Python-specific tools/libraries which can help with these problems. To enjoy this talk, you should be aware of the basic vocabulary and concepts of HTTP-based services. Any additional awareness of distributed systems (and their failure modes) will be helpful.

Watch
Andrii Chaichenko - Building a RESTful real-time analytics system with Pyramid

Andrii Chaichenko - Building a RESTful real-time analytics system with Pyramid [EuroPython 2015] [23 July 2015] [Bilbao, Euskadi, Spain] CeleraOne tries to bring its vision to Big Data by developing a unique platform for real-time Big Data processing. The platform is capable of personalizing multi-channel user flows, right-in time targeting and analytics while seamlessly scaling to billions of page impression. It is currently tailored to the needs of content providers, but of course not limited to. - The platform’s architecture is based on four main layers: - Proxy/Distribution -- OpenResty/LUA for dynamic request forwarding - RESTful API -- several Python applications written using Pyramid web framework running under uWSGI server, which serve as an integration point for third party systems; - Analytics -- Python API for Big Data querying and distributed workers performing heavy data collection. - In-memory Engine -- CeleraOne’s NoSql database which provides both data storage and fast business logic. In the talk I would like to give insights on how we use Python in the architecture, which tools and technologies were chosen, and share experiences deploying and running the system in production.

Watch
Alex Willmer - Taking the pain out of passwords and authentication

Alex Willmer - Taking the pain out of passwords and authentication [EuroPython 2015] [23 July 2015] [Bilbao, Euskadi, Spain] Passwords are a pain for us all - programmers, users and admins alike. How can we reduce that pain, or eliminate it entirely? This talk will - Review research into techniques that improve the usability of password systems, and mitigate shortcomings - Introduce the new standards Universal Authentication Framework (UAF) & Universal Second Factor (U2F) - Describe how they streamline authentication, even eliminate passwords entirely - Show how to integrate UAF/U2F in Django and other Python frameworks - Summarize the state of support for UAF & U2F in browsers, devices, and the wider world - <del>Introduce Sonipass - a project to replace passwords, even on existing websites</del> [Slides][1] [1]: https://moreati.github.io/passwordspain/

Watch
Panel Discussion: Code Review Tools

Gautier Hayoun (org) - Panel Discussion: Code Review Tools [EuroPython 2015] [23 July 2015] [Bilbao, Euskadi, Spain] This was a last minute replacement for a cancelled talk.

Watch