Python Advanced (7.9.2020 - 10.9.2020)

This is a training for a team which is already experienced in Python programming. There were some special requirements for the training, such as to loose a couple of words about AI/machinelearning and other topics, as well as a fuzzy “bring us advanced stuff”.

The training was accompanied by a lot of improvised live hacking.

Preparation

Workspace Setup

Github for Exercises

Please create Github accounts and send them to training@faschingbauer.co.at. We will do exercises via a private repository on Github.

Agenda

Advanced Core Python Topics

Python is easy; one can solve nontrivial problems in only a few lines of code, in no time. This does not mean that you have to fully understand the language - which is good because this is what makes the language easy.

On the other hand, there’s always a line to cross where you wish you knew more. Here the more advanced core Python topics that shall be covered.

Special Topics

Log

Following is a recap of what has happened. File names are relative to the root of the Github repository we were working from.

Day 1

Rushed through basics,

Put a strong focus on Python features,

Day 2

  • Livehacking: Iteration, Comprehensions, and Generators, covering

    • List comprehensions

    • The range function

    • Writing generators using yield

    • Generator expressions

  • Livehacking OO

  • Livehacking design patterns

    • joerg-livehacking/composite.py. Using the thermometer hierarchy, a “composite” thermometer was created. That thermometer uses (has) a set of concrete thermometers to calculate the average room temperature.

    • joerg-livehacking/adapter.py. Fictional scenario …

      • The Unser thermometer framework contains a number of thermometer implementations which all support the get_temperature_celsius() method.

      • A collaboration with a competitor is launched. That competitor has a similar set of thermometer implementations. The difference between Eana and Unser is that Eana thermometers do not support get_temperature_celsius(), but rather only get_temperature_fahrenheit().

      • We employ the adapter pattern and create one special thermometer in the Unser hierarchy

        class EanaAdapter(UnserThermometer):
            ...
        

Day 3

  • Revisit abstract base classes

  • Visitor pattern. Not every pattern in the “Gang of Four” book should be considered a real pattern. For example, the Visitor pattern turn into an idiom for languages that don’t support generators.

    • joerg-livehacking/visitor.py. Classic OO implementation of the visitor pattern as a DFS traversal. Together with callbacks and all convolutions. Took sideways like,

      • show how __call__ makes a class callable.

      • show how __str__ and __repr__ work together in print()

    • joerg-livehacking/visitor-generator.py. “I don’t want to implement a visitor!”, poor user says. “I only want to iterate over the tree in DFS order!”

      Implement DFS iteration using yield from which delegates iteration into recursion.

  • TDD and Unit Testing theory; using excerpts from the Design Patterns deck of slides. Explain terminology; fixtures and such.

  • Start hacking on project. Agreed upon myself doing live hacking. Doing TDD.

    • Project/sensor/sensordata.py, and Project/tests/sensordata_tests.py. Prepare TDD; explain suites, cases, fixture, assertions.

    • While writing data classes (holding only attributes and no functionality), explain namedtuple. Use that to implement sensor.sensordata.HistoryData.

    • Slowly fix things, in a test driven way. Discuss, team giving input, all really fine.

Day 4

After Work Party

From my point of view, the training went really fine. Not everyone is equally satisfied with the outcome (we didn’t get to the AI topics, for example), but I have the impression that I brought it over.

As a gift to myself, I had reserved Thursday night at Gmundner Hütte. After the training I went back to Hoisn Wirt (which is where I stayed during the training - really fine), changed clothes, and started to climb the Traunstein via Zierlersteig.

See here for the description and pictures from this extraordinary hike.