Tutorials

I have given numerous conference tutorials over the years. These are typically advanced 3-hour deep-dives into some topic of interest. In some cases, conference video is available (although if a screencast is also listed, you might want to watch that instead as it gives an unobstructed view of my screen). Tutorial slides are detailed and meant to stand on their own. If you have the time to work through these, you will learn a lot. If you're looking for my conference talks, go here.

Modules and Packages: Live and Let Die!

April 9, 2015
PyCon, Montreal
videoscreencastslidesmaterials

A deep dive into the world of modules, packages, and the inner workings of Python's import statement. One of the goals of this tutorial is to explore some of the advanced magic used in larger frameworks and applications. Also, to explain some dark corners of import.

Generators: The Final Frontier

April 10, 2014
PyCon, Montreal
videoscreencastslidesmaterials

Part 3 of the generator/coroutine tutorial trilogy. This installment features more about concurrency, generator delegation (yield from), and the foundations of the asyncio module. Includes other magic such as the use of generators for defining context managers and eliminating deep recursion. This tutorial represents about the furthest limit one can push Python's yield statement before it turns into a singularity or it becomes the new async/await syntax in Python 3.5.

Python 3 Metaprogramming

March 14, 2013
PyCon, Santa Clara
videoslidesmaterials

A delightfully devilish tour through various metaprogramming features of Python. Includes decorators, class decorators, descriptors, metaclasses, import hooks and more. Although most of the topics also apply to Python 2, the tutorial covers a variety of features only found in Python 3. You might get fired if you apply too many of these things to the code at work.

Learn Python Through Public Data Hacking

March 13, 2013
PyCon, Santa Clara
videoslidesmaterials

Improve your Python skills by playing around with some public datasets. In this tutorial, I look at the Chicago Transit System, Food Inspections, Potholes, and more.

Mastering Python 3 I/O

March 10, 2011
PyCon, Atlanta
slidesmaterials

If you're going to make the jump from Python 2 to Python 3, some of the most problematic issues are related to the new I/O system. In this tutorial, we dive into Python 3's I/O system and how it might impact your existing code. An earlier version of this tutorial was also presented at PyCon 2011 in Atlanta.

The Python Programming Language

June 14, 2009
USENIX Annual Technical Conference, San Diego
slides (part 1)slides (part 2)materials

A six-hour overview of the Python programming language aimed at systems programmers. Part 1 is mostly focused on basic language features, data structures, and files. Part 2 is focused on program organization including functions, modules, and classes.

An Introduction to Python Concurrency

June 13, 2009
USENIX Annual Technical Conference, San Diego
slidesmaterials

An introduction to concurrent programming in Python, primarily aimed at systems programmers. Topics include threads, thread synchronization, multiprocessing, message passing, and event-driven programming. Naturally, the global interpreter lock (GIL) is also mentioned.

Python Generator Hacking

June 13, 2009
USENIX Annual Technical Conference, San Diego
slidesmaterials

A somewhat condensed version of the "Generator Tricks for Systems Programmers" and the "Curious Course on Coroutines and Concurrency" tutorials mixed together for an audience of systems programmers.

A Curious Course on Coroutines and Concurrency

March 26, 2009
PyCon, Chicago
videoslidesmaterials

Part 2 of the generator/coroutine tutorial trilogy. In Python 2.5, the yield statement was enhanced so that it could receive values sent to it. Functions that utilized this feature were said to be "coroutines" and had new magical powers. In this tutorial, I go on a quest to explore coroutines and to find out what good are they? This tutorial is now a bit historical, but the topics form the early foundations for Python features to follow such as generator delegation (yield from) and asynchronous I/O support (async/await).

Generator Tricks for Systems Programmers

March 13, 2008
PyCon, Chicago
slidesmaterials

Part 1 of the generator/coroutine tutorial trilogy. This tutorial focuses on using generators as an improved way to describe iteration. A major part of the tutorial is about various forms of stream-processing, workflows, and pipelines. Ways in which generators interact with threads, network programming, and other systems programming topics are also covered. The tutorial was revised slightly and also presented at PyCon UK 2008.

Swig Master Class

March 13, 2008
PyCon, Chicago
slidesmaterials

The Swig project is one of the earliest tools for integrating C/C++ code with Python. It continues to have a variety of advanced features that have yet to be replicated in similar tools. In some sense, this tutorial is an advanced retrospective of the Swig project and how it actually works under the covers. If you've ever encountered Swig and had your head exploded, this tutorial might provide some answers. Or maybe it will just raise new questions.