by Brandon Rhodes • Home


A conference lasts only a few days. But when organizers are able to record the talks and keynotes, the event can impact hundreds more people who were not able to attend. Here are some of my own efforts to get up on stage and share what I have learned with the communities that have given me so much!

The Contingent Build System

2021 June 19
PyCon Colombia • Remote

Document build systems are notoriously unreliable — either they rebuild too little after a change, or they rebuild too much. In this talk we learn about a prototype build system named “Contingent” which understands that, for example, changing a document’s title requires all the documents that cross-reference it to be rebuilt using the new title. Based on the chapter I wrote with Dr. Daniel Rocco in the Architecture of Open Source Applications series.

When Python Practices Go Wrong

2019 November 20
code::dive • Wrocław, Poland

Just because a programming pattern or convention becomes popular doesn’t always mean that it’s a good idea. This talk digs into the consensus that the Python community has built around what constitutes “Pythonic” code, with a focus on cases where the conventional wisdom may be wrong. I knew that many audience members at code::dive would be programmers in compiled languages like C++, so the talk is designed to introduce the features of a dynamic language and the same time as it discusses how code in such a language can become more readable and more effective.

Keynote: The Antipodes

2019 August 3
PyCon Australia • Sydney

The ancient Greeks hypothesized that the southern hemisphere had a temperate zone matching that of the northern hemisphere, where there existed a separate human race standing upside down compared to ourselves. I celebrate my first visit to Australia by considering several ways in which I find myself upside down, both when crafting personal communications, and also public texts such as tweets.

Keynote: Typesetting with Python

2019 June 16
PyLondinium • City of London

What would an algorithm look like that improves on the TeX typesetting system’s scheme for breaking a book’s text into pages? This talk explores a new Python library for high quality typesetting that I have been crafting, and that I have already used to format and print a short-run hardback book!

Keynote: Activation Energy

2018 November 23
PyCon Argentina • Buenos Aires

How much does the quality of our tools influence the problems we solve? I look at several examples of how good tools can lower the “activation energy” necessary to make a problem worth tackling. After looking at several examples of how a novel tool has transformed my habits, I look at how Python's simplicity let me help a beginning programmer solve some questions we had about an upcoming Grand Canyon hike!

Python as C++’s limiting case

2018 November 7
code::dive • Wrocław, Poland

The Python language’s memory model can be deduced from first principles: simply take modern C++ conventions and drive their safety and generality to infinity. But this limiting case generates its own compromises and opens its own categories of possible runtime errors. This talk explores the position Python has staked out in the language design space of correctness versus performance, the choices Python programmers make when they need to move closer to C++, and the ways that the C++ community keeps adopting conventions that look suspiciously like Python.

An Import Loop and a Fiery Reentry

2018 August 19
PyBay • San Francisco, California

My Skyfield astronomy library generates planet and satellite positions for Python programmers. How can a library that accepts a time argument and returns a position be used the other way around: to search for the time and date that a particular circumstance occurs? Using several techniques to search for rising and setting times, I was able to schedule a final glimpse of the space station Tiangong-1 hours before it burned up in our planet’s atmosphere!

Keynote: Animating with ASCII

2017 December 2
North Bay Python • Petaluma, California

I got several questions after my PyCon 2017 talk about how I had programmed its ASCII-art animations. But I didn’t wind up releasing the underlying animation library — it was simply too horrible! In this exposé I describe how my library worked, explain where the design went wrong, and reveal an improved design which I have now open-sourced from the ashes of the original.

Keynote: You look at it till a solution occurs

2017 October 21
PyCon Ireland • Dublin

Where can computer programming be placed on the more general landscape of problem solving? In this keynote, I explore that landscape, describe where computer programming is usually located on the landscape, and suggest practices for the programmer who wants to become a more effective problem solver.

The Dictionary Even Mightier

2017 May 20
PyCon • Portland

Since my “Mighty Dictionary” talk at PyCon 2010, the Python dictionary has evolved dramatically. This talk discusses iterable views, the dictionary’s dedicated comprehension syntax, random key ordering, the special key-sharing dictionary designed to underlie object collections, and, most famously of all, the new “compact dictionary” that cuts dictionary storage substantially — and carries a fascinating side-effect.

Using Python to power Selenium at scale

2016 November 13
PyCon Canada • Toronto

How can Python use Selenium to take command of a web browser and step it through thousands of tests that have to run hundreds of times per day? What anti-patterns emerge when an organization has been maintaining a Selenium test suite for multiple years? At Dropbox, I and my co-workers use Python to deliver test results to hundreds of other engineers. Come learn the lessons we have learned so far!

Plone Conference Keynote: Python Web Technologies

2016 October 21
Plone Conference • Boston

What does the landscape of Python web frameworks look like out beyond the world of Plone and Zope? Will Python continue to be a popular language for web development? I share some thoughts about where the community’s efforts to address the web have gone and where they might go in the future.

PyCon UK Keynote: Python and the Glories of the UNIX Tradition

2016 September 16
PyCon UK • Cardiff

In 1991 the newly-released Python language sallied forth into a profession already riven with rivalry between competing technical traditions. Learn about the stand that Python took on one side of a long-running argument, about the technology ideas it shares with UNIX, and about the important lessons from computing history that Python today delivers to programmers around the world.

PyCaribbean Keynote: When Languages Meet

2016 February 20
PyCaribbean • Santo Domingo

The LIGO team that just announced the detection of a gravity wave used Python for some of their data reduction and plotting. How has this little language, released on the Internet in 1991 as a mash-up of good features from other languages, grown into a world-class tool — and why is its rate of adoption higher today than ever before?

The design of the ‘Assay’ testing framework

2016 January 13
Puget Sound Programming Python • Seattle

The duties of organizing PyCon has prevented me from completing my new testing framework, so instead I am going ahead and sharing all of its good ideas in the hope that other testing frameworks will adopt them and I will get to enjoy them regardless of the framework I use! Thoughts on making a testing framework fast, reactive, and Pythonic.

Keynote: Stopping to Sharpen Your Tools

2015 May 26
PyWaw • Warsaw

Skilled workers traditionally build time into their schedule to stop and sharpen their tools. But programmers, working under tight deadlines, often avoid stopping to automate a repetitious process, or to reconfigure an awkward setting in their editor — and, as a result, can waste hours fighting their tools. What kinds of tools should a programmer take the time to surround themselves with for the greatest productivity?

Hoisting Your I/O

2015 May 25
PyWaw • Warsaw

Our programs too often leave control decisions stranded in low-level routines, producing tightly coupled systems that make it difficult to re-use code. What are the warning signs of tightly coupled I/O and how can it be corrected? Particular attention will be paid to the way that modern Python syntax supports a broader array of solutions than were once possible!

Oh, Come On. Who Needs Bytearrays?

2015 April 19
PyCon • Montréal

Python string operations are profligate in their use of memory — the steps necessary to parse an HTTP request often make four or five copies of every incoming byte. But does it matter? This talk explores the “bytearray,” outlines how its proper use dramatically reduces copying, but finds that it can only improve the performance of a few specific I/O operations.

Keynote: Building the Medieval Universe in 7 Easy Steps with Scientific Python

2014 October 12
PyCon Ireland • Dublin
(Slides coming soon)

Ancient scientists did not wait around for Python to be invented, but went ahead and built a model of the universe using more primitive means of calculation. But today we can finally bring their work up to date! By applying data analysis and in-browser visualization to the best and most accurate modern astronomical data, we will rebuild the ancient and medieval model of the universe — from the orbit of the Moon all the way up to the highest heaven. In the process we will see how vector math, statistical solvers, plotting libraries, and animation can all be brought together inside of the IPython Notebook.

Keynote: Django, a Data Shovel With a Future

2014 September 4
DjangoCon • Portland

At its essence, a web framework like Django is designed to duct tape over awkward problems with data. Problems like the fact that data wants to live on big servers, but users keep wanting it to appear on their screens instead. And that users want to edit data, but are horrible typists. Now that data is becoming big business for Python, how do web frameworks fit into the picture — and is Django up to the challenge?

Keynote: How To Shut Down Tolkien

2014 August 17
PyGotham • New York City

While Tolkien had friends who could devise ingenious ways to critique his work without sounding critical, he had others whose remarks were merciless and direct — to the point that Tolkien simply stopped sharing new chapters as he wrote The Lord of the Rings. As programmers we endure many of the struggles of writers and artists, and often react just as badly to critique of our code. From Tolkien’s experience we will draw lessons about how to make critique generous instead of damaging, and actionable instead of personal.

The Clean Architecture in Python

2014 July 27
PyOhio • Columbus

2013 October 13
PyCon Ireland • Dublin

Python programmers already use many design patterns in their work. Each pattern distills the wisdom the community has learned over the years, often at great expense, and makes it available to younger programmers. But even design-conscious programmers often find their applications growing more difficult to test and expand. In this talk, we will learn about how the recently propounded “Clean Architecture” applies to Python applications, and how this high-level design pattern fits particularly well with the features of the Python language.

Watch your Python script with strace

2014 July 26
PyOhio • Columbus

Modern operating systems sandbox each process inside of a virtual memory map from which direct I/O operations are generally impossible. Instead, a process has to ask the operating system every time it wants to modify a file or communicate bytes over the network. By using operating system specific tools to watch the system calls a Python script is making — using “strace” under Linux or “truss” under Mac OS X — you can study how a program is behaving and address several different kinds of bugs.

The Day of the EXE Is Upon Us

2014 April 13
PyCon North America • Montréal

It was once quite painful to build your Python app as a single .exe file. Support forums filled with lamentations as users struggled with primitive tools. But today, two separate tools exist for compiling your Python to real machine language! Come learn about how one of the biggest problems in commercial and enterprise software has now been solved and how you can benefit from this achievement.

All Your Ducks In A Row: Data Structures in the Standard Library and Beyond

2014 April 11
PyCon North America • Montréal

Why are Python programmers crazy about lists and dictionaries, when other languages tout bitmaps, linked lists, and B+ trees? Are we missing out? Come learn how data structures are implemented on bare metal, how to select the right data structure, how the list and dictionary cover a wide swath of use cases, and when to dip into the Standard Library for an alternative.

Keynote: Moving Targets

2014 February 8
Django Weekend • Cardiff

For programmers, perhaps the most annoying thing about our prejudices is the rate at which they go out of date. Your reasons for choosing your operating system, editor, version-control system, and web framework were — of course — perfect and provable at the time that you made your choice, and anyone who disagreed with you was an obvious nitwit. But what happens when the competing editor suddenly improves? When that blocker in the rival database is removed? The choice between Python web frameworks is the same way. We will look at how Django has recently been improving by leaps and bounds, invalidating old prejudices against it with every recent release.

Skyfield and 15 Years of Bad APIs

2013 August 10
PyCon Canada • Toronto

I released the first version of PyEphem in 1998. Built with SWIG, it made astronomical calculations in Python only slightly more convenient than writing them directly in C. A rewrite five years later improved the interface, but a decade of fielding user questions has convinced me to re-think how an API should help programmers cope with an unfamiliar and complex domain like astronomy. This talk will explore how API design, NumPy integration, and modern high-performance Python computation combine in Skyfield, the new pure-Python astronomy library that I will release during the PyCon Canada sprints!

Keynote: Sine Qua Nons

2013 July 27
PyOhio • Columbus

What are the key features of a modern dynamic language like Python that let a programmer make progress even against difficult problems, even on days when things are not going well? Starting simple and then ramping up to complex, Brandon takes us from how beginners can use a Python dictionary to pair up matching data, to how to use ctypes to work around limitations in the built-in Python SSL module, as he takes us through the tools and approaches that for a Python programmer are all part of a day's work — the features without which we would not be as productive.

Keynote: Copernican Refactoring

2013 May 15
DjangoCon Europe • Warsaw
YouTubePyVideoslideslive blog by Reinout van Rees

Warsaw was the perfect venue for reflecting on how Mikołaj Kopernik — the Polish astronomer who published in Latin as “Copernicus” — faced the perennial problem of refactoring, when he saw redundant code repeated all through Ptolemy's model of the solar system.

The Naming of Ducks: Where Dynamic Types Meet Smart Conventions

2013 March 15
PyCon • Santa Clara
YouTube #2 (from encore at RuPy ’13 in Budapest, Hungary)

Continuing where my PyCon Canada talk left off, I explore several common practices for choosing names wisely when writing Python code — and suggest that apt names are the lifeline that keep programmers afloat in dynamic languages.

Touring the Universe with Scientific Python

2013 January 11
CodeMash • Sandusky, Ohio
IPython notebooksslides

To introduce the wonderful conveniences of scientific Python to the crowd at CodeMash, where the majority platforms are Ruby, .NET, and Java, I showed how the IPython Notebook can be combined with basic astronomy libraries to create tools with which to explore the Solar System.

A Python Æsthetic: Beauty and Why I Python

2012 November 10
PyCon Canada • Toronto

This was my very first experience with being an invited speaker, where I could choose any topic I wanted instead of having to submit a competitive proposal. I wanted to use this opportunity by filling the talk with the kind of miscellaneous, practical coding advice that so rarely fits the agenda of a more serious proposal. Instead, one single topic wound up filling the whole time slot: how we format and indent Python code as a personal and intentional act of graphic design.

Python Design Patterns 1

2012 July 29
PyOhio • Columbus

Update: In response to this old talk’s popularity, I have started a site where I accumulate essays on different design patterns in Python — enjoy!


I had recently seen a talk that dismissed the idea that Python programming involves design patterns, and I realized that I disagreed: there are all kinds of patterns emerging in the Python community, as well as widespread use of many of the classic patterns. As a first step towards the topic (hence the “1” in the talk title — it is, hopefully, the first of several talks on the subject), I look at the continuing popularity of many of the classic Gang of Four patterns even in modern Python programming.

Flexing SQLAlchemy's Relational Power

2012 March 12
PyCon • Santa Clara

Too often, programmers use ORMs to hide from their database and avoid learning how it works. Instead, I encourage programmers to learn a bit of SQL and become familiar with the problems that database queries are designed to solve well. In this talk, I outline the basics of using SQLAlchemy to craft efficient queries and avoid several common database query anti-patterns.

Python, Linkers, and Virtual Memory

2012 March 11
PyCon • Santa Clara

Another whirlwind technical introduction in the style of my previous talk on Python dictionaries. This time, I tackle how modern operating systems allocate and manage memory by using a simple example memory image that intends to capture all of the essential moving parts while being as simple in its details as possible.

Know Thy Database

2011 September 24
PyCon Poland • Mąchocice, Poland

Fred Brooks said famously that our data structures are the most important thing about our computer programs, yet a generation of programmers is trying to use ORMs to avoid learning how SQL really structures their data. This talk is a basic plea for programmers to jump in and really understand their data store, whether it is a relational database, a key-value store, or something else.

Procedures, Objects, Reusability: httplib, urllib2, and Their Discontents

2011 July 31
PyOhio • Columbus

Object-orientation is a troubled programming approach that, because of its popularity in the 1990s, wound up afflicting great swaths of the Python Standard Library. By looking at specific examples in several popular web-related modules, we will see the problems that are created when an API author tries to invite you inside of their classes to become a co-developer with them.

Names, Objects, and Plummeting From The Cliff

2011 July 31
PyOhio • Columbus

For the educators among us, I suggest a visceral metaphor by which newer programmers might be able to understand and predict the moment at which an object or data structure will be freed from Python's memory.

Squinting at Python Objects

2011 July 30
PyOhio • Columbus

Objects in a dynamic language can be slippery: merely accessing an attribute can make it appear, disappear, or even change value, at the whim of whatever overly clever programmer designed the object you are accessing. This talk looks at strategies and technologies for getting behind shifting dynamic behaviors to see the properties of an object without the risk of affecting its state.

Learning Hosting Best Practices From WebFaction

2010 February 19
PyCon • Atlanta

An account on a shared Unix machine is usually a dicey platform on which to deploy a Python web app, but Webfaction uses interesting approaches to keep users fairly well sandboxed. So I gave a PyCon talk on their techniques, which could be applied on one's own systems to help keep apps separate. Of course, boxes have become cheap enough in the intervening few years that most people now spin up a separate machine per web application without even having to think about it!

The Mighty Dictionary

2010 February 19
PyCon • Atlanta

For most Python programmers, the behaviors of the dictionary data type are simply memorized: instant access by key, keys must be immutable, and order is arbitrary and shifting. But what technology is behind these bizarre features? This talk goes behind the scenes with bright, colorful, simple diagrams to show exactly how Python's most popular data structure works.

Using Grok to Walk Like a Duck

2008 March 15
PyCon • Chicago

Web development often involves bringing together many different components to build a single site. Authentication, social networking, media management, and content management are examples of the kind of features that are often powered by third-party modules or extensions. This talk introduces Zope's adapter registry and how a declarative web framework like Grok lets you use the “Adapter” gang-of-four design pattern to link components together into a cleanly functioning site. To extract and run the example in messagetree.tar.gz, type:

tar xzf messagetree.tar.gz
cd messagetree