Transcript: FastAPI

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 39.

Dominik

Heute reden wir mit euch über FastAPI.

Dominik

Hi, Jochen.

Jochen

Ja, hallo, herzlich willkommen, Dominik.

Dominik

Wir sind mal wieder im schönen Wintergarten, es ist noch relativ dunkel draußen heute mal wieder.

Dominik

Ja.

Dominik

Ja, und sind schon ganz gespannt, was ihr uns für Feedback gebt an hallo-at-python-podcast.de.

Dominik

Genau.

Jochen

Ja, machen wir wie immer so ein bisschen zuerst News oder so.

Jochen

Heute haben wir auch keinen Gast irgendwie oder so, sondern...

Jochen

Nur wir zwei.

Jochen

Das schaffen wir.

Jochen

Vielleicht können wir das auch gar nicht mehr. Mal schauen.

Dominik

Es gibt ja heute ein bisschen Werbung.

Dominik

Wir sind immer noch gesponsert.

Dominik

Falls ihr das total doof findet, schreibt uns doch einfach.

Dominik

Dann überlegen wir, ob wir es direkt wieder sein lassen.

Jochen

Okay, was haben wir denn so an News?

Jochen

Wir haben also einen

Jochen

Pepp, der eigentlich ganz interessant

Jochen

aussah. Pepp

Jochen

665.

Dominik

Kurz bevor The Devil, ich habe geguckt, 666 war schon

Dominik

seit 2001 belegt.

Jochen

Ja, die ganzen interessanten Nummern sind alle schon

Jochen

irgendwie, da haben sich Leute schon viele Gedanken

Jochen

zu gemacht, was man damit machen könnte.

Jochen

Ja, um ein

Jochen

Log-File-Format, also

Jochen

das gibt es ja, also Log-Files zum

Jochen

Festnageln von...

Dominik

Also nicht File, dann Log-File.

Dominik

Ja, mit CK.

Jochen

Das gibt es ja

Jochen

in diversen, also bei Poetry macht das halt,

Jochen

PipTools macht das,

Jochen

aber es gibt keinen Standard

Jochen

dafür und deswegen ist das halt immer ein bisschen

Jochen

schwierig und

Jochen

ja, da war halt die Idee, dass

Jochen

mal so zu standardisieren, zumindest für

Jochen

Binary-Installationen, weil das geht

Jochen

eigentlich auch nur so richtig gut für Wheels,

Jochen

weil bei Source-Distributionen oder so ist halt

Jochen

unklar, was ist denn jetzt eigentlich der Hash da?

Jochen

Worüber macht man den denn jetzt?

Jochen

Also, wobei bei Wheels ist es halt relativ einfach.

Jochen

Genau, und das war der Pep dazu

Jochen

von Bracken, der sich

Jochen

jetzt auch seit einiger Zeit relativ intensiv da mit diesem

Jochen

ganzen Packaging-Thema beschäftigt hat.

Jochen

Und ja, das wäre halt eine schöne Gelegenheit

Jochen

gewesen, das mal zu standardisieren, aber

Jochen

wurde abgelehnt.

Jochen

Der war nochmal Bracken, ne?

Jochen

ist einer aus dem Steering Council

Jochen

und auch irgendwie, der

Jochen

macht, glaube ich, eigentlich ist der so, der

Jochen

verantwortlich für

Jochen

VSCode-Python-Integration

Jochen

bei Microsoft, aber der ist eine

Jochen

ganz bekannte Figur da in der

Jochen

Python-Entwicklungsszene.

Dominik

Und weißt du auch noch, warum das abgelehnt worden ist, das PEP?

Jochen

Ja, weil es eben keine Source-Distribution

Jochen

irgendwie mit umfasst und

Jochen

du kannst halt damit dann nur Sachen,

Jochen

wo es ein Wheel gibt, das locken und dann ist

Jochen

halt irgendwie, viele sagen dann, das

Jochen

bringt dann nicht so viel und

Jochen

Und ach ja, naja, mal schauen.

Jochen

Vielleicht mal sehen, wie das da so weitergeht.

Jochen

Vielleicht denkt sich irgendjemand aus,

Dominik

wie man auch Source-Sachen hashen kann oder so.

Jochen

Ja, oder vielleicht gibt es da mal was ganz anderes.

Jochen

Keine Ahnung, mal abwarten.

Jochen

Das ist Packaging-Problem.

Dominik

Man könnte ja den Source in einen ZIP runterladen,

Dominik

den ZIP hashen und dann entpacken.

Jochen

Naja, also es ist nicht so einfach.

Jochen

Ja, genau.

Jochen

Nächste News.

Jochen

Nächste, was sehr schön ist.

Jochen

WebAssembly.

Jochen

WebAssembly ist C-Python, kompiliert komplett

Jochen

nach, also das ist wirklich

Jochen

das richtige C-Python, nicht irgendwie

Jochen

kompiliert nach WebAssembly und

Jochen

ja, kann man im Browser ausführen. Also es

Jochen

gehen da natürlich noch viele Dinge noch nicht, aber

Jochen

dass das überhaupt klappt, ist halt

Jochen

schon mal irgendwie sehr interessant

Jochen

und eine sehr gute Nachricht. Das heißt, irgendwann kann man

Dominik

tatsächlich Python schreiben,

Dominik

in C-Python kompilieren und dann einfach im

Jochen

Browser laufen. Nee, der kompiliert mal nichts.

Jochen

Du nimmst einfach, nein, C-Python ist der Interpreter

Jochen

von Python. Der ist nach WebAssembly,

Jochen

Das heißt, der läuft dann sozusagen im Browser

Jochen

zum Beispiel oder auf irgendwas, was halt

Jochen

WebAssembly ausführen kann. Und

Jochen

dann kannst du da einfach Python hinschicken und dann

Jochen

kann das das ausführen. Das heißt, du schickst

Jochen

da quasi vom Server Python

Dominik

Source-Files an den Browserskunden

Dominik

und das wird dann da. Ja, der könnte das ausführen.

Dominik

Ist natürlich

Jochen

so die ganze Umgebung und so,

Jochen

das ist natürlich dann nicht so wirklich wie

Jochen

normalerweise.

Dominik

Du musst halt mit den rechten Beschränkungen klarkommen,

Jochen

die es dann wahrscheinlich gibt. Ja, und noch diverse

Jochen

andere Geschichten. Du kannst ja auch nicht irgendwelche Sachen installieren und so, aber

Jochen

und irgendwie C-Extensions und so,

Jochen

das geht wahrscheinlich alles nicht, aber

Jochen

dass das überhaupt geklappt hat, ist schon mal

Jochen

So wird JavaScript halt endlich

Jochen

wegschmeißen. Nee, also

Jochen

das fürchte ich, wird

Jochen

das aber, aber es ist halt

Jochen

auf jeden Fall ein Ding, was dazu führen kann,

Jochen

dass man da

Jochen

eventuell nicht in so ein

Jochen

Aussterbeproblem läuft, weil halt alles

Jochen

irgendwann im Browser ist und so, dann kann man da

Jochen

vielleicht auch sein oder so, mal schauen.

Dominik

Was ist so ein Use Case von so WebAssembly

Jochen

Zeugs? Ja, zum Beispiel

Jochen

eben im Browser

Jochen

halt laufen, aber auch eventuell in Zukunft

Jochen

irgendwann wird es halt vielleicht auch so sein, dass

Jochen

Telefone oder so das halt irgendwie nativ

Jochen

ausführen.

Jochen

Ich meine auch, also

Jochen

unter iOS oder die

Jochen

iPhones, die haben ja, da ist ja ganz viel

Jochen

optimierter Kram auch für

Jochen

JavaScript schon drin, aber auch für WebAssembly

Jochen

ist es halt

Jochen

ja, also da sozusagen das so

Jochen

zu machen, dass man da den Kram halt auch irgendwie

Jochen

ausführen kann, das wäre eigentlich relativ einfach.

Dominik

Das heißt, der macht dann direkt dein Telefon mit die Datenanalyse

Dominik

live auf dem Gerät direkt oder sowas?

Jochen

Man könnte sagen, also das kann halt

Jochen

auch WebAssembly ausführen. Also momentan zum Beispiel

Jochen

wenn du für iOS entwickelst, geht halt nur

Jochen

C,

Jochen

C++, Objective-C,

Jochen

Swift.

Jochen

Es gibt zwar auch

Jochen

Pythonista und so, man kann schon Python da ausführen,

Jochen

das geht auch, aber das ist alles nicht

Jochen

so richtig offiziell erlaubt.

Jochen

Und ja,

Jochen

JavaScript geht halt auch.

Jochen

Und vielleicht ist halt

Jochen

irgendwie WebAssembly irgendwann mal so ein offizielles

Jochen

Target und dann

Jochen

könnte man auch Python da so wieder reinschummeln

Jochen

quasi. Und dann Apps für

Jochen

Telefone in Python schreiben.

Jochen

Was ja auch so ein anderes Problem ist.

Jochen

Die beiden Hauptdinger, auf denen Python nicht da ist,

Jochen

ist halt Frontend-Web und

Jochen

halt mobile Geräte.

Jochen

Und das sind zwei Kategorien, die immens wichtig sind

Jochen

eigentlich. Und das macht so ein bisschen

Jochen

Angst, dass die Story für Python da nicht so gut ist.

Dominik

Aber gut, dass das in die richtige Richtung geht.

Dominik

Ja, genau.

Jochen

Genau, Christian Heim ist Hamburger

Jochen

Python-User-Gruppe, irgendwie

Jochen

ein paar Mal gesehen, hat da ganz viel gemacht

Jochen

und das freut mich sehr, dass das irgendwie

Jochen

coole Sachen macht.

Jochen

Dann ist Black

Jochen

jetzt stable. Black ist stable.

Jochen

Das ist,

Jochen

ja, genau, das ist toll.

Jochen

Oder so. Manche Leute finden es auch schrecklich,

Jochen

aber ich finde es eigentlich eine gute Nachricht.

Jochen

Das heißt, man kann sich jetzt darauf verlassen, dass das erstmal

Jochen

eine Zeit lang alles so bleiben wird. Was auch mit

Jochen

dazugekommen ist, ist Port für Python

Jochen

3.10-Syntax und so und

Jochen

ja, eine ganze lange Liste von Dingen, die da

Dominik

Und damit ist jetzt auch die DIP,

Dominik

die Django Enhancement Proposal

Dominik

Ah, ja, ja, ja, es gab

Jochen

Django Enhancement Proposal

Jochen

8 sagt irgendwie, lass doch mal

Jochen

Autofarmata benutzen, aber erst

Jochen

wenn es Stable ist und genau,

Jochen

da Blackhead Stable ist, ist Django

Jochen

jetzt auch quasi mit Black formatiert

Jochen

und ja.

Jochen

Ja, wir hatten ja schon mal darüber gesprochen,

Jochen

wie man Black noch so einsetzen kann mit

Jochen

Darker oder

Jochen

Blue war das? Ja, Blue ist halt dann mit

Jochen

Single Quotes statt Double. Genau, und

Dominik

Darker ist halt inkrementelles

Dominik

Black Bike mit

Dominik

Hooks zum Beispiel.

Jochen

Ja gut, aber genau, Jungle ist jetzt auch Black.

Jochen

PyTest. PyTest gibt es

Jochen

eine neue Version, sieben Seiten.

Jochen

Der letzte kam irgendwann im Frühjahr letzten

Jochen

Jahres oder so raus, also das ist ein ganz großer Schritt.

Jochen

Ich weiß aber gar nicht genau, also es ist nichts, was jetzt irgendwie

Jochen

rausstechen würde, was man sagen kann, oh das ist ganz toll.

Jochen

Aber kann man ja mal ausprobieren.

Jochen

Also die Information, es gibt jetzt eine neue

Jochen

Version ist vielleicht daran am interessantesten.

Jochen

Ja,

Jochen

ansonsten genau zu der

Jochen

zu der HTMX-Episode

Jochen

vom letzten Mal. Es gab da noch so ein Essay

Jochen

von, das habe ich dann gesehen, als ich gedacht habe,

Jochen

okay, kann man das nicht vielleicht irgendwie einfacher erklären mit diesem

Jochen

HTUS-Ding?

Jochen

Was ist das eigentlich? Und so

Jochen

und habe dann gesehen, es gibt ein

Jochen

Essay von dem Carson Gross

Jochen

dazu,

Jochen

wo er

Jochen

beschreibt, wie er sich so

Jochen

gedacht hat und nimmt da halt so ein Bankbeispiel

Jochen

und sagt halt,

Jochen

also wenn du eine JSON-API hast, dann

Jochen

muss, wenn du so eine

Jochen

JavaScript-Applikation hast, dann muss

Jochen

ja

Jochen

sozusagen die Applikation

Jochen

immer wissen, was zum Beispiel sowas bedeutet,

Jochen

wie du hast dein Konto überzogen

Jochen

und welche Aktionen

Jochen

du dann machen darfst und welche nicht.

Jochen

Während wenn du halt HTML rüberschickst, dann

Jochen

können da ja zum Beispiel, ob du jetzt eine Überweisung

Jochen

machen kannst oder so, ist halt ein Link.

Jochen

Dann kann der Link da halt entweder drin sein oder nicht.

Jochen

und dein Browser muss halt nicht wissen, dass du dein Konto überzogen hast, der zeigt einfach nur Formulare an und das Formular zum Überweisen zeigt dir halt einfach nicht mehr an und sozusagen der State, dass der das dann nicht mehr anzeigt, ist halt im HTML und nicht in der Applikation, während in einem JavaScript-Fall kriegst du halt nur die Account-Daten von der Bank und musst dann halt in der Applikation überprüfen, okay, hat er sein Konto überzogen?

Jochen

Wenn ja, dann darf er nicht überweisen.

Jochen

Und das ist natürlich sozusagen

Jochen

einfach ein bisschen anders. Und vielleicht kann man sich das

Jochen

anhand dieser Geschichte, ich will verlinken,

Jochen

packen das in die Shownotes. Also ich fand, daran kann man

Jochen

eigentlich ganz schön sehen, was da eigentlich so gemeint ist

Jochen

mit Hypermedia

Jochen

ist die Engine of Application State

Jochen

nicht.

Jochen

Was gab es noch? Ach ja, Wagtail.

Jochen

Wagtail, genau.

Jochen

Wagtail bekommt einen neuen Page Editor

Dominik

und zwar von Google.

Jochen

Genau, von Google gesponsert.

Dominik

weil Google relativ viel Wagtail wohl intern

Dominik

benutzt.

Jochen

Ja, und das ist natürlich schon nett. Also ist

Jochen

es nicht so wahnsinnig viel Geld, irgendwie, was

Jochen

sind das, 150.000 Dollar oder so, die sie denen geben,

Jochen

aber ich meine, da kannst du halt schon

Jochen

ein bisschen was mit machen und

Jochen

ja, also freut mich auf jeden Fall auch, dass die Ergebnisse

Jochen

dann halt allen hinterher zugutekommen, das ist ja

Jochen

sehr schön.

Jochen

Genau, und ja, ich meine, ich benutze

Jochen

ja jetzt auch für meine Geschichten da

Jochen

Wagtail. Ich bin nicht immer so

Jochen

ganz super überzeugt, ob das die richtige Entscheidung ist, aber

Jochen

solche Nachrichten sind auch gute Nachrichten

Jochen

für mich.

Jochen

Apropos Open Source,

Dominik

da gab es doch irgendwie noch eine Meldung von uns.

Dominik

Ja, Oliver

Jochen

hat netterweise einen Kommentar

Jochen

zu der Open Source Episode, glaube ich,

Jochen

hinterlassen und meinte, da kennt ihr eigentlich diesen

Jochen

Prototype Fund.

Jochen

Und nö, kannte ich zumindest überhaupt gar nicht.

Jochen

Ja, man sagte mir auch nichts.

Jochen

Und was ist das? Das ist irgendwie

Jochen

ein Fonds, der

Jochen

aufgelegt ist, das Bildungsministerium

Jochen

zahlt dann irgendwie für,

Jochen

also das geht vom Jahr

Jochen

2016 bis 2024,

Jochen

25 Projekte und

Jochen

16

Jochen

Förderungsrunden und

Jochen

also, ja, da sind wir

Jochen

natürlich jetzt mit 2022 so mittendrin

Jochen

oder am Ende eigentlich schon fast.

Dominik

Ja, wenn der jetzt noch einen Förderantrag schreiben will,

Dominik

also das Problem ist wahrscheinlich immer, der Förderantrag ist relativ

Dominik

lang, aber ja,

Dominik

wie immer so bei solchen Dingen, aber

Dominik

wie viel kriegt man? 50k für 6 Monate?

Jochen

Ja, 47.500 Euro für 6 Monate

Jochen

maximal, also vielleicht auch weniger.

Jochen

Doch, dann dachte ich so, oh,

Jochen

für ein Team,

Jochen

die helfen, ja.

Jochen

Also ich meine, tatsächlich mache ich ja eigentlich genau

Jochen

das, da steht auch noch in diesem Ding drin, so für Freelancer

Jochen

oder so, vielleicht ganz interessant, da dachte ich mir so, oh ja, stimmt.

Jochen

Eigentlich mache ich genau sowas und

Jochen

eigentlich wäre das ja tatsächlich, vielleicht schreibe ich da

Jochen

einfach mal was hin, aber andererseits,

Jochen

ja, so vom Finanziell

Jochen

ist das jetzt nicht so super attraktiv, ehrlich gesagt.

Jochen

Und für ein Team ist das natürlich,

Jochen

ja, nee.

Dominik

Ja, da kann man, ja, ja.

Dominik

Ach ja.

Dominik

Tja, die Preise und so, öffentliche Hand.

Jochen

Ja, aber prinzipiell sehr interessant

Jochen

und auch gut, dass das jemand macht,

Jochen

weil das ist eigentlich total wichtig

Jochen

und müsste man eigentlich noch mehr machen.

Jochen

Aber immerhin, das ist ja schon nicht so schlecht.

Jochen

Und vielleicht weiß ja jemand noch nicht, dass es das gibt.

Dominik

Ja, und wenn jemand zum Beispiel gerade nach dem Studium

Dominik

damit durchaus zufrieden sein kann

Dominik

und dann damit was probieren kann

Dominik

und damit gefühlt wird, das ist auch schon mal super.

Jochen

Ja, dann, das war auch jetzt

Jochen

vor ganz kurzem

Jochen

EdgeDB 1.0

Jochen

Release ist vielleicht auch interessant.

Jochen

Ja,

Jochen

muss man eigentlich, ich weiß nicht, ob man da so

Jochen

in Detail drauf eingehen kann.

Dominik

Aber was ist denn eine EdgeDB trotzdem?

Jochen

EdgeDB ist, ja,

Jochen

quasi

Jochen

ein Versuch, sozusagen

Jochen

diesen Object Relational

Jochen

Impedance

Jochen

Mismatch, irgendwie so ein bisschen.

Dominik

Okay, jetzt hast du was gesagt, das habe ich überhaupt nicht verstanden.

Dominik

Edge Relational

Jochen

in... Object Relational...

Jochen

Also du hast ja immer das

Jochen

Problem in

Jochen

objektorientierten Sprachen, das mappt halt

Jochen

nicht so richtig gut auf

Jochen

relationale Datenbanken. Relationale Datenbanken

Jochen

ist halt so eine Idee aus Anfang

Jochen

der 70er und

Jochen

eigentlich eine ziemlich coole Idee, aber damals gab es

Jochen

objektorientierte Programmierung und sowas gab es einfach nicht.

Jochen

Und das ist aber

Jochen

irgendwie das dominante Programmierparadigma

Jochen

irgendwie geworden.

Jochen

Und jetzt haben wir halt immer das Problem,

Jochen

okay, man speichert die Daten

Jochen

halt in Relationen

Jochen

oder in einer relationalen Datenbank und man hat aber jetzt

Jochen

Objekte irgendwie

Jochen

in der Applikation

Jochen

und wie kriegt man das jetzt zusammen?

Jochen

Da gibt es im Grunde zwei wesentliche, also

Jochen

du kannst auch hohe SQL-Szenen natürlich schreiben, aber

Jochen

das ist halt so ein bisschen unhandlich.

Jochen

Die meisten verwenden dann eben

Jochen

ORMs, also so

Jochen

Object Relational Mapper.

Dominik

Wie den von Django oder Peewee oder sowas.

Jochen

Genau, oder SQL Alchemies für Python

Jochen

vielleicht der bekannteste.

Jochen

Und da gibt es zwei grundsätzlich unterschiedliche

Jochen

Patterns. Das eine ist Active Record Pattern,

Jochen

was halt Ruby on Rails

Jochen

verwendet. Django verwendet das auch.

Jochen

Oder halt Datamapper-Pattern,

Jochen

das verwendet SQL Alchemy.

Jochen

Die haben halt so ihre Trade-Offs.

Jochen

Die haben halt Vorurteile und Nachteile.

Jochen

Man kann jetzt nicht sagen, das eine oder andere ist besser.

Jochen

Jedenfalls, aber

Jochen

sowas muss man halt eigentlich, oder die meisten Leute

Jochen

verwenden sowas heutzutage einfach deswegen, weil es

Jochen

halt das Leben einfach deutlich leichter macht.

Jochen

Aber trotzdem hat man immer noch das Problem,

Jochen

dass viele Sachen nicht so richtig gut

Jochen

gehen und schwierig sind.

Jochen

Und man muss mit den Dingern auch teilweise ein bisschen kämpfen.

Jochen

Und ja, die Idee bei HDB ist halt einfach zu sagen,

Jochen

warum denken wir das Ganze nicht einfach nochmal neu

Jochen

und machen das halt eher so,

Jochen

dass die Datenhaltung auch zu der Art,

Jochen

wie wir heutzutage programmieren, besser passt.

Jochen

Und die Standardfälle,

Jochen

wo man halt in SQL komische Sachen schreiben muss

Jochen

oder die mit den normalen ORMs nicht so gut gehen,

Jochen

die machen wir halt so, dass es halt einfach geht.

Jochen

und dass man auch,

Jochen

das ist halt immer so ein Fremdkörper,

Jochen

selbst wenn man es mit einem ORM macht,

Jochen

es sieht immer komisch aus,

Jochen

ein bisschen eigenartig, es passt halt

Jochen

nicht so richtig und

Jochen

genau, dafür haben sie sich eine neue Sprache überlegt,

Jochen

haben gesagt, das eigentliche Problem ist halt, warum die

Jochen

ORMs nicht so gut sein können, ist halt, dass sie,

Jochen

dass halt SQL als Compile-Target

Jochen

sozusagen ziemlich schwierig ist, weil halt

Jochen

SQL ist ja auch kompliziert, ist eigentlich auch dafür

Jochen

gemacht, dass Menschen das schreiben,

Jochen

was ja heute auch keiner mehr macht, eigentlich war das mal gedacht

Jochen

für das Analysten und so

Jochen

Queries schreiben.

Jochen

Weiß ich nicht, ob das jemals passiert ist, aber

Jochen

heutzutage passiert das kaum, denke ich.

Jochen

Sondern

Jochen

es ist halt immer so, dass du verwendest

Jochen

halt einen ORM, der compiled dann zu SQL,

Jochen

also zu etwas, was eigentlich dafür gemacht ist, dass Menschen

Jochen

das finden, das macht irgendwie alles keinen Sinn.

Jochen

Dann ist es halt auch so, SQL ist nicht so gut composable,

Jochen

du kannst halt nicht irgendwie

Jochen

Schnipsel SQL rumreichen und die dann halt

Jochen

zusammensetzen oder es geht alles nicht so gut.

Jochen

Das ist eine Gesamtstatement-Syndromie.

Jochen

Und genau, all diese Dinge sind halt bei

Jochen

EdgeQL oder so ist, glaube ich, dann die

Jochen

Sprache besser

Jochen

sozusagen. Aber da weiß man nicht so genau.

Jochen

Das ist halt jetzt gerade eine neue Ankündigung.

Jochen

Die entwickeln da schon seit ein paar Jahren dran, aber

Jochen

jetzt ist halt die erste

Jochen

1.0-Version erschienen.

Jochen

Ja, also

Jochen

das hört sich auf jeden Fall interessant an. Kann man sich

Jochen

ja mal angucken. Und es ist halt so eine Mischung.

Jochen

Das, was sie da gebaut haben, ist

Jochen

die Sprache soll halt standardisiert

Jochen

werden. Das ist eher so ein Standard.

Jochen

Es gibt aber auch eine konkrete Implementation, die

Jochen

basiert auf

Jochen

Postgres und

Jochen

quasi so ein bisschen Erweiterung

Jochen

Richtung Graphen, Datenbanken,

Jochen

weil das ist ja auch immer so ein Ding,

Jochen

es ist eigentlich gar nicht so klar, warum wir jetzt Relationale Datenbanken gewonnen haben

Jochen

gegenüber den Graphen-Datenbanken und es gibt

Jochen

ja auch noch Graphen-Datenbanken, Neo4j oder

Jochen

diverse andere, Dgraph

Jochen

und Zeugs und

Jochen

ja, eigentlich will man beides irgendwie haben und

Jochen

in Postgres kann man das ja ganz gut

Jochen

auch abbilden und dann haben sie

Jochen

halt irgendwie so ein Layer über Postgres gelegt und

Dominik

Ah, wie heißt das? Ein Layer über Postgres?

Dominik

Klingt ja spannend. Also es klingt auch so, als könnte man das

Dominik

mit Fast-IP benutzen.

Jochen

Ja, die haben auch,

Jochen

also die Leute, die das gemacht haben,

Jochen

das sind bekannte Leute, das ist nicht so,

Jochen

dass das irgendwie aus dem Nichts kommt,

Jochen

sondern

Jochen

der CEO

Jochen

von HDB ist dann auch eine Firma,

Jochen

das macht das Ganze wieder so ein bisschen, ich weiß nicht genau,

Jochen

die machen halt vor allen Dingen, die haben viel Consulting gemacht

Jochen

und haben halt viele Probleme gesehen auch,

Jochen

die man halt

Jochen

normalerweise so hat.

Jochen

Ja, der

Jochen

wie heißt der, Jure Selin

Jochen

der hat auch

Jochen

an den

Jochen

Peps zu

Jochen

Async Await diese ganzen Geschichten, da hat er hauptsächlich

Jochen

dran mitgeschrieben, also der ist halt

Jochen

auch einer der Hauptverantwortlichen

Jochen

dafür, dass wir jetzt in Python

Jochen

Keywords für Async Await

Jochen

also Syntax-Unterstützung

Jochen

für diese ganzen Async-Geschichten haben

Jochen

und hat da auch

Jochen

ganz viele Dinge implementiert und

Jochen

Lukas Schlanger hat

Jochen

irgendwie für RGB auch gearbeitet schon

Jochen

und ja, es ist alles

Jochen

typisiert, genau, das ist auch sowas.

Jochen

Den letzten Namen hatte ich jetzt auch noch nicht gehört.

Jochen

Lukas? Der Release-Manager von Python

Jochen

für 3.8, 3.9, 3.10.

Jochen

Ah, okay. Nee, nicht für 3.10, nicht Quatsch.

Jochen

Das ist Unsinn.

Jochen

Oder vielleicht noch sogar früher,

Jochen

ich weiß es gar nicht mehr genau.

Jochen

Und der, ja, auch ganz einer,

Jochen

der hat ganz viel zu

Jochen

Type-Annotation-Geschichten gemacht, der hat Black geschrieben,

Jochen

genau.

Jochen

naja, also auch

Jochen

sehr bekannte

Jochen

Typ da und

Jochen

ja, genau, der hatte

Jochen

und Async.io hat halt mit halt auch

Jochen

viel zu tun und

Jochen

das ist alles, die haben auch, genau, die haben

Jochen

auch

Jochen

Async.pg geschrieben, das ist halt

Jochen

die schnellste Postgres-Artenanbindung

Jochen

sozusagen, die es so gibt.

Jochen

Ist auch ein ganz tolles Projekt,

Jochen

also muss man sich, ja,

Jochen

dann haben sie, genau, haben sie

Jochen

UV-Loop geschrieben, also das Ding, was halt

Jochen

unter UV-Corn und so

Jochen

drunter liegt.

Jochen

Also eine schnelle Async-IO-Implementation,

Jochen

die in der Standardbibliothek ist ja sozusagen

Jochen

nur eine Referenz-Implementation, aber die ist halt

Jochen

nicht schnell. Und sie haben halt eine schnelle

Jochen

Version geschrieben, also ganz viel der

Jochen

Basis-Infrastruktur, die man so, kommt da auch aus

Jochen

der Ecke schon. Insofern, das

Jochen

sind schon Leute, die wissen, was sie da tun.

Dominik

Dann darf man auch ein bisschen Werbung für seine Projekte machen.

Jochen

Genau, wobei, ja, Firma ist natürlich

Jochen

Was uns ja zur Werbung bringt.

Jochen

Moment, wir sind noch nicht mit den News durch.

Jochen

Wir sind noch nicht mit den News durch.

Dominik

Achso, was Geheimes, das ich noch gar nicht weiß.

Dominik

Also

Jochen

einen Punkt noch, genau, ich habe wieder Podcast

Jochen

gehört, Problemierbar hat jetzt auch was über

Jochen

letzte Episode, das war

Jochen

Laravel, PHP,

Jochen

Livewire,

Jochen

das fand ich auch ganz interessant, weil immer so diese

Jochen

Verbindungen finde ich immer interessant, weil die vielleicht nicht so

Jochen

klar sind oder mir nicht so klar waren

Jochen

und wenn man das dann weiß, dann

Jochen

macht das halt das alles schon mal ein bisschen

Jochen

verständlicher, nämlich

Jochen

Laravel

Jochen

Livewire ist auch tatsächlich

Jochen

inspiriert von Phoenix Liveview.

Jochen

Ist aber auch schon ein bisschen älter,

Jochen

das ist von 2019. Ich hätte das jetzt gedacht, dass es

Jochen

jünger ist, aber das ist auch schon relativ lange quasi dabei.

Jochen

Also bei diesem Trend, die Dinge jetzt wieder

Jochen

vom Server aus zu machen. Und der

Jochen

Autor von Livewire ist der gleiche wie der von

Jochen

Alpine.js. Das ist halt, wie heißt der?

Jochen

Caleb.

Jochen

Habe ich jetzt den Namen vergessen, aber

Jochen

irgendwas mit P.

Jochen

Und Portio, oder

Jochen

wieso? Und

Jochen

genau, der hat AlpineJS gebaut und halt aber auch

Jochen

LiveWire. Und der wollte

Jochen

eigentlich ja sowas eben wie PhoenixLiveView

Jochen

bauen. Und dann

Jochen

ist aber das Problem mit dem PHP,

Jochen

naja, also so WebSockets,

Jochen

also PhoenixLiveView macht das ja über

Jochen

WebSockets. Das geht halt mit PHP

Jochen

nicht so richtig, weil du hast halt den Async-Teil

Jochen

in PHP nicht. Also gibt's jetzt

Jochen

auch seit PHP 8.1,

Jochen

das ja auch vor ein paar Monaten rausgekommen ist.

Jochen

Aber es gibt

Jochen

keine Infrastruktur so richtig dafür und die ganzen

Jochen

Russer können das nicht und so. Das heißt,

Jochen

quasi eine Verbindung offen

Jochen

halten vom Server aus ist in

Jochen

PHP sehr, sehr schwierig. Das geht eigentlich gar nicht richtig.

Jochen

Und dann hat er halt angefangen nachzudenken,

Jochen

so okay, ja Mist, mit WebSocket

Jochen

das wird irgendwie nicht funktionieren. Wie kann man das

Jochen

denn sonst machen? Und die machen das,

Jochen

der macht das auch alles über

Jochen

AJAX-Calls und Pollen

Jochen

und, ja, sie

Jochen

machen so ein bisschen komplizierte Dinge darüber, dass sie

Jochen

halt immer alles mit übertragen, wenn sobald

Jochen

irgendwie ein AJAX-Call gemacht wird. Aber

Jochen

was ich daran cool finde, ist, dass das überhaupt geht

Jochen

und dass man den Websocket gar nicht so

Jochen

unbedingt braucht. Also das zeigt das

Jochen

auf jeden Fall irgendwie. Man kann halt sehr viel machen,

Jochen

ohne unbedingt einen Websocket haben zu müssen

Jochen

und das ist eigentlich auch sehr nett, weil

Jochen

tatsächlich, so Websocket

Jochen

wird es wahrscheinlich in Django ohne

Jochen

Django-Channels-Anstützung oder so auch wahrscheinlich nie geben.

Jochen

Und daher,

Jochen

aber offenbar scheint man

Jochen

braucht es auch nicht unbedingt.

Dominik

Das ist interessant, da können wir vielleicht gleich nochmal drauf eingehen und sagen,

Dominik

warum oder was FastAPI

Jochen

Genau, aber mit Fast-TP

Jochen

könnte man das wahrscheinlich sehr gut machen.

Jochen

Genau.

Jochen

Ja, das war's eigentlich.

Jochen

Ich glaube, das probiere ich

Jochen

nächstes Mal aus. Habe ich auf Twitter gesehen.

Jochen

Dachte ich, kann ich hier auch mal anbringen.

Jochen

Wenn jemand anders das auch

Jochen

Twitter hat, hat jemand

Jochen

irgendwie geschrieben.

Jochen

Jetzt war ich beim Zahnarzt und da hat er

Jochen

irgendwie

Jochen

wurde gerückt, beziehungsweise

Jochen

Moment, warte, gerade dein Zahnarzt

Jochen

Okay, nochmal.

Jochen

Nicht ich, ich hab nur gelesen, ich hab es auf Twitter gelesen.

Jochen

Ja gut, da meint jemand dann, ja, also manchmal fühlt man sich ja so ausgeliefert, wenn man so beim Zahnarzt sitzt, ne, und dann kriegt man auch noch irgendwie so harsche Ansagen wie irgendwie, benutzen Sie eine Zahnseide, ja, Mund auf und dann so, was ist das denn hier, irgendwie, benutzen Sie eigentlich Zahnseide, warum nicht, macht das doch mal bitte häufiger.

Jochen

Und der meinte dann so, ja, ich habe dann, also nachdem ich diese Zahnseide-Geschichte darauf so hingewiesen worden bin, habe ich dann gefragt, ja, wie sieht es eigentlich bei Ihnen aus, machen Sie Backups?

Jochen

Und prüfen Sie die auch, ob Sie die ab und zu mal einspielen, ob das überhaupt geht, also wäre schon gut, wenn man das macht, ansonsten, ja.

Dominik

Das war eine Geschichte, habe ich auch irgendwo im Talk gesehen.

Dominik

Kein Mitleid.

Dominik

Kongress, glaube ich sogar.

Jochen

Schön, muss ich mir merken, muss ich auch mal versuchen

Jochen

anzubringen. Ja, habe ich mir auch fest vorgenommen,

Dominik

wenn ich es in Zahlen suche, wenn dann die Frage

Dominik

kommt, und machen sie eigentlich ihre Backups?

Jochen

Genau, ja. So, aber jetzt glaube ich,

Jochen

dann sind wir mit den News durch. Ja, okay.

Jochen

Ja, okay. Dann wollen wir jetzt wieder

Dominik

Werbung schalten, also wir wollen nicht, aber wir müssen natürlich.

Dominik

Ja.

Dominik

Und wieder mit freundlicher Unterstützung heute von

Dominik

unserem Werbepartner NordVPN.

Dominik

Gibt es was Neues?

Dominik

Ja, ein Exklusiv-Deal

Jochen

und ein Geschenk obendrauf zum NordVPN-Geburtstag.

Dominik

Und dann könnt ihr auf den NordVPN-Python-Podcast gehen

Dominik

und euch den Deal da sichern.

Jochen

Und da gibt es auch so eine 30-Tage-Geld-Zurück-Garantie.

Jochen

Genau.

Jochen

Hatten wir ja auch letztes Mal schon.

Jochen

Ja, genau.

Jochen

Ich weiß nicht, benutzt du VPNs irgendwie?

Jochen

Relativ selten, aber ich glaube,

Dominik

zum Geoblocking umgehen ist das gar nicht so schlecht.

Dominik

Ist wahrscheinlich so schlecht, ja.

Dominik

Wenn du Streaming haben möchtest

Dominik

und möchtest du irgendwie das Streaming-Programm von zu Hause gucken,

Dominik

wenn du im Urlaub bist oder so,

Dominik

ist das doch gar nicht so unnützlich.

Jochen

Genau, also diese

Jochen

Geoblocking-Geschichten oder halt auch eben

Jochen

wenn man sicherstellen möchte,

Jochen

dass man genug Durchsatz hat

Jochen

und das irgendwie vom lokalen ISP

Jochen

vielleicht nicht unbedingt zu erwarten ist,

Jochen

dann kann das durchaus

Jochen

hilfreich sein.

Jochen

Ja, also genau, einfach da

Jochen

auf https.nordvpn.com

Jochen

slash pythonpodcast gehen und mal

Jochen

angucken, was da so von dir gibt.

Dominik

Genau, damit würdet ihr uns unterstützen.

Dominik

Jo.

Dominik

Dann machen wir weiter im Programm

Dominik

und gehen zu FastAPI.

Dominik

Ja, FastAPI, das Thema.

Dominik

Genau, das Thema unserer Folge.

Dominik

Was ist denn FastAPI überhaupt?

Dominik

Also es ist ein weiteres Web-Framework, ein neues

Dominik

Web-Framework und

Dominik

ersetzt, oder was heißt ersetzt, also ergänzt

Dominik

vielleicht so ein bisschen die Welt, die es in Python dazu gibt.

Dominik

Ja, das ist sehr interessant.

Dominik

Also genau, also eigentlich

Jochen

die meisten anderen Sachen sind ja sehr alt, also Flask ist

Jochen

sehr alt, Django ist sehr alt.

Jochen

Also wenn ich das so richtig verstanden habe,

Dominik

ist FastAPI quasi das neue Flask, das setzt

Dominik

du das so ein bisschen, was man da gemacht hat?

Jochen

Ja, also es ist auf jeden Fall eher, also es kommt

Jochen

darauf an, aber also auf jeden Fall ist es eher

Jochen

vergleichbar

Jochen

mit Flask quasi, was die so

Jochen

grundsätzliche, den grundsätzlichen

Jochen

Ansatz angeht, aber

Jochen

ja, es ist halt auch irgendwie wieder so ein bisschen anders

Jochen

insofern, aber es ist einfach historisch, man hatte

Jochen

so eine Explosion von irgendwie unterschiedlichen

Jochen

Webframework-Projekten

Jochen

irgendwann halt um diesen Dreh, wo die alle entstanden

Jochen

sind, 2004, 5, 6, irgendwie so.

Jochen

Pyramid ist auch aus der Zeit, oder?

Jochen

Das weiß ich nicht, es kann sein, dass das auch

Jochen

später, weil ich weiß es nicht so genau

Jochen

bei Pyramid, aber so viele

Jochen

Web-Frameworks

Jochen

kommen halt aus der Zeit.

Jochen

Oder da gab es halt ganz, ganz viele. Da gab es

Jochen

so eine Zeit, wo alle zwei Monate

Jochen

irgendwie was Neues rausgekommen ist.

Jochen

So wie jetzt bei JavaScript.

Jochen

Und ja,

Jochen

die meisten sind wieder verschwunden.

Jochen

Ich weiß nicht, was gab es damals? Also TurboGears

Jochen

und ach, was ist der Teufel?

Jochen

Naja, das meiste ist halt alles wieder

Jochen

verschwunden und übrig geblieben sind

Jochen

im Grunde Flask und Django.

Jochen

Und die repräsentieren ja auch so

Jochen

irgendwie

Jochen

gegensätzliche,

Jochen

die Enden von irgendwie so, also entweder

Jochen

Batteries included oder halt irgendwie sehr

Jochen

wenig dabei, aber dafür sehr flexibel.

Jochen

Ja, genau.

Dominik

Also der Unterschied auch mit den URMs hatten wir eben schon

Dominik

gesprochen, dass halt Django

Dominik

den URM mitliefert

Dominik

und dass du bei Flask meistens die Core-Icony nimmst.

Jochen

Ja, aber kannst halt auch irgendwas anderes

Jochen

nehmen, also bist du halt nicht...

Jochen

Hast da keine feste Bindung und...

Jochen

Ja, aber irgendwie seit ein paar Jahren

Jochen

gibt es halt sowas Ähnliches wieder.

Jochen

Es gibt wieder viele neue Web-Frameworks.

Jochen

Also was vor allen Dingen an der neuen Syntax bei Python ist,

Jochen

liegt halt an der Sprache, dass sie sich geändert hat.

Dominik

Genau, an den Typefilms, die es dazu gekommen sind.

Dominik

Typefilms, Async.io.

Dominik

Genau, das ist Async.

Dominik

Und was unter FastAPI drunter liegt, ist ja Starlet.

Dominik

Starlet, genau.

Dominik

Ja, vielleicht kann man das so ein bisschen

Jochen

in die ganze Historie so ein bisschen kurz erzählen.

Jochen

eben, wir sehen so Async-Web-Frameworks

Jochen

jetzt wieder ganz viele, so Scenic,

Jochen

Falcon, FastAPI,

Jochen

Quad,

Jochen

also jetzt gibt es auch wieder ganz viele

Jochen

und

Jochen

der Autor von

Jochen

FastAPI hat sich auch viele angeguckt

Jochen

und hat das vorher schon...

Jochen

Sebastian Ramirez, also Tiandolo,

Dominik

der viele andere coole Sachen noch macht nebenbei,

Dominik

neben FastAPI. Also Typer ist auch

Dominik

sehr ähnlich und dann gibt es auch SQL-Model,

Dominik

wenn man das irgendwie mit dem OEM machen möchte.

Dominik

Aber vielleicht erstmal nochmal, was du sagen wolltest.

Jochen

Genau, der hat viel

Jochen

Django gemacht oder viel mit anderen,

Jochen

der hat auch viel APIs gemacht

Jochen

und war auf der Suche nach einem

Jochen

Framework, das halt irgendwie bessere

Jochen

Entwickler-Experience

Jochen

irgendwie bietet. Also Django REST

Jochen

Framework oder so.

Jochen

Er fand das jetzt nicht schlecht, er fand das schon gut.

Jochen

Also er hat sich halt auch, also die

Jochen

Browsable API bei Django REST

Jochen

Framework, es war halt auch eine wesentliche

Jochen

Inspiration für das, was er dann halt da gemacht hat.

Jochen

Und fand

Jochen

das schon gut, aber

Jochen

es war halt nicht alles dabei,

Jochen

was er gerne gehabt hätte und

Jochen

ja,

Jochen

dann war aber ein Ding

Jochen

fast perfekt. Also er hat sich

Jochen

zum Beispiel, Django Rest Framework hat er sich viele Sachen

Jochen

angeschaut, die er gut fand, aber es war halt nicht.

Jochen

Dann hat er sich Marshmallow angeguckt, bei Flask

Jochen

fand er auch gut, diese ganze

Jochen

Validierungsgeschichten und Serialisierung

Jochen

von ganzen Objekt-Hierarchien

Jochen

und so, aber das ist halt

Jochen

auch noch nicht so

Jochen

hundertprozentig hat das das getroffen, was er

Jochen

irgendwie haben wollte. Und

Jochen

es gab noch ein paar andere Sachen, die er sich auch angeguckt hat.

Jochen

dann

Jochen

hat er

Jochen

sich dann der Autor von

Jochen

Jungle Rest Framework, Tom Christie, ist ja

Jochen

auch so einer, der hat ganz, ganz viele Projekte gemacht.

Jochen

Und

Jochen

viele Dinge sind auch Basisinfrastruktur für ganz

Jochen

viele andere Sachen. Also

Jochen

er hat Jungle Rest Framework irgendwann mal geschrieben.

Jochen

Dann hat er irgendwann Jungle Rest Framework

Jochen

quasi abgegeben oder

Jochen

macht es, weil

Jochen

ehrlich gesagt ist es auch mehr oder weniger fertig, da ändert sich

Jochen

schon seit einigen Jahren nicht mehr viel

Jochen

und hat dann

Jochen

etwas gemacht, wollte aber schon

Jochen

APIs weitermachen und hat dann API-Star

Jochen

mal ins Leben gerufen

Jochen

und die Idee dabei war halt auch

Jochen

so ein bisschen irgendwie

Jochen

das so zu machen, dass es halt von der Kommandozeile

Jochen

ausgeht plus irgendwie im Web,

Jochen

dass es halt alles das gleiche Interface hat mit Typen

Jochen

dran und nativ Async

Jochen

und all sowas und

Jochen

genau

Jochen

Sebastian Ramirez meinte dann auch so,

Jochen

ja, das war eigentlich schon genau das, was ich gerne gehabt hätte.

Jochen

Und dann hat er aber

Jochen

Tom Christie irgendwie angefangen, Starlet zu entwickeln.

Jochen

Also

Jochen

auch ein Web-Framework, aber sehr

Jochen

Basis-Infrastruktur-mäßig, sehr

Jochen

auf Async fokussiert und gar nicht mehr unbedingt

Jochen

im API-Bereich. Und AP Star

Jochen

ist dann eher zu so einem Schema-

Jochen

Validierungstool geworden.

Jochen

Und das heißt, das Ding, was

Jochen

er am besten fand eigentlich oder am besten zu seinen

Jochen

Anforderungen passte, hat plötzlich

Jochen

den Fokus gewechselt und was anderes gemacht.

Jochen

Und dann dachte er so, oh Mist, jetzt gibt's

Jochen

nix mehr. Jetzt muss ich irgendwie,

Jochen

ich wollte es wirklich vermeiden, aber jetzt muss ich es vielleicht doch selber

Jochen

in ein Webfile beschreiben. Und dann hat er das halt

Jochen

gemacht und dabei ist FastAPI

Dominik

rausgekommen. Und dabei hat er, glaube ich, relativ viel

Dominik

auch noch an Pidentic mit rumgewerkelt,

Jochen

wenn ich das so gesehen habe. Ja, genau. Pidentic

Jochen

ist halt eine der Geschichten,

Jochen

die sonst nirgendwo drin sind, die halt da mit

Dominik

dabei sind. Genau, weil halt so Erweiterung

Dominik

von Data Classes halt, dass man so ein bisschen

Dominik

Typen und Modelle hat,

Dominik

dann direkt mit Validierung und so. Aber darauf

Dominik

gehen wir gleich ein bisschen genauer ein, würde ich sagen.

Dominik

Also wir haben gesagt, das ist jetzt ASCII,

Dominik

hast du gesagt, das ist Async.

Dominik

Was ist denn da eine ASCII-Applikation

Dominik

überhaupt nochmal?

Dominik

Die immer

Dominik

die Fragen.

Dominik

Ja, also

Jochen

ganz lange der Standard für die Kommunikation

Jochen

zwischen irgendwie dem

Jochen

Applikationsserver, der halt

Jochen

irgendwie tatsächlich Requests annimmt und dann

Jochen

irgendwie, also die Kommunikation mit dem Browser

Jochen

tatsächlich macht. Das machst du ja normalerweise

Jochen

nicht, wenn man irgendwie eine Web-Applikation

Jochen

schreibt, sondern

Jochen

das nennt sich

Jochen

WSGI oder WSGI oder

Jochen

weiß ich nicht, wie man das am besten ausspricht, Micro-Whisky.

Jochen

Ist das nicht dasselbe wie

Jochen

What you see is what you get, Whisky?

Jochen

Ja.

Jochen

Das Ding,

Jochen

das ist auch super

Jochen

einfach. Also eigentlich ist das alles total trivial.

Jochen

Aber das Gute, dass es halt ein Standard ist,

Jochen

dass es mehr oder weniger eine Funktion,

Jochen

die man halt implementieren muss. Und wenn man das

Jochen

tut, ist man halt ein WSGI

Jochen

Server. So, das ist der Grund,

Jochen

warum man da jetzt nochmal irgendwas anderes brauchte.

Jochen

Also der kriegt im Wesentlichen ein Request,

Jochen

kommt rein, Response geht raus. Das ist es eigentlich.

Dominik

Das ist was man klassisch aus HTTP kennt.

Dominik

Ja,

Dominik

genau, aber

Jochen

genau. So, jetzt ist aber

Jochen

ja, Dinge haben sich

Jochen

geändert und man will jetzt eventuell auch

Jochen

solche Dinge machen können wie WebSockets

Jochen

oder halt, man hat halt eventuell langlaufende

Jochen

Requests.

Jochen

Und wenn man viel parallel machen,

Jochen

dieses Async-Zeugs. Genau, man möchte halt

Jochen

nicht nur einmal eine Response zurückgeben

Jochen

können, sondern vielleicht halt auch irgendwie

Jochen

wieder was zurückbekommen,

Jochen

dann wieder was rausreichen und

Jochen

mit Co-Routinen geht das ja super eigentlich.

Jochen

Und genau,

Jochen

dann gibt es, aber es gab

Jochen

keinen Standard und dann

Jochen

irgendwann, glaube ich, Andrew

Jochen

Godwin, auch bekannter Django

Jochen

Entwickler, der hat

Jochen

das Migrations-Ding gebaut und so.

Jochen

Der hat dann irgendwann in diesen

Jochen

ASGI-Standard geschrieben,

Jochen

um halt das dann halt

Jochen

möglich zu machen, dass man da halt einen Standard hat für alle.

Jochen

Und da ist es im Grunde so,

Jochen

es ist auch wieder super minimal, aber

Jochen

man hat halt auch eine Funktion, die man implementieren muss

Jochen

und die kriegt im Grunde eine Receive- und eine Send-Funktion

Jochen

und halt, ich weiß gar nicht, muss ich nachgucken.

Jochen

Und Scope. Und Scope, genau.

Jochen

Ja, aber

Jochen

da geht das halt. Da kannst du halt dann auch wieder Sachen

Jochen

nochmal empfangen und

Jochen

dann irgendwas machen und dann wieder was rausschicken und

Jochen

bist halt nicht in diesem Request-Response-Ding

Jochen

so drin.

Jochen

Ja, und genau.

Jochen

Ja, und FastAPI

Jochen

ist halt ein SGI-Server.

Jochen

Und dann gibt es halt eine gute Implementation

Jochen

darunter, das ist UV-Con.

Jochen

Also UV-Loop,

Jochen

da hatten wir es schon. Also eigentlich ganz

Jochen

unten drunter ist LibUV.

Jochen

Das ist das Ding, was halt auch unter Node.js drunter liegt.

Jochen

Aber ich glaube, da haben wir auch schon

Jochen

eine Episode mal drüber gesprochen.

Dominik

Ja, vielleicht einmal doch mal kurz erklären, weil nicht alle Leute haben ja alle

Jochen

Episoden gehört. Das ist halt eine Bibliothek,

Jochen

weg abstrahiert, die dieses

Jochen

Betriebssystem, Syscalls, weg abstrahiert,

Jochen

die man halt benutzen muss, um halt schnell

Jochen

I.O. zu machen.

Jochen

Genau. Und das ist halt unterschiedlich

Jochen

je nachdem, was man verwendet. Unter Windows

Jochen

TCP-Completion-Ports oder was auch immer

Jochen

da verwendet, keine Ahnung.

Jochen

Unter FreeBSD ist es halt

Jochen

KQ

Jochen

und

Jochen

Linux ist es halt E-Poll

Jochen

und das Ding bietet halt

Jochen

ein Standard-Interface für all diese Dinge.

Jochen

SelectPol, ich weiß nicht, was da noch alles drin ist.

Jochen

Und das kann man halt benutzen,

Jochen

da muss man sich nicht drum kümmern, auf welchem Betriebssystem

Jochen

man läuft und so.

Jochen

Und genau, das

Jochen

und Node.js hat

Jochen

das halt

Jochen

relativ, hat diese

Jochen

Entwicklung da getrieben, weil die haben das halt dann

Jochen

stark verwendet.

Jochen

Und ja,

Jochen

mit den

Jochen

AsyncIO-Primitiv

Jochen

Keyword-Geschichten in Python

Jochen

bot es sich dann halt ja auch an, da irgendwie sowas

Jochen

zu verwenden und da gab es

Jochen

halt die schnelle Event-Loop-Implementation mit

Jochen

UV-Loop von den Leuten, die jetzt HDB gemacht haben

Jochen

und dann so und

Jochen

auf UV-Loop drauf sitzt halt

Jochen

UV-Corn, also quasi

Jochen

so wie G-Unicorn halt als Applikations-

Jochen

Server, der dann halt Web-Geschichten macht

Jochen

und dann halt UV-Loop nutzt, um halt schnell

Jochen

I.O. machen zu können und das ist auch

Jochen

wieder ein Projekt von Tom Christie.

Dominik

Okay, ja, da sind die Katzen mit dem Schwanz.

Dominik

Genau und

Jochen

darüber gibt es halt dann nochmal so ein minimales

Jochen

Web-Framework, was halt

Jochen

dann nochmal die ganzen

Jochen

Routing-Request-Response-Geschichten abstrahiert

Jochen

und das ist halt dann Starlet.

Jochen

Ja, und

Jochen

FastAPI benutzt Starlet.

Jochen

Und, ja,

Jochen

genau.

Jochen

Aber die Idee ist im Grunde, viele Sachen zu kombinieren,

Jochen

Pydentic zu kombinieren mit Type-Annotationen,

Jochen

mit einem

Jochen

Dependency-Injection-Geschichte.

Jochen

Parameter und sowas.

Jochen

Und

Jochen

ja, halt Starlet als

Jochen

quasi schnell,

Jochen

für das schnell unten drunter.

Jochen

Und ASGI.

Jochen

Und ja, das

Jochen

ist eigentlich eine ziemlich coole Kombination

Jochen

irgendwie. Man kann jetzt sagen, na gut,

Jochen

ich habe mir jetzt den FastAPI-Source-Code

Jochen

auch so ein bisschen angeguckt mal.

Jochen

Also ganz oft sieht man schon

Jochen

so irgendwie, naja, er importiert

Jochen

halt Sachen von Starlet und das war's.

Jochen

Das ganze WebSocket-Modul in FastAPI.

Jochen

ist halt irgendwie vom Starlet-Import-Websocket fertig.

Jochen

Ja gut, also abstrahiert halt, ne?

Dominik

Und dann einen anderen abgibt vielleicht an ein, zwei Stellen und

Dominik

wird halt gut integriert. Genau.

Jochen

Das, was man da haben möchte, ja. Und es ist halt, die Dokumentation

Jochen

ist halt schön geschrieben und so. Er hat das dann irgendwann mal

Jochen

in Reddit, auf irgendeinem

Jochen

in einer Reddit-Group oder so angekündigt,

Jochen

irgendwie, FastAPI. Und die

Jochen

Reaktionen waren da so ein bisschen geteilt.

Jochen

Also ich finde das

Jochen

super, was er gemacht hat, aber

Jochen

auf Reddit wurde dann halt irgendwie

Jochen

so, ne? Also diese Dokumentation

Jochen

und da sind so viele Emojis und das

Jochen

ist alles so mit diesen GIFs.

Dominik

Ja, da waren die ganzen, ganz seriösen

Dominik

Jungs, die alle die ganze Zeit keinen

Dominik

Humor haben und im Keller sitzen, die fanden das überhaupt nicht witzig.

Dominik

Die sagen so, das ist so gebraucht,

Jochen

war ein Verkäufer-Style, das finde ich nicht gut,

Jochen

da lese ich gar nicht weiter.

Dominik

Also ich finde das super, weil ich finde die Dokumentation

Dominik

tatsächlich sehr eingängig, auch

Dominik

für Leute geschrieben, die mit Python noch nicht so viel zu tun

Dominik

hatten und gerade mit

Dominik

Web-Krams und ich glaube, da gibt es relativ

Dominik

gute Hinweise und so Querlings, man kann es wirklich,

Dominik

wenn man anfangen möchte, auch mit Web-Frameworks,

Dominik

finde ich das gar nicht so schlecht, dass man sich das damit mal

Dominik

anguckt und ich glaube gerade für so Einsatzzwecke

Dominik

wie man macht eigentlich so Data Science

Dominik

oder sowas. Ja, man braucht

Jochen

vielleicht gar keine Webseite, sondern halt eher eine

Jochen

API oder so, dann ist das halt schon super.

Dominik

Ja, und dann liest man das halt durch, man lernt da relativ viel

Dominik

und das Tutorial ist echt nett und angenehm

Dominik

zu lesen und nimmt einen sehr an die Hand,

Dominik

auch wenn es so wirklich ein Graufahrenverkäufer ist.

Dominik

Also man muss ja nicht immer einen Neuwagen kaufen,

Dominik

das ist ein bisschen teuer und auch aus Sustainability-Gründen

Dominik

nicht immer so super.

Dominik

Ja.

Dominik

Nee, also ja,

Dominik

im Grunde ist

Jochen

eine wirklich schicke Geschichte

Jochen

und überhaupt, ich würde mal sagen, also was daran

Jochen

halt neu, also es hat sich ja

Jochen

es gibt es erst seit 2019 ja und das ist

Jochen

jetzt schon, weiß ich nicht

Jochen

sehr, sehr verbreitet, keine Ahnung wie verbreitet

Jochen

aber in den entsprechenden Umfragen ist es halt

Jochen

irgendwie

Jochen

nicht mehr viel hinter Django und Flask

Jochen

sondern wie viele Leute verwenden das

Jochen

und das

Jochen

ich glaube einer der Gründe, warum das

Jochen

so ist, ist einmal, dass es halt

Jochen

viele Dinge, also wo bei anderen Geschichten was

Jochen

gefehlt hat, sind halt da mit drin.

Jochen

Und dann auch,

Jochen

dass

Jochen

diese

Jochen

Developer-Experience-Geschichte da so betont

Jochen

wird. Das ist auch etwas, was man jetzt in letzter Zeit

Jochen

immer mehr sieht. Von früher

Jochen

kenne ich das so nicht.

Jochen

Da musste man doch alles von Hand und selber und es war alles

Jochen

schön und hässlich.

Jochen

Wenn es kryptisch ist und schwer zu installieren,

Jochen

das war so ein bisschen...

Jochen

Ja, deswegen macht man das.

Jochen

Ja, genau. Du musst ja erstmal beweisen, dass du manns genug bist

Jochen

und hier das Shred aus

Jochen

zum Stein ziehen, bevor du irgendwie

Jochen

so und dass man das den Entwicklern

Jochen

einfach macht und dass die

Jochen

da irgendwie einfach eine gute Experience...

Jochen

Ja, das ist irgendwie so ein Ansatz,

Jochen

also früher

Jochen

wäre das Leuten fremdartig vorgekommen,

Jochen

indem man sich sowas... Aber heute ist das

Jochen

irgendwie... Heute, ja, Zeiten haben sich geändert.

Jochen

Ja, so will man das wahrscheinlich auch machen, weil man

Dominik

keine Lust hat, die ganze Zeit nur im Keller rumzusitzen.

Dominik

Gut ist, wenn die Leute aus dem

Dominik

Business noch erwarten, dass es doch genauso lange dauert wie früher.

Dominik

Ja, ja, ja, gut.

Jochen

Ich meine, es ist halt die Frage, ob einem das wirklich

Jochen

so wahnsinnig viel hilft, aber

Jochen

ich würde schon sagen, ja.

Jochen

Aber

Jochen

es ist auf jeden Fall irgendwie eine neue

Jochen

Geschichte und ich finde das ja auch im Prinzip gut,

Jochen

dass man da so, dass das halt irgendwie alles ein bisschen

Jochen

angenehmer wird also und nicht so

Jochen

stachlig ist.

Jochen

Ja, vielleicht müssen wir mal kurz darüber reden,

Dominik

wie der das macht. Also zum Beispiel über Type Annotations

Dominik

geht halt da ganz viel an den Guten dran.

Dominik

Parameter kannst du übergeben und kannst direkt

Dominik

sagen, okay,

Dominik

das Query enthält jetzt ein

Jochen

Integer oder sowas. Ja, also eine

Jochen

Geschichte, das hatte mich am Anfang auch so ein bisschen

Jochen

verwirrt.

Jochen

Die Query würde ich jetzt so intuitiv

Jochen

sagen, ich weiß aber nicht, ob es richtig ist, keine Ahnung.

Jochen

Das hatte

Jochen

mich am Anfang, da wurde ich dann nach der, also klar,

Jochen

man schreibt jetzt, also man hat auch immer

Jochen

die Dinger, die man halt in FastAP

Jochen

schreibt, sozusagen

Jochen

die Endpunkte,

Jochen

was man sagen möchte, sind halt Funktionen

Jochen

und die Funktionen haben halt Parameter und

Jochen

dann geht da was rein, also kommt ein Request mehr oder

Jochen

weniger rein und es geht eine Response raus.

Jochen

Man sagt jetzt nicht unbedingt Request,

Jochen

beziehungsweise bei Django wäre es

Jochen

halt so, da kommt ein Request rein, geht eine Response raus

Jochen

und dann popelt man sich sozusagen

Jochen

aus dem Request die ganzen Sachen halt raus,

Jochen

die man so braucht. Also aus dem,

Jochen

da gibt es dann Request.get oder Request.post

Jochen

oder

Jochen

man nimmt dann halt den Body und dann gut,

Jochen

wenn man jetzt sowas wie REST-Framework

Jochen

oder Formulare nimmt an, dann natürlich

Jochen

eine ganze Menge ab. Oder Class-Based-Views oder sowas, ja.

Jochen

Ja, aber prinzipiell

Jochen

muss man sich den, ist der Teil,

Jochen

man poolt sich den Kram

Jochen

da selber halt raus, so.

Jochen

Und das ist bei FastAPI halt nicht so.

Dominik

Und das passiert halt sehr viel

Dominik

von dieser Magie direkt,

Dominik

wenn du die Type-Annotation richtig

Dominik

dran schreibst, dass halt du...

Jochen

Man schreibt halt Type-Annotation in die Parameter und dann

Jochen

kommen die Daten

Jochen

irgendwie magisch da rein.

Dominik

Ja, also wenn man besonders gut wird, wenn man da

Dominik

zu Pidentic-Modelle verwendet als

Dominik

Parameter-

Dominik

Annotation, weil dann wird halt

Dominik

die Validierung von den Objekten, die da beispielsweise

Dominik

als JSON reinkommen oder so,

Dominik

direkt mit Pidentic durchgeführt

Dominik

und das ist sehr cool, weil halt die ganzen Validierungen

Dominik

dabei sind, die kann man an den Pidentic reinschreiben,

Dominik

die passieren halt automatisch,

Dominik

die Type-Konvertierung passiert automatisch,

Dominik

du hast in den Objekten direkt die richtige

Dominik

Datenstruktur vorliegen,

Dominik

du kannst auch das mit, weiß nicht, sogar mit

Dominik

Daytimes machen, deinen eigenen Parser dafür in dieses

Dominik

Pidentic-Modell integrieren, wie du das haben willst

Dominik

und kriegst direkt die nutzbaren

Dominik

Python-Objekte da raus, die du brauchst.

Dominik

Das ist schon sehr, sehr, sehr, sehr nett.

Jochen

Ja, tatsächlich,

Jochen

Also ich fand es halt am Anfang so, ich habe das nicht

Jochen

direkt verstanden, dass das so ist und das hat

Jochen

mich irgendwie eine Zeit lang verwirrt,

Jochen

weil ich dachte so, okay, wo gebe ich denn jetzt an,

Jochen

dass das jetzt die Get-Parameter sind

Jochen

oder wo sage ich denn jetzt, dass es im Body

Jochen

vorkommt? Und tatsächlich tut man das halt nicht,

Jochen

sondern man schreibt das halt da in die

Jochen

Tube-Annotation und dann

Jochen

magie, findet fast irgendwie

Jochen

selber raus, ob das jetzt in den Cookies war oder

Jochen

ob das halt im Body von dem Request

Jochen

war oder ob das irgendwie in den

Jochen

Get-Parametern war.

Jochen

Und ja,

Jochen

das funktioniert eigentlich auch immer irgendwie ganz gut.

Jochen

Das ist echt super, ja.

Dominik

Also was man dann, also vielleicht an der Stelle

Dominik

nochmal ganz kurz, würde ich gerne eingehen

Dominik

auf SQL-Model, weil

Dominik

man diese Pidentic-Modelle, die man dann halt

Dominik

netterweise geschrieben hat, mit SQL-Model,

Dominik

das ist auch ein Projekt von Sebastian Ramirez,

Dominik

ist noch relativ am Anfang, also noch nicht so ganz

Dominik

produktionsreif, da waren

Dominik

noch so ein paar Breaking Changes drin, aber

Dominik

da kann man einfach diese Pidentic-Models

Dominik

direkt in der Datenbank speichern.

Dominik

Und der nimmt das dann direkt und zum Beispiel mit

Dominik

dem SQL-Alchemy drunter,

Dominik

Dann wird es halt direkt in die Datenbank geschrieben, die man da angeschlossen hat, was halt auch sehr angenehm ist, weil man halt diese Duplikation von der ganzen Logik nicht mehr hat, sondern halt einfach wie bei, wenn man das vielleicht von Dango gewohnt ist so ein bisschen, nur so Modelle schreibt und hat dann direkt seine Datenbankadaptation und die Validierung damit drin.

Jochen

Ja, und das ist halt dann quasi das Gleiche für Datenbank, man schreibt halt, was das ist, quasi einmal hin und dann gilt das halt für Datenbank, also es wird dann halt ein Datenbank-Schema draus generiert, also es wird halt auch das Schema für die API draus generiert und das ist halt in beiden Fällen gleich und das ist natürlich schon nett, also man kann sich da vielleicht schon eine ganze Menge Schreibarbeit sparen.

Dominik

Genau, man kann auch dann tatsächlich, das ist auch

Dominik

in FastAPI mit drin, direkt das

Dominik

Schema daraus rennen lassen.

Dominik

Als OpenIP

Dominik

kompatibles

Dominik

JSON oder so, das ist direkt mit drin.

Dominik

Muss man eigentlich eine Funktion aufrufen, dann ist das da.

Dominik

Auch sehr schick.

Dominik

Ich mache dabei, also mit SQL Academy

Dominik

die Migration ist immer mit Alembic.

Dominik

Damit ich so ein bisschen so eine Art Tango-mäßiges

Dominik

Migration-System habe, das heißt,

Dominik

kannst du dann sowas machen wie Migrate schreiben

Dominik

oder so. Das funktioniert ein bisschen anders.

Dominik

Das sind halt

Dominik

andere Formen von Migrationen ran, aber die schreibt man

Dominik

eigentlich nur in eine Datei an, da kann man relativ viel anpassen

Dominik

und der macht dann auch relativ automatisch das

Dominik

Vor- und Zurückspulen.

Dominik

Das finde ich ganz schick.

Dominik

Ja, aber gut, das ist halt

Jochen

dann irgendwie, um diese Sachen muss man sich dann halt

Jochen

selber so ein bisschen kümmern. Ja, genau, das ist halt das, was

Dominik

FASAPI nicht mitliefert im Vergleich zu Dango oder sowas,

Dominik

aber das geht eigentlich auch ganz gut, wenn

Jochen

man es dann reinbaut. Ja, also was

Jochen

den Unterschied angeht, also

Jochen

wir haben ja schon gesagt, irgendwie ist es so

Jochen

ähnlich wie Flask, aber

Jochen

also ich würde sagen, der Hauptunterschied ist eben, dass

Jochen

bei Flask ist, man kriegt

Jochen

die Werte eher relativ

Jochen

roh und man hat eben nicht

Jochen

weiß, wenn man jetzt in Fast

Jochen

API das schon annotiert hat mit

Jochen

das ist ein Integer oder so, dann kriegt man halt ein Integer.

Jochen

Und in Flask ist das halt nicht so.

Jochen

Genau. Das ist halt der

Jochen

genau, dann diese Pidentic-Geschichten, das

Jochen

könnte man in Flask vielleicht auch so machen, aber das

Jochen

muss man halt selber machen, das ist halt nicht integriert.

Jochen

Ja, das ist

Jochen

und vielleicht auch

Jochen

noch etwas, was halt

Jochen

interessant ist, wenn man gerade so

Jochen

Data-Science-Geschichten macht oder halt

Jochen

Dinge, die so ein bisschen anders sind als

Jochen

in Django, hast du halt irgendwie eine

Jochen

relationelle Datenbank darunter, weil der ORM ist halt so,

Jochen

wenn man den ORM nicht verwenden möchte,

Jochen

dann macht es eigentlich gar nicht so viel Sinn, Django zu verwenden,

Jochen

weil das ist halt der Hauptteil von Django.

Jochen

Und

Jochen

wenn man jetzt irgendwie eine MongoDB

Jochen

verwenden will oder so, oder irgendeine andere

Jochen

NoSQL-Geschichte, dann ist das halt mit

Jochen

Django eher so, das geht auch,

Jochen

aber muss man halt,

Jochen

es geht nicht über die Modelle.

Dominik

So ein modularer Teil. Also wenn man jetzt das mit SQL-Model zum Beispiel verwendet, habe ich ja gerade versucht zu erzählen, dann genau diese Revision, die man halt hat, die kann man ja vor- und zurückspulen und da kann man sicher alles Mögliche reinhängen.

Dominik

Naja, NoSQL hat man auch nicht.

Dominik

Ja, Moment, aber was cool ist, du kannst aus diesen Pydentic-Modellen, die du halt hast, kannst du auch erzeugen aus einer OpenAPI, die du halt hast, wenn du eine OpenAPI-JSON hast oder sowas.

Jochen

Achso, kannst du dir direkt die Pydentic-Modelle...

Jochen

Identik-Modelle bauen lassen.

Dominik

Und so hast du dann halt dann die Sachen direkt, die du dann auch

Dominik

in eine Datenbank wegschreiben willst.

Dominik

Das ist halt auch schon sehr, sehr nett.

Dominik

Klar, man muss sich

Dominik

dann halt trotzdem, wenn man das jetzt nicht relational ablegen

Dominik

will, dann irgendwie eine andere Integration nehmen.

Dominik

Ja, aber sowas geht halt

Jochen

prinzipiell. Während das mit Django eigentlich nicht wirklich

Jochen

geht, kannst du halt in FastAPI,

Jochen

ob du jetzt irgendwie eine relationale Datenbank verwendest

Jochen

oder halt irgendwas, oder MongoDB oder so,

Jochen

das geht beides.

Jochen

Und zwar ist es nicht so, dass man das

Jochen

irgendwie, dass man dann gegen

Jochen

das Framework arbeitet, wenn man jetzt irgendwie NoSQL

Jochen

verwendet mit FastAPI.

Jochen

Ja, das finde ich sehr, sehr schick.

Jochen

Genau.

Jochen

FastAPI selber benutzt

Dominik

MakeDocs, MKDocs, ist auch sehr schick.

Dominik

Ja, weißt du, von wem das ist?

Dominik

Nein.

Dominik

Ich müsste jetzt einen von

Dominik

den Namen sagen, die wir jetzt gerade eben schon erwähnt haben.

Dominik

Von Chris, die ist auch...

Dominik

Ja, okay, tatsächlich.

Jochen

Ja, das ist echt erstaunlich, der hat irgendwie, ja,

Jochen

genau.

Dominik

Ja, auch ganz schick. Ich habe dazu

Dominik

einen kleinen Skeleton tatsächlich mal geschrieben, so für die kleinen

Dominik

Anfangssachen. Da ist so ein bisschen viel vielleicht schon drin.

Dominik

Ein bisschen rumgespielt. Können wir vielleicht

Dominik

mal verlinken. Vielleicht mag ja jemand

Dominik

den direkt benutzen, wenn er es will. Also ist das nichts

Dominik

Tolles, aber ein bisschen aus.

Dominik

Ich habe damit noch nicht so viel gemacht.

Jochen

Ich habe mir aber vorgenommen, dass ich das mal

Jochen

tun muss, weil...

Jochen

Ich habe so ein bisschen Django versucht zu enthinken.

Dominik

Das ist vielleicht nicht immer ganz so cool, aber Typer ist da auch

Dominik

dabei. Also so Commands-mäßig.

Jochen

Ja. Was könnt ihr mir denn noch so alles

Jochen

erzählen über FastAPI? Ja, also vielleicht

Dominik

noch mal so ein bisschen, wie das funktioniert mit den Datentypen

Dominik

und diesen Dependency-Injection-Systemen.

Dominik

Man kann ja auch damit

Dominik

sowas machen wie Permissions oder sowas.

Dominik

Wenn du sagen kannst, bestimmte Dinge müssen enthalten

Dominik

sein, wie Authentifizierung oder so.

Dominik

Ja, also diese Magie,

Dominik

dass halt irgendwie

Jochen

man einfach nur die Annotationen

Jochen

hinschreibt und dann die Werte so richtig

Jochen

bekommt.

Jochen

Depends on us.

Jochen

Das sind halt,

Jochen

das funktioniert über diese

Jochen

Path-Operations-Geschichten

Jochen

und das ist halt auch irgendwie

Jochen

über Dependency Injection

Jochen

wird das halt gemacht. Und du kannst aber auch das

Jochen

selber definieren, genau. Da musst du halt nur irgendwie

Jochen

schreibst halt Depends und dann übergibst du halt ein

Jochen

Callable und das kriegst du dann halt den ganzen Kram.

Jochen

Da kannst du halt Code wiederverwenden,

Jochen

der halt irgendwie, weiß ich nicht, irgendwas

Jochen

eben ein OAuth-Token irgendwie

Jochen

validiert oder so. Genau, genau.

Jochen

Oder halt irgendwas anderes macht.

Jochen

An der Stelle vielleicht.

Jochen

Datenbankverbindung reinreicht oder so.

Dominik

Was ist denn ein Dependency Injection?

Dominik

Oh je, das ist auch so ein Ding.

Jochen

Genau, in der letzten Episode hat ja schon jemand gesagt,

Jochen

Thomas hat das...

Jochen

Weiß ich nicht, ob man das erklären kann.

Jochen

Das ist halt auch so ein etwas schwieriges

Jochen

Konzept. Also im Grunde...

Dominik

Ist das ein Pattern? Kann man das so sagen?

Dominik

Ja, ist irgendwie

Dominik

ein Design-Pattern, kann man sagen.

Dominik

Also wie man ein Objekt in eine Klasse reingibt, ohne

Dominik

dass man das jetzt mal neu definiert?

Jochen

Nee, ist eher so, dass du das halt umdrehst.

Jochen

Sozusagen, also Dependency

Jochen

Injection ist ein bisschen

Jochen

sozusagen das Ding, wie man

Jochen

Dependency Inversion implementiert.

Jochen

Also du willst halt nicht, also was du halt

Jochen

nicht machen möchtest vielleicht, ist

Jochen

in deiner Funktion, die

Jochen

halt irgendwie Request-Response

Jochen

macht, irgendwie ein Datenbank-Ding

Jochen

importieren und dann

Jochen

was noch machen. Also

Jochen

weil du dann ja damit hängst.

Jochen

Genau. Und dann, was passiert jetzt eigentlich,

Dominik

wenn du testest? Okay, das heißt, du musst dich mit reingeben,

Dominik

da ist dann alles abstrahiert in diesem Ding.

Jochen

Genau. Und jetzt willst du das aber auch

Jochen

nicht explizit irgendwie da rein,

Jochen

weil du rufst ja gar nicht, du bist ja gar nicht

Jochen

derjenige, der das aufruft, den

Jochen

Funktion, die halt irgendwie

Jochen

Request-Response macht, sondern das wird ja

Jochen

irgendwie aufgerufen. Das heißt,

Jochen

du übergibst es nicht wirklich, sondern du injectest es.

Jochen

Es wird halt irgendwie automatisch...

Dominik

Depends on database access oder sowas. Genau.

Jochen

Und damit sagst du halt eigentlich, dass du das gerne

Jochen

injectest hättest, sozusagen an der

Jochen

Stelle. Ja. Und dann

Jochen

kannst du das halt in Tests halt auch ändern.

Jochen

In Tests kannst du dann einfach sagen,

Jochen

in der Applikation,

Jochen

in der Fast API, also dem

Jochen

Hauptapplikationsobjekt, kann man irgendwie sagen,

Jochen

Dependency Override,

Jochen

und dann kannst du halt definieren,

Jochen

was da injectet werden soll.

Dominik

Und sagst halt, Depends on Database bedeutet jetzt,

Dominik

gib mir einfach ein anderes Objekt

Dominik

oder eine Testdatenbank. Genau, und dann kannst du halt

Jochen

die Testdatenbank reinreißen oder du reißt halt

Jochen

irgendeine Memory Repository rein.

Jochen

Genau, und

Jochen

ja, das ist halt sozusagen eine Methode,

Jochen

um diese Sachen

Jochen

halt voneinander so zu entkoppeln,

Jochen

dass du halt nicht, weil, also

Jochen

eingekoppelt wäre es halt, wenn du von irgendwas erbst,

Jochen

oder wenn du halt irgendwie das importierst oder so,

Jochen

dann hängst du halt direkt davon ab

Jochen

und wenn du es halt so indirekt reingereicht

Jochen

bekommst, dann bist du halt so

Jochen

ein bisschen losgelöst.

Jochen

Ja, und das ist

Jochen

halt auch in Flask alles ein bisschen schwieriger,

Jochen

das ist halt schon elegant gemacht, wobei

Jochen

ehrlich gesagt, also ich habe mir den, ich habe mir

Jochen

kurz den Code angeguckt,

Jochen

also das Konzept ist relativ

Jochen

elegant, aber die Implementation ist ein bisschen

Jochen

ne. Also

Jochen

da gibt es halt in Flask API so diese

Jochen

Dependencies-Module-Package

Jochen

und dann der Hauptinhalt

Jochen

der Implementation liegt in Utils.py

Jochen

und das

Jochen

war schon

Jochen

schwer zu lesen, also

Jochen

ja, aber

Jochen

es funktioniert einfach.

Jochen

Also ich finde das, du hast schon recht,

Dominik

wie hast du das eben genommen mit DevFriendly oder sowas, also ich finde

Jochen

das sehr angenehm. Ja, ja, es ist genau, es ist halt

Jochen

darauf optimiert, dass man, also

Dominik

es ist halt anders. Man kann schnellere Ergebnisse erzeugen, wenn du irgendwie

Dominik

JSON rauspowern willst und hast nicht so viel

Dominik

Aufgaben, dann kannst du relativ schnell

Dominik

Erfolge damit erzielen, finde ich. Ja, ja, absolut.

Jochen

Es ist halt darauf optimiert, dass du als

Jochen

Entwickler, der das benutzt, um irgendwie ein Ziel zu erreichen,

Jochen

dass du da gut zum Ziel kommst.

Jochen

Und ja, diese

Jochen

anderen Dinge, also ich finde das ganz interessant,

Jochen

wenn du zum Beispiel Starlet Sourcecode anguckst,

Jochen

also die Sachen, die Tom Christie so macht, die sind halt

Jochen

alle super poliert innen

Jochen

drin, ja. So ein bisschen wie bei

Jochen

Apple, wenn man Apple Geräte aufschraubt, die sind auch

Jochen

innen hübsch. Also da sind auch innen

Jochen

die Sachen, ja.

Dominik

Man könnte ja mal aufschrauben, reingucken.

Dominik

Das ist nicht irgendwie so ein Kabelsalat.

Jochen

Es gibt ja bei anderen Sachen, da schraubst du das halt so auf,

Jochen

dann nimmst du die Abdeckung ab und dann machst du

Jochen

platzt da so ein

Jochen

Gedärmen-Kabel-Ding draus.

Jochen

Das ist, wenn du Apple-Dinger hast, das ist halt super ordentlich

Jochen

und alles. Und das ist halt,

Jochen

wenn du irgendwie Starlet dir den Source-Code

Jochen

anguckst, der ist halt auch so. Das ist halt irgendwie

Jochen

alles total, so wenn man

Jochen

die Fast-API-Source-Code anguckt,

Jochen

das ist halt schon so,

Jochen

da hängt dann eher so, da hängt dann

Jochen

irgendwie Dinge von der Decke und, aber...

Dominik

Also ich hab zum Beispiel in meinem Computer, wenn ich den aufschraube,

Dominik

da hab ich auch so ein paar LEDs reingebaut, das hast du.

Dominik

Ja, genau, ist halt auch

Dominik

so ein bisschen eine Typfrage.

Dominik

Die sind auch unnötig halt, die braucht man halt nicht.

Jochen

Ob man das jetzt hässlich findet oder hübsch ist.

Jochen

Wichtig ist halt, dass die Luftzufuhr

Dominik

vernünftig ist, dass es schön kühl ist und dass es

Dominik

schnell ist.

Dominik

Ja, genau.

Jochen

Aber auf der anderen Seite wiederum

Jochen

zum Beispiel, also auch das

Jochen

wiederum, das ist halt unterschiedlich.

Jochen

Auch der Source Code hat kaum Kommentare

Jochen

oder so.

Jochen

Dockstrings gibt es fast

Jochen

gar nicht. Ich habe vielleicht zwei, drei Stellen gefunden,

Jochen

welche drin sind und Kommentare gibt es eigentlich auch nicht.

Jochen

Das bin ich auch schon ein paar

Dominik

Mal drüber gestolpert, ich muss mal gucken. Aber dafür

Dominik

sind halt die Type Annotations

Dominik

so aussagekräftig schon

Dominik

oft.

Jochen

Ja, aber auch da, das ist halt so ein bisschen,

Jochen

ja, sie sind aussagekräftig und ja,

Jochen

wenn du das im Editor mit, der das unterstützt,

Jochen

halt benutzt, dann ist das halt,

Jochen

dann ist das für dich halt total cool.

Jochen

Ehrlich gesagt, aber den Code einfacher

Jochen

zu lesen, macht das jetzt nichts.

Dominik

Ja, ich muss auch sagen, den Code selber, wenn ich da reingucke,

Dominik

muss ich ein bisschen suchen, was macht der denn jetzt.

Jochen

Geht das alles über Keyword-Only-Argumente?

Jochen

Was ja auch irgendwie, also es ist klar,

Jochen

dass das halt für jemanden, der eine IDE benutzt,

Jochen

vielleicht besser so ist, wenn er halt Funktionen aufruft

Jochen

oder Dinge, die halt Keyword-Only sind.

Jochen

Also das heißt, alle Funktionen und Methoden fangen an

Jochen

mit irgendwie irgendwas, Stern, Komma irgendwie.

Jochen

Aber für jemanden, der so, von früher hätte man gesagt,

Jochen

oh mein Gott, was ist das denn?

Jochen

Das ist ja schrecklich hässlich.

Jochen

Warum nicht einfach hinschreiben, was man,

Jochen

und aber

Jochen

also es ist halt so ein bisschen

Jochen

also du verbietest ja mit diesem Stern

Jochen

erstmal, dass es irgendwelche Argumente gibt, außer den

Jochen

Keyword-Dingern. Auf der anderen Seite

Jochen

ist es natürlich so, wenn ein IDE dann

Jochen

halt anbieten kann, was du alles auswählen kannst

Jochen

an Dingen, die du da reingibst, ist es natürlich für dich

Jochen

irgendwie angenehmer. Also sozusagen

Jochen

deine Entwickler-Experience,

Jochen

wenn du das in einer IDE verwendest,

Jochen

ist halt besser, aber wenn du das jetzt

Jochen

in einem Source-Code liest, ist es eher so ein bisschen

Jochen

ikidigit, ja so sag ich mal.

Jochen

Ikidigit.

Jochen

Ja, ja.

Jochen

Es ist halt die Frage, wie man das gewohnt ist.

Dominik

Man muss halt damit schnell arbeiten, deswegen ja.

Jochen

Ja, also ich meine, heutzutage benutzen die Leute halt alle Idees

Jochen

und gucken halt darüber, was der Code denn macht.

Jochen

Wenn du dann halt aber mit einem VI da sitzt

Jochen

und den Source Code liest, dann denkst du ja so,

Jochen

was ist das denn?

Jochen

Ich verstehe diese modernen Zeiten nicht mehr.

Jochen

Ja.

Jochen

Es hängt es, aber ja.

Jochen

Der VI kann das ja wahrscheinlich jetzt auch

Jochen

mit Autocompletion auf den Quarks und so.

Jochen

Kann man auch alles machen,

Jochen

wenn man da die entsprechenden Plugins richtig konfiguriert hat,

Jochen

was einem erstmal ein paar Monate kosten wird.

Dominik

Ja, ich habe immer zu wenig

Dominik

Zeit, um das neben der Arbeit noch hinzubekommen, aber

Dominik

ja. Naja, also

Jochen

ich finde es interessant. Also es ist

Jochen

auf jeden Fall irgendwie so ein bisschen was anderes

Jochen

und das ist, ja.

Jochen

Also ich mag es sehr gerne. Also zum Benutzen und zum

Dominik

Anfassen, das gibt einem so ein bisschen

Dominik

Speed auf der Straße. Ja.

Jochen

Ja, das auf jeden Fall. Also ich meine, Pidentic ist auch sowas.

Jochen

Das ist halt. Das ist echt gut.

Jochen

Das hilft einem enorm. Ich finde auch

Jochen

ehrlich gesagt, immer wenn ich jetzt so

Jochen

Alt-Klassen

Jochen

im alten Style verwende, oder ich meine,

Jochen

ich habe auch schon häufiger mal irgendwie

Jochen

Atteris verwendet,

Jochen

das war ein guter Atteris-Episode,

Jochen

oder Data-Classes, und

Jochen

das macht schon, es ist einfach angenehmer,

Jochen

das so hinzuschreiben, dass halt die

Jochen

Sachen

Jochen

als Attribute direkt in die Klasse reinschreibst

Jochen

und nicht in Init

Jochen

und dann das nochmal setzt, das ist halt

Jochen

immer so ein bisschen umständlich.

Jochen

Jaja, das ist so ein bisschen

Dominik

ein bisschen wie die neue Variante

Dominik

von dem Tupel.

Jochen

Auf der anderen Seite muss man, ich habe jetzt

Jochen

nochmal geguckt, weil es gab jetzt

Jochen

bei DDF, da war ich,

Jochen

warst du da? Ich konnte nicht,

Jochen

da hatte jemand Geburtstag. Ach ja, richtig.

Jochen

Genau, ich habe mir das Video

Jochen

so teilweise jedenfalls angeguckt und

Jochen

weil mich interessiert hat, irgendwie, weil da

Jochen

Klaus gesprochen hat über

Jochen

wie schnell ist eigentlich

Jochen

Data Class im Vergleich zu einem alten. Genau,

Dominik

rausgekommen, dass Pylentic ein bisschen langsamer ist bei der

Dominik

Umformung von vielen Transaktionen. Kann das sein?

Jochen

Nee, der hatte Pylentic gar nicht. Der hat nur

Jochen

Data Classes. Achso, ich hatte mal so ein Video

Jochen

gepostet, wo das verglichen wurde.

Jochen

Und ja, also

Jochen

tatsächlich, Data Classes sind auch ein bisschen

Jochen

langsamer. Die waren früher viel, viel langsamer.

Jochen

Sind inzwischen gar nicht mehr so schrecklich viel langsamer.

Jochen

Ein bisschen langsamer sind sie aber.

Jochen

Und bei Pylentic habe ich es jetzt selber

Jochen

nochmal nachgeguckt, weil mich das interessiert hat.

Jochen

Weil ich dachte so, okay, wie schlimm ist es denn eigentlich?

Jochen

Und gut, ich habe das

Jochen

jetzt in meinem, ich habe

Jochen

kleine Objekte genommen,

Jochen

wo nicht viel Validierung drauf ist.

Jochen

Aber ich dachte, gut,

Jochen

ehrlich gesagt kann es dann ja nicht mehr besser werden für

Jochen

Pydentic, sondern es wird eher schlimmer.

Jochen

Aber da war der Unterschied schon relativ

Jochen

riesig. Also da ist es

Jochen

halt so beim Deserialisieren,

Jochen

also quasi du hast

Jochen

sowas wie JSON oder DICT. Ich habe immer DICT genommen, nicht JSON,

Jochen

weil ich wollte jetzt nicht die JSON-Library

Jochen

brennschmarken, sondern einfach nur von DICT

Jochen

zu irgendwie Objekt.

Jochen

Es ist so, dass Pydentic ist halt

Jochen

irgendwie so achtmal langsamer.

Jochen

Und beim

Jochen

Serialisieren, also von

Jochen

Objekt zu, also objektgerecht zu

Jochen

irgendwie dickt, ist es halt

Jochen

sogar irgendwie zwanzigmal langsamer.

Jochen

Und das ist natürlich schon, also es kommt drauf an.

Jochen

Bei WANs wird das dann relevant?

Jochen

Genau, das ist halt die Frage.

Jochen

Das ist halt, also ich meine

Jochen

irgendwie Serialisieren von

Jochen

irgendwie hundert Objekten, ich weiß

Jochen

jetzt gar nicht mehr genau, bis ich jetzt nachgucke,

Jochen

aber es war halt irgendwie so, das ist halt

Jochen

für einzelne Objekte so ein paar hundert

Jochen

Nanosekunden.

Jochen

Bei Nativ

Jochen

und Pydentic ist es halt dann so, geht in den

Jochen

Mikrosekundenbereich. Also ich weiß nicht, kostet

Jochen

dann halt irgendwie 4-5 Mikrosekunden.

Jochen

Das ist alles relativ

Jochen

egal, solange das nur ein paar Objekte sind. Wenn du jetzt aber

Jochen

sagst, du nimmst 100 oder 1000, bei 1000

Jochen

könnte es sein, dass du schon ein bisschen

Jochen

möglicherweise schon bei ein paar Millisekunden halt.

Jochen

So ein paar Mikrosekunden mal 1000 ist ein bisschen

Jochen

bei Millisekunden. Und ein paar

Jochen

Millisekunden merkst du dann vielleicht in der Latenz schon irgendwie.

Jochen

Und es macht natürlich

Jochen

auch mehr CPU Last, was ja

Jochen

wenn du viele Sachen parallel machen möchtest, dann darfst

Jochen

du ja nicht CPU eigentlich. Das heißt, wenn wir über so

Dominik

Millionen Datensätze reden, die gleichzeitig Prozess werden

Dominik

würden, dann muss man vielleicht auf so eine Geschwindigkeit dann doch

Jochen

mal gucken, ob man das... Es kommt halt dann auf die

Jochen

Gesamtzahl der Dinger an.

Jochen

Ob du jetzt irgendwie tausend

Jochen

Dinger in einer Liste serialisierst oder deserialisierst

Jochen

oder tausend

Jochen

mal ein Ding gleichzeitig, ist ja

Jochen

egal.

Jochen

Aber das Problem ist halt

Jochen

die CPU-Geschichte

Jochen

ist halt dann, ja,

Jochen

die macht

Jochen

alles irgendwie dann halt langsamer.

Dominik

Das sind halt die verwöhnten Generationen, die einfach mehr Hardware

Dominik

auf ein Problem schmeißen. Kannst du natürlich dann auch

Jochen

machen, ja. Aber also da

Jochen

muss man schon so, sollte man sich vielleicht klar sein,

Jochen

dass es halt, dieser Komfort

Jochen

kostet halt auch ganz schön. Wobei

Jochen

ich weiß es nicht genau. Vielleicht habe ich es auch noch irgendwie falsch bedient.

Jochen

Das kann auch sein.

Jochen

Und vielleicht gibt es da auch noch irgendwie

Jochen

Geschichten, wie man das schneller

Jochen

machen kann, dass man halt irgendwie noch was,

Jochen

ich weiß es nicht, vielleicht hat das

Jochen

noch irgendwelche Dinge, wo man das

Jochen

modellieren kann, wo dann irgendwas zu Zeiten

Jochen

kompiliert wird oder wo es Zeiten zu zählen

Jochen

oder ich weiß es nicht genau.

Jochen

Aber also,

Jochen

wenn man

Jochen

das verwendet, sollte man sich vielleicht schon klar sein,

Jochen

das ist unter Umständen ein gutes Stückchen langsamer,

Jochen

als die alte Art, das zu machen.

Jochen

Aber es ist auch viel

Jochen

komfortabler. Also insofern, die meisten haben ja auch

Jochen

keine Last und haben auch nicht viele Objekte, insofern

Jochen

ist das alles viel besser.

Dominik

Ja, ja, ich habe gestern, letztens noch wieder jemanden gehabt,

Dominik

der keinen Python konnte und ich meinte, ja, ich habe gehört,

Dominik

das ist voll langsam, weil es die erste Ersagung gibt.

Dominik

Ja, das hören immer viele,

Jochen

aber es ist halt die Frage, was das

Jochen

denn bedeutet und in welcher Hinsicht

Jochen

langsam und so, das muss man dann halt

Jochen

so ein bisschen auseinander dividieren.

Jochen

Und ich, also

Jochen

meine Ansicht dazu ist ja so, wenn du

Jochen

mir da genau sagen kannst, was du haben willst,

Jochen

dann kann ich dir sagen, wie du es hinkriegst.

Jochen

Insofern, und dann kannst du so schnell sein,

Jochen

wie du sein willst. Also ich kann mir nicht vorstellen,

Jochen

dass du mit irgendwas anderem sehr viel

Jochen

schneller bist.

Dominik

Ja, aber das ist halt wahrscheinlich der Punkt,

Dominik

dass die Leute gar nicht den Andenksfall genau verstehen

Dominik

und warum Peißen dann da vielleicht langsamer ist, wenn man es

Jochen

falsch macht. Wenn du keine Ahnung hast und irgendwas machst

Jochen

und dann kann es sein, dass es hinterher langsamer ist, ja.

Jochen

Das stimmt. Ja, genau.

Jochen

Das stimmt halt auch für alles andere, also insofern, ja.

Jochen

Ja.

Jochen

Äh, genau.

Dominik

Ja, also schöne Sachen, also um

Dominik

tatsächlich, wenn du irgendwie einfach sagst, du hast irgendwie

Dominik

willst einen Dick draus geben, ist das direkt

Dominik

Jason und so, also Fasshapi ist schon irgendwie

Dominik

eine schöne Sache für sowas, ich mag das.

Dominik

Ja, genau.

Dominik

Ah, vielleicht

Jochen

die ganze Async-Geschichte.

Jochen

Genau, normalerweise

Jochen

sind halt, oder was heißt normalerweise,

Jochen

aber üblicherweise

Jochen

hast du ja dann, also

Jochen

machst du ja dann Async, definierst du dann

Jochen

eine Funktion als Async und so, dann kann das alles

Jochen

schön

Jochen

sozusagen, zumindest

Jochen

das IOMS sich parallel gemacht werden.

Jochen

Jetzt hätte ich mal eine Frage. Ich habe eine ganz fiese, gemeine Frage.

Jochen

Okay.

Jochen

Was macht eigentlich,

Jochen

du kannst aber auch in FastAPI

Jochen

normal Funktionen so definieren.

Jochen

Oder wenn du auf die Datenbank zugreifst, dann ist das ja auch synchron

Jochen

alles. Und dann

Jochen

kannst du ja eigentlich nicht mehr

Jochen

deine Funktionen async definieren oder wait sagen, sondern du musst das

Jochen

halt so aufrufen. Und das funktioniert ja auch einfach

Jochen

so.

Jochen

Wie

Jochen

macht, oder was, warum

Jochen

geht das eigentlich? Oder wie macht

Jochen

FastAPI das

Jochen

eigentlich, dass

Jochen

wenn du jetzt ganz viele

Jochen

sagen wir mal so, es kommen ganz viele Requests

Jochen

parallel rein, sozusagen, und jetzt hast du da

Jochen

diese Funktionen, die synchron sind, die sind ja nicht als

Jochen

iSync irgendwas definiert, und

Jochen

die blockieren also,

Jochen

die blockieren ja alles andere. Wie kann es denn sein, dass

Jochen

FastAPI dann trotzdem nicht viel langsamer wird?

Jochen

Was es tatsächlich nicht wird.

Jochen

Gute Frage.

Jochen

Mit der Session,

Jochen

ich weiß nicht, wie du das regelmäßig

Jochen

für die Datenbank...

Jochen

Als ich das gesehen hatte,

Jochen

dass FastAPI,

Jochen

dass man beides verwenden kann und es auch irgendwie magisch

Jochen

funktioniert und auch nicht schlechter wird von der

Jochen

Performance her, wenn man das irgendwie synchron

Jochen

definiert, so, hä, wie macht denn der das?

Jochen

Dann muss ich an der Fast-API-Dokumentation ein bisschen

Jochen

kramen, bis ich das gefunden habe.

Jochen

Und über zwei-, dreimal

Jochen

es gibt irgendwie Concurrency, Parallelism

Jochen

gibt es einen Teil in der Doku

Jochen

und dann kommt so die erste Warnung jetzt ab,

Jochen

hier wird es aber technisch und dann kommt noch eine zweite Warnung ab,

Jochen

hier wird es aber wirklich fies technisch. Und dann nach der dritten,

Jochen

wo dann steht, also das dürfte jetzt nur wirklich überhaupt niemanden

Jochen

mehr interessieren, da steht dann noch, wie es wirklich

Jochen

funktioniert.

Jochen

Jetzt musst du spoilern.

Jochen

Naja, also tatsächlich, was FastAPI

Jochen

macht, ist, es benutzt ein Threadpool,

Jochen

um die Sachen dann halt irgendwie

Jochen

concurrent, synchron abzuarbeiten.

Jochen

Also synchrone Funktionen landen im Threadpool,

Jochen

der das dann macht. Das geht auch. Also du kannst

Jochen

ja auch Threads verwenden, um halt

Jochen

deine I.O.

Jochen

zu multiplexen. Und wenn man das richtig

Jochen

macht und, ja, FastAPI

Jochen

importiert dann ein Threadpool aus Salad, dann

Jochen

funktioniert das auch schnell. Also

Jochen

ja, aber wenn man halt

Jochen

sozusagen wirklich ressourcenschonend

Jochen

das machen will, dann macht es schon

Jochen

im Sinne der Async-Geschichten

Jochen

Funktionen zu verwenden, dann ist es halt direkt

Jochen

nochmal

Jochen

irgendwie ein Stückchen eleganter.

Jochen

Noch schicker.

Jochen

Und dann sind es halt Co-Routinen und nichts Weißes.

Jochen

Da haben wir schon immer noch ein bisschen mehr Overhead.

Jochen

Oh, was auch gut geht,

Jochen

das hat man ja sonst immer auch

Jochen

irgendwie,

Jochen

sind so Geschichten,

Jochen

Background-Tasks. Oh ja, Background-Tasks.

Jochen

Ist ja relativ easy, ne?

Jochen

Kannst einfach so eine Queue haben und dann

Dominik

geht rein und sagst, was ist das, Dekorator?

Dominik

oder eine Dependency, die du reingibst,

Dominik

Background-Task, und dann hängst du was rein

Dominik

und das läuft dann einfach? Du musst da am Anfang einmal

Jochen

initiieren, oder? Nee, nee, nee, nee, du sagst,

Jochen

das hier ist jetzt ein Background-Task

Jochen

und den da waitest du dann.

Jochen

Ah ja, okay. Also das kann eine beliebige

Jochen

Funktion sein und

Jochen

genau.

Jochen

Ich weiß es jetzt

Jochen

aber nicht mehr genau, aber im Grunde ist das auch schon eine Funktion,

Jochen

die installiert drin ist und damit kannst du halt

Jochen

so Dinge, aber die

Jochen

müssen halt, ich glaube, die müssen dann aber auch

Jochen

Async-Central, können die auch synchron sein? Das weiß ich jetzt gar nicht.

Jochen

Ich glaube, es geht sogar synchron, aber ich bin auch nicht.

Jochen

Kann auch sein, ja. Ich meine, es gibt ja diesen

Jochen

Threat-Pool, da kannst du auch mal einen Threat machen.

Jochen

Aber für viele einfache Fälle, also das Problem

Jochen

ist natürlich, wenn du da jetzt irgendwas sehr CPU-intensives

Jochen

drin machst, das geht natürlich eigentlich

Jochen

da nicht. Aber wenn du da drin nur irgendwas

Jochen

machst, wo du auf I.O. wartest, also du machst

Jochen

eigentlich nicht wirklich was, sondern du wartest nur,

Jochen

dann ist das

Jochen

natürlich sehr bequem, dass du das halt direkt integriert hast

Jochen

und nicht wie, also was man in Django und so

Jochen

macht, dann nimmt man halt so Celery oder sowas

Jochen

oder irgendeine andere Task-Queue und dann startet

Jochen

man halt, schmeißt man das irgendwas mal

Jochen

in die Queue, dann gibt es irgendwie andere Dinge, die holen

Jochen

sich das aus der Queue da wieder raus. Ja, und dann in die Queue schmeißt

Dominik

man es halt erstmal weg zu realisieren in irgendwie

Dominik

ein String-Format und das

Dominik

Ja, ja gut, also es gibt

Jochen

halt Dinge, für die geht es nicht anders, geht es auch mit

Jochen

Fast-DP, ging es nicht, also wenn du, wie gesagt,

Jochen

einen Berechnungsjob machst, dann das kannst

Jochen

du halt nicht in deinem Web-Server-Prozess machen, weil

Jochen

wenn du das machst, dann machst du halt sonst nichts mehr, dann

Jochen

kannst du nicht mehr auf Requests antworten, was natürlich

Dominik

Ja, und irgendwie muss man es ja dann realisieren, damit es

Dominik

abgespeichert werden kann zwischendurch, aber

Jochen

Genau, genau. Und wenn du es

Jochen

in einem anderen Prozess machen willst, dann musst du irgendwie

Jochen

das serialisieren und dann irgendwo anders aufrufen.

Jochen

Ja. Insofern

Jochen

es gibt halt diverse Fälle,

Jochen

in denen kommst du nicht drum rum, aber für viele

Jochen

kleinere Sachen, du willst eine E-Mail wegschicken oder

Jochen

du willst halt einfach nur

Jochen

Kurze Berechnung.

Jochen

Berechnung ist nicht so gut, aber du machst halt

Jochen

irgendwas, du machst eine andere API ab oder

Jochen

du schickst irgendwas irgendwo hin oder so, dann ist egal.

Jochen

Dann kannst du das halt machen.

Jochen

Und das dürften die allermeisten Fälle

Jochen

sein eigentlich.

Jochen

Also das ist halt auch integriert.

Jochen

Dann, was auch

Jochen

integriert ist, ist halt statische Files, auch wieder

Jochen

aus Zalett, aber genau

Jochen

den Code habe ich mal geklaut

Jochen

für diese Django

Jochen

Files-Response-Geschichten.

Jochen

Und

Jochen

ja, das ist, du kannst halt

Jochen

dadurch, dass das halt so

Jochen

effizient geht mit

Jochen

LibUV, UV-Loop, UV-Corn,

Jochen

kannst du halt auch Files

Jochen

sorgen, was du normalerweise in einem Applikationsserver

Jochen

nie machen würdest, aber

Jochen

dadurch, dass jetzt halt nichts mehr kostet, irgendwie

Jochen

eine Verbindung auf, also weil das Problem

Jochen

bei Filesorving ist halt,

Jochen

das sind halt Requests, die lange laufen. Also normalerweise

Dominik

macht das von außen dann der Web-Server, also keine Ahnung,

Jochen

der Nginx-Server. Nginx oder ein Apache oder

Jochen

sonst irgendwas, genau,

Jochen

oder dein CDN,

Jochen

weil, ja, eben

Jochen

wenn ein Applikationsserver

Jochen

lange Zeit irgendwie

Jochen

einen Request ausliefert, dann ist der halt belegt und kann sonst nichts

Jochen

mehr machen. Und du hast normalerweise immer nur so ein paar.

Jochen

Und wenn dann halt mehrere Leute irgendwie Files runterladen, dann ist deine Webseite halt nicht mehr erreichbar.

Jochen

Das ist halt schlecht.

Jochen

Daher normalerweise statische Files ausliefern machst du halt von woanders.

Jochen

Aber wenn du jetzt irgendwie das effizient IO machen kannst, dann macht das ja nichts.

Jochen

Dann kann das halt auch dein Applikationsserver machen.

Jochen

Und deswegen statische Files ausliefern kannst du einfach so vom Applikationsserver aus.

Jochen

Was natürlich total cool ist, weil du kannst nämlich dann auch die ganzen anderen Sachen machen, die halt man so vielleicht auch braucht, die sonst halt sehr schwierig sind, wie sowas wie Authentifizierung und Autorisierung und so.

Jochen

Das ist halt, wenn das ein anderer Server macht als dein Applikationsserver, eher ätzend und so geht das halt relativ einfach.

Dominik

Mit den Dekoratoren, die halt die Routen verbinden, dass du halt so Router hast, so ein bisschen wie du es in Flask kennst.

Dominik

Ja, aber auch

Jochen

tatsächlich ein bisschen, es gibt sogar dann,

Jochen

ich glaube, das gibt es in Flask nicht, aber wahrscheinlich

Jochen

erzähle ich jetzt Unsinn, ich habe keine Ahnung von Flask, aber

Jochen

dass du das aufblenden kannst

Jochen

in unterschiedliche, dass du sagen kannst,

Jochen

unter diesem

Jochen

Pfad, dafür ist dieser Router

Jochen

zuständig. Genau, du kannst halt die Router unternehmen,

Dominik

du kannst auch unterschiedliche Regeln dann versetzen oder

Dominik

Authentifizierung für einen Router verlangen oder sowas alles.

Dominik

Du kannst die Responses dafür definieren,

Dominik

die du halt haben willst, für den Router, die dir halt

Dominik

rausgegeben werden und sowas alles, die

Dominik

Vollfehler-Codes.

Jochen

Damit kannst du eigentlich deine ganze Applikation

Jochen

halt irgendwie hübsch aufteilen.

Jochen

Und etwas, was es in Flask gibt,

Jochen

was es in FastAPI

Jochen

nicht gibt, ist so ein Plug-in-System.

Jochen

Also ich meine, das ist halt die Frage, wie teilst du Sachen auf?

Jochen

In Django würde man das mit Django-Apps

Jochen

vielleicht machen, in Flask hast du halt diese Plug-ins

Jochen

und in FastAPI

Jochen

hast du wieder noch.

Jochen

Aber du hast halt einmal die Möglichkeit, über die

Jochen

Router das aufzuteilen und dann noch die andere Möglichkeit

Jochen

ist halt, über Dependency Injection das zu

Jochen

machen. Ja, man kriegt ja schon

Dominik

irgendwie so eine hübsche Applikationsstruktur dann damit hin.

Dominik

Ja.

Dominik

Also ich finde das

Dominik

ganz nett, vielleicht darzustellen nochmal zu Typer.

Dominik

Also das ist auch ein Projekt von Ramirez

Dominik

von Chiantolo. Das hat es so ähnlich gemacht.

Dominik

Das setzt auch auf Klick auf und macht halt auch

Dominik

mit Type Annotation, das ist eine Kommandozeilen

Dominik

Geschichte, die so ein bisschen ähnlich funktioniert

Dominik

wie FastAPI.

Dominik

Und das in der Kombination ist halt irgendwie sehr, sehr nett,

Dominik

weil man halt irgendwie damit dann

Dominik

seine Applikation steuern kann.

Dominik

Ja, gefällt mir auch sehr gut.

Dominik

Ja, verwende ich

Dominik

jetzt auch schon ein paar Mal verwendet.

Dominik

Das ist irgendwie so sehr charmant, falls ihr das kennt. Das macht irgendwie Spaß,

Dominik

damit zu arbeiten. Das ist diese Developer Experience

Dominik

irgendwie, mit der ich halt mag, irgendwie

Dominik

modern zu arbeiten mit den ganzen modernen

Dominik

Tools. Da bin ich auch,

Dominik

ich muss das nicht schwierig haben.

Dominik

Das ist irgendwie nervig. Also, ja, man kann

Dominik

durch diesen Berg boxen und dann,

Dominik

ja, I'm the Hero, ich habe das Schwert

Dominik

rausgezogen.

Dominik

Ja, ich kann mit meiner Zeit

Dominik

Besseres anfangen.

Dominik

Ja, naja.

Dominik

Ich meine, die

Jochen

anderen Sachen haben ja auch so ein bisschen was für sich.

Jochen

Du meinst, die sind charmant.

Jochen

Nee, es ist nicht nur,

Jochen

tatsächlich bist du dann halt eben

Jochen

nicht auf eine Idee angewiesen, zum Beispiel.

Jochen

Und du kannst halt schöner allgemeiner

Jochen

Ja, aber ich weiß nicht, ob das jetzt ein Feature

Dominik

oder ein Feed ist, dass ich nicht auf

Dominik

eine IDE angewiesen sein muss. Also come on.

Dominik

Ja.

Dominik

Also inzwischen bin ich da ja nicht mehr so.

Dominik

Der Entharkt ist nur mit meinem BI gestrandet auf meinem

Dominik

Telefonsitze. Okay, maybe.

Jochen

Nein, aber ich meine, vor ein paar Jahren

Jochen

hätte ich dann auch gesagt, so IDE ist das.

Jochen

Alles Quatsch. Auch keiner

Jochen

BI. Ja.

Jochen

Aber inzwischen,

Jochen

ich meine, ich habe ja einfach mir dann vorgenommen, okay,

Jochen

bevor ich dann irgendwie mal so

Jochen

rente, muss ich das mal ausprobiert haben

Jochen

und habe dann jetzt mehr Peitschamen gemacht,

Jochen

mehr VS Code und muss sagen, ach ja, das ist eigentlich schon ganz okay.

Jochen

Aber...

Jochen

Ja, ich probiere es ja gerade einen anderen Weg herum.

Dominik

Ich versuche gerade so ein bisschen wie Eis zu lernen nochmal, aber

Dominik

ja, das ist halt, die Konfiguration

Dominik

ist so ein bisschen pain, aber wenn man einmal durchgestiegen ist,

Dominik

dann geht es so ein bisschen, also, aber ich sage mal, das Produktivitätslevel

Dominik

ist schon ganz nett für

Dominik

bestimmte TAS, aber für bestimmte TAS halt einfach auch nicht.

Dominik

Ja, also

Jochen

genau, also ich will,

Jochen

ja, es gibt Gründe, warum es so ist,

Jochen

es ist und das ist auch eigentlich gut.

Jochen

Aber, ach, naja,

Jochen

vielleicht Romantik.

Dominik

Ich glaube, wenn man neu anfängt,

Jochen

ist es so ein bisschen, ja. Ja, dann machen wir das

Jochen

vielleicht einfach gar nicht.

Jochen

Die ganzen,

Jochen

was haben wir denn?

Jochen

Ach so, Flask

Jochen

auch irgendwie gibt,

Jochen

jedenfalls die alte,

Jochen

also Flask 2.0 ist ja auch noch nicht so

Jochen

lange her. Das kann

Jochen

auch SGI, aber Flask war

Jochen

sehr stark an WSGI

Jochen

dran gebunden und deswegen

Jochen

ist eigentlich

Jochen

also Flask

Jochen

unter 2, das wird mit SGI nie funktionieren.

Jochen

Das ist immer fest auf.

Dominik

Deswegen nimmt man ja neue Software. Genau, also

Jochen

insofern, das ist halt sowas, wenn man jetzt

Jochen

irgendwie was mit WebSockets machen wollen würde.

Jochen

Ich glaube, WebSockets hat man auch

Jochen

noch nicht so richtig. Dann

Jochen

ist Flask, also jedenfalls das alte Flask,

Jochen

nicht unbedingt, ich glaube, Flask 2.0 geht

Jochen

vielleicht und Quad

Jochen

geht halt auch oder vielleicht ist

Jochen

Quad und 2 plus 2 0 aufgegangen.

Jochen

Ich weiß es gar nicht mehr so genau.

Jochen

Aber das alte geht auf jeden Fall

Jochen

nicht so richtig.

Jochen

Fast API, kein Problem,

Jochen

geht einfach so. Und das ist natürlich

Jochen

auch nett, weil für manche Sachen braucht man das ja

Jochen

vielleicht schon. Wobei

Jochen

ich da inzwischen so ein bisschen,

Jochen

ich habe das ja auch benutzt und habe extra

Jochen

irgendwie, naja gut, wenn man

Jochen

ein Fast API machen möchte,

Jochen

dann kann man natürlich auch direkt

Jochen

mit allen Pfeifen

Jochen

und Witzels

Jochen

und Websocket und so machen.

Jochen

Dachte ich dann und

Jochen

hab das dann halt auch mal benutzt.

Jochen

Du hast auch ein Tutorial dafür gemacht

Dominik

auf YouTube, glaube ich, wo das ein bisschen

Dominik

gezeigt wird, FastAPI. Habe ich das mal gemacht?

Dominik

Zumindest das Topic, was du dann

Dominik

wirklich gemacht hast. Ich glaube, das ist einfach

Dominik

nur gestreamt. Das ist einfach nicht

Jochen

das Einzige, wo ich mir mal was

Jochen

geplant habe, war zu

Jochen

NaiveBase implementieren. Da habe ich vorher mal überlegt, was ich

Jochen

dann implementieren will eigentlich. Die ganzen

Jochen

anderen Streams sind alle einfach nur so

Jochen

alle furchtbar. So kann man es auch

Jochen

umschreiben. Und das ist einfach nur so, ich setze mich hin

Jochen

und programmiere irgendwas. Und das ist natürlich manchmal spannend,

Jochen

häufig total langweilig.

Jochen

Aber für mich, der Vorteil dabei ist

Jochen

wenig Verbreitungsaufwand.

Dominik

Man kann das sehen, wenn ihr Jochen mal sehen wollt,

Dominik

dann könnt ihr mal da reingucken.

Jochen

Vielleicht sollte ich aber ein bisschen mehr

Jochen

besser produzierte Geschichten

Jochen

machen, das ist vielleicht gar nicht so blöd.

Jochen

Ich habe jetzt sowieso nicht so viel Zeit mehr, irgendwie Streams zu machen.

Dominik

Wir haben gehört, du sollst einen Didaktik-Code machen, Jochen, haben wir

Dominik

eine Empfehlung bekommen.

Jochen

Ja, genau, die ganzen

Jochen

R's und Übers. Ja, das stimmt.

Jochen

Ich wäre eher für Didaktik.

Jochen

Didaktik.

Jochen

Ja, gut.

Jochen

Eigentlich am besten alles austauschen.

Jochen

Didaktik, Rhetorik.

Jochen

Das Gesicht. Ja.

Jochen

Ich verstehe schon.

Jochen

Ja, ein bisschen Schminke hier und da.

Jochen

Ja, also jetzt,

Jochen

ich komme sowieso nicht mehr so häufig zum Streamen,

Jochen

oder habe das auch noch nicht geschafft,

Jochen

einen Schedule hinzukriegen, wo der irgendwie funktioniert.

Jochen

daher, vielleicht mache ich das einfach so.

Jochen

Dann habe ich ja in der Zeit, wo ich,

Jochen

bereite ich vielleicht was vor und dann mache ich das halt irgendwie mal ein bisschen

Jochen

besser vorbereitet und dann halt seltener.

Jochen

Einmal die Woche reicht vielleicht. Einmal die Woche oder alle zwei

Jochen

Wochen oder sowas und dann halt dafür, aber

Jochen

vielleicht irgendein Thema ein bisschen fokussierter.

Jochen

Ja, muss man gucken.

Dominik

Gut, dann kannst du auch wieder Gäste einladen, wie mich.

Dominik

Ja, gerne.

Dominik

Aber every day dann da, da bin ich raus, wenn du da

Dominik

anfängst, deine Tests neu zu schreiben

Dominik

oder irgendwelche Pakete nachzunstallieren.

Dominik

Ja.

Dominik

Ist ja auch mal nett zu sehen.

Dominik

Wir haben jetzt davon 100 Folgen oder was archiviert

Dominik

auf unserer Podcast-YouTube-Seite.

Dominik

Ja.

Dominik

Das war schon einiges.

Dominik

Ja, ja, schon einiges.

Dominik

Ja, klar.

Dominik

Genau.

Dominik

Was hatte ich denn noch?

Dominik

Ach genau, WebSockets, genau.

Jochen

Dafür hatte ich WebSockets so ein bisschen verwendet.

Jochen

Und ja, also ich dachte so, okay, wenn man das denn verwenden kann,

Jochen

das wäre einfach voll cool, dann machen wir das einfach so.

Dominik

Das geht tatsächlich ganz gut mit Class-App, gell?

Dominik

Das geht auch sehr gut, ja.

Jochen

Also wenn man so einen Anwendungshalter dafür hat,

Dominik

Aber diesen Webzock ist jetzt prinzipiell

Dominik

auf die Nerven gegangen, habe ich gemerkt.

Jochen

Also es war schwieriger, als ich jetzt gedacht

Jochen

hätte. Ich bin da auf viele Dinge

Jochen

gestoßen, wo ich schon das Gefühl habe,

Jochen

war ja, das ist gar nicht so einfach.

Jochen

Und also fängt

Jochen

halt schon, und zwar nicht nur auf, also auf der

Jochen

Serverseite muss man halt aufpassen, wenn man da halt irgendwie

Jochen

was verwendet, was halt nicht gut damit klarkommt,

Jochen

dass man halt immer eine Verbindung offen

Jochen

halten muss, dann

Jochen

ist es halt schlecht. Also wenn man

Jochen

halt irgendwie so sich darüber keine Gedanken macht,

Jochen

oder sowas und dann wieder da irgendwie hin.

Jochen

Und benutzt halt einfach WebSockers einfach so.

Jochen

Dann kriegt man Probleme.

Jochen

Mit FastAPI geht das, aber

Jochen

naja. Und dann ist halt die Frage, wie gut kann man das so

Jochen

verwenden? Das geht mit FastAPI

Jochen

oder geht auch ganz gut.

Jochen

Und dann ist

Jochen

aber noch die Client-Seite auch schwierig. Das ist halt nicht so

Jochen

richtig einfach. Weil was passiert zum Beispiel, wenn

Jochen

jetzt die Server-Seite sich

Jochen

neu startet?

Jochen

Du musst eine neue Verbindung bekommen.

Jochen

Ja, du musst halt retryen. Weil ansonsten, wenn du einfach nichts

Jochen

machst, dann ist die Verbindung halt weg. Und das bedeutet,

Jochen

weg, tot, aus. Genau, du kriegst einfach keine

Dominik

Absätze mehr. Aus die Maus, danke, nein, das war's, tschüss.

Dominik

Ja, das heißt, du musst reconnecten.

Jochen

So, jetzt seht ihr das erste

Jochen

Reconnect vielleicht nicht, dann, okay,

Jochen

vielleicht noch einen zweiten. Dann gibt's halt unterschiedliche

Jochen

Sachen, die auftreten können. Auf die musst du

Jochen

irgendwie reagieren. Dann,

Jochen

und dann wird's halt... Ami-Quota exceded.

Jochen

Ja, dann,

Jochen

ja, auch auf der Serverseite auch wieder

Jochen

so ein Problem. Du musst halt dann die Sachen,

Jochen

du weißt ja nicht unter Umständen, wo du dann

Jochen

landest, ja, also entweder du hast nur einen einzigen Prozess,

Jochen

das ist aber vielleicht dann noch ein bisschen wenig, oder

Jochen

du musst halt dafür sorgen, dass die alle gleich sind

Jochen

irgendwie in gewisser Weise, dass du auf alle

Jochen

connecten kannst und es immer das Gleiche dann

Jochen

passiert. Ach ja,

Jochen

aber so wirklich,

Jochen

also was dann wirklich

Jochen

so ein bisschen so Software-Architektur-Problem wird,

Jochen

ist halt sowas wie,

Jochen

du kriegst jetzt die unterschiedlichen Informationen

Jochen

rein, halt einmal über einen Websocket, kriegst du halt irgendwelche Events,

Jochen

dass irgendwas passiert ist, du holst

Jochen

aber auch manchmal Sachen. Und manchmal sind das ja die gleichen

Jochen

Informationen. Nur in dem einen Fall holst du sie halt

Jochen

so eine HTTP-JSON-API

Jochen

und im anderen Fall kriegst du es halt über einen Websocket rein.

Jochen

Und jetzt musst du es halt irgendwie so chronisieren.

Jochen

Du darfst halt nicht Sachen doppelt zählen oder so.

Jochen

Und dann musst du das halt irgendwie

Jochen

abstrahieren, dass du in dem

Jochen

Teil, wo du halt

Jochen

deine Wahrheit über den

Jochen

Application-State halt hältst, zum Beispiel

Jochen

in Vue, in so einem Pinia-Store

Jochen

oder sowas, musst du

Jochen

halt so wegabstrahieren,

Jochen

dass es dir an der Stelle egal sein kann, ob das jetzt

Jochen

über einen Websocket kam oder woanders her oder so. Und dann musst du halt

Jochen

anfangen, so, muss er schon ein Software-Struktur

Jochen

machen, so ein Frontend.

Jochen

Oh nein, wer macht denn das?

Jochen

Wer kennt schon nicht so richtig

Jochen

hin und wer macht das denn sauber?

Dominik

Pinia war ein guter Sighted, das ist nämlich für

Dominik

einen Superstore, ich finde den auch sehr viel angenehmer

Dominik

zu schreiben als Vuex,

Dominik

den man für Vue.js nehmen kann, ja.

Jochen

Ja, gefällt mir auch sehr gut, aber

Jochen

tatsächlich irgendwie, manchmal

Jochen

habe ich auch so Dinge, wo ich denke, oh okay, der Zustand

Jochen

ist jetzt aber nicht, warum steht denn da, da ist irgendwas

Jochen

übrig geblieben und da ist irgendwas inkonsistent, wie ist das denn

Jochen

passiert? Das kann ja jetzt eigentlich gar nicht sein.

Jochen

Es ist schon so ein bisschen hakelig und

Jochen

man muss da drüber nachdenken und es ist

Jochen

alles nicht mehr so einfach. Also das ist,

Jochen

hätte ich jetzt gar nicht so erwartet, dass

Jochen

das so kompliziert auch ist

Jochen

irgendwie. Also, aber es ist halt irgendwie,

Jochen

ist halt tatsächlich... Ich habe ehrlich gesagt

Dominik

auch State immer noch nicht so genau verstanden. Also, weil es ist

Dominik

irgendwas, irgendeine Wahrheit hat irgendwer in der Hand

Dominik

und der hat den Ball nicht in die richtige Stelle

Dominik

geschmissen und die Frage ist, wer sammelt denn alle

Dominik

Bälle ein, um hinterher die wieder weiter zu verteilen?

Dominik

Also irgendwie so. Das ist so ein bisschen dumm.

Dominik

Ja, es ist halt das,

Dominik

woraus quasi dann

Jochen

das, was du von der Applikation siehst,

Jochen

gerendert wird. Und wenn sich das ändert, sollte sich das halt

Jochen

im Spaß ändern. Ja, Single Source of Truth.

Dominik

Wer weiß das denn überhaupt? Manche Leute rendern ja

Dominik

irgendwas, obwohl es gar nicht stimmt.

Dominik

Was auch nicht immer falsch sein muss, vielleicht.

Dominik

Vielleicht muss man auch manchmal da gucken,

Dominik

was ist denn wichtiger? Dass man lange

Dominik

wartet, bis man weiß, was wahr ist?

Jochen

Nö, man kann ja auch einfach dann so tun, als wüsste man es schon.

Dominik

Genau. Und das stimmt ja vielleicht oft auch.

Dominik

Vielleicht ja manchmal auch nicht. Und was macht man denn dann?

Dominik

Und so. Und ja.

Jochen

Ja, aber es wird halt schnell kompliziert.

Jochen

Und genau, also das fand ich schon

Jochen

ja so ein bisschen, also hätte ich

Jochen

jetzt nicht so erwartet, dass es so schlimm ist.

Jochen

Und dann eine andere Geschichte, die halt auch

Jochen

dann irgendwann,

Jochen

ich hätte nicht erwartet, dass es so leicht

Jochen

ist, irgendwie

Jochen

Polling zu verwenden. Also jetzt mit

Jochen

HTMLX zum Beispiel,

Jochen

es ist halt super easy

Jochen

irgendwie, weil, also ich meine, was ich

Jochen

früher halt so gesagt hatte, so, oh, pollen, oh mein Gott,

Jochen

also einmal, das macht viel Last auf dem Server, weil du pollst ja die ganze

Jochen

Zeit, ne, wenn jetzt viele Leute auf deiner Seite

Jochen

sind, dann pollen die die ganze Zeit, super,

Jochen

toll, irgendwie habe ich irgendwie viel mehr

Jochen

Requests, als ich eigentlich bräuchte

Jochen

und so.

Jochen

Da muss ich irgendwie

Jochen

sicherstellen, dass das JavaScript auch irgendwann aufhört zu

Jochen

poilen.

Dominik

In der letzten Unterhaltung darüber, da sagtest du, poilen, das will man überhaupt

Dominik

nicht machen. Genau. Ruhigbar. Ja, ja, ja, aber

Jochen

habe ich jetzt inzwischen dann doch, glaube ich, meine Meinung geändert,

Jochen

weil, wenn man das halt so einfach hinschreiben

Jochen

kann, wie in HTMLX, wo man schreibt halt

Jochen

every two seconds oder so,

Jochen

schreibt man ein Attribut, das war's.

Jochen

Mehr macht man gar nicht. Und auf der

Jochen

Server-Seite schickt man halt,

Jochen

man kontrolliert es von der Server-Seite aus und nicht

Jochen

von der JavaScript-Seite aus. Und von der

Jochen

Server-Seite aus schickt man halt so

Jochen

einen Status-Code 286 zurück.

Jochen

Ich weiß nicht, der heißt irgendwie auch sowas wie

Jochen

Stop-Polling oder sowas. Und dann

Jochen

hört es einfach auf. Und in Stop-Polling steht auch

Dominik

wie lange, glaube ich sogar, ne? Ja.

Jochen

Kann man alles irgendwie setzen und man kann halt auch

Dominik

behalten. Ja, klarerweise, ich glaube, wenn du

Dominik

einen bestimmten Code machst, also ich glaube 419

Dominik

kann das auch sein, dass man dann sagt, ey, hör auf

Dominik

jetzt. Besonders wie lange, sonst wirst du

Jochen

gebannt oder so. Vier, wie hieß

Jochen

der Client hat irgendwas falsch gemacht. Ich weiß es nicht so genau.

Jochen

Keine Ahnung. Aber ja, man kann da auf jeden Fall viel machen.

Jochen

Und man kann sogar

Jochen

das halt einfach so machen, dass man das

Jochen

Element, was halt pollt oder so, einfach austauscht

Jochen

mit OuterHTML und dann

Jochen

kann man einfach das Poll-Ding wegnehmen.

Dominik

Also das Neueste ist ja AuthenticationTimeout.

Jochen

Und sobald jemand auf irgendwas anderes draufdrückt,

Jochen

kann man out of band aber das Pollen ja wieder aktivieren

Jochen

und so. Das heißt, also eigentlich

Jochen

für ganz viele Fälle, wo man halt

Jochen

mal eine Zeit lang irgendwie so Live-Updates oder so

Jochen

braucht auf einer Seite, kann man

Jochen

das mit Polling relativ schmerzfrei

Jochen

machen. Und das war mir

Jochen

vorher nicht so klar. Da hätte ich gedacht, oh Mann, das ist ja alles ganz

Jochen

furchtbar. Und da würde ich jetzt sagen,

Jochen

über die aus der

Jochen

HTMX-Erfahrung heraus würde ich sagen, also das ist gar nicht

Jochen

so schlimm. Das geht eigentlich relativ gut.

Jochen

Und der Riesenvorteil ist halt, es ist komplett

Jochen

stateless. Es funktioniert mit

Jochen

irgendwie uralten, es funktioniert

Jochen

mit ganz so einem Standard-Kram, den man halt so verwendet.

Jochen

Braucht nicht irgendwie SGI oder

Jochen

Django Channels oder sonst irgendwas. Es funktioniert mit dem

Jochen

ganz normalen Stack, den man hat.

Jochen

Ja.

Jochen

Und dann, ja.

Jochen

Vielleicht doch leifer, als man denkt.

Dominik

Da ist jetzt nur die Frage halt, wenn man

Dominik

viele Clients hat, die einen pollen wollen, ist das vielleicht

Jochen

dann doch doof. Ja, aber man

Jochen

hat das ja unter Kontrolle. Wenn du sagst, okay, das ist mir

Jochen

jetzt zu viel, dann sagst du halt, okay, dann

Jochen

polle ich halt nicht jede Sekunde, sondern alle zwei Sekunden

Jochen

hast du schon die Last um die Hälfte gesenkt.

Dominik

Wenn trotzdem eine Million Leute

Dominik

alle zwei Sekunden fragen, ist das vielleicht doof, weil es so viel

Jochen

auf einmal sind. Kannst ja dann irgendwann einen Mehrserver kaufen

Jochen

und kannst dir dann überlegen, was du machst. Ja, okay, genau.

Dominik

Aber das ist halt dann, man weiß

Dominik

dann an welcher Linie des Problems,

Dominik

in welcher Achse man sich dann abarbeiten kann.

Dominik

Ja, also das war

Jochen

schon so ein bisschen, also wenn ich mit dem Wissen von

Jochen

jetzt, würde ich das nicht nochmal mit wegversorgen.

Jochen

Aber jetzt habe ich es halt schon gemacht.

Dominik

Ja, weil ihr könnt ja sehen, wie Jochen es versucht hat.

Dominik

Das ist ja auch manchmal ganz amüsant.

Dominik

Ja. Dann hast du hoffentlich noch

Dominik

einen Pick. Ach, Picks. Dann machen wir jetzt Picks.

Dominik

Ja, gut.

Jochen

Ja, also mein Pick für

Jochen

diesmal wäre

Jochen

Honsho. Honsho.

Jochen

Ist das eine Insel?

Jochen

Ne, das ist

Jochen

Hauptinsel

Jochen

Ich weiß gar nicht, wo der Name herkommt

Jochen

ehrlich gesagt, so grübel ich da gerade

Jochen

Ne, das ist

Jochen

es gibt in der Ruby-Welt

Jochen

gibt es ein Ding, das nennt sich Formen

Jochen

ist da relativ populär

Jochen

und Honshu ist das auch, da ist eine

Jochen

Python-Nachimplementation davon

Jochen

und das benutzt man, um

Jochen

ein

Jochen

Proc-File

Jochen

zu lesen und dann Dinge, die

Jochen

darin stehen, zu starten und zu stoppen

Jochen

Also quasi, wenn man jetzt

Jochen

so was, man kennt das vielleicht mit Docker-Compose,

Jochen

Docker-Compose, Minus-F, irgendeine

Jochen

Config, YAML-Config, Up und

Jochen

Down und so, dann passiert auch sowas, dann werden alle die

Jochen

Dinger hochgefahren oder wieder runtergefahren oder so.

Dominik

Also alle Docker-Container, die in der Compose-Vertrags-Schiene haben.

Jochen

Jetzt möchte man aber vielleicht zum Beispiel, wenn man

Jochen

irgendwie, so wie ich,

Jochen

Docker ganz

Jochen

nicht so gut

Jochen

findet, nicht so gut

Jochen

eher so Mittel

Jochen

findet, dann

Jochen

das nicht verwenden möchte und dann

Jochen

ich hätte aber schon diese Funktion gerne, dass ich halt

Jochen

mein komplettes System, das ich zum Entwickeln

Jochen

brauche, einmal hochfahre und einmal runterfahren kann.

Jochen

Dann kann man das halt in

Jochen

so ein Proc-File reinschreiben, was man alles

Jochen

dafür hochfahren muss und runterfahren muss.

Jochen

Und dann nimmt man Honshu und sagt Honshu start und dann passiert

Jochen

halt quasi genau das gleiche wie mit Docker-Corpus ab.

Jochen

Okay, cool.

Jochen

Nur, dass es halt nicht Docker ist, sondern

Jochen

einfach ganz normale Prozesse, die gestartet werden.

Jochen

Und Proc-File hat ja da auch den Format

Jochen

Diverse-Hoster-Könner-Stack-Lesen, Heroku-Könner-Stack-Lesen.

Jochen

Und dann kann man

Dominik

sich eine Konfiguration bauen und dann werden auf dem Rechner

Dominik

Sachen hoch und runter gefahren.

Dominik

Ich meine, der Nachteil ist natürlich, es ist nicht isoliert,

Dominik

der Vorteil ist natürlich, es ist nicht isoliert.

Jochen

Ja, zum Beispiel ein Pattern, was ich halt in letzter Zeit,

Jochen

wenn ich meine Sachen mache, tatsächlich viele Dinge,

Jochen

die ich halt so bezahlt tue, da ist es eigentlich seit Jahren,

Jochen

es ist halt immer Docker.

Jochen

Es ist besser geworden, ja.

Jochen

Davor war es mal eine Zeit lang Vagrant und Virtualbox und so.

Jochen

Das war noch schrecklicher als Docker.

Jochen

Aber Docker ist auch ziemlich schlimm.

Jochen

Und das... Ist jetzt auch bezahlt übrigens,

Jochen

für Corporates muss man jetzt da richtig...

Jochen

Wobei die Grenzen sind halt so, dass da viele

Jochen

nicht drunter fallen. Nur große Corporates müssen das eigentlich machen.

Jochen

Ja, und wenn du so groß bist, dass du da drunter fallst,

Jochen

dann ist es... Genau, dann...

Dominik

Ja, wenn die Leute halt nicht freiwillig für Open Source

Dominik

dann bereitstellen, dann ist das vielleicht schon ganz gut, dass die

Dominik

zugezogen werden über ein Modell, aber ja.

Dominik

Ja, aber genau, aber

Jochen

tatsächlich würde ich jetzt mal so sagen, also

Jochen

es geht schon viel Zeit dabei drauf.

Jochen

Also bei mir jetzt so,

Jochen

dass ich irgendwie Dinge...

Jochen

Also morgens, wenn ich mich dransetze,

Jochen

Irgendwie ist schon wieder einer von den Containern

Jochen

gestorben oder so. Ich muss halt regelmäßig

Jochen

Docker-Desktop neu

Dominik

starten. Ja, ich verstehe auch nicht,

Dominik

warum Docker ab und zu mal

Dominik

einfach mal in den Container runterfällt.

Jochen

Oder ich versuche einen zu stoppen und es geht

Jochen

irgendwie nicht. Es bleibt irgendwie hängen. Dann kill ich das

Jochen

irgendwie weg. Manchmal geht es, manchmal geht es nicht.

Jochen

Dann irgendwie kriege ich

Jochen

ganz seltsame Fehlermeldungen aus den Tiefen

Jochen

von irgendwie von Docker.

Jochen

Und dann liegt es aber daran,

Jochen

dass intern irgendwie irgendein Teil

Jochen

ist halt vollgelaufen.

Dominik

Die Logs von vor drei Jahren sind immer noch ein,

Dominik

anstatt dass man auf die Idee kommt, wenn es mal komplett

Dominik

rebuildet ist, dass es wieder von vorne an.

Jochen

Und wenn man darin debuggen will, es geht schon,

Jochen

es ist aber alles irgendwie und alles ist langsam.

Jochen

Es ist halt alles lahm.

Jochen

Es fühlt sich alles so an.

Dominik

Es braucht relativ viel Ressourcen.

Dominik

Ja, genau. Ich bin vielleicht besonders

Dominik

gestraft, weil ich halt

Jochen

auf einer Mac-Plattform bin und da ist es halt besonders langsam.

Jochen

Aber es ist wirklich

Jochen

es ist so ein bisschen, es ist wirklich aufwendig.

Jochen

Also ich bin nicht

Jochen

es kostet

Jochen

wirklich Zeit, irgendwie das halt zu

Jochen

verwenden und es macht alles ein bisschen

Jochen

schwieriger und für meine eigenen Sachen

Jochen

mache ich das, also da habe ich jetzt den Vergleich, da mache ich das halt nicht so.

Jochen

Ein Pattern, das ich da halt verwende,

Jochen

ist eben, ich verwende halt sowas oder

Jochen

auch ganz lange nicht Honcho verwendet, aber

Jochen

verwende jetzt dann halt vielleicht Honcho und

Jochen

den Applikationsverlauf oder das Ding, an dem ich

Jochen

gerade entwickle, das starte ich dann halt

Jochen

in der IDE mit dem Debugger zum Beispiel

Jochen

und kann da halt dann schön drin debuggen.

Jochen

Ich kann, wenn ich auf den Test ausführen klicke,

Jochen

ist es halt sofort, sofort ausgeführt,

Jochen

ja, und ich muss halt nicht erstmal 10 Sekunden warten,

Jochen

bis das irgendwie sich irgendwie in Docker reingetunnelt

Jochen

hat und dann da irgendwie...

Dominik

Ja, weil du erstmal alles die ganze Umgebung wiederbauen musst und so.

Dominik

Und das

Jochen

funktioniert tatsächlich ziemlich gut, ist eine sehr

Jochen

angenehme Erfahrung, aber ja,

Jochen

diesen, ja, ich weiß auch nicht, aber die Leute,

Jochen

also in Firmen ist das wohl

Jochen

offensichtlich inzwischen irgendwie verpflichtend,

Jochen

Docker zu nehmen, naja.

Jochen

Klingt gut, also Honschuhe.

Jochen

Ich wollte...

Jochen

Danke an Claudio für den Tipp, der hatte das

Jochen

Ja, also ich wollte

Dominik

ein Dango-Projekt

Dominik

picken und zwar Health-Checks

Dominik

heißt das.

Dominik

Das ist sehr cool, weil

Dominik

das kann man selber hosten, einfach Health-Checks und da

Dominik

irgendwie seine Applikationen reinpacken.

Dominik

Das ist natürlich ganz wichtig, dass der Health-Check

Dominik

Server auf dem gleichen Server läuft

Dominik

wie der Rest.

Jochen

Ja, ich weiß

Jochen

es nicht mehr genau.

Jochen

Das ist ja in Dango-Server

Jochen

drin, ja.

Dominik

Ja, genau. Es ist ein Dago-Projekt, Dago-4-Projekt,

Dominik

wo man halt relativ nett einfach

Dominik

seinen Server, den man so überwachen

Dominik

will, rein monitoren kann.

Dominik

Ganz nettes, kleines Frontend, alles

Dominik

relativ modern gebaut und

Dominik

dann nur Postgres peißen, 3.8 glaube ich

Dominik

und hochfahren,

Dominik

Webfrontend benutzen,

Dominik

wie man das halt von anderen Tools kennt, aber

Dominik

self-hosted und light-white und schick.

Dominik

Ja, cool, cool, cool.

Dominik

Muss ich mir mal angucken, was das genau macht.

Jochen

Ich dachte, das wäre jetzt in dem Ding, was man

Jochen

innerhalb von Django hat, wo man dann von außen fragen kann,

Jochen

ob da noch alles okay ist.

Dominik

Einfach so ein normales Health-Check-Ding,

Dominik

dass du halt einfach guckst, sind die Server, die du halt haben willst,

Dominik

sind die noch da oder nicht und was macht das hinterher?

Jochen

Okay, also eher so ein Monitoring-Tool.

Jochen

Ja, ja, genau.

Jochen

Muss ich mal angucken, weiß ich nicht.

Jochen

Ja, ja, dann sind wir eigentlich, ne?

Jochen

Ja, sind wir durch.

Jochen

Vielen Dank, dass ihr wieder eingeschaltet habt.

Dominik

Ihr habt uns gewogen, trotz Erwärmung.

Dominik

Hört uns überall, wo ihr uns hören wollt.

Dominik

Sagt Bescheid, was euch stört, an hallo-at-python-podcast.de.

Jochen

Ja, oder wenn es euch nicht stört und gut gefällt,

Jochen

dann könnt ihr auch gerne irgendwie

Jochen

mal eine Bewertung hinterlassen bei iTunes oder

Jochen

Spotify geht es jetzt auch bei uns mit Bewertungen.

Jochen

Oh.

Jochen

Ich finde das interessant.

Jochen

Ich habe letztens drauf geguckt, es sind ja auch nicht so viele,

Jochen

aber es ist halt quasi sehr ähnlich zu den

Jochen

iTunes-Geschichten. Also es ist auf jeden Fall

Jochen

konsistent. Das ist schon mal...

Jochen

Ein paar Leute finden es gut, ein paar Leute finden es doof.

Jochen

Ja, so ist es halt.

Jochen

So kann man nichts gegen machen.

Jochen

Ist auch völlig in Ordnung.

Dominik

Wie gesagt, Feedback, teilt uns das immer gerne mit.

Dominik

Genau.

Dominik

Wir dürfen jetzt eigentlich mal angeben.

Dominik

Ich glaube, wir dürfen angeben.

Dominik

Letztes Jahr waren wir über 100 Tage, glaube ich,

Dominik

in Top-20-Tech-Podcast-Charts. Kann das sein?

Jochen

Top-50, glaube ich, eher.

Jochen

Nee, Top-20, weiß ich nicht.

Jochen

Top-50 ist immer das, was...

Jochen

Ja, aber relativ lang.

Jochen

Und jetzt, also dieses Jahr, ich gucke mal,

Jochen

weil dieses Jahr eigentlich schon die ganze Zeit.

Dominik

Ja, vielleicht gibt es gar nicht mehr als 50, man weiß es nicht.

Jochen

Ich gucke mal gerade, aber auf Spotify sind es quasi jetzt gerade so 3.000.

Dominik

Subscriber. Ja, und wie viel sind

Dominik

wir, ähm, welcher Platz

Dominik

sind wir gerade beim Tech?

Jochen

Und haben sie, glaube ich, gerade wieder rausgefallen.

Jochen

Haha, tada!

Jochen

Ja, wir lagen bestimmt an der letzten...

Jochen

Ich weiß nicht, ob ich jetzt hier die

Jochen

Spotify-Plattform promoten möchte, weil

Jochen

ehrlich gesagt... Nein, wollen wir nicht.

Jochen

Also die Spotify und Podcast ist jetzt irgendwie

Jochen

vielleicht ein bisschen unglücklich.

Dominik

Das ist ja ungefähr was, was wir so machen.

Dominik

Ja, oi.

Dominik

Ist ja völlig verpönt, okay.

Dominik

Nein, hast du das mitgekriegt, diese

Jochen

Joe Rogan-Geschichte und diese unsägliche

Jochen

Mail, die der Spotify-CEO geschrieben hat.

Dominik

Die Mail habe ich nicht gelesen, ich habe nur gehört, dass es

Dominik

irgendeinen Stress gibt mit Joe Rogan, den ich nicht höre

Dominik

und da habe ich mir gesagt, aha, okay,

Dominik

die Leute, der hat irgendwelchen Scheiß erzählt und

Dominik

ein Idiot und einige Leute verlassen jetzt die Plattform

Dominik

und geben diesen Auftrag, blablabla, ist mir völlig egal.

Dominik

Weißt du was, ich bin einer der wenigen Leute, die überhaupt kein Spotify

Dominik

haben. Ach so, okay.

Dominik

Ich weiß zwar auch nicht, warum unser Podcast da läuft, ich glaube,

Dominik

jemand hatte die Idee, dass das unbedingt da laufen muss.

Dominik

Mir ist das Ding völlig egal, ich höre meine Musik

Dominik

tatsächlich auf anderen Quellen, also

Dominik

auf Vinyl, falls es genau so ist, aber

Dominik

boah.

Dominik

Ich war da, ja, dann

Jochen

aha, der feine Herr auf dem Vinyl.

Jochen

Ich mag das halt,

Jochen

wenn Python-Code gut aussieht, aber okay.

Jochen

Andere Leute hören halt Sachen auf Vinyl.

Dominik

Ja, also ich habe aber so ein modernes System,

Dominik

damit kann ich mir auch jede digitale

Dominik

Flak auf mein Vinyl schmeißen, wenn ich das

Dominik

muss. Und dann kann ich sogar mit dem

Dominik

auf dem Flak rumscratchen.

Dominik

Das muss ich dann nicht so mit einer Tonspur von dir

Dominik

aufprobieren.

Dominik

Egal, aufdrucken.

Dominik

Bleibt uns gewogen, bleibt wieder rein.

Dominik

Bis dann, tschüss.