Agenda: Python Advanced (2023-04-24 - 2023-04-26)#

Up Front: Project Management#

Day 1: Python Inside Out#

Exercise Prerequisites#

References And Other Pitfalls#

Looping Constructs (With An Emphasis On The else Clause)#

Generators#

From Iteration, Generators, And yield)

Closures, Decorators And More#

Dynamic Features#

Object Oriented Programming#

From Object Oriented Programming

Error Handling And Recovery#

Miscellaneous Threading#

  • Show how the load/modify/store conflict appears to not be an issue in Python (?) (code/race-load-modify-store.py)

    • Could that be the GIL

    • What’s the GIL altogether?

    • Why could it be a bad idea to trust the GIL too much? (⟶ PEP 703)

    • Jason Brownlee mentions the same “issue” – there is no race condition. There used to, he says, before Python 3.10, but nowadays there’s not. He shows an contrived way to show a race (involving a time.sleep(0) 🙄)

    • Fix that with a mutex (show with usage!)

    • Events. Maybe some live-hacked dice-rolling in a subthread.

    • queue — A synchronized queue class

  • Multiprocessing

    Simply walk through the introductory example in multiprocessing — Process-based parallelism

Day 2: Clean Code (In A Broader Sense), Group Project Kickoff#

Group Project: Discussion#

  • Data acquisition: gathering sensor data

  • Varying kinds of sensors: physical hardware, internet proxy, MQTT, …

  • Varying kinds of information sinks: CSV, database, MQTT, …

  • Acquisition machinery: timestamping, frequency, buffering, …

Clean Code?#

From Is Software A Craft? Software Is A Craft! ⟶ Clean Code

Design Patterns Overview#

Test Driven Development#

Day 3: Group Project#

  • Create two or three teams

  • Use Test Driven Develpment (TDD) to formulate requirements

  • Loop: hack, fix, refactor