#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

[Dev-Basics] Clean Code

avatar
Torsten Flatter
avatar
Nico Kreiling

Clean Code bezeichnet Quellcode, der intuitiv verständlich ist und so zu stabileren und besser wartbaren Systemen führt. Der Begriff entstammt dem gleichnamigen Buch von Robert Cecil Martin (alias Uncle Bob), welches auch eine Vielzahl an Tipps und Praktiken bietet, welche ich mit Torsten Flatter gemeinsam Bespreche. Zunächst geht es um das bekanntlich schwierige Thema von guten Namen für Variablen und Funktionen und Lesbarkeit im Generellen. Anschließend sprechen wir darüber, was neben der Länge eine gute Funktion ausmacht und warum man nicht zu viel kommentieren sollte. Wir sprechen außerdem über Struktur von Software Code, wie vertikale Sortierung und maximale Zeilenbreite, und widmen uns diversen Prinzipien wie das KISS- und das SOLID-Prinzip.

Links: 

Über „Uncle Bob“

SOLID-Prinzip

[cloud] Private Cloud mit OpenStack

avatar
Nils Domrose
avatar
Nico Kreiling

Die abschließende Folge der Reihe rund um Software Deployment und Cloud geht architektonisch in die Tiefe. Nils Domrose berichtet davon, wie er mit seinem Team ein eigenes Cloud-Angebot aufgebaut hat und betreibt. Zunächst besprechen wir die Anforderungen, die es bei der Auswahl eines geeigneten Rechenzentrums zu berücksichtigen gilt. Neben Basisanforderungen wie Strom und Netzwerk besprechen wir auch, wie man an ausreichend IP-Adressen kommt und mit welchen Fehlersituationen man kalkulieren muss. Anschließend geht es um die Planung von Hard- und Software. Hierbei gehen wir insbesondere auf OpenStack ein, ein open-source Projekt zum Betrieb einer Cloud-Infrastruktur. Nils erklärt dabei nicht nur die Grundlagen, sondern berichtet auch von den Abwägungen die sie zu ihrer Lösung gebracht haben und erzählt von Stolpersteinen und Herausforderungen auf diesem Weg.