#35 Entwicklertools erstellen

avatar
Florian Wetschoreck
avatar
Nico Kreiling

Techtiefen 35 wird etwas Meta und behandelt keine Technologie direkt, sondern tehmatisiert mit Florian Wetschoreck was es bedeutet ein Arbeitstool für andere Entwickler zu entwickeln. Florian ist Mitgründer von 8080Labs, die nicht nur an der Pandas-GUI bamboolib arbeiten, sondern auch Pakete wie pyforest und den ppscore veröffentlicht haben.

Florian erzhält zu Beginn, wie es zur Idee kam, eine einfachere, interaktive Bedienoberfläche für das Datentransformationstool Pandas zu entwicklen und wie er seine Masterarbeit nutzte, um die Idee zu verwirklichen. Dabei setzte er stark auf die Contextual Inquiry, eine Methodik bei der er den Nutzer zunächst über einen längeren Zeitraum passiv bei seiner Arbeit beobachtet und ihn erst im Anschluss dazu befragt, warum er Aktionen wie durchgeführt hat. Bei diesen Beobachtungen entstand auch die einfache Erkentniss, dass fehlende import Statements immer wieder ein Grund für einfache Fehler sind, welche zwar schnell gelöst werden können aber den Workflow unterbrechen. So kam es etwa zu pyforest, einer kleinen Bibliothek das fehlende Tools unter den gängigen Namenskonventionen import, sollten sie genutzt aber nicht importiert worden sein.

Neben Fragen zur Produktentwicklung geht es auch um Themen wie Monetarisierung und die Erkentniss, dass in der Regel nicht Entwickler selbst sondern ihre Unternehmen für ihre Tools zahlen, was dazu führt, das Bambolib 1.0 in der Basisversion frei verfügbar ist und nur für spezielle Features wie etwas Plugins die typischerweise im Unternehmen eingesetzt werden eine Lizenz notwndig ist.

Auch wenn der Podcast ein grobes Verständnis für datenzentrierte Arbeiten und Jupyter Notebooks vorraussetzt (hört in Folge 34 rein, wenn euch das noch nichts sagt), ist er vermutlich etwas weniger technisch und einacher zu konsumieren als andere Folgen. Ansonsten sei euch noch Florians Artikel „RIP correlation. Introducing the Predictive Power Score“ empfohlen, viel Spaß beim hören, lesen und ausprobieren.

#34 Jupyter Notebooks

avatar
Hans Fangohr
avatar
Harald Schilly
avatar
Nico Kreiling

Notebooks sind im Data Science Umfeld allgegenwärtig, in anderen Bereichen der Informatik aber vielleicht noch weitgehend unbekannt. Deshalb erklärt Nico mit seinen Gästen Hans Fangohr und Harald Schilly sowohl was Notebooks überhaupt sind und wie sich das Arbeiten damit anfühlt, geben aber auch zahlreiche Tipps und Empfehlungen für erfahrene Nutzer.

Notebooks können in vielen Szenarien eingesetzt werden. Durch die Kombination von Dokumentation und ausführbarem Code eignen sie sich natürlich hervorragend für Schulungen, aber auch für die Dokumentation von Projekten und explorative und forschungslastigen Arbeiten. Zwar existieren zahlreiche Implementierungen von Notebooks (etwa Googles Colab oder Apache Zeppelin), das Jupyter-Ökosystem bestehend aus den klassischen Notebooks, dem Lab sowie dem Hub. Sie eint die gemeinsame Entstehungsgeschichte basierend auf der IPython-Konsole sowie das gemeinsame, JSON-basierte Dateiformat iypnb.

Dieses Dateiformat ermöglicht einen flüssigen Übergang zwischen verschiedenen Notebook-Implementierungen, die Ausführlichkeit sowie die Klammer-Struktur erschwert aber Versionskontrolle und macht Merge-Requests unübersichtlich. Wir unterhalten uns ausführlich über verschiedene Ansätze, etwa zu alternativen Formaten wie RMarkdown und dem percent-format und deren Synchroni JupyText.

Kommentare

Wenn ihr nicht im Data Science / Python Umfeld unterwegs seid: Kanntet ihr Jupyter Notebooks bereits? Wenn ja, wofür habt ihr sie eingesetzt: Hinterlasst mir einen Kommentar

Links

Jupyter

https://jupyter.org/: Übersichtsseite Projekt Jupyter

JupyterHub: Server für Notebooks mit Benutzerverwaltung

JupyterLab: moderne Implementation, multiple Dokumente, etc.

NBConvert: konvertierung nach plain Text, Python, LaTeX/PDF, HTML

Alternative Jupyter

Colab: Notebooks von Google

Zeppelin: Apache Alternativ Projekt

CoCalc: Echtzeit Synchronisation von Notebooks, uvm

Deepnote: Notebooks für Data Science, etc.

Nteract: Desktop App

Notebooks in einer IDE: PyCharm, VSCode etc.

Magics

Einige unserer Lieblings-Magic-Befehle (hier ist eine ausführlichere Liste)

# Load an external Plugin
%load_ext autoreload

# Automatically re-import libraries
%autoreload

# Messen der Ausführungszeit einerZelle
%timeit

# Ausführen eines notebooks im Namensraum des aktiven Notebooks
%run my_helper.ipynb 

# Den Inhalt der Zelle in eine Datei Schreiben
%%writefile <filename>

Weitere Plugins und Links

Sublime Features – ohne die Nico nicht leben kann.

Nico’s Opinionated Guide für Notebook Versionierung

IPython Widgets: Haralds Empfehlung für Interaktivität in Notebooks

JupyText: synchronisation von/nach anderen Text Formaten

NBGrader: Kursverwaltung und automatisiertes Beurteilen von Notebooks von Studierenden mittels eingebetteter Tests

Jupyter{Book} HTML/PDF Publikationen basierend auf Notebooks

Beispiel für Einfuehrung in Python (mit Jupyterbook)

NBVAL zur Validierung von Notebooks (erstellt von Hans)

MyBinder: Ad-hoc ausführen von Jupyter Notebook instanzen, keine Persistenz

Jupyter Book – Zur Erstellung von Büchern in building beautiful, publication-quality books

Nbgrader: automatisches Benoten von Notebooks im Unterricht

OSCOVIDA Projekt: Ein Projekt zur Visualisierung von Covid Daten mittels Jupyter

#33 Postgres als DWH

avatar
Hans-Jürgen Schönig
avatar
Thomas Richter
avatar
Nico Kreiling

PostgreSQL (Postgres) gilt als die fortschrittlichste und mächtigste Open Source Datenbank. Dank breiter Unterstützung des SQL-Standards, langjähriger Stabilität und einer großen Community ist sie heute häufig die erste Wahl zur Speicherung tabellarischer Daten.

Hans-Jürgen Schönig arbeitet seit über 20 Jahren als Postgres Consultant und beschreibt im Podcast, wo die Stärken der relationalen Datenbank liegen und wie Transaktionssicherheit für DDLs das Handling großer Systeme erleichtert. Zudem erklärt er, wieso man Performance-Bottlenecks nicht in Load-Graphen sondern in den Abfragen selbst suchen soll und gibt Tipps um die Ausführungszeiten jener zu reduzieren.

Anders als analytische Datenbanken oder etwa Apache Parquet (Folge 31) ist Postgres zeilenorientiert. Dank der Erweiterung Postgres in vielerlei Hinsicht zu erweitern, bietet sich dennoch die Möglichkeit Postgres auch für analytische Workloads wie etwa im DWH-Umfeld einzusetzen. Thomas Richter hat hierfür (Swarm64) gegründet, ein Startup das Postgres um einen Columnstore Index erweitert und mit zusätzlichen Statistiken und Operatoren die Planung und Ausführungszeit von Abfragen reduziert. Thomas gibt im Podcast hierfür Einblicke wie Postgres Abfragen parallel ausführt ohne Konsistenz-Garantien zu verletzen.

Abschließend vergleichen wir gemeinsam die Performance von Postgres mit kommerziellen Konkurrenzprodukten und open source Alternativen wie Greenplum.

Links:

#32 AutoML

avatar
Marius Lindauer
avatar
Nico Kreiling

Marius Lindauer ist Professor an der Universität Hannover und einer der Köpfe hinter AutoML.org, einer der renommiertesten Forschungsgruppen auf dem Gebiet, die unter anderem Auto-sklearn, Auto-PyTorch und SMAC  entwickelt hat. Er erläutert uns, wie AutoML unterfahrenen Nutzern das Training von state-of-the-art Machine Learning Modellen ermöglicht und Data Scientist als mächtiges Werkzeug dienen kann.

Zunächst besprechen wir am Beispiel des Hyperparameter Tunings welche Verfahren existieren, um automatisch die richtigen Modellkonfiguration aus dem hochdimensionalen Parameterraum auszuwählen. Die statischen Grid- und Random Search Verfahren sind zwar gut parallelisierbar, jedoch sind evolutionäre und bayesian Verfahren durch die Nutzung eines intelligenten Meta-Learners wesentlich effizienter.

AutoML bedeutet jedoch nicht nur die Optimierung von Hyperparametern, sondern die integrierte Optimierung der gesamten Machine-Learning Pipeline, vom Feature-Preprocessing, über das Modelltraining bis hin zum effizienten Tuning und Stacking. Wir besprechen, wie AutoML von den ersten Ansätzen im Bereich Neuroevolution sich weiterentwickelt hat und mit Google AutoML seinen „ImageNet Moment“ erlebt hat. Wir besprechen zudem die aktuell gängigsten Frameworks: Auto-sklearn, Auto-PyTorch, AutoKeras, AutoGluon, TeaPot und AutoWeka.

Links:

#31 Effiziente Datenverarbeitung

avatar
Uwe Korn
avatar
Nico Kreiling

Uwe Korn ist Data Engineer und engagiert sich seit mehreren Jahren in verschiedenen Open Source Projekten, insbesondere Apache Parquet und Apache Arrow.

Apache Parquet ist ein spaltenorientiertes Speicherformat für tabellarische Daten, mit einer guten Schreib- und Leseperformance für Batch-Prozesse. Parquet erfasst dazu beim Schreiben die Datentypen und zahlreiche Metriken, um mit eingebauter Komprimierung die Dateigröße deutlich zu komprimieren. Dazu reden wir auch über andere Datenformate wie Avro, CSV, ORC, Hdf5 und Feather.

Apache Arrow ist ein In-Memory Speicherformat für Daten, welches die Brücke zwischen zahlreichen den Programmiersprachen schlägt. Dadurch wird es möglich, in C-Code, Java, Rust oder einer der anderen implementierten Sprachen auf die gleichen Daten zuzugreifen. Uwe erklärt uns, wie diese Sprach-Brücke funktioniert und wie Arrow zukünftig nicht nur zur Haltung sondern auch zur Verarbeitung von Daten eingesetzt werden kann.

Zum Abschluss befrage ich Uwe zu seinem Engagement im Open Source Umfeld. Wie hat er den Einstieg gefunden? Wie lässt sich Open Source mit Beruf und Privatleben vereinbaren? Und worauf sollte man achten, wenn man selbst ein Open Source Projekt unterstützen möchte?

Weiter Links:

#30 Fuzzing

avatar
Sergej Dechand
avatar
Nico Kreiling

Fuzz Testing (Fuzzing) ist eine dynamische Code-Analyse-Methodik, um absichtlich ungültige oder nicht erwartete Daten an ein lauffähiges Programm zu schicken mit der Hoffnung einen Fehlerfall oder Absturz zu produzieren. Das ist es damit hochwertigeren und fehlerfreien Software Code zu erzeugen. Anders als bei Unit-Tests werden beim Fuzz Testing Testfälle nicht manuell definiert, sondern von verschiedenen Mutationsalgorithmen zufällig und verhaltensbasiert erzeugt. Durch eine hohe Anzahl der so generierten Tests wird das Programm auch auf außergewöhnliche Eingabeparameter getestet, welche häufig Sicherheitsschwachstellen darstellen und daher Angreifern genutzt werden.

Mit Sergej Dechand rede ich über fehlerfreien und somit sicheren Softwarecode und welche Arten von Code-Analyse dazu wie beitragen können. Er erzählt von der Entwicklung des Fuzz Testing, welche bereits bei zufällig gewählten Lochkarten ihren Ursprung hat, zwischenzeitlich an Bedeutung verlor, derzeit aber sehr große Erfolge vorweisen kann. Dies liegt zum einen an technischen Weiterentwicklungen hin zu intelligenterem Fuzzing wie etwa durch AFL, welches das rein zufällige Fuzzing mit Kombination aus Instrumentierung und genetischen Algorithmen intelligenter macht. Fuzzing-Initiativen der großen Tech-Player wie z.B. OSS-Fuzz sorgen für Aufsehen, da sie immense Mengen bisher unerkannter Sicherheitslücken in Open Source-Software automatisiert aufdeckt. Sergej erklärt darüber hinaus auch, wie Fuzzing am besten instrumentiert wird, wohin die aktuelle Forschung zielt und wo derzeit die größten Probleme in der Umsetzung liegen.

Sergej ist Mitgründer von Code Intelligence, welches an einer Software Testing Plattform arbeitet mit der Vision Softwareentwicklern einen einfacheren Einstieg in moderne Testingmethoden u.A. modernes Fuzzing zu ermöglichen.

Links:

#29 Recommender Systems

avatar
Marcel Kurovski
avatar
Nico Kreiling

Recommendations, also Empfehlungen, sind mindestens so alt wie das Orakel von Delphi und der Hauptbestand zahlreicher Dienstleistungsberufe. Recomendation Systems hingegen sind ein spezieller Bereich des Information Retrieval und erst durch Amazon, Netflix und Spotify wirklich populär geworden. In dieser ausführlichen Techtiefenfolge erklärt Marcel Kurovski mit zahlreichen Beispielen das wesentliche Vorgehen dieser “Informationsaggregationsmaschinen”, welche von Collaborative Filtering über Matrixfaktorisierung bis zu Deep Learning reichen. Wir sprechen über die unterschiedlichen Stufen von Personalisierung und worin der Unterschied zur Suche besteht. Die Vor- und Nachteile von Relevanz als wichtigste Metrik für Recommender Systems kommen zur Sprache, genauso wie alternative Metriken wie Diversität, Novelty oder Robustheit, welche gerade zuletzt größeres Interesse erfahren. Marcel erzählt zudem einige Anekdoten aus der Geschichte der Recommender Systems und gibt einen Ausblick auf aktuelle Forschung und zukünftige Entwicklungen.

Links:

[Dev-Basics] CI / CD

avatar
Sebastian Meßingfeld
avatar
Nico Kreiling

Continous Integration (CI) und Continous Deployment (CD) sind die Verbindung der unterschiedlichen Schritte im Entwicklungsprozess. Mit entsprechenden CI/CD Pipelines lässt sich Quellcode schnell und automatisiert testen, bewerten, bauen und veröffentlichen. Mit Sebastian Messingfeld spreche ich darüber, wieso entsprechende Pipelines nicht nur ein Zeit- sondern auch ein Qualitäts- und Zufriedenheitsgewinn sind. Wir gehen gemeinsam durch die unterschiedlichen Schritte einer solchen Pipeline, von einfachem Quellcode Liniting bis hin zum Release im App Store. Dabei gehen wir auf die Besonderheiten unterschiedlicher Plattformen (iOS, Windows, Embedded…) ein und geben einige unserer persönlichen Erfahrungen Preis, um den Workflow individuell auf die persönlichen Anforderungen zuzuschneiden. Außerdem sprechen wir über die zahlreichen unterschiedlichen technischen Lösungsoptionen, von integrierter CI im Versionskontrollsystem über klassische CI Server wie Jenkins bis hin zu gehosteten Angeboten wie etwa Bitrise, CircleCI oder Azure DevOps.

Links:

[Dev-Basics] Testing

avatar
Rene Lengwinat
avatar
Nico Kreiling

Tests gehören inzwischen zur modernen Software Entwicklung genauso wie sauberer Quellcode und Versionskontrolle. Rene Lengwinat erklärt in Folge 27 von Techtiefen warum Tests Quellcode nicht nur fehlerfreier und wartbarer machen, sondern auch zu einem besseren Design führen. Gemeinsam gehen wir durch die Test-Pyramide und besprechen die Vorteile von Unit-, Integrations- und End2End Tests sowie ihren favorisierten Einsatzzweck. Rene erklärt mir außerdem, wann testgetriebene Entwicklung wirklich praktikabel ist und was es mit Fuzzy Testing auf Sicht hat. Darüber hinaus wirft er einen Blick auf aktuelle Entwicklungen im Bereich Softwaretests, die Bedeutung von gutem Monitoring und Chaos Engineering.

Links:

[Dev-Basics] Git

avatar
Stefan Lengfeld
avatar
Nico Kreiling

Der Umgang mit git oder einem anderen Versionskontrollsystem gehört zum Alltag von so ziemlich jedem Entwickler. git hat als dezentrales System gegenüber SVN oder Subversion zahlreiche Vorteile, ist jedoch auch sehr umfangreich und bietet auch erfahrenen Nutzern nach Jahren der Übung immer wieder neue Tricks, um sich noch effizienter in den persönlichen oder den Workflow des Teams einzufügen.

Mit Stefan Lengfeld spreche ich über das beliebte Versionskontrollsystem, seinen Ursprung und seinen generellen Aufbau, um einmal wirklich zu verstehen, was bei Befehlen wie `git checkout` unter der Shell passiert. Anschließend gehen wir auf die Kollaboration im Team ein, welche verschiedene Branching-Strategien notwendig macht. Stefan und ich berichten außerdem aus unserem Projektalltag und gehen dabei etwa auf das Develope-Master-Pattern ein und wie wir mit Hot-Fixes und Releases umgehen. Und zum Abschluss verraten wir euch dann noch unsere liebsten git Befehle, die unseren Alltag vereinfachen.

Links