Archive

Bisherige Präsentationen und Themen.

12. Oktober 2021, 19:00 Uhr

Neue Features in Python 3.10

Python 3.10 ist da. Seit Anfang Oktober ist die neue Version offiziell raus. Wir haben uns angeschaut was diese Version bringt. Neben dem "Mega-Feature" Structural Pattern Matching gibt es noch einige interessante Neuerungen wie verbesserte Fehlermeldungen, mehrere Kontext-Manager in Klammern oder zip, das optional nur gleichlange Sequenzen verarbeitet.

Wir sind durch die neun Features What’s New In Python 3.10 gegangen. Einige davon haben wir gemeinsam ausprobiert.

10. August 2021, 19:00 Uhr

Diskussionsrunde

Wir haben über verschiedene Themen diskutiert.

13. Juli 2021, 19:00 Uhr

Aufgaben abarbeiten lassen

Dienste, Busse, Warteschlangen und andere Helfer

Unser Anwendungsfall:

Messdaten kommen kontinuierlich von einem Messgerät. Diese soll ein Dienst verarbeiten und das Ergebnis an den nächsten Dienst weitergeben, der wiederum mit den Daten arbeitet und das Ergebnis entsprechend weiterreicht. Im letzten Schritt zeigt ein Dienst das Ergebnis grafisch an. Die Dienste können lokal oder im Netz laufen.

Wir wollen diskutieren welche Möglichkeit der Umsetzung es in Python gibt. Was sind die Vor- und Nachteile diese für verschiedene Aufgaben-Größen? Wie komplex sind diese Lösungen?

Bibliothek, die hier helfen könnten wären zum Beispiel python-task-queue oder Azure Service Bus-Warteschlangen.

8. Juni 2021, 19:00 Uhr

Freie Diskussionsrunde

Wir uns über die letzten Entwicklungen im Python-Ökosystem ausgetauscht. Es gab eine lebhafte Diskussion.

11. Mai 2021, 19:00 Uhr

Python-Pakete installieren

Eine Diskussionsrunde

Es gibt viele sehr nützliche Bibliotheken für Python. Man muss diese aber auch installieren können. Oft geht das problemlos mit pip. Manchmal gibt es aber Probleme. Wir wollen uns austauschen wie man solche Probleme möglichst vermeiden oder verhindern kann. Welche Techniken, Bibliotheken und Vorgehensweisen gibt es dafür? Was nutzt ihr? Welche Erfahrungen habt ihr mit verschiedenen Methoden gemacht?

13. April 2021

Meet Mob - Erste Erfahrungen mit dem Programmieren in der Gruppe

Oliver Bestwalter

Seit Anfang des Jahres nehme ich in einer Gruppe Teil, die sich einmal in der Woche remote trifft, um gemeinsam ein OSS Projekt zu pflegen. Die Technik nennt sich "remote mob programming" oder "remote ensemble programming". Ich möchte ein wenig von der Methode und meinen Erfahrungen erzählen.

9. März 2021

Structural Pattern Matching in Python

Eine Diskussionsrunde

Python bekommt "Structural Pattern Matching". Dies ist eine relativ große Neuerung. Es gibt teilweise hitzige Diskussionen darüber ob dies eine tolle Erweiterung der Sprache ist oder ob damit die Sprache zu komplex wird und sich zu sehr an die "C++-Philosophie" je mehr Features, desto besser annähert.

Es gibt drei PEPs zu diesem Thema:

Wir haben uns die wichtigsten Elemente davon ansehen und dazu diskutiert. Dabei versuchten wir Antworten auf Fragen wie diesen zu finden:

9. Februar 2021

pip, conda, mamba - Python-Pakete installieren und virtuelle Umgebungen anlegen

Eine Diskussionsrunde

12. Januar 2021

Große Datenmengen in Videos animieren mit "bewegung"

Sebastian M. Ernst

bewegung is a versatile video renderer, primarily targeting scientific visualizations of large quantities of data. Its core concepts are sequences and layers. Sequences describe a certain time span within a video and can overlap. Each sequence can hold multiple layers. Layers can be generated with cairo, Pillow, datashader, matplotlib and bewegung's internal drawing system DrawingBoard. Final compositing of every video frame and video effects are implemented via Pillow. Video encoding is handled by ffmpeg. bewegung also includes a simple vector algebra system and a "camera" for 3D to 2D projections. bewegung is developed with ease of use, compute time and memory efficiency in mind.

8. Dezember 2020

Web APIs mit Django und GraphQL

Andreas Bamberger

Vortragsinhalt:

Präsentation und Code: https://gitlab.com/a_ba/lpug-django-graphene

10.11.2020

Diskussionsrunde - "Was mich an besonders Python stört, was mir an Python besonders gefällt."

Wir haben uns online getroffen und intensiv diskutiert. Dabei kamen Merkmale von Python, die wir besonders mögen oder die uns besonders stören zur Sprache. Es gab verschiedene Meinungen zu ein paar Themen, so dass man viel lernen konnte.

13.10.2020

Einfache Web-Anwendungen mit Flask

Lukas Werner

Die kleine Einführung in das Web Framework Flask ging auf folgende Punkte ein:

Da jeder der Punkte eine eigene Vorstellung ausfüllen könnte, hat der Vortrag die meisten Punkte nur kurz umrissen. Einen großen Teil der Vortragszeit hat die Diskussion zum Thema eingenommen.

08.09.2020

Was ist neu in Python 3.9

Die neue Python-Version wird bald verfügbar sein. Deshalb haben wir uns angesehen was Python 3.9 an neuen Merkmalen bietet.

Es gab wieder viele interessante Diskussionen zu verschiedensten Themen um Python und Softwareentwicklung. Wir hatten viele Erst-Teilnehmer, die sich rege an der Diskussion beteiligten.

11.08.2020

Die Programmiersprache Nim aus Python-Sicht - Ein Erfahrungsbericht

Stefan Schwarzer

Als langjähriger Python-Entwickler bin ich auf der Suche nach einer flexiblen statisch typisierten Programmiersprache vor einem Jahr auf Nim ( https://nim-lang.org ) gekommen.

Ich möchte euch etwas über die Sprache erzählen, unter anderem über besondere Unterschiede zu Python und wie man beide Sprachen kombinieren kann. Ich habe darüber hinaus einiges an Material, aber wir müssen nicht alles strikt durchgehen, denn ein User-Group-Treffen lebt ja auch von der Diskussion. :-)

14.07.2020

Hardware mit Python ansteuern

Andre Bunk

Andre stellte sein Projekt vor. Das sind die wichtigsten Punkte:

  1. Pumpensteuerung für den Garten
  2. Temperaturmessung mit TC74
  3. Speichern dieser Messdaten mit SQLite
  4. Auswertung von Textdateien des Mediathekview mit Python
  5. Auswertung der gemessenen Temperaturwerte
  6. Benutzung-Schnittstelle mit tkinter geplant

Die Quelltexte stehen zur Verfügung:

FTP: odroid.home-webserver.de
Nutzer: gast
Passwort: gastgast1

12.05.2020

Online-Treffen

Programming Guidelines

Thomas Güttler

Mit 13 Jahren habe ich das Programmieren angefangen und bin nun 43.

Seit dem habe ich sehr viele Fehler gemacht und habe daraus mehr oder weniger viel gelernt.

Seit einer Weile schreibe ich meine persönlichen Programming Guidelines auf. Zum einen um mehr Klarheit über mein eigenes Handeln zu finden. Zum anderen , um dem einen oder anderen Neueinsteiger ein paar Irrwege zu ersparen.

Der Text ist auf englisch und hier zu finden:

https://github.com/guettli/programming-guidelines

14.01.2020

Python-Konferenzen 2020

Mittlerweile gibt es im Prinzip jede Woche ein oder mehrere Python-Konferenzen irgendwo auf der Welt. Welche Python-Konferenzen sind besonders interessant? Wie läuft eine solche Konferenz ab? Lohnt es sich teilzunehmen? Wenn, ja warum? Mike Müller gab persönliche Eindrücke von ein paar Python-Konferenzen der letzten Jahre und versuchte damit diese Fragen zu beantworten. Das ist natürlich subjektiv und auf wenige Konferenz beschränkt. Trotzdem könnte es bei der Entscheidung helfen eine Python-Konferenzen zu besuchen und dann die richtige auszusuchen.

13.08.2019

Fortran-Bibliotheken in Python nutzen

Mike Müller

Viele wissenschaftliche Anwendungen sind in Fortran implementiert. Es ist wahrscheinlich die älteste Hochsprache, die noch relativ weit verbreitet ist. Für numerische Anwendungen kann Fortran-Code durchaus beträchtlich schnellere Programme ergeben als Code in C oder ähnlichen Sprachen. Für andere Programmieraufgaben als numerische Algorithmen ist Fortran allerdings nicht so gut geeignet. Hier kommen die Fähigkeiten von Python ins Spiel Quelltext anderer Programmiersprachen relativ einfach als sogenannten Erweiterungen in Python integrieren zu können.

Dieser Vortrag stellt das Werkzeug f2py vor. Damit lassen sich Fortran-Quelltext elegant in Python-Erweiterungen einbauen. Der Zugriff auf Fortran-Arrays, die in Fortran-Modulen liegen ist mit NumPy-Arrays von Python aus nahtlos möglich. Oft sind Fortran-Quelltexte sehr monolithisch mit einer großen Schleifen für Simulations-Zeitschritte aufgebaut. Der Vortrag zeigt wie sich mit Hilfe von Callbacks und Threads Erweiterungen bauen lassen, die die Eingriffe in diese monolithische Struktur auf ein Minimum beschränken. Eine Demo zeigt wie sich in einem Jupyter-Notebook Fortran-Variablen live von Python aus anzeigen und verändern lassen.

Keine Angst: Fortran-Wissen ist nicht nötig, um dem Vortrag folgen zu können. Solide Python-Kenntnisse sind ausreichend. Sogar ohne Python-Wissen sollten die Grundprinzipien zu verstehen sein.


10.09.2019

Programming Guidelines

Thomas Güttler

Mit 13 Jahren habe ich das Programmieren angefangen und bin nun 43.

Seit dem habe ich sehr viele Fehler gemacht und habe daraus mehr oder weniger viel gelernt.

Seit einer Weile schreibe ich meine persönlichen Programming Guidelines auf. Zum einen um mehr Klarheit über mein eigenes Handeln zu finden. Zum anderen , um dem einen oder anderen Neueinsteiger ein paar Irrwege zu ersparen.

Der Text ist auf englisch und hier zu finden:

https://github.com/guettli/programming-guidelines


Treffen am 11. Oktober 2018 19:00 Uhr

Robert Lieback sprach über "Desktop-Anwendungen mit PyQt5 und PyInstaller"

Best-Practices für die Desktopentwicklung: Vom Qt-Designer, über das Event-Management, zur Distribution mit PyInstaller.


Treffen am 08. Mai 2018 19:00 Uhr

Sebastian Ernst über das Thema Zahlen stapeln mit HDF5 (h5py), Bcolz & Zarr gesprochen.


Treffen am 08. Mai 2018 19:00 Uhr

Markus Zapke-Gründemann sprach über "Can packaging improve Django deployments?"

How can packaging Django projects make deployments easier, faster and more reliable?

This is a preview of Markus' talk at DjangoCon Europe 2018 in Heidelberg. The talk will be held in English.

Es waren 13 Personen anwesend. Nach dem Vortrag gab es eine lebhafte Diskussion zum Thema Deployment von Django Projekten. Außerdem wurde das Thema Packaging weiter vertieft.


Treffen am 10. April 2018 19:00 Uhr

Andreas Linz sprach über "Think DSP - Digital Signal Processing in Python".

Der Vortrag war eine Zusammenfassung des Open-Source Buches ThinkDSP von Allen Downey und gleichzeitig eine Einführung in die Grundlagen der (Audio-)Signalverarbeitung.

Zu dem Buch gibt es eine Reihe von Jupyter Notebooks, die die vorgestellten Konzepte veranschaulichen.

Mit 17 Anwesenden war der Vortrag sehr gut besucht.


Treffen am 13. Februar 2018 19:00 Uhr

Unser Vortrag war diesmal:

Martin Czygan

Deep Learning with PyTorch

PyTorch is a machine learning framework, with focus on deep neural nets. PyTorch is sometimes regarded as the most pythonic among the current generation of such tools.

We briefly introduce the problems deep learning tries to solve; then we take a look at PyTorch and it's pythonic approach.

Repository with slides and notebooks:


Gemütliches Weihnachtstreffen am 12.12.2017 19:00 Uhr

Das letzte LPUG-Treffen im Jahr 2017 haben wir im Rahmen der Weihnachtszeit in gemütlicher Runde zum freien Plausch genutzt. Weiterhin haben über mögliche Inhalte im nächsten Jahr und die zukünftige Gestaltung der LPUG gesprochen.

Struktur der LPUG in 2018

grobe Jahresplanung

Unser Ziel ist es, zwei symmetrische Halbjahre aufzubauen. Über das Jahr verteilt könnten dann u.a. folgende Themenblöcke als Inhalt fungieren:

Planungsstufen

Um die Mitarbeit zu motivieren und besser planbar zu gestalten, haben wir verschiedene Planungsstufen.

1. konkret (Thema, Person, Datum)

2. in Planung (Thema, Person)

3. interessant (Thema)

Treffen am 12. September 2017 19:00 Uhr

How to Create a Python Package and Write Reusable Code

Philipp Hanemann

Python wird von vielen Nutzern wertgeschätzt, weil sie mit dieser Programmiersprache sehr produktiv sind. Von der Idee bis zur Umsetzung sind oftmals nur wenige, aber dennoch gut lesbare Zeilen Code notwendig. Dies ist vor allem in der Reichhaltigkeit der vorhandenen Bibliotheken begründet. Diese bündeln in der Regel Funktionen und Klassen mit einem bestimmten thematischen Fokus und stellen damit wiederverwertbaren Code dar. Einmal installiert, kann der Nutzer auf die Werkzeuge der Bibliothek bequem zugreifen.

Glücklicherweise ist der Aufwand eine eigene Bibliothek zu bauen unwesentlich höher als einfache Skripte zu schreiben. Nichtsdestotrotz gibt es für ein strukturelles einiges zu beachten.

Der Vortrag zeigt wie robuster und wiederverwertbarer Code entsteht. Die Präsentation stellt ein paar Konzepte vor und bereitet den danach folgenden interaktiven Erfahrungsaustausch vor.

Treffen am 8. August 2017 19:00 Uhr

Wir haben unser erstes Coding Dojo durchgeführt. Ein Dojo besteht aus Programmierübungen, sogenannte Katas, für kleine, in sich abgeschlossene Probleme. Dazu haben wir Paare gebildet. Ein Ziel der Übungen war es Test-Driven-Development (TDD) zu trainieren, also die Tests vor der Implementierung zu schreiben. Ähnlich wie bei Katas im Kampfsport geht es primär darum grundsätzliche Fähigkeiten zu internalisieren.

Unsere Kata

Problem

Wir haben uns die Russische Bauernmultiplikation heraus gesucht:

Schreibe eine Funktion, die zwei ganze Zahlen mit dem Algorithmus „russische Bauernmultiplikation“ multipliziert.

Die Signatur der Methode sieht wie folgt aus:

mul(int: x, int: y) --> int:
    # your code here

Der Algorithmus der sogenannten Russischen Bauernmultiplikation verläuft wie folgt: man halbiert die linke der beiden Zahlen so lange, bis die 1 erreicht ist. Nachkommastellen werden abgerundet. Die rechte Zahl wird jeweils daneben geschrieben und verdoppelt. Von den rechten Zahlen werden alle gestrichen, neben denen links eine gerade Zahl steht. Die verbleibenden nicht gestrichenen Zahlen der rechten Seite werden dann addiert und bilden das Ergebnis der Multiplikation.

Beispiel:

47 *  42
--------
47    42
23    84
11   168
 5   336
 2  (672)  # deleted because 2 ist even)
 1  1344
========
    1974

Das geht natürlich auch einfacher:

>>> 47 *  42
1974

Lösungen

Iterative Lösung

Die Summe ist zu Beginn Null sum_ = 0. Wenn der erste Wert negativ ist, kehren wir einfach die Vorzeichen der beiden Zahlen um. Damit decken wir auch negative Zahlen ab. Solange der erste Wert größer Null ist (while x > 0:), summieren wir auf. Aber nur wenn der erste Wert gerade ist: if x % 2:. Der erste Wert wird mit Integer-Divison halbiert x = x // 2 und der zweite verdoppelt y = y * 2.

def mul(x, y):
    sum_ = 0
    if x < 0:
        x, y = -x,  -y
    while x > 0:
        if x % 2:
            sum_ += y
        x, y = x // 2, y * 2
    return sum_

Lösung mit Generator

Das ist eine Variation der obigen iterativen Lösung. Anstatt der Summierung geht zu addierende Wert mit yield bei jedem Iterationsschritt raus. Das finale sum() konsumiert den Generator, den die Generatorfunktion get() zurück gibt.

def get(x, y):
    if x < 0:
        x, y = -x,  -y
    while x > 0:
        if x % 2:
            yield y
        x, y = x // 2, y * 2

def mul2(x, y):
    return sum(v for v in get(x, y))

Einfache Rekursive Lösung

Rekursiver Ansatz: Das Problem wird beschrieben als eine Kaskade von Referenzen auf "kleinere" Instanzen des selben Problems. Die Kaskade mündet in einen trivialen Sonderfall, für den eine direkte Lösung angegeben wird. Bei rekursiven Lösungen muss darauf geachtet werden, dass die Abfolge von Referenzen stets gegen den trivialen Sonderfall konvergiert.

Die erste Zeile im Rumpf fängt hier den Sonderfall x == 0 ab. Das ist allgemeiner als gefordert. Strikt nach Aufgabenstellung würde schon der Sonderfall x == 1 genügen; dann würden wir y statt 0 zurückgeben. Das würde i.A. genau so gut funktionieren, aber das Programm würde dann bei der Multiplikation mit einer linksseiten 0 nicht terminieren.

Die zweite Zeile im Rumpf übersetzt Aufrufe mit einem negativen Argument für x in arithmetisch gleichwertige Aufrufe mit positivem x (siehe dritte Zeile). Auch das ist allgemeiner als gefordert. Ohne diese Zeile terminiert das Programm nur für nicht-negative x.

Die dritte Zeile im Rumpf realisiert die eigentlichen Zwischenschritte der Bauernmultiplikation. Der rekursive Aufruf entspricht dabei dem Aufaddieren der darüberliegenden Summanden in der Tabelle. Der aktuelle Summand bleibt unberücksichtigt wenn x gerade ist (x % 2 == 0).

Konvergenz ist dadurch garantiert, dass die dritte Zeile im Rumpf mul stets mit einem betraglich kleineren x aufruft, so dass der Sonderfall x == 0 früher oder später erreicht wird.

def mul(x, y):
    if x == 0:
        return 0
    if x < 0:
        return mul(-x, -y)
    return (0 if x % 2 == 0 else y) + mul( x//2, y*2 )

13. Juni 2017 um 19:00 Uhr

Wir hatten einen interessanten Vortrag:

Cython

Stefan Behnel

Cython ist ein optimierender statischer Complier für Python, der das Erstellen von C-Erweiterungen für Python erleichtert. Als Quelle kann (1) reines Python, (2) Python mit Typ-Deklarationen (Cython-spezifisch) oder (3) C-Quelltext dienen.

Der Cython-Kern-Entwickler Stefan Behnel stellte Cython vor. Er zeigte an praktischen Beispielen wie leicht es ist mit Cython zu arbeiten. Er beantwortete tiefgehende Fragen zu Anwendung und Funktionsweise von Cython.

11. April 2017 um 19:00 Uhr

Diesmal hatten wir wieder eine freie Diskussion zu Pythonthemen.

14. März 2017 um 19:00 Uhr

Wir hatten einen Vortrag:

Mike Müller

Statische Typisierung für Python

Python ist eine dynamisch getypte Sprache. Das wird auch in Zukunft so bleiben. Mit mypy und dem Modul typing der Standardbibliothek ist es aber auch möglich statische Typen als Hinweise hinzuzufügen.

Diese statischen Typen wertet Python zur Laufzeit nicht aus. mypy arbeitet als Werkzeug mit dem Quelltext und überprüft die Richtigkeit der Typen ähnlich wie ein Compiler bei statisch getypten Sprachen. Der Vortrag stellte das generelle Vorgehen für die Nutzung der optionalen statischen Typisierung mit mypy und die Neuerungen, die Python 3.6 hier mitbringt vor.

14. Februar 2017 um 19:00 Uhr

Diesmal hatten wir eine freie Diskussion zu Pythonthemen. Wir haben uns geschaut welche neuen Bibliotheken in der letzten Zeit erschien sind.

10. Januar 2017 um 19:00 Uhr

Unser Thema war diesmal die nebenläufige und parallele Programmierung. Dabei haben wir uns vor allem mit den Unterschieden in den Anwendungsfällen und der Programmierung mit multiprocessing und asyncio beschäftigt.

Dazu haben wir mit Code-Beispielen gearbeitet, die zeigen, wie sich mit diesen Methoden Rechenzeit einsparen lassen kann oder eben nicht.

13. Dezember 2016 um 19:00 Uhr

Diesmal hatten ein vorweihnachtliches Treffen mit offenem Thema. Wir diskutierten über die letzten Entwicklungen bei Python. Dabei gab es immer neue Python-Bibliotheken zu entdecken.

8. November 2016 um 19:00 Uhr

Zum Treffen gab es einen Einführungsvortrag zu neuronalen Netzen. Theoretische Hintergründe wurde skiziert und eine Reihe von Implementierungen in Python vorgestellt: Basierend auf numpy, scikit-learn, tensorflow und keras. Die Folien und Code sind in diesem Repo zu finden. Die Präsentation mündete in eine Diskussion zu intelligenten Algorithmen im Allgemeinen und auch ihre gesellschaftlichen Auswirkungen.

09. August 2016

Rust for Pythonistas

The slides are available at github and slideshare.