Transcript: Python Async Teil 2

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Paisen-Podcast, heute die 26. Episode, wir haben den 1. Dezember.

Dominik

Jochen, wir sind heute genau zwei Jahre, vor genau zwei Jahren haben wir die erste rausgebracht.

Dominik

Oh, ja richtig, das stimmt.

Dominik

2018, am 1. Dezember kam unsere erste Episode raus.

Dominik

Ja.

Dominik

Ja, nicht schlecht, oder? Zweiter Geburtstag.

Jochen

Zwei Jahre, meine Güte, ist das schon wieder lange her.

Dominik

Nicht so schlecht, wir haben sogar durchschnittlich mehr als eine Folge dann pro Monat aufgenommen.

Dominik

Und wenn wir die noch zählen, die wir weggeschmissen haben, sind wir sogar bei.

Jochen

Ja, ich glaube, wir haben uns verzählt ab und zu. Ich weiß nicht, ob das wirklich genauso viele sind. Also 27 ist jetzt die Zahl, aber es kann sein, dass wir irgendwie Dinge unterschlagen haben.

Dominik

Ja, ich glaube, 26 ist offiziell jetzt.

Dominik

Kann auch sein. Ich weiß es nicht genau.

Dominik

Ja, hallo, hallo. Schön, dass ihr wieder eingeschaltet habt. Heute machen wir Async Teil 2.

Dominik

Ja.

Dominik

Und wir haben dabei den Johannes.

Dominik

Hallo.

Dominik

Hallo.

Dominik

Ja, wir wollten auch wieder ein bisschen News machen und euch ein bisschen entschädigen für die ganzen Folgen, wo wir das so ein bisschen…

Dominik

Ja, wir haben uns ja immer so viel vorgenommen,

Dominik

was wir eigentlich machen wollten.

Jochen

Module aus der Standardbibliothek vorstellen,

Jochen

Pics und so, das machen wir dann nie, weil

Jochen

irgendwie immer zu wenig Zeit ist und wir

Jochen

die ganze Zeit brauchen, um unser Audio-Setup hinzukriegen.

Dominik

Ja, genau, und dann muss am Ende irgendwie

Dominik

jemand wieder ins Bett und dann müssen wir leider immer aufhören.

Dominik

Ja, genau.

Jochen

Genau, machen wir das diesmal.

Jochen

Ja, also

Jochen

zum Beispiel eine Geschichte, die ich

Jochen

eigentlich dann erwähnen wollte,

Jochen

wir hatten ja vorletztes Mal, glaube ich,

Jochen

was zu Python 3.9 erzählt

Jochen

und eine ganz wichtige Geschichte habe ich vergessen.

Jochen

Und zwar ist in

Jochen

Python 3.9 Topological

Jochen

Sort schon mit in der

Jochen

Standardbibliothek. Topological Sort.

Jochen

Jetzt bin ich natürlich wieder der Blöde,

Jochen

der keine Ahnung hat, was das ist. Also

Dominik

was ist bitte Topological Sort?

Dominik

Jochen weiß es auch nicht.

Dominik

Das ist nur cool.

Dominik

Nee, das ist

Jochen

wenn man jetzt

Jochen

einen Graphen, also wenn man zum Beispiel

Jochen

Abhängigkeiten hat und die sortieren möchte, also wenn man sich zum Beispiel

Jochen

anzieht und dann irgendwie

Jochen

dran denken möchte, dass man irgendwie

Jochen

bevor man, weiß ich nicht,

Jochen

die Schuhe anzieht, die Socken angezogen haben

Jochen

muss, dann ist das Problem

Jochen

sozusagen, das allgemeine Problem dazu ist

Jochen

topological sort oder

Jochen

topologische Sortierung, keine Ahnung.

Jochen

Gibt es auch beim Projektmanagement, glaube ich.

Jochen

Gibt es überall, wo es grafen.

Jochen

Ja.

Jochen

Zum Beispiel auch ganz wichtiger Angelegenheit,

Jochen

da habe ich selber zum, da wusste ich noch nicht, dass es

Jochen

das ist und habe selber

Jochen

überlegt, was das für ein Problem sein könnte. Nach ganz,

Jochen

ganz lange Überlegen bin ich dann drauf gekommen, es könnte

Jochen

irgendwas mit Graphen zu tun haben und dann sortieren.

Jochen

Und irgendwann hat mir jemand gesagt,

Jochen

ja, das ist doch Topological Sort. Dann habe ich mich

Jochen

ziemlich blöd gefühlt, aber

Jochen

zwar wenn man die

Jochen

Abhängigkeiten von Programmen

Jochen

oder Paketen, die man installieren

Jochen

möchte, sortieren möchte, da braucht man das dann auch.

Jochen

Ja.

Jochen

Genau.

Jochen

Das ist jetzt mit drin, einfach so?

Jochen

Das ist jetzt in der Standardbibliothek mit drin.

Jochen

Batteries included, sage ich ja nur.

Jochen

Ja, Graflip heißt das Modul, oder?

Jochen

Ja, ja, genau.

Jochen

Heute ist übrigens auch Advent of Code,

Jochen

der Teil 1, rausgekommen.

Jochen

Macht ihr das noch?

Jochen

Worum geht es denn dieses Mal beim Advent of Code, Dominik?

Jochen

Das habe ich noch nicht so ganz rausgefunden.

Dominik

Ich glaube, irgendjemand möchte in Urlaub fahren auf eine Insel,

Dominik

weil er schon fünf Jahre lang versucht hat, da hinzubekommen.

Dominik

Und dann muss er irgendwie seine Abrechnung richtig machen,

Dominik

dass er da hinkommt.

Dominik

Ich finde, die letzten Jahre fand ich auch sehr interessant.

Dominik

dann ging es ja irgendwie um Weihnachtswichtel

Dominik

und die Reise durchs Weltall mit dem Santa

Dominik

und so. Ja, genau.

Dominik

Okay, mit dem Raumschiff, was

Dominik

ein Interpreter braucht, den man dann selber programmieren musste.

Dominik

Ja, genau, dann haben wir Opcodes und so, ne?

Dominik

Ja, also Entschuldigung, das ist eine coole Sache.

Dominik

Da kann man dann allen möglichen

Dominik

Programmiersprachen machen natürlich und

Dominik

hallo.

Dominik

Das ist auch hauptsächlich so für einen selbst, oder?

Dominik

Also es ist ja nicht irgendwie gewertet oder so,

Dominik

sondern es ist ja nur...

Dominik

Ja, ich kenne es gar nicht.

Johannes

Ja, es sind einfach 24 Programmieraufgaben,

Johannes

üblicherweise zweigeteilt in zwei Teile.

Johannes

Und die sind immer von der Sorte, hier ist ein kleines Beispiel

Johannes

und hier ist eine große Eingabemenge.

Johannes

Und wenn du die Antwort weißt, dann tippst du hier in dieses Feld ein.

Johannes

Und dann kannst du quasi überprüfen,

Johannes

ob du die richtige Lösung gefunden hast.

Johannes

Ah, okay, ja.

Johannes

Und das ist eigentlich immer ganz nett.

Johannes

Das ist sehr nett gemacht, das ist sehr aufwendig

Johannes

gestaltet und wir haben immer schöne Story.

Dominik

Genau, man muss ja immer einen Stern sammeln pro Tag,

Dominik

pro Aufgabe, also zwei Sterne am Tag.

Dominik

Zwei Sterne, genau.

Dominik

Für 48, 50 sogar, oder?

Dominik

24, kriegt man 25 auch noch ein?

Dominik

Nö. Also, ja,

Dominik

zweimal 24.

Dominik

Ich glaube, 48 dann.

Dominik

Ach so, und das geht auch zurück, also man kann auch bis

Dominik

2015 zurückgucken

Dominik

und sich die ganzen alten Aufgaben

Dominik

ansehen.

Dominik

Das ist sehr nett, also

Dominik

selber ausprobieren und dann halt gucken, ob man

Dominik

die Aufgaben lösen kann. Die werden am Anfang

Dominik

sind die noch etwas einfach.

Dominik

Die gehen aber schnell wirklich in die Zeit.

Dominik

Ich habe sogar einen Post gelesen von Peter Norweg,

Dominik

der sagt, das ist ja eigentlich schon sehr geil, aber

Dominik

so viel Zeit hat er dann auch nicht.

Dominik

Aber ja.

Dominik

Das ist auch bei mir immer so das Problem. Ich mache da gerne

Johannes

mit und dann irgendwann fühlt

Johannes

es sich an wie Arbeit und dann höre ich es dann wieder auf.

Johannes

Ja, aber es ist auf jeden Fall

Johannes

sehr zu empfehlen. Für alle

Johannes

Stufen ist was dabei. Die ersten Aufgaben

Johannes

sind einfacher, die kriegt man schnell durch und die

Johannes

so ab dann fünf oder so

Johannes

oder sechs oder zehn oder zwölf wird es dann

Johannes

schon richtig happig. Ja, man muss sich dann wirklich überlegen, wie man

Dominik

da rangeht und nicht einfach so so hands-on drauflos.

Dominik

Dann läuft man meistens gegen eine kleine

Dominik

oder größere Wand. Und

Johannes

letztes Jahr war es auch so, dass die aufeinander aufgebaut haben.

Johannes

Das heißt, man hat dann an einem Tag seinen Interpreter

Johannes

gebaut und zwei Tage später hat man wieder abgebaut,

Johannes

weil dann noch ein Feature dazu

Dominik

kam. Ja, oder man musste halt neue Opcodes handeln

Dominik

oder sowas. Und wenn man am Anfang studrig

Dominik

gearbeitet hat und das so hingeworst hat,

Dominik

dass das einfach so ging, da hat man sich geärgert,

Dominik

weil man die Implementierung sonst einfach hätte

Dominik

erweitern können und so musste man sie ganz neu

Dominik

bauen. Naja, ich bin gespannt, wie es dieses

Dominik

Jahr draus wird.

Dominik

Ich habe nicht immer so viel Zeit, aber ich glaube, so eine Stunde morgens

Dominik

würde ich mir schon dafür nehmen. Ich mag das nämlich.

Dominik

Ja, es lohnt sich auf jeden Fall auch. Sehr gute

Dominik

Übung.

Dominik

Ja, ich habe da auch immer sehr viel gelernt. Also wirklich

Dominik

auch über Konzepte von anderen Lösungen angucken, verschiedene

Dominik

Sprachen. Ein Kollege von mir macht das in Go.

Dominik

Da kann man das immer schön vergleichen.

Dominik

Hatte heute direkt eine rekursive Lösung

Dominik

implementiert. Ich war direkt ein bisschen neidisch.

Dominik

Ich hatte nicht an Binary Research gedacht. Ich wusste auch gar nicht,

Dominik

wie das in Python richtig geht.

Dominik

Und habe einfach ItaTools genommen,

Dominik

was auch funktionierte, aber

Dominik

war halt BruteForce.

Dominik

Aber ja, wir waren bei News,

Dominik

was der Stene stehen geblieben ist.

Dominik

Ja, sind ja News.

Dominik

Ja, genau.

Jochen

Eine ganz interessante Geschichte. Python läuft

Jochen

jetzt auf .NET

Jochen

auf der Runtime da.

Dominik

Das hast du gerade so ein bisschen leise vor dich hin

Dominik

genuschelt, als wäre es eine

Dominik

Meinung. Das ist mir auch ein peinlich.

Dominik

Das ist peinlich, dass du das jetzt sagt und nicht leid.

Dominik

Was ist jetzt der Unterschied zu IronPython?

Dominik

Weil IronPython gab es ja schon lange. Ja, aber ich glaube,

Jochen

das war schon lange nicht mehr so richtig

Jochen

aktiv. Das ist so wie Jython.

Jochen

Da gibt es sicherlich einen 2.7-Port für.

Jochen

Ja, es ist irgendwie, es gibt einen Pep,

Jochen

der beschreibt, wie man

Jochen

sich quasi einklinken kann, wenn man jetzt

Jochen

ein JIT-Compiler ist

Jochen

und diese Variante

Jochen

jetzt benutzt es auch. Das ist irgendwie

Jochen

von Anthony Shaw oder so

Jochen

hat das gebaut.

Dominik

Was genau meinst du mit einklinken, wenn man ein

Dominik

Just-in-Time-Compiler, das heißt

Dominik

sowas wie Python, die halt

Dominik

zur Laufzeit dann irgendwie evaluiert werden, oder

Dominik

wie ist das?

Jochen

Dass es halt dann zu Maschinencode runterkompiliert

Jochen

wird, quasi.

Jochen

Ja, und genau.

Jochen

Aber während das Programm läuft. Also die Teile,

Jochen

die gerade notwendig sind, werden dann

Johannes

während das Programm läuft zu

Johannes

Maschinencode kompiliert oder zu dem Code, der

Johannes

VM, die da drunter liegt

Johannes

und sind dann natürlich schneller.

Johannes

Macht PyPy

Johannes

zum Beispiel auch. PyPy hat auch so einen

Johannes

JIT-Modus, der dann halt

Johannes

die

Johannes

Sachen, die jetzt gerade

Johannes

in der Schleife sind und

Johannes

100.000 Mal durchgeführt werden, die

Johannes

kompiliert er dann halt so vor, dass diese Varianten

Johannes

schneller sind. Das ist einer der

Johannes

großen Vorteile von PyPy, dass

Johannes

die das machen können. Das macht CPython nicht.

Johannes

CPython hat keinen JIT drin.

Johannes

Der hat einfach seine Stack-Maschinen und die arbeitet

Johannes

das alles ab und fertig.

Johannes

Aber wie ist denn dann die

Johannes

Runtime? Das ist ja dann nicht CPython, sondern das ist

Johannes

dann irgendeine andere Runtime, die auf .NET läuft, oder wie?

Johannes

Ja,

Jochen

nee, das ist schon hauptsächlich

Jochen

CPython. Es ist nur so, dass man

Jochen

das irgendwie,

Jochen

also,

Jochen

keine Ahnung.

Jochen

Es ist schon CPython.

Jochen

Aber es

Jochen

funktioniert jetzt

Jochen

halbwegs noch nicht schneller, aber

Jochen

Leute könnten jetzt

Jochen

Optimierungen machen, indem sie halt das

Jochen

irgendwie auf die .NET Runtime

Jochen

optimieren.

Jochen

Ja, war auf jeden Fall

Jochen

irgendwie so, kann man sich mal angucken.

Jochen

Ich werde mal den Artikel dazu in den Shownotes packen.

Jochen

Ja, was

Jochen

hatten wir noch? Genau, noch so Dinge

Jochen

wie

Jochen

PEP 621,

Jochen

irgendwie mehr dazu gekommen, was man jetzt alles so in

Jochen

PyProject-Tommel irgendwie reinschreiben kann

Jochen

an Metadaten. Oh, cool. Was denn?

Jochen

Ja,

Jochen

ich glaube, so ziemlich alles, was

Jochen

halt vorher sonst ein Setup-UI so genannt hätte.

Jochen

Flake 8 auch?

Dominik

Ich glaube, Flake 8 wehrt sich noch so ein bisschen.

Dominik

Ähm,

Dominik

ja.

Dominik

PyTest geht fast, also

Dominik

PyTest ist im Moment noch so mit PyTest

Dominik

Ini-Options, so ein Workaround.

Dominik

Das wäre cool, wenn das normal wäre und

Dominik

ich glaube, Flake 8 hat es noch nicht so wirklich geschafft.

Dominik

Und habe ich noch was vergessen, was fehlt?

Dominik

Ähm,

Dominik

ja,

Jochen

ich glaube, das sind eher so Dinge wie,

Jochen

was ist der Autor von dem Ding und was

Jochen

sind die Abhängigkeiten und diese ganzen

Dominik

Geschichten. Ja, aber so Black-Konfiguration geht zum Beispiel

Dominik

schon rein und... Ja, ja, gut, aber das ist ja

Jochen

ein Third-Party.

Jochen

Ja, ein Third-Party, aber das ist ja nett,

Dominik

wenn man das alles da in die Pipeline drumherum packen kann,

Dominik

weil ich bin ein Freund von monolithischen

Dominik

Konflikts und nicht so ganz vielen kleinen,

Dominik

die irgendwo rumfliegen.

Dominik

Ansonsten, was auch noch

Jochen

ganz,

Jochen

was ich ganz witzig fand,

Jochen

da sind ja irgendwie neue Chips aus Apple rausgefallen.

Jochen

Ja. Hat man gehört.

Jochen

Ja.

Jochen

Waren.

Jochen

Hat man schon so Geräte gesehen?

Jochen

Ja.

Jochen

Also du hast schon so ein...

Jochen

Ich habe jetzt keinen, aber ich habe schon

Jochen

irgendwie Ergebnisse von

Jochen

den Geräten gesehen für

Jochen

Dinge, die ich interessant fand.

Jochen

Und insofern, wenn ich jetzt schwer überlege,

Jochen

ob ich da nicht vielleicht auch mal zuschlagen

Jochen

soll, weil es ist schon

Jochen

sendet, so auf dem Papier jedenfalls und so was man

Jochen

hört.

Jochen

Wenn man in diesem

Jochen

Ökosystem drin ist, dann ist das glaube ich

Dominik

eine Sache. Das ist ja so eine Sache, die ich gar nicht

Dominik

verstehen kann. Also sonst finde ich ja alles, was

Dominik

Mochen macht, total bewundernswert und super.

Dominik

Aber dieses

Dominik

Mekophilie, wie sagt man? Ich weiß nicht.

Dominik

Mekaholika.

Dominik

Fanboytum.

Dominik

Naja, also

Jochen

das Schicke daran ist halt, dass

Jochen

da sind jetzt gar keine

Jochen

Also zum Beispiel bei dem MacBook Air

Jochen

sind halt keine Lüfter mehr drin.

Jochen

Ja, juhu, im Sommer, yay.

Jochen

Ja, aber also die Leute haben das ja schon benutzt

Jochen

und das schaltet halt.

Jochen

Ja, iPhone sind ja auch keine Lüfter drin.

Jochen

Da sind auch keine Lüfter drin.

Jochen

Das ist auch wahrscheinlich, dass das funktioniert.

Jochen

Der schönste Hack, den ich gesehen habe übrigens.

Jochen

Bitte was?

Jochen

Der schönste Hack, den ich gesehen habe,

Johannes

da hat einer die Tesla-App auf seinem Mac installiert

Johannes

und der hat auch Bluetooth

Johannes

und hat damit seinen Mac als Schlüssel

Johannes

für seinen Tesla verwenden können.

Johannes

Hm.

Johannes

Was natürlich sehr praktisch ist,

Johannes

wenn man immer seinen Mac dabei haben muss.

Johannes

Ja, voll gut.

Johannes

Und an, also der muss dann auch an sein.

Dominik

Zum Einkaufen, einmal kurz im Supermarkt.

Dominik

Ja, er hat mal kurz unter den Arm geklemmt.

Dominik

Der Akku hält ja jetzt auch länger,

Jochen

da kann man das dann vielleicht irgendwie aufgeklappen machen.

Jochen

Aber handlicher ist das Gerät trotzdem.

Jochen

Naja, nicht so richtig.

Jochen

Wahrscheinlich sieht der Akku den Tester

Jochen

innerhalb von zehn Minuten leer oder so.

Jochen

Was es da jetzt halt auch gab,

Jochen

ist schon so eine irgendwie Preview-Variante

Jochen

von einer TensorFlow-Version,

Jochen

die halt gegen die entsprechenden Bibliotheken gelinkt ist

Jochen

und dann halt schnell ist halt auch auf Metal

Jochen

und halt auf der Apple-Hardware.

Jochen

Und das war tatsächlich auch ganz nett.

Jochen

Also ich habe das dann auch mal,

Jochen

ich meine, das ist ja immer so ein Problem,

Jochen

man hat halt keine Nvidia-Karten auf Apple

Jochen

und

Jochen

es gibt da einmal so eine Geschichte

Jochen

über PlateML, das ist so eine

Jochen

Intel-Geschichte,

Jochen

die man sich installieren kann, damit wird es dann halt schon mal

Jochen

ein bisschen schneller, also da geht dann schon so ein bisschen was

Jochen

GPU-mäßiges, halt auch mit den

Jochen

AMD-Karten, die da halt drin sind.

Jochen

Aber ist halt nicht so schnell wie Nvidia

Jochen

und ist halt auch nicht so schnell,

Jochen

also die CUDA und

Jochen

diese ganzen Geschichten, das ist damit nicht so richtig vergleichbar,

Jochen

aber so ein bisschen was kriegt man da schon hin,

Jochen

Also zumindest so weit, dass halt so Maschinen in den Geschichten

Jochen

halt auf der GPU in so einem MacBook sind halt genauso schnell

Jochen

wie halt mit den acht CPUs sonst.

Dominik

Ja, weil dann hat Nvidia 3090 oder sowas, da ist ja ...

Jochen

Ja, genau, die ist halt schneller.

Dominik

Die passt in den Mac nicht rein, habe ich gehört.

Dominik

Ja, nee, das geht halt irgendwie nicht.

Dominik

In diese Mac Pros gehen die nicht da rein?

Dominik

Nicht?

Dominik

Dachtest du, die hätten sogar Nvidia-Karten drin?

Jochen

Das kann sein, dass das da geht, ja, das weiß ich nicht genau.

Jochen

ja. Kostet ja wahrscheinlich 5000 Euro

Jochen

für eine Karte oder so.

Jochen

Ja, ist ja egal, komm.

Jochen

Wenn der Standfuß von dem

Jochen

Monitor schon 1000 Euro kostet, dann ist das

Jochen

nicht mehr so wichtig.

Jochen

Aber der ist aus einem massiven Block

Jochen

Aluminium ist der rausgefräst.

Jochen

Ja.

Jochen

Ja, es ist auch, also aus

Jochen

dem Bereich hätte ich auch News.

Johannes

Jochen, was sagst du denn zu dem Durchbruch, was das

Johannes

Proteinfalten angeht? Ja, das klingt

Johannes

auch sehr gut tatsächlich.

Johannes

Das wurde so beschrieben

Johannes

als der erste richtige Anwendungsfall

Johannes

für AI, der erste richtige

Johannes

Durchbruch von AI-Anwendungen.

Johannes

Wie mit den Protein-Fallen.

Johannes

Wo eine

Johannes

amerikanische Firma DeepMind

Johannes

die haben

Johannes

einen Algorithmus vorgestellt, also Algorithmus kann man

Johannes

ja fast nicht sagen, aber die haben eine Technologie

Johannes

vorgestellt, die aus

Johannes

einer Sequenzbeschreibung

Johannes

also

Johannes

die Aminosäuren

Johannes

quasi, die aneinander

Johannes

gereiht werden, genau, die zum Beispiel durch

Johannes

Gene kodiert werden können,

Johannes

das fertig gefaltete

Johannes

Protein berechnet. Und das Problem ist

Johannes

halt, dass die,

Johannes

ja, dass diese Proteine zwar

Johannes

linear hergestellt werden,

Johannes

aber sich dann eben zu einer dreidimensionalen

Johannes

Struktur zusammenfalten. Und weil die eben

Johannes

sehr viele Proteine drin haben, die sich

Johannes

in sehr viele Richtungen falten können, ist die Anzahl

Johannes

der Freiheitsgrade sehr hoch.

Johannes

Und die haben jetzt eben eine Technik vorgestellt,

Johannes

wie man innerhalb von wenigen Tagen

Johannes

so eine Faltung berechnen

Johannes

kann. Also quasi auf einem Strang

Johannes

aus einer

Johannes

RNA. Genau, also was du reinkriegst

Johannes

ist, oder was du gegeben kriegst, ist eine

Johannes

Abfolge von Aminosäuren. Das ist ja fast wie eine

Dominik

RNA, oder? Genau, das ist

Johannes

RNA. Das ist so ein Problem aus der Biologie,

Johannes

was

Johannes

1973 auf irgendeiner Konferenz

Johannes

vorgestellt wurde.

Johannes

Also seit 50 Jahren arbeitet man da

Johannes

dran im Wesentlichen. Und

Johannes

die Frage ist halt, wie dieses Protein

Johannes

dann dreidimensional ausschaut, weil das bestimmt

Johannes

ganz viele der Eigenschaften dieses Proteins

Johannes

und das kannst du nicht blutfaust rechnen,

Johannes

weil der Lösungsraum halt irgendwie 10 hoch

Johannes

1000 ist

Johannes

und die haben

Johannes

jetzt eben so eine Technologie

Johannes

vorgestellt, wo man in, ich glaube, vier Tagen

Johannes

haben sie, vier Tage Rechenzeit haben sie reingesteckt

Johannes

und dann haben sie im Schnitt

Johannes

bei so einem, da gibt es dann so einen Benchmark

Johannes

und so einen Wettbewerb, wo sie

Johannes

im Schnitt 92%

Johannes

Übereinstimmung hatten,

Johannes

wobei 92% Übereinstimmung, das hört sich

Johannes

niedrig an, aber ist wohl extrem hoch,

Johannes

weil die Messwerte, die man so rauskriegt,

Johannes

sind auch immer nur im Bereich zwischen

Johannes

90 und 100 Prozent Übereinstimmung. Also es ist im Wesentlichen

Johannes

wie ein Messwert, den man

Johannes

da rauskriegt. Und das ist eben tatsächlich eine Sache,

Johannes

die man vorher nicht konnte und die es einfach nicht

Johannes

gab. Und

Johannes

die auch in der Medizin sehr, sehr, sehr,

Johannes

sehr, sehr nützlich ist, weil du dann

Johannes

eben nicht die Moleküle

Johannes

synthetisieren und untersuchen musst, was

Johannes

sehr aufwendig und sehr teuer und sehr schwierig

Johannes

ist, sondern du kannst halt sagen, hier, wir haben

Johannes

so eine Gensequenz gefunden, wie sieht

Johannes

denn das Ding aus?

Johannes

Und das ist so, also es wurde wie gesagt

Johannes

beschrieben als so einer der ersten richtigen

Johannes

Durchbrüche von AI-Technologie,

Johannes

von Machine Learning-Technologie,

Johannes

wo jetzt was möglich ist, was vorher

Johannes

einfach nicht möglich war.

Dominik

Das heißt, man kann tatsächlich irgendwann einen ganzen

Dominik

Körper brechen irgendwann mal vielleicht so.

Dominik

Ja, aber also

Jochen

das wurde halt dann sozusagen

Jochen

so vorgestellt als, oder das habe ich gesehen,

Jochen

ich habe dann halt so den, man hat

Jochen

den Fortschritt gesehen als so ein Graph

Jochen

Und dann, die letzten beiden Geschichten waren halt deutlich besser und jetzt halt das letzte so gut wie fast ein Experiment oder quasi genauso gut. Und jemand hat beschrieben, das ist dann halt so, dass der ImageNet-Moment für Proteinfaltung, also wo man halt sieht, okay, jetzt ist es so gut, dass man tatsächlich was damit machen kann.

Jochen

und bei ImageNet war es ja auch so, also

Jochen

bevor Deep Learning

Jochen

da irgendwie, man da mit rangegangen ist,

Jochen

waren die Ergebnisse einfach, man

Jochen

konnte es nicht verwenden. Und das war halt bei

Jochen

diesen Proteinfaltungsgeschichten auch immer so, da war die

Jochen

Genauigkeit 40%, 50% oder so,

Jochen

ja schon, es geht so ein bisschen was, aber es hat halt nicht,

Jochen

war halt, man konnte es nicht verwenden und jetzt ist

Jochen

es halt so weit, dass man es tatsächlich verwenden kann.

Jochen

Und ja, das ist natürlich

Jochen

schon beeindruckend. Ja, DeepMind, auch interessant,

Jochen

ist von Google gekauft worden,

Jochen

die haben wir schon,

Jochen

die hatten doch auch schon AlphaGo gemacht.

Jochen

haben die gemacht, genau, Alpha-Code-Zero,

Jochen

ja.

Jochen

Ja, spannende Sache,

Jochen

aber hat nichts mit Paisen zu tun, also zurück zum Thema.

Jochen

Hunde wollt ihr ewig leben, ja.

Jochen

Tja.

Dominik

Ja, das ist doch gar nicht so schlecht, also so ein Protein-Fighting,

Dominik

da kann man auch bestimmt einige Sachen machen,

Dominik

die den Körper verjüngen oder sowas, das ist bestimmt ein gutes

Dominik

Geschäftsmodell, wenn man da relativ weit vorne ist.

Dominik

Ja, jetzt gerade ist es vor allem

Dominik

spannend, weil man da halt auch

Johannes

mRNA-Sequenzen mitbrechen kann und

Johannes

hat welche, die richtige ist.

Johannes

Gut, gut, ja.

Jochen

ja, da geht einiges

Jochen

genau, ansonsten

Jochen

eine Geschichte und da, das ist ja schon fast

Jochen

eine Überleitung zu

Jochen

dem Thema

Jochen

es ist eine neue Release rausgekommen von

Jochen

Phoenix Live View

Jochen

vor kurzem

Jochen

ich gucke da ab und zu auch mal so ein bisschen

Jochen

rein, weil ich mir dieses ganze Elixier

Jochen

Erlang-Ding halt auch so ein bisschen angucke

Jochen

und

Jochen

das hat jetzt zum Beispiel

Jochen

auch File Uploads drin

Jochen

Oh, das hört sich

Jochen

voll interessant, das hört sich total nach

Jochen

Yagni an, ah, Pfeil Uploads

Jochen

das machen wir in Release 12, das braucht

Jochen

kein Mensch. Ja, ja, ja

Jochen

das hat mich jetzt auch gewundert, ehrlich gesagt, dass das

Jochen

noch nicht drin war, oh Gott

Jochen

ja, jetzt ist es drin und das ist auch tatsächlich sehr schick

Jochen

also, ja, aber

Jochen

genau, genau, da

Jochen

hat sich auch noch ein bisschen was getan

Dominik

Ja, vielleicht musst du nochmal kurz sagen, was Phoenix überhaupt ist

Jochen

Ja, das ist halt sozusagen das Standard

Jochen

oder ich weiß es nicht genau, jetzt

Jochen

bloß nichts Falsches sagen.

Jochen

Ich kenne mich ja jetzt mit Elixier nicht so aus, aber es ist halt

Jochen

so das Web-Framework, was man halt, also

Jochen

Elixier ist halt ein

Jochen

Dialekt oder, sagen wir mal,

Jochen

so eine etwas anders aufgemachte

Jochen

Sprache, die aber auch

Jochen

auf dieser Erlangen vor allem läuft und

Jochen

oder auf der, ja, genau, und

Jochen

zu Erlangen runterkompiliert

Jochen

und Phoenix

Jochen

ist halt sozusagen das Standard-Web-Framework

Dominik

dafür. Und was ist Erlangen? Kann man

Jochen

das essen? Ja, Erlangen ist halt auch so

Jochen

eine Sprache. Die Ericsson-Language.

Dominik

Genau. Wer oder was ist Ericsson?

Dominik

Ericsson ist der

Dominik

große Telefonhersteller.

Dominik

Der große Telefonhersteller aus

Dominik

Norwegen, glaube ich.

Dominik

Woher kommt Ericsson?

Jochen

Und ich weiß nicht genau, wann das entwickelt wird.

Jochen

Er ist natürlich ein Sony-Ericsson.

Jochen

Ach.

Jochen

Ja, und

Jochen

ich glaube, das ist

Jochen

schon ziemlich lange her.

Jochen

Anfang der 80er, weiß nicht, oder irgendwann dann so

Jochen

Schweden.

Johannes

Da gibt es ein ganz, ganz, ganz geniales Video aus den 80ern,

Johannes

wo sie das demonstrieren, das ist R-Lang-System.

Johannes

Mit der Ästhetik

Johannes

der 80er, aber mit der Technologie, die

Johannes

heute, also wenn ich das

Johannes

programmieren müsste, was die damals zeigen,

Johannes

wüsste ich nicht genau, wie ich es machen würde.

Jochen

Ja, ist schon mal ein

Jochen

R-Lang-Nehmen.

Jochen

Ja.

Jochen

Und das ist halt auch heute noch,

Jochen

immer noch, es ist gerade sehr hip im

Jochen

ganzen Lab-Umfeld, so für Backend-Geschichten,

Jochen

deswegen war das halt,

Jochen

weil man quasi, naja, so sehr, sehr

Jochen

robuste Concurrency-Geschichten

Jochen

halt geschenkt kriegt und

Jochen

so, ich meine zum Beispiel

Jochen

WhatsApp ist da drauf halt gebaut

Jochen

und so, ne, und

Jochen

Das wurde doch für, also das hat Erlang,

Jochen

das hat Ericsson doch für seine Telefonsystem-

Jochen

Backends gemacht. Für die Telefon-Switches ist das

Jochen

eigentlich gebaut worden, ja. Genau, und da, die dürfen halt nicht

Johannes

abstützen. Also ich meine, wenn die abstützen, dann ist halt

Johannes

echt blöd.

Johannes

Deshalb ist das so robust.

Johannes

Da gibt's auch einige, es gibt auch einige

Johannes

Multiplayer-Gaming-Systeme,

Johannes

wo die Backends in Erlang geschrieben sind.

Johannes

Einfach, weil die nicht abstürzen dürfen und skalierbar

Johannes

sein müssen. Ja, man sieht

Johannes

die ja nicht. Das sagen immer nur Firmen wieder

Johannes

hier, wir benutzen Erlang, um unsere Backends zu

Johannes

programmieren, aber die siehst du ja nie.

Johannes

Na gut.

Dominik

Ja, also ich habe gerade mal bei Wikipedia geschaut und da steht

Dominik

auf der Übersichtsmap, die

Dominik

ziemlich hässlich ist, Environment

Dominik

CCC. Auch

Dominik

interessant. Crackers Competitors

Dominik

Costumers wollten die wohl sagen, aber naja.

Dominik

Das nur so am Rande, kleiner

Dominik

Joke. Okay. Aber Jochen

Dominik

kompiliert das wirklich zu Erlang

Dominik

runter oder kompiliert das direkt zu Beam?

Johannes

Weil die VM heißt ja Beam VM.

Jochen

Ja, ich meine,

Jochen

ich meine,

Jochen

es kompiliert erst nochmal zu Erlang runter.

Jochen

Und dann, aber

Jochen

ja, genau.

Jochen

Ich gucke dann immer nur so drauf.

Dominik

Zu Beam. Beam me up, Scotty.

Dominik

Was ist denn jetzt wieder Beam?

Johannes

Ja, das ist die VM, die Erlang ausführt.

Johannes

Das ist so wie C-Python.

Johannes

C-Python, niemand interagiert je mit

Johannes

C-Python, obwohl wir alle immer mit C-Python

Johannes

interagieren, aber das ist das

Johannes

eigentliche Programm, was das ausführt.

Johannes

Bei Erlang und Beam ist es genauso. Bei Erlang heißt es halt

Johannes

nicht C-Erlang, sondern es heißt

Dominik

halt Beam. Und dann laufen

Dominik

Dinge wie Elixir auf Erlang.

Dominik

Genau.

Dominik

Und Elixir ist das Django für Erlang.

Dominik

Nee, Phoenix. Das ist das Django

Dominik

sozusagen für Elixir.

Dominik

Das Django für Elixir.

Johannes

Elixir wird auf Erlang und das läuft dann auf Beam.

Johannes

Genau. Und Beam läuft auf?

Jochen

Ich glaube, da gibt es auch irgendwo OTP oder sowas

Johannes

Ja, ich glaube, dass das die Bibliothek ist.

Johannes

OTP ist die, wenn ich das recht weiß.

Johannes

Aber ich lasse mich gerne in den Kommentaren.

Jochen

Genau, das müssen wir uns alle dafür schlagen.

Dominik

Das ist wieder so ein neuer Namespace.

Dominik

Also ich habe überhaupt keine Ahnung, wofür ihr gerade redet.

Dominik

Ich fühle mich etwas abgehängt.

Johannes

Ja, das macht nichts, dann fühlen wir uns besser.

Jochen

Ja, also genau.

Jochen

Eigentlich ist es auch nur, es ist halt deswegen interessant,

Jochen

weil es halt sozusagen für Async und

Jochen

diese Geschichten halt so das,

Jochen

wo man immer sagt, das ist ein Goldstandard,

Jochen

da funktioniert das richtig gut und alle, die das da machen,

Jochen

sind immer so begeistert und schauen auf die anderen herab.

Jochen

Dann muss man auch vielleicht mal gucken, was das eigentlich so kann.

Jochen

Und

Jochen

ja, deswegen gucke ich mir das auch gerade so ein bisschen an,

Jochen

um das halt ein bisschen miteinander vergleichen zu können, alles.

Jochen

Und genau,

Jochen

dazu vielleicht auch gerade noch eine Überleitung

Jochen

zu so einem Podcast

Jochen

Software-Thema,

Jochen

weil es gab schon mal einen Versuch,

Jochen

also

Jochen

noch mal eine Ecke

Jochen

ausholen. So eine

Jochen

der populäreren Geschichten, wie man Podcasts

Jochen

hostet, ist ja irgendwie

Jochen

der

Jochen

Podlove Publisher oder es gibt ja

Jochen

natürlich unterschiedliche Teile, was dieses Hosting betrifft,

Jochen

aber so das Ding, was sozusagen

Jochen

die Feeds generiert und

Jochen

ja

Jochen

irgendwie auch den ganzen Website-Teil

Jochen

so zum Großteil macht.

Jochen

Das ist halt so ein

Jochen

WordPress-Plugin.

Jochen

Vielleicht habe ich schon mal gehört, dass von Tim Püttler

Jochen

auf der Cars-Radio-Expo...

Jochen

Ja gut, der hat das Projekt mal initiiert.

Jochen

Da haben natürlich eine Menge Leute

Jochen

dran irgendwie geschrieben.

Jochen

Und genau,

Jochen

naja,

Jochen

also man kriegt halt so Probleme, wenn man jetzt

Jochen

irgendwie WordPress und dann Plugin hat.

Jochen

Also dazu gibt es

Jochen

jetzt auch einen ganz interessanten

Jochen

Podcast.

Jochen

Padlovers Podcast heißt der irgendwie.

Jochen

Und da wurde über die Geschichte auch schon so

Jochen

einiges erzählt. Und ich habe mir

Jochen

das halt mal angehört, weil ich dachte, für mich ganz interessant,

Jochen

weil ich diesen ganzen Hosting-Teil,

Jochen

den Publisher-Teil ja sozusagen in Django

Jochen

irgendwie

Jochen

gebaut habe. Natürlich

Jochen

nicht das, was das Ding macht, aber halt so rudimentär,

Jochen

dass man damit halt irgendwie

Jochen

für die Anforderungen, die wir haben, das halt so halbwegs hinbekommt.

Jochen

Und

Jochen

ja,

Jochen

dachte, vielleicht kann ich da so ein paar interessante

Jochen

Anregungen mitnehmen, was man da eigentlich alles noch so tun kann

Jochen

und worauf man aufpassen muss und so.

Jochen

Und ich fand das sehr unterhaltsam

Jochen

und ich fand es auch interessant, in welche Probleme

Jochen

sie dabei reingelaufen sind.

Jochen

Zum Beispiel

Jochen

einfach mal so ein bisschen so, ich meine,

Jochen

oder könnt ihr euch das schon vorstellen, was man so für Probleme

Jochen

kriegt, wenn man WordPress als Hosting-Plattform

Jochen

nimmt und dann ein Plugin hat?

Jochen

Nö,

Johannes

ich glaube, da gibt es keinerlei

Johannes

Sicherheitsprobleme mehr und auch keine

Johannes

Interabhängigkeiten

Johannes

und auch keine Dependency-Hell,

Johannes

gar nichts. Ich glaube nicht, dass das, nö, ist nicht.

Johannes

Dass er klick, klick und funktioniert?

Johannes

Ja, also das ist halt

Jochen

so eine, es ist natürlich super

Jochen

zugänglich und es funktioniert überall

Jochen

und insofern

Jochen

kann ich das natürlich in gewisser Weise verstehen, dass man das macht,

Jochen

weil man halt sozusagen, wenn man

Jochen

nicht benutzt wird, dann hilft einem

Jochen

das ja natürlich auch alles nicht.

Jochen

Aber wenn es dann benutzt wird

Jochen

und es ist halt ein WordPress-Plugin, dann hat man

Jochen

halt auch einen Haufen Probleme, die man sonst nicht hätte.

Jochen

Unter anderem also der arme

Jochen

Mensch, der das dann erzählt hat, ich hätte jetzt leider den Namen

Jochen

auch gerade nicht parat, der da schon

Jochen

ganz lange dran rumentwickelt,

Jochen

Und erzählte dann so, ja, also wir haben das, also irgendwann wollten Leute dann so Statistik haben auch und dann liefen aber die Statistik-Jobs irgendwie so ein bisschen länger und naja, normalerweise so WordPress, das läuft dann halt auf Hostern irgendwo und die beenden die Prozesse halt immer so nach einer Minute ungefähr.

Jochen

Und normalerweise ist das kein gutes Zeichen, wenn dein Web-Request länger als eine Minute läuft und dann schießt man den lieber weg, weil wahrscheinlich ist der eh kaputt. Und naja, du blockierst ja auch einen Worker komplett sozusagen und das sind ja Shared-Hoster und da gibt es ja ganz viele Leute und dann blockierst du ja die anderen Ressourcen.

Jochen

Das heißt, ja, nicht so gut und jetzt musst du halt aber irgendwie um diese Beschränkungen drumherum programmieren, weil sowas wie Background-Tasks oder irgendwie Task-Queue-System oder so hast du halt nicht.

Jochen

Du hast halt auch nicht irgendwelche Maschinen mit Workern, die dann halt Sachen abarbeiten oder so, das gibt es halt einfach alles nicht und du musst halt alles in Requests abhandeln.

Jochen

Das heißt, du musst darauf warten, dass ein Request vorbeikommt und dann guckst du halt in eine Kontakt-Tabelle und guckst halt, ob jetzt gerade irgendwas laufen muss und wenn ja, dann läuft das halt in deinem Request.

Jochen

und derjenige, der

Jochen

die Webseite aufgerufen hat, der hat halt ein bisschen Pech gehabt

Jochen

und der muss halt länger warten

Jochen

und, aber du musst halt aufpassen, wenn das

Jochen

länger dauert als eine Minute oder wenn du dich diesem Bereich

Jochen

näherst, dann wird es halt knifflig

Jochen

und dann hat er dann irgendwie so ein Katz-und-Maus-Spiel

Jochen

gebaut, wo man

Jochen

dann so einen Prozess wegforkt

Jochen

nach kurz vor

Jochen

60 Sekunden und dann wieder

Jochen

berechnet, berechnet, berechnet, alles wieder serialisiert

Jochen

wieder wegforkt und dann sozusagen

Jochen

dem Kill immer wegläuft

Jochen

und das ist natürlich schon

Jochen

Also ich meine, ja.

Jochen

Ja, ist eine lustige Übung, würde ich mal sagen.

Jochen

Ja, kann man natürlich machen.

Jochen

Oder halt eben auch so Dinge wie,

Jochen

ja, sie wollten irgendwann die Podcast-Logos anzeigen

Jochen

und da gibt es ja die von iTunes geforderten Größen,

Jochen

das sind so 3000 mal 3000 Pixel, das ist ein bisschen groß.

Jochen

Dann siehst du, okay, das rechnen wir einfach ein bisschen runter

Jochen

und dann, ah, oh Mist, so einfach kann man das aber nicht machen.

Jochen

Man muss ja irgendwie berücksichtigen, dass

Jochen

auf unterschiedlichen Monitorgrößen

Jochen

die Dinge unterschiedliche viele Pixel haben müssen

Jochen

und so. Und wie macht man denn das? Und was ist denn

Jochen

die Standardlösung von WordPress? Und dann haben sie gesehen,

Jochen

oh, es gibt keine. Und

Jochen

das Problem hat mich ja auch schon,

Jochen

das ist auch etwas, wo ich bei Django etwas überrascht war,

Jochen

dass es da einfach nichts gab.

Jochen

Und ja,

Jochen

dann mussten sie das halt auch irgendwie selber

Jochen

bauen. Wo man sich denkt, oh ja, das Problem hatte ich

Jochen

halt auch schon, das habe ich dann auch selber bauen.

Jochen

Aber was

Jochen

das Ganze halt deutlich schwerer macht, ist halt, wenn du

Jochen

nicht selber das alles installiert hast und deine

Jochen

Abhängigkeiten definiert hast, dann hast du halt

Jochen

machst du das vielleicht mit Image Magic

Jochen

oder so auf

Jochen

in zehn unterschiedlichen Variationen

Jochen

über alle möglichen Hoster, die halt alle möglichen

Jochen

unterschiedlichen Versionen

Jochen

davon installiert haben

Jochen

und dann musst du

Jochen

halt Code schreiben, der mit zehn

Jochen

unterschiedlichen Versionen von irgendeiner

Jochen

Bildbearbeitungsgeschichte klarkommt, was natürlich totaler

Jochen

das ist natürlich

Jochen

gruselig alles.

Jochen

Ja, depende sehr.

Jochen

Ja, und genau, all diese Dinge und ja, ich meine, kann man sich ja auch mal selber anhören, wenn das, also es war schon interessant und ich fand das auch total cool, was sie da alles irgendwie mit hingekriegt haben und da rausgeholt haben.

Jochen

Auf der anderen Seite würde ich jetzt sagen, wenn man jetzt nochmal anfängt mit sowas, dann nimmt man doch vielleicht lieber irgendwie ein richtiges Framework zum Entwickeln von Webseiten und nicht irgendwie ein Wordpress.

Jochen

Plug-In, ne? Also...

Dominik

Naja, das Problem ist, was du jetzt gerade gesagt hast,

Dominik

nimmt man vielleicht lieber, ist natürlich nett, wenn man

Dominik

dann weiß, wie es geht. Ich glaube, das ist so die größte...

Jochen

Nee, ich glaube, das war tatsächlich Absicht,

Jochen

dass das so... Weil

Jochen

die Frage war, wie kommt

Jochen

man halt zu einer User-Basis?

Jochen

Und das geht

Jochen

halt nur, wenn man dahin geht, wo die Leute sind

Jochen

und die sind halt bei WordPress. Oder waren sie auf jeden Fall

Jochen

zumindest damals

Jochen

zu mehr oder weniger 100 Prozent.

Jochen

Ja, ich weiß nicht, ob sich das groß geändert hat.

Jochen

Ja doch, es gibt mittlerweile Hoster.

Jochen

Es gibt zum Beispiel Podigy

Jochen

als Podcast-Hoster,

Jochen

der inzwischen auch relativ groß ist

Jochen

und

Jochen

einer der Gründer davon

Jochen

war halt auch bei einem von diesen

Jochen

Podcast-Episoden zu Gast

Jochen

und der erzählt dann so, ja,

Jochen

wir haben das dann auch gemacht,

Jochen

irgendwie so Podcast-Hosting irgendwie mal gebaut,

Jochen

aber wir haben dann Ruby on Rails genommen und da dachte ich mir so, ja,

Jochen

okay, das ist schon mal

Jochen

eine deutlich bessere Wahl. Also ich würde

Jochen

auch, also wenn ich so spontan sagen müsste,

Jochen

so Ruby on Rails ist wahrscheinlich eine gute Wahl

Jochen

oder eben Django wahrscheinlich auch,

Jochen

um sowas zu bauen, weil da hat man halt einen Großteil

Jochen

von dem ganzen Kram, den man braucht, der ist da halt

Jochen

schon einfach drin.

Jochen

Oder nachladbar zumindest.

Jochen

Ja, und man hat halt

Jochen

Wege, damit umzugehen

Jochen

und das macht es halt dann

Jochen

natürlich schon mal deutlich einfacher.

Jochen

Auf der anderen Seite ist es dann halt so, wenn du

Jochen

jetzt aber eigentlich

Jochen

die ganzen

Jochen

Podcasts,

Jochen

Blogs, die es da draußen gibt, unterstützen möchtest,

Jochen

in dem, was sie tun. Ja, ist halt schwierig.

Jochen

Da musst du halt dann irgendwas für WordPress entwickeln.

Jochen

Das ist natürlich nicht so einfach. Also ich weiß es nicht.

Jochen

Ich habe keine Antwort darauf.

Jochen

Ja. Aber ich fand es halt

Jochen

interessant, dass das halt, wie sich das

Jochen

da so entwickelt hat. Und

Jochen

deswegen kam ich eigentlich drauf.

Jochen

Die haben dann nochmal versucht, das alles komplett

Jochen

neu zu bauen. Und zwar in Elixir.

Jochen

Aha. Ja.

Jochen

Die Katze beißt sich in den

Jochen

Schwanz. Genau. Und

Jochen

eigentlich eine ganz gute Idee.

Jochen

Aber das ist dann irgendwie auch

Jochen

nicht so richtig

Jochen

dann fertig geworden.

Jochen

Aber im Prinzip würde ich auch sagen,

Jochen

ja, so Elixir klingt schon mal deutlich besser.

Dominik

Das hast du dann nicht gemacht, weil man das mit Asynch

Dominik

so toll machen kann, bei Elixir?

Dominik

Ja, weil du damit halt auch

Jochen

die harten Probleme lösen kannst.

Dominik

Du quärst dich mehr krass mit dem Maus-Unterherspiel.

Jochen

Ja, nee, das ist gut, aber

Jochen

das ist nochmal eher solche Sachen

Jochen

wie, du willst ja auch zum Beispiel die Files

Jochen

irgendwie

Jochen

distributieren, zum Beispiel.

Jochen

Und du kannst

Jochen

natürlich ein CDN nehmen, aber ich merke das jetzt auch

Jochen

irgendwie, so CDN ist halt

Jochen

einmal teuer und

Jochen

ja, also weiß nicht,

Jochen

wäre eigentlich schon cooler, das selber

Jochen

machen zu können, aber dann ist halt wieder blöd.

Jochen

Also das kannst du dann nicht irgendwie mit einem WordPress-Plugin

Jochen

machen, da kannst du keine Files haben.

Jochen

Oh, kann man schon, aber

Jochen

das...

Jochen

Was ist mit einem selbst gecodeten Minio oder sowas?

Jochen

Ja,

Jochen

ja, ja, gut, aber

Jochen

es ist halt auch kein CDN, hast du auch

Jochen

keine, wenn du globale

Jochen

Infrastruktur haben willst.

Dominik

Also du meinst, die Verteilung über mehrere Länder hinweg ist sonst

Dominik

kompliziert?

Dominik

Ja, auch generell die schnelle Anbindung,

Dominik

wenn du halt sehr viele große Dateien

Dominik

hosten willst, ist nicht

Dominik

ganz simpel, das performant

Jochen

hinzukriegen. Der Vorteil bei Elixir wäre halt,

Jochen

du kannst halt alles damit machen.

Jochen

Du kannst halt da dein

Jochen

File-Verwaltungs-Dings mitmachen,

Jochen

genauso wie dein Backend für

Jochen

irgendwie dein Frontend

Jochen

du musst eigentlich nie

Jochen

diese Umgebung verlassen

Jochen

und kannst darin halt alles bauen.

Johannes

Ja, aber warum ist das denn so? Warum ist das denn für alles geeignet?

Dominik

Das hört sich so an, als würdest du den Podcast umbenennen wollen.

Dominik

Noch nicht, nein.

Dominik

Lernst du denn Elixier

Dominik

oder ist es nur Neid, der aus dir spricht?

Dominik

Ja, es ist schon Neid

Dominik

auch, ja.

Dominik

Kann ich verstehen.

Dominik

Ich habe tatsächlich auch

Jochen

hier so Elixier in Action oder sowas, Buch rumliegen.

Jochen

Ich habe auch schon mal reingeguckt, aber ich habe es noch nicht.

Johannes

Das diffundiert jetzt dein Kopfkissen durch in deinen Kopf.

Jochen

Genau, das hoffe ich mir davon.

Jochen

Mal schauen, was ist die beste Methode.

Jochen

Ich habe auch noch so ein, zwei Bücher

Jochen

unter dem Kopfkissen.

Jochen

Bei Alexi habe ich auch immer das Gefühl,

Jochen

ich hätte gerne die Zeit schon reingesteckt,

Jochen

das mal gelernt zu haben, aber jetzt

Jochen

habe ich doch auch keine Lust, das gerade jetzt zu machen.

Jochen

Ja.

Jochen

Ja, aber Jochen, erklär mal, warum ist das so?

Jochen

Ja, Kekse

Jochen

sind ein großes Thema.

Jochen

Also was halt auch

Jochen

eben, weshalb ich das jetzt auch so betont habe,

Jochen

Man kann damit halt alles machen. Du kannst damit halt auch

Jochen

Files surfen und kriegst halt, also zum Beispiel

Jochen

irgendwie nehmen wir dieses Problem von Hand mit dem

Jochen

Django-Channel ja auch schon ein paar Mal

Jochen

irgendwie private Files surfen

Jochen

oder sowas.

Jochen

Wenn du das jetzt irgendwie,

Jochen

nehmen wir an, du nimmst jetzt mal Django als

Jochen

deine Podcast-Hosting-Plattform

Jochen

und jetzt willst du aber sowas

Jochen

auch haben, vielleicht wie private Podcasts

Jochen

oder keine Ahnung, wenn es sowas gibt, keine Ahnung, ich weiß es

Jochen

nicht, aber du willst irgendwie den Zugriff beschränken.

Jochen

Oder Bilder oder so von der Familie.

Jochen

Deine geheimen Vertragsdaten.

Jochen

irgendwie sowas, dann

Jochen

ist das halt nicht mehr so ganz einfach,

Jochen

weil die Files kannst du ja

Jochen

auch nicht mit Django direkt ausliefern, wenn du das

Jochen

jetzt mal so die Folgen erst abgreifst. Kannst du schon.

Jochen

Ist halt aber dann

Jochen

nicht so gut, wenn da tausend Leute gleichzeitig drauf

Jochen

zugreifen. Wenn da viele Leute gleichzeitig

Jochen

drauf zugreifen, geht das nicht so gut.

Jochen

Auf der anderen Seite kann eigentlich nur

Jochen

Django bzw. der Applikationsserver entscheiden,

Jochen

ob jetzt irgendwie... Privat, viele Leute gleichzeitig,

Jochen

hatte ich auch irgendwie gerade so ein bisschen, ja.

Jochen

Ob ein Request autorisiert ist oder nicht.

Jochen

Der Dominik bezweifelt unseren Erfolg.

Jochen

Wie, warte, wieso?

Jochen

Naja, also das ist...

Jochen

Privat und viele Leute gleichzeitig.

Jochen

Natürlich, in unserer coolen Gang laden viele Leute...

Jochen

Das passiert relativ schnell.

Jochen

Das passiert möglicherweise schon mit einem Browser,

Jochen

kriegst du das halt schon hin.

Jochen

Also wenn du halt irgendwie da, weiß ich nicht...

Dominik

Wenn du mittlere Maustaste hast, dann mach dir einen neuen Tab auf.

Dominik

Ja, wenn du einen neuen Tab aufmachst.

Johannes

Ja, auch wenn du jetzt zehn Bilder auf einer Seite hast,

Johannes

dann ist es schon vorbei.

Jochen

Das heißt, du kriegst das schon mit einem Browser hin.

Jochen

Also wenn du jetzt, ich weiß nicht, wie viel Worker du normalerweise hast,

Jochen

wenn du jetzt eine billige VM hast

Jochen

auf Hetzner oder weiß ich nicht,

Jochen

dann ist es halt, wenn du da nur

Jochen

ein paar Prozesse laufen hast, dann sind die halt schon mit einem

Jochen

Request ausgelastet.

Jochen

Was ist jetzt mit Xcent-Pfeil

Jochen

noch? Genau, das wäre dann halt

Jochen

sozusagen eine Möglichkeit, das Problem zu

Jochen

lösen, dass man halt, dass der

Jochen

Request an den Applikationsverfahrer geht, der

Jochen

überprüft, ob der autorisiert

Jochen

ist oder nicht und schickt dann halt einen

Jochen

Header zurück in der Response, ja,

Jochen

also dieser Request

Jochen

sah gut aus und dann geht jetzt irgendwas

Jochen

was in der Proxy-Pipeline in Nginx

Jochen

oder so hin, sieht diesen

Jochen

Header in der Response und sagt,

Jochen

ah, das war eigentlich eine File-Response,

Jochen

aber der Applikations-Server kann ja jetzt keine

Jochen

Files zurückschicken, das wäre ja blöd.

Jochen

Dann bleibt da ja die ganze Zeit die Verbindung offen

Jochen

und es gibt nicht so viele Applikations-Server.

Jochen

Daher nehme ich jetzt mal diesen Request,

Jochen

diese Response und tausche die aus durch

Jochen

eine File-Response

Jochen

mit dem echten File, auf das ich Zugriff habe

Jochen

und schicke das zurück.

Dominik

Ja, so ist die Konfiguration dann doch wieder

Dominik

eigentlich relativ blibberle, weil in den X

Dominik

einen Eintrag macht, der dann dieses

Dominik

X-File-Response-Send-Dings

Dominik

macht. Ja, aber auf jeden Fall Nginx benutzen.

Dominik

Genau. Geht das nicht mit Kendi?

Dominik

Aber Jochen, warum ist denn das jetzt besser?

Dominik

Warum ist denn das besser, wenn der

Dominik

Nginx das macht, anstatt dass unser

Dominik

Django, unser Glydekorn oder sowas...

Jochen

Bei dem Nginx ist das halt egal, wenn da

Jochen

tausend Requests reinkommen. Aber warum?

Johannes

Warum ist es dem egal und warum ist es uns nicht egal?

Johannes

Ja, deswegen, weil halt

Jochen

sozusagen eine Verbindung den Nginx

Jochen

nicht blockiert. Also selbst wenn

Jochen

er da Daten zurücksendet, dann kann

Jochen

er das auf tausend Verbindungen gleichzeitig

Jochen

tun. Das geht aber jetzt bei einem

Jochen

normalen Django-Applikationsserver

Jochen

so nicht, sondern da ist der Prozess

Jochen

komplett geblockt, weil der halt synchron

Jochen

Sachen rausschreibt. Das heißt, das müsste man

Jochen

einen ASCII-Django nehmen.

Jochen

Der ist quasi

Johannes

besser parallel als...

Jochen

Ja, also

Jochen

der macht halt parallel I.O.

Jochen

Und das geht

Jochen

mit Django erstmal so

Jochen

nicht. Das geht jetzt inzwischen auch so ein bisschen, aber

Jochen

erstmal nicht so einfach.

Jochen

Und das Problem,

Jochen

was ich damit habe, sozusagen aus der Systemperspektive,

Jochen

ist halt, du musst

Jochen

halt einfach nur, um diese Konfiguration

Jochen

dann testen zu können, dass, wenn du das

Jochen

jetzt lokal überprüfen willst, funktioniert das denn alles

Jochen

so, wie ich das gedacht habe, dann musst du dann

Jochen

Nginx hochfahren und eine Datenbank

Jochen

und dann deinen Applikationsserver

Jochen

und ein Caching. Ja, du brauchst es wesentlich

Johannes

nur in einer Staging-Umgebung testen, oder? Also

Johannes

in einer Develop-Umgebung

Johannes

hast du die ganzen Bauteile ja normalerweise

Jochen

nicht. Ja, und das kannst

Jochen

schon, dann fährst du halt einen Haufen Docker-Container hoch, geht schon.

Jochen

Ja, gut, aber das machst du ja nicht zum

Jochen

entwickeln, sondern das machst du ja wirklich nur zum überprüfen.

Jochen

Ja, naja,

Jochen

also, aber

Jochen

kann man nicht alles machen. Also gut, ich mach das nicht.

Dominik

So, ich stelle Docker-Compost ab und dann ist

Dominik

die ganze Liste, die in der YAML drin ist, die wird dann einfach mal

Dominik

hochgefahren. Ja,

Dominik

der Punkt ist nur, es ist halt... Ja, das mach ich schon auch, aber

Dominik

es ist halt ein Haufen... Wenn 3 oder 4 so Dinge laufen

Dominik

hat, dann ist schon der Speicher voll.

Jochen

Jaja, also es ist halt aufwendig und

Jochen

es ist halt auch irgendwie eine komplizierte

Jochen

Konfiguration und es ist halt fehleranfällig.

Jochen

und wenn du jetzt

Jochen

Elixir verwendest,

Jochen

dann ist das halt alles,

Jochen

dann kannst du das lokal testen, du kannst

Jochen

lokal das entwickeln und du kannst

Jochen

deployst es so produktiv,

Jochen

natürlich vielleicht mit einer etwas anderen Konfiguration, aber

Jochen

mehr oder weniger genauso, wie du es lokal getestet hast

Jochen

und wenn das dann lokal funktioniert, dann funktioniert das

Jochen

dann auch und du brauchst keine komplizierte Architektur mit

Jochen

irgendwie noch drei anderen

Jochen

Teilen, die halt zusammen

Jochen

funktionieren müssen, damit es klappt insgesamt

Jochen

und das hat natürlich schon einen gewissen Reiz.

Jochen

Also ich meine, ich

Jochen

entwickle auch viel mit Docker, weil das

Jochen

halt, ja, ich meine, bei ganz

Jochen

vielen Leuten wahrscheinlich so das Mittel der Wahl ist, um halt

Jochen

Entwicklungsumgebung zu vereinheitlichen. Und bei mir ist

Jochen

das so, also das lüftet,

Jochen

also mein Laptop lüftet einfach die

Jochen

ganze Zeit. Ich dachte, er hat keinen Lüfter mehr. Ach so,

Jochen

stimmt, das war noch mal. Und wenn ich das vom Strom

Jochen

abstecke, dann dauert das eine Stunde und dann ist der Akku leer.

Jochen

Und das ist halt irgendwie eigentlich

Jochen

kein schöner Zustand. Aber so ist

Johannes

es halt. Also das ist bei mir nicht so,

Johannes

Jochen. Da ist

Johannes

eine andere Konfiguration.

Johannes

Ich sage mal, es ist eine andere Konfiguration.

Jochen

Ich versuche auch gerade so ein bisschen wieder von dem Docker-Zeugs runterzukommen,

Jochen

weil das ist halt echt das...

Jochen

Ach ja, und jetzt bei den neuen

Jochen

Macs geht das ja auch gar nicht mehr.

Jochen

Die haben keine Virtualisierungsunterstützung.

Jochen

Okay, cool.

Jochen

Wie war der Fortschritt?

Dominik

Es gibt keine Virtualisierungsunterstützung, also kein Parallels

Dominik

oder was?

Dominik

What? Wegen ARM? Warum?

Dominik

Ja, ich weiß

Dominik

nicht, ob das noch kommt oder so, aber

Jochen

einen Tag gibt es das auf jeden Fall nicht.

Jochen

Ach cool, dann muss man sich endlich einen anschaffen.

Jochen

Wirklich nicht. Keine Methodisierung.

Jochen

Brauchst dann zwei Macs, einen für

Jochen

Windows und einen für

Jochen

Microsoft.

Jochen

Ja gut, aber das sind ja jetzt alles nur, also ich meine,

Johannes

wie man seine Entwicklungsumgebung betreibt

Johannes

und warum man das wie macht,

Johannes

das ist ja so ein bisschen freigestellt. Aber

Johannes

der eigentliche

Johannes

Hintergrund ist doch halt wirklich der,

Johannes

dass man in Python einfach daran

Johannes

gebunden ist,

Johannes

dass jeder Worker einen Request

Johannes

bearbeiten kann, weil die halt nicht parallel

Johannes

arbeiten können. Und in Elixir

Johannes

ist es halt nicht so, weil die

Johannes

VM, auf der das läuft, halt super

Johannes

parallel ist, weil die alles gleichzeitig machen können.

Johannes

Auch hier wieder mit dem Hintergrund halt,

Johannes

dass das aus einem Telekommunikations

Johannes

Background kommt und wenn

Johannes

die Hardware nur ein Telefonat

Johannes

gleichzeitig machen kann, dann ist das

Johannes

halt ziemlich blöd und

Johannes

es ist besser, wenn man tausend Telefonate gleichzeitig

Dominik

macht. Das erinnert mich an die 90er, wo mein Dad

Dominik

mich die ganze Zeit angeschrien hat, geh aus dem

Dominik

Internet, ich will telefonieren.

Johannes

Und wenn ihr da halt so einen Knotenpunkt gehabt

Johannes

hättet, dann hättet ihr vielleicht mehrere

Johannes

Sachen. Aber so Telefonate

Johannes

haben ja auch üblicherweise sehr strenge

Johannes

Real-Time-Anforderungen. Das heißt,

Johannes

es reicht ja nicht, tausend Sachen gleichzeitig

Johannes

zu machen, sondern du musst ja tausend Real-Time-Sachen

Johannes

gleichzeitig machen.

Johannes

Und dann ist dieses

Johannes

sowieso schon schwierige Problem nochmal direkt

Johannes

ein kleines bisschen noch viel schwieriger

Johannes

geworden.

Johannes

Und

Johannes

das ist so ein bisschen für mich das Coole an dieser

Johannes

ganzen Erlangen-und-Elixir-Sache,

Johannes

weil die halt einfach eine Basis haben,

Johannes

eine VM haben, die

Johannes

knallhart darauf ausgerichtet ist,

Johannes

tausend Sachen gleichzeitig in Realtime zu

Johannes

machen. Und wenn man das

Johannes

braucht, dann ist das eine absolut geniale

Johannes

Sache. Und das ist, glaube ich, eben in so einem Web-Umfeld

Johannes

kann das wirklich was sein, wo man das einfach ausnutzen

Johannes

kann, wo du halt wirklich sagen kannst, okay,

Johannes

da kommen Dateien rüber, da kommen

Johannes

Authentifizierung rüber, da kommt alles

Johannes

drüber.

Johannes

Und

Johannes

ja, das ist auch so ein bisschen die Faszination,

Johannes

das ist der Grund, warum ich das gerne mal

Johannes

gelernt gehabt hätte.

Jochen

Ja, oder noch ein Beispiel, wo das vielleicht ein bisschen deutlicher wird. Ich habe jetzt gerade nochmal kurz drüber nachgedacht. Also wenn man jetzt zum Beispiel etwas, was man häufig nicht hinkriegt, es gibt so eigentlich, was man gerne hätte eigentlich, ist dieses HLS, also HTTP Livestreaming.

Jochen

sozusagen, das ist so ein Standard,

Jochen

im Grunde, das zackt halt

Jochen

große Dateien in viele kleine und

Jochen

aber du brauchst halt Server-Unterstützung

Jochen

dafür. Wenn du das jetzt gerne

Jochen

anbieten würdest, sodass Podcast-Clients

Jochen

das sozusagen nutzen können, um halt

Jochen

auch auf schlechten Verbindungen

Jochen

und halt auch irgendwie online Sachen zu streamen,

Jochen

dann hast du halt, wenn du jetzt ein normales

Jochen

System baust, sag ich jetzt mal, so eben mit Ruby und Rails

Jochen

und keine Ahnung, Nginx und so und weißer Teufel,

Jochen

das hinzukriegen

Jochen

wird ein echter

Jochen

Stunt, während

Jochen

wenn du das halt alles in Elixir machst, dann ist das

Jochen

halt bloß Code, den du schreibst.

Jochen

Du musst auch den Standort unterstützen und du musst

Jochen

es halt irgendwie hinkriegen, aber das ist halt auch

Jochen

nur dein Applikationscode und nicht irgendwie

Jochen

ein großes System, was du da irgendwie drumherum

Jochen

konfigurieren musst.

Jochen

Und du kannst alle diese Anforderungen damit

Jochen

in den Griff kriegen. Das ist halt

Jochen

schon ein gewisser Charme.

Jochen

Ja,

Jochen

es ist einfach tief

Jochen

in einem Web-Server drin.

Jochen

Du hast einfach

Johannes

die Fähigkeiten, die du in einem

Johannes

Nginx hättest. Ich meine, im Prinzip kannst du das ja

Johannes

alles mit Nginx-Modulen machen. Kannst du ja

Johannes

Module schreiben.

Johannes

Nur, dass

Johannes

die Zuhörer haben gerade eben abgeschaltet.

Jochen

Die sind schon lange weg. Dann muss man das halt

Jochen

auch tun und das will eigentlich keiner.

Dominik

Ja, also okay. Das kann man mit

Dominik

Caddy und Traffic oder sowas nicht einfach machen.

Dominik

Was kann man bei alter Alternativen noch?

Dominik

Nein, leider alles nicht.

Jochen

Also kannst du auch

Jochen

in Traffic reinbauen. Musst du dann halt

Jochen

in Go programmieren.

Jochen

Caddy ist auch Go, oder? Ja, genau.

Jochen

Kannst halt auch in Go schreiben.

Johannes

Können die beide Module, die nachladbare

Johannes

Module?

Johannes

Ja, so middleware.

Johannes

Oder musst du das dann halt direkt selber kompilieren?

Jochen

Egal. Ja, also ist auf jeden Fall

Jochen

dann nicht mehr so richtig einfach. Und es ist

Jochen

halt ganz was anderes als die Applikation, die du dann

Jochen

normalerweise so schreibst.

Jochen

Aber genau, also wie kriegt

Jochen

Erlang das denn jetzt eigentlich hin?

Jochen

Es verwendet halt das

Jochen

sogenannte

Jochen

Actor-Model.

Jochen

Oh, jetzt.

Jochen

Du musst auch gleich noch,

Jochen

wenn du noch besser klingen willst, musst du sagen,

Jochen

Shared Nothing Concurred Programming via Message

Jochen

Parsing. Okay.

Jochen

Ja. Schön, haben wir

Jochen

jetzt, wissen alle Bescheid, oder?

Jochen

Fertig für heute.

Jochen

Nee, ich bin gerade abgestürzt.

Jochen

Das ist auch so, also das ist was, was man

Jochen

sehr schnell, ich habe ja mal versucht, Erlang

Jochen

zu lernen.

Jochen

Habe es dann

Jochen

wieder aufgegeben.

Jochen

Aber das ist so was, das ist so was, so was

Johannes

Konzeptuelles, was man sehr schnell lernt,

Johannes

wo man sich aber ungeheuer schwer nur

Johannes

dran gewöhnen kann. Also in dem

Johannes

Modell, in dem ich üblicherweise

Johannes

so lebe und programmiere, in Python,

Johannes

da schreibt man halt Programm und es wird von

Johannes

oben nach unten abgearbeitet. Und wenn ich eine Funktion

Johannes

aufrufe, dann ist es so, wie wenn ich die Funktion

Johannes

da eben an die Stelle hin kopiert hätte.

Johannes

Wesentlichen

Johannes

so, bis auf so ein paar Ausnahmen mit

Johannes

Rekursionen und Scopes und so, ist das

Johannes

das Modell, was ich im Kopf habe.

Johannes

Wenn ich eine Funktion aufrufe, dann ist es so, wie wenn die

Johannes

da jetzt steht.

Johannes

Und in Erlangen ist das aber nicht so. In Erlangen ist das Modell so ein bisschen anders. Da schreibt man ein Programm und es besteht aus ganz vielen Prozessen. Und auch was ein Prozess ist, ist da auch erstmal, das wird so ein bisschen, ja ein Prozess ist, stell dir einfach einen Prozess vor.

Johannes

Und die können sich dann Nachrichten schicken und zwar an ihre Mailboxes. Also jeder Prozess hat eine Mailbox und da kann man sich Nachrichten hinschicken. Und das Einzige, was diese Prozesse machen, ist im Wesentlichen Nachrichten aus ihren Mailboxes abrufen und die bearbeiten und anderen Prozessen Nachrichten in ihre Mailbox reinschicken. Und das ist von der Vorstellung her was total Verrücktes, was total Absurdes, weil wie kann man denn daraus ein funktionierendes Programm machen?

Johannes

Das könnte man ja in Django auch machen,

Dominik

indem man irgendwie so einen Cache für eine Datenbank nutzt,

Dominik

als diesen Mailbox-Layer oder sowas.

Dominik

Nee, kannst du da nicht machen,

Dominik

weil das tatsächlich da eine Entsprechung in der Maschine hat,

Johannes

weil diese Sachen alle gleichzeitig laufen.

Johannes

Und das ist so ein bisschen die Macht davon,

Johannes

das Coole davon.

Johannes

Und Mailboxes und Processes müssen nicht eins zu eins sein.

Johannes

Das heißt, du kannst an einem Mailbox viele Prozesse ranmachen

Johannes

oder ein Prozess kann mehrere Mailboxes bearbeiten,

Johannes

Je nachdem, wie dein System halt gerade an der Anforderung ist.

Johannes

Okay, aber warum ist das jetzt so cool?

Johannes

Das Coole ist, diese Prozesse heißen Actor.

Johannes

Dieses System aus Prozess und Mailbox heißt Actor.

Johannes

Und das hat eine bestimmte, oder so wie ich es mir vorstelle,

Johannes

hat das eine bestimmte Zuständigkeit.

Johannes

Das System ist zuständig für Dateien ausliefern.

Johannes

Und wenn ich eine Datei ausliefern möchte,

Johannes

dann sage ich, muss ich es nicht selber machen,

Johannes

sondern ich schicke nur eine Nachricht an die Dateien

Johannes

ausliefern Mailbox. Und da ist irgendjemand und der

Johannes

bearbeitet die dran. Das heißt, wenn

Johannes

ich entschieden habe, ich als

Johannes

Anwendungslogik habe entschieden, da muss jetzt diese

Johannes

Datei ausgeliefert werden, dann

Johannes

ist meine Arbeit beendet, indem ich eine

Johannes

korrekt formatierte Nachricht an die Mailbox

Johannes

Dateien ausliefern schicke.

Johannes

Dann bin ich fertig.

Johannes

Und auf der anderen Seite dieser Mailbox

Johannes

ist halt irgendein weiterer Prozess,

Johannes

der macht nichts anderes als

Johannes

da kommt eine Nachricht, ich soll

Johannes

eine Datei ausliefern an folgende

Johannes

Verbindung oder an folgende IP oder sonst was.

Johannes

Also mache ich das. Und dieser Prozess

Johannes

macht nichts anderes. Das heißt, es gibt

Johannes

einen Prozess, der ist zuständig für, oder

Johannes

eine Mailbox, ja, einen Actor,

Johannes

der ist zuständig für Dateien ausliefern. Es gibt

Johannes

einen Actor, der ist zuständig für Authentifizierung.

Johannes

Es gibt einen Actor, der ist zuständig für die Datenbank.

Johannes

Es gibt einen Actor, der ist zuständig für

Johannes

was weiß ich, SSL Termination,

Johannes

was auch immer man haben möchte, ja.

Johannes

Bühne frei.

Johannes

Jeder Actor macht eine Sache

Johannes

und ist für eine Sache zuständig.

Johannes

Und wenn jemand anders was machen soll,

Johannes

dann ist es einfach nur eine Nachricht.

Johannes

So, jetzt könnte man sagen,

Johannes

okay, das ist ja in einem objektorientierten System

Johannes

nicht anders.

Johannes

Ja, da schickt man Nachrichten von Klassen zu Klassen.

Johannes

Der Unterschied ist,

Johannes

dass diese Actors selbst laufende Prozesse sind.

Johannes

Das heißt, wenn ich eine Nachricht schicke,

Johannes

dann wird die halt gleichzeitig,

Johannes

die wird jetzt sofort bearbeitet.

Johannes

Ich muss nicht warten,

Johannes

bis die Nachricht abgearbeitet ist von der Klasse.

Johannes

Und das kann ja sehr lange dauern.

Johannes

Wenn meine View-Klasse aufgerufen wird

Johannes

und ich eine Datei ausliefern muss,

Johannes

dann dauert es halt so lange, wie es dauert,

Johannes

die Datei auszuliefern und dann ist die Nachricht bearbeitet.

Johannes

Sondern das sind wirklich einfach nur

Johannes

kurze Nachrichten. Mach das. Mach das. Tu das.

Johannes

Hier ist was passiert.

Johannes

Also Events.

Johannes

Das sind einfach nur

Johannes

Dinge, die passieren sollen oder Nachrichten,

Johannes

die in dem System relevant sind und die werden

Johannes

dann sofort weiter bearbeitet. Und derjenige,

Johannes

der für die Authentifizierung zuständig ist,

Johannes

der kann sofort den nächsten Request authentifizieren.

Johannes

So, das ist die eine Sache. Die andere Sache ist, in Klassen ist es, wenn man eine objektorientierte Architektur hat, dann ist es sehr leicht, Daten zu verteilen. Da gibt es diese, wir haben ja schon drüber gesprochen, es gibt diese Sachen, wie man Klassen aufbauen sollte und dass die abgeschlossen sein sollten und dass die ihre privaten Daten privat halten sollen und das Null-Interface und so weiter.

Johannes

Aber im Endeffekt ist es ja doch irgendwie so, dass man schon ungefähr weiß, was diese Klasse wie macht. Und auch, was die für Daten enthält. Und dann manchmal ist es halt auch so, dass man auf Daten zugreifen muss, die halt da drin sind und die draußen sind. Das geht in diesem Ektormodell überhaupt nicht. In dem Ektormodell gibt es nur eine Möglichkeit, mit einem anderen Ektor zu kommunizieren und das ist über eine Nachricht. Das heißt, alles, was in diesem Ektormodell passiert ist, du schickst Nachrichten.

Dominik

Aber die E-Mail-Box kann man dann klonen oder was?

Dominik

Oder dass die doch gleichzeitig irgendwas machen können?

Dominik

An der einen Mail-Box, wie du gesagt hast?

Dominik

Die Mail-Box ist

Dominik

der Endpoint.

Johannes

Du schreibst eine Nachricht und du tust die in den Briefkasten

Johannes

rein und dann bist du nicht mehr dafür verantwortlich.

Johannes

Also die Worker holen sich ihre Sachen alle raus.

Johannes

Dass da zehn Leute gleichzeitig

Johannes

diese Mail-Box bearbeiten, das kann dir völlig egal sein.

Dominik

Dann hast du so ein

Dominik

NIFO oder FIFO oder sowas,

Dominik

eine Methode und kannst dann einfach Dinge da rausnehmen

Dominik

aus der Mail-Box.

Jochen

Ja, also davon gibt es

Jochen

dann sehr, sehr viele. Also das ist halt so, dass

Jochen

ich weiß nicht,

Jochen

also Tausende gar kein

Jochen

Problem, auch Millionen kein Problem.

Jochen

Und

Jochen

das ist

Jochen

also ja,

Jochen

das kannst du quasi beliebig

Jochen

hochskalieren, sagen wir mal so.

Johannes

Man kann die auch dynamisch neu starten.

Johannes

Die werden auch dynamisch neu gestartet.

Johannes

Und wenn so einer abbricht, wenn einer kaputt geht,

Johannes

weil er irgendeine Nachricht nicht verstanden hat,

Johannes

dann wird der halt gelöscht und einfach ein neuer gestartet.

Johannes

da, zack, der ist jetzt weg.

Jochen

Ja, was ja kein Problem ist,

Jochen

wenn sozusagen,

Jochen

also was man dazu noch sagen muss,

Jochen

genau, eine schöne

Jochen

Eigenschaft sozusagen für dieses Modell,

Jochen

die halt Erlang da auch direkt mitbringt,

Jochen

ist, dass da das ja so eine

Jochen

funktionale Vorbeimersprache ist, ist halt

Jochen

sowas wie Daten verändern,

Jochen

das geht halt einfach nicht.

Jochen

Das ist

Jochen

prinzipiell nicht möglich.

Jochen

Du kannst halt bloß Daten kopieren, aber

Jochen

das heißt, du kannst Sachen auch mal perfekt cachen

Jochen

und so, weil

Jochen

und es ist auch egal, wer da was

Jochen

macht, weil es ist ja sowieso immer nur

Jochen

das Gleiche, ja, es ist halt nie,

Jochen

du kannst, es ist nicht möglich, dass jemand hinterher

Jochen

irgendwie Daten verändert hat und das in einem

Jochen

anderen State ist oder so,

Jochen

sondern, ja,

Jochen

wenn der State irgendwie

Jochen

kopiert wird und dann macht das halt ein anderer Actor,

Jochen

ist das halt völlig egal, wer das jetzt war.

Jochen

Ja, oder auch wenn der abstürzt und

Jochen

ein anderer übernimmt das, ist egal.

Jochen

Wir sind alle gleich. Du hast eine Armee

Jochen

von identisch ausschauenden Schauspielern.

Jochen

Ja, und

Jochen

man kann das halt auch nicht umgehen,

Jochen

weil, ja, das

Jochen

verbietet einem die Sprache. Es gibt ja auch

Jochen

sozusagen eine Actor-Implementierung in anderen Sprachen.

Jochen

Es gibt auch diverse in C++ zum Beispiel, aber

Jochen

du kannst... Pie-Acker, ja.

Jochen

Super Sache

Jochen

übrigens, sollte jeder verwenden.

Jochen

Okay, ich habe nur gehört, dass es das gibt.

Jochen

Ich weiß aber nicht, ich wundere, dass es sich an der

Jochen

Skala-Acker-Geschichte orientiert.

Jochen

Ja, genau, das kommt von Skala, ja. Wann, wie, wo

Dominik

benutzt man das dann? Wobei Skala

Dominik

ist ja quasi Erlangen für

Dominik

Ja, für die

Dominik

Wie benutzt man das dann?

Dominik

Pi-AK?

Dominik

Ja, wenn du halt

Dominik

synchrone Sachen haben willst

Johannes

Das Problem an Pi-AK ist halt

Johannes

dass das immer noch den Gil beachten muss

Johannes

Das heißt, du gewinnst nicht so ungeheuer viel

Johannes

Weil du immer noch in dieser

Johannes

mehr oder weniger Single-Threaded-Python-Welt

Johannes

festhängst, aber das macht

Johannes

die Struktur einfacher

Johannes

Ja, es löst dich davon ab, alles in einem Ablauf machen zu müssen, sondern du kannst sagen, so, dieses Ding ist jetzt verantwortlich für und das hat folgende Ressourcen fest in der Hand und zack.

Jochen

Aber was du halt nicht hinkriegen kannst und was das halt so ein bisschen, also ich meine, klar, du kannst natürlich dann sagen, okay, ich weiß, ich darf hier nur immutable Datenstrukturen verwenden und so, aber du kannst natürlich Sachen schon ändern, wenn du böse bist und das geht halt lange nicht.

Dominik

Ich habe gerade auch eine andere Bibliothek gefunden, die heißt

Dominik

Tespian. Habe ich aber nicht

Dominik

reingeguckt, keine Ahnung. Ja, das ist ein Aktor.

Dominik

Das sind die Theaterschauspieler.

Dominik

Ja,

Jochen

genau. Also ich meine, man zahlt da natürlich

Jochen

einen Preis für. Also man zahlt den Preis

Jochen

vor allen Dingen in Hauptspeicher.

Jochen

Man muss halt alles kopieren, wenn man irgendwas verändern

Jochen

will.

Jochen

Das ist halt auch das, was

Jochen

einen im Wesentlichen begrenzt, was die Anzahl

Jochen

der Aktor-Dinger

Jochen

halt angeht.

Jochen

dass man, wenn der Hauptspeicher voll ist, dann ist halt

Jochen

Schluss

Jochen

und es ist halt auch ein bisschen langsamer

Jochen

also wenn man jetzt sagen würde, okay man macht

Jochen

das Ganze handoptimiert

Jochen

irgendwie mit Threads oder so, dann ist das

Jochen

wahrscheinlich schneller, aber

Jochen

sagen wir mal so, es ist halt ein sehr sehr guter Kompromiss

Jochen

eigentlich, wenn es um

Jochen

ja

Jochen

Dinge parallel

Jochen

concurrent und in zuverlässig

Jochen

machen geht

Jochen

und so diese letztes

Jochen

das Sequential Performance brauchen die meisten Leute ja dann

Jochen

eh nicht.

Jochen

Und dafür ist es halt super.

Jochen

Selbst dann bist du ja oft in so einer Situation,

Jochen

wo Stabilität einfach

Johannes

wichtiger ist.

Johannes

Und die kriegst du da halt für umsonst

Johannes

mit dazu, weil das sehr schwierig ist,

Johannes

diese VM zu crashen.

Johannes

Und selbst wenn du irgendwas machst,

Johannes

was crasht, dann hast du halt

Johannes

diesen einen Request gecrashed.

Johannes

Aber der Rest läuft weiter.

Johannes

Es ist quasi nicht möglich,

Johannes

diese Maschine abzuschießen.

Johannes

Und das ist schon was, wo man auch mit Neid draufschauen kann, weil das ja in anderen Systemen relativ leicht ist.

Jochen

Das ist eher so schwer, das Ding irgendwie am Laufen zu halten. Da muss man immer die ganze Zeit fünf Teller jonglieren, während man auf einem Einrad herum, auf einem Seil herumfährt oder so. Ja, das ist da ganz angenehm.

Johannes

Aber es ist natürlich auch ganz klar ausgerichtet auf so Workloads, die parallel sind. Also eben genau aus dem Telefonieumfeld her. Jedes Telefonat selber braucht halt nicht ungefähr euer viel. Also du musst halt dann irgendwie deine, was weiß ich, 16 Kilobit musst du durchkriegen oder deine, wie viele auch immer sie gerade runter haben. Aber das ist ja nicht viel. Aber du hast halt 1000 Stück davon gleichzeitig in der Hand.

Johannes

Und in anderen Workloads hast du ja andere Anforderungen, jetzt zum Beispiel Machine Learning, da brauchst du halt eine Sache, die du hunderttausendmal ausführen musst und da ist es besser, Prozessoren zu haben, die das schnell machen können, deshalb hat sich das ja auch so ein bisschen anders entwickelt und ich glaube auch, dass da der Hintergrund so ein bisschen anders ist.

Johannes

Python kommt ja wirklich aus dieser, ja, ein Programm tut eine Sache Welt und da ist es dann halt einfacher zu sagen, okay, die Programme werden schneller, weil die Prozessoren schneller werden, weil die Single-Thread-Performance schneller wird. Aber jetzt sind wir nun mal genau in so einem Umbruch, wo es tatsächlich so ist, dass eben Single-Thread-Performance nicht mehr schneller wird. Aber dafür kannst du jetzt einen Computer kaufen, der 64 Cores hat. Oder gibt es nicht von AMD sogar schon die mit 128?

Jochen

Kann gut sein, ja. Das ist, äh, genau, ja. Und das, das, jetzt wird's halt, also, sag mal so, also, äh, das hatten wir in der ersten Sendung schon und ich, äh, würde da tatsächlich, äh, ehrlich gesagt, äh, bei bleiben, also, dass man das selten hat, dass man beides braucht. Also, du kannst ja problemlos 128 Python-Interpreter starten. Also, wenn du 128 Cores hast, dann hast du wahrscheinlich auch genug Hauptspeicher, um, äh, 128 Prozesse zu haben.

Jochen

Aber da hast du halt nur 128. Kannst du 128 gleichzeitig beantworten? Nicht 12.800.

Jochen

Aber wenn CPU dein Problem ist und dann brauchst du, ja, also wenn I.O. dein Problem ist, gut, aber dann brauchst du die ganzen Prozessoren eigentlich nicht, dann kannst du das auch auf einer CPU, also naja, ich weiß es nicht so genau, es ist, ja, also ich meine, man hat es selten, dass man beides braucht und für beide Extremfälle gibt es halt sehr gute Lösungen.

Jochen

Also den Data Science CPU verbrennen Use Case, da gibt es super Lösungen für. Den kann man jetzt nicht zum Websurfen verwenden, aber das funktioniert super.

Jochen

Sehr schöne Computer von Nvidia für mehrere hunderttausend Dollar. Würde ich nicht als Webserver einsetzen.

Jochen

Ne, genau, das macht doch nicht so viel Sinn. Und auf der anderen Seite ist halt irgendwie, weiß ich nicht, eben Lib, sozusagen, kriegen wir den Übergang zu Python wieder hin oder halt auch eben Node.js. LibUV ist halt auch auf einem Prozessor, macht das schon irgendwie ordentlich I.O.

Jochen

Das ist sozusagen die Event-Loop,

Jochen

die unter Node.js und halt auch

Jochen

bei Python, also normalerweise

Jochen

in Produktivgeschichten nimmt man halt immer LibUV

Jochen

statt der Async.io

Jochen

Standard-Event-Loop.

Jochen

Aha, kein Async.io?

Jochen

Das ist Async.io.

Jochen

Würdest du Ubicorn verwenden statt

Jochen

Also kann man auf jeden Fall,

Jochen

ja.

Jochen

Also

Jochen

und

Jochen

ja, man kann halt, bei Async.io

Jochen

ist es so, du kannst die Implementierung deiner Event-Loop

Jochen

kannst du halt austauschen und du

Jochen

kannst halt entweder die Standard-Implementierung

Jochen

nehmen oder du nimmst

Jochen

halt LibUV zum Beispiel und

Jochen

LibUV ist dann halt deutlich schneller.

Jochen

Und

Jochen

ja, also zu der

Jochen

Historie, ich weiß es jetzt ehrlich gesagt nicht so ganz genau, ich glaube,

Jochen

es gab einmal LibEV,

Jochen

das Ding ist auch schon ziemlich alt

Jochen

und... Aber das ist doch

Jochen

eine CE-Bibliothek, oder? Ja, ja,

Jochen

LibUV auch.

Jochen

Wenn du einfach nur Event-Event-Element

Jochen

anfängt. Genau,

Jochen

das ist, die implementieren das sogenannte

Jochen

Reactor-Pattern irgendwie

Jochen

und benutzen unten drunter

Jochen

Syscrolls. Wenn es da mal einen Podcast dazu gäbe,

Jochen

so Pattern. Ja, ich glaube,

Jochen

da müssen wir auch noch ein paar Teile irgendwie machen.

Jochen

Ja, aber vielleicht tatsächlich noch mal genau

Jochen

was erklären.

Jochen

was halt das Reaktor-Pattern vielleicht ist.

Dominik

Und dann vielleicht auch nochmal, was halt Event-Loops

Dominik

überhaupt sind. Das haben wir nämlich. Genau, das haben wir das letzte Mal,

Dominik

da haben wir da aufgehört.

Jochen

Ja, also Reaktor-Pattern.

Jochen

Das setzt ihr für raus.

Jochen

Jetzt seid ihr im geneigten Leser-Zug.

Jochen

Du hast halt so

Jochen

Syscalls

Jochen

in Unix.

Jochen

Da gibt es auch unterschiedliche, je nachdem, welche Unix-Art man

Jochen

verwendet. Epoch, unter Linux.

Jochen

Vielleicht nochmal einmal ganz kurz,

Dominik

Wir müssen doch ein bisschen nur damit anfangen. Was ist ein Syscall?

Dominik

Oh nein, oh mein Gott.

Dominik

Jetzt muss man tief reinsteigen.

Jochen

Also sozusagen, das ist die Art,

Jochen

wie User...

Jochen

Ja, mit dem Betriebssystem

Jochen

kommunizieren. Also

Jochen

das, was jeder kennt vielleicht, ist sowas wie

Jochen

du machst einen Pfeil auf.

Jochen

Du musst jetzt irgendwie an die Bits auf der Platte

Jochen

tatsächlich rankommen und der

Jochen

tatsächlich bei Unix ist so der

Jochen

der Syscall für alles ist halt

Jochen

open. Also das ist ja auch eigentlich der Trick

Jochen

bei Unix, dass man sagt so, okay...

Jochen

einen Syscall. Es gibt nur einen

Jochen

Syscall. Alles ein Pfeil.

Jochen

Eigentlich ist alles ein Pfeil, genau.

Jochen

Es ist völlig egal, was es wirklich ist.

Jochen

Pfeil ist unsere Abstraktion

Jochen

für einfach

Jochen

alles.

Jochen

Also wenn man das annimmt, dann kommt man

Jochen

bei Unix ziemlich gut raus.

Jochen

ja, genau.

Jochen

Das ist halt die Art, wie man dem Kernel sagt, ich hätte jetzt gerne

Jochen

da zum Beispiel irgendwie Zugriff drauf.

Jochen

Dann sagt man halt Open.

Jochen

Und das kann man eben

Jochen

dann eben nicht nur mit Files machen, sondern auch mit Netzwerkverbindungen,

Jochen

die ja dann in Unix auch nur Files sind

Jochen

oder Hauptsprecher ist auch nur Files oder halt

Jochen

irgendwie Pipes, Kommunikation

Jochen

zu anderen ist auch alles immer nur ein File und

Jochen

also man kommt ja sehr weit.

Jochen

Der Bildschirm ist auch ein File, oder?

Jochen

Ja. Und

Jochen

die Terminals sind auch Files.

Jochen

Ja. Und

Dominik

jetzt müssen wir nur noch wissen, was Files sind.

Dominik

Ja. Das ist

Johannes

abstrakt. Das können wir in dieser

Johannes

Vorlesung nicht machen. Es ist ein sehr

Jochen

sehr, sehr, sehr, sehr simples Interface.

Jochen

Es ist einfach unstrukturierte Daten und

Jochen

du kannst darauf zugreifen, indem du

Jochen

halt Sachen daraus liest und

Jochen

reinschreibst. Aber sortiert. Sortiert.

Jochen

Das ist das Wichtige, oder? Du kannst an eine bestimmte Stelle springen.

Jochen

Eine Abfolge von Bytes. Ich kann hin und her springen, ja.

Dominik

Ich habe so einen Zeiger, der irgendwie Interface.

Dominik

Ah, nicht jedes Pfeil kann hin und her springen.

Dominik

Pfeils können sagen, sie dürfen hin und her springen

Dominik

oder auch nicht.

Dominik

Okay, dann habe ich jetzt

Dominik

ein Cisco, das macht ein Open, okay.

Dominik

Genau.

Jochen

Also insofern auch alles schick.

Jochen

Problem ist jetzt natürlich... Und das ist auch gar kein

Johannes

Problem, oder, Jochen? Also ich meine, da brauchst du noch

Johannes

keine Lib dafür, sondern du brauchst halt nur wissen,

Johannes

wie du das aufrufst. Und das

Johannes

ist super und nett und easy.

Johannes

Und wenn du jetzt gegen deine, was weiß ich, Bibliothek,

Johannes

gegen deine

Johannes

Kernel-Bibliothek kompiliert hast,

Johannes

gegen deinen Kernel-Header, dann kannst du die Sachen aufrufen.

Johannes

Genau.

Johannes

Warum brauchen wir jetzt LibEV? Warum brauchen wir LibEvent

Jochen

oder Lib? Ja, das ist

Jochen

sozusagen eine Abstraktionsschicht über

Jochen

den Syscalls,

Jochen

weil das Problem ist, du hast jetzt unterschiedliche Syscalls,

Jochen

je nachdem, welches Betriebssystem du hast,

Jochen

die eben so etwas machen wie,

Jochen

naja, du machst jetzt nicht einfach nur

Jochen

einen Pfeil auf und schickst da irgendwas, das kannst du auch,

Jochen

dann ist es aber blockierend und synchron.

Jochen

Du willst jetzt aber nicht blockierend

Jochen

irgendwie lesen und schreiben, weil

Jochen

du möchtest ja gleichzeitig parallel

Jochen

irgendwie Datenströme in der Gegend

Jochen

herumschicken, weil wenn du blockierst,

Jochen

dann kannst du immer nur eins nach dem anderen machen

Jochen

und das ist ja, wenn du jetzt tausend Leuten

Jochen

gleichzeitig einen Pfeil schicken möchtest, geht das halt nicht so gut.

Jochen

Und dafür gibt es dann halt

Jochen

andere Interfaces,

Jochen

die das möglich machen.

Jochen

Und da gibt es dann halt so

Jochen

die uralten

Jochen

Geschichten in Unix sind halt so Select,

Jochen

der Select-Syscall und Poll.

Jochen

Und im Wesentlichen gibt man

Jochen

den, oh Gott. Jetzt musst du trotzdem kurz

Jochen

sagen, was Select ist und was Poll ist.

Jochen

Also ich fange mal mit Poll an.

Jochen

Du gibst Poll einfach eine Liste von

Jochen

Pfeildeskriptoren sozusagen, also

Jochen

offenen Pfeils eigentlich, mehr oder weniger.

Jochen

Und dann wirst du irgendwie benachrichtigt,

Jochen

wenn da irgendwas passiert ist,

Jochen

vom Kernel.

Jochen

Und das Problem dabei ist halt, dass, also

Jochen

bei Paul kannst du halt irgendwie, ach Gott,

Jochen

das muss ich tief in Erinnerung kramen,

Jochen

also der Vorteil ist, du kannst halt beliebig viele

Jochen

Files da reintun, also beliebig viele Netzwerkverbindungen

Jochen

haben, der Nachteil ist irgendwie, ist es halt

Jochen

O von N oder sowas, also deine

Jochen

Zeit,

Jochen

die das im Kernel verbringt,

Jochen

wird halt immer mehr, je mehr du da reinsteckst.

Jochen

Und bei Select war es so,

Jochen

dass

Jochen

das schnell ist, das ist halt irgendwie O von 1,

Jochen

aber du kannst irgendwie nur 1024

Jochen

Pfeildeskriptoren oder so irgendwie da reinstecken.

Dominik

Was ist denn ein Select jetzt, also im Unterschied?

Dominik

Also im Wesentlichen geht es doch darum, dass du

Dominik

auf Daten wartest.

Johannes

Das heißt, der Syscall heißt,

Johannes

du kannst sagen,

Johannes

ich möchte jetzt die Datei

Johannes

lesen und dann gibt es einen Syscall,

Johannes

der heißt ReadData oder wie auch immer der heißen mag

Johannes

und

Johannes

der blockiert dann halt, da musst du

Johannes

so lange warten, bis die Daten da sind.

Johannes

Und das ist bei einer Netzwerkverbindung echt blöd.

Johannes

Das willst du nicht, genau.

Johannes

Dann kannst du sagen, okay,

Johannes

wir modifizieren den und

Johannes

sagen, wir machen Read-Data, aber

Johannes

nicht blockierend. Das heißt, wenn was da ist, dann

Johannes

kriegen wir das und wenn nichts da ist, dann kriegen wir halt

Johannes

zurück, es gibt gerade nichts.

Johannes

Und damit kannst du das ja

Johannes

umsetzen. Damit kannst du Polling machen, damit kannst du sagen,

Johannes

hier, alle meine Netzwerkverbindungen,

Johannes

was gibt's denn jetzt hier?

Johannes

Aber Polling ist halt schlecht,

Johannes

weil dann, das ist

Johannes

aktives Warten.

Jochen

Busy Waiting, genau, das verbraucht halt CPU.

Jochen

Ja, und vor allem, während du auf

Jochen

eins wartest, kann ja bei einem anderen was passieren

Johannes

und das bemerkst du dann halt erst, wenn du so weit bist,

Johannes

dass du da bist.

Dominik

Da steht die ganze Zeit, du sagst, bist du schon da, bist du schon da,

Dominik

bist du schon da, bist du schon da, bist du schon da, bist du schon da.

Johannes

Genau, aber wenn du jetzt bei zehn Türen immer anklopfst

Johannes

und sagst, bist du schon da, bist du schon da,

Johannes

dann kann es ja sein, dass du bei der zehnten Tür bist

Johannes

und bei der, oder du bist bei der ersten Tür

Johannes

und bei der zehnten Tür passiert jetzt gerade was

Johannes

und du merkst es aber erst,

Johannes

wenn du die anderen neun alle durchgefragt hast.

Johannes

Das heißt, du hast nicht nur viel CPU verbraucht,

Johannes

für was, was eigentlich nichts bringt,

Johannes

sondern du hast auch noch hohe Latenz drin.

Johannes

Du kriegst die Nachrichten,

Johannes

sofort mit, dass irgendwas passiert, sondern du kriegst

Johannes

erst mit, wenn du dazukommst, danach zu fragen.

Johannes

Und das ist natürlich schlecht, ja, weil

Johannes

ähm

Johannes

weil du dann eben

Johannes

eine unnötige Latenz hast. Du hast unnötige Wartezeiten,

Johannes

die du nicht abbrauchst. Und jetzt

Johannes

wird es noch schlimmer, wenn du das nämlich naiv machst, dann

Johannes

kannst du so ein Problem haben, das Starvation heißt.

Johannes

Ja, wenn du sagst, wenn irgendwas passiert,

Johannes

dann fange ich wieder bei Tür 1 an, nachzufragen.

Johannes

Und dann passiert das nicht.

Johannes

Und doch, doch, dann hast du nämlich

Johannes

Starvation, weil wenn bei Tür 10 irgendwas ist,

Johannes

da kommst du ja nie hin, weil

Johannes

die ganze Zeit irgendwas passiert, dann

Johannes

kommst du nie dazu, Tür 10 nachzufragen. Das heißt, du musst

Johannes

dann auch noch aufpassen, dass du die

Johannes

in einer gewissen Reihenfolge

Johannes

abfragst, die nicht dazu führt, dass

Johannes

einer hier liegen gelassen

Johannes

wird. Also Polling ist was ganz Schlechtes,

Johannes

wenn du auf Daten wartest

Johannes

in einer Aktivverbindung.

Johannes

Und deshalb gibt es

Johannes

diesen Select-Syscall,

Johannes

wo du eben sagst, benachrichtige mich,

Johannes

wenn irgendwas von diesen

Johannes

1024 oder eben

Johannes

jetzt, wie Jochen sagt,

Johannes

beliebig vielen, irgendwo was passiert.

Johannes

Wenn irgendwo

Johannes

was passiert, dann gib mir Bescheid. Dann kriegst du

Johannes

quasi einen Interrupt.

Johannes

Ah. Genau.

Dominik

Ah, das gab es doch früher immer.

Dominik

Das war noch so relativ nativ

Dominik

oder schneller ansprechbar. Das musste man doch früher immer

Dominik

selber konfigurieren, die Interrupt.

Johannes

Die Soundfarbe gab es, weil die müssen

Johannes

halt ihre Daten holen und die sagen so,

Johannes

jetzt, ich brauche Daten und dann musst du

Johannes

dich drum kümmern. Da kannst du nicht sagen, ja, ich bin jetzt gerade

Johannes

beschäftigt mit.

Johannes

Sonst knackt es der Ton.

Johannes

Genau, und

Jochen

also der Syscall, den man auf der Linie

Jochen

dafür jetzt verwendet, der nennt sich E-Poll, der

Jochen

halt irgendwie, ja, ist halt

Jochen

irgendwie Anfang der Nuller Jahre, ich weiß nicht, seit wann

Jochen

das drin ist im Kernel, müsste ja

Jochen

irgendwie, aber ist schon sehr lang

Jochen

und das Ding macht das quasi für beliebig

Jochen

viele Falldeskriptoren und halt schnell

Jochen

also das Ding ist richtig, macht

Jochen

macht Laune, funktioniert

Jochen

dann alles super und

Jochen

FreeBSD, BSD-basierte

Jochen

Unix, die nehmen dann eher sowas wie KQ

Jochen

also FreeBSD, macOS

Jochen

macOS und so

Jochen

macht praktisch das gleiche

Jochen

Wie was? Entschuldigung, ich wollte das nicht nochmal aussprechen. Der Syscall

Jochen

heißt einfach anders und der heißt KQ

Jochen

KQ heißt der, oder? Oder KQ

Jochen

Ja, genau

Jochen

Ja, KQ

Jochen

Die Leute mitschreiben, kleiner Schmutzigeritz

Jochen

Und

Jochen

genau, aber es gibt ja subtile

Jochen

Unterschiede, bei Solaris hast du dann noch sowas wie

Jochen

DevPol und so, also

Jochen

unterschiedliche Unix-Geschmacksrichtungen

Jochen

machen das halt irgendwie so leicht anders alles

Jochen

und das willst du ja jetzt nicht, wenn du

Jochen

ein Anwendungsprogramm schreibst, alles nochmal

Jochen

machen müssen, damit du halt irgendwie alle

Jochen

Unix-Varianten unterstützen kannst

Jochen

und dann brauchst du halt eine Abstraktionsschicht darüber,

Jochen

die halt dann unten drunter mit

Jochen

den

Jochen

betriebssystemspezifischen

Jochen

Syscalls oder Interfaces

Jochen

redet, aber mit der du

Jochen

dann reden kannst, ohne das alles wissen zu müssen.

Jochen

Und genau, das ist halt LibEV.

Jochen

Und, genau, das war LibUV, also das, was dann, das Ding ist, glaube ich, gestartet irgendwann 2011 oder so, das Projekt, und hat für Unix, für Unix hat es halt LibUV benutzt einfach, das hat es einfach nur gerappt.

Jochen

Hat aber auch noch eine Windows-Geschichte mit dazu genommen, weil Windows macht das alles irgendwie anders.

Jochen

Das implementiert

Jochen

halt nicht dieses

Jochen

Reaktor-Pattern sozusagen,

Jochen

wo du halt benachrichtigt wirst, wenn halt irgendwas passiert,

Jochen

sondern es ist ein

Jochen

Pro-Reaktor.

Dominik

Also der Select ist ein Reaktor-Pattern?

Jochen

Ja, genau. Das sind die alle.

Jochen

Bei Unix ist das immer so.

Dominik

Was heißt nochmal ein Reaktor-Trimmer?

Jochen

Du kriegst halt

Jochen

benachrichtigt, wenn irgendwas passiert und dann kannst du

Dominik

irgendwas machen. Warum heißt das Reaktor-Pattern?

Jochen

Weil du darauf reagierst, wenn irgendwas

Jochen

passiert. Also du bist in dem Moment

Johannes

Nicht der Aktor, der aktiv

Johannes

wartet, sondern du bist der Reaktor. Du sagst,

Johannes

weck mich auf, wenn irgendwas ist.

Dominik

Ich hatte irgendwie gerade einen in die Grille

Dominik

entdeckt, der Reaktor, wir abgeben.

Jochen

Und Windows macht es halt

Jochen

anders. Da gibt es diese

Jochen

IOCompletion

Jochen

Ports. Da ist auch alles nicht eine Datei,

Jochen

sondern ein Handle.

Jochen

Tja.

Jochen

Und

Jochen

da ist es halt so, man

Jochen

kriegt halt, da passieren dann Dinge

Jochen

und der Kernel macht dann schon zum Beispiel, der liest dann schon, also beim

Jochen

während bei dem

Jochen

Reactor-Pattern ist es halt so, da musst du dann schon noch selber lesen,

Jochen

du kriegst halt bloß Benachrichtigungen, also du könntest

Jochen

jetzt, wenn du wolltest, dann könntest du erst was lesen und

Jochen

kannst das halt machen oder nicht.

Jochen

Und

Jochen

bei Windows ist es halt so, der Kernel macht das dann

Jochen

halt und dann

Jochen

sagt er dir halt, wenn irgendwas completed

Jochen

ist, was damit passiert ist und wo

Jochen

es liegt oder so. Ich weiß nicht so genau, keine Ahnung

Jochen

von Windows. Wenn du das Handle weißt. Ja.

Jochen

Aber es ist halt eine grundsätzlich

Jochen

andere Art, damit umzugehen

Jochen

und da gab es, glaube ich, tatsächlich

Jochen

auch, hat Microsoft selber, hat da irgendwie

Jochen

Code beigesteuert zu

Jochen

LibUV, meine ich, und hat

Jochen

den Teil halt geschrieben und dann

Jochen

haben sie das halt unter einem

Jochen

Interface sozusagen

Jochen

verfügbar

Jochen

gemacht und halt LibUV verwendet

Jochen

für Unix und dann

Jochen

den Microsoft-Teil für Windows

Jochen

und sieht dann aber von der

Jochen

Anwendung gleich

Jochen

aus. Und später

Jochen

haben sie dann aber Libby wieder rausgeschmissen, glaube ich,

Jochen

und das dann selber nochmal alles geschrieben.

Jochen

Naja, also, wie auch immer.

Jochen

Also es funktioniert. Inzwischen ist es gut

Jochen

getestet. Es gibt ja genug

Jochen

Node.js da draußen und so.

Jochen

Und es funktioniert gut.

Jochen

Und es ist halt auch

Jochen

richtig schnell.

Jochen

Und was diese Event-Loop tatsächlich

Jochen

eigentlich macht, ist

Jochen

eben diese

Jochen

ganzen

Jochen

dieses I.O.-Zeugs

Jochen

verwalten.

Jochen

aber halt auch Callbacks

Jochen

aufrufen. Also du kannst zum Beispiel

Jochen

bei deinem Event-Loop jetzt Callbacks registrieren

Jochen

für halt... Also ein Event-Loop ist

Dominik

ein eigener Prozess, der läuft und der die ganze Zeit guckt,

Dominik

was für Events da registriert sind und die dann

Dominik

aufrufen, wenn irgendwas passiert, oder?

Jochen

Das Ding läuft immer,

Jochen

läuft in,

Jochen

es kann nur eine Event-Loop pro

Jochen

Thread geben. Du kannst mehrere

Jochen

haben, aber nur in unterschiedlichen Threads.

Jochen

Und

Jochen

ja, das Ding läuft halt.

Jochen

Das ist halt sozusagen die innerste Loop

Jochen

in deinem Programm, wenn du es was benutzt.

Johannes

Das ist das, was mit LibUV

Johannes

hintergeht, oder? Das ist die Event-Loop.

Johannes

Ja, also

Jochen

LibUV ist eine Implementation, ja.

Dominik

Also so eine Wild-Schuh-Schleife oder sowas.

Jochen

Ja, letztlich genau. Das Ding,

Jochen

ja, wobei das nicht busy-weighted,

Jochen

sondern das schläft dann halt auch,

Jochen

wenn nichts zu tun ist, aber

Jochen

sobald irgendwas zu tun ist, dann wird es sehr

Jochen

wach und agil und macht irgendwie Dinge.

Jochen

diese

Jochen

Einführung

Jochen

in ASIC.io von Lukas Langer gibt es

Jochen

halt auch, da zeigt er die Implementation

Jochen

der Python-Event-Loop

Jochen

glaube ich aus 3.4 oder

Jochen

3.5, ich weiß es nicht genau, und das

Jochen

waren irgendwie so 20

Jochen

Zeilen, 30 Zeilen Python, und es war

Jochen

tatsächlich eine While-True-Schleife, und

Jochen

die hat im Wesentlichen nur gemacht, so geguckt,

Jochen

oh, welche Callbacks sollen jetzt gerade laufen,

Jochen

dann hat sie aufgerufen,

Jochen

dann noch irgendwie Signal-Handling gemacht und

Jochen

irgendwie, das war es im Wesentlichen.

Jochen

Und dann noch geguckt, welche sind jetzt beim

Jochen

nächsten auf, beim nächsten, bei der nächsten

Jochen

Iteration dran und das war es eigentlich

Jochen

fast. Und das war die ganze Event-Loop.

Dominik

Also Event-Loop ist tatsächlich dieser Loop und da muss man

Dominik

Signale registrieren oder was?

Jochen

Callbacks sind vor allen Dingen das, was

Jochen

man da rein

Jochen

tut, was dann da drin läuft.

Dominik

Die stehen dann in irgendeiner Liste, die immer wieder

Dominik

ein gemeinsamer Speicher quasi

Dominik

der...

Dominik

Wenn in Datei X irgendwas

Dominik

was passiert, dann ruf damit diese

Dominik

Funktion auf. Ja, aber also, wie sag ich das?

Dominik

Da gibt es halt ein Interface.

Dominik

Du kannst Call soon

Jochen

zum Beispiel für, jetzt soll dem nix

Jochen

laufen oder

Jochen

ja, mit einem bestimmten,

Jochen

zu einem bestimmten Zeitpunkt, also die Timer,

Jochen

du kannst dann auch Timer setzen und die werden halt ausgeführt

Jochen

und dann wird halt überprüft, ist das jetzt

Jochen

dran mit dem Laufen oder noch nicht.

Jochen

Also je nachdem, was halt so eine Event-Loop

Jochen

anbietet, ja. Also es gibt ja da viele

Jochen

verschiedene Sorten Events.

Johannes

Und genau so ein Timer, ja, im Wesentlichen

Johannes

sagst du halt, wenn du auf so einen

Johannes

Timer wartest, dein

Johannes

Python-Programm sagt, ruft

Johannes

eine Funktion auf, die sagt, ich möchte

Johannes

um 0 Uhr

Johannes

möchte ich, dass diese Funktion gestartet wird.

Johannes

Und dann muss

Johannes

diese Event-Loop ja im Wesentlichen nichts anderes machen,

Johannes

als zu sagen, ist es schon 0 Uhr? Nein, ist es schon

Johannes

0 Uhr? Und wenn es 0 Uhr ist, dann sagt sie

Johannes

ja, und dann startet eben dieses

Jochen

registrierten Callback. Diese Funktion und genau.

Jochen

Und so ein Callback ist einfach

Jochen

eine Funktion, ja, du sagst, ich möchte

Johannes

dass eine Funktion aufgerufen wird und die muss

Johannes

auch normalerweise schon fertig

Johannes

parametrisiert sein, ja, also du kannst dann nicht

Johannes

sagen, mit folgenden Parametern, sondern

Johannes

du musst dann halt die so, ja, oder gibst die halt

Johannes

irgendwie mit, ja, aber im Wesentlichen sagst du

Johannes

nur, da soll dann ein Funktionsaufruf

Dominik

passieren. Also im Prinzip iteriert quasi dieser

Dominik

ganze Loop immer durch diese gleiche Liste und

Dominik

guckt, was da drin steht und versucht das dann halt auszuführen, was da

Dominik

irgendwie... Ja, nur halt schlau, ja, er iteriert

Dominik

da nicht die ganze Zeit durch, sondern er sagt

Johannes

zum Beispiel, wann ist denn

Johannes

der nächste Timer fällig?

Johannes

Das kann ja,

Johannes

das ist um 0 Uhr, das sind jetzt noch

Johannes

1 Stunde 55,

Johannes

also kann ich 1 Stunde 55,

Johannes

ich schlafe mal 1 Stunde 54, ja, und

Johannes

dann kannst du

Johannes

dich da so rantasten, ja, aber für die 1 Stunde

Johannes

54 musst du ja nicht immer gucken, ah, ist schon soweit,

Johannes

ist schon soweit, sondern

Johannes

die machen das halt schlauer und das

Johannes

ist eben genau der Trick da dran,

Johannes

dass du dich nicht drum kümmern musst, wie der das macht,

Johannes

sondern dass

Johannes

diese Eventloop schlau genug ist,

Johannes

das für dich auf eine schlaue Art und Weise zu machen.

Johannes

Ja.

Jochen

Genau, richtig, da war noch ein Spezialdings dabei, der LibUV hat auch noch ein Threadpool irgendwie für, glaube ich, Kommunikation mit Files und so, aber also im Grunde abstrahiert alles weg, was man halt so, was Low-Level unten drunter passieren muss, damit es halt funktioniert und man hat dann halt ein sehr schönes Interface nach außen.

Jochen

Und wenn man jetzt AsyncIO zum Beispiel verwendet, dann kann man einfach das AsyncIO-Interface verwenden und AsyncIO sagen, verwende doch LibUV als Event-Loop und dann benutzt es das Ding unten drunter.

Jochen

Ja, und ein weiterer Trick, den es dann halt noch gibt, sind sogenannte Trampoline, also Callbacks.

Jochen

Wenn man es will, jetzt aber.

Jochen

Kein Tamponier.

Jochen

Genau, wenn man das genau wissen will,

Jochen

wie das

Jochen

alles funktioniert,

Jochen

dieses Videoserie von Lukas Lange

Jochen

angucken, der erklärt das alles sehr ausführlich, ich kann

Jochen

das jetzt nur so anreißen, aber

Jochen

im Grunde ist es so, Callbacks, die sich halt

Jochen

selbst wieder registrieren, sozusagen, weil man

Jochen

ja, also ich meine, wenn jetzt eine Funktion

Jochen

aufgerufen worden ist und gelaufen ist,

Jochen

dann ist ja dann eigentlich ja Schluss.

Jochen

Aber du hast ja oft so Tasks, die

Jochen

irgendwie die ganze Zeit irgendetwas machen.

Jochen

und ab und zu mal und dann wieder schlafen.

Jochen

Wie kann das zum Beispiel sein, dass die sich dann

Jochen

schlafen legen und wieder aufwachen und dann nochmal was anderes machen?

Jochen

Das ginge ja eigentlich nicht.

Jochen

Oder auch die Reaktivität anpassen.

Johannes

Wenn du gemerkt hast, da ist jetzt nichts zu tun, dann

Johannes

schlafen die länger oder kürzer.

Johannes

Ja, und der Mechanismus,

Jochen

über den das geht, ist, die schedulen sich selbst

Jochen

wieder auf die Event-Loop.

Jochen

Hat jeder von uns schon mal gemacht.

Jochen

Ohne das Wort Trampolin

Jochen

zu kennen. Ja, wahrscheinlich.

Jochen

Genau. Und

Jochen

noch, wenn man jetzt

Jochen

guckt, wie ist der Mechanismus

Jochen

eigentlich dafür, der

Jochen

das macht, dann sind das halt

Jochen

tatsächlich einfach nur Generatoren eigentlich

Jochen

unten drunter.

Jochen

Das ist doch der generelle Trick

Jochen

von Ace und Gaio, oder? Das sind alles einfach immer nur

Jochen

Generatoren.

Jochen

Ja, also

Jochen

man nennt es halt anders und

Jochen

es hat einen anderen Typ, aber es ist

Jochen

tatsächlich fast

Jochen

das Gleiche.

Jochen

Also

Jochen

also die Step-Funktion

Jochen

in dem Generator ist halt eigentlich das, was

Jochen

du dann halt immer wieder in die Event-Loop

Jochen

reintust. Und Await

Jochen

ist halt nur ein anderes Wort für

Jochen

Yield-From und Yield-From ist halt genau das

Jochen

Ding, was halt die

Jochen

Generator-Geschichte da macht, an der

Jochen

Stelle. So hat doch

Jochen

Async.io auch angefangen, oder? Dass man einfach

Johannes

gesagt hat, wenn ich eine Menge von Generatoren

Johannes

habe, dann könnte ich die alle nacheinander mal

Johannes

ausführen lassen und die geben mir die Kontrolle

Jochen

zurück. Die haben genau diese Eigenschaft schon.

Jochen

Generatoren haben genau das, was man

Jochen

braucht, was man sagen kann.

Jochen

Sogenannte Co-Routinen.

Jochen

Im Generator kann man ja sagen,

Jochen

okay, alles klar, jetzt gib mir doch mal das nächste,

Jochen

gib mir das nächste. Und dann so, ah, und jetzt stopp mal.

Jochen

Bleib mal kurz stehen.

Jochen

Du machst jetzt erstmal nichts mehr.

Jochen

Und dann später kann man ihm sagen, okay, und jetzt gibt noch mal

Jochen

wieder was. Das heißt, das sind schon Funktionen, die man

Jochen

irgendwie so anhalten und weiterlaufen lassen kann.

Jochen

Und wenn man

Jochen

das jetzt nicht nur aus der

Jochen

ich kann ja jetzt Sachen rausnehmen Perspektive sieht,

Jochen

sondern auch man kann da Sachen reintun,

Jochen

Dann hat man eigentlich schon alles zusammen, was man braucht, um das zu implementieren. Und tatsächlich, die werden alle fair gescheduled. Das heißt, also wenn man sich jetzt, da wäre jetzt ein Schaubild ganz nett, so als Klassenmodell, wie ist die Vererbungs-Hierarchie an der Stelle?

Jochen

also wenn man

Jochen

jetzt zum Beispiel async-dev schreibt,

Jochen

also async-dev-Funktion ist

Jochen

was sehr ähnliches wie eine normale Funktion, die

Jochen

jetzt irgendwie yield statt return sagt.

Jochen

Die wird nämlich intern in Python

Jochen

auch anders behandelt als normale Funktion.

Jochen

Und auch dieser

Jochen

Was auch sehr überraschend

Jochen

ist für Anfänger, oder wenn man das erklärt.

Dominik

Vielleicht müsste man statt dev irgendwie

Dominik

gen-Name machen oder sowas. Nein, nein.

Dominik

Da schreibst du es schon so hin,

Jochen

aber wenn du sagst yield im Body der

Jochen

Funktion, dann wird das Ding anders behandelt

Jochen

und nicht mehr als normale Funktion.

Dominik

Ja, das ist die gleiche Art. Wenn man die Deklaration dann anders machen würde,

Dominik

vielleicht mit einem Gen, statt einem Define,

Dominik

dann könnte man dann...

Dominik

Ja, aber...

Dominik

Du siehst dann halt an einer anderen Stelle und dann musst du

Johannes

aufpassen, dass das zusammenpasst.

Johannes

Das ist schon okay, so wie es ist.

Johannes

Es ist nur einmal am Anfang, wenn man das erklärt,

Johannes

zum ersten Mal, dann ist es echt weird.

Jochen

Ja, also im Grunde

Jochen

sind halt nur andere

Jochen

Schlüsselwörter, aber was man

Jochen

tatsächlich macht, ist halt einen Generator

Jochen

oder eine Funktion zu definieren,

Jochen

die halt irgendwelche Dinger, also einen Generator

Jochen

erzeugt. Und wenn man

Jochen

jetzt die Worte ändert, dann hat man fast

Jochen

das schon, was Async.io macht, nämlich wenn man sagt,

Jochen

Async.dev ist, damit definiert

Jochen

man halt eine Funktion, die jetzt, die man

Jochen

anhalten kann und die man weiterlaufen lassen kann.

Jochen

Und wenn man

Jochen

die aufruft, kriegt man nicht das Ergebnis der Funktion

Jochen

zurück, sondern eine Kuroutine oder

Jochen

ein Generator.

Jochen

Eine Routine, die man dann halt starten kann.

Jochen

Genau.

Dominik

auf genau diese Runde, bis er wieder Yield-Zahl

Jochen

gesagt hat, oder? Genau, und

Jochen

das Ganze ist verpackt, also

Jochen

wenn man jetzt, man hat diese Ansend-Funktion

Jochen

und dann hat man

Jochen

diese

Jochen

Kurroutinen und diese Kurroutinen

Jochen

verpackt in ein Future,

Jochen

sozusagen das Interface von

Jochen

dem Future,

Jochen

sind ein Task.

Jochen

Und dann sind wir eigentlich

Jochen

komplett, weil das, was tatsächlich, was man

Jochen

haben will, sind eigentlich Tasks. Das ist halt so das,

Jochen

was eigentlich die

Jochen

Low-Level-Async-IO-Geschichte

Jochen

ist. Also ein Future hat

Dominik

ein erwartbares Ergebnis, oder?

Dominik

Ja, ein Future ist

Jochen

sozusagen auch nur ein Interface

Jochen

für, also

Jochen

in einem Future kann man halt

Jochen

das kann man halt fragen, so bist du fertig?

Jochen

Und dann sagt das halt ja oder nein, also dann.

Jochen

Oder man kann ein Result

Jochen

für ein Future setzen, dann kann man sagen so

Jochen

future.setResult

Jochen

irgendwas und dann, wenn man sagt future.done

Jochen

dann sagt das, ja, ich bin fertig, ich habe ja ein Result

Jochen

und dann kann man das Result auch holen.

Jochen

Und man kann eben auch sagen...

Jochen

Kann man die nicht sogar verketten?

Jochen

Man kann die verketten, beliebig, genau.

Jochen

Man kann auch solche Sachen sagen wie,

Jochen

wenn du fertig bist, dann ruf folgende Funktionen auf.

Jochen

Folgendes Future.

Jochen

Ja, und das kann man beliebig vielen wieder machen.

Jochen

Und die gehen auch alle wieder auf die Event-Loop.

Jochen

Das ist auch ein interessanter Unterschied.

Jochen

Als ich da so ein bisschen was drüber gelesen habe,

Jochen

habe ich das dann gesehen, es gab ein Node.js macht das anders

Jochen

und es gab da auch einen Vortrag von dem Ryan Dahl,

Jochen

der Node.js mal irgendwann entwickelt hat.

Jochen

Das ist jetzt auch schon wieder was her,

Jochen

2018 hat er den gehalten und meinte so,

Jochen

ah, Designfehler in Node.js früher.

Jochen

Also einer der Fehler ist halt,

Jochen

dass es eben nicht so,

Jochen

dass auch diese Promise-Geschichte in JavaScript

Jochen

nicht, dass Node.js

Jochen

da nicht so wirklich drauf basiert, sondern dass sie

Jochen

halt auch viele Callbacks haben, die dann direkt ausgeführt

Jochen

werden und dann haben sie das Problem,

Jochen

dass Netzwerk dann doch nicht so gut funktioniert,

Jochen

weil sie teilweise nicht kontrollieren

Jochen

können, wann welche Callbacks ausgeführt werden

Jochen

und sie dann irgendwie, keine Ahnung,

Jochen

kompliziert, Backpressure kriegen, Probleme

Jochen

kriegen an diversen Stellen und das dann alles

Jochen

irgendwie wie ein Kartenhaus in sich zusammenfällt.

Jochen

An der Stelle bräuchten wir vielleicht mal

Jochen

ein bisschen mehr mit jemandem reden.

Jochen

Genau, und

Jochen

in Python

Jochen

ist es halt so, da wird das alles wieder,

Jochen

die ganzen Callbacks der

Jochen

Features, die gehen auch alle wieder zurück in die Event-Loop

Jochen

und werden ganz normal gescheduled und das ist alles

Jochen

fair, sozusagen. Also kein Callback,

Jochen

das ist ein Callback, das ist ein Backcall.

Jochen

Im Wesentlichen ist dann jeder Funktionsaufruf

Jochen

eben so ein Yield-Punkt, oder?

Jochen

Ja, beziehungsweise, genau, an der Stelle findet dieser Übergang statt, an der Stelle geht es zurück in die Event-Loop und dann halt in den nächsten Callback.

Jochen

Ja genau, aber das ist ja eben genau wichtig sonst, also damit dieses kooperative Multitasking hier funktioniert, dass die Prozesse einfach regelmäßig oder in möglichst kurzen Abständen yielden, damit eben die Event-Loop andere Sachen machen kann.

Jochen

Genau, wenn man das nicht macht, hat man ein Problem, ja.

Jochen

Ja gut, dann hältst du halt im Wesentlichen die Event-Loop an.

Jochen

Also wenn einer von denen hängen bleibt, sage ich mal,

Johannes

dann hat auch die Event-Loop wenig Möglichkeiten,

Johannes

da was zu tun dagegen, weil die halt nie wieder dran ist.

Johannes

Ja.

Johannes

Und das ist zum Beispiel in der Erlang-Welt anders.

Johannes

Wenn da ein Actor, die haben auch natürlich Monitoring eingebaut,

Johannes

automatisch, das heißt, man kann da Time-Outs setzen

Johannes

und wenn der Time-Out erreicht ist, dann wird halt der Actor abgeschossen.

Johannes

Ja.

Jochen

Ja, ja, also

Jochen

das ist halt da noch mal

Jochen

anders, ja.

Jochen

Ja, und dann habe ich auch noch so ein bisschen

Jochen

Benchmarks gemacht,

Jochen

wollte einfach mal gucken, wie schnell ist das denn alles

Jochen

so ungefähr. Und das

Jochen

war auch teilweise ganz interessant.

Jochen

Also

Jochen

bei Node.js kommt man ungefähr so bei,

Jochen

also

Jochen

es bietet einem dann,

Jochen

ich habe NUX, glaube ich,

Jochen

irgendwo mal deployed und dann, also

Jochen

wenn man das startet, man kriegt nicht mal

Jochen

die Option, das auf mehreren Prozessen laufen zu lassen

Jochen

oder so, sondern man kriegt halt irgendwie einen Prozess

Jochen

mit der Event-Loop und das war's. Aber der

Jochen

macht halt dann auch schon so 7.000 Requests pro Sekunde

Jochen

oder so, wenn man jetzt einfach nur

Jochen

ein Stückchen

Jochen

Hello World JSON zurückgibt.

Jochen

Und das ist schon

Jochen

sehr schnell. Und wenn man

Jochen

das konfigurieren könnte, was ich nicht konnte,

Jochen

aber dann kann man das bestimmt auf mehreren Prozessen

Jochen

auch laufen lassen. Und das

Jochen

wird dann wahrscheinlich in einer ähnlichen

Jochen

Richtung, weil es die gleiche Event-Loop ist,

Jochen

liegen wie, wenn man jetzt irgendwie

Jochen

einfach nur Starlet nimmt oder

Jochen

so, halt Async

Jochen

Webserver und dann LibUV

Jochen

drunter und auch wieder so Hello World JSON

Jochen

zurückgibt, dann kommt man so

Jochen

auf 35.000 Requests pro Sekunde

Jochen

bei einer 8-Core-Maschine.

Jochen

Also bei meinem...

Jochen

Das ist etwas weniger als 7.000.

Jochen

Nee, mehr, aber es ist ja auch...

Jochen

Es ist etwas weniger als 7.000 pro Core.

Jochen

Ja, das kann sein, genau.

Jochen

Es ist ein bisschen weniger

Jochen

genau, braucht auch ein bisschen,

Jochen

aber es ist, es ist, es ist, auf

Jochen

einem Prozess ist es aber ähnlich, auf einem Prozess

Jochen

ist es fast gleich, also es macht ja echt

Jochen

kaum einen Unterschied. Ja, okay.

Jochen

Ja gut, die werden halt auch im Wesentlichen

Jochen

nicht viel anderes machen, das sind ja kurze

Jochen

Funktionen, die ausgeführt werden, wenn so ein

Jochen

WV-Core

Jochen

kommt. Ja, und die Latenz war auch

Jochen

fast gleich, tatsächlich bei

Jochen

Node.js ein bisschen konstanter als bei

Jochen

bei Python,

Jochen

aber

Jochen

auch so, also tatsächlich

Jochen

die Netzwerk-Latenz zwischen den beiden Rechnern, auf denen

Jochen

ich das probiert habe, war so 2-3 Millisekunden.

Jochen

Und die

Jochen

gemessene

Jochen

Latenz war dann so 12-13

Jochen

Millisekunden immer. Sowohl bei Node.js wie

Jochen

auch bei Python. Auch wahrscheinlich

Jochen

eben die Latenz von Yubi halt.

Jochen

Aber das ist auch schon ziemlich gut.

Jochen

Also kann man nicht mehr kann.

Jochen

Wenn man jetzt Django nimmt

Jochen

und nicht irgendwie so einen rohen

Jochen

Async-Server,

Jochen

also Yubicorn habe ich

Jochen

verwendet halt als Applikationshäufer.

Jochen

Wenn man

Jochen

jetzt Ubicon nimmt und

Jochen

Django, dann sieht das halt

Jochen

ein bisschen anders aus. Dann ist

Jochen

halt leider, also

Jochen

da gehen insgesamt nur so 3000

Jochen

Requests pro Sekunde durch ungefähr.

Jochen

Wahrscheinlich liegt das irgendwie

Jochen

an diesem ganzen Middleware-Stack oder ich weiß nicht genau, woran es

Jochen

liegt, aber das ist halt... Ja, der macht halt sehr viel.

Jochen

Macht halt sehr viel pro View.

Jochen

Also das ist deutlich weniger

Jochen

und es ist halt auch, die Latenz ist

Jochen

halt deutlich höher. Die ist irgendwie direkt bei

Jochen

also 30 Millisekunden oder sowas. Ich meine, das ist immer noch nicht viel,

Jochen

aber es ist halt dann schon mal

Jochen

so, puh, oi, das war schon

Jochen

ja, ich meine, es ist alles

Jochen

völlig irrelevant, ja, also nicht, dass ich jemals

Jochen

irgendwie... Ja, klar, aber die Zahlen sind halt schon

Jochen

deutlich unterschiedlich. Ja, und

Jochen

was ich dann krass fand, ist,

Jochen

wenn man

Jochen

Django nimmt

Jochen

mit Junicorn und

Jochen

zum Beispiel G-Event-Workern,

Jochen

dann ist das auf einer CPU

Jochen

auch so bei 8000 Requests pro Sekunde, also sogar noch ein bisschen

Jochen

schneller als CPU-Wi.

Jochen

Und auch mit relativ

Jochen

wenig Latenz. Also das hat

Jochen

mich auch gewundert. Wow, krass. Wusste ich, hätte ich

Jochen

jetzt nicht gedacht. Also

Jochen

das war,

Jochen

das fand ich ganz beachtlich.

Jochen

Und auch Latenz besser.

Jochen

Aber du kannst es nicht als

Jochen

ASGI laufen lassen, sondern dann

Jochen

über Whiskey

Jochen

Interface. Und da kannst du natürlich viele

Jochen

Dinge so nicht mehr machen.

Jochen

Aber da ist

Jochen

das dann gar nicht mehr so langsam. Ich glaube

Jochen

irgendwie momentan ist es halt noch so, dass

Jochen

die ASCII-Geschichten nehmen irgendwie einen Sonderweg

Jochen

in Django und dieser Sonderweg ist irgendwie ein Stückchen langsamer.

Jochen

Ja, aber

Jochen

keine Ahnung. Aber da würdest du jetzt

Jochen

dann natürlich auch nicht deinen File-Server

Jochen

bauen. Würdest du dich trauen,

Jochen

einen File-Server mit Django

Jochen

ASCII-Uvicorn zu machen?

Jochen

Ich glaube, das ginge wahrscheinlich sogar tatsächlich.

Jochen

Also wahrscheinlich wäre das schnell genug.

Jochen

Oder würdest du den raustun und in den Starlight rein tun?

Jochen

Ja, das wäre eben auch so eine

Jochen

Sache.

Jochen

Wahrscheinlich würde ich es eher mit sowas wie

Jochen

Starlet probieren oder FastAPI oder so.

Jochen

Genau, einfach

Jochen

deswegen, weil das da

Jochen

so seamless ist quasi. Das ist halt

Jochen

irgendwie

Jochen

dafür schon gebaut und das funktioniert einfach so.

Jochen

Und was ja auch toll ist,

Jochen

du kannst ja auch über

Jochen

ASCII halt mehrere

Jochen

Applikationen haben.

Jochen

Du nimmst halt einen Applikationsserver und

Jochen

sagst dem halt unter der URL, es ist halt

Jochen

irgendwie, deine ASCII-Applikation ist halt

Jochen

jetzt irgendwie FastAPI oder sonst irgendwas.

Jochen

Ja, klar. Und unter der URL ist es

Jochen

halt Django. Gar kein Problem.

Jochen

Und gibst denen halt unterschiedliche Funktionen mit und dann

Jochen

ist das halt so.

Jochen

Sodass du halt auch sowas machen, wenn du

Jochen

es jetzt schaffst, irgendwie zum Beispiel Sachen zu authentifizieren,

Jochen

du kriegst ja das gleiche

Jochen

Cookie, Session-Cookie zum Beispiel, und dann kannst du

Jochen

natürlich auch die Autorisierung in

Jochen

irgendwas anderem machen und nicht unbedingt in Django.

Jochen

Wenn das geht, und das geht bestimmt irgendwie,

Jochen

dann kannst du auch das Ding dazu verwenden,

Jochen

die Files auszuliefern.

Jochen

Oder könntest du es über einen geteilten Cache oder irgendwelche

Johannes

anderen Messages machen, dass du quasi...

Jochen

Dass man das andere

Jochen

Dinge und dann halt irgendwie fragt, ja, das könnte man wahrscheinlich auch machen.

Jochen

Sogar über dieses ASCII-Interface könnte man das machen.

Jochen

Ja, also wie auch immer.

Jochen

das kriegt man auf jeden Fall hin, denke ich. Und

Jochen

dann bräuchte man vielleicht diese

Jochen

ganze Nginx-Geschichte schon nicht mehr

Jochen

und kann es einfach auch alles direkt in

Jochen

Python machen. Ja, gut, irgendwas brauchst du

Johannes

davor, um es zu terminieren. Also SSL-Termination

Jochen

genau, das willst du nicht.

Jochen

Ja, also da ist meine

Jochen

aktuelle

Jochen

Geschichte ja Traffic

Jochen

und ich fand es hakelig zu

Jochen

konfigurieren. Wir schreiben übrigens Traffic

Jochen

für die Leute, die mitgoogeln wollen.

Jochen

Und

Jochen

Ja, das ist so ein

Jochen

Loadbalancer, TCP,

Jochen

HTTP und mit eingebautem

Jochen

SSL. Ja, es ist hauptsächlich ein

Jochen

Loadbalancer, oder? Habe ich so verstanden.

Jochen

Ja, die machen gar kein Web-Server-Kram.

Jochen

Also da gibt es auch diverse...

Jochen

SSL-Termination und Loadbalancer.

Jochen

Ja, genau. Und das Ding ist

Jochen

in Go geschrieben

Jochen

und performt auch. Es ist auch so,

Jochen

wenn man SSL anschaltet, habe ich dann natürlich auch getestet,

Jochen

wie ist das eigentlich, wenn man jetzt SSL anmacht,

Jochen

wie wirkt sich das auf?

Jochen

Ja, es verbrennt gut CPU

Jochen

und es wird dann alles, ist dann alles

Jochen

nur noch halb so schnell. Aber okay,

Jochen

das ist ja gut. Klar, dass das was kostet.

Jochen

Das ist ja irgendwie logisch. Ja, gut, aber

Jochen

das sind ja Kosten, die man, also da

Jochen

kommst du halt nicht drum rum.

Jochen

Die hast du halt irgendwo.

Jochen

Genau, und

Jochen

ja, also das war

Jochen

eigentlich, also insofern würde ich sagen, also

Jochen

Django ist halt momentan noch im Vergleich zu

Jochen

Node.js und reinem Ubicorn

Jochen

irgendwie ein Stück langsamer.

Jochen

Woran es genau liegt, weiß ich nicht. Aber es ist

Jochen

auch schnell genug wahrscheinlich für alles, was man irgendwie so

Jochen

damit machen möchte. Insofern eigentlich kein großes Problem.

Jochen

Und dann habe ich auch nochmal Erlang

Jochen

getestet. Und Erlang war

Jochen

Erlang war quasi

Jochen

genauso schnell wie Ubicorn

Jochen

auf allen CPUs. Hat auch

Jochen

irgendwie alle CPUs komplett ausgelastet

Jochen

und

Jochen

hat halt auch so 35.000 Requests

Jochen

pro Sekunde ungefähr gemacht. Aber was ich total

Jochen

überraschend fand, und das hat mich

Jochen

auch beeindruckt, ehrlich gesagt, war,

Jochen

dass die Latenz, also du hast ja

Jochen

dann immer so, also die meisten Requests

Jochen

liegen halt alle in so einem engen Korridor

Jochen

von Zeit, Latenz

Jochen

und dann hast du halt so ein paar Ausreißer

Jochen

irgendwie so und eigentlich schon eher

Jochen

viele, manchmal dauern Dinge dann länger und das

Jochen

wollen wir ja eigentlich auch nicht. Und bei R lang

Jochen

hat man das praktisch gar nicht. Die brauchen alle

Jochen

genau gleich lang und alle nur so 3

Jochen

Millisekunden. Die Latenz zwischen

Jochen

den beiden Rechnern, wenn man Ping macht, sind halt irgendwie

Jochen

2,47 Millisekunden oder sowas

Jochen

und die Latenz bei den R langen Dingern

Jochen

ist halt 3 Millisekunden. Also wow, krass.

Jochen

Okay, das ist, ja.

Jochen

Ja, das ist eben diese Telefonie, ja.

Jochen

Das ist einfach ein Realtime-System

Jochen

und das merkt man eben an so einer Stelle ziemlich deutlich.

Jochen

Also da waren halt eben, also ja,

Jochen

das fand ich durchaus auch beeindruckend, ja.

Johannes

Aber wie kann man jetzt diese beiden Welten verheiraten, Jochen?

Johannes

Wie würdest du jetzt?

Johannes

Kann man ja auch machen, ne?

Johannes

Man könnte ja auch sagen, okay,

Jochen

man lässt das über den gleichen Loadbalancer gehen

Jochen

Ja, okay, wenn man so einen Load-Balancer hat, ja.

Jochen

Ja, okay, man braucht irgendwas in der Richtung

Jochen

und dann könnte ja auch zum Beispiel Erlang

Jochen

die Session-Cookies von Django kriegen,

Jochen

weil es ja die gleiche Domain.

Johannes

Ja, wobei Session-Cookies reichen ja alleine nicht aus.

Johannes

Du hast ja oft bei Authentifizierung,

Johannes

hast du dann irgendwelche Datenbank-Aufrufe,

Johannes

ob du welche Dateien du sehen darfst

Johannes

oder welche Bilder oder was weiß ich.

Johannes

Ja, ja, klar, okay.

Jochen

Aber du kannst ja auf die gleiche Datenbank gehen.

Jochen

Das könntest du ja machen.

Jochen

Ja, nee, aber klar.

Jochen

Eine Lösung, die ich mal gesehen habe, ist, dass du das

Johannes

über S3-Buckets machst und dann solche Tickets

Johannes

mitschickst, weil da kannst du so Authentifizierungstickets

Dominik

machen. Moment, du machst

Dominik

welche Tickets auf welche Buckets?

Dominik

Ist ja gar nichts. Das

Johannes

Wichtige ist, du hast zwei Systeme und das eine

Johannes

System sagt dem anderen, ja, du darfst die Datei

Johannes

ausliefern oder nein, du darfst sie nicht ausliefern.

Dominik

Und das eine ist ein Erlang und das andere ist Django zum Beispiel.

Dominik

Und sowas könnte man da ja prinzipiell auch machen,

Johannes

dass du sagst, du hast irgendwie so eine interne

Johannes

Schnittstelle, die dir

Johannes

aufruft und sagt, darf dieser Session-Cookie

Johannes

diese Datei abrufen?

Johannes

Ja, das geht.

Johannes

Sowas könnte man machen, dass du quasi da

Johannes

eine internische Stelle hast, weil das brauchst

Johannes

du auf jeden Fall. Wenn du das alles in ASCII

Johannes

hast, hast du auch eine internische Stelle.

Johannes

Auch wenn du eben Starlet

Johannes

und Django

Johannes

zusammenfindest, brauchst du auch eine schöne Stelle.

Johannes

Das ist dann halt eine Python-Funktion.

Johannes

Wenn du zwei VMs

Johannes

quasi in einem Loadbalancer zusammentust,

Johannes

hättest du auch eine schöne Stelle, die dann halt aber eine

Johannes

HTTP-Stelle ist.

Johannes

Was ja okay ist.

Johannes

ja, was ja prinzipiell

Johannes

möglich ist.

Johannes

Und dann hast du ja wieder so eine Situation,

Johannes

ich meine, Extent-File ist ja auch nichts anderes als

Johannes

so eine Schildstelle, ja, die sagt, liefere

Johannes

diese Datei aus.

Johannes

Wäre halt

Johannes

hier ein kleines bisschen anders. Aber ich wüsste jetzt nicht, dass

Johannes

es da was gibt, was vorbereitet ist.

Jochen

Nee, da muss man dann selber, also ich habe tatsächlich auch

Jochen

jemanden schon irgendwo im Blog, ich habe dann nur

Jochen

ganz kurz danach gegoogelt und dann habe ich jemanden gefunden,

Jochen

der einen Blogpost dazu geschrieben hat, wie man

Jochen

Django-Sessions

Jochen

von Erlang aus authentifizieren kann.

Jochen

und der Fazit von dem Blogpost

Jochen

war irgendwie so, ja, ja, das geht.

Jochen

Aber... Ich meine, das ist ja im Wesentlichen

Jochen

eine Datenbank-Tabelle, da steht

Jochen

der Session-Cookie drin und ein serialisiertes

Jochen

Base64-serialisiertes

Jochen

JSON.

Jochen

War das, ja, ja, das geht, aber lass es lieber

Jochen

oder war das, ja, ja, geht, aber...

Jochen

Der brauchte das für irgendwas.

Jochen

Also gebaut und das war jetzt

Jochen

natürlich schon fummelig und das ist nicht so, dass das

Jochen

irgendwie, dass man das

Jochen

irgendwo... Es gibt keine Konfigurationsoptionen

Jochen

oder so, dass man jetzt sagt, Django, ja,

Jochen

aber man muss das dann halt

Jochen

erlangen. Aber es geht schon.

Jochen

Also insofern, ja.

Jochen

Ja, und das ist auch nicht

Johannes

super kompliziert

Johannes

schlimm. Also es ist nicht, du musst jetzt hier

Johannes

den internen Code von Django

Johannes

lesen und verstehen und

Johannes

erinnert sich alle meine Release, sondern es ist halt schon,

Johannes

du musst auf die Datenbank-Tabelle zugreifen

Johannes

und Base64 dekodieren und JSON

Johannes

lesen und fertig. Pipx install, oder?

Johannes

Ja,

Johannes

genau.

Johannes

Oder halt, keine Ahnung, wie es bei Erlang

Johannes

heißt. Beam-Install

Johannes

Python Django.

Johannes

Ja, aber ja, fand ich

Johannes

fand ich

Jochen

überhaupt, FastAPI habe ich mich jetzt ein bisschen

Jochen

mit beschäftigt mal.

Jochen

Zuerst, ich habe das immer mal schon verfolgt,

Jochen

so dass es, das ist eigentlich ganz interessant.

Jochen

Und jetzt habe ich es ein bisschen intensiver mir angeguckt

Jochen

und das ist wirklich eigentlich ziemlich cool, muss man sagen.

Jochen

Auf der anderen Seite, also auf der einen Seite, sehr cool.

Jochen

Auf der anderen Seite,

Jochen

ich vermisse Django, bei Django

Jochen

eben schon solche Sachen, dass halt da ist halt

Jochen

Registrierung, Authentifizierung, also wobei

Jochen

ehrlich gesagt, ich finde es fast noch ein bisschen zu wenig, also

Jochen

Registrierung muss man ja auch immer dann schon überlegen bei Django,

Jochen

aber dass halt zumindest Authentifizierung

Jochen

und so halbwegs eigentlich alles schon

Jochen

drin hat und bei FastAPI

Jochen

das macht man schon mehr oder weniger

Jochen

so roh selber und das

Jochen

ist halt so, okay,

Jochen

ich muss ja wirklich

Jochen

die Hash-Funktion auswählen und

Jochen

ja. Hat ja auch einen gewissen Security-Impact.

Jochen

Jaja.

Jochen

Genau. Die Verantwortung will ich gar nicht

Jochen

haben. Don't do it yourself, ja.

Jochen

Try. Ja.

Jochen

Und also insofern, dass da muss man halt

Jochen

eine ganze Menge Dinge tun,

Jochen

die man vielleicht gar nicht machen will, aber

Jochen

auf der anderen Seite ist es halt so, man sitzt halt auch

Jochen

wirklich mit dem

Jochen

Hintern roh auf dem

Jochen

auf der

Jochen

Performance und kann halt auch, wenn man jetzt

Jochen

müsste. Man muss zwar nie, aber man könnte.

Jochen

Aber

Jochen

das ist doch deine Hypothese, Johann. Man muss doch eigentlich

Jochen

gar nie.

Jochen

Wir lösen das durch mehr Prozessoren.

Jochen

Ja, auf jeden Fall, genau.

Jochen

FastAPI, eigentlich auch eine sehr, sehr schöne Geschichte

Jochen

und macht diverse Dinge richtig.

Jochen

Also zum Beispiel, dass das API-Interface,

Jochen

dass das Web-Interface halt so komplett integriert ist

Jochen

und alles ist halt, das macht Dinge schon deutlich einfacher.

Jochen

Und ja, also ich bin mal gespannt,

Jochen

wie sich das noch entwickelt, aber das sieht schon,

Jochen

also Flask habe ich mir auch so ein bisschen angeguckt,

Jochen

Flask ist schon so ein bisschen schwieriger mit Async.

Jochen

Also da gibt es dann auch so Geschichten,

Jochen

ich weiß nicht, wie hieß denn das? Quart?

Jochen

Oder ich weiß es nicht mehr genau.

Jochen

Wo man das irgendwie so miteinander

Jochen

verheiraten kann. Aber ehrlich gesagt,

Jochen

ich glaube nicht, dass ich

Jochen

Flasks noch wirklich verwenden.

Jochen

Also jetzt so, weil

Jochen

eben Starlet oder Fast API macht eigentlich genau

Jochen

das Gleiche. Oder ist halt, du hast

Jochen

und es ist halt irgendwie deutlich moderner.

Jochen

Ja, den Eindruck hatte ich auch.

Jochen

Es gibt Leute, die verwenden

Johannes

das noch. Ich meine, wir kennen ja beide Leute, die noch

Johannes

Pyramid verwenden oder BFG.

Johannes

Oder ein Webverwender. Ich meine, das ist natürlich auch so eine Sache.

Johannes

Wenn man sich da einmal dran gewöhnt hat

Johannes

und da viel drin gemacht hat, dann

Jochen

ja, das ist, bevor man

Jochen

seinen eigenen Vendor locken.

Jochen

Ja, hat man sich dann selber

Jochen

ja,

Jochen

eingeschlossen.

Jochen

Genau.

Jochen

Letztens habe ich auch noch so einen

Jochen

Podcast gehört mit einem, jetzt habe ich leider

Jochen

den Namen nicht mehr parat,

Jochen

auch einen Python-Urgestein,

Jochen

der arbeitet bei Instagram.

Jochen

Und er plauderte so ein bisschen aus dem Nähkästchen, was sie da so alles machen. Und da waren auch so ein paar Aspekte noch dabei, die ich noch nicht so kannte. Wie zum Beispiel, das war mir nicht klar, dass Instagram schon seit Jahren auf ASGI, nicht ASGI, den Standard gab es nicht, aber auf irgendeinem Async-Interface zwischen Applikationsserver und Anwendung umgestiegen ist, obwohl sie ja eigentlich Django verwenden.

Jochen

Aber den Teil haben sie halt tatsächlich umgebaut.

Jochen

Und

Jochen

das war, weil

Jochen

das für sie dann wohl doch schon sehr

Jochen

wichtig war, dass das halt geht. Ja gut.

Johannes

Wenn du viel Rechenlast hast und wenn du viele

Johannes

Dateien auslieferst. Ja.

Johannes

Und

Jochen

also das,

Jochen

auf der anderen Seite, sie waren lange auf Django 1.3.

Jochen

Sind dann

Jochen

jetzt umgestiegen. Und das war

Jochen

auch irgendwie wohl der Treiber hinter dem Umstieg auf

Jochen

Python 3, weil dann Async alles

Jochen

sehr viel fluffiger wird.

Jochen

und sind jetzt auf Django 1.8

Jochen

und das hieß halt so, das wird sich

Jochen

wohl auch nicht mehr ändern, das ist jetzt die letzte

Jochen

Django-Version, die sie halt irgendwie nehmen.

Jochen

Die letzte Version, die es gibt.

Jochen

Ja, das war's

Jochen

dann da irgendwie, sie haben halt einige

Jochen

Teile komplett, die

Jochen

quasi identisch geblieben sind, also irgendwie das ganze

Jochen

Request-Response-Handling ist irgendwie,

Jochen

auch die Mittelwehr-Geschichten, das ist alles gleich geblieben,

Jochen

auch der View-Layer ist mehr oder weniger komplett

Jochen

intakt, aber

Jochen

also bis auf, dass sie halt da eine Asing-Schnittstelle

Jochen

dazwischen haben, aber was sie

Jochen

komplett ausgetauscht haben, ist irgendwie, also

Jochen

alles, was man irgendwie pluggable austauschen

Jochen

kann, ist ausgetauscht und den ORM

Jochen

haben sie auch ausgetauscht,

Jochen

weil sie irgendwann

Jochen

schaden mussten.

Jochen

Da brauchst du mehr der Kontrolle dann irgendwann.

Jochen

Ja, und Schaden zu der Zeit

Jochen

ging das, also es geht ja inzwischen in Django auch so halbwegs,

Jochen

aber damals ging das halt nicht.

Dominik

Also ich meine, nochmal, Schaden ist aufteilen

Dominik

von, hat man gefragt, aber verstehe ich nicht.

Dominik

Ja, also der

Jochen

Königsweg bei Datenbanken,

Jochen

die zu skalieren, ist ja einfach immer mehr Hauptsprecher reinstecken

Jochen

oder mehr Prozessoren, solange wie halt geht.

Jochen

Und wenn man denkt, ja, jetzt geht nicht mehr,

Jochen

dann halt einfach nochmal ...

Jochen

Eine zweite Datenbank.

Jochen

Und dann musst du halt aufpassen, wo deine Daten hinspannen.

Jochen

Wisst ihr, wo das Wort herkommt?

Jochen

Das ist ein sehr schönes ...

Jochen

Ultima Online.

Jochen

Sehr schönes Wort.

Jochen

Genau.

Johannes

Das Wort Shard heißt ja eigentlich so ein Bruchstück.

Johannes

Und es kommt tatsächlich aus der Ultima Online-Welt.

Johannes

Die Geschichte von Ultima Online ist,

Johannes

dass der Weltstein in viele kleine Steine zerbrochen ist.

Johannes

Und jeder von diesen Shards ist jetzt eine Welt für sich.

Johannes

Und das heißt, wenn du eben in Ultima Online

Johannes

dich mit einem Server verbindest,

Johannes

dann heißt der nicht Server, sondern Shard.

Johannes

Und das war deren Trick,

Johannes

wie sie so eine große Benutzerschar handeln konnten,

Johannes

indem die dir einfach auch verschiedene Bruchstücke

Johannes

von diesem Weltstein verteilt haben.

Johannes

Und da kommt dieses Wort Sharding her.

Johannes

Das ist ja schon ein sehr spezifisches Wort,

Johannes

dass du eben einfach sagst, das ist

Johannes

eine eigene abgeschlossene Welt und du kannst nicht aus

Johannes

dieser Welt raus.

Johannes

Ja, genau. Und das musste

Jochen

Instagram mit denen, musste halt auch die User dann

Jochen

irgendwann aufteilen auf unterschiedliche Datenbanken.

Jochen

Und dann hatten sie das zuerst so gemacht, dass

Jochen

quasi alle deine

Jochen

Daten, wenn du jetzt als User auf irgendeiner Datenbank lagst,

Jochen

dann alles, was du, also dein kompletter Feed

Jochen

und der ganze Content von denen, denen du

Jochen

folgst, der lag dann halt auf deiner Datenbank.

Jochen

Was ja

Jochen

auch irgendwie Sinn macht, weil dann die ganzen Queries

Jochen

gehen dann halt nur zu einer Datenbank und dann ist es eigentlich schön.

Jochen

Und dann

Jochen

war irgendwie

Jochen

Wer war das?

Jochen

Justin Bieber

Jochen

oder sowas? Ich weiß es nicht genau.

Jochen

Irgendwie hieß es

Jochen

also, jeder kannte die User-ID von dem und

Jochen

wenn die irgendwo aufgetaucht ist, dann war immer

Jochen

irgendwie all hands on

Jochen

deck Zeit und man musste halt,

Jochen

weil immer wenn der gepostet hat, hast du natürlich das Problem,

Jochen

da hat er halt irgendwie

Jochen

Zillionen

Jochen

Follower und

Jochen

der Content, der musste

Jochen

dann halt auf alle Datenbanken repliziert werden.

Jochen

Das hat dann einen riesen Update-Sturm ausgelöst,

Jochen

weil, also sobald der irgendwas abgedatet hat,

Jochen

wurde das dann halt

Jochen

irgendwie quasi jede Datenbank rein repliziert.

Jochen

Und das ist natürlich dann nicht so gut.

Jochen

Das ist doch eine generelle Eigenschaft

Jochen

von so einem Netzwerk, von so

Jochen

Social Graphs, dass wir so eine exponentielle

Jochen

Verteilung haben.

Johannes

Dass es ein paar Knoten gibt, die mit allen

Johannes

verbunden sind und alle anderen haben nur ein paar

Johannes

Verbindungen. So ein zentrales

Johannes

Webding.

Johannes

Wie gesagt. Ja. Und die Spinne.

Johannes

Ja, nee, dass du eben

Johannes

so eine Verteilung hast, wo es

Johannes

beide Extreme gibt. Du hast

Johannes

ganz, du hast viele, oder

Johannes

einige Knoten, die ganz viele Verbindungen

Johannes

haben. Und du hast aber auf der anderen Seite

Johannes

auch ganz, ganz viele Knoten, die

Johannes

ganz wenige Verbindungen haben. Also die, das ist

Johannes

irgendwie. Ja, irgendwo im Zentrum.

Dominik

Irgendwo so eine große Gaswolke, wo ganz viele

Dominik

Sterne sitzen. Die Menge der Endes ist irgendwie gleich verteilt.

Johannes

Ist das nicht sogar so, wenn du so einen Random Graph

Johannes

baust, wenn du in so einen Graph

Johannes

Random Edges reintust, dass du dann immer so einen kriegst?

Johannes

Das kann sein.

Johannes

Meine Grafen-Theorie-Vorlesungen sind lange her.

Jochen

Ja, also jedenfalls fand ich das

Jochen

auch witzig, fand ich,

Jochen

dann wurde irgendwann gefragt, wie lange dauert das

Jochen

eigentlich, wenn man die testet, oder wie viel Code

Jochen

ist das eigentlich?

Jochen

Keine Ahnung, viele Millionen Zeilen irgendwie.

Jochen

Und wie lange dauert das eigentlich,

Jochen

die Tests durchlaufen zu lassen?

Jochen

Ja, also auf einer Maschine

Jochen

hat das schon ganz lange keiner mehr probiert.

Jochen

Sie haben sich halt auch so ein eigenes Ding gebaut,

Jochen

was dann halt die Tests irgendwie an

Jochen

diverse Maschinen...

Jochen

Auf dem Teststart

Jochen

lief es auf dem anderen nicht.

Jochen

Ja, aber das dauert wohl tatsächlich nur 15 Minuten.

Jochen

Und das machen sie auch nur, also normalerweise

Jochen

reicht es irgendwie, die Lokaltests

Jochen

um dich herum laufen zu lassen, um zu sehen,

Jochen

ob das irgendwie alles noch funktioniert oder nicht.

Jochen

Und sobald es dann halt in Produktion geht,

Jochen

muss es halt einmal komplett durchlaufen und das

Jochen

dauert dann halt auf x Rechnern

Jochen

15 Minuten ungefähr. Ja gut, aber

Jochen

das ist doch trotzdem noch cool. Das ist eigentlich noch alles

Jochen

in 15 Minuten

Johannes

durchzutesten, das ist ja der Hammer,

Johannes

da könnten sich ja viele Firmen, das dauert

Johannes

ja bei vielen anderen Projekten

Jochen

Monate. Ja genau und

Jochen

eben die ganzen Teile

Jochen

fand ich auch, das ist aber auch

Jochen

respektabel und was ich auch gut fand,

Jochen

das hieß so, ja wie macht ihr das eigentlich

Jochen

als Entwicklungsmodell mit Branches

Jochen

oder wie auch immer und dann hieß es so, ja

Jochen

Branchen, das können wir schon ganz lange nicht mehr machen,

Jochen

weil es sind einfach zu viele Entwickler. Die haben halt tausende

Jochen

Entwickler, die da drin rumschreiben

Jochen

und sobald du einen Branch

Jochen

irgendwie weggehst, dann die kriegst du nie

Jochen

wieder zurück, weil

Jochen

du gehst einfach in den Konflikten unter.

Jochen

Das ist einfach zu schnell. Das heißt, alle entwickeln

Jochen

immer auf dem gleichen Branch, aber verstecken

Jochen

alles.

Jochen

Und packen halt alles hinter Feature-Flex.

Jochen

Und das geht dann wohl.

Jochen

Ja, aber das ist generell so eine Technik,

Jochen

wenn du größere

Johannes

Deployments auch hast, dass du Feature-Flags machst.

Johannes

Was ist ein Feature-Flag?

Johannes

Rolling Releases haben kannst und

Johannes

trotzdem sicher bist, dass du

Jochen

ein Rollback machen kannst. Dass du halt sozusagen

Jochen

ein Feature, an dem du jetzt

Jochen

irgendwie schreibst, das ist,

Jochen

das machst du halt ein- und ausschaltbar

Jochen

sozusagen.

Dominik

Also quasi die Commits kann man dann abschalten?

Dominik

Nein, nein, nicht die Commits, nur die

Dominik

Funktionalität.

Dominik

Code kommt immer mit, aber

Jochen

der wird halt nicht immer angesprochen.

Johannes

Du hast eine große Tabelle, wo drinsteht,

Johannes

was jetzt gerade für Features aktiv sind.

Dominik

Okay, dann muss ich halt quasi jede Zeile flecken.

Dominik

Nö, nur die ...

Dominik

Nicht jede Zeile, jedes Feature.

Dominik

Ja.

Dominik

Nur die Einstiegspunkte.

Dominik

Genau.

Jochen

Und du würdest auch nie ein neues Feature

Jochen

auf allen gleichzeitig anschalten oder so,

Jochen

sondern du schaltest das immer erst mal auf so

Jochen

einem Promille an und guckst, was passiert.

Jochen

Und dann nimmst du ein bisschen mehr

Jochen

und dann guckst du halt und dann kannst du messen

Jochen

und dann guckst du deine Graphen an und denkst,

Jochen

okay, sieht gut aus, dann ja.

Jochen

Das kennt ihr,

Johannes

könnt ihr euch noch damals, ganz, ganz

Johannes

früher, als das Internet noch jung war,

Johannes

könnt ihr euch an Audio

Johannes

Galaxy erinnern? Ja.

Johannes

Das war, es war das bessere

Johannes

Napster. Ja, das war super.

Johannes

Und der, einer von den Autoren, die das

Johannes

geschrieben haben, also die hatten auch, die sind dann geschlossen

Johannes

worden, ja, von der Musikindustrie relativ schnell.

Johannes

Die, da, die haben sehr viele,

Johannes

der hat sehr viele interessante Artikel veröffentlicht

Johannes

und er hat halt gesagt, die sind irgendwann von Java

Johannes

auf C umgestiegen aus Geschwindigkeitsproblem.

Johannes

Und natürlich waren diese Server

Johannes

erstmal nicht kompatibel.

Johannes

Und die haben das einfach so gemacht.

Johannes

Die haben diesen C-Server halt geschrieben

Johannes

und der war dann halb fertig. Und dann haben sie ihn einfach laufen lassen.

Johannes

In den Pool reingetan.

Johannes

Der ist nach einer halben Sekunde gecrashed.

Johannes

Und dann haben sie

Johannes

diesen Crash behoben.

Johannes

Und dann haben sie das so lange gemacht,

Johannes

bis der halt stabil genug lief,

Johannes

dass sie quasi die Hälfte ihres Pools

Johannes

ersetzen konnten.

Johannes

Das ist so eine Technik.

Johannes

Wenn du viel Traffic hast,

Johannes

dann kannst du so statistische Sachen machen.

Johannes

Kannst du sagen, okay, wir samplen jetzt einfach mal

Johannes

einen Teil des Traffics raus

Johannes

und tun den auf einen anderen Server

Johannes

und schauen mal, ob der kompatibel ist.

Johannes

Oder du samplst eben die, wie du sagst, Feature Flags raus

Johannes

und sagst, wir aktivieren jetzt dieses Feature mal

Johannes

für 10.000 Benutzer.

Johannes

Und dann denkst du dir so, 10.000 Benutzer, so viele.

Johannes

Aber es sind halt nur 0,001 Promille der aktiven Benutzer.

Johannes

Und wenn irgendwas schief geht, dann ist es schade für die,

Johannes

aber dann müssen die halt die Seite neu laden

Johannes

und du hast aber

Johannes

statistisch valide Daten.

Johannes

Also auch das ist ja was,

Johannes

was du nur kannst, wenn du viel

Johannes

Paralleles,

Johannes

viele parallele Anfragen hast.

Johannes

Naja,

Johannes

das fand ich eigentlich alles

Jochen

sehr fluffig und dann hat er noch was gesagt

Jochen

und da dachte ich so, oh shit,

Jochen

das ist auch, hatte ich ja vorher schon so ein bisschen

Jochen

gehört bei auch einem Podcast

Jochen

mit Andrew, wo

Jochen

weil Andrew Godwin zu Gast war,

Jochen

der irgendwie bei Eventbrite, glaube ich, arbeitet.

Jochen

Weil er auch meinte so,

Jochen

also die Eventbrite-Jungle-Applikation

Jochen

hat ja so um eine Million Zeilen irgendwie Code.

Jochen

Und es dauert halt schon relativ lang, die zu starten.

Jochen

Und der Grund, warum es so lange dauert,

Jochen

sind halt die Imports,

Jochen

weil die Imports laufen halt 20 Sekunden.

Jochen

Und da kann man nicht viel optimieren.

Jochen

Und er meinte so,

Jochen

wir haben halt tatsächlich das Problem,

Jochen

dass wenn wir jetzt irgendwo schnell hochskalieren müssen,

Jochen

dann sind halt diese 20 Sekunden, die fehlen.

Jochen

einfach. Und es gibt tatsächlich Überlegungen,

Jochen

ob sie das Ganze nicht in einer anderen Sprache neu schreiben, weil

Jochen

es halt unoptimierbar ist.

Jochen

Kann man die Imports cachen oder so?

Jochen

Nee, leider kann man da nicht viel machen.

Jochen

Und das

Jochen

kannst du einen Graphen aufbauen,

Jochen

der die dann in einer anderen Reihenfolge macht. Das habe ich schon mal

Jochen

wo gelesen, aber das hilft halt auch nur.

Jochen

Ja, das Problem,

Jochen

das grundsätzliche Problem ist halt wohl irgendwie,

Jochen

dass auch, sobald ein neues Modul dazu

Jochen

kommt, kann es halt die Reihenfolge ändern.

Jochen

Und das heißt, du kannst nicht,

Jochen

du müsstest irgendwie das

Jochen

Ich habe das mal gesehen, ich habe mal so einen Artikel gelesen, wo sie gesagt haben, sie mussten, also war auch irgend so ein Internetanbieter aus den 2010ern oder was weiß ich, die halt das Importsystem so anpassen mussten, dass sie die Importreihenfolge selber optimieren können, um genau das zu umgehen.

Jochen

Ja, und genau das sagte der dann halt auch.

Jochen

Der meinte so, naja, also sehr große,

Jochen

also sie haben das schon so ein bisschen zerlegt irgendwie

Jochen

oder versucht, aber trotzdem ist es so,

Jochen

wenn du an Instagram entwickelst,

Jochen

hast du da auch deinen Entwicklungs-Server,

Jochen

deinen Django-Entwicklungs-Server so quasi,

Jochen

ganz normal, wie man das so kennt.

Jochen

Und jetzt änderst du da halt irgendeine triviale Geschichte

Jochen

und dann lädt er automatisch neu.

Jochen

Und dann willst du ja gucken auf deiner Seite,

Jochen

okay, hat das jetzt so funktioniert,

Jochen

wie ich mir das gesagt habe.

Jochen

Und das dauert dann halt eine Minute.

Jochen

Du kannst nicht viel daran machen.

Jochen

So ist das dann halt.

Jochen

Und das ist natürlich extrem frustrierend.

Jochen

Also das macht dann nicht mehr so richtig viel Spaß,

Jochen

damit zu entwickeln.

Jochen

Und was man sich eventuell vorstellen könnte,

Jochen

was man da macht, ist halt eben über Type Hinting oder so

Jochen

vielleicht irgendwie auch in dem Modulsystem zu sagen,

Jochen

es gibt Module, die nicht mehr alles dürfen.

Jochen

Und dann kannst du irgendwie einschränken,

Jochen

dass sie zum Beispiel nicht mehr die Reihenfolge der Module,

Jochen

die importiert werden, ändern dürfen. Und dann könntest

Jochen

du sowas machen, wie du kannst es eben cachen. Du kannst halt sagen,

Jochen

okay, ich mache einen Reload,

Jochen

aber nur von dem Modul und sonst nichts.

Jochen

Und das geht aber momentan noch

Jochen

nicht so richtig und da sind sie halt

Jochen

auch irgendwie dran.

Jochen

Aber da kann man doch bestimmt den Python-Interpreter

Johannes

irgendwelche Memory-Snapshots machen, wo du

Johannes

alles importiert hast,

Johannes

was du einfach einmal komplett in den Hauptspeicher

Johannes

rein streamst.

Jochen

Ja, ich weiß es nicht, aber es scheint

Jochen

nicht so ein einfaches Problem zu sein.

Jochen

Das sind irgendwie wohl...

Jochen

Also mal ein Guido fragen, der weiß das.

Jochen

Ja, aber das klingt natürlich,

Jochen

wenn schon mal mehrere Leute sagen,

Jochen

dass sie damit Probleme haben,

Jochen

das klingt dann natürlich nicht so richtig gut.

Jochen

Aber ja.

Jochen

Ja.

Jochen

Ja, tatsächlich ist mir das auch schon

Jochen

in eigenen Projekten aufgefallen.

Jochen

Wenn die größer werden,

Johannes

dann ist halt die Startup-Time langsamer.

Johannes

Und das ist nervig beim Entwickeln,

Johannes

weil du halt deine Sekunden warten musst,

Johannes

bis du deine Änderungen testen kannst.

Johannes

Das ist schon so.

Johannes

Ja.

Dominik

Ja, aber du hast irgendwas Interessantes gesagt, und zwar Type-Ins.

Dominik

Ich glaube, das bringt uns jetzt quasi

Dominik

zum Ende dieser Folge.

Dominik

Und zwar hatte ich da

Dominik

einen Pick der Woche in der Standard, äh, nicht Standard

Dominik

Library, wir wollten zwar ein bisschen Standard Library machen, aber

Dominik

ich hätte heute gepickt

Dominik

Typer. Und Typer macht

Dominik

nämlich genau das, das macht nämlich aus Type-Ins

Dominik

Kommandos, die man sehr schön

Dominik

benutzen kann. Man kann jetzt seine eigene

Dominik

Klee zusammenklicken oder

Dominik

seine eigenen Kommandos, die man aufrufen kann.

Dominik

Ah, das ist für eine Kommandozeile?

Dominik

Ist das da, also tatsächlich so, dass

Johannes

du dann Command-Line

Johannes

Dinger hast. Ja, es gibt sogar

Dominik

Autocompletion, die mitgeliefert wird und so. Das hast du eigentlich

Dominik

ganz cool gemacht.

Dominik

Da gibt es ja ganz viele Bibliotheken, die das machen.

Dominik

Früher gab es ja immer nur eine, die ganz schlecht

Dominik

war und inzwischen gibt es ganz viele.

Dominik

Ja, also Klick-Klick drunter und man kann halt tatsächlich

Dominik

mit so Type Annotations sagen, was

Dominik

für gültige

Dominik

Argumente man irgendwie mitparsen kann.

Dominik

Irgendwie, dann kannst du einfach ein Boolean flaggen

Dominik

und dann kannst du halt einfach die Option setzen, dann kommt

Dominik

halt ein True oder False rein und kannst halt dann gucken,

Dominik

was du machen willst und das ist irgendwie sehr

Dominik

convenient irgendwie für Projekte und

Dominik

kleine Abstraktionen.

Dominik

Ja, das ist spannend.

Dominik

Das ist tatsächlich ein Problem, an dem ich

Dominik

auch schon vor langer Zeit mal

Dominik

gearbeitet habe.

Dominik

Weil es mich nämlich auch genervt hat. 2012

Johannes

habe ich meine eigene Bibliothek veröffentlicht.

Johannes

Kommandier heißt die,

Johannes

die im Wesentlichen genau das Gleiche macht.

Johannes

Die nimmt Funktionen mit ihren Types

Johannes

und Typehints und

Johannes

baut ja daraus eine Kommandozeile.

Johannes

Gibt es inzwischen tatsächlich

Johannes

einige Google Fire

Johannes

heißt die, glaube ich.

Johannes

Die ist nicht

Johannes

quasi auf Google nicht zu finden. Ah, hier,

Johannes

Python Fire heißt.

Johannes

Macht auch so was ähnliches.

Johannes

Simple way to create command line

Johannes

interface in Python.

Johannes

Ich bin ja sehr froh, dass

Johannes

ich lange vor Google auf die Idee gekommen bin.

Johannes

Also ich kann mir selber,

Johannes

ich schreibe mir selber zu, dass ich

Johannes

die bessere Idee hatte.

Johannes

Ja, sehr gut.

Johannes

Du hast auch irgendwie noch eben was gesagt

Dominik

unserem vorgepinkelt, dass du Commander

Dominik

interessant fandest?

Dominik

Ne, also wie gesagt, meine Bibliothek heißt

Dominik

Kommandier. Kommandier.

Dominik

Das ist ein englisches Wort, das heißt so viel

Dominik

wie übernehmen.

Dominik

Und deshalb habe ich das gemacht. Aber es gibt

Dominik

in der Standardbibliothek noch

Dominik

was anderes, das heißt CMD, also

Dominik

CMD. Das macht

Dominik

ein bisschen was anderes, das macht nicht ein Command Line

Dominik

Interface, sondern ein Shell Interface.

Dominik

Das heißt sowas wie

Dominik

das, was man in Python hat. Der Python

Dominik

Interpreter ist ja, wenn man den startet, ist der

Johannes

ein Shell-Interface, das heißt, ich habe eine Eingabezeile

Johannes

und wenn ich da was eingebe, dann passiert irgendwas.

Johannes

Und mit

Johannes

dieser Bibliothek

Johannes

CMD aus der Standardbibliothek

Johannes

kann man solche Shells

Johannes

sich selber bauen.

Johannes

Das heißt, es ist quasi nicht auf der Kommandozeile

Johannes

die Befehle eingegeben, sondern in dem

Johannes

Programm dann drin. Auch mit toller

Dominik

Autocompletion und mit bestimmten

Dominik

Optionen, die direkt angezeigt werden und sowas alles.

Dominik

Genau, also im Wesentlichen schreibt man eine Klasse,

Dominik

die von dieser Command-Klasse

Dominik

ableitet, also von der CMD-Klasse ableitet und

Dominik

tut dann da Funktionen rein.

Dominik

Und der Rest, also der nimmt die Dokumentation

Dominik

daraus, der nimmt die Parameter daraus.

Dominik

Wenn man nicht

Dominik

die Standard-Library braucht, gibt es auch CMD2.

Dominik

Das kann dann auch Farben und sowas alles.

Dominik

Aha, Farben. Spielerei.

Dominik

Ja, nein, nein, nein, das kann, glaube ich, noch ein, zwei

Dominik

andere nette Sachen. Ich muss da mal ausprobieren.

Dominik

Das Beispiel, was bei CMD

Dominik

in der Standard-Library

Johannes

drin ist, ist direkt Turtle, also wie man sich eine

Johannes

Turtle, interaktive Turtle baut.

Johannes

Ich weiß nicht, ob ihr

Johannes

ob ihr damals schon alt

Johannes

oder schrägstrich jung genug wart, um

Johannes

die Turtle zu benutzen im

Dominik

Ja, erinnere mich ein bisschen an, wie hieß das Logo?

Dominik

Informatik-Unterricht. Ja, ja, Turtle Graphics.

Dominik

Das war

Dominik

sehr schön damals.

Dominik

In Pascal hatten wir das.

Dominik

Wisst ihr, was LEED ist?

Dominik

Guck dir mal in den Spiegel.

Dominik

Der, der, oh, ich weiß nicht

Johannes

mehr, was das heißt. Loyal Informatik-Editor

Johannes

oder irgendwie sowas. Das war so

Johannes

ein System, was wir in der Schule hatten,

Johannes

Als ich in der achten Klasse war,

Johannes

hatten wir das entschuldigt.

Johannes

Es war so eine Art Pascal

Johannes

mit einem Turtle-Interface und das Beste ist,

Johannes

es hatte einen Editor mit dabei und es hat auch

Johannes

sehr schöne Grafiken gemacht.

Johannes

Der konnte aber nicht scrollen, dieser Editor.

Johannes

Das heißt, alle Programme waren maximal eine Seite lang.

Johannes

Sehr schön.

Johannes

Und das

Johannes

musste halt ausreichen in der achten Klasse.

Johannes

Aber mit Turtle

Johannes

und allem war es auch sehr, sehr gut.

Johannes

Wir hatten damals tatsächlich

Jochen

Turbo Pascal 5.0, glaube ich.

Jochen

nicht schlecht. Das war auch, das hat

Jochen

tatsächlich Spaß gemacht.

Jochen

Ist auch sowas, was man nicht mehr, also ich meine,

Jochen

diese ganzen Dinge findet man nicht mehr im Internet.

Johannes

Ich habe es gerade probiert und es geht nicht.

Johannes

Ja, ist alles irgendwie weg.

Johannes

Ja, gone, gone, gone again.

Johannes

Ja, aber rechter Vergess ist ja auch nicht schlecht.

Johannes

Ja. Kommt alles in die Shownotes.

Johannes

Genau, ja gut.

Johannes

Hast du noch was,

Johannes

Pick, Jochen?

Jochen

Ja, also ich würde jetzt einfach mal so,

Jochen

auch was so Async-Geschichten angeht,

Jochen

also man braucht ja nicht nur den Serverteil,

Jochen

sondern halt auch einen,

Jochen

der kleine ist ja manchmal auch nicht so schlecht,

Jochen

wenn man den hat.

Jochen

Ansonsten, ja, wie will man jetzt eigentlich gucken,

Jochen

ob das funktioniert hat,

Jochen

was man da auf der Serverseite gebaut hat.

Jochen

Und ja, so üblicherweise wird man jetzt unter Python

Jochen

zum Web-Requests machen,

Jochen

ja, verwenden die meisten wahrscheinlich Requests.

Jochen

Aber das Ding ist halt leider nicht Async, gar nicht.

Jochen

Sondern halt komplett synchron.

Jochen

Und kann man auch nicht viel machen.

Jochen

Und sozusagen der asynchrone

Jochen

Nachfolger

Jochen

irgendwie von Request, oder vielleicht wird ja

Jochen

Request auch nochmal irgendwann asynch.

Jochen

Ist

Jochen

HTTPX.

Jochen

Auch von

Jochen

einem der Namen,

Jochen

die hinter ganz vielen Dingen stehen.

Jochen

Von Tom Christie, der halt

Jochen

Jungle Rest Framework

Jochen

gebaut hat. Und dann Starlet

Jochen

und viele andere Dinge.

Jochen

Und genau, der hat

Jochen

dann irgendwann quasi halt auch jetzt

Jochen

einen async-fähigen

Jochen

HTTP-Client geschrieben,

Jochen

der sich am Request-Interface halt orientiert.

Jochen

Aber halt

Jochen

auch, mit dem man

Jochen

dann async-Geschichten machen kann.

Jochen

Und genau, den verwende ich jetzt auch eigentlich

Jochen

meistens, wenn ich irgendwie HTTP-Geschichten mache

Jochen

und funktioniert eigentlich ganz gut.

Jochen

Und warum

Johannes

nicht jetzt nicht mehr Request, was jetzt besser

Johannes

als Request ist? Es kann mehr als Request.

Jochen

Wie gesagt, Request ist Sync,

Jochen

kann kein async. Ja, okay. Also es ist jetzt

Jochen

quasi, ja, iSync-Request.

Jochen

Ja, also ich erinnere mich noch,

Jochen

früher habe ich immer sowas verwendet wie AEO,

Jochen

HTTP-Client und so, aber das war immer ziemlich,

Jochen

da muss man viel selber machen. Ja, da muss man selber frickeln.

Jochen

Ja.

Jochen

Ja, gut. Ich würde sagen,

Dominik

Come to the Dark Side, wir haben Cookies, ne, und

Dominik

du hast auch noch ein nettes Video gemacht zum Cookies.

Jochen

Oh ja, das können wir ja auch mal verlinken. Ja, das kommt auch

Jochen

in die Show Notes, perfekt. Ja.

Jochen

Aus aktuellem Anlass.

Jochen

Ja. Ja, vielen Dank, dass ihr uns

Jochen

heute wieder zugehört hat, dass ihr eingeschaltet habt.

Dominik

Feedback, Kritik, Anregungen, was auch immer.

Dominik

Hallo at peisenpodcast.de

Dominik

Schreibt uns, hört uns, wann auch

Dominik

immer ihr wollt. Morgens, mittags, abends, nachts.

Dominik

Zum Aufstehen, zum Schlafen gehen, zum Zähneputzen,

Dominik

zum Autofahren, zum was auch

Dominik

immer euch gerade einfällt, zum auf der Decke

Dominik

im Park liegen. Bei den

Dominik

Temperaturen bestimmt wundervoll.

Dominik

Ja.

Dominik

Auch beim Autofahren. Optionen sind eingeschränkt.

Jochen

Wir sind immer noch Corona

Jochen

behindert.

Jochen

Irgendwie in allem, was wir tun.

Jochen

Aber E-Mails schreiben geht.

Jochen

Und Podcasts hören geht auch.

Dominik

Bleibt uns gebogen und bis zum nächsten Mal.

Dominik

Jo, bis dann. Tschüss.