Transcript: Python 3.10

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

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

Dominik

Ja, schön, dass ihr wieder eingestellt habt. Wir waren etwas länger nicht da, das tut uns etwas leid.

Dominik

War ziemlich viel zu tun und ja, Ferienfieber und so weiter, was man nicht alles kennt.

Dominik

Ja.

Dominik

Der alte Wahnsinn.

Jochen

Ja, genau. Herzlich willkommen Dominik auch zurück. Bist du sicher, dass das Folge 35 ist?

Dominik

Ja, das ist ein bisschen schwierig zu sagen.

Dominik

ein bisschen Track.

Dominik

Du hast verloren. Das ist übrigens Jochen.

Dominik

Hallo.

Dominik

Ja, genau. Vielleicht sagen wir das nächste Mal einfach

Dominik

herzlich willkommen ohne Episode.

Jochen

Das ist ja auch sowas. Das hat Apple Podcasts,

Jochen

iTunes hat ja so

Jochen

Richtlinien, wie man das, die haben irgendwann mal gesagt,

Jochen

sie hätten gern die Episoden-Nummer nicht mehr im Titel.

Jochen

Das hat man früher immer so gemacht. Ich habe das auch so gemacht

Jochen

und dann habe ich das rausgenommen.

Jochen

Ich weiß nicht, am Anfang sind die, glaube ich, noch mit

Jochen

dabei und irgendwann habe ich...

Dominik

Letztens hatten wir jedenfalls 34, dann 33,

Dominik

jetzt haben wir 35 und wir haben eigentlich noch einige

Dominik

unveröffentlicht. Das heißt, das ist auch nicht ganz so einfach

Dominik

an unseren Files, das zu sehen. Aber ja,

Dominik

schön, dass ihr wieder da seid. Wir machen heute eine Mixed-Folge.

Dominik

Also ein bisschen über Python

Dominik

wollen wir erzählen, drei Zehnen und so.

Jochen

Genau, da muss man ja eigentlich was zu sagen.

Jochen

Genau, und vielleicht noch über

Jochen

die alten Neuerungen, die es so gab.

Jochen

Und dann wollen wir noch ein bisschen über

Dominik

Shared Memory von

Dominik

Python-Prozessen sprechen vielleicht.

Dominik

Ja, je nachdem, wie viel uns da einfällt.

Dominik

Oder sonst so Dinge.

Dominik

Andere Dinge auch.

Jochen

Bist du noch nicht so genau. Mal schauen.

Jochen

Ja, wir müssen uns wieder strukturierte Formen kriegen,

Jochen

aber das haben wir bisher noch nicht hinbekommen.

Jochen

Ja, genau.

Jochen

Ja, bevor wir jetzt mit Python 3.10 anfangen,

Jochen

was haltet ihr eigentlich von Werbung?

Jochen

Wir verhalten, wir verhalten das an einem bestimmten Grund.

Dominik

Ob wir es so mit Helge Schneider halten sollen,

Dominik

so Werbung ist scheiße.

Dominik

Oder ist das für euch ein No-Go?

Dominik

Es wäre cool, wenn ihr dazu ein bisschen Feedback gebt,

Dominik

ob das für euch in Ordnung wäre oder nicht.

Dominik

Wir haben uns aus einigen technischen Perspektiven gefragt,

Dominik

ob das Sinn macht, oder das mal auszuprobieren.

Dominik

Wir sind aber eigentlich noch nicht so wirklich selber davon überzeugt.

Jochen

Ja, wäre es natürlich praktisch, wenn es irgendwie

Jochen

die ganzen Kosten, die da so ein bisschen, also so

Jochen

wahnsinnig hohe Kosten sind es jetzt nicht, aber wenn die auch ein bisschen

Dominik

Ich kaufe mir ein Schloss, Jochen.

Jochen

Wann das wieder reinkriegen könnte oder so,

Jochen

keine Ahnung, muss man mal schauen.

Jochen

Ja, das ist auch so ein Thema, genau.

Jochen

Ja, ich warte nur

Dominik

darauf, dass ich wegen dem Podcast ein Schloss

Dominik

ziehen kann.

Jochen

Ich glaube, da wirst du noch ein bisschen warten müssen.

Jochen

Das wird noch etwas dauern. Ich habe Zeit.

Jochen

Ja.

Dominik

Wir lieben verlängerte Maßnahmen.

Jochen

Tja, genau. Wollen wir so ein bisschen News

Jochen

machen? Dann könnten wir mal wieder...

Jochen

News, ja.

Dominik

Also am Montag kam

Dominik

Python 3.10.0 heraus.

Dominik

Ja. Also letzten Monat, also am

Dominik

4.10. Voll gut, genau.

Dominik

Und dazu gab es auch so ein

Jochen

Release

Jochen

Stream irgendwie, fand ich auch nicht.

Jochen

Oh, den habe ich nicht gesehen.

Jochen

Ah, ja, genau.

Jochen

kann man sich auf YouTube nochmal angucken. Also ehrlich gesagt,

Jochen

ich weiß nicht, ob ich den sich wirklich komplett angucken will. Das ist irgendwie

Jochen

so über drei Stunden. Aber

Jochen

man kann mal reingucken, einfach um

Jochen

die Leute zu sehen, die das machen. Das ist vielleicht ganz interessant.

Jochen

Die hatten auch lustige Hüte auf. Das ist auch

Jochen

super. Oh, cool.

Jochen

Genau. Ja, und

Jochen

das war auch ganz witzig.

Jochen

Ja, es war eine komplizierte

Jochen

Geschichte, so ein Release.

Jochen

Ja.

Jochen

Genau. Ich habe jetzt auch

Jochen

schon so ein bisschen, ich weiß nicht, hast du das schon mal

Jochen

versucht, irgendwo zu installieren oder mit was zu kaufen?

Dominik

Ja, ich benutze schon relativ lange,

Dominik

jetzt fast zwei Monate, also den Rescandidate, der so dann

Dominik

draußen kam, habe ich auch schon dann

Dominik

daily benutzt und habe so ein bisschen gemerkt, was da

Dominik

ging, was nicht ging. Direkt da, also ich

Dominik

muss den ja meistens oder oft unter Windows

Dominik

benutzen, leider, aber

Dominik

ja, da gibt es halt ein großes Problem mit Pybin32,

Dominik

das kann man aber relativ einfach

Dominik

fixen, wer weiß, wie es geht, aber das erzähle ich vielleicht

Dominik

einfach später. Ja, okay.

Dominik

Genau, ich habe es eigentlich, ich habe es

Jochen

vielleicht auch mal, ich habe auch mal eine

Jochen

Beta, dann Release Candidate, weiß nicht, mal installiert,

Jochen

mal so ein bisschen zu gucken.

Jochen

Oder ich glaube, wir hatten irgendwann mal, haben wir uns

Jochen

über das Structural Pattern Matching

Jochen

auch schon mal unterhalten, das ist schon eine ganze Weile her.

Jochen

Ich glaube, das habe ich auch mal kurz ausprobiert oder so.

Jochen

Aber ansonsten habe ich das noch nicht verwendet

Jochen

und jetzt aber doch dann mal

Jochen

installiert auch. Ich habe jetzt versucht, das Projekt

Dominik

nämlich gerade... Ja, das sind ja so die Hauptfeatures,

Dominik

das Structural Pattern Matching und

Dominik

die Typing-Syntax so ein bisschen

Dominik

angepasst und so.

Jochen

Na gut, also deswegen frage ich, wie man es sieht.

Jochen

Also ich glaube,

Jochen

so ein bisschen

Jochen

kontrovers.

Jochen

Aber klar, ich kann schon verstehen,

Jochen

warum man die als die wichtigsten neuen Features

Jochen

klassifizieren würde.

Jochen

Ich glaube, das positivste

Jochen

Feedback haben

Jochen

die verbesserten Fehlermeldungen bekommen.

Dominik

Und das ist tatsächlich super.

Dominik

Die werden sogar mit 3.11 noch ein bisschen schöner.

Dominik

Und dass man tatsächlich nicht nur

Dominik

irgendeinen Quatsch bekommt, sondern tatsächlich die Stelle, an der es steht

Dominik

und warum, vielleicht auch ein Hinweis,

Dominik

warum es falsch sein könnte und was da falsch ist,

Dominik

das wird direkt gut beschrieben.

Jochen

Genau, also bisher ist halt, wenn man da irgendwo

Jochen

eine Klammer vergessen hat zuzumachen oder so, dann kriegt man

Jochen

halt einen Syntax-Error beim

Jochen

nächsten Statement, irgendwie beim Gleichheitszeichen

Jochen

oder irgendwie sowas. Und das ist

Jochen

halt dann irgendwie verwirrend, weil man kriegt halt den Fehler

Jochen

angezeigt, nicht an der Stelle, wo man den erwartet,

Jochen

wo er passiert ist, sondern

Jochen

wo der Interpreter dann halt drüber fällt.

Jochen

Aber genau, und

Jochen

jetzt ist es halt besser. Und das ist

Jochen

halt auch alles konsequent.

Dominik

Sogar unterkringelt jetzt richtig die Stelle, an der es ist,

Dominik

mit den Numbers und so, ein schönes Debugging.

Jochen

Das ist von einem Pack-Parser, der jetzt da neu ist,

Jochen

und mit dem kann man einfach mehr machen.

Jochen

Ja, weiteres Feature,

Jochen

was halt dem neuen Parser

Jochen

sozusagen,

Jochen

der dafür zuständig ist,

Jochen

ist das jetzt in, das ist auch eher so eine

Jochen

Randhässlichkeit, aber das ist halt

Jochen

schon komisch, wenn man diese

Jochen

Limitierung irgendwie, wenn man

Jochen

auf die gestoßen ist, dass

Jochen

in Context-Manager, also wenn man sagt

Jochen

with irgendwie Context-Manager as irgendwas

Jochen

da konnte man vorher

Jochen

nicht das so klammern.

Jochen

Also, dass man das über mehrere Zeilen, das musste

Jochen

in einer Zeile sein und man konnte auch

Jochen

glaube ich nicht mehrere,

Jochen

sondern musste das dann mehrfach

Jochen

verschachteln, was dann natürlich, also

Jochen

wenn auf dieses Problem gestoßen ist, man hat jetzt mehrere

Jochen

Context-Manager und

Jochen

dann irgendwann kommen

Jochen

dann große Nöte, weil wenn man

Jochen

nicht, wenn man immer weiter verschachteln muss, wenn man jetzt

Jochen

mehrere davon hat, dann wird das halt, wird der Platz auf der

Jochen

rechten Seite eng und wenn man die aber nicht

Jochen

umbrechen kann, weil diese Klammer dort

Jochen

nicht funktioniert, dann hat man irgendwann

Jochen

so ein Problem. Das geht ja jetzt gar nicht mehr

Jochen

so richtig. Hässlich wird das.

Jochen

Es wird dann sehr hässlich.

Jochen

Und das geht jetzt.

Jochen

Mit Klammern, sodass man mehrere

Jochen

Zeilen verwenden kann und halt auch mehrere

Jochen

in einem Dings, sodass man das halt

Jochen

quasi, wenn man viele

Jochen

Context-Manager

Jochen

benutzen möchte, das kann man jetzt einfach

Jochen

in eine Zeile schreiben,

Jochen

beziehungsweise halt untereinander.

Jochen

Ja.

Jochen

Es sind wahrscheinlich nicht so viele Leute

Jochen

drauf geschossen auf das Problem, aber

Jochen

ja, genau.

Dominik

Manchmal macht das schon Sinn. Also wenn man das schachteln will,

Dominik

könnte man das auch anders lösen, indem man Dekoratoren verwendet

Dominik

oder so, aber...

Jochen

Ja, aber ich meine, dafür gibt es die Syntax ja, dass man das halt

Jochen

verwendet. Und ja,

Jochen

wenn man das dann nicht so richtig

Jochen

verwenden kann, ist es halt ein bisschen blöd.

Jochen

Meistens hat man ja nur so ein, zwei Dinger,

Jochen

die man machen möchte.

Jochen

Also in diese Verschachtelung,

Jochen

oder dass es blöd wurde, ist mir dann

Jochen

die einzige Male, wo mir das mal passiert ist,

Jochen

das irgendwie ist halt, wenn ich

Jochen

in Tests mehrere Sachen,

Jochen

also wenn ich da mehrere Sachen

Jochen

wegmocken will oder wegpatchen will

Jochen

und teilweise

Jochen

kann man das halt, kann man ja auch im Dekorator machen,

Jochen

manchmal geht das auch nicht, weil das basiert halt auf anderen Sachen

Jochen

und dann muss man das halt im

Jochen

Test selber machen und dann, wenn man

Jochen

viele Sachen hat, die man wegmocken

Jochen

möchte, dann wird es halt komisch und

Jochen

das ist aber die einzige Stelle, wo man das praktisch

Jochen

jemals irgendwie begegnet ist, ansonsten.

Jochen

Ne, na gut.

Jochen

Also was ich sehr gerne benutze, ist diese neue

Dominik

Typing-Syntax, wo man jetzt halt, ich weiß gar nicht, wie heißt

Dominik

das Zeichen überhaupt, dieser senkrechte Strich?

Jochen

Die Pipe. Pipe-Operator, ja. Genau.

Dominik

Den kann man halt jetzt verwenden als Type-In

Dominik

zwischen einem Oder-Zeichen, einfach sagen,

Dominik

es ist ein Dict oder ein List, der wartet, dass diese

Dominik

Funktion, da gibt es sie raus, dann macht man einfach Pipe dazwischen.

Dominik

Das ist irgendwie sehr intuitiv und man muss nicht

Dominik

immer alles vom Typing direkt importieren und ein Union

Jochen

draus machen. Ja, ja, das sieht auf jeden Fall

Jochen

deutlich besser aus. Stimmt.

Jochen

Genau, ja.

Jochen

Das ist schön. Ich finde bei

Jochen

dieser Type-In-Syntax immer so, ich habe mich ehrlich gesagt

Jochen

auch noch nie so richtig wirklich viel damit beschäftigt,

Jochen

muss ich sagen. Will ich auch noch irgendwann machen,

Jochen

aber ich habe es bisher nie so benutzt.

Jochen

Aber

Jochen

ich finde das immer ein bisschen verwirrend von der,

Jochen

ich weiß nie so genau, was sind jetzt die aktuelle Formen von

Jochen

Syntax, die man da verwenden kann und bis welcher

Jochen

Python-Version zurückgeht das denn und so.

Jochen

Aber ja,

Jochen

also so sieht es auf jeden Fall schon mal viel besser aus.

Jochen

Sieht sowieso schon mal viel besser aus, dass man nicht die ganzen Typen

Jochen

von irgendwie aus

Jochen

Typing importieren muss, sondern dass man halt direkt

Jochen

die echten verwenden kann.

Dominik

Also es funktioniert halt leider noch nicht immer so komplett,

Dominik

je nachdem, wie komplex und wie vollständig man das irgendwie so machen

Dominik

will. Aber ja, das ist schon mal auf jeden Fall

Dominik

ein Schritt in die richtige, sehr richtige Richtung. Sieht auch gut

Dominik

aus. Was mich halt noch so ein bisschen

Dominik

nervt, ist halt so, wenn du zirkuläre Abhängigkeiten

Dominik

hast oder sowas.

Dominik

Das passiert halt bei Typing relativ schnell

Dominik

und das ist noch nicht so richtig gelöst.

Dominik

Es gibt ja irgendwie so zwei Dinge, die man machen kann,

Dominik

dass man von Typing irgendwie das einmal importiert

Dominik

und dann nur dann, wenn Typing Type-Checking

Dominik

ist, dann die nutzt.

Dominik

Das geht auch nicht immer. Manchmal kann man es dann als

Dominik

String dann doch hinschreiben und dann hat man einige Types, die

Dominik

als Klassen definiert sind und einige als Strings.

Dominik

Das ist auch irgendwie hässlich.

Dominik

Und naja, da wollen sie aber irgendwie dran arbeiten.

Dominik

Aber ich weiß noch nicht genau, wann das eingeführt wird.

Dominik

Dass man das halt einfach da machen kann.

Dominik

Dass er halt erkennt, dass es ein Type ist

Dominik

und es halt dann tatsächlich Lazy importiert oder so.

Dominik

Und das dann halt kein Problem ist beim Kompilieren.

Jochen

Okay, auch interessant, ja.

Dominik

Also das heißt, auch das wird noch besser.

Dominik

Also das heißt, wir bekommen insgesamt im Moment

Dominik

so ein bisschen hübschere, ästhetischere Sachen

Dominik

für so Errors und Syntax und so.

Dominik

Je nachdem, ob man Type-Hints überhaupt mag.

Jochen

Genau, deswegen, also ich meine, ich würde sagen, eben das ist halt durchaus eine durchaus kontroverse Geschichte, weil es gibt halt auch viele Leute, die finden das gar nicht gut.

Dominik

Ja, man ist halt nicht persönlich, ursprünglich, da gab es das halt nie.

Jochen

Und ja, ich kann es so ein bisschen nachvollziehen auf der anderen Seite. Also ich glaube, ja, man muss es halt dafür einsetzen, wo es halt Sinn macht.

Jochen

Ja, genau.

Jochen

Also es ist, was ich auch komisch finde, ist, wenn Leute das dann überall verwenden, weil es macht halt nicht überall Sinn.

Jochen

Also ich habe auch das Gefühl, dass zum Beispiel, wenn ich

Jochen

gerade an den Sachen,

Jochen

an denen ich schreibe, wenn das halt so,

Jochen

das ist halt ein Projekt, was halt

Jochen

andere Bibliotheken verwendet, aber selber keine Bibliothek.

Jochen

An der Stelle macht es nicht so wahnsinnig

Jochen

viel Sinn, weil ich, also

Jochen

es ist schön, wenn ich in der

Jochen

IDE sozusagen die, also

Jochen

sozusagen, wenn die IDE

Jochen

das verwenden kann, um

Jochen

mir zu helfen, aber

Jochen

wenn ich sowieso, wenn das die Libraries,

Jochen

die Verwender tun und brauche

Jochen

ich das sozusagen für meinen eigenen Code, den ich nicht

Jochen

quasi nie aufrufe, brauche ich das ja gar nicht.

Jochen

Oder der halt nur

Jochen

verwendet wird, um halt irgendwas

Jochen

zu tun. Das ist halt irgendwie da. An der Stelle

Jochen

brauche ich es bis jetzt nicht, ob ich es wirklich

Dominik

brauche. Also ich mache wahrscheinlich auch im Moment zu

Dominik

viel Hints, also weil es gerade irgendwie ein bisschen noch

Dominik

reiner als weniger. Aber ich finde das halt schon

Dominik

sehr praktisch, wenn ich halt wirklich

Dominik

das Objekt quasi schon so

Dominik

getitlet habe, dass ich halt weiß, was für ein Objekt

Dominik

ich da in der Funktion der Hand habe, weil das

Dominik

so getitlet ist. Oder auch bei der Variablenzuweisung, dass

Dominik

halt schon relativ klar ist, was das halt mal sein wird

Dominik

oder so. Weil dann relativ, also auch

Dominik

manchmal kann man halt so eine Base-Klasse nennen, dann weiß man halt, was hat man

Dominik

denn da in der Hand und das ist irgendwie, also

Dominik

A, natürlich vom Editor, der das halt super dann linden kann

Dominik

und dann halt auch die Types dann feststellt auch,

Dominik

wenn das halt irgendwie nicht stimmt, das kann er halt relativ

Dominik

gut feststellen irgendwie, die meisten modernen können das ja.

Dominik

Ja. Und das ist irgendwie schon echt

Dominik

hilfreich, also gerade wenn ich jetzt irgendwie mit anderen Leuten

Dominik

irgendwie gleichzeitig irgendwie Features entwickle

Dominik

und wieder irgendwie so einen kleinen Teil baut und was meint

Dominik

der denn da, wenn die Leute nicht immer so gut

Dominik

nehmen oder so manchmal, dann sieht man das halt auf jeden Fall

Dominik

am Type auch schon, was das dann halt sein

Dominik

könnte und das, also

Dominik

für mich macht das deutlich verständlicher, also ja,

Dominik

man kann es wahrscheinlich auch too much machen an zwei Stellen, aber

Dominik

ja, also ich finde halt, das Linting,

Dominik

das ist mir so oft aufgefallen, dass irgendwo,

Dominik

wenn man dann mal die Type-Ins dann

Dominik

reingebaut hat in so einen Code, der irgendwas war komisch

Dominik

irgendwie von einem Coworker oder sowas,

Dominik

dann merkt man so, oh ja, klar, wird direkt gelintet,

Dominik

da ist der Typ irgendwann kaputt gegangen und er gibt halt dann

Dominik

doch nicht das zurück, was er erwartet hat und vielleicht

Dominik

ist irgendwo doch ein None rausgefallen oder sonst irgendwas

Dominik

und solche Sachen, die sieht man halt durch die Type-Ins

Dominik

einfach deutlich schneller und deutlich häufiger.

Dominik

Ich meine, klar, wenn man sowieso ein so super

Dominik

Coder und Programmierer ist wie du, lieber Jockner,

Dominik

Ich würde sagen, dass das echt, also mir hilft es

Dominik

vielleicht, also ja, vielleicht nicht überall, aber

Jochen

Ja, ich glaube,

Jochen

ich muss einfach mehr damit mal rumspielen.

Dominik

Ja, was interessant ist, es gibt halt auch so

Dominik

immer ja, also gerade in diesem ganzen Typing

Dominik

das Ding, also alles auf so Interfaces aufzubauen.

Dominik

Ja, dass du halt so Datenklassen baust, wo halt relativ

Dominik

klar ist, was für Attribute das mit

Dominik

welchen Datentypen sind.

Jochen

Ja, ja, ich meine, das habe ich auch schon, also Pydentic

Jochen

finde ich auch total super.

Jochen

Pydentic macht das natürlich.

Jochen

Also, genau, was ich total, also gerade mit FastAPI zusammen, was ich total super finde, ist, dass man halt einfach dann Objekte auch in serialisierter Form halt einfach hin und her schicken kann.

Dominik

Das ist total super mit FastAPI, weil FastAPI kannst du einfach dann quasi von einem anderen Modell erben und lässt dann beispielsweise für dein Datenbankmodell ein paar Spalten weg oder sowas und kannst es halt einfach dann als Modell einmal definieren und kannst es als Response-Modell ausgeben und das ist alles dann mit drin.

Dominik

Das ist schon sehr nice.

Jochen

Genau, und das funktioniert einfach alles so magisch.

Dominik

Oh, FastAPI, kennst du das SQL-Modell?

Dominik

Das ist auch von Sebastian Ramirez und da macht er quasi einen Rapper noch um Pydentic und SQL Alchemy rum und baut das alles zusammen in eine Klasse rein, dass man halt nicht mehr so viel Duplicated Code hat und gleichzeitig irgendwie SQL Alchemy Modelle und Pydentic Scheme nachschreiben muss.

Jochen

Ja, ja, das ist eine Frage, die ich mir, ich habe irgendwann, ich weiß nicht, wenn ich, war es auch schon über ein Jahr her, als ich zum ersten Mal angefangen habe, so ein bisschen mit FastAPI rumzuspielen, dann dachte ich so, okay, SQL Alchemy, schon ein schöner ORM, aber das, was halt doof ist, ist halt, dass man die Modelle immer doppelt definieren muss, einmal als SQL Alchemy Modell und dann halt nochmal als Pidentic Modell, damit man es rausrennen kann, sozusagen.

Dominik

Und mit dem neuen TKM, wo du sagst, einfach table gleich true und das ist wirklich echt angenehm.

Jochen

Ja, und da dachte ich schon, das ist aber blöd,

Jochen

dass man das zweimal machen muss und ja,

Jochen

das ist jetzt weg und das würde ich auch gerne mal ausprobieren.

Jochen

Ich habe es bisher noch nicht hingekriegt, aber ich glaube, das mache ich demnächst mal.

Jochen

Ja, das ist sehr geil.

Jochen

Ich glaube, ich fange jetzt,

Jochen

ich nehme mir noch mal dieses Deployment-Dings,

Jochen

was ich mal auch, wann habe ich das gebastelt?

Jochen

Das war auch ungefähr

Jochen

letztes Jahr um die Zeit, ein bisschen

Jochen

später noch mal vor

Jochen

und dann mache ich das noch mal mit FastAPI,

Jochen

Vue.js und vielleicht

Jochen

mal mit SQL-Model.

Dominik

Ja, also was

Dominik

was mir noch so ein bisschen fehlt, ist das letzte, so ein paar

Dominik

von den SQL-Alchemy-Features, sowas wie Unique

Dominik

Constraints oder so, habe ich aber vielleicht auch

Dominik

noch nicht rausgefunden, wie das gut geht. Ich glaube, man kann das

Dominik

so mit SQL-Alchemy

Dominik

extra Quarks machen oder so, aber

Dominik

ja. Ja, keine Ahnung.

Dominik

Das funktioniert noch nicht so ganz einwandfrei, aber

Dominik

da fehlt auch noch so ein bisschen Dokumentation, das ist ja noch gerade

Jochen

relativ frisch. Ja, ja, ja, das gibt es ja gerade erst

Dominik

neu. Genau, und ja, also Migrations dazu

Dominik

kann man natürlich auch schön machen.

Dominik

Ja. Einfach mit, wie machen wir das, mit

Dominik

Alembic, glaube ich, die heißen da, wie heißt das?

Dominik

Nicht Migrations, sondern Revision

Dominik

Revisionen oder so.

Dominik

Und das Coole ist, wenn man dann

Dominik

quasi sein Management macht mit Typer,

Dominik

auch von Sebastian,

Dominik

dann hat man quasi auch seine Management-Commands

Dominik

direkt da mit drin, was das irgendwie alles ist.

Jochen

Ja, das verwende ich auch schon lange, das verwende ich jetzt auch seit über

Dominik

anderthalb Jahren schon. Ja, das verwende ich sogar auch mit Django,

Jochen

aber... Ja, verwende ich auch mit Django, genau.

Jochen

Ich verwende das dann meistens mit Poetry zusammen.

Jochen

Genau, ja.

Jochen

Und dann, genau, gibt's halt,

Jochen

da kann man Scripts definieren und

Jochen

dann sind die halt, ich meine,

Jochen

ich weiß noch nicht, ob das so hübsch ist,

Jochen

Und dann so ein Commands-PY habe ich die dann

Dominik

und das sind Funktionen, die dann... Also ich finde das auch super. Also vor allen Dingen,

Dominik

du kannst das halt hinterher dann sogar in einem Notebook importieren,

Dominik

ja, und kannst halt dann bestimmte Sachen

Dominik

einzeln ausführen in deinem Notebook. Das heißt,

Dominik

du kannst die Management-Commands sowohl auf der Kommando-Teile als auch

Dominik

in deinem Notebook einfach laden und benutzen.

Dominik

Und das ist halt dann schon auch sehr cool,

Dominik

weil dann kannst du einfach mal on the fly einen User erstellen

Dominik

und das User-Create-Command hast du

Dominik

dann halt in den Commands zum Beispiel.

Dominik

Das gibt es ja zum Beispiel bei Dango ist natürlich mit

Dominik

inbound, aber das ist dann bei FastAPI ein bisschen anders.

Dominik

Das ist schon cool.

Dominik

Das ist schon cool.

Dominik

Ja, aber da hätte ich auch noch gleich mehr Fragen zu,

Dominik

weil da hatte ich ein Problem, das würde ich gerne mit dir

Dominik

besprechen.

Dominik

Da ging es halt genau über diese

Dominik

Shared-Memory-Sache. Aber vielleicht machen wir

Dominik

nochmal mit Python 3.10 weiter.

Jochen

Wollen wir das schon inhaltlich nochmal structuren?

Jochen

Ich meine, wir haben das ja schon mal besprochen.

Jochen

Ich weiß gar nicht, ob man da jetzt nochmal was dazu sagen muss.

Jochen

Also man kann halt jetzt ein Match

Jochen

Statement und dann

Jochen

kann man da halt irgendwie so

Jochen

Sachen auspacken und dann gucken,

Jochen

ob das da drauf matcht und

Jochen

dann führt man halt

Jochen

dann, also so ein bisschen wie ein Case-Statement auf

Jochen

Cooks.

Jochen

Speed, ich weiß nicht.

Jochen

Genau, und man kann

Jochen

auch noch so Guards setzen davor, das heißt,

Jochen

das fällt dann halt da so durch und

Jochen

dann kann man halt da noch

Jochen

ein If hinterschreiben und dann, je nachdem, ob die

Jochen

Bedingung erfüllt ist oder nicht, dann matcht das da halt

Jochen

rein oder halt. Jetzt muss ich kurz sagen, was ist ein Guard?

Jochen

Genau, also wenn man jetzt sagen kann,

Jochen

wenn man sagt,

Jochen

wenn man jetzt

Jochen

die Bedingungen hat,

Jochen

sozusagen, und man möchte

Jochen

aber zusätzlich noch irgendwie, und da sagt man noch, wenn

Jochen

irgendeine andere Bedingung erfüllt ist, dann kann man

Jochen

hintendran an den Ausdruck einfach schreiben,

Jochen

if irgendwas x gleich y oder so,

Jochen

und dann läuft das da rein, und dann

Jochen

wenn das nicht so ist, dann läuft es halt weiter in den Default-Fall

Jochen

zum Beispiel, oder halt.

Dominik

Okay, das ist der Gart. Genau.

Jochen

Das ist halt auch nett, weil, ja, also

Jochen

ich habe noch nicht wirklich tolle

Jochen

Anwendungsfälle dafür, hätte ich gesagt.

Jochen

Ja, es ist halt so ein bisschen zum

Dominik

Filtern von so Dingen, ne? Das war irgendwie mit if, das ist halt

Dominik

irgendwie sehr verschachtelt, da muss man tausendmal

Dominik

den Code schreiben und mit diesem Matchcase,

Dominik

da kann man relativ schön gucken, was denn da übergeben wurde.

Dominik

So ein Command-Parser zum Beispiel kann man

Dominik

sehr schön mit Matchcase, glaube ich, abbilden

Jochen

oder so. Ja, vielleicht wenn man irgendwelche Dinge parsed.

Jochen

Das könnte man wahrscheinlich deutlich einfacher

Jochen

hinkriegen. Oder was ich mir auch vorstellen kann,

Jochen

ist, dass wenn man halt so...

Dominik

Du hast zum Beispiel so einen generischen Endpunkt

Dominik

für irgendwas, da kommt irgendwas rein.

Jochen

Ja, aber das ist nur eine gute Idee,

Jochen

ist das zu sagen.

Dominik

Ja, du kannst zum Beispiel sagen, nur dann, wenn es

Dominik

ein bestimmtes Format hat, dann mach ich

Dominik

aber was mit, ansonsten schmeiß ich es einfach weg.

Jochen

Ja, genau. Also das

Jochen

Einzige, wo ich praktische Dinge gesehen habe,

Jochen

aber ich bin, ich meine, das kommt natürlich, also

Jochen

man müsste wahrscheinlich mal so in die

Jochen

Elixierwelt gucken oder

Jochen

so, da wird das ja irgendwie, ist das halt

Jochen

häufig eine Geschichte, die man da verwendet. Vielleicht gibt es da

Jochen

irgendwie ganz tolle Anwendungsfälle für.

Dominik

Du redest häufig von Elixieren. Ich sehe immer das Buch in der Ecke.

Dominik

Ja, ja, ich bin immer noch nicht so richtig weitergekommen.

Dominik

Ja, ich da,

Jochen

manchmal muss man es halt

Jochen

nicht nur rumliegen haben, sondern auch mal reingucken, aber

Jochen

In einem Kopfkissen hilft am besten.

Jochen

Ja, genau.

Jochen

Oder halt irgendwie eine andere Sprache, die das halt

Jochen

kann, aber... Ich lege mir auch immer ganz viel Gold

Dominik

in das Kopfkissen, damit ich dann das Stoff kaufen kann.

Dominik

Ja.

Dominik

Aber

Jochen

irgendwie...

Jochen

Genau, weil

Jochen

weiß ich jetzt, bei Python, also der einzige

Jochen

Fall, wo ich das Gefühl habe, da ist etwas,

Jochen

das ist so ähnlich.

Jochen

Und es ist halt, wenn man jetzt

Jochen

in JavaScript im Frontend...

Jochen

Da gibt es ja zum Beispiel React, so Redux oder so.

Jochen

wo Eventsysteme hat

Jochen

und

Jochen

da hat man halt

Jochen

häufig auch so Dinger, die diese Struktur haben,

Jochen

dass man halt ein Case-Statement hat und dann wird das

Jochen

halt je nachdem,

Jochen

was da passiert ist,

Jochen

man hat halt irgendwie ein Event, was da reinfällt

Jochen

und dann splittet man das halt auf

Jochen

und ruft dann entsprechend Funktionen auf

Jochen

oder updatet irgendwie ein State oder macht halt irgendwas

Jochen

und im Kern von diesen

Jochen

Stores ist halt häufig ein großes Case-Statement

Jochen

irgendwie

Jochen

und das könnte man

Jochen

dann halt, ein Python könnte man das dann auch so machen

Jochen

und halt eleganter mit dem Structural Pattern

Jochen

Matching. Das wäre jetzt so eine Anwendung, die mir

Jochen

einfallen würde, aber ansonsten pfff.

Dominik

Du musst ja natürlich jetzt alle If-States durch Match-Cases setzen,

Dominik

erst mal um zu testen.

Jochen

Das Problem ist halt auch, also wirklich so einfach

Jochen

nur so verwenden

Jochen

ist halt auch, weil man hat ja oft das Problem, dass man

Jochen

einen Code hat, der auch noch auf älteren Python-Versionen

Jochen

laufen soll und dann, man kann das

Jochen

ja nicht einfach so, also man kann das in irgendeinem Projekt

Jochen

verwenden, das komplett neu ist

Jochen

oder so, dass man Kontrolle hat, aber wenn das irgendwo,

Jochen

wenn man jetzt zum Beispiel eine Library schreibt, dann kann man das nicht gut

Jochen

verwenden, weil dann müsste man sagen,

Jochen

Geht erst ab 3.10 und...

Jochen

Oh, das ist dann halt Pech.

Jochen

Ja gut, aber auch

Jochen

ein Ding, was ich daran so ein bisschen

Jochen

blöd finde, ist,

Jochen

wenn man das momentan irgendwo reinschreibt

Jochen

und lässt

Jochen

dann Black drüber laufen, dann geht das nicht.

Dominik

Black mag das nicht? Nicht bei 3.10

Dominik

Black? Nein.

Dominik

Mit Black geht das noch nicht.

Dominik

Das heißt,

Jochen

Autoformat funktioniert

Jochen

nicht mehr, wenn man...

Jochen

Das kann ja gar nicht sein.

Jochen

Das muss doch schon gefixt sein, da muss doch schon

Jochen

Pull-Requests irgendwo zu geben. Ja, ja, das kommt

Jochen

bestimmt dann irgendwann, aber momentan jetzt halt noch nicht.

Jochen

Okay, muss ich mir mal anschauen.

Jochen

Auch, ah, das habe ich jetzt,

Jochen

was ist Python Bytes Podcast, ich weiß nicht genau,

Jochen

das gehört habe, es gibt einen, fand ich auch schön,

Jochen

man hat ja immer so das Problem, wenn man Sachen

Jochen

Basen umstellt auf

Jochen

Black,

Jochen

dass das dann halt so riesige

Jochen

Diffs erzeugt

Jochen

und das ist halt irgendwie kacke, weil man

Jochen

dann halt nicht mehr sehen kann, wann irgendwas

Jochen

passiert ist, weil man landet immer bei diesem riesen

Jochen

Änderungsding.

Jochen

Da gibt es auch ein Projekt, das

Jochen

nennt sich, glaube ich, Darker.

Jochen

Und das

Jochen

macht quasi Black, aber immer nur für die Änderungen, die man

Jochen

also wenn man einen Code ändert,

Jochen

dann macht es sozusagen das gleiche wie Black,

Jochen

aber nur auf dem Diff.

Jochen

Sodass es halt immer so dunkler wird mit der

Jochen

Zeit, aber nicht

Jochen

das heißt, es ändert nur Sachen, die man

Jochen

angefasst hat und das war nicht auch eine nette Idee, eigentlich eine völlig

Jochen

offensichtliche Idee, aber ja.

Jochen

Ja, okay.

Jochen

Ja, fand ich ganz faszinierend.

Jochen

Genau.

Jochen

Ja, Structural

Jochen

Pattern Matching, was haben wir denn noch?

Dominik

Ja, also die Disutiles sind deprecated.

Jochen

Ja. Oh, das ist mir auch

Jochen

und genau,

Jochen

Disutiles sind deprecated, da ist auch ein Ding drin,

Jochen

das mir auf den Fuß gefallen ist, als ich versucht habe, die Sachen

Jochen

dann, die ich so mache,

Jochen

mal zu gucken,

Jochen

ob das unter 3.10 auch läuft.

Jochen

Und da gibt es eine Abhängigkeit, die hat

Jochen

Wagtail.

Dominik

Ach, das schöne Wagtail, ja.

Dominik

Das liebe ich auch so sehr.

Jochen

Das hängt ab von L18N,

Jochen

da ist das irgendwie, das Paket

Jochen

und es hat irgendwie so ein

Jochen

L, ich dachte immer, es wäre ein I.

Jochen

Ja, nee, das macht so leicht was an. Ich weiß, was es genau macht,

Jochen

weiß ich gar nicht. Aber das ist halt so ein Ding,

Jochen

das ist halt irgendwie

Jochen

so zwei Stars auf GitHub

Jochen

von irgendjemandem

Jochen

und Wagtail hängt davon ab.

Jochen

Und da

Jochen

das Ding verwendet im Setup.py-Skript

Jochen

irgendwo ein

Jochen

bdist-wininst oder so was.

Jochen

Und das ist in Python 3.8 deprecated

Jochen

worden und in 3.10 ist es rausgeflogen.

Jochen

Okay. Und deswegen

Jochen

baut es nicht mehr. Das heißt, man kann

Jochen

unter 3.10, Python 3.10,

Jochen

Wagtail nicht mehr installieren.

Jochen

Was halt so ein bisschen Kacke ist.

Jochen

Und ja, das ist

Jochen

halt, ja,

Jochen

ich habe da mal ein Pull-Request gemacht, mal gucken.

Jochen

Aber das ist halt,

Jochen

ja,

Jochen

schon ein bisschen, vielleicht ist diese Abhängigkeit

Jochen

nicht so toll.

Dominik

da wo wir so blöde Abhängigkeiten sind

Dominik

mit Python 3.10 kaputt gehen, dann müsste ich jetzt nochmal

Dominik

auf das PyWin32-Problem gehen, weil

Dominik

PyWin32 ist unter Windows relativ wichtig,

Dominik

weil das halt relativ oft gebraucht wird

Dominik

für bestimmte Sachen, um die zu laufen zu lassen.

Dominik

Das heißt, ohne PyWin32 geht viel

Dominik

von Python-Wheels-Bauen nicht.

Dominik

Das heißt, du kannst es fast nicht benutzen, was halt sehr blöd ist.

Dominik

Und die Abhängigkeit, die viele Projekte

Dominik

haben, ist sowas wie PyWin32-301.

Dominik

Das gibt es aber jetzt

Dominik

im Moment nicht für 3.10 und auch nicht für 3.8.

Dominik

Keiner weiß, warum. Die Wheels werden

Dominik

irgendwie nicht richtig bei Python ausgeliefert.

Dominik

Ich glaube, der Maintainer ist auch so ein bisschen,

Dominik

ich sage mal vorsichtig sperrig,

Dominik

was das angeht.

Dominik

Ja, und das ist halt blöd, weil du kannst

Dominik

halt, dass dann keine Projekte mehr installieren

Dominik

oder Pultree geht nicht mehr oder so. Und das ist halt

Dominik

extrem ätzend für Leute, die Windows entwickeln.

Dominik

Und

Dominik

Was man aber machen kann, also ich habe einen kleinen Workaround gefunden.

Dominik

Man installiert einfach PyWin32-301.1, also auch irgendwie komische Varianten.

Dominik

Die Versionen gehen von 200 auf 301, dann kommt dann 301.1.

Dominik

Warum? Na gut, vielleicht ist irgendwann so manche Version reingeflogen, ich weiß es nicht.

Dominik

Es ist auf jeden Fall seltsam und naja, man kann es 301 manuell installieren

Dominik

und dann, das ist ein bisschen hacky, einfach in das Side-Packages-Verzeichnis gehen

Dominik

und im Manifest die Version von 301.1 auf 301 ändern.

Dominik

Und dann denkt tatsächlich

Dominik

unter dem Foliennamen umbenennen, auch von 301.1

Dominik

auf 301. Und dann denkt tatsächlich

Dominik

PIP, dass das vernünftig installiert

Dominik

ist und fragt nicht mehr. Und es funktioniert alles.

Dominik

Und so kommt man halt drumherum.

Dominik

Aber das ist halt schon sehr, sehr hässlich.

Dominik

Und es gibt auch da wohl ein paar Pull-Requests,

Dominik

aber anders gehen bestimmte Sachen da

Dominik

leider nicht zu fixen. Das ist ein bisschen blöd.

Dominik

Okay, ja.

Dominik

Ja, ja, also das sind

Dominik

ich meine... Ja, wenn es so ein wichtiges Paket

Dominik

gibt, wo dann so ein Maintaining auf einmal nicht mehr stattfindet

Dominik

und so, das ist schon anstrengend.

Jochen

Ja, das ist, ja, das ist schon, ja, das ist schon fies, also mir ist auch wieder, jetzt bei dem Upgrade, also einmal im Jahr fällt einem das dann auf, mindestens, wenn es halt eine neue Patent-Version gibt, aber bei den Miner-Versions-Updates von Patent fällt es mir auch häufiger auf, dass es halt alles noch echt ziemlich wild ist, weil, also auch Poetry hat da so Schwierigkeiten.

Jochen

Das Lustige ist halt, wenn man Ragtail

Jochen

per PIP installiert, dann funktioniert es nämlich nicht.

Jochen

Mir ist es halt auf die Füße gefallen,

Jochen

weil ich es per Poetry installiert habe und Poetry

Jochen

macht halt was anderes als PIP.

Dominik

Ja, es checkt auch noch die Site Dependencies und so.

Jochen

Und ja, aber und das macht halt

Jochen

und es guckt sich halt dann teilweise die

Jochen

Setup UI an und so. Ja.

Jochen

Und das ist halt nicht so gut unter Umständen.

Jochen

Wenn PIP, wenn da ein Wheel ist, dann installiert

Jochen

es halt stumpf das Wheel, das funktioniert dann.

Jochen

Das ist halt auf Nahe, wenn man halt nicht auf Windows ist.

Jochen

Und ja,

Jochen

Poetry macht das halt nicht und dann geht es halt

Jochen

schief, weil dann irgendein Import nicht mehr funktioniert

Jochen

oder so und Pultree macht sowieso komische Sachen

Jochen

teilweise. Im Moment, ich bin auch so ein bisschen, also

Dominik

die Version 1.2 habe ich gesehen, ist gar nicht so

Dominik

schlecht, die haben aber auch umbestellt das Installation, das heißt

Dominik

ich muss auch in den Docker-Files überall von

Dominik

Get-Pultree auf Inside-Pultree umstellen und so

Dominik

und dann funktioniert es aber auch noch nicht so richtig

Dominik

überall und dann das Update auf

Dominik

1.2, also es gibt ja so ein Safe-Update mit der

Dominik

neuesten Version, da kann man jetzt halt Safe-Update machen, muss

Dominik

nicht mehr irgendwie jedes Mal neu das

Dominik

vom GitHub-Report ziehen. Das ist schon mal ganz gut auch,

Dominik

ja. Ja, aber das funktioniert halt

Dominik

dann noch nicht so richtig und dann, dass die PvP-Version

Dominik

nicht schützen, wir haben die ausprobiert, einfach ab und so.

Dominik

Naja.

Dominik

Ja, also ich muss sagen,

Jochen

Poetry ärgert mich in letzter Zeit auch irgendwie.

Jochen

Ich verstehe gar nicht, warum.

Dominik

Zwischendurch lief es wirklich gut, einwandfrei.

Dominik

Irgendwer hat irgendwas kaputt gekodet.

Jochen

Ja, ich weiß es nicht so genau, aber es ist,

Jochen

also ich meine, ich bin ja bereit

Jochen

anzuerkennen, dass das halt auch nicht so ein ganz einfaches Problem ist.

Jochen

Aber irgendwie läuft es nicht

Jochen

rund und jetzt auch nach dem Update,

Jochen

also natürlich,

Jochen

so die üblichen Kandidaten, das funktioniert alles wieder nicht.

Jochen

ich glaube auch Poetry hatte mit 3.10

Jochen

auch Probleme irgendwie, da ist auch irgendwas, hat

Jochen

dann nicht so richtig funktioniert, aber halt

Jochen

NumPy und so, das funktioniert natürlich auch nicht

Jochen

und ich meine, gut

Jochen

kann man verstehen, es dauert ein bisschen, bis da die

Jochen

Wheels und die Binary Star sind, aber

Jochen

ja,

Jochen

also so richtig rund

Jochen

ist das alles irgendwie nicht, ja.

Dominik

Ich warte ja meistens bei wichtigeren Sachen auf

Dominik

3.1 oder 3.2 oder sowas, also

Jochen

Ja, aber ich meine

Jochen

3 aber 0.

Jochen

Vielleicht sollte man tatsächlich hingehen, das einfach

Jochen

vorher schon mal ausprobieren und dann gucken, wo es

Jochen

kracht und dann da halt versuchen, so ein bisschen zu helfen.

Jochen

Ich meine, das ist wahrscheinlich irgendwie hilfreicher

Jochen

als wenn man nur meckert, aber...

Dominik

Ja, ja, eigentlich schon.

Dominik

Ja, ich habe auch mit dem Pfeifen, ich muss

Dominik

das eigentlich mal irgendwo hinschreiben, aber naja.

Dominik

Ja.

Dominik

Ja, jetzt kommt Werbung.

Jochen

Was haltet ihr eigentlich von Werbung? Hier.

Jochen

Ja.

Dominik

3.11 haben wir noch was zu 3.11,

Dominik

weil das ist ja so, 3.11 kommt jetzt

Jochen

ja auch. Ja, 3.11 ist Main

Jochen

Brand sozusagen bei Python.

Jochen

Ich glaube, was da ganz

Jochen

interessant, ich weiß es gar nicht, also eben da gibt es

Jochen

auch Verbesserungen, wenn man jetzt Fehler

Jochen

hat.

Jochen

Weitere, genau, aber es gibt

Jochen

auch noch, es soll jetzt, also mit 3.11,

Jochen

was da, habe ich jetzt letztens irgendwie,

Jochen

gab es auch ein Podcast-Interview mit

Jochen

Guido, zu

Jochen

was denn jetzt so alles

Jochen

ansteht zu Performance-Optimierung und da werden

Jochen

Oh, da gab es auch noch ein schönes Artikel,

Dominik

ein Blogpost von Mark Shannon zu, ein Interview.

Jochen

Ja, Mark Shannon, genau, der beschäftigt sich mit der jetzt auch schon wahnsinnig lange.

Jochen

Aber den habe ich nicht gesehen, den musste ich mir mal schicken.

Jochen

Ja, den haben die schon genutzt.

Jochen

Jedenfalls, genau, in die Richtung geht das halt.

Jochen

Und da wird jetzt viel daran gearbeitet.

Jochen

Und da gibt es jetzt erstmal so Basisgeschichten für N311.

Jochen

bis das sich wirklich auswirkt, wird das

Jochen

alles noch ein bisschen dauern.

Jochen

Aber was

Jochen

halt dann in 3.11, glaube ich,

Jochen

also wird es auf jeden Fall die Infrastruktur

Jochen

dafür geben, dass halt Funktionen

Jochen

sich zum Beispiel, also eines der Probleme

Jochen

bei Python ist halt, Funktionen langsam

Jochen

aus diversen Gründen,

Jochen

also einer der Gründe ist

Jochen

halt, dass sie halt sehr, dass man

Jochen

ja nicht einfach, wenn man jetzt sagt,

Jochen

eine Funktion, die nur zwei Zahlen addiert oder so,

Jochen

kann man halt nicht sagen,

Jochen

ja, man

Jochen

addiert den Kram und

Jochen

gibt das zurück, sondern

Jochen

da muss halt viel Kram

Jochen

geprüft werden. Das kann alles mögliche

Jochen

sein. Es kann ja halt nicht nur, es kann ja sein, dass

Jochen

das was anderes ist.

Jochen

Es kann sein, dass

Jochen

das überladen

Jochen

wurde und

Jochen

weiß der Teufel und

Jochen

jetzt der Plan sozusagen, wie man

Jochen

das besser hinkriegt, ist zu sagen,

Jochen

man kann das spezialisieren.

Jochen

Also wenn jetzt der Interpreter könnte zum Beispiel

Jochen

bemerken, okay, jetzt diese Funktion ist

Jochen

tausendmal aufgerufen worden und zwar immer nur mit

Jochen

Integern. Jetzt ersetze ich die Funktion,

Jochen

die da aufgerufen wurde, halt durch

Jochen

eine

Jochen

schnellere Funktion,

Jochen

sozusagen, also anderer By-Code,

Jochen

der halt nur Integer

Jochen

macht, ja, sonst nichts.

Jochen

Und das geht dann halt viel schneller.

Jochen

Und

Jochen

das Problem dabei, was das halt schwierig macht,

Jochen

ist, dass, wenn

Jochen

jetzt das schief geht, wenn da jetzt plötzlich doch ein Float

Jochen

reinkommt oder so, dann muss das

Jochen

irgendwie wieder trotzdem

Jochen

muss es trotzdem funktionieren und wenn

Jochen

das häufiger passiert, weil das dann besonders

Jochen

ätzend ist, performance-technisch,

Jochen

muss dann halt auch diese Optimierung wieder rückgängig

Jochen

gemacht werden, wenn halt sozusagen der normale

Jochen

Bytecode besser gewesen wäre.

Jochen

Das macht es alles ziemlich

Jochen

kompliziert und dann eine Geschichte, die mir nicht so

Jochen

klar war, das fand ich auch interessant, ist, dass

Jochen

halt die Frame-Objekte

Jochen

gibt in Python, also wenn man eine Funktion

Jochen

aufruft, dann wird erstmal so ein Frame-Objekt

Jochen

erstellt. Was ist ein Frame?

Jochen

Ja, das muss man auch erklären.

Jochen

Ich würde sagen, ja, letztlich

Jochen

so ein Stack-Frame, das war dann schon

Jochen

sehr maschinennah.

Jochen

Ein Stack-Frame?

Jochen

Ja, also letztlich in

Jochen

Python ist das Frame-Objekt sowas, da steht halt

Jochen

drin, welche Globals es gibt, welche Locals

Jochen

es gibt, was

Jochen

das Code-Objekt ist,

Jochen

so Zeugs. Also quasi der aktuelle

Dominik

Namespace quasi, das dickt in dem quasi drinsteht,

Dominik

was alle gerade aktuell ist?

Jochen

Also sozusagen alles, was man braucht halt, um

Jochen

diese Funktionen auszuführen.

Jochen

Letztlich. Und

Jochen

es ist ja auch gut, das zu haben. Wenn man jetzt zum Beispiel

Jochen

einen Code debugt oder so, dann ist

Jochen

das halt total praktisch, wenn man das halt

Jochen

direkt alles nachgucken kann und wenn man es auch

Jochen

ändern kann und so. Auf der anderen Seite,

Jochen

wenn man jetzt, wenn ein Code wirklich ausgeführt ist, dann

Jochen

braucht man das nicht unbedingt.

Jochen

Und die Dinger werden halt auch dynamisch

Jochen

alloziert, also sowieso alles dynamisch

Jochen

und dann hat man halt den ganzen Heap voll,

Jochen

wenn man jetzt viele unterschiedliche Funktionen aufruft,

Jochen

hat man jetzt den ganzen Heap voll gesprengelt mit diesen Dingern.

Jochen

Und das macht halt alles irgendwie langsam.

Jochen

Und jetzt, also eine Optimierung,

Jochen

ich weiß nicht, ob das, kann auch sein, dass das eine von denen war,

Jochen

die Mark Schneider vorgeschlagen hat,

Jochen

ist halt zu sagen, man alloziert irgendwie

Jochen

erstmal eine ganze Reihe von den Dingern, packt die irgendwo hin

Jochen

und dann nimmt man die halt und nicht nur,

Jochen

nicht so komplette Objekte, sondern

Jochen

für, dass das halt, wenn das ausgeführt werden soll,

Jochen

dann sind das halt einfach nur Structs und die

Jochen

liegen da an einer bestimmten Stelle und die müssen,

Jochen

das wird, und das ist halt

Jochen

im Speicher dann lokal und keine Ahnung.

Jochen

Also seine Performance ist besser und nur wenn man

Jochen

es debugt, verwendet man halt

Jochen

diese vollen

Jochen

Frame-Objekte, die halt man dann sonst normalerweise

Jochen

immer hat. Und was ist ein Struct?

Jochen

Ja, das ist jetzt so eine C-Spezialität.

Jochen

Das ist eine

Jochen

Datenstruktur quasi mit

Jochen

mehreren, die halt

Jochen

aus mehreren Sachen besteht, nicht nur irgendwie

Jochen

also man hat diese grundlegenden

Jochen

Datentypen, sowas wie Integer, Float,

Jochen

ja, so

Jochen

Charakter

Jochen

und ein Struct kann dann zum Beispiel, weiß ich nicht,

Jochen

ein Charakter-Array haben

Jochen

und ein Float und ein Int oder so.

Jochen

Und dann der, genau.

Dominik

Also ein komplexerer Datentyp

Dominik

in C quasi. Sowas wie ein Base Model.

Dominik

Ja.

Dominik

Ist halt kein

Dominik

Objekt, aber

Jochen

auch die Art, wie man dann Objekte in C implementiert.

Jochen

Aber ja.

Jochen

Dann braucht man halt noch Pointer auf die Funktionen, die das Ding

Jochen

hat und so. Aber ja, genau.

Jochen

Aber genau,

Jochen

was ich auch noch

Jochen

interessant fand, so an Meta-Geschichten

Jochen

zu dieser Performance-Optimierungs-Geschichte, ist halt

Jochen

dass

Jochen

Guido da so ein bisschen drüber erzählt hat, was

Jochen

ich muss den, genau, den Link

Jochen

auf die Episode muss ich auch nochmal in die Show-Notes packen,

Jochen

was bisher immer

Jochen

so schiefgelaufen ist. So PiPi hat

Jochen

ja nicht so richtig, muss man leider sagen, wahrscheinlich

Jochen

nicht so richtig funktioniert.

Jochen

Und der Grund

Jochen

ist halt, dass

Jochen

aus seiner Perspektive, dass

Jochen

sie das, sie haben halt ein

Jochen

Problem gelöst,

Jochen

aber das schwierige

Jochen

Problem halt nicht. Und das ist halt

Jochen

wie kriegt man das so hin, dass es

Jochen

schneller wird, plus dass die ganzen

Jochen

C-Extensions halt noch

Jochen

funktionieren. Das ist ja auch immer genau das Problem.

Jochen

Also PyPI, äh, PyPi

Jochen

ist halt natürlich, es macht einen, äh,

Jochen

es ist halt so ein bisschen Just-in-Time, wobei

Jochen

kann man auch nicht so richtig sagen, also Just-in-Time-Compilation

Jochen

ist halt auch so ein schwieriger Begriff.

Jochen

Ähm,

Jochen

aber es macht halt irgendwie

Jochen

dein Python,

Jochen

die Ausführung von deinem Python-Code deutlich, deutlich schneller.

Jochen

Nur das Problem ist halt, die ganzen

Jochen

C-Geschichten funktionieren dann halt

Jochen

nicht mehr. Und das ist natürlich

Jochen

ein großes Problem, weil das ist halt das, wo

Jochen

du normalerweise deine Performance

Jochen

Gewinne herbekommst. Also wenn ich halt Sachen

Jochen

in NumPy mache, dann statt in

Jochen

mit Python-Listen oder so,

Jochen

dann ist das natürlich viel, viel schneller.

Jochen

Und ja,

Jochen

das geht dann halt so nicht mehr,

Jochen

wenn man halt PyPy verwendet.

Jochen

Daher macht das alles keinen

Jochen

großen Sinn. Und

Jochen

diese Geschichten sind halt nie, es ist halt

Jochen

vielleicht auch einfach nicht lösbar und daher ist das

Jochen

einfach nicht funktioniert.

Jochen

Und sie haben halt große Schwierigkeiten

Jochen

irgendwie up-to-date

Jochen

zu bleiben, weil sich natürlich auch immer alles

Jochen

ändert. Irgendwie mit neuen

Jochen

Python-Versionen und dann ändert sich halt auch

Jochen

die DC

Jochen

CAP und so. Es ist alles

Jochen

nicht so einfach. Jedenfalls, dieser Weg

Jochen

hat halt nicht so richtig funktioniert irgendwie.

Jochen

Und dann gab es ja noch ein paar andere Wege.

Jochen

Es gab noch Pisten und

Jochen

es gab noch irgendwie Sachen.

Jochen

Momentan gibt es auch noch, ich glaube,

Jochen

es gab es nicht nur, das gibt es auch wieder.

Jochen

Es gab bei Microsoft noch Leute, die das versucht haben auf der

Jochen

.net Runtime irgendwie laufen zu lassen. Die machen auch

Jochen

irgendwie lustige Sachen.

Jochen

Aber...

Jochen

Was ist denn Pisten?

Jochen

Ja, auch ein Projekt, was halt

Jochen

so eine Art...

Jochen

Lass mich lügen, ich weiß jetzt gar nicht genau,

Jochen

was sie an Optimierung gemacht haben.

Jochen

Es gab auch vorher schon

Jochen

so ein paar Sachen.

Jochen

Wie hießen das noch? Psycho?

Jochen

Das gibt es aber schon ganz lange nicht mehr, glaube ich.

Jochen

Naja, also es gab auf jeden Fall schon so ein paar Versuche,

Jochen

da schneller zu machen, aber das alles

Jochen

wenn das halt darauf hinaus

Jochen

lief, dass es halt irgendwie

Jochen

anders funktioniert als CPython

Jochen

Bytecode, dann ist es halt

Jochen

nicht gut, so richtig, weil

Jochen

ja,

Jochen

das ist halt dann doch, weil

Jochen

das Problem ist, dass viele Sachen, die halt da

Jochen

dranhängen, gehen dann halt nicht mehr.

Jochen

Unter anderem die ganzen

Jochen

C-Extensions.

Dominik

Was mich dazu führt, also es gibt ja

Dominik

noch Alternativen vielleicht dazu. Ich habe jetzt schon

Dominik

ein paar Mal so Rust, Python ist mir irgendwie

Jochen

Ja, Rust, das ist auch interessant, ja, auf jeden Fall.

Jochen

Also das wäre wahrscheinlich auch für die Zukunft halt,

Jochen

ist das eine Geschichte, die,

Jochen

also einmal Extensions in Rust

Jochen

schreiben und nicht in C, das ist eine interessante Geschichte.

Jochen

Und natürlich, was auch

Jochen

unter Umständen interessant wäre, halt vielleicht einen Interpreter

Jochen

zu schreiben, der halt

Jochen

nicht in C ist, sondern in Rust,

Jochen

aber das ist natürlich noch ein weiter Weg.

Jochen

Aber das hätte halt den Riesenvorteil, wenn man das mal

Dominik

irgendwann hinkriegt. Das muss man alles zwar neu schreiben,

Jochen

aber ja. Man muss halt so ziemlich alles neu schreiben,

Jochen

was halt ein bisschen schwierig ist, aber

Jochen

wenn man das dann kriegt, dann könnte man das halt auch

Jochen

da, man Rust halt irgendwie nach

Jochen

WebAssembly irgendwie kompilieren kann,

Jochen

könnte man das halt in den Browser bringen.

Jochen

Das wäre natürlich schon nett.

Jochen

Dann könnte man einfach im Browser dann

Jochen

Python ausführen.

Jochen

Ja, aber das ist

Jochen

alles noch sehr weit weg.

Dominik

Man muss halt einfach nochmal neu schreiben, das war noch ein bisschen

Dominik

die Wegstrecke runter.

Dominik

Leute entwickeln, finden die auch gut Rust können

Dominik

und so, das ist auch nicht so einfach, gibt es ja auch noch nicht so ewig.

Dominik

Und das dann in der Kombination,

Dominik

dann muss das dann in Rust sich dann auch wieder entwickeln

Dominik

und die ganzen Fehlerchen dann wegkommen.

Dominik

Ja, ja.

Dominik

Aber es könnte tatsächlich doch gar nicht so interessant sein, oder?

Dominik

Also es könnte doch deutlich schneller sein als noch

Dominik

in C. Sicherer auch als in C.

Dominik

Und dann... Ja, ja, klar.

Jochen

Also es ist auf jeden Fall

Jochen

sehr interessant. Ich bin gespannt.

Jochen

Aber genau, um mal wieder den Bogen

Jochen

zurückzukriegen.

Jochen

Also Guido hat ja jetzt

Jochen

wieder, der war ja im Ruhestand,

Jochen

ist ja wieder zurückgekommen

Jochen

und hat jetzt da so ein Team bei Microsoft

Jochen

und das ist auch komisch,

Jochen

dass er, wie gedacht, dass er jeweils, also

Jochen

ja, aber so ist es halt.

Jochen

Ja, ja, er frisst ihre Kinder

Jochen

oder so, wie war das? Schon irgendwie, ja,

Jochen

das ist jetzt wieder cool und

Jochen

genau,

Jochen

der widmet sich

Jochen

da jetzt hauptsächlich irgendwie Python Performance

Jochen

und das natürlich auch schon mal, aber es wird halt noch ein bisschen

Jochen

dauern, auch bis sich das dann wirklich auswirkt.

Jochen

Und

Jochen

aber wir können wahrscheinlich damit rechnen, dass halt

Jochen

in den nächsten Jahren Python halt noch ein gutes

Jochen

Stückchen schneller wird und das ist auch schon mal eine schöne Sache.

Jochen

Genau, ich weiß nicht genau, hatten wir sonst noch

Jochen

irgendwas zu Python

Jochen

3.10 oder 3.11 haben wir jetzt gepostet

Dominik

Genau, also 3.11 Better Facepacks

Dominik

haben wir ja auch schon gesagt

Dominik

Das sieht wirklich schick aus, das heißt, man kann sie wirklich mal lesen

Dominik

Das macht Sinn

Dominik

Das ist schon gut, ja

Dominik

Also ja, ich glaube

Dominik

News gibt es halt noch ein bisschen, Django vielleicht

Jochen

Ja, Django, da gibt es jetzt auch eine Alpha-Release

Jochen

von Django 4, das habe ich auch mal ausprobiert

Jochen

guckt, was dann alles so kaputt geht.

Jochen

Und, was geht kaputt?

Jochen

Wagtail zum Beispiel geht kaputt.

Jochen

Ach so, so eine Überraschung.

Jochen

Ja, und noch so ein paar andere Sachen, also

Jochen

ich meine, meine Lieblingskandidaten

Jochen

für irgendwie, was Sachen geht schief,

Jochen

sind ja auch immer so

Jochen

die ganzen Comments-Zeugs,

Jochen

weil das halt auch nur noch so

Jochen

marginal-maintained ist, irgendwie

Jochen

Threaded-Comments, Fluent-Comments,

Jochen

Contrib-Comments, Contrib-Comments ist glaube ich sogar halbwegs gut

Jochen

maintained, da gab es auch Mai oder so

Jochen

wieder eine Version, aber

Jochen

Fluent-Commands und Threaded-Commands vor allen Dingen

Jochen

eher nicht so. Und genau,

Jochen

Threaded-Commands ist halt auch kaputt gegangen und da habe ich

Jochen

dann halt irgendwie auch, glaube ich, einen Pull-Request gemacht.

Jochen

Und dann

Jochen

Wagtail ist auch kaputt gegangen.

Jochen

Da habe ich dann auch einen Pull-Request

Jochen

irgendwie gemacht.

Jochen

Der ist auch, dann

Jochen

habe ich mich nicht mehr drum herum gekümmert, weil ich keine Zeit hatte.

Jochen

Und dann ist er irgendwie so halb durchgegangen.

Jochen

Das ist mir,

Jochen

das ist mir ehrlich gesagt ein bisschen peinlich,

Jochen

weil ich habe da irgendwie nur sowas hingerotzt.

Jochen

Und dann kam dann noch so

Jochen

Anmerkungen und was ich noch tun könnte

Jochen

und so und ich habe einfach nicht mehr reagiert und dann hat

Jochen

irgendjemand dann irgendwie Teile davon einfach so gemerged

Jochen

und waren halt dann drin. Aber

Jochen

es ist irgendwie, ehrlich gesagt, sehr schlampig

Jochen

von meiner Seite aus. Aber ja,

Jochen

also... So, so, so.

Jochen

Ja. Ja. Aber prinzipiell...

Dominik

Ich kriege immer auf die Finger, wenn ich irgendwas nicht ordentlich mache.

Dominik

Ja.

Dominik

Aber prinzipiell

Jochen

geht Wagtail mit Django 4.

Jochen

Also das funktioniert schon. Also man

Jochen

muss da gar nicht so wahnsinnig viel... Prinzipiell

Dominik

schon, wenn man noch ein bisschen... Also es

Dominik

gibt zwei Dinge, die

Jochen

nicht funktionieren. Das eine ist

Jochen

wenn man

Jochen

ein All-Pass-Quote verwendet, das hat sich

Jochen

irgendwie geändert. Das

Jochen

war früher in Django selber drin.

Jochen

In Django 4 fliegt das raus. Das ist

Jochen

sowieso schon deprecated. Und das bedeutet,

Jochen

man muss jetzt aus

Jochen

From-All-Pass-Import-Quote sagen, statt

Jochen

das aus Django zu importieren.

Jochen

Weil das jetzt in der Python-Standard-Bibliothek

Jochen

genau das gleiche macht wie vorher in Django.

Jochen

Und das muss man ändern.

Dominik

Also bei URLs-Quoten, meinst du,

Dominik

um irgendwie so Sachen rauszubekommen, oder?

Dominik

Ja, genau, um zum Beispiel

Jochen

irgendwie, das ist halt ein Dikt oder so,

Jochen

dann willst du das halt

Jochen

in URL-Parameter

Jochen

verwandeln, ich weiß gar nicht jetzt genau,

Jochen

unter welchen Bedingungen man das jetzt wie verwendet,

Jochen

aber ja, genau, also es ist halt so, dass

Jochen

irgendwas, was nicht halt

Jochen

in der URL stehen kann, was machen, was halt

Jochen

da drin stehen kann,

Jochen

ja, und

Jochen

dann

Jochen

eine andere Geschichte ist,

Jochen

genau, da ist so ein

Jochen

Request.isAjax

Jochen

ist rausgeflogen

Jochen

und das wurde in Racktail halt auch verwendet.

Dominik

Das wird relativ viel verwendet auch irgendwie,

Dominik

von IsAjax, ja.

Dominik

Warum ist das nochmal rausgeflogen?

Dominik

Da gab es irgendeinen Grund.

Dominik

Der Grund ist, dass

Jochen

die Überprüfung,

Jochen

ob das jetzt Ajax ist oder nicht,

Jochen

so ein bisschen darauf basiert, dass

Jochen

das von jQuery aus

Jochen

aufgerufen wird. Also weil jQuery

Jochen

macht da irgendwelche, also es setzt halt

Jochen

irgendeinen Header, also es ist sowieso

Jochen

es macht, glaube ich, nicht mehr, als irgendeinen Header zu überprüfen,

Jochen

ob der gesetzt ist.

Jochen

Das ist nicht die richtige Methode, man soll direkt

Dominik

gucken, ob der Header drin ist, einfach. Genau,

Jochen

das ist halt der empfohlene Workaround, das einfach

Jochen

ersetzen durch, ist der Header da drin

Jochen

oder nicht. Genau, das habe ich dann direkt halt auch gemacht.

Jochen

Aber

Jochen

insgesamt hieß es halt so

Jochen

in den

Jochen

Django-Dokumentationen dazu, ja,

Jochen

also das ist sowieso nicht so toll, das darüber

Jochen

zu machen, weil das ist halt jQuery-spezifisch

Jochen

und jQuery ist auch so auf dem Weg

Jochen

nach draußen und

Jochen

die meisten verwenden halt inzwischen Fetch

Jochen

in JavaScript, Fetch API

Jochen

und die macht das sowieso irgendwie anders

Jochen

und das heißt,

Jochen

das ist ein bisschen nutzlos,

Jochen

das ist Ajax, das liefert halt einfach nicht mehr

Jochen

die richtige, es ist ein

Jochen

Ajax-Call, aber

Jochen

das kommt halt am Server so nicht an

Jochen

beziehungsweise den

Jochen

Header zu überprüfen ist so ein bisschen sinnlos und

Jochen

weil das halt irgendwie nur von jQuery

Jochen

gesetzt wird, das heißt

Jochen

im Grunde muss man das streichen, weil das funktioniert so nicht mehr.

Jochen

Und dann die andere Geschichte ist halt

Jochen

auch so, ja, wozu das überhaupt

Jochen

überprüfen? Das ist auch irgendwie Quatsch, weil

Jochen

naja,

Jochen

oder genau, das ist halt

Jochen

empfohlen, was man dann überprüfen soll,

Jochen

weil was möchte man eigentlich machen oft?

Jochen

Man möchte halt so etwas machen wie,

Jochen

ja, wenn da jetzt ein Browser

Jochen

auf die URL geht zum Beispiel

Jochen

und dann halt sonst JSON kriegen würde,

Jochen

dann will man dem nicht einfach

Jochen

JSON schicken, sondern vielleicht eine HTML

Jochen

Fehlermeldungen

Jochen

so, ey, hallo, bitte nicht mit dem Browser

Jochen

hier hin, sondern geh lieber da hin, weil

Jochen

hier gibt's nur JSON, sowas.

Jochen

Und dafür muss man halt eine Fallunterscheidung machen.

Jochen

Und da sollte man doch lieber

Jochen

auf request.accept

Jochen

gucken, ob das Ding jetzt

Jochen

zum Beispiel HTML,

Jochen

Text-HTML haben will oder so.

Jochen

Und wenn es Text-HTML haben will,

Jochen

dann sagt man halt hier so, hier Fehlermeldung, ich gebe

Jochen

eigentlich nur JSON zurück, ich kann gar nichts anderes als JSON.

Jochen

Und das ist halt dann

Jochen

besser, das funktioniert dann in jedem

Jochen

Fall eigentlich sozusagen. Egal welche,

Jochen

wie der Request gemacht wird von der kleinen Seite aus,

Jochen

ob über Fetch oder jQuery.

Jochen

Genau, das ist halt das, worauf man dann

Jochen

langfristig migrieren sollte, oder kurzfristig,

Jochen

wenn man es, ja.

Jochen

Weil

Jochen

AJAX ist halt weg.

Jochen

Mit Django 4, ja.

Jochen

Aber ansonsten,

Jochen

das hat relativ reibungslos funktioniert.

Jochen

Also Django 4 funktioniert bei mir schon

Jochen

relativ problemlos.

Jochen

Und, ja.

Dominik

Also Time-Zone-Info

Dominik

haben sich so ein paar Sachen, glaube ich, geändert, wenn man die

Dominik

verbaut. Also die hat ja, weiß ich nicht,

Dominik

Python, wann hat das noch umgestellt? 3 irgendwas?

Dominik

Das ist irgendwie

Dominik

Zone-Info jetzt neu.

Jochen

Ich weiß nicht, ob das bei Python-Renewal drin war,

Jochen

dass das jetzt in die Standard-Gewöhnung gewandert ist, ja.

Jochen

Genau.

Dominik

Und da kann man ja wahrscheinlich mehr machen

Dominik

als PyTZ, das irgendwie rauszuholen irgendwann.

Dominik

Und das, ja,

Dominik

ist ja vielleicht ganz interessant noch.

Dominik

Auch ein schönes neues Feature. Ja, und ansonsten

Dominik

die anderen Sachen, ehrlich gesagt,

Dominik

es gibt ein Standard-Redis-Cache-Weckend jetzt,

Dominik

das muss man nicht mehr extra dazu packen.

Dominik

Aber gut, keine Third-Party-Library.

Dominik

Ja, also ich meine,

Jochen

ändert sich da nicht so viel dran,

Jochen

weil, ja,

Jochen

ich meine, man konnte es ja auch bisher schon alles verwenden.

Jochen

Also das war, gibt es eine Umfrage,

Jochen

die sie irgendwie gemacht haben, wer verwendet denn,

Jochen

was verwendet denn die User denn so

Jochen

für

Jochen

Caching-Backends und

Jochen

Memcache, die

Jochen

ist halt drin als in Django,

Jochen

da muss man nichts zusätzlich installieren.

Jochen

Und dann kam in der Umfrage raus so, oh, die Leute

Jochen

verwenden, aber alle Redis und nicht beim CacheD.

Jochen

Und ja, das ist halt nicht drin.

Jochen

Das heißt, alle müssen nochmal irgendwie Zusatzkram

Jochen

installieren. Oh, das bringt mich fast schon zu meiner

Dominik

nächsten Frage, weil das da so ein bisschen daran

Dominik

anschließt. Aber das, ja, vielleicht

Dominik

stellen wir das noch kurz zurück. Wir machen Werbung.

Dominik

Wieder ein Wissen.

Dominik

Ja,

Dominik

dann sind wir fertig denn tatsächlich mit

Dominik

Python Dango News. Hast du noch was?

Dominik

Lass mal überlegen.

Jochen

Nee, doch, also mit den News

Jochen

auf jeden Fall, aber

Jochen

genau, ich habe noch so ein paar, ach,

Jochen

weiß nicht, ob ich das...

Jochen

Genau, auch eine News, Psychic Learn

Jochen

hat eine Version 1.0.

Jochen

Ah, mhm.

Jochen

Das war ehrlich gesagt schon relativ lange stabil, aber

Jochen

jetzt hat es auch tatsächlich irgendwie eine

Jochen

offizielle 1.0-Version, ja, okay.

Jochen

Major-Versionsnummer,

Jochen

was eine tolle, tolle Geschichte ist,

Jochen

ja, super Projekt.

Jochen

Genau.

Jochen

Ja, das ist auch

Jochen

so das Beispiel, ich habe letztens, genau,

Jochen

gab es bei Lex Friedman,

Jochen

Gründer von Anaconda

Jochen

da und von, also der

Jochen

Travis Olyphant, der hat auch NumPy,

Jochen

SciPy, SciPy hat er zuerst, wusste ich auch nicht,

Jochen

fand ich auch interessant, SciPy zuerst

Jochen

entwickelt und dann NumPy kam später

Jochen

dazu, weil man Numeric und

Jochen

das andere Ding, NumArray

Jochen

irgendwie zusammenfassen musste,

Jochen

weil es gab zwar eben diese beiden unterschiedlichen

Jochen

Implementationen, dann ist es halt NumPy geworden.

Jochen

Der erzählt halt da auch so ein bisschen

Jochen

und da, der hat dann

Jochen

Cyclet Learn als so

Jochen

beispielhaftes

Jochen

Projekt, wie das hätte laufen

Jochen

sollen, eigentlich dann erwähnt und

Jochen

ein ganz tolles Projekt, ja, also Cyclet Learn

Jochen

wirklich voll gut, es gibt auch noch Cyclet Image und noch ein paar

Jochen

andere, aber Cyclet Learn ist eigentlich so

Jochen

das große

Jochen

Ding, was dabei rausgefallen ist, ja,

Jochen

voll gut.

Jochen

Was haben wir noch?

Jochen

Tja,

Jochen

Oh, es gab

Jochen

eine Sicherheitslücke. Das ist jetzt

Jochen

gar nichts mit Python zu tun. Ich fand das nur

Jochen

deswegen interessant, weil es halt so eine

Jochen

Geschichte ist, die etwas illustriert,

Jochen

wenn man das einfach so erzählt, oft

Jochen

ist das nicht so ein bisschen intuitiv,

Jochen

aber das ist ein sehr schönes

Jochen

Beispiel dafür, weil

Jochen

oder ich habe halt oft das Gefühl, dass

Jochen

ja, es sozusagen

Jochen

die Ansicht gibt, dass man Sicherheit

Jochen

irgendwie dadurch herstellen kann, dass man

Jochen

zusätzlich Dinge tut.

Jochen

... oder Dinge erweitert oder so.

Jochen

man, weiß ich nicht,

Jochen

kauft irgendetwas, was dann halt Sicherheit

Jochen

macht oder

Jochen

man installiert zusätzliches Zeug,

Jochen

das dann Sachen sicherer machen soll oder so und

Jochen

ich habe da immer so ein bisschen Bedenken und ich habe das

Jochen

Gefühl, dass das geht eigentlich gar nicht, sondern eigentlich

Jochen

kriegt man also wirklich Sicherheit nur dadurch, dass man Sachen

Jochen

weglässt, weil alles, was halt irgendwas tut,

Jochen

hat halt irgendwie,

Jochen

macht halt die Angriffsoberfläche

Jochen

größer und das ist halt ein Problem

Jochen

und jetzt hat es halt so ein Ding erwischt und

Jochen

das fand ich...

Jochen

Was für ein Ding hast du denn überhaupt?

Jochen

Fail to ban.

Jochen

Das ist halt irgendwie so ein Ding, dass man sich zusätzlich

Jochen

zu SSI installiert und das dann halt

Jochen

irgendwie sich anguckt, was da passiert

Jochen

und dann halt zum Beispiel den Port zumacht.

Jochen

Oder sonst irgendwie was.

Jochen

Und das hat ja jetzt,

Jochen

ich meine, die Auswirkungen davon sind nicht ganz so schlimm,

Jochen

weil, aber was das Ding

Jochen

gemacht hat, ist halt

Jochen

wenn da irgendwas,

Jochen

wenn da jemand

Jochen

irgendwie an diesem SH-Port rumgespielt hat,

Jochen

hat es halt dann irgendwann ein Whois

Jochen

auf

Jochen

die IP, von der

Jochen

diese Login-Vorsuche kommen,

Jochen

gemacht, sich da die

Jochen

Informationen rausgeholt und das dann per Mail

Jochen

irgendwie an den Admin geschickt.

Jochen

Okay. Klingt jetzt erstmal noch nicht

Jochen

so schlimm. Das Problem ist, da war

Jochen

so eine Shell-Escape-Lücke

Jochen

im Mail

Jochen

erzeugen.

Jochen

Das heißt, das hat irgendwie den Text aus dem Whois

Jochen

genommen, dann irgendwie in die Mail und das dann per

Jochen

Kommandozeile übergeben.

Dominik

Also kannst du modifizieren.

Jochen

Wenn du das Suez kontrollieren konntest,

Jochen

konntest du da halt dann irgendwie durch

Jochen

so Backtick irgendwie, weiß der Teufel,

Jochen

irgendwie

Jochen

Spielereien, das Ding da zu bringen,

Jochen

einen beliebigen Code auszuführen, ja, und dann

Jochen

konntest du halt einfach eine

Jochen

Rutschschale aufmachen.

Jochen

Und, äh, gut.

Jochen

Also einige Leute, passiert sowas

Dominik

ausnahmsweise, aber ich hab, da muss ich jetzt auch noch

Dominik

eine kurze andere Security-relevante

Dominik

Geschichte erzählen, und zwar, ihr wisst ja, manchmal

Dominik

mach ich auch ein bisschen Asia, und da war was ganz

Dominik

Tolles dabei, und zwar

Dominik

hat das glaube ich, weiß nicht, so was wie 2,5

Dominik

Millionen Kunden betroffen oder so, war auch gar nicht

Dominik

so relevant. Jedenfalls alle Leute, die halt

Dominik

Linux-VMs bei Azure hosten, was ja man ja macht,

Dominik

ich hab nämlich schon ein paar Mal gewundert, warum die irgendwie

Dominik

komischen Windows-Fehlermeldungen abstürzen. Ich dachte so, hä?

Dominik

Das ist gar nichts. Die laufen halt tatsächlich auf irgendeinem

Dominik

Windows drauf. Und was halt da irgendwie

Dominik

drumrum ist, ist halt irgendwie so ein Wrapper.

Dominik

Und Microsoft macht da irgendwelche Service-Prozesse

Dominik

irgendwie auf. Und man kann

Dominik

irgendwie auf einen Endpunkt einfach diesen Microsoft-Service-

Dominik

Endpunkt ansprechen. Und

Dominik

dann muss man halt dann sich authentifizieren,

Dominik

damit man da irgendwie Service-Krams

Dominik

machen darf. Und ganz besonders

Dominik

cool, weil es 2021 wird, dass sowas

Dominik

irgendwie möglich ist, weiß man nicht genau. Aber wenn man

Dominik

jetzt die Credentials halt falsch eingegeben hat, gibt es halt ein Denied.

Dominik

Und was passiert, wenn man gar keine Credentials

Dominik

angegeben hat?

Dominik

Ja, dann war alles gut.

Dominik

Dann war Ruth einfach so.

Dominik

Die hat gesagt, okay, eine Credentials, okay, muss wohl Ruth sein,

Dominik

ist wohl ein Admin. Dankeschön. Und ja,

Dominik

tatsächlich, diese Lücke war tatsächlich einfach da

Dominik

und einfach offen. Das heißt, wenn du diesen Endpunkt kennst

Dominik

von der Applikation, kannst du dich einfach ohne Credentials

Dominik

anmelden und hast ein Root-Jay auf diese ganze

Dominik

Applikation bekommen und es war völlig egal, was du gemacht hast,

Dominik

weil halt deine ganze Anwendung in deinem

Dominik

Linux-VM-Container einfach

Dominik

dann schreibbar war. Da war es so ein bisschen

Dominik

mittelgut. Und was auch sehr super daran ist,

Dominik

das geht nicht

Dominik

automatisch zu patchen. Das heißt,

Dominik

du musst hier dahin gehen und musst das manuell ausbauen, falls

Dominik

er das irgendwie bei sich aktiviert hat.

Dominik

Tja, und die sind irgendwie default aktiviert.

Dominik

Naja.

Dominik

Ja.

Dominik

Aber okay. Passiert halt

Dominik

wohl. Also wenn ihr

Dominik

irgendwelche Dinos bei Ames of Azure habt, guckt da mal

Dominik

vielleicht nochmal nach diesem Buckner.

Dominik

Klingt auch nur so,

Jochen

nicht so, klingt eher so mittel.

Jochen

Das war auf jeden Fall so eine Sache,

Jochen

wo ich dachte, oh mein Gott.

Jochen

Ja, na gut.

Jochen

Oh, Sicherheitslücken, wo wir gerade schon bei sind.

Jochen

Das war vor ein paar Tagen auf Twitch.

Jochen

Oh ja, Twitch wurde was geleakt.

Jochen

Komplett wohl, einfach mal komplett geleakt.

Jochen

Tja, kann halt mal passieren.

Jochen

Aber immerhin nur Passwort-Hashes.

Jochen

Ja, aber auch

Jochen

was dann auch interessant ist,

Jochen

halt auch die Bezahlinformationen.

Jochen

Ja, es wäre viel, viel, auch viel.

Jochen

Gucken, wie viel das wert ist.

Jochen

Da haben wir irgendwie ganz interessante

Jochen

Geschichten dabei.

Jochen

Also wenn ihr jetzt mal wissen wollt, wie viel euer

Dominik

Twitch-Favorite-Streams-Podcast verdient,

Dominik

oder wie viel Jochen mit seinen Streams verdient

Dominik

vom Python-Podcast.

Jochen

Das ist leider relativ traurig,

Jochen

da ist nichts.

Dominik

Bist du eingetragen? Das kann man da auch

Dominik

deine Informationen jetzt abrufen.

Jochen

Ich nehme mal an, dass das rausliegt. Es ist halt an der Stelle

Jochen

ein bisschen sinnlos, weil es ist eh öffentlich. Ich habe da nichts,

Jochen

was irgendwie nicht öffentlich ist, aber

Jochen

ja.

Jochen

Also da verraten

Dominik

die Return Investment bei Twitch

Dominik

bei dir im Moment null.

Jochen

Ich schaffe es auch nicht, in das

Jochen

Affiliate-Programm reinzukommen, weil ich habe noch nicht

Jochen

genug. Und jetzt kommt die Advertisement-Werbung.

Jochen

Genau.

Jochen

Ja.

Jochen

Ja, ja.

Jochen

Ja, aber ansonsten, ich finde das eigentlich ganz,

Jochen

das mache ich jetzt halt schon eine Zeit lang,

Jochen

dieses Streamen, das ist eigentlich schon ganz witzig.

Jochen

Also das sind teilweise schon,

Jochen

also damit hätte ich nicht gerechnet,

Jochen

dass da Leute live im Stream mir sagen,

Jochen

dass das, was ich da mache, ist halt falsch

Jochen

und wie ich es besser machen soll.

Jochen

Und das stimmt.

Jochen

Das finde ich echt wachsend.

Jochen

Das ist wirklich hilfreich.

Jochen

Das fand ich schon mal,

Jochen

hätte ich ehrlich gesagt nicht mit gerechnet.

Jochen

Also einmal hätte ich nicht damit gerechnet,

Jochen

dass sich irgendjemand dafür interessiert,

Jochen

was ich da tue.

Jochen

Womit ich auch nicht gerechnet hätte, ist, dass

Jochen

wenn sich jemand dafür interessiert, dass er dann auch besser

Jochen

weiß als ich. Aber, ja, gut.

Jochen

Wahrscheinlich, wenn sich jemand darauf interessiert,

Jochen

dann weiß er es tatsächlich wahrscheinlich sogar besser.

Jochen

Ja, offenbar. Und das finde ich faszinierend.

Jochen

Was ist dir denn da aufgefallen? Was war denn?

Jochen

Zum Beispiel, also gut,

Jochen

also bei PyTest waren so ein paar Sachen dabei,

Jochen

wie man das richtig macht und

Jochen

das wusste ich halt nicht. Oder PyCharm,

Jochen

auch einige Sachen, wie man da Dinge einstellt und so.

Jochen

Oh ja, aber, äh. Gut, da kenne ich mich jetzt auch

Jochen

nicht so aus, das stimmt schon.

Jochen

Habe ich gerade B gesagt, Entschuldigung.

Jochen

Ich finde Peitscham gar nicht so schlecht.

Jochen

Also inzwischen bin ich sogar ein bisschen, also man, ja.

Jochen

Bist du ein Fan geworden?

Jochen

Nee, das kann man nicht.

Jochen

Aber, also ich würde sagen, doch, die kann,

Jochen

wahrscheinlich kann die tatsächlich alles, was man so haben will.

Dominik

Ja, also ich, also VS Code kann ja noch nicht alles,

Dominik

was man so haben will.

Dominik

Aber ich schreibe fleißig Tickets herum und gucke,

Dominik

vielleicht kann das ja in einem Jahr das alles, was ich haben will.

Dominik

Also das Einzige, was mir bei VS Code tatsächlich noch nicht gefällt,

Dominik

ist tatsächlich Datenbank-Zugriff.

Dominik

Da muss man halt Extensions nehmen, die alle so mittelgut funktionieren.

Dominik

Das heißt, direkt die Datenbank einbinden ist so ein bisschen nervig.

Dominik

und ja, Tests

Dominik

nerven mich immer ein bisschen

Dominik

weil die nicht so

Dominik

integriert sind, wie ich mir das vorstelle, also es ist immer ein bisschen

Dominik

gehampelt, die so einzubauen

Dominik

das nervt ein bisschen rum

Dominik

vor allem, wenn es dann in Containern läuft auch noch oder so

Dominik

das ist so ein bisschen anstrengend, das dann einzubinden

Jochen

Ja, ich finde das, also bei PyCharm

Jochen

zum Beispiel, die letzte Geschichte, die mich da so, man muss dann halt

Jochen

so Testroot ist halt irgendwie, also der macht dann halt

Jochen

eine Testkonfiguration, wenn man

Jochen

einen einzelnen Test ausführt und dann

Jochen

so ganz habe ich es auch noch nicht hingekriegt, aber

Jochen

dann ist zum Beispiel das

Jochen

Working Directory ist halt dann einfach falsch

Jochen

oder so und das funktioniert ja nicht mehr.

Jochen

Und dann findet er die Datenbank nicht mehr und

Jochen

ich erinnere mich daran, dass ich diese Geschichten bei PyCharm

Jochen

schon häufiger hatte. Und dann

Jochen

war zum Beispiel die Lösung für einen Großteil dieser Probleme

Jochen

irgendwie dann auf das Root-Verzeichnis

Jochen

irgendwie in der Projektübersicht rechtsklick drauf

Jochen

machen und dann sagen, set as test root.

Jochen

Und dann hat es funktioniert.

Jochen

Okay.

Jochen

Naja, also

Jochen

solche Sachen halt. Aber das muss man halt

Jochen

also, und vorher dachte ich so, naja, das mit den

Jochen

Test funktioniert halt einfach nicht richtig. Aber gut,

Jochen

es funktioniert schon, wenn man weiß, wie man es konfigurieren muss, aber das ist halt

Jochen

manchmal schon ein bisschen...

Dominik

Ja, so was ist eigentlich die IDE von selber wissen, dass sie

Dominik

erstmal einen Root ausprobiert oder sowas, wenn es gerade nicht geht.

Dominik

Ja, keine Ahnung.

Jochen

Aber ansonsten

Jochen

Palcharm, genau, eine Sache

Jochen

auch im Stream, da habe ich dann geflucht

Jochen

darüber, dass

Jochen

oder nicht geflucht, ich habe gerade gesagt,

Jochen

hier verwende ich ja Palcharm auf Intel,

Jochen

aber wenn ich jetzt irgendwie auf meinem M1 Mac unterwegs

Jochen

bin, dann nehme ich immer VS Code, weil Palcharm

Jochen

kann ich da gar nicht verwenden. Das ist einfach zu langsam.

Jochen

Ich finde es ja schon auf Intel langsam, aber

Jochen

auf ARM

Jochen

geht es gar nicht.

Jochen

Und es zieht die ganze Zeit Strom wie Hölle.

Jochen

Das heißt, eigentlich hat ja so ein

Jochen

M1-Mac super Akkulaufzeit,

Jochen

aber wenn man Peitschrauben benutzt,

Jochen

so wie ich das getan habe, dann halt nicht.

Jochen

Dann sagt das den Akku sofort leer.

Jochen

Also, nee.

Jochen

Deswegen nehme ich den mal wie das Kot.

Jochen

Dann kam auch so ein Chat und so,

Jochen

bist du ja eigentlich sicher, dass du das

Jochen

irgendwie native, dass du

Jochen

die für

Jochen

ARM-kompilierte Version da nimmst

Jochen

irgendwie und nicht die alte

Jochen

Intel-basierte, die dann emuliert wird, weil die

Jochen

so, oh Mist, ja, ist tatsächlich so

Jochen

und dann ein neues PyCharm

Jochen

genommen und das ist deutlich besser.

Jochen

Also offenbar

Jochen

brauchte man da eine

Jochen

JVM, die halt für

Jochen

ARM-kompiliert ist und nicht die

Jochen

für Intel, weil wenn man die nimmt

Jochen

und die auf dem M1 emuliert wird,

Jochen

dann, also die Emulation funktioniert wohl ganz gut,

Jochen

aber wenn man sowas emuliert, dann ist es halt wohl scheiße.

Jochen

Okay. Und das, ja,

Jochen

War auch so eine Geschichte, die im Stream

Jochen

mir jemand im Chat einfach so gesagt hat.

Jochen

Voll gut.

Jochen

Ja, ähm,

Jochen

tja, ähm,

Jochen

genau, Security, genau,

Jochen

Twitch hatten wir, war sonst noch irgendwas

Jochen

mit News? Ne, mir fällt eigentlich, hätte ich gesagt,

Jochen

nichts an. Meine Güte, vielleicht liegt es auch einfach

Jochen

daran, dass wir so lange nichts mehr gemacht haben.

Jochen

Aber News und wir sind bei einer Stunde,

Jochen

was ist denn da los?

Jochen

Ja, ja, vielleicht, ja.

Jochen

Bisschen gequatscht.

Jochen

Ja, okay, tja.

Dominik

Ja, dann stelle ich jetzt einfach nochmal meine paar doofen Fragen

Dominik

und vielleicht fällt dir jetzt sowas ein zu diesem Thema.

Dominik

Ja. Und zwar

Dominik

ging es halt tatsächlich darum, wenn ich jetzt in Python

Dominik

irgendwie

Dominik

mehrere Prozesse habe oder sowas,

Dominik

oder Threads oder so, ich weiß nicht, ob das einen Unterschied macht.

Dominik

Und zwar

Dominik

die ich nicht herausstarte

Dominik

aus einem Main Thread oder sowas, sondern die

Dominik

beispielsweise wie beim Gunicorn

Dominik

einfach weggeforkt werden, während er es aufmacht.

Dominik

Er macht dann verschiedene Prozesse auf und macht die gleichzeitig

Dominik

auf und so. Ich möchte aber überall

Dominik

diese Prozesse hinweg einen geteilten Speicherbereich

Dominik

haben und da

Dominik

irgendwas, am liebsten Python-Objekte reinschreiben

Dominik

können mit, weiß ich nicht,

Dominik

Funktionen drin oder irgendwas, dass da halt einfach

Dominik

genau gecallt werden kann. Wie mache ich das

Dominik

am besten? Geht nicht.

Dominik

Das würde ich sagen,

Dominik

geht tatsächlich nicht.

Jochen

Also mit Threads geht's, da ist es halt so,

Jochen

die teilen sich halt

Jochen

einen Adressraum und

Jochen

einen Speicher,

Jochen

aber das ist eigentlich der Hauptunterschied zwischen

Jochen

Threads und Prozessen, so was Betriebs

Jochen

auf der Betriebssystem-Ebene.

Jochen

Also Threads

Jochen

laufen halt im gleichen Prozess und haben

Jochen

den gleichen Hauptspeicher.

Jochen

Und Prozesse sind halt komplett voneinander getrennt,

Jochen

können ja gegenseitig nicht

Jochen

auf Sachen zugreifen und auch, also sind komplett,

Jochen

da braucht man dann halt so Interprozess-Kommunikations-

Jochen

Geschichten, um halt zwischen den Prozessen

Dominik

zu kommunizieren. Also das heißt, das geht tatsächlich gar nicht

Dominik

aus Python heraus, das heißt, ich muss irgendwie

Dominik

was Externes nehmen, wie ein Memcached-Diridis

Dominik

oder sonst irgendwas, also eine quasi Art von Datenbank

Dominik

im Speicher, die dann extra läuft

Dominik

und auf die ich dann von allen diesen Prozessen

Dominik

irgendwie einen Zugriff bekomme über

Dominik

URL oder irgendwas.

Jochen

Ja, also, oder was auch immer.

Jochen

Es muss ja nicht irgendwie jetzt ein Redis

Jochen

oder ein Merkle-Studio sein oder es kann auch eine Datenbank

Jochen

sein oder es kann halt ein File sein

Jochen

oder es kann halt eine Pipe sein oder

Dominik

Ja, das habe ich auch überlegt. Also kann man

Dominik

aus weißem Nachweis einfach eine File in Memory aufmachen,

Dominik

auf die dann alle Prozesse zugriff haben? Nein, auch nicht wahrscheinlich.

Jochen

Doch, klar, das kann man schon machen.

Jochen

In Memory? In Memory. Warum

Dominik

in Memory? Ja, weil ich will ja nicht I.O. machen

Dominik

auf der Platte, weil ich will ja genau diesen Speed

Dominik

halt nicht verlieren, denn...

Jochen

Naja, du kannst auch Shared Memory, das geht

Jochen

auch, aber die Frage wäre halt,

Jochen

nein, aber das,

Jochen

du musst ja sowieso, also dein

Jochen

Bottleneck wird dann ja eh die

Jochen

Serialisierung und Deserialisierung sein.

Dominik

Aber das heißt, also okay, das war nämlich genau nochmal die nächste

Dominik

Frage, ich muss quasi meine Objekte immer

Dominik

serialisieren, deserialisieren,

Dominik

weil ich nicht darum rumkomme, weil ich nur als

Dominik

irgendwie in Bytes oder so in den Speicher

Dominik

schreiben kann dann. Genau, du musst halt das irgendwie

Jochen

in eine Form bringen, die man halt irgendwo hinschreiben kann, genau.

Jochen

Ja.

Dominik

Ja, und dann hatte ich die tolle Idee, das dann zu picken.

Dominik

Dann sagte Jochen, oh, oh, oh, oh.

Jochen

Kann man machen, ist aber, ja.

Jochen

Ja.

Jochen

Ja.

Dominik

Ja, also Jochen hat gesagt, das wäre keine gute Idee,

Dominik

weil man könnte ja dann da, wenn man diesen Speicherbereich kontrolliert,

Dominik

da was reinschreiben, dann wird es einfach so realisiert

Dominik

und dann macht es bumm.

Dominik

Ja, genau.

Jochen

Also Sachen ausentpickeln ist halt quasi das Gleiche wie Code ausführen.

Jochen

Also daher muss man da ein bisschen,

Jochen

gibt es auch tatsächlich Sicherheitslücken,

Jochen

die große Seiten, ich weiß nicht, welche das war,

Jochen

Das war auch irgendein Contest.

Jochen

Ich habe es wieder vergessen, welche Seite das war.

Jochen

Das war eine von den ganz großen,

Jochen

die, wo jemand so reingekommen ist.

Jochen

Über Django, auch Django.

Jochen

Und da, die hatten irgendwie auch,

Jochen

ich weiß nicht, Memcached oder Redis benutzt.

Jochen

Und da auch,

Jochen

die hatten gepickelte Sachen in User-Cookings abgelegt.

Jochen

Und

Jochen

das war noch nicht das Problem.

Jochen

Und man konnte durch irgendeinen Trick,

Jochen

konnte man halt den Kram irgendwie

Jochen

in den Memcached bringen und dann da

Jochen

den Applikations-Server dazu bringen,

Jochen

das dann halt zu entpickeln und dann

Jochen

sind da Leute so da

Jochen

reingekommen. Also ja,

Jochen

das ist problematisch.

Jochen

Also wenn die Users

Jochen

es schaffen, irgendwie deiner Applikation

Jochen

was Gepickeltes zu geben, wo sie Kontrolle drüber hatten,

Jochen

dann ja. Oder es war

Jochen

auch irgendwie signiert oder so

Jochen

und an der Signatur war irgendwas kaputt, ich weiß es nicht genau.

Jochen

Aber ja.

Dominik

Also das ist theoretisch, wenn ich das auf meinem eigenen

Dominik

Server laufe, also wenn einer da schon

Dominik

drin ist, dann hat der eh schon Root.

Jochen

Ja, aber das ist ja dann zusätzlich, also das ist ja,

Jochen

aber das ist ja, vielleicht gibt es ja irgendeine,

Jochen

ich meine, wie kommen die Daten da rein, ja, also

Jochen

wenn jemand

Jochen

quasi, vielleicht hat ja jemand

Jochen

dann nur Zugriff auf irgendein, ist irgendwo

Jochen

reingekommen über, weiß nicht, der läuft vielleicht auch

Jochen

irgendwelche anderen Services und kann halt nur

Jochen

eine Netzverbindung aufmachen, ja, und dann

Jochen

lauscht da aber dann ein Memcached

Jochen

und dann kann er da was reinlegen und dann

Jochen

wird das ausgeführt, also

Jochen

es ist halt, ja, die Frage

Jochen

ist, will man Leuten

Jochen

dadurch

Jochen

also ich meine,

Jochen

sowas wird wahrscheinlich nicht ausgenutzt, wenn man da irgendwie

Jochen

eine kleine Geschichte selber hat, aber

Jochen

überhaupt, dass es

Jochen

die Möglichkeit gibt, dass man

Jochen

dadurch, dass man an irgendeinem Port irgendwas hinschreibt,

Jochen

dadurch dein Code in deiner Applikation ausführt, ist halt schon so

Jochen

will man wahrscheinlich nicht.

Dominik

Ja, also ich weiß halt, wie das sonst

Dominik

gehen könnte, da muss man sich halt eine andere Lösung

Dominik

für überlegen.

Dominik

Also mein Anwendungszweck

Dominik

ist eigentlich nur, dass ich tatsächlich über verschiedene

Dominik

Candy-Con-Worker-Prozesse Zugriff auf ein gemeinsames

Dominik

Stickt haben wollen würde, dass ich halt so Dinge

Dominik

abblicken kann. Ja, aber warum nicht, also

Jochen

jetzt meine Standard-File,

Jochen

warum nicht einfach eine Datenbank nehmen? Ich meine, dafür ist Datenbank

Dominik

eigentlich da. Ja, weil es halt zum Beispiel keine gibt oder

Dominik

halt, dass du eine SQLite hast, die halt dann schon weg ist und so. Achso,

Dominik

wenn du keine Datenbank hast, ja.

Dominik

Warum nicht einen File nehmen?

Dominik

Zu langsam?

Jochen

Wieso ist das langsam? Muss ja nicht langsam sein.

Jochen

Also ja, natürlich ist das

Jochen

eventuell langsam, aber

Jochen

kommt jetzt auf deine Daten an. Gut, aber theoretisch

Dominik

könnte, wenn dann jemand durch das File hat, kann er auch

Dominik

alles Mögliche reinschreiben. Ja, gepickelte

Dominik

Sachen darf man da nicht reinschreiben.

Dominik

Ja, aber das ist ja genau dasselbe Problem dann.

Dominik

Also mein Problem, ja.

Jochen

Aber warum möchtest du gepickelte Sachen abspeichern?

Jochen

Um sie später zu verwenden.

Dominik

Also weil ich zum Beispiel, ich habe bestimmte Routinen,

Dominik

die ich ausführen möchte mit Argumenten und so weiter,

Dominik

die quasi schon feststehen,

Dominik

aber die zu einem späteren Zeitpunkt laufen.

Jochen

Ja, aber du kannst ja sozusagen durchaus sagen,

Jochen

ruf die Funktion mit den Parametern auf.

Jochen

Die Parameter kannst du ja schon,

Jochen

vielleicht irgendwie je nachdem, was das ist.

Jochen

Ja, aber du kannst aber auch

Jochen

den Namen von der Funktion einfach speichern.

Jochen

Ja, kann ich das? Das kannst du machen.

Dominik

Ja, okay. Und wie kriege ich die dann rausgepult?

Dominik

Muss ich nochmal kurz überlegen.

Jochen

Ja, ja, das ist dann halt nicht mehr so einfach, dass man einfach sagt

Jochen

JSON dumps und loads.

Jochen

Sondern da muss man das halt selber wieder

Jochen

sich daraus ein Objekt zusammenbauen. Aber das kann man ja auch machen.

Jochen

Das heißt, ich muss, aber wie baue ich dann

Jochen

den Pfad zu dieser Funktion zusammen?

Jochen

Den muss ich dann irgendwie

Dominik

später von spontan ein, wie das geht.

Dominik

Keine Ahnung, ich habe jetzt Pfad zu meiner

Dominik

Setzapplikation.functions.fuba

Jochen

Ja, kannst du einfach

Jochen

den Vater reinschreiben.

Jochen

Den Vater der Funktion, tatsächlich.

Jochen

Dann machst du mit importlib

Jochen

importierst du das Ding dann.

Jochen

Mit importlib.

Jochen

Relativ oder absolut?

Jochen

Ist das egal?

Jochen

Ja, weiß ich nicht.

Jochen

Wahrscheinlich ist absolut so ein bisschen

Jochen

also ja, kommt drauf an,

Jochen

wo das

Jochen

wahrscheinlich wird man es absolut zum Paket halt

Dominik

Ja, das muss ich mal probieren.

Dominik

Weil vielleicht wäre das tatsächlich, also da den Namen

Dominik

anscheinend der Callable zu nehmen, eine Rettung.

Dominik

Dann hätte ich halt nur noch Argumente, aber

Dominik

gut, die dürfen dann halt...

Jochen

Die Frage ist, wie viele unterschiedliche Sachen können das denn sein?

Jochen

Kann man da nicht, das ist sowieso

Jochen

irgendwie eher in so einem Lookup, dann

Jochen

nimmst du halt irgendeinen Namen, völlig egal, den musst du nicht über

Jochen

Import machen, das will ich gerade auch, das ist

Jochen

vielleicht nicht so eine schlaue Idee, sondern

Jochen

du hast halt irgendwo einen Dikt, wo die ganzen

Jochen

Funktionen drin liegen, das halt irgendwie

Jochen

mal initialisierst und dann musst du nur noch deine Funktionen

Jochen

halt, du hast sozusagen

Jochen

eine Registry für diese Funktion.

Dominik

Okay, ja, das Problem ist halt, dass wenn

Dominik

jemand halt jetzt, also es geht halt

Dominik

um so eine Event-Queue, ja, wenn jemand halt

Dominik

jetzt neue Events anlegen möchte, die er halt quasi

Dominik

dann einfach über so einen Dekorator subscriben

Dominik

kann auf irgendeinen

Dominik

Typ, den er sich da selber quasi aussuchen kann,

Dominik

indem er das da subscribt, weil halt

Dominik

der Typ nicht so nicht gibt, wird einfach erstellt,

Dominik

dann müsste man ja quasi diese

Dominik

Funktion, die ja dann,

Dominik

also ein Event ist,

Dominik

dann auch registrieren. Und wenn derjenige

Dominik

das vergisst, dann funktioniert es halt nicht. Und das ist halt so ein bisschen nervig,

Dominik

weil es halt an zwei Stellen

Dominik

das dann halt überprüft werden muss.

Dominik

Da kann er halt nicht irgendein Event erstellen und das dann einfach

Dominik

registrieren und dann einen Händler für nehmen, sondern

Dominik

er muss sich halt an der Stelle an die Registrierung wenden und das

Dominik

muss er halt händisch machen.

Dominik

Das hätte ich mir halt gerne gespart, weil es halt bestimmte

Dominik

Entwickler gibt, die das verstehen oder nicht verstehen,

Dominik

aber denen vielleicht einfach eine Methode

Dominik

schreiben können, die dann irgendwas macht.

Dominik

Naja gut, aber du kannst ja auch

Dominik

irgendwie

Jochen

überlegen, wie man die Funktion

Jochen

adressiert sozusagen und dann

Jochen

das kannst du ja dann selber machen.

Jochen

Naja gut, ich

Dominik

überlege halt was, also ich glaube

Dominik

dieses Pickeln ist halt an der Stelle quasi die

Dominik

einfachere Lösung. Ja, aber

Jochen

das weiß ich nicht, also Pickel

Dominik

Aber die Frage ist halt, wo es halt geht,

Dominik

ob es halt nur über so ein Main-Cache-Dee geht oder so ein

Dominik

Redis geht oder halt noch eine andere

Dominik

Variante geht, die irgendwie

Dominik

einfacher ist. Kann man

Dominik

aus Python raus einfach so ein Chat-Memory außerhalb

Dominik

aufmachen oder geht das nur mit sowas wie

Dominik

Main-Cache-Dee und Redis? Gibt es im Python-Modul

Jochen

man kann das schon machen, aber ich weiß

Jochen

nicht, ob das empfehlenswert wäre, weil

Jochen

du musst ja irgendwie auch darauf zugreifen

Jochen

und

Jochen

das dafür bietet

Jochen

ja sowohl mit dem KGD, auch

Jochen

redest du Dinge an und wenn du das selber machst,

Jochen

schwierig, weil was ist, wenn dann

Jochen

der Applikationsserver jetzt

Jochen

einen Prozess läuft, jetzt auf dem anderen Rechner, dann ist das

Jochen

auch wieder ein Problem.

Jochen

Also ich, also gut,

Jochen

ich meine, klar, natürlich die Abhängigkeiten

Jochen

sind halt blöd,

Jochen

jetzt dann deswegen noch ein zusätzliches

Jochen

Redis braucht oder so.

Jochen

Das ist halt die Frage, ob es nicht schon irgendwas gibt, was man schon hat.

Jochen

Eine Datenbank oder ein Redis

Jochen

oder ein Bank-Hashtag.

Dominik

Ja, das ist auch die Frage, ob man halt, wenn man Projekte voneinander

Dominik

isoliert aufbaut, ob man dann

Dominik

ja, eigentlich

Dominik

müsste man die Sachen dezentral voneinander betreiben.

Dominik

Aber das ist halt dann wieder so ein Problem, dann

Dominik

ganze, mit Deployment,

Dominik

ganze Deployments zu machen, die vollständig sind und so.

Dominik

Die dann jeweils unanhängig voneinander sind

Dominik

und dann nicht erwarten, dass schon irgendwo anders so ein Redis rumliegt

Dominik

oder so, und dann neue Verbindungen aufmachen,

Dominik

neuen Redis-Nutzer mit neuem Ausländer-WC

Dominik

und bla bla bla. Das ist halt alles relativ

Dominik

aufwendig für so kleine Sachen, dass man irgendwo mal kurz

Dominik

so zwei Kies im Dikt ablegen will.

Dominik

Dafür halt so ein Rattenschwanz.

Jochen

Dann wäre halt die Frage, wozu brauchst du denn dann mehrere Prozesse?

Jochen

Ja, gut, aber das

Dominik

liegt halt nur daran, dass der Ganykorn da so ein bisschen

Dominik

mehr Power kriegen soll. Wenn man jetzt dem Ganykorn

Dominik

sagt, du brauchst noch einen Worker, dann reicht's ja halt.

Dominik

Ich hatte irgendwo bei StackOverflow mal

Dominik

so eine Antwort gesehen, da hat der Preload gemacht, dann hat der

Dominik

erst die Applikation geladen und dann die Worker.

Dominik

Wozu brauchst du denn da mehrere Prozesse?

Jochen

Das ist nochmal die Frage, warum mehrere Prozesse

Jochen

an der Stelle?

Jochen

Kennecon macht Worker-Prozesse auf.

Jochen

Ja, aber das heißt, das müsste man halt dann

Dominik

als harte Restriktion haben, das geht halt nur mit einem Worker-Prozess.

Dominik

Und man hat da dann unerwartete

Jochen

Seiten-Effekte, wenn das jemand macht.

Dominik

Ja, genau, dann stehst du halt danach

Dominik

und dann funktioniert das halt nicht mehr so richtig.

Dominik

Ja.

Dominik

Ja, das stimmt.

Dominik

Nun, die Frage ist, ob man halt so ein Workaround hat für solche Fälle.

Dominik

Aber es geht ja eigentlich für alle Dinge, die halt irgendwie

Dominik

einzelne Instanzen haben. Also du hast irgendwie von irgendwas

Dominik

so ein Singleton-Pattern oder sowas

Dominik

auf irgendeiner Klasse oder so und das ist ja immer das Problem,

Dominik

dass es halt bei so einem Forken in so einem

Dominik

Web-Applikations-Server-Prozess

Dominik

nicht mehr so wirklich

Dominik

identitär ist.

Jochen

Okay, aber ich würde sagen, das braucht man ja ganz

Jochen

ganz selten oder sowas.

Jochen

Ich bin ja in der letzten

Jochen

Heimat schon zweimal drüber gestolpert.

Jochen

Meine Vermutung wäre

Jochen

oft, dann ist irgendwas an dem Problem nicht richtig

Jochen

oder an der Lösung.

Jochen

Weil wenn das

Jochen

die Lösung für das Problem ist, dann ist wahrscheinlich

Jochen

hat man das Problem nicht richtig verstanden

Jochen

oder vielleicht ist, ich weiß es nicht genau,

Jochen

aber das gibt es echt fast nie.

Jochen

Ja, also als Beispiel

Dominik

darf es nur eine offene

Dominik

Verbindung zu irgendeinem anderen

Dominik

Rechner geben, weil er nicht mehr als eine gleichzeitig

Dominik

offene Verbindung akzeptiert.

Dominik

So, und dann könnte man jetzt irgendwie Verbindungen

Dominik

durchreichen

Dominik

und die halt von mehreren Prozessen

Dominik

trotzdem nutzen,

Dominik

wenn man die nicht gleichzeitig nutzt. Zum Beispiel, wenn er halt dann irgendwie

Dominik

einen Lock drauf hat und an der anderen Stelle dann vom anderen Prozess

Dominik

halt wartet, bis dieses Log wieder freigegeben ist.

Dominik

Ja, aber das passiert doch automatisch.

Dominik

Mit dem Log, ja. Nein, nein, ich meine, wenn du

Jochen

ja, wenn du von der Meldung zu irgendwas ausbaust,

Jochen

was nur eine zulässt, dann musst du halt warten.

Dominik

Genau, aber das geht halt von den Prozessen

Dominik

her nicht. Also wenn du da verschiedene

Dominik

Prozesse gleichzeitig das machen,

Dominik

zum Beispiel, dann gibt es halt einen Exception, bumm,

Dominik

geht nicht. Das heißt, du musst das

Dominik

halt irgendwie managen. Das heißt, du musst halt diesen,

Dominik

also nicht nur diesen State irgendwie dann abwarten und dann

Dominik

wieder versuchen, sondern eigentlich willst du

Dominik

ja quasi dieses Objekt dann

Dominik

durchreichen. Ich habe das Problem

Dominik

glaube ich noch nicht so wirklich verstanden,

Jochen

weil ich meine, ja, also ich meine,

Jochen

das ist ja, wie willst du

Jochen

das denn lösen? Das kannst du ja gar nicht lösen.

Dominik

Ja, warum? Also so ein Zugangstoken zum Beispiel,

Dominik

den ich ja dafür brauche, den will ich ja nicht unbedingt

Dominik

jedes Mal irgendwo reinschreiben.

Dominik

Außer vielleicht in so eine Platte.

Dominik

Und dann die Frage ist, schreibe ich die halt in Redis rein,

Dominik

hole mir den immer wieder ab, gucke halt, ob der da ist. Wenn es nicht da ist,

Dominik

dann hole ich mir einen neuen oder so.

Dominik

Benutze ich den halt immer wieder.

Dominik

Weiß nicht.

Dominik

Das ist halt so ein Prozessding. Also wie komme ich denn

Dominik

da sonst dran? Ohne, dass ich dann jedes Mal

Dominik

wieder neue Nachfrage.

Jochen

Wieso muss das denn geteilt werden?

Jochen

Also ich würde sagen,

Jochen

wenn du keins hast, dann holst du das halt.

Dominik

Genau, aber das würde jetzt heißen, ich habe jetzt mehrere Prozesse

Dominik

und ich habe halt den Zugangstoken und

Dominik

beispielsweise darf man Zugangstoken nur alle so

Dominik

und so vier Sekunden holen oder so, sonst

Dominik

kriegt man keinen mehr oder wird geblockt.

Dominik

Dann gibt es halt so komische Antwortserver,

Dominik

die sowas machen. Das ist halt irgendwo zentralhändig.

Dominik

Genau, ja, das Problem,

Dominik

daran stehen wir jetzt. Was aber auch

Jochen

was aber auch blöd ist, ne, das willst du ja auch nicht.

Jochen

Ja, genau. Sondern das willst du halt, aber

Jochen

ist das nicht eher ein Deployment-Problem?

Jochen

Nee. Weil ich würde ja sagen, wo

Jochen

gehören solche Sachen eigentlich hin? Solche Sachen gehören

Jochen

eigentlich in die Umgebungsvariablen von dem Prozess.

Dominik

Ja, aber die kenne ich ja noch nicht und ich kann ja nicht das

Dominik

also im Deployment dann ablegen, wenn der halt nach

Dominik

10 Minuten wieder ausläuft, das ist ja krass.

Dominik

Also ich darf halt nur alle irgendwie 5 Minuten

Dominik

fragen, aber nach einer Stunde ist er halt wieder weg.

Dominik

Oder so. Und das ist halt blöd, weil ich brauche

Dominik

halt alle 2 Sekunden und das ist ja okay, wenn ich

Dominik

mir einmal eine Stunde eine holen kann

Dominik

und dann kann ich halt für eine Stunde benutzen, dann ist das okay, aber

Dominik

von den verschiedenen Prozessen der Anwendung, die parallel laufen.

Dominik

Gleichzeitig diese, die sind hier halt haben und dann die muss ich irgendwie teilen.

Dominik

Also klar, ich könnte lokal eine Fall schreiben, was auch nicht so eine gute Idee ist,

Dominik

wenn irgendjemand da auch die Fall System zugreifen kann.

Dominik

Das heißt, ich muss den eigentlich irgendwo den Speicher legen,

Dominik

der geteilt ist über alle Prozesse hinweg.

Jochen

Also eigentlich ist das ja nichts, was du irgendwo hin speichern willst.

Dominik

Ja, also eigentlich dann doch nur in die Datenbank oder so ist halt nicht.

Dominik

Aber ja, genau, aber die ist halt wenigstens ein bisschen

Dominik

ein bisschen verschlüsselt, also wenigstens so ein bisschen

Dominik

noch so ein Layer drumherum. Ja, oder halt

Dominik

dann in so einem geteilten Memory-Bereich.

Dominik

Und da ist halt die Frage, wie das dann aussieht, wenn du sagst, okay,

Dominik

ich finde die Idee gar nicht so falsch, dass es von

Dominik

verschiedenen Prozessen ja auf verschiedenen Rechnern liegen können,

Dominik

dann müsste das ja von

Dominik

sowas wie einem Redis oder einem Cached oder so

Dominik

rausgegeben werden, weil das

Dominik

ja quasi auch nur die geteilte Key-Value-Store ist,

Dominik

der dann das so irgendwie hergibt.

Dominik

Aber in Python gibt es halt so eine Möglichkeit

Dominik

nicht, okay, dann habe ich nicht...

Jochen

Ja, aber ich glaube nicht,

Jochen

dass das etwas ist, was man...

Jochen

Also, ja, ich meine, das klingt jetzt blöd,

Jochen

weil das natürlich dann ein Problem nicht löst,

Jochen

aber ich glaube nicht, dass das etwas ist,

Jochen

was man lösen will.

Jochen

Ja, also ich glaube tatsächlich,

Dominik

ich glaube, so eine Antwort wäre mit dem Cash-Dealer-Redis

Dominik

und da muss man halt dann gucken, braucht man das jetzt

Dominik

oder will man das jetzt oder nicht.

Jochen

Also, ich würde sagen, wenn du versuchst,

Jochen

dieses Problem zu lösen, ist die Lösung,

Jochen

macht halt einen Haufen zusätzliche Probleme.

Dominik

Ja, gut, aber manchmal kann man halt nicht anders.

Jochen

Manchmal kann man nicht anders, ja, dann ist es halt schlecht.

Dominik

Also wenn ich halt auf der anderen Seite zum Beispiel

Dominik

keine Einflussmöglichkeiten habe, dann kann ich nicht sagen,

Dominik

dass ich da irgendjemanden da anpasse.

Dominik

Ja, ja, klar, klar.

Dominik

Tja, ja.

Dominik

Mit dem Serialisieren, das muss man wahrscheinlich im Kopf haben,

Dominik

dass das auch ein sicherheitsrelevantes Problem sein kann.

Dominik

Aber dann, ja, also als Jason wäre

Dominik

er wahrscheinlich sicher, weil das ja nur irgendwie

Dominik

Zeichenketten sind, das nicht ausgeführt ist. Das heißt, ich muss

Dominik

irgendwie gucken, dass ich alles irgendwie Jason

Dominik

Serializable mache. Und das

Dominik

heißt tatsächlich, dass ich keine

Dominik

Funktionen

Dominik

angeben kann, sondern ich muss

Dominik

Funktionen Pfad oder

Jochen

Importpfad angeht. Ja, also ich meine, ich habe zum Beispiel

Jochen

so einen Fall tatsächlich

Jochen

von, gerade mit FastAPI

Jochen

fällt mir jetzt gerade so ein,

Jochen

da habe ich das so gemacht,

Jochen

tatsächlich auch,

Jochen

deine Pidentic-Objekte,

Jochen

die kannst du ja serialisieren. Zu JSON, ja.

Dominik

Ja, genau. Aber wenn ich da eine Callable reinstecke, dann geht das

Jochen

natürlich nicht. Nee, aber du kannst ja

Jochen

ein neues Objekt erzeugen.

Jochen

Hä? Also

Jochen

du kannst ja das Ding serialisieren. Ja.

Jochen

Also nicht immer.

Dominik

Das kann ich nur dann, wenn es serializable ist.

Dominik

Wenn ich jetzt da in Padentic

Dominik

irgendwelche Sachen drin habe, die nicht serializable sind,

Dominik

dann kann ich natürlich mir überlegen, was ich denn mache.

Dominik

Und dann muss ich ja

Dominik

meinen eigenen Serializer schreiben.

Dominik

Aber das kannst du ja machen.

Dominik

Ich weiß noch, ich hatte das halt

Jochen

dieses Problem

Jochen

in gewisser Weise auch.

Jochen

Ich hatte das in diesem Benchmark-

Jochen

Umfeld, dass man sagt,

Jochen

okay, ich baue mir zuerst

Jochen

meinen Server zusammen auf einer kleinen Seite,

Jochen

dann schicke ich das Objekt an den Server und der Server startet

Jochen

dann halt irgendwas damit.

Jochen

Und meine Lösung, also sozusagen, du hast halt

Jochen

in den Pidentic-Modellen,

Jochen

da sind halt die Daten für das Ding drin,

Jochen

aber ausgeführt wird es dann

Jochen

woanders. Dann rufst du halt das Ding mit dem,

Jochen

mit den Daten, die du serialisiert hast,

Jochen

auf und sagst halt so, und jetzt

Jochen

starte mal oder so. Ja, das geht schon.

Dominik

Also wenn das Pidentic-Modell das hinbekommt,

Dominik

das zu serialisieren, dann geht das auch so.

Dominik

Aber das Problem ist halt die Serialisierung von

Dominik

Callables in JSON-komplettives

Dominik

Format. Und das halt dahinter bekommen.

Dominik

Da muss man halt dann den Civilizer und G-Civilizer

Dominik

für extra verschreiben, für diese einzelnen Felder.

Dominik

Und das ist dann die Frage, wie man so ein Objekt realisiert.

Dominik

Und da stehe ich halt wahrscheinlich gerade, vielleicht habe ich das

Dominik

noch nicht gemacht, weil ich nicht weiß, wie ich so einen Pfad zu einer

Dominik

Funktion dann realisieren kann.

Jochen

Ich kann ja mal gucken. Also ich habe da auch

Jochen

tatsächlich so eine Art Registry

Jochen

verwendet, wo man dann halt einfach sagen,

Jochen

ich habe das dann so gemacht, dass man einen Dekorator in die Klasse

Jochen

rechnen konnte. Und dann konnte man sagen, okay, registriere das Ding mal.

Jochen

Und dann

Jochen

konnte ich quasi

Jochen

das halt wieder komplett

Jochen

so aus dem...

Jochen

Raushauen? Ja, aber genau,

Jochen

das kann man mal

Dominik

draufgucken. Tatsächlich, man müsste dann

Dominik

quasi diese einzelne Funktion dann quasi

Dominik

selber registrieren. Das könnte man ja mit dem

Dominik

Dekorator machen, der eh schon da benutzt wird für das Subscribe.

Dominik

Und dann könnte man die quasi gleichzeitig durch das Subscribe

Dominik

mit in diese Event-Registry registrieren

Dominik

unter irgendwas.

Dominik

Oh, ja.

Dominik

Und dieses, was dann dabei rauskommt,

Dominik

das könnte man in das Bidentic-Modell mit reinschreiben,

Dominik

rauspolen und dann auch quasi

Dominik

eine Methode dran schreiben, die dann diese

Dominik

Funktionen ausführen können.

Dominik

Können wir gleich mal...

Dominik

Ja, aber...

Dominik

Ja, das ist ein bisschen gepopelt, aber ja,

Dominik

das ist das Schöne.

Jochen

Genau, ich habe letztens

Jochen

so ein...

Jochen

Also, was ich

Jochen

gerade in einem Stream baue, ist halt irgendwie

Jochen

das Hosting-Ding für

Jochen

eben den Podcast hier auch.

Jochen

Ich würde da gerne so eine

Jochen

Software-as-a-Service-Lösung draus bauen.

Jochen

Und da habe ich so ein

Jochen

Spam-Filter-Dings für gebaut. Spam-Filter-Feature

Jochen

habe ich vorletzte Woche, letzte Woche,

Jochen

diese Woche, ein bisschen

Jochen

daran gearbeitet und

Jochen

da ist auch so ein

Jochen

Ding, das fand ich ganz, auch so ähnlich,

Jochen

auch ganz interessant,

Jochen

also ich möchte ja natürlich meine

Jochen

Spam-Filter-Modelle auch irgendwie in der Datenbank serialisieren

Jochen

und Postgres hat man ja in JSON

Jochen

viel, das ist ja voll gut,

Jochen

aber da

Jochen

habe ich ja jetzt das Problem, okay, ich möchte

Jochen

jetzt ja nicht irgendwie

Jochen

JSON daraus haben, sondern ich möchte hinterher das fertige

Jochen

Modell, auf dem ich dann Prädikt aufrufen kann,

Jochen

aus der Datenbank bekommen. Und da

Jochen

habe ich das auch mit Custom Serializer

Jochen

D-Serializer gebaut, den man

Jochen

dann beim

Jochen

JSON-Field angeben kann. Da kann man sagen, das ist der

Jochen

Decoder, das ist der Encoder.

Jochen

Und der

Jochen

Decoder, also der Encoder

Jochen

guckt halt

Jochen

ja, wie war das?

Jochen

Nee, der guckt halt

Jochen

was ist das? Und dann ruft er halt irgendwie die

Jochen

gibt mir halt mal ein Dict

Jochen

Zurück-Methode, so ähnlich wie

Jochen

bei Pandentic ist es. Bei Pandentic ist es, glaube ich, auch

Jochen

.dict.

Jochen

Das habe ich dann halt quasi genauso gemacht, dann .dict und dann

Jochen

kommen halt irgendwie Daten aus diesem

Jochen

Modell zurück, habe ich dann ins JSON reingeschrieben

Jochen

und beim Dekodieren

Jochen

guckt er halt, okay, gibt es da ein Attribut

Jochen

Klasse drin, Class

Jochen

und wenn das NaiveBase ist, dann

Jochen

genau, mach halt Spezialbehandlung

Jochen

und sag nochmal irgendwie

Jochen

ja,

Jochen

übergib

Jochen

dieses Dict, was in JSON

Jochen

war, halt als Dict für

Jochen

diese Klasse und mache dann halt ein echtes Modell

Jochen

draus, wo ich dann hinterher

Jochen

Predict drauf aufrufen kann. Und dann

Jochen

fällt das gar nicht auf. Dann sagt man halt im

Jochen

Code einfach

Jochen

nur Spamfilter.predict

Jochen

irgendwas. Und

Jochen

Spamfilter ist halt die Tabelle in der Datenbank.

Jochen

Model ist halt sozusagen

Jochen

dieses JSON-Field. Und dadurch, dass

Jochen

das ein Custom

Jochen

Deserializer hat,

Jochen

wenn man darauf zugreift, auf dieses Attribut, wird

Jochen

es ja deserialisiert und ist dann halt das

Jochen

richtige Modell wieder, das heißt, man kann sagen,

Jochen

also man kann zum Beispiel sagen, SpamFilter.Objects,

Jochen

jetzt ist jetzt Django-Semantik,

Jochen

SpamFilter.Objects.First.Model.Predict

Jochen

und dann übergibt man irgendwas,

Jochen

einen Kommentar oder so, und dann sagt einem das Spam

Jochen

oder nicht Spam. Ohne, dass man da irgendwas

Jochen

machen muss, das funktioniert einfach so.

Dominik

Und du hast da quasi ein fertig trainiertes Modell,

Dominik

hängst du dann quasi per JSON dann in das

Dominik

JSON-Feed rein, oder? Genau, also

Dominik

ich würde es zuerst trainieren und dann sagen,

Jochen

ja, speichere das doch mal, also

Jochen

Model ist gleich, ist halt das

Jochen

fertig trainierte Model und dann sage ich halt,

Jochen

ist beim Filter, also ist beim Filterpunkt Model gleich

Jochen

Naive Bay, also das, zuerst würde ich

Jochen

sagen, Model gleich Naive Bay ist

Jochen

irgendwas, Punkt Fit, irgendwann

Jochen

Trainingsdaten

Jochen

und dann sage ich halt, ist beim Filterpunkt Model gleich

Jochen

Model und dann sage ich, ist beim Filterpunkt Save

Jochen

und dann ist es halt der Amonk.

Jochen

Nett, nett. Und genau, das, also

Jochen

da ist es auch so ein ähnliches Problem.

Jochen

Ja, das

Jochen

ging eigentlich relativ problemlos.

Jochen

Ja, und überhaupt

Jochen

bei Knifebase, voll gut.

Jochen

Ja, ich habe das

Jochen

im April, glaube ich, irgendwann mal auch in die,

Jochen

weil die Kommentarspammer, also

Jochen

eine ganze Zeit lang, also bis letzten,

Jochen

bis Anfang letzten Jahres oder so,

Jochen

haben sie es nie irgendwie,

Jochen

war das nie ein Problem, weil

Jochen

irgendwie, ja,

Jochen

wahrscheinlich diese CSRF-Protection oder

Jochen

keine Ahnung, was auch immer, Django da halt

Jochen

an Dingen macht, die verhindern sollen,

Jochen

dass man da beliebig

Jochen

Dinge reinpostet, schon dafür

Jochen

gesorgt haben, dass die Kommentarspammer draußen geblieben

Jochen

sind. Irgendwann sind

Jochen

deren Skripte halt

Jochen

besser geworden, kommen

Jochen

halt mit diesem Kram klar und nehmen halt das

Jochen

Token dann aus dem Get und

Jochen

packen es in den Post rein und dann kommen sie halt durch.

Jochen

Weil wir haben da ja auch keine Authentifizierung

Jochen

oder sowas. Jeder kann da Kommentare

Jochen

reinschreiben. Aber wenn man das

Jochen

halt über ein Skript macht und nicht über einen Browser, dann fehlen

Jochen

halt vielleicht Daten, die man mit angeben muss. Und dann sagt Django

Jochen

direkt, nee, so nicht.

Jochen

Aber sozusagen, wenn man es halt

Jochen

mit einem Headless-Browser macht oder mit einem Skript,

Jochen

das ein bisschen besser ist und das halt weiß, wie diese

Jochen

Formfelder heißen und so und

Jochen

dann geht es halt doch. Also was man auch

Dominik

glaube ich ganz gut machen kann, ist so ein Feld

Dominik

einfach reinmachen, das halt dann mit im Formular drin steht,

Dominik

was halt automatisch für das Skript ausgeführt

Dominik

wird und wenn halt was drinsteht, dann sagt

Jochen

halt der App Spam. Ja, das kann

Jochen

auch sein, das habe

Jochen

ich mir auch zuerst überlegt, weil das wäre dann die super simple

Jochen

Methode gewesen, dass erstmal alle, dann hätte

Jochen

sich jemand das Skript ändern müssen für diese

Jochen

Seite und das macht dann natürlich keiner.

Jochen

Aber ich bin mir gar nicht so sicher,

Jochen

ehrlich gesagt, also auch wenn ich mir angucke,

Jochen

das Muster von den, also das hatte ich mir auch

Jochen

zuerst überlegt, dass das vielleicht die

Jochen

einfachste Lösung für das Problem ist und dann habe ich mir

Jochen

aber das ein bisschen angeguckt und dann

Jochen

ich habe so den Verdacht, dass das

Jochen

gar keine Skripte sind.

Jochen

Ich glaube, da gehen

Jochen

Leute tatsächlich mit

Jochen

Browsern drauf, die halt irgendwie

Jochen

dafür bezahlt werden, dass sie das machen und machen das von Hand.

Jochen

Und da hilft das natürlich alles nicht mehr, weil

Jochen

sobald da jemand mit einem Browser drauf geht, dann

Jochen

ja.

Jochen

Und ja, also

Jochen

dann dachte ich mir so, okay, also das sieht schon

Jochen

verdächtig danach aus, dass das irgendwelche Leute sind,

Jochen

die da tatsächlich für bezahlt werden und das von Hand machen,

Jochen

dann kann ich mir das auch

Jochen

dann hilft das nichts.

Jochen

Dann mache ich es auch gleich richtig und

Jochen

baue da halt so einen richtigen Content-basierten

Jochen

Spam-Filter ein.

Jochen

Und genau,

Jochen

Django

Jochen

Fluent Commands oder so, hat halt auch so

Jochen

einen Schnittstelle drin für

Jochen

Akismet oder so, weiß nicht, dieses

Jochen

Spam-Filter-Dings, aber das ist alles ganz furchtbar.

Jochen

Das darf man auch, glaube ich, alles gar nicht so richtig

Jochen

verwenden,

Jochen

weil man damit ja dann warten

Jochen

weiterreicht an, ja, also

Jochen

das ist alles sehr unschön und

Jochen

man kann das aber

Jochen

relativ leicht selber bauen und dann

Jochen

eben, und NaiveBase bietet sich da halt an, weil das

Jochen

hat keine Abhängigkeiten zu irgendwas anderem,

Jochen

sondern das kann man halt

Jochen

rein in Python mit

Jochen

Standard-Bibliotheksmitteln irgendwie alles machen

Jochen

und ich habe da auch

Jochen

eine Stream-Episode

Jochen

nur darüber gemacht, weil

Jochen

das kann man in anderen Programmiersprachen genauso machen, das kann man in PHP

Jochen

ganz genauso machen, das kann man halt irgendwie

Jochen

egal, was man verwendet, kann man das

Jochen

relativ einfach implementieren. Es kommt mit wenig

Jochen

Trainingsdaten aus, es ist schnell.

Jochen

Es ist wahrscheinlich für diesen Fall

Jochen

Spam, nicht Spam, weil die Klassen gut

Jochen

getrennt sind, ist es gut genug.

Jochen

Es ist natürlich, wenn man das vergleicht mit anderen Sachen, nicht so gut

Jochen

wie andere Dinge, aber

Jochen

in dem Fall ist es vielleicht egal, dass es nicht so gut ist.

Jochen

Jedenfalls bei, das hat

Jochen

jetzt halt auf den

Jochen

Dingen hat es jetzt praktisch

Jochen

perfekt funktioniert.

Jochen

Kommt kein Spam mehr durch.

Jochen

Und die ganzen regulären Sachen kommen

Jochen

halt doch durch. Also es funktioniert

Jochen

tatsächlich ziemlich super.

Jochen

Ja, genau.

Jochen

Ja.

Dominik

Ja, da müsst ihr euch unbedingt

Dominik

Jochen's Stream-Channel anschauen.

Dominik

Also die entsprechende Folge auf jeden Fall wäre super.

Dominik

Ich würde die nämlich auch nochmal sehen. Ich bin glaube ich

Dominik

einmal ausgestiegen, als du irgendeinen Update gemacht hast

Dominik

von Jupiter oder so.

Jochen

Ja, ich bin da ja,

Jochen

ich weiß ja auch oft nicht, was ich da vorher

Jochen

mache. Manchmal habe ich einen langweiligen

Jochen

Kram halt da. Ja, wie es halt so ist, wenn man täglich

Dominik

seine Arbeit filmt. Irgendwas passiert nicht immer

Dominik

so die ganzen megaspannenden Sachen.

Dominik

Ja, aber doch.

Dominik

Ja, ja.

Dominik

Das mit dem Naiv-Base, das finde ich sehr spannend.

Dominik

Ist eigentlich fast schon eine eigene Folge wert, wie man

Dominik

einen Naiv-Base-Spam findet. Hatten wir schon, tatsächlich.

Dominik

Spam-Filter? Ja, wir hatten

Jochen

schon eine Naiv-Base-Folge, glaube ich, mal irgendwann.

Jochen

Das ist jetzt schon ein bisschen was her, aber...

Dominik

Ja, stimmt. Ja, ich glaube, Maschinen-Learning-Folgen

Dominik

hattet ihr aber eh noch ein paar mehr nachgefragt.

Dominik

Vielleicht müssen wir da nochmal... Ja, da müssen wir sowieso...

Dominik

Wir müssen uns mal Struktur und Konzept überlegen, Jochen.

Jochen

Ja, also was auch auf jeden Fall

Jochen

auf dem Plan ist, ist

Jochen

HTMX, das wird jetzt auch nochmal

Jochen

Also einmal

Jochen

fand ich interessant zu sehen,

Jochen

dass das halt, wenn man

Jochen

sich anguckt, welche Talks sind eigentlich

Jochen

so

Jochen

populär quasi, kann man ja auf YouTube so ein bisschen sehen

Jochen

zum Beispiel auf Konferenzen.

Jochen

HTMX, super. Ja, HTMX macht auch Spaß.

Dominik

Ich habe es, glaube ich, auch schon mal einmal so

Dominik

spaßeshalber gebaut. Ich glaube, da ist noch ein kleiner Bug drin

Dominik

beim Posten von dem

Dominik

Formular, die Validierung geht noch nicht richtig durch, aber sonst

Dominik

müsste man eigentlich mal veröffentlichen.

Dominik

Ich habe so ein Minimumbeispiel auf Dango gebaut auch.

Dominik

Ja, ja, ja. Es gibt ja auch Django

Jochen

HTMLX. Adam Johnson hat das, glaube ich,

Jochen

gemacht. Super. Ja, also da

Jochen

muss ich auch mehr mitmachen.

Dominik

Vor allem ist es halt wirklich so, also das, was

Dominik

einen halt bei Dango Templates insbesondere nervt,

Dominik

ist halt so die Reaktivität der Templates, die halt eigentlich

Dominik

nicht da ist, sondern du hast halt jedes Mal einen neuen

Dominik

Request und musst halt dann hingehen und musst immer komplett

Dominik

die ganze Seite nur abholen, was natürlich beim Nutzer

Dominik

einmal Zack hat und was halt irgendwie... Musst du halt nicht

Dominik

unbedingt. Ja, genau. Und mit

Dominik

HTMLX ist es halt relativ einfach implementierbar,

Dominik

dass du es halt genau das nicht musst, sondern dass du halt

Dominik

Teile einfach validierst und halt dann

Dominik

tatsächlich gleich Feedback anzeigst für Formular,

Dominik

Validierung oder was auch immer man da haben möchte.

Jochen

Genau. Und der Weg, wie man das

Jochen

früher gemacht hat, üblicherweise ist halt jQuery

Jochen

oder sowas oder halt irgendwie, weiß ich nicht,

Jochen

heutzutage nennt man dann eher so AlpineJS

Jochen

oder

Jochen

PTView oder so.

Jochen

Ja. Aber

Jochen

das Problem dabei ist natürlich, dass

Jochen

sobald das dann halt komplizierter wird

Jochen

und sobald man dann halt irgendwie sowas macht, also was ich

Jochen

gerne hätte, ist ja irgendwie, dass auch Pagination

Jochen

darüber funktioniert, man dann so weiterklickt und das halt so schnell

Jochen

ist wie

Jochen

bei einer lokalen App oder so, das ist halt

Jochen

dann doch eher, da ist man dann schon

Jochen

eher schnell im Single-Page

Jochen

SPA-Land

Jochen

unterwegs,

Jochen

aber genau

Jochen

und ich dachte bisher immer, und

Jochen

mit JQuery und so wird das State-Management dann halt auch

Jochen

irgendwie, wenn es komplizierter wird, sehr hässlich

Jochen

und ich dachte immer so,

Jochen

naja gut, okay, da muss man halt doch SPA machen

Jochen

aber ich glaube

Jochen

tatsächlich, HTMLX ist vielleicht

Jochen

tatsächlich eine Lösung, ich weiß es noch nicht genau, weil ich habe es noch nicht

Jochen

ausprobiert, aber könnte gut sein

Dominik

Ja, wir müssen ein bisschen ausbauen, dass das so ein bisschen

Dominik

voll, also die ein bisschen einfacher

Dominik

wird von der Anwendung her, dass man vielleicht noch

Dominik

ein paar eigene Template-Texte für sowas nimmt oder sowas

Dominik

ist ja natürlich besonders toll, aber

Jochen

Ja, da bin ich auf jeden Fall gespannt

Jochen

also diesen Trend gibt es ja jetzt auch schon einige Zeit

Jochen

und der gefällt mir tatsächlich sehr gut, also da würde ich sagen

Jochen

das ist ja super, wenn das ein bisschen mehr

Jochen

in die Richtung läuft, dass man wieder mehr

Jochen

Server, ja, das sind halt immer so Hype-Cycles.

Jochen

Irgendwie, macht alles auf dem

Jochen

Client, oh nein, macht alles auf dem Server, uh.

Dominik

Ja, weil wenn das halt mit Rust

Dominik

auch bei Python mit WebMC im Browser geht,

Dominik

dann können wir auch das wieder beim Client machen.

Dominik

Ja,

Dominik

ich meine,

Jochen

ich würde ja sagen, eigentlich macht das schon

Jochen

Sinn, viel auf dem Server zu machen.

Dominik

Ja, würde ich auch sagen. Also eigentlich ist ja das Terminal,

Dominik

eigentlich brauchst du eigentlich nur eine Tastatur und der Rest ist auf dem

Dominik

Server. Das einzige Problem ist, wenn die Verbindung

Dominik

abbricht, dann muss man halt irgendwie gucken, was dann übrig

Dominik

bleibt, aber ja.

Jochen

Naja, ja, aber

Jochen

finde ich auch interessant.

Jochen

Ich habe jetzt so ein bisschen

Jochen

auch mal bei Ruby on Rails

Jochen

gehört. Ich meine, ich würde ja sagen,

Jochen

die beiden großen, oder tatsächlich

Jochen

Ruby on Rails ist halt eher so das

Jochen

große Web-Framework

Jochen

ja, Batteries

Jochen

Included-Ding, fand ich

Jochen

jetzt auch mal ganz interessant. Also ich habe jetzt auch irgendwie

Jochen

mal was drüber gelesen,

Jochen

was das alles so kann.

Jochen

Ich glaube, ich habe auch letztens

Jochen

irgendwo in der Podcast-Review so dazugehört.

Jochen

Shownote? Ja, genau,

Jochen

wieder reinfahren. Und

Jochen

das kann halt tatsächlich, glaube ich, noch ein bisschen mehr als Django.

Jochen

Aber Django ist halt immer so das, was

Jochen

man dann auch nennt. Also Django ist so ähnlich.

Jochen

Aber zum Beispiel, was

Jochen

ich nicht wusste, was da so

Jochen

Rui und Rails hatte schon immer

Jochen

so eine relativ

Jochen

ausgefeilte Asset-Pipeline

Jochen

drin.

Jochen

Bei Django gibt es sowas so ein bisschen, so mit Django-Kompressor

Jochen

oder manchmal, also so ein bisschen gibt es

Jochen

Ansätze, aber nicht im Ansatz

Jochen

vergleichbar mit dem, was Ribbon Rails da macht

Jochen

und Ribbon Rails hatte da so

Jochen

Dinge, da hat sogar Webpack dann am Schluss

Jochen

eingebaut und jetzt sind sie nochmal irgendwie auf was anderes umgestiegen

Jochen

und

Jochen

da war es ja auch so lange so, dass

Jochen

CoffeeScript verwendet wurde, halt für die ganzen

Jochen

wirklich frontend-frontend-Teile und

Jochen

das wurde dann halt aber alles automatisch

Jochen

gebundelt und so

Jochen

und in JavaScript transpiliert

Jochen

und so, also das ist ein Teil

Jochen

wo Ribbon Rails halt nochmal echt mehr Zeugs

Jochen

hat als Django, würde ich sagen, und dann

Jochen

auch wichtiger Teil und da dachte ich so,

Jochen

okay, das ist tatsächlich vielleicht etwas,

Jochen

das ist auch sowas, das kann man auch machen, man muss sich einfach

Jochen

Greenwells angucken und dann vielleicht Dinge in Django nachbauen oder so.

Jochen

Das fehlt in Django,

Jochen

ist sowas wie

Jochen

so ein

Jochen

Job-Queue-System

Jochen

und zwar gar nicht so, also

Jochen

ich habe mich ja auch schon oft über Salary

Jochen

geärgert und so. Django-Background hast du.

Jochen

Ja, genau, es gibt ja dann

Jochen

auch diverse Django-Queue, es gibt

Jochen

RQ

Jochen

für diese Redis-Q-Geschichten.

Jochen

Dann gibt es aber auch noch

Jochen

Yui oder weiß ich nicht. Es gibt noch diverse andere.

Jochen

Es gibt halt irgendwie zig

Jochen

unterschiedliche Q-Systeme.

Jochen

gut, denkt man sich, oh gut, muss ja nicht unbedingt

Jochen

in Jago selber drin sein. Ja, wozu auch?

Jochen

Es gibt ja genug Auswahl.

Jochen

Nimmt man halt irgendwie, was einem am besten gefällt.

Jochen

Aber der Punkt ist eigentlich bei

Jochen

River and Rails ist das halt drin. Da gibt es halt

Jochen

da nennt es sich glaube ich Actionjob

Jochen

oder ich war irgendwie so,

Jochen

ich weiß jetzt auch gar nichts genau.

Jochen

Und das eigentlich

Jochen

Witzige daran ist, dass das halt

Jochen

so ein Ding ist,

Jochen

das ist so ein Interface in Ruby

Jochen

und Rails selber. Genauso wie es da

Jochen

auch so eine

Jochen

Abstraktion gibt für Filesystemzugriff.

Jochen

Oder für Files irgendwie.

Jochen

Und das gibt es ja in Django auch.

Jochen

In Django hast du ja auch irgendwie

Jochen

Default File

Jochen

wie heißt das?

Jochen

File Storage.

Jochen

Default File Storage.

Jochen

kannst du setzen. Und dann ist

Jochen

egal, was du verwendest, ob du irgendeinen Object-Store

Jochen

verwendest oder das File-System oder was auch immer.

Jochen

Es muss halt diese API anbieten

Jochen

und dann kann dahinter liegen, was will.

Jochen

Aber du kannst es halt benutzen.

Jochen

Du hast halt

Jochen

innerhalb von Django ist es immer das gleiche Interface.

Jochen

Du kannst halt immer Files irgendwie, kannst auch

Jochen

sehen, lesen, kannst dich schreiben. Oder wie Cache, Cache-Backend.

Jochen

Genau, oder Cache-Backend.

Jochen

Du kannst hinterher

Jochen

das Cache-Backend austauschen,

Jochen

Aber dein Applikationscode muss sich

Jochen

dafür nicht ändern. Und das kannst du mit diesem Jobkram

Jochen

halt dann auch machen. Und das ist eigentlich

Jochen

für die in der Ruby on Rails Welt

Jochen

gibt es halt viele Dinge, die dann darauf

Jochen

aufbauen, dass diese Interfaces halt so sind, wie sie sind.

Jochen

Und

Jochen

das heißt, du kannst halt

Jochen

Third-Party-Packages

Jochen

oder so bauen, die halt

Jochen

dann irgendwie deine

Jochen

Tasks in diese

Jochen

Queue schmeißen und da irgendwie

Jochen

und sie müssen nicht wissen, welche Implementationen

Jochen

du da verwendest. Ob das jetzt

Jochen

RabbitMQ ist oder was der Teufel,

Jochen

das ist halt alles hinter diesem Interface versteckt

Jochen

und spielt dann auch keine Rolle.

Jochen

Und

Jochen

diese Geschichten gibt es halt in Django

Jochen

gar nicht, weil es dieses einheitliche Interface nicht gibt.

Jochen

Das heißt, wenn ich in Django sowas machen

Jochen

wollte, dann hänge ich halt ab direkt von

Jochen

Celery oder von sonst irgendwas, weil es gibt nicht

Jochen

irgendwie das, ja genau,

Jochen

Django-Background-Task-Interface,

Jochen

sondern das ist halt, ja.

Jochen

Ja, das fehlt tatsächlich noch. Und da dachte ich so,

Jochen

okay, ja. Und an

Jochen

Linschein hat Ruinrails auch noch so ein bisschen mehr Zeugs.

Jochen

Ja.

Jochen

Ja, ja, auch HTMX kommt da ja daher

Jochen

und diverse andere Geschichten.

Jochen

Ja. Und sie haben

Jochen

irgendwie für ihren ORM

Jochen

da kann

Jochen

man auch, also normalerweise

Jochen

default ist relationale Datenbank, aber man kann halt auch

Jochen

MongoDB direkt dranhängen. Ich dachte so, wow,

Jochen

krass, wie haben sie das denn, weil das ist auch immer ein Ding, was in

Jochen

Django requestet wird, dass Leute sagen, ich hätte gern

Jochen

MongoDB, kann ich jetzt ehrlich gesagt gar nicht so richtig

Jochen

verstehen, warum. Wenn irgendjemand

Jochen

weiß, warum MongoDB cool ist, wir das

Jochen

erklären oder uns mal schreiben, warum das

Jochen

toll ist, weil

Jochen

verstehe ich gar nicht, warum

Jochen

nimmt man das da wahr.

Jochen

Offenbar gibt es da großen Bedarf

Jochen

und das

Jochen

geht halt in Django nicht so richtig.

Jochen

Aber könnte man sich auch vorstellen,

Jochen

wenn es halt ein...

Dominik

Dann sag doch mal ganz kurz, warum du das denn doof nimmst

Dominik

als why? Was heißt doof? Ich würde nur

Jochen

sagen, ja, also Jason Field

Jochen

in Postgres

Jochen

schneller. Das ist schneller als MongoDB.

Jochen

Mehr braucht man nicht.

Jochen

Und es kann halt zusätzlich noch die ganzen relationalen

Jochen

Geschichten. Also wozu

Jochen

dann MongoDB?

Jochen

MongoDB ist ja quasi nur das JSON-Field

Jochen

und kann halt die relationalen Dinge nicht. Aber die

Jochen

relationalen Features brauchst du ja eigentlich auch.

Jochen

Und die ganze Transaktionssicherheit und den ganzen

Jochen

Isolationslevel und weiß der Teufel, den ganzen Kram willst du ja eigentlich

Jochen

auch haben. Also irgendwie

Jochen

keine Ahnung warum.

Jochen

Ja, vielleicht auch, wenn man

Jochen

halt sagt, okay,

Jochen

hat es irgendwie vereinheitlicht

Jochen

und es gibt halt nur MongoDB und es kommt damit

Jochen

klar, sonst kann ich einfach irgendwie was

Jochen

anderes machen. Okay, ja, dann

Jochen

ist es halt so.

Jochen

Ja.

Jochen

Ja, ich finde, wir haben jetzt eine

Dominik

sehr, sehr bunte Folge gehabt. Ich glaube, es wird relativ

Dominik

schwierig, uns zu folgen. Ich hoffe,

Dominik

ihr habt bis zum Ende durchgehalten. Vielleicht habt ihr das ja irgendwie

Dominik

geschafft. Haben wir

Dominik

noch irgendwas?

Dominik

Nee, ansonsten, nee. Hast du einen Pick

Dominik

der Woche? Ich glaube, ich hab das schon tausendmal. Doch, ich hab

Jochen

also, was ich

Jochen

ganz cool fand,

Jochen

habe ich letztens

Jochen

auch eingebaut, Django Upgrade

Jochen

gibt es. Es gibt

Jochen

für Python, glaube ich, hat Anthony

Jochen

Soti irgendwie auch so ein Ding geschrieben.

Jochen

Python Upgrade oder

Jochen

ich weiß es nicht genau, wie das Paket heißt und

Jochen

so ähnlich gibt es das jetzt auch für Django, wo dann halt

Dominik

sozusagen die neueste Syntax und die ganzen

Dominik

deprecated Sachen ersetzt werden, automatisch durch die

Jochen

Besserung. Ja, ja und das habe ich dann

Jochen

als Pre-Commit Hook irgendwie eingebaut

Jochen

und so, dass dann halt immer, wenn halt Sachen

Jochen

deprecated werden oder wenn es eine bessere Art gibt, das zu machen,

Jochen

das wird dann halt automatisch ersetzt und

Jochen

ich muss das nicht irgendwie von Hand machen.

Jochen

Ja. Das war nice.

Jochen

Und das ist ziemlich nett.

Jochen

Das ist auch von Adam Johnson, glaube ich.

Jochen

Ja,

Dominik

was nehme ich denn? Ja, ich habe ja die

Dominik

ganzen Sachen, Fast-Fast-SQL-Model, habe ich ja schon

Dominik

gesagt. Habe ich auch schon mal

Dominik

Rich erwähnt eigentlich irgendwo? Ja, das habe ich ja

Jochen

auch schon mehrfach gehabt, ja. Aber ich bestimmt schon mal

Dominik

als Schoner, ich nehme es einfach nochmal.

Dominik

Ja, das ist auch wirklich toll.

Dominik

Da gibt es auch jetzt irgendwie Textual

Dominik

oder so irgendwie.

Jochen

Der Autor

Jochen

von Rich und Textual,

Jochen

der probiert das

Jochen

Open Source zu entwickeln.

Jochen

Und versucht jetzt damit

Jochen

durchzukommen,

Jochen

seine Projekte zu entwickeln.

Jochen

Und das fand ich auch faszinierend.

Jochen

Ich bin mal gespannt. Es ist auf jeden Fall sehr populär,

Jochen

was er macht und ist ja auch super.

Jochen

Ich hoffe mal, dass es klappt.

Jochen

Es wäre toll, wenn das

Jochen

irgendwie

Dominik

mehr funktionieren würde.

Dominik

Witch macht ein bisschen

Dominik

Farbe in euer Command-Output.

Dominik

Ja.

Dominik

Ganz nett. Oh, ich benutze das gerne mit

Dominik

Humanize, vielleicht noch ein nächster Pick, falls ich jetzt schon mal

Dominik

Gepicks habe. Ah, okay. Also Humanize macht

Dominik

auch sowas wie Zahlen oder vor allem Daytime-Objekten

Dominik

irgendwas vor drei Sekunden oder

Dominik

vor kurzer Zeit und man kann so ein bisschen definieren,

Dominik

dass das irgendwie nett sich anhört.

Dominik

Ich mag das irgendwie ganz gerne für

Dominik

ein, zwei Dinge.

Dominik

Ein bisschen Human More Readable

Dominik

Blogs oder sowas.

Dominik

Ja, klingt gut.

Dominik

Ja, die hatten

Dominik

Richard tatsächlich, ich habe es gerade gesehen, ist gar nicht so lange her.

Dominik

Eine Packaging-Folge.

Dominik

Jetzt haben wir Humanize dabei.

Dominik

Okay.

Dominik

Ja, dann bleibt uns gewogen, hört uns weiter,

Dominik

wann ihr wollt und bis zum nächsten Mal.

Dominik

Dann bis zum nächsten Mal. Tschüss.

Dominik

Tschüss.