Transkript: Python 3.10

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Dominik

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

Dominik

Ja, schön, dass ihr wieder eingestellt habt.

Dominik

Wir waren etwas länger nicht da.

Dominik

Das tut uns etwas leid.

Dominik

War ziemlich viel zu tun.

Dominik

Und ja, Ferien, Fieber und so weiter, weißt du nicht alles kennt.

Jochen

Ja.

Dominik

Der alte Wahnsinn.

Jochen

Genau.

Jochen

Ja, herzlich willkommen, Dominik, auch zurück.

Jochen

Bist du sicher, dass das Folge 35 ist?

Dominik

Ja, das ist ein bisschen.

Jochen

Wir haben das irgendwie ein bisschen Track verloren.

Dominik

Das ist übrigens Jochen, ihr kennt ihn auch.

Dominik

Ja, genau, vielleicht sagen wir das nächste Mal einfach herzlich willkommen ohne Episode.

Das ist ja auch sowas.

Jochen

Das hat Apple Podcasts, iTunes hat ja so Richtlinien, wie man das, und die haben irgendwann mal gesagt, sie hätten gern die Episoden Nummern nicht mehr im Titel.

Jochen

Das hat man früher immer so gemacht, ich habe das auch so gemacht und dann habe ich das rausgenommen.

Jochen

Ich weiß nicht, am Anfang sind die, glaube ich, noch mit dabei und irgendwann habe ich es halt.

Dominik

Nee, letztens hatte ich jedenfalls 34, dann 33, jetzt haben wir 35 und wir haben eigentlich noch einige unveröffentlicht, das heißt das ist auch nicht ganz so einfach an unseren Files das zu sehen.

Dominik

Aber ja, schön, dass ihr wieder da seid.

Wir machen heute eine Mix-Folge, also ein bisschen über Python wollen wir jetzt 10.30en und so und

Jochen

dazu sagen.

Jochen

Das ist genau.

Dominik

Genau, und vielleicht noch über die alten Neuerungen, die es so gab.

Dominik

Und dann wollten wir noch ein bisschen über Shared Memory von Python in Prozessen sprechen, vielleicht.

Dominik

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

Sonst so Dinge, so andere Dinge auch.

Jochen

Dinge, wir müssen noch nicht so genau.

Jochen

Mal schauen.

Jochen

Ja, wir müssen das mal wieder strukturierte Form kriegen, aber haben wir bisher noch nicht hinbekommen.

Ja, genau.

Dominik

Ja, bevor wir es mit Python 13 anfangen, was haltet ihr eigentlich von Werbung?

Dominik

Wir fangen das eigentlich rund.

Dominik

Ob wir es so mit Helge Schneider halten sollen, so Werbung ist scheiße.

Dominik

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

Dominik

Es wäre cool, wenn ihr jetzt so ein bisschen Feedback gibt, ob das für euch in Ordnung wäre oder nicht.

Dominik

Wir haben uns aus einigen technischen Perspektiven gefragt, ob das Sinn macht oder das mal auszuprobieren.

Dominik

Wir sind aber eigentlich noch nicht so wirklich selber da.

Jochen

Ja, wäre es natürlich praktisch, wenn es irgendwie die ganzen Kosten, die da so ein bisschen, also so wahnsinnig hohe Kosten sind es jetzt nicht, aber wenn die auch ein bisschen.

Dominik

Ich kaufe wieder ein Schlossjochen.

Jochen

Wann das wieder reinkrücken könnte oder so, keine Ahnung.

Jochen

Muss man mal schauen.

Jochen

Ja, das ist auch so ein Thema, genau.

Dominik

Ja, ich warte nur drauf, dass ich wegen dem Podcast in ein Schloss 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

Lebensverlängern Maßnahmen.

Jochen

Ja, genau.

Jochen

Wollen wir so ein bisschen News machen?

Jochen

Dann könnten wir mal wieder.

Jochen

News, ja.

Jochen

Ja, also genau.

Dominik

Am Montag kam Python 13.0 heraus.

Ja.

Dominik

Also letzten Monate am 4.10.

Jochen

Voll gut, genau.

Jochen

Und dazu gab es auch so einen Release-Stream irgendwie, fand ich auch nicht.

Jochen

Was?

Oh, irgendwie richtig gesehen, nein.

Jochen

Ah, ja.

Jochen

Genau, kann man sich auf YouTube nochmal angucken.

Jochen

Also ehrlich gesagt, ich weiß nicht, ob ich den sich wirklich komplett angucken will.

Jochen

Das ist irgendwie so über drei Stunden.

Jochen

Aber man kann ja mal reingucken, einfach um die Leute zu sehen, die das machen.

Jochen

Das ist vielleicht ganz interessant.

Jochen

Und die hatten auch lustige Hüter auf, das ist auch super.

Oh, cool.

Jochen

Genau.

Jochen

Ja, und das war auch ganz witzig.

Jochen

Ja, es war eine komplizierte Geschichte, so ein Release.

Jochen

Und ja.

Jochen

Genau, ich habe jetzt auch schon so ein bisschen, ich weiß nicht, hast du das schon mal versucht, irgendwo zu installieren oder mit was?

Dominik

Ja, ich benutze es schon relativ lange, jetzt fast zwei Monate, so den Rescandidat, der so dann draußen kam.

Dominik

Ah, okay.

Dominik

Hab ich auch schon an Daily benutzt und hab so ein bisschen gemerkt, was da ging, was nicht ging.

Dominik

Direktor, also ich muss den ja meistens oder oft unter Windows benutzen, leider.

Dominik

Aber ja, da gibt es halt ein großes Problem mit PyWin 32.

Dominik

Das kann man aber relativ einfach fix mehr, wenn man weiß, wie es geht, aber das erzähle ich vielleicht einfach später.

Jochen

Ja, okay.

Jochen

Genau.

Jochen

Ich habe es eigentlich, ich habe es vielleicht auch mal, ich habe auch mal eine Beta oder eine Release-Kandidate, weiß ich nicht, mal installiert, um mal so ein bisschen zu gucken.

Jochen

Oder ich glaube, letztes Mal, wir hatten irgendwann mal, haben wir uns über das Structural Pattern Matching 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 installiert auch.

Jochen

Ich habe jetzt versucht, das Projekt, an dem ich gerade.

Dominik

Ja, also das sind ja so die Hauptfeatures, ne?

Dominik

Also das Flash-Patch-Matching und die Typing-Syntax so ein bisschen angepasst und so.

Jochen

Na gut, also es ist die Frage, wie man sieht.

Jochen

Also ich glaube, so das, was unten, also so ein bisschen, die sind aus ein bisschen kontrovers.

Jochen

Aber klar, ich kann schon verstehen, warum man die als das, das sind die wichtigsten neuen Features klassifizieren würde.

Jochen

Ich glaube, das positivste Feedback hat, die haben die verbesserten Fehlermeldungen bekommen.

Dominik

Ja, die sind tatsächlich.

Jochen

Das ist tatsächlich super, ne?

Dominik

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

Jochen

Ja, ja, ja.

Dominik

Und dass man tatsächlich nicht nur irgendeinen Quatsch bekommt, sondern tatsächlich die Stelle, an der es steht und warum vielleicht auch ein Hinweis, warum es falsch sein könnte und was da falsch ist, das wird direkt gut beschrieben.

Jochen

Genau, genau.

Jochen

Also bisher ist es halt, wenn man da irgendeine Klammer vergessen hat zuzumachen oder so, dann kriegt man halt einen Syntax-Error beim nächsten Statement irgendwie beim Gleichheitszeichen oder irgendwie sowas.

Jochen

Und das ist halt dann irgendwie verwirrend, weil man kriegt halt den Fehler angezeigt, nicht an der Stelle, wo man den erwartet, wo er passiert ist, sondern naja, wo der Interpreter dann halt drüber fällt.

Jochen

Aber genau, und jetzt ist es halt besser jetzt.

Jochen

Und das ist halt auch alles konsequent.

Dominik

Er unterkringelt jetzt richtig die Stelle, an der es ist mit Numbers und so für ein Steebikes.

Jochen

Von dem Pack-Parser, der jetzt dann neu ist und mit dem kann man einfach mehr Sachen machen, dann ja.

Jochen

Weiteres Feature, was halt dieser dem neuen Parser sozusagen zuständig ist, ist das jetzt in, das ist auch eher so eine Randhässlichkeit, aber das ist halt schon komisch, wenn man diese Limitierungen irgendwie, wenn man auf die gestoßen ist, dass in Kontextmanager, also wenn man sagt, with irgendwie Kontextmanager as irgendwas, äh, da konnte man vorher nicht das so klammern.

Jochen

Also dass man das über mehrere Zeilen, das musste in einer Zeile sein.

Jochen

Und man konnte auch, glaube ich, nicht mehrere, sondern musste das dann mehrfach verschachteln.

Jochen

Was dann natürlich, also wenn auf dieses Problem gestoßen ist, man hat jetzt mehrere Kontextmanager und dann irgendwann kommt man in große Nöte, weil wenn man nicht, wenn man immer weiter verschachteln muss, wenn man jetzt mehrere davon hat, dann wird das halt, wird der Platz auf der rechten Seite eng.

Jochen

Und wenn man die aber nicht umbrechen kann, weil diese Klammerndotation noch nicht funktioniert, dann hat man irgendwann so Probleme.

Jochen

Denkt sich so, das geht ja jetzt gar nicht mehr so richtig.

Hässlich wird das wirklich.

Jochen

Das wird dann sehr hässlich.

Jochen

Und das geht jetzt.

Dominik

Kontextmanager mit Parenthesen.

Jochen

Mit Klammern, sodass man mehrere Zeilen verwenden kann und halt auch mehrere in einem Dings, sodass man das halt quasi, wenn man viele Kontextmanager benutzen möchte, das kann man jetzt einfach in eine Zeile schreiben, beziehungsweise halt untereinander mehr machen.

Jochen

Da sind wahrscheinlich nicht so viele Leute drauf geschossen auf das Problem.

Jochen

Aber ja, genau.

Ja, ich mache auch das schon Sinn.

Dominik

Also wenn man das schachteln will, könnte ja erst auch anders lösen, indem man Dekoratoren verwendet oder so, aber.

Jochen

Naja, aber ich meine, du dafür gibt es die Syntax, ja, dass man das halt verwendet.

Jochen

Und ja, wenn man das dann nicht so richtig verwenden kann, ist es halt ein bisschen blöd.

Jochen

Ich meine, das kommt halt nicht so auf.

Jochen

Meistens hat man ja nur so ein, zwei Dinger, die man machen möchte.

Jochen

Also ich, also in diese Verschachtelung oder dass es blöd wurde, ist mir dann, die einzigen Male, wo mir das mal passiert, ist, das irgendwie, ist halt, wenn man, wenn ich in Tests mehrere Sachen, also wenn ich da mehrere Sachen wegmocken will oder wegpatchen will.

Jochen

Und teilweise kann man das halt, also kann man ja auch einen Dekorator machen, manchmal geht das auch nicht, weil das basiert halt auf anderen Sachen.

Jochen

Und dann muss man das halt in einem Test selber machen.

Jochen

Und dann, wenn man viele Sachen hat, die man wegmocken möchte, dann wird es halt komisch.

Jochen

Und das ist aber die einzige Stelle, wo das praktisch jemals irgendwie begegnet ist.

Jochen

Ansonsten.

Dominik

Na gut.

Dominik

Also was ich sehr gerne benutze, ist diese neue Typing-Syntax, wo man jetzt halt, ich weiß gar nicht, wie heißt das Zeichen überhaupt, dieser senkrechte.

Pipe Strich,

die Pipe.

Pipe-Operator, ja.

Dominik

Genau.

Dominik

Den kann man halt jetzt verwenden als Type-Ind zwischen einem Oder-Teichen einfach sagen.

Dominik

Heißt das ein Dikt- oder eine List, der erwartet jetzt diese Funktion, dann gibt es sie raus, dann macht man einfach Pipe dazwischen.

Dominik

Das ist irgendwie sehr intuitiv und man muss nicht immer alles vom Typing direkt importieren und einen Union draus machen.

Jochen

Ja, sieht auf jeden Fall deutlich besser aus.

Stimmt.

Jochen

Genau, ja, das ist schön.

Jochen

Ich finde bei dieser Type-In-Syntax immer so, ich habe mich ehrlich gesagt auch noch nie so richtig, wirklich viel damit beschäftigt, muss ich sagen.

Jochen

Würde ich auch nochmal irgendwann machen, aber ich habe es bisher nie so benutzt.

Jochen

Aber ich finde das immer ein bisschen verwirrend von der ich weiß nie so genau, was sind jetzt die aktuelle Form von Syntax, die man da verwenden kann und bis welcher Pythonversion zurückgeht das denn und so.

Jochen

Aber ja, 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 von irgendwie aus Typing importieren muss, sondern dass man halt direkt die echten Verwaltung.

Dominik

Also es funktioniert halt leider noch nicht immer so komplett, je nachdem, wie komplex und wie vollständig man das irgendwie so machen will.

Dominik

Aber ja, das ist schon mal auf jeden Fall ein Tritt in die richtige, in die richtige Richtung und sieht auch gut aus.

Dominik

Was mich halt noch so ein bisschen nervt, ist also dann, wenn du zirkuläre Abhängigkeiten hast oder sowas.

Dominik

Das passiert halt bei Typing relativ schnell.

Dominik

Und das ist auch nicht so richtig gelöst.

Dominik

Es gibt ja irgendwie so zwei Dinge, die man machen kann, dass man von Typing irgendwie das einmal importiert und dann nur dann, wenn Typing Type-Checking ist, dann die nutzt.

Das geht auch nicht immer.

Dominik

Manchmal kann man es dann als String dann doch hinschreiben.

Dominik

Man hat man einige Types, die als Klassen definiert sind, einige als Strings, das ist auch irgendwie hässlich.

Dominik

Und naja.

Dominik

Da wollen sie aber irgendwie dran arbeiten.

Dominik

Habe ich gut, aber ich weiß noch nicht genau, wann das eingeführt wird.

Dominik

Dass man das halt einfach dann machen kann, dass er halt erkennt, dass es ein Type ist und es halt dann tatsächlich lazy importiert oder so und das dann halt kein Problem ist beim Komponieren.

Jochen

Okay.

Jochen

Auch interessant, ja.

Ja.

Dominik

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

Dominik

Also, das heißt, wir bekommen insgesamt im Moment so ein bisschen hübschere, ästhetischere Sachen für so Errors und Syntax und so.

Dominik

Ja.

Dominik

Je nachdem, ob man Type Hints überhaupt mag.

Jochen

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

Dominik

Ja, nicht per Sonic, ursprünglich, da gab es halt nie.

Jochen

Und ja, ich kann so ein bisschen nachvollziehen auf der anderen Seite.

Jochen

Also ich glaube, ja, man muss es halt an, 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, also gerade an den Sachen, an denen ich schreibe, wenn das halt so, das ist halt ein Projekt, was halt andere Bibliotheken verwendet, aber selber keine Bibliothek, an der Stelle macht es nicht so wahnsinnig viel Sinn, weil ich, also ist es schön, wenn ich in einer Idee sozusagen die Ergänzung, also sozusagen, eine Idee, der es verwenden kann, um mir zu helfen, aber wenn ich sowieso, wenn das die Libraries, die ich verwende, tun, und brauche ich das, also sozusagen für meinen eigenen Code, den ich qu

Jochen

asi nie aufrufe, brauche ich das ja gar nicht so.

Jochen

Oder der halt nur verwendet wird, um halt irgendwas zu tun.

Jochen

Das ist halt irgendwie da.

Jochen

An der Stelle brauche ich es, wüsste ich jetzt nicht, ob ich es wirklich brauche.

Dominik

Also ich mache wahrscheinlich auch im Moment zu viel hin, also weil ich es gerade irgendwie ein bisschen noch reine als weniger.

Dominik

Aber ich finde das halt schon sehr praktisch, wenn ich halt wirklich das Objekt quasi schon so getyptet habe, dass ich halt weiß, was für ein Objekt ich da in der Funktion in der Hand habe, weil das so getypt ist oder auch bei der Variablenzuweisung, dass halt schon relativ klar ist, was das halt mal sein wird.

Dominik

Oder so.

Dominik

Weil dann relativ, also auch manchmal kann man halt so eine Base-Klasse nehmen, dann weiß man halt, was hat man denn da in der Hand.

Dominik

Und das ist irgendwie, also A, natürlich vor dem Editor, der das halt super dann linden kann und dann halt auch die Types dann feststellt, auch.

Dominik

Wenn das halt irgendwie nicht stimmt, das kann er halt relativ gut feststellen, irgendwie.

Dominik

Die meisten modernen können das ja.

Ja.

Dominik

Und das ist irgendwie schon echt hilfreich.

Dominik

Also gerade wenn ich jetzt irgendwie mit anderen Leuten irgendwie gleichzeitig irgendwie an Features entwickle und jeder irgendwie so einen kleinen Type out und was meinst du der denn da, wenn die Leute nicht immer so gut nehmen oder so manchmal, dann sieht man das halt auf jeden Fall am Type auch schon, was das dann halt sein könnte.

Dominik

Und das, also für mich macht es das so deutlich verständlicher.

Dominik

Also ja, man kann es wahrscheinlich auch too much machen an zwei Stellen, aber ja, also ich finde halt das Linting, das ist schon, ist mir so oft aufgefallen, dass irgendwo, wenn man dann mal die Type-ins dann reingebaut hat in so einen Code, der irgendwas war komisch von Coworker oder sowas, dann merkt man so, oh ja, klar, wird direkt gelintet, da ist der Typ irgendwann kaputt gegangen und er gibt halt dann doch nicht das zurück, was er erwartet hat und vielleicht ist irgendwo doch ein Nun rausgefallen oder sonst irgendwas.

Dominik

Und solche Sachen, die sieht man halt durch die Type-Pins einfach deutlich schneller und deutlich häufiger.

Dominik

Ich meine, klar, wenn man sowieso einen so super Coder und Programmierer ist wie du, lieber Jochner, ich würde sagen, dass das echt, also mir hilft recht, also ja, vielleicht nicht überall, aber.

Jochen

Ja, ich glaube, ich muss einfach mehr damit mal rumspielen.

Dominik

Ja, was interessant ist, es gibt halt auch so immer ja, also gerade diesen ganzen Typing, das Ding, also alles auf so Interfaces aufzubauen, ja, dass du halt so irgendwie so Datenklassen baust, wo halt relativ klar ist, was für Attribute das mit welchen Datentypen sind.

Jochen

Ja, ja, ich meine, das habe ich auch schon.

Jochen

Also Pydentic finde ich auch total super.

Dominik

Pydentic macht das natürlich auch.

Jochen

Also genau, was ich total, also gerade mit FastAPI zusammen, was ich total super finde, ist, dass man da 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 deinen Datenbankmodell ein paar Spalten weg oder sowas und kannst es halt einfach dann als Modell einmal definieren und kannst das 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.

Das ist schon sehr nett.

Dominik

Fast Api kennst du das SQL-Modell?

Jochen

Ja, ja, ja,

Dominik

das ist auch von Sebastian Ramirez.

Dominik

Und da macht er quasi einen Rapper noch um Pydentic und SQL-Ilchemy rum und baut das alles zusammen in eine Klasse rein, dass man halt nicht mehr so viel Duplicated Code hat und gleichzeitig irgendwie SQL-Ilchemy-Modelle und Pydenti-Scheme nachschreiben muss.

Jochen

Ja, ja, das ist eine Frage, die ich mir, ich habe irgendwann, ich weiß nicht, wann ich, weißt du auch schon über ein Jahr her, als ich zum ersten Mal angefangen habe, so ein bisschen mit FastAPI rumzuspielen, dann darf 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 Pydentic-Modell, damit man es raus- und ausrendern kann, sozusagen.

Dominik

Und mit dem neuen TKM und sagst du einfach Table gleich True.

Dominik

Und das ist wirklich echt angenehm.

Jochen

Ja, und da dachte ich schon, das ist aber blöd, dass man das selber machen muss und ja, 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.

Ja, das ist sehr geil.

Jochen

Weil ich glaube, ich fange jetzt, ich nehme mir nochmal dieses Deployment-Dings, was ich mal auch das, wann habe ich das gebastelt?

Jochen

Das war auch ungefähr letztes Jahr um die Zeit ein bisschen später nochmal vor und dann mache ich das nochmal mit FastAPI, Vue.js und vielleicht mal mit SQL Model.

Ja, ja.

Dominik

Ja, also was mir noch so ein bisschen fehlt, ist das letzte so ein paar von den SQL Alchemy-Features, sowas wie Unique-Constrained oder so, habe ich aber vielleicht auch noch nicht rausgefunden, wie es gut geht.

Dominik

Ich glaube, man kann das so mit Secret Alchemy extra Quarks machen oder so, aber ja,

Jochen

keine Ahnung.

Dominik

Das funktioniert noch nicht so ganz einwandfrei, aber da fehlt auch noch so ein bisschen Dokumentation.

Dominik

Das ist ja noch gerade relativ frisch.

Jochen

Ja, ja, ja, das gibt es ja gerade erst neu.

Genau.

Dominik

Und ja, also Migrations dazu kann man natürlich auch schön machen.

Dominik

Ja.

Dominik

Einfach mit, wie machen wir das?

Mit Almbi, glaube ich.

Dominik

Die heißen da, äh, wie heißt das?

Dominik

Nicht Migrations, sondern Revisions, Revisionen oder so.

Dominik

Und das Coole ist, wenn man dann quasi sein Management macht mit Typer, auch von Sebastian, dann hat man quasi auch seine Management-Commands direkt da mit drin, was das irgendwie alles ist.

Jochen

Ja, das verwende ich ja auch schon lang.

Jochen

Das werde ich jetzt auch seit über anderthalb Jahren schon.

Dominik

Ja, das verwende ich sogar auch mit Django, aber.

Jochen

Ja, verwende ich auch in Django, genau.

Jochen

Ich finde, verwende das dann meistens mit Poetry zusammen.

Genau.

Jochen

Und dann gibt es halt, da kann man Skripts definieren und dann sind die halt, ich meine, ich weiß noch nicht, ob das so hübsch ist, so ein Commands-PY habe ich die dann, das ist eine Funktion, die.

Dominik

Also ich finde das auch so.

Dominik

Also vor allen Dingen, du kannst das halt hinterher dann sogar in einem Notebook importieren, ja, und kannst halt dann bestimmte Sachen einzeln ausführen in deinem Notebook.

Dominik

Das heißt, du kannst die Management-Command sowohl auf der Kommandoteile als auch in deinem Notebook einfach laden und benutzen.

Dominik

Und das ist halt dann schon auch sehr cool, weil dann kannst du einfach mal on the flying User erstellen und das User-Create-Command hast du dann halt in den Commands zum Beispiel drin.

Dominik

Das gibt es ja zum Beispiel bei Dunkel natürlich mit inbound, aber das ist bei Fastup hier ein bisschen anders.

Dominik

Das ist schon cool.

Dominik

Ja, aber da hätte ich auch noch gleich mehr Fragen zu, weil da hatte ich ein Problem, das würde ich gerne mit dir besprechen.

Dominik

Da ging es halt genau über diese Shared Memory-Sache.

Dominik

Aber vielleicht machen wir nochmal mit Python 13 weiter.

Jochen

Genau, ich weiß nicht, wollen wir das schon inhaltlich nochmal structural.

Jochen

Ich habe gar nichts, ich meine, wir haben das ja schon mal besprochen, ich weiß gar nicht, ob man da jetzt nochmal was dazu sagen muss.

Jochen

Also man kann halt jetzt halt jetzt ein Match-Statement und dann kann man da halt irgendwie so Sachen auspacken und dann gucken, ob das darauf matcht und dann führt man halt dann also so ein bisschen wie ein Case-Statement auf Koks.

Speed.

Ich weiß nicht.

Jochen

Genau, und man kann da auch noch so Guards setzen davor.

Jochen

Das heißt, das fällt dann halt da so durch und dann kann man halt da noch ein If hinterschreiben und dann, je nachdem, ob die Bedingung erfüllt ist oder nicht, dann matcht es da halt rein oder halt.

Dominik

Jetzt muss ich kurz sagen, was ist ein Guard?

Jochen

Genau, also wenn man jetzt sagen kann, wenn man sagt, wenn man jetzt die Bedingungen hat, sozusagen, und man möchte aber zusätzlich noch irgendwie, und dann sagt man noch, wenn irgendeine andere Bedingung erfüllt ist, dann kann man hinterher hinten dran an den Ausdruck einfach schreiben, if irgendwas x gleich y oder so und dann läuft es da rein und dann, wenn das nicht so ist, dann läuft es halt weiter in den Default-File zum Beispiel.

Jochen

Oder halt.

Dominik

Okay, das ist der Gart.

Genau.

Jochen

Das ist halt auch nett, weil, ja, also ist es, ich habe noch nicht wirklich tolle Anwendungsfälle dafür, ehrlich gesagt.

Jochen

Das ist halt so ein

Dominik

bisschen zum Filtern von so Dingen, ne?

Dominik

Das war irgendwie mit If ist halt irgendwie sehr verschachtelt, da muss man tausendmal so redundanten Code schreiben und mit diesem Match Case, da kann man relativ schön gucken, was denn da übergeben wurde.

Dominik

So ein Command-Parser zum Beispiel kann man sehr schön mit Match Case, glaube ich, abbilden

oder so.

Jochen

Ja, vielleicht, wenn man irgendwelche Dinge parst.

Jochen

Das könnte man wahrscheinlich deutlich einfacher hinkriegen.

Jochen

Oder was ich mir auch vorstellen kann, ist das, wenn man halt so.

Dominik

Du hast zum Beispiel so einen generischen Endpunkt für irgendwas, da kommt irgendwas rein.

Jochen

Ja, aber das weiß ich nicht, ob das so eine gute Idee ist, das zu haben.

Dominik

Ja, du kannst zum Beispiel sagen, nur dann, wenn es ein bestimmtes Format hat, dann mache ich aber was mit, ansonsten schmeißt du einfach weg.

Jochen

Ja, genau, also das Einzige, wo ich praktische Dinge gesehen habe, also aber ich bin, ich meine, das kommt natürlich, also man muss jetzt müsste wahrscheinlich mal so in die Elixierwelt gucken oder so, da wird das ja irgendwie, ist das halt häufig eine Geschichte, die man da verwendet.

Jochen

Vielleicht gibt es da irgendwie ganz tolle Anwendungsfälle für.

Dominik

Da geht es häufig von Elixier, ich sehe immer das Buch in der EX-Kinse.

Jochen

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

Jochen

Ja, ich dachte, manchmal muss man es halt nicht nur rumliegen haben, sondern auch mal reingucken.

In einem Kopfkissen hilft am besten.

Jochen

Ja, genau.

Jochen

Oder halt irgendwie eine andere Sprache, die das halt kann, aber.

Dominik

Ich lege mir auch mal ganz viel Gold in das Kopfkissen, das laufen kann, ja.

Jochen

Ja.

Jochen

Aber irgendwie, ähm, genau, weil sich jetzt bei den Python, also der einzige Fall, wo ich das Gefühl habe, da ist etwas, das ist so ähnlich, und ist halt, wenn man jetzt in JavaScript im Frontend, da gibt es halt zum Beispiel React, so Redux oder so, so Eventsysteme hat.

Jochen

Und da hat man halt häufig auch so Dinger, die diese Struktur haben, dass man halt ein Case-Statement hat und dann wird das halt, je nachdem, was da passiert ist, man hat halt irgendwie ein Event, was da reinfällt und dann splittet man das halt auf und ruft dann entsprechend Funktionen auf oder updatet irgendwelchen State oder macht halt irgendwas.

Jochen

Und ein Kern von diesen Stores ist halt häufig ein großes Case-Statement irgendwie.

Jochen

Und das könnte man dann halt, in Python könnte man das dann auch so machen und halt eleganter mit dem Structural-Pattern-Matching.

Jochen

Das wäre jetzt so eine Anwendung, die mir einfallen würde, aber ansonsten pfff.

Dominik

Ja, du musst ja natürlich jetzt alle If-Statements durch Match-Case ersetzen, erstmal um zu testen.

Jochen

Das Problem ist halt auch, also wirklich so einfach nur so verwenden ist halt auch, weil man hat ja oft das Problem, dass man einen Code hat, der auch noch auf älteren Python-Versionen laufen soll.

Jochen

Und dann man kann das ja nicht einfach so, also man kann das in irgendeinem Projekt verwenden, das komplett neu ist oder so, weil das man Kontrolle hat, aber wenn das irgendwo, wenn jetzt zum Beispiel eine Library schreibt, dann kann man das nicht gut verwenden, weil dann müsste man ja sagen, geht erst ab 1.10 und.

Boah, das ist

dann halt Pech.

Jochen

Ja, gut, aber auch ein Ding, was ich daran so ein bisschen blöd finde, ist, wenn man das momentan irgendwo reinschreibt und lässt dann Black drüber laufen, dann geht das nicht.

Black mag das nicht.

Dominik

Nicht bei 3.10, Black.

Dominik

Nein.

Jochen

Nein, mit Black geht das noch nicht.

Jochen

Das heißt, Autoformat funktioniert nicht mehr, wenn man.

Dominik

Das kann ja gar nicht sein.

Jochen

Wenn man diese Drehwege.

Dominik

Ja, das muss doch schon gefegt sein, da muss da schon ein Pull-Request irgendwo zugeben.

Jochen

Ja, ja, das kommt bestimmt dann irgendwann, aber momentan geht es halt auch nicht.

Dominik

Okay, muss ich mir mal anschauen.

Jochen

Auch, auch, ah, das habe ich jetzt, war das Python Bytes-Podcast, ich weiß nicht genau, ob ich das gehört habe.

Jochen

Es gibt einen, äh, fand ich auch schön, weil man hatte ja immer so das Problem, wenn man Sachen kurz Basen umstellt auf Black, dass das dann halt so riesige Pull, also so riesige Dips erzeugt.

Jochen

Und das ist halt irgendwie Kacke, weil man dann halt nicht mehr sehen kann, wann irgendwas passiert ist, weil man landet immer bei diesem riesen Änderungsding.

Jochen

Da gibt es ein Projekt, das nennt sich, glaube ich, Darker.

Darka.

Jochen

Und das macht es quasi Black, aber immer nur für die Änderungen, die man.

Jochen

Also wenn man Code ändert, dann macht es sozusagen das gleiche wie Black, aber nur auf dem Div.

Jochen

So dass es halt immer so dunkler wird mit der Zeit.

Jochen

Aber das heißt, es ändert nur Sachen, die man eh angefasst hat, und das ist eigentlich auch eine nette Idee, eigentlich eine völlig offensichtliche Idee.

Aber ja.

Ja, okay.

Jochen

Ja, finde ich ganz faszinierend.

Jochen

Genau.

Jochen

Ja, Structural Pattern Matching, was haben wir denn noch?

Dominik

Ja, also die Industils sind deprecated.

Jochen

Ja.

Jochen

Oh, das ist mir auch.

Jochen

Und genau, Industils sind deprecated.

Jochen

Da ist auch ein Ding drin, das mir auf den Fuß gefallen ist.

Jochen

Also ich versucht habe, die Sachen dann, die ich so mache, mal zu gucken, ob das unter 13 auch läuft.

Jochen

Und da gibt es eine Abhängigkeit, die hat Wagtail.

Ja, aber.

Dominik

Ach, das schöne Wagtail, ja, das liebe ich auch so sehr.

Jochen

Das hängt ab von L18N, da heißt das irgendwie, das Paket und das ist halt irgendwie so ein.

Dominik

Ich dachte, das wäre ein I.

Jochen

Ja, nee, das macht so leicht was an.

Jochen

Ich weiß es genau macht, weiß ich gar nicht.

Jochen

Aber das ist halt auch so ein Ding, das ist halt irgendwie, also zwei Stars auf GitHub irgendwie von irgendjemandem.

Jochen

Und davon hängt Wagtail hängt davon ab.

Jochen

Und da das Ding verwendet im Setup-PY-Skript, irgendwo ein B-Dist Win-Inst oder sowas.

Jochen

Und das ist in Python 3.8 deprecated worden und in 3.10 ist es rausgeflogen.

Dominik

Okay.

Jochen

Und deswegen baut es nicht mehr.

Jochen

Das heißt, man kann unter 3.10, Python 1.10, Wagtail nicht mehr installieren.

Was halt so ein bisschen Kacke ist.

Jochen

Und ja, das ist halt ja, ich habe da mal einen Pull-Request gemacht, mal gucken, aber das ist halt ja schon ein bisschen, vielleicht ist diese Abhängigkeit nicht so toll.

Dominik

Ja, also da, wo wir gerade so blöden Abhängigkeiten sind mit Python 13 kaputt gehen, möchte ich jetzt nochmal auf das Python 32-Problem gehen, weil Python 32 ist unter Windows relativ wichtig, weil das halt relativ oft gebaut wird für bestimmte Sachen, um die zum Laufen zu lassen.

Dominik

Das heißt, ohne Python 32 gibt viel von Python Wheels bauen nicht.

Dominik

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

Dominik

Und die Abhängigkeit, die viele Projekte haben, ist sowas wie Python 32301.

Dominik

Das gibt es aber jetzt im Moment nicht für 3.10 und auch nicht für 3.8.

Dominik

Keiner weiß warum, die Wheels werden irgendwie nicht richtig bei Python ausgeliefert.

Dominik

Ich glaube, der Maintainer ist auch so ein bisschen, ich sag mal vorsichtig, sperrig, was das angeht.

Dominik

Ja, und das ist halt blöd, weil du kannst halt das dann keine Projekte mehr installieren oder Poetry geht nicht mehr oder so.

Dominik

Und das ist halt extrem ätzend für Leute, die über Windows entwickeln.

Dominik

Und was man aber machen kann, also ich habe einen kleinen Workaround gefunden, man installiert einfach Python 32301.1.

Dominik

Also auch irgendwie komische Varianten.

Dominik

Die Versionen gehen von 2 irgendwas rauf, weil 200 auf 301.

Dominik

Dann kommt dann 301.1.

Dominik

Warum?

Dominik

Na gut, vielleicht ist so irgendwann zu manche Versioning reingeflogen, ich weiß es nicht.

Dominik

Es ist auf jeden Fall seltsam.

Dominik

Und naja, man kann dieses 301 manuell installieren und dann, ähm, es ist ein bisschen hacky, einfach in das Side-Packages-Verzeichnis gehen und im Manifest die Version von 301.1 auf 301 ändern.

Dominik

Und dann denkt tatsächlich unter dem Foldernamen umbenennen auf von 301.1 auf 301 und dann denkt tatsächlich, ja, Pip, dass das vernünftig installiert ist und fragt nicht mehr.

Dominik

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, aber anders gehen bestimmte Sachen da leider nicht zu fixen.

So, das ist ein bisschen blöd.

Jochen

Okay, ja.

Jochen

Ja, ja, also da sind.

Dominik

Wenn es so ein wichtiges Paket gibt, was dann so Maintaining auf einmal nicht mehr stattfindet und so, das ist schon anstrengend.

Jochen

Ja, das ist schon fies.

Jochen

Also mir ist auch wieder, jetzt bei dem Upgrade, also einmal im Jahr fällt einem das dann auf.

Jochen

Mindestens, wenn es halt eine neue Python-Version gibt.

Jochen

Aber bei den Minor Versions, Updates von Python 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 Rectail per Pip installiert, dann funktioniert es immer nicht.

Jochen

Mir ist es halt auf die Füße gefallen, weil ich es per Poetry installiert habe.

Jochen

Und Poetry macht halt was anderes als Pip.

Dominik

Ja, es taggt auch noch die Side-Denancies

und so.

Jochen

Und ja, aber und das macht halt, und es guckt sich halt dann teilweise die Setup-UI an und so.

Ja.

Jochen

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

Jochen

Wenn Pip, wenn dann ein Real ist, dann installiert es halt stumpf das Real, das funktioniert dann.

Jochen

Wenn man halt nicht auf Windows ist.

Jochen

Und ja, Poetry macht das halt nicht und dann geht es halt schief, weil dann irgendein Import nicht mehr funktioniert oder so.

Jochen

Und Poetry macht sowieso komische Sachen teilweise.

Dominik

Im Moment, ich bin auch so ein bisschen, also die Werden 1.2, habe ich gesehen, ist gar nicht so schlecht.

Dominik

Die haben einfach umbestellt, dass Installation.

Dominik

Das heißt, ich muss auch in den Docker-File so bei von GetPoetry auf Inside-Pooletry umstellen und so.

Dominik

Und dann funktioniert es aber auch noch nicht so richtig überall.

Dominik

Und dann das Update auf 1.2.

Dominik

Also es gibt ja so ein Safe-Update mit der neuesten Version, da kann man jetzt halt Safe-Update machen, muss nicht mehr irgendwie jedes Mal neu das vom GitHub versuchen.

Dominik

Das funktioniert

Jochen

schon mal ganz gut auch, ja.

Dominik

Ja, aber das funktioniert halt dann noch nicht so richtig.

Dominik

Und dann, dass die Piv-Version, die schützen wir und nicht ausprobiert, einfach ab und so.

Dominik

Und naja.

Jochen

Ja, ja, also ich muss sagen, also das, also Poetry ärgert mich in letzter Zeit auch irgendwie.

Dominik

Ich verstehe gar nicht warum.

Dominik

Zwischendurch lief es wirklich gut.

Dominik

Einwandfrei, irgendwer hat er irgendwas, kaputt gecodet.

Jochen

Ja, ich weiß es nicht so genau, aber es ist, also ich meine, ich bin ja bereit anzuerkennen, dass das halt auch nicht so ein ganz einfaches Problem ist.

Jochen

Aber irgendwie läuft es nicht rund und jetzt auch nach dem Update, also natürlich, so die üblichen Kandidaten, das funktioniert alles wieder nicht.

Jochen

Also, also ich glaube auch Poetry hatte mit 3.10 auch Probleme irgendwie.

Jochen

Da ist auch irgendwas, hat er nicht so richtig funktioniert.

Jochen

Aber halt Numpai und so, das funktioniert natürlich auch nicht.

Jochen

Und ich meine, gut kann man verstehen, es dauert ein bisschen, bis da die Wheels und die Binaries da sind, aber ja, also richtig rund ist das alles irgendwie nicht.

Dominik

Ich warte am meisten bei wichtigeren Sachen auf 3-1, 2-3-2 oder sowas.

Jochen

Ja, aber ich meine.

Jochen

Vielleicht sollte man tatsächlich hingehen und das einfach vorher schon mal ausprobieren und dann gucken, wo es kracht und dann da halt versuchen, so ein bisschen zu helfen.

Jochen

Ich meine, das ist wahrscheinlich irgendwie hilfreicher, als wenn man nur Mac hat, aber.

Dominik

Ja, eigentlich schon.

Dominik

Ja, ich habe mit dem Pivon.

Dominik

Ich muss das eigentlich mal irgendwo hinschreiben, aber naja.

Dominik

Ja, jetzt kommt Werbung.

Jochen

Was haltet ihr eigentlich von Werbung?

Hier.

Dominik

3.11 haben wir noch was zu.

Dominik

3-11?

Dominik

Weil das ist ja so.

Dominik

3-11 kommt jetzt ein bisschen.

Jochen

Ja, 3-11 ist Main Brown sozusagen bei Python.

Jochen

Ich glaube, was da ganz interessant ist, ich weiß es gar nicht, also eben ja, da gibt es auch Verbesserungen, wenn man jetzt Fehler hat.

Jochen

Weitere, genau, aber es gibt auch noch, es soll jetzt mit 31, was da habe ich jetzt letztens irgendwie, gab es da auch ein Podcast-Interview mit Guido zu, was denn jetzt so alles ansteht zur Performance-Optimierung und Unterwerbung.

Dominik

Oh, da gab es noch ein schönes Artikel, einen Blogpost von Marc Shannon zu, ein Interview.

Jochen

Ja, Marc Shannon, genau, der hat beschäftigt sich mit ja jetzt auch schon wahnsinnig lange, aber den habe ich nicht gesehen, den müsste ich mir immer, muss man mal schicken, weil dann gegangen.

Jochen

Jedenfalls, genau, Kilometer auf, genau, in die Richtung geht das halt und da wird jetzt viel dran gearbeitet und da gibt es jetzt erstmal so Basisgeschichten für in 311.

Jochen

Bis das sich wirklich auswirkt, wird das alles noch ein bisschen dauern.

Jochen

Aber was halt dann in 311, glaube ich, also wird es auf jeden Fall die Infrastruktur dafür geben, dass halt Funktionen sich zum Beispiel, also eines der Probleme bei Python ist halt Funktionen langsam aus diversen Gründen.

Jochen

Also einer der Gründe ist halt, dass sie halt sehr, dass man ja nicht einfach, wenn man jetzt sagt, eine Funktion, die nur zwei Zahlen addiert oder so, kann man halt nicht sagen, ja, man addiert den Kram und gibt das zurück, sondern so, da muss halt viel Kram geprüft werden.

Jochen

Also es kann halt alles Mögliche sein.

Jochen

Es kann ja halt nicht nur sein, dass das was anderes ist.

Jochen

Es kann sein, dass das Überladen wurde und weiß der Teufel.

Jochen

Und jetzt der Plan, sozusagen, wie man damit, wie man das besser hinkriegt, ist zu sagen, man kann das spezialisieren.

Also wenn der Interpreter könnte zum Beispiel bemerken, okay, jetzt diese Funktion ist tausendmal aufgerufen worden und zwar immer nur mit Integer, jetzt ersetze ich die Funktion, die da aufgerufen wurde, halt durch eine schnelle Funktion, sozusagen, also anderer Beikode, der halt nur Integer macht.

Jochen

Ja, so sonst nichts.

Jochen

Und das geht dann halt viel schneller.

Jochen

Und das Problem dabei, was das halt schwierig macht, ist, dass wenn jetzt das schief geht, wenn er jetzt plötzlich dort und doch ein Float reinkommt oder so, dann muss es irgendwie wieder, trotzdem, muss es trotzdem funktionieren.

Jochen

Und wenn das häufiger passiert, weil das dann besonders ätzend ist, performance-technisch, muss dann halt auch diese Optimierung wieder rückgängig gemacht werden, wenn halt sozusagen der normale Bytecode besser gewesen wäre.

Dominik

Oder ja genau, dass die Vorversion gecached sein.

Jochen

Das macht es alles ziemlich kompliziert.

Jochen

Und dann eine Geschichte, die mir nicht so klar war, das fand ich auch interessant, ist, dass halt die Frame-Objekte gibt in Python.

Jochen

Also wenn man eine Funktion aufruft, dann wird es dann erstmal so ein Frame-Objekt erstellt.

Jochen

Oh je.

Dominik

Ja, das muss man auch erklären.

Jochen

Ich würde sagen, ja, letztlich so ein Stack-Frame, das war dann schon sehr maschinennah.

Dominik

Ein Stack-Frame.

Jochen

Ja.

Jochen

Also letztlich in Python ist das Frame-Objekt sowas, da steht halt drin, welche Globals es gibt, welche Locals es gibt, was das Code-Objekt ist, so Zeugs.

Dominik

Also quasi der aktuelle Namespace quasi, das dickt, in dem quasi drinsteht, was alle gerade aktuell ist.

Jochen

Also sozusagen alles, was man braucht, halt, um so diese Funktion auszuführen.

Letztlich.

Jochen

Und es ist ja auch gut, das zu haben, wenn man jetzt zum Beispiel einen Code debuggt oder so, dann ist es halt total praktisch, wenn man das halt direkt alles nachgucken kann und wenn man es auch ändern kann und so.

Jochen

Auf der anderen Seite, wenn man jetzt, wenn Code wirklich ausgeführt ist, dann braucht man das nicht unbedingt.

Jochen

Und die Dinger werden halt auch dynamisch adoziert, halt sowieso alles dynamisch, und dann hat man halt den ganzen Heap folge, wenn man jetzt viele unterschiedliche Funktionen aufruft, hat man jetzt den ganzen Heap vollgesprenkelt mit diesen Dingern.

Jochen

Und das macht halt alles irgendwie langsam.

Jochen

Und jetzt, also eine Optimierung, ich weiß nicht, ob das kann auch sein, dass das eine von denen war, die Marc Shender vorgeschlagen hat, ist halt zu sagen, man adoziert irgendwie erstmal eine ganze Reihe von den Dingern, packt die irgendwo hin und dann nimmt man die halt und nicht nur nicht so komplette Objekte, sondern für das halt, wenn das ausgeführt werden soll, dann sind das halt einfach nur Structs und die liegen da an einer bestimmten Stelle und die müssen, das wird, und das ist halt ein Speichert dann lokal und keine Ahnung, also seine Performance ist besser und nur wenn man es die buggt, verwendet man halt halt diese vollen Fra

Jochen

me-Objekte, die halt man dann sonst normalerweise immer hat.

Dominik

Und was ist denn Struct?

Jochen

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

Jochen

Datenstruktur quasi mit mehreren, die halt ja aus mehreren Sachen besteht, nicht nur irgendwie einso man halt diese grundlegenden Datentypen, sowas wie Integer, Float, ja, so Character und ein Struct kann dann zum Beispiel, weiß ich nicht, ein Character-Array haben und einen Float und ein Int oder so.

Jochen

Und dann der, genau.

Dominik

Also ein komplexer Datentyp in C quasi.

Dominik

Sowas wie ein Base-Modell.

Jochen

Ja.

Jochen

Es ist halt kein Objekt, aber auch die Art, wie man dann Objekte in C implementiert, aber ja.

Jochen

Ja, da braucht man halt noch Pointer auf die Funktionen, die das Ding hat und so.

Jochen

Aber ja, genau, also das ist jetzt dann.

Jochen

Aber genau, was ich auch noch interessant fand, so an Meta-Geschichten zu dieser Performance-Optimierungsgeschichte, ist halt, dass Gedo da so ein bisschen drüber erzählt hat, was ich muss den, genau, den Link auf die Episode muss ich auch nochmal in die Show Notes packen.

Jochen

Was bisher immer so schief gelaufen ist.

Jochen

So PiPi hat ja nicht so richtig, muss man leider sagen, wahrscheinlich nicht so richtig funktioniert.

Jochen

Und der Grund ist halt, dass ja aus seiner Perspektive das ist, sie haben halt ein Problem gelöst, aber das schwierige Problem halt nicht.

Jochen

Und das ist halt, wie kriegt man das so hin, dass es schneller wird, plus dass die ganzen C-Extensions halt noch funktionieren.

Jochen

Das ist ja auch mal genau das Problem.

Jochen

Also Pipei ist halt natürlich, es macht so ein bisschen Just-in-Time.

Jochen

Wobei kann man auch nicht so richtig sagen.

Jochen

Also Just-in-Time-Compilation ist halt auch so ein schwieriger Begriff.

Jochen

Aber es macht halt irgendwie dein Python, die Ausführung von deinen Python-Code deutlich, deutlich schneller.

Jochen

Nur das Problem ist halt, die ganzen C-Geschichten funktionieren dann halt nicht mehr.

Jochen

Und das ist natürlich ein großes Problem, weil das ist halt das, wo du normalerweise deine Performance-Gewinne herbekommst.

Jochen

Also wenn ich halt Sachen in NumPy mache, dann statt mit Python-Listen oder so, dann ist das natürlich viel, viel schneller.

Jochen

Und ja, das geht dann halt so nicht mehr, wenn man halt PyPy verwendet.

Jochen

Daher macht das alles keinen großen Sinn.

Jochen

Und diese Geschichten sind halt nie, es ist halt vielleicht auch einfach nicht lösbar und daher ist das einfach nicht funktioniert.

Jochen

Und sie haben halt große Schwierigkeiten, irgendwie up-to-date zu bleiben, weil sich natürlich auch immer alles ändert.

Jochen

Irgendwie mit neuen Python-Versionen und dann ändert sich halt auch die C-API und so und es ist alles nicht so einfach.

Jochen

Jedenfalls, dieser Weg hat halt nicht so richtig funktioniert irgendwie.

Jochen

Und dann gab es ja noch ein paar andere Wege, es gab noch Pisten und es gab noch irgendwie Sachen.

Jochen

Momentan gibt es auch noch.

Jochen

Ich glaube, da gab es nicht nur, das gibt es auch wieder.

Jochen

Gab es bei Microsoft noch Leute, die das versucht haben, auf der .NET-Runtime irgendwie laufen zu lassen.

Jochen

Die machen auch irgendwie lustige Sachen.

Dominik

Aber was ist denn Pisten?

Jochen

Ja, auch ein Projekt, was halt so eine Art, lass mich lügen, ich weiß es jetzt gar nicht genau, was sie an Optimierung gemacht haben.

Jochen

Es gab auch vorher schon schon so ein paar Sachen, wie hieß denn das noch?

Jochen

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

Jochen

Naja, also es gab auf jeden Fall schon so ein paar Versuche, da die Sachen schneller zu machen, aber das alles, wenn das halt darauf hinauslief, dass es halt irgendwie anders funktioniert als C-Python, Bytecode, dann ist es halt nicht gut, so richtig, weil ja, das ist halt dann doch, weil das Problem ist, dass viele, viele Sachen, die halt da dranhängen, gehen dann halt nicht mehr.

Jochen

Unter anderem die ganzen C-Extensions.

Dominik

Was man dazu führt, also es gibt ja noch Alternativen vielleicht dazu.

Dominik

Also ich habe jetzt schon 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, ist das eine Geschichte, die also einmal Extensions in Rust schreiben und nicht in C, das ist eine interessante Geschichte.

Jochen

Und natürlich, was auch unter Umständen interessant wäre, halt vielleicht einen Interpreter zu schreiben, der halt nicht in C ist, sondern in Rust, aber das ist natürlich noch ein weiter Weg.

Jochen

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

Dominik

Deswegen muss man alles zwar neu schreiben, aber ja.

Jochen

Man muss halt so ziemlich alles neu schreiben, was halt ein bisschen schwierig ist.

Jochen

Aber wenn es, wenn man das denn kriegt, dann könnte man das halt auch, da man Rust halt irgendwie nach WebAssembly irgendwie kompilieren kann.

Ja, klar.

Jochen

Könnte man das halt in den Browser bringen.

Jochen

Dann hätte man halt, das wäre natürlich schon nett.

Dominik

Dann könnte man einfach im Browser dann Python ausführen.

Jochen

Ja, aber das ist alles noch sehr weit weg.

Dominik

Der muss halt einfach nochmal neu schreiben, dass halt noch ein bisschen wie Strecke runterziehen.

Dominik

Wenn man Leute entwickelt, finden, die auch gut Rust können und so, das ist auch nicht so einfach, gibt es ja auch noch nicht so ewig.

Dominik

Und das dann eine Kombination, dann muss er das dann in Rust sich dann auch wieder entwickeln, die ganzen Fehlerchen dann weg rum.

Dominik

Ja, ja.

Dominik

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

Dominik

Also es könnte doch deutlich schneller sein als noch in C.

Dominik

Sicherer auch als in C.

Jochen

Ja, ja, klar.

Jochen

Also es ist auf jeden Fall sehr interessant.

Ich bin gespannt.

Jochen

Aber genau, um mal wieder den Bogen wieder zurückzukriegen, also das Guido hat ja jetzt angefangen, wieder, also der war ja im Ruhestand, ist er wieder zurückgekommen und hat jetzt da so ein Team bei Microsoft und das ist auch komisch, dass er nie gedacht hat, also ja, aber so ist es halt.

Jochen

Schon irgendwie, ja, ist jetzt wieder cool.

Jochen

Und genau, der widmet sich da jetzt hauptsächlich irgendwie Python-Performance und das natürlich auch schon mal, aber es wird halt noch ein bisschen dauern, auch bis er sich das dann wirklich auswirkt.

Jochen

Aber wir können wahrscheinlich damit rechnen, dass halt in den nächsten Jahren Python halt nochmal ein gutes Stückchen schneller wird.

Jochen

Und das ist auch schon mal eine schöne Sache.

Dominik

Ja, ja.

Ja.

Jochen

Genau, ich weiß nicht genau, hatten wir sonst noch irgendwas zu Python?

Jochen

13 oder 31 haben wir jetzt gebracht.

Dominik

Also ja, drei Besser Facepacks haben wir auch schon gesagt.

Dominik

Ja.

Dominik

Das sieht wirklich schick aus jetzt.

Dominik

Das heißt, man kann die wirklich mal lesen.

Das macht einen Sinn.

Dominik

Das ist schon gut, ja.

Dominik

Also ja, ich glaube, News gibt es halt noch ein bisschen in Django vielleicht.

Jochen

Ja, Django, da gibt es jetzt auch eine Alpha-Release von Django 4, das habe ich auch mal ausprobiert.

Jochen

Geguckt, was dann alles so kaputt geht.

Dominik

Und was geht kaputt?

Jochen

Ragtail zum Beispiel.

Ach so,

Dominik

so eine Überraschung.

Jochen

Ja, und noch so ein paar andere Sachen.

Jochen

Also, ich meine, meine Lieblingskandidaten für irgendwie was Sachen geht schief, sind ja auch mal so die ganzen Commands-Zeugs, weil das halt auch nur noch so marginal maintained ist.

Jochen

Irgendwie Threaded Commands, Fluent Commands, Control-Commands, Control-Commands, glaube ich sogar halbwegs gut maintained.

Jochen

Da gab es auch im Mai oder so wieder eine Version, war aber Fluent-Commands und Shredded-Commands vor allen Dingen eher nicht so.

Jochen

Und genau, Threaded Commands ist halt auch kaputt gegangen.

Jochen

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

Jochen

Und dann Wagtail ist auch kaputt gegangen.

Jochen

Da habe ich dann auch einen Pull-Request irgendwie gemacht.

Jochen

Der ist auch, dann habe ich mich nicht mehr drum gekümmert, weil ich keine Zeit hatte.

Jochen

Und dann ist er irgendwie so halb durchgegangen.

Jochen

Das ist mir, das ist ehrlich gesagt ein bisschen peinlich, weil ich habe da irgendwie nur sowas hingerotzt und dann kamen da noch so Anmerkungen und was ich noch tun könnte und so.

Jochen

Und ich habe einfach nicht mehr reagiert und dann hat da irgendjemand dann irgendwie Teile davon einfach so gemercht und waren halt dann drin.

Jochen

Aber es ist irgendwie, ehrlich gesagt, sehr schlampig von meiner Seite aus.

Jochen

Aber ja, also

Dominik

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

Jochen

Ja, aber prinzipiell geht Wagtail mit Django 4.

Jochen

Also das funktioniert schon.

Jochen

Also man muss da gar nicht so wahnsinnig fühlen.

Dominik

Prinzipiell schon, wenn man noch.

Jochen

Also es gibt zwei Dinge, die nicht funktionieren.

Jochen

Das eine ist zwar aus Quote verwendet, das hat sich irgendwie geändert.

Jochen

Das war früher in Django selber drin.

Jochen

In Django 4 fliegt das raus, ist sowieso schon deprecated.

Jochen

Und das bedeutet, man muss jetzt aus vom Urlaub Pass-Import-Quote sagen, statt das aus Django zu importieren.

Jochen

Also weil das jetzt halt in der Python-Standard-Bibliothek genau das gleiche macht wie halt vorher in Django und das musste man ändern.

Dominik

Oder wenn man URLs-Qoten meinst du, also um irgendwie so Sachen rauszubekommen, oder?

Jochen

Ja, genau, um zum Beispiel irgendwie das halt ein Dikt oder so.

Ja, okay.

Jochen

Dann willst du das halt in URL-Parameter verwandeln.

Jochen

Ich weiß gar nicht jetzt genau, unter welchen Bedingungen man das jetzt wie verwendet, aber ja, genau, also es ist halt so, dass das aus irgendwas, was nicht halt in der URL stehen kann, was machen wir es halt da drin stehen kann.

Jochen

Ja.

Jochen

Und dann eine andere Geschichte ist genau, da ist so ein Is-Ajax, Requestpunkt is-Ajax ist rausgeflogen und das wurde in RecTile halt auch verwendet.

Dominik

Das wird relativ viel verwendet auch irgendwie, ne?

Dominik

Von ist Agect, ja.

Und warum ist das nochmal rausgeflogen?

Dominik

Da gab es irgendeinen

Jochen

Grund für.

Jochen

Der Grund ist, dass die Überprüfung, ob das jetzt Ajax ist oder nicht, so ein bisschen darauf basiert, dass das von jQuery aus aufgerufen wird.

Jochen

Also weil jQuery macht da irgendwelche, also ich glaube, also es setzt halt irgendeinen Header.

Jochen

Also sowieso, es macht, glaube ich, nicht mehr, als irgendeinen Header zu überprüfen, ob der gesetzt ist.

Dominik

Das ist nicht die richtige Methode, man soll direkt gucken, ob der Header drin ist einfach.

Jochen

Genau, das ist halt der empfohlene Workaround, das einfach ersetzen durch, ist der Header da drin oder nicht?

Jochen

Genau, das habe ich dann in Wacte auch gemacht.

Jochen

Aber insgesamt hieß es halt so in den Django-Dokumentationen dazu, ja, also das ist sowieso nicht so toll, das darüber zu machen, weil das ist halt jQuery-spezifisch.

Jochen

Und jQuery ist auch so auf dem Weg nach draußen und die meisten verwenden halt inzwischen Fetch in JavaScript, die Fetch-API.

Jochen

Und die macht das sowieso irgendwie anders.

Jochen

Und das heißt, das heißt, das ist ein bisschen nutzlos, ja.

Jochen

Das ist Ajax, das liefert halt einfach nicht mehr die richtige.

Jochen

Es ist ein Ajax-Call, ja, aber das kommt halt am Server so nicht an.

Jochen

Beziehungsweise den Header zu überprüfen, ist so ein bisschen sinnlos und weil das halt irgendwie nur von jQuery gesetzt wird.

Jochen

Das heißt, im Grunde muss man das streichen, weil das funktioniert so nicht mehr.

Jochen

Und dann die andere Geschichte ist halt auch so, ja, wozu das überhaupt überprüfen?

Jochen

Das ist auch irgendwie Quatsch, weil, naja, oder genau, das ist halt empfohlen, was man dann überprüfen soll, weil was möchte man eigentlich machen oft und möchte halt so etwas machen wie, ja, wenn da jetzt ein Browser auf die URL geht, zum Beispiel, und dann halt sonst JSON kriegen würde, dann will man dem nicht einfach JSON schicken, sondern vielleicht eine HTML-Fehlermeldung, so, äh, hallo, geh bitte nicht mit dem Browser hier hin, sondern geh lieber da hin, weil hier gibt es eine JSON, sowas.

Jochen

Und dafür muss man halt eine Fallunterscheidung machen.

Jochen

Und da sollte man doch lieber auf Request.accept gucken, ob das Ding jetzt zum Beispiel HTML, äh, Text.html haben will oder so.

Jochen

Wenn es Text-HTML haben will, dann sagt man halt hier so, hier Fehlermeldung, ich gebe eigentlich nur JSON zurück, ich kann gar nichts anderes als JSON.

Jochen

Und das ist halt dann besser.

Jochen

Das funktioniert dann in jedem Fall eigentlich, sozusagen, egal welche, wie der Request gemacht wird von der Kleinseite aus, ob über Fetch oder jQuery.

Jochen

Genau, das ist halt das, worauf man dann langfristig migrieren sollte, kurzfristig, wenn man es.

Jochen

Weil es ist Ajax ist halt weg.

Jochen

Mit Django 4, ja.

Jochen

Genau, aber ansonsten hat relativ reibungslos funktioniert.

Jochen

Also Django 4 funktioniert bei mir schon relativ problemlos.

Jochen

Und ja.

Dominik

Also Time-Zone-Info haben sich so ein paar Sachen, glaube ich, geändert, wenn man die Fragen hat.

Dominik

Also die hat ja, weiß ich, Python, wann hat das noch umgeschlecht?

Dominik

Drei irgendwas.

Dominik

Dass irgendwie Zone-Info jetzt neu in der Spieler.

Jochen

Ich weiß nicht, ob das bei Python 3.9 drin war, dass das jetzt ein neues gewandert ist, ja.

Dominik

Genau.

Dominik

Genau, und da kann man ja wahrscheinlich mehr machen als PyTZ, das irgendwie raus soll irgendwann.

Ja.

Dominik

Genau, und das ist ja vielleicht ganz interessant noch.

Dominik

Auch ein schönes neues Feature.

Dominik

Ja, und ansonsten die anderen Sachen, ehrlich gesagt, oh, es gibt ein Standard-Redis-Cache-Backen jetzt, das muss man nicht mehr extra dazu packen.

Dominik

Aber gut, keine Third-Party-Library, aber.

Ja, also ich meine, ändert sich da nicht so viel dran, weil, ja, ich meine, man konnte es ja auch bisher schon alles verwenden.

Jochen

Also das war, gibt es eine Umfrage, die sie irgendwie gemacht haben, wer verwendet denn, was verwenden denn die User denn so für Caching-Backends und Memcache, die ist halt drin in Django, da muss man nichts zusätzlich installieren.

Jochen

Und dann kam in der Umfrage raus so, oh, die Leute verwenden aber alle Riders und nicht Memcache die.

Jochen

Und ja, das ist halt nicht drin, das heißt, alle müssen nochmal irgendwie Zusatzkram installieren.

Dominik

Oh, das bringt mich fast schon zu meiner nächsten Frage, weil das da so ein bisschen daran anschließt.

Dominik

Aber das, ja, vielleicht stellen wir das noch kurz zurück.

Dominik

Wir machen Werbungdödel.

Dominik

Wieder ein bisschen.

Dominik

Ja, dann sind wir fertig denn tatsächlich mit Python Dango und News, hast du noch gesagt?

Jochen

Nee, lass mal überlegen.

Jochen

Nee, doch, also mit den News auf jeden Fall, aber genau, ich habe noch so ein paar, ach, weiß nicht, ob ich das auch eine News, Cycit Learn, es hat eine Version 1.0.

Ah, mhm.

Jochen

Das war ehrlich gesagt schon relativ lange stabil, aber jetzt hat sie auch tatsächlich irgendwie eine Version.

Dominik

Ja, offizielle 1.0 Version, ja, okay.

Jochen

Major Versionsnummer, was eine tolle Geschichte ist, ja.

Jochen

Super Projekt.

Jochen

Genau.

Jochen

Ja, das ist auch so das Beispiel.

Jochen

Ich habe letztens, genau, gab es Lex Friedman, der der Gründer von Anaconada und von der Travis Olephant, der hat auch NumPy, SciPi, SciPi hat er zuerst, wusste ich auch nicht was.

Jochen

Fand ich auch interessant, SciPi zuerst entwickelt und dann NumPy kam später dazu, weil man Numeric und wie ist das andere Ding, NumArray irgendwie zusammenfassen musste, weil es gab zwar eben diese beiden unterschiedlichen Implementationen, dann ist daraus halt NumPy geworden.

Jochen

Der erzählt halt da auch so ein bisschen und da, der halt hat dann ScikitLearn als so beispielhaftes Projekt, wie das hätte laufen sollen, eigentlich dann erwähnt und ein ganz tolles Projekt.

Jochen

Ja, also Csicit Learn, wirklich voll gut.

Jochen

Es gibt auch noch CircleIvinch und noch ein paar andere.

Jochen

Aber Circit Learn ist eigentlich so das große Ding, was dabei rausgefallen ist.

Jochen

Ja, voll gut.

Jochen

Was haben wir noch?

Tja.

Jochen

Oh, es gab eine Sicherheitslücke.

Jochen

Das ist jetzt gar nichts mit Python zu tun.

Jochen

Ich fand das nur deswegen interessant, weil es halt so eine Geschichte ist, die etwas illustriert, was man, wenn man das einfach so erzählt, oft ist das nicht so ein bisschen intuitiv, aber das ist halt ein sehr schönes Beispiel dafür, weil ich habe halt oft das Gefühl, dass ja es sozusagen die Ansicht gibt, dass man Sicherheit irgendwie dadurch herstellen kann, dass man zusätzlich Dinge tut oder Dinge erweitert oder so.

Jochen

Also man, man, weiß ich nicht, kauft irgendetwas, was dann halt Sicherheit macht.

Jochen

Oder man installiert zusätzliches Zeug, das dann Sachen sicherer machen soll oder so.

Jochen

Und ich habe da immer so ein bisschen Bedenken und ich habe das Gefühl, dass das geht eigentlich gar nicht, sondern eigentlich kriegt man also wirklich Sicherheit nur dadurch, dass man Sachen weglässt, weil alles, was halt irgendwas tut, hat halt irgendwie redet halt macht halt die Angriffsoberfläche größer.

Jochen

Und das ist halt ein Problem und jetzt hat es halt einen so ein Ding erwischt und das fand ich interessant.

Dominik

Was für ein Ding hat es denn überhaupt?

Fail to ban.

Fail to Ben.

Jochen

Das ist halt irgendwie so ein Ding, was man sich zusätzlich zu SSH installiert und das dann halt irgendwie sich anguckt, was da passiert und dann halt zum Beispiel den Port zumacht.

Jochen

Oder sonst irgendwie was.

Jochen

Und das hatte jetzt, äh, ich meine, die Auswirkungen davon sind nicht ganz so schlimm, weil aber was das Ding gemacht hat, ist halt, ist halt halt, wenn er irgendwas, äh, wenn er jemand irgendwie an diesem SH-Port rumgespielt hat, hat es halt dann irgendwann ein Hues auf die IP, von der diese Login-Versuche kommen, gemacht, sich halt die Informationen rausgeholt und das dann per Mail irgendwie an den Admin geschickt.

Dominik

Okay.

Jochen

Kind jetzt erstmal noch nicht so schlimm.

Jochen

Das Problem ist, da war eine so eine Shell-Escape-Lücke im Mail erzeugen.

Jochen

Das heißt, das hat irgendwie den Text aus dem Huis genommen, dann irgendwie in die Mail und das hat ein paar Kommandozeile übergeben an das Ding, was

Dominik

die Huho ist, konntest du modifizieren.

Jochen

Das heißt, wenn du das Hu-S kontrollieren konntest, konntest du da halt dann irgendwie durch so Bactick irgendwie weißer Teufel irgendwie Spielereien, das Ding dazu bringen, einen beliebigen Code auszuführen.

Jochen

Und dann konntest du halt einfach eine Rutsche aufmachen.

Dominik

Also einige Leute passiert sowas ausnahmsweise, aber ich habe, da muss ich jetzt auch noch eine kurze andere security-relevante Geschichte erzählen.

Dominik

Und zwar, ihr wisst ja, manchmal mache ich auch ein bisschen Azure.

Dominik

Und da war was ganz Tolles dabei.

Dominik

Und zwar hat das, glaube ich, weiß nicht so was wie 2,5 Millionen Kunden betroffen oder so, war auch gar nicht so relevant.

Dominik

Jedenfalls alle Leute, die halt Linux-VMs bei Azure hosten, was ja man ja macht.

Dominik

Ich habe nämlich schon ein paar Mal gewundert, warum die irgendwie komischen Windows-Fehlermeldungen abstürzen.

Ich dachte so, hä, das kann doch nicht.

Dominik

Die laufen halt tatsächlich auf irgendeinem Windows drauf.

Dominik

Und was halt da irgendwie drumrum ist, ist halt irgendwie so ein Rapper und Microsoft macht da irgendwelche Service-Prozesse irgendwie auf.

Dominik

Und man kann irgendwie auf einen Endpunkt einfach diesen Microsoft-Service-Endpunkt ansprechen.

Dominik

Und dann musste man halt dann sich authentifizieren, damit man da irgendwie Service-Prams machen darf.

Dominik

Und ganz besonders cool, weil es ist 2021, wie das sowas irgendwie möglich ist, weiß man nicht genau.

Dominik

Aber wenn man jetzt die Credentials als Fight angegeben hat, gibt es halt einen Denied.

Dominik

Und was passiert, wenn man gar keine Credentials angegeben hat?

Jochen

Ja, dann war alles gut.

Dann war Rut.

Einfach so.

Dominik

Ihr habt ja gesagt, okay, die Credentials, okay, muss wohl gut sein, ist wohl ein Admin.

Dominik

Dankeschön.

Dominik

Und ja, tatsächlich, diese Lücke war tatsächlich einfach da und einfach offen.

Dominik

Das heißt, wenn du diesen Endpunkt kennst von der Applikation, konnte sich einfach ohne Credentials anmelden und da hast einen Route auf diese ganze Applikation bekommen.

Dominik

Und es war völlig egal, was du gemacht hast, weil halt deine ganze Anwendung in deinem Linux-VM-Container einfach dann schreiber.

Dominik

Aber war es ein bisschen Mittelgut.

Dominik

Und was auch sehr super daran ist, das geht nicht automatisch zu patchen.

Dominik

Das heißt, du musst hier da hingehen und musst das manuell ausbauen, falls er das irgendwie bei sich aktiviert hat.

Dominik

Tja, und die sind irgendwie Stefault aktiviert.

Dominik

Naja.

Ja.

Dominik

Aber okay, passiert halt wohl.

Dominik

Also wenn ihr irgendwelche Linux bei Amsterdam Azure habt, guckt da mal vielleicht nochmal nach diesem Bugner.

Jochen

Klingt auch nur so, nicht so, klingt eher so Mittel.

Dominik

Das war auf jeden Fall so eine Sache, dass ich dachte, oh mein Gott.

Ja.

Jochen

Ja, oh, Sicherheitslücken, wo wir geraten bei sind.

Jochen

Was war vor ein paar Tagen auf Twitch?

Jochen

Komplett wohl einfach mal komplett geleakt.

Dominik

Tja, kommt.

Jochen

Kann halt mal passieren.

Dominik

Aber immerhin nur Passwort-Hashes.

Jochen

Naja.

Jochen

Ja, aber auch halt, was dann auch interessant ist, also halt auch die Bezahlinformationen.

Dominik

Ja, wäre Pipi.

Jochen

Mal gucken, wie viel das wert ist.

Jochen

Da haben wir irgendwie ganz interessante Geschichten dabei.

Dominik

Ja.

Dominik

Also wenn ihr jetzt mal wissen wollt, wie viel euer Twitch-Favorite Stream ist und verdient.

Dominik

Oder wie viele Jochen mit seinen Streams verdienen beiden Podcasts?

Jochen

Ja, das ist leider relativ traurig, da ist nichts.

Jochen

Aber ich bin auf deiner Seite.

Dominik

Wenn es so allgetragen ist, kann man da auch deine Informationen jetzt abrufen.

Jochen

Ich nehme mal an, dass es nicht draufliegt.

Jochen

Es ist halt an der Stelle ein bisschen sinnlos, weil es ist eh öffentlich.

Jochen

Also ich habe da nichts, was irgendwie nicht öffentlich ist, aber ja.

Dominik

Also ich darf verraten, die Return Investment bei Twitch bei dir im Moment null.

Jochen

Ich schaffe es auch nicht, in das Affiliate-Programm reinzukommen, weil ich habe noch nicht genug.

Dominik

Und jetzt kommt vielleicht Werbung.

Genau.

Jochen

Ja, ja.

Jochen

Ja, aber ansonsten, ich finde das eigentlich ganz, das mache ich jetzt halt schon eine Zeit lang, dieses Streamen.

Jochen

Das ist eigentlich schon ganz witzig.

Jochen

Also das sind teilweise schon, also damit hätte ich nicht gerechnet, dass alle Leute live im Stream mir sagen, dass das, was ich da mache, ist halt falsch und wie es besser machen soll.

Jochen

Und das stimmt.

Das finde ich echt beachtlich.

Jochen

Das ist echt hilfreich.

Jochen

Das fand ich schon mal, hätte ich, hätte ich ehrlich gesagt nicht mit gerechnet.

Jochen

Also einmal hätte ich nicht damit gerechnet, dass sich irgendjemand dafür interessiert, was ich da tue, wobei ich auch nicht gerechnet hätte, ist, dass, wenn sich da jemand dafür interessiert, dass er auch besser weiß als ich.

Jochen

Aber ja gut.

Dominik

Wahrscheinlich wenn ich aber schon besuchen, dann weiß, ist tatsächlich wahrscheinlich wieder besser.

Jochen

Ja.

Oh ja, offenbar.

Jochen

Und das finde ich faszinierend.

Dominik

Was ist dir denn da aufgefallen?

Dominik

Was war denn?

Jochen

Zum Beispiel, gut, also bei PyTest waren so ein paar Sachen dabei, wie man das richtig macht.

Jochen

Und das wusste ich halt nicht.

Jochen

Oder Py-Charm auch einige Sachen, wie man da Dinge einstellt und so.

Dominik

Oh ja, aber

Jochen

gut, da kenne ich mich jetzt auch nicht so aus, das stimmt schon.

Dominik

Aber da habe ich gerade Bay gesagt, Entschuldigung.

Jochen

Ich finde Py-Charm gar nicht so schlecht.

Jochen

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

Dominik

Du bist ein Fan geworden?

Jochen

Nee, das kann man nicht.

Jochen

Aber also ich würde sagen, doch, die kann, wahrscheinlich kann die tatsächlich alles, was man so haben will.

Dominik

Ja.

Dominik

Ja, also ich, äh, also VSCO kann ja noch nicht alles, was man so haben will, aber ich schreibe fleißig Tickets herum und gucken.

Dominik

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

Dominik

Also das Einzige, was mir bei VS Co tatsächlich noch nicht gefällt, ist tatsächlich ein Datenbankzugriff.

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 nerven mich immer ein bisschen beißend, weil die nicht so integriert sind, wie ich mir das vorstelle.

Dominik

Also es ist immer ein bisschen gehampelt, die so einzubauen.

Dominik

Das nervt ein bisschen rum.

Dominik

Vor allen Dingen, wenn es dann in Containern läuft auch noch oder so, dass das so ein bisschen anstrengend, das dann einzubinden.

Jochen

Ja, ich würde das, also bei Pycharm zum Beispiel, die letzte Geschichte, die mich da so, man muss dann halt, also Test-Route ist halt irgendwie, also der macht dann halt eine Testkonfiguration, wenn man einen einzelnen Test ausführt und dann, so ganz habe ich es auch noch nicht hingekriegt, aber dann ist zum Beispiel das Working Directory ist halt dann einfach falsch oder so.

Jochen

Das funktioniert nicht mehr.

Jochen

Und dann kann er die findet er die Datenbank nicht mehr und ich erinnere mich daran, dass ich diese Geschichten bei PyCharm schon häufiger hatte.

Jochen

Und dann war halt zum Beispiel die Lösung für einen Großteil dieser Probleme irgendwie dann auf das Root-Verzeichnis irgendwie in der Projektübersicht, Rechtsklick drauf machen und dann sagen Set as Test-Route.

Jochen

Und dann hat es funktioniert.

Jochen

So, okay.

Jochen

Naja.

Jochen

Also solche Sachen halt.

Jochen

Aber das muss man halt, also, und vorher dachte ich so, naja, das mit den Tests funktioniert halt einfach nicht richtig.

Jochen

Also, aber gut, das funktioniert schon, wenn man weiß, wie man es konfigurieren muss, aber das ist halt manchmal schon ein bisschen.

Dominik

Ja, sowas ist das in der Feind anders.

Dominik

Wenn es gerade nicht geht.

Jochen

Ja, keine Ahnung.

Jochen

Aber ja.

Jochen

Aber ansonsten, nö, Peitscham, genau, eine Sache auch im Stream, ja, da habe ich dann geflucht darüber, dass das oder nicht geflucht, ich habe gerade gesagt, so hier verwende ich ja Peitscharm auf Intel, aber wenn ich jetzt irgendwie auf meinem M1 Mac unterwegs bin, dann nehme ich immer VS-Code, weil Peitscharm kann ich da gar nicht verwenden.

Das ist einfach zu langsam.

Jochen

Ich finde es ja auch schon auf Intel langsam, aber auf Arm geht es gar nicht.

Jochen

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

Jochen

Das heißt, eigentlich hätte ja so ein M1 Mac super Akku Laufzeit, aber wenn man PeitschRAM benutzt, so wie ich das getan habe, dann halt nicht, dann sagt das den Akku sofort leer.

Jochen

Und deswegen nehme ich dann mal, wie es Code, wie ich dann so, dann kam auch so im Chat und so, ah ja, bist du ja eigentlich sicher, dass du das irgendwie native, dass du die für Arm kompilierte Version da nimmst, irgendwie und nicht die alte Intel-basierte, die dann emuliert wird, weil die, dann bin ich so, oh, Mist, ja, ist tatsächlich so, und dann haben wir ein neues Peitschab genommen und das ist deutlich besser.

Jochen

Ja, also offenbar brauchte man da eine JVM, die halt für ARM kompiliert ist und nicht die für Intel, weil wenn man die nimmt und die auf dem M1 emuliert wird, dann, also die Emulation funktioniert wohl ganz gut, aber wenn man sowas emuliert, dann ist es halt wohl scheiße.

Jochen

Okay.

Jochen

Und das, äh, ja, war auch eine Geschichte, die im Stream mir jemand im Chat einfach so gesagt hat.

Voll gut.

Dominik

Okay, cool.

Ja.

Jochen

Tja.

Jochen

Genau, Security, genau, Twitch hatten wir.

Jochen

War sonst noch irgendwas mit News?

Jochen

Nee, mir fällt eigentlich ehrlich gesagt nichts ein.

Jochen

Meine Güte, vielleicht liegt es auch einfach daran, dass wir so lange nichts mehr gemacht haben.

Jochen

Aber News und wir sind bei einer Stunde, was ist denn da los?

Dominik

Ja, ja, vielleicht.

Dominik

Bisschen gequatscht.

Okay, tja.

Dominik

Ja, dann stelle ich jetzt einfach nochmal meine paar doofen Fragen und vielleicht fällt hier jetzt sowas ein zu diesem Thema.

Dominik

Und zwar ging es halt tatsächlich darum, wenn ich jetzt in Python irgendwie mehrere Prozesse habe oder sowas oder Sweats oder so.

Dominik

Ich weiß nicht, ob das ein Unterschied macht.

Dominik

Und zwar die ich nicht herausstarte aus einem Main-Swead oder sowas, sondern die beispielsweise wie beim Gunny Korn einfach weggeforgt werden.

Dominik

Während er es auch macht, der macht dann verschiedene Prozesse auf und macht die gleichzeitig auf und so.

Dominik

Ich möchte aber überall diese Prozesse hinweg einen geteilten Speicherbereich haben und da irgendwas am liebsten Python-Objekte reinschreiben können.

Dominik

Mit, weiß ich nicht, Funktionen drin oder irgendwas, dass er halt einfach genau gecallt werden kann.

Dominik

Wie mache ich denn das am besten?

Geht nicht.

Jochen

Das würde ich sagen, es geht tatsächlich nicht.

Jochen

Also mit Threads-Kids, da ist es halt so, die teilen sich halt einen Adressraum und einen Speicher.

Jochen

Aber also das ist eigentlich der Hauptunterschied zwischen Threads und Prozessen.

Jochen

So was auf der Betriebssysteme-Ebene.

Jochen

Also Threads laufen halt im gleichen Prozess und haben den gleichen Hauptspeicher.

Jochen

Und Prozesse sind halt komplett voneinander getrennt, können ja gegenseitig nicht auf Sachen zugreifen und auch, also sind komplett, da braucht man dann halt so Interprozess-Kommunikationsgeschichten, um halt zwischen den Prozessen zu kommunizieren.

Dominik

Also das heißt, das geht tatsächlich gar nicht aus Python heraus.

Dominik

Das heißt, ich muss irgendwie was Externes nehmen, wie ein Memcache-D-Ridis oder sonst irgendwas.

Dominik

Also eine quasi Art von Datenbank im Speicher, die dann extra läuft und auf die ich dann von allen diesen Prozessen irgendwie einen Zugriff bekomme über URL oder irgendwas.

Jochen

Ja, also oder was auch immer.

Jochen

Es muss ja nicht irgendwie jetzt ein Ridis oder Memcache-D sein oder es kann auch eine Datenbank sein oder es kann halt ein File sein oder es kann halt eine Pipe sein oder

Dominik

das habe ich auch vorlegt.

Dominik

Also kann man aus Fice-Nachts einfach eine File im Memory aufmachen, auf die dann alle Prozesse haben?

Dominik

Nein, auch nicht wahrscheinlich.

Jochen

Alles klar, das kann man schon machen.

Dominik

In Memory?

Jochen

In Memory, warum in Memory?

Dominik

Ja, weil ich will ja nicht I.O.

Dominik

machen auf der Platte, weil ich will ja genau diesen Speed halt nicht verlieren, den.

Jochen

Nee, du kannst auch Chat Memory, das geht auch, aber die Frage wäre halt, nein, aber du musst es ja sowieso, also dein Bottleneck wird dann ja eh die Serialisierung, Deserialisierung sein.

Dominik

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

Dominik

Ich muss quasi meine Objekte immer serialisieren, deserialisieren, weil ich nicht darum rumkomme, weil ich nur als irgendwie in Bytes oder so in den Speicher schreiben kann.

Jochen

Genau, du musst halt das irgendwie in eine Form bringen, die man halt irgendwo hinschreiben kann.

Jochen

Genau.

Dominik

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

Dominik

Dann sagte, Junge,

Jochen

oh, kann man machen, ist aber ja.

Dominik

Ja.

Ja.

Dominik

Ja, weil, also Joch hat gesagt, das wäre keine gute Idee, weil man könnte ja dann da, wenn man diesen Speicherbereich kontrolliert, da was reinschreiben, dann wird dann was realisiert und dann macht es bumm.

Jochen

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, die große Seiten, ich weiß nicht, welche das war.

Jochen

Das war auch irgendein Contest, ich habe es wieder vergessen, welche Seite das war.

Jochen

War eine wirklich, war eine von den ganz großen, die, wo jemand so reingekommen ist über Django, auch Django.

Jochen

Und da, die hatten irgendwie auch, ich weiß nicht, Memcash D oder Redas benutzt und da auch die hatten gepickelte Sachen in User-Cookies abgelegt.

Jochen

Und das war noch nicht das Problem und man konnte durch irgendeinen Trick konnte man halt den Kram irgendwie in den Memcash die bringen und dann da den Applikationsserver dazu bringen, das dann halt zu entpickeln.

Jochen

Und dann ist man da, sind da Leute so da reingekommen.

Jochen

Also ja, das ist problematisch.

Jochen

Also wenn User es schaffen, irgendwie deine Applikation was gepickelt zu geben, wo sie Kontrolle drüber hatten, dann ja.

Jochen

Oder es war irgendwie, es war auch irgendwie signiert oder so und an der Signatur war irgendwas kaputt, ich weiß es nicht genau.

Aber ja, also das heißt theoretisch, wenn ich gerade auf meinem eigenen Server läuft, dann, also wenn einer dann da schon drin ist, dann hat er eh schon root.

Dominik

Also dann wäre es ja nicht.

Jochen

Ja, aber das ist ja dann zu, also das ist ja, aber das ist ja, vielleicht gibt es ja irgendwie, ich meine, wie kommen die Daten da rein, ja?

Jochen

Also wenn jemand quasi, vielleicht hat ja jemand dann nur Zugriff auf irgendeinen, ist irgendwo reingekommen über, weiß nicht, der läuft vielleicht auch noch irgendwelche anderen Services und kann halt nur eine Netzwerkverbindung aufmachen, ja.

Jochen

Und dann lauscht da aber dann ein Memcache-D und dann kann er da was reinlegen und dann wird das ausgeführt.

Jochen

Also es ist halt, ja, die Frage ist, will man Leuten dadurch, also ich meine, sowas wird da wahrscheinlich nicht ausgenutzt, wenn man da irgendwie eine kleine Geschichte selber hat, aber überhaupt, dass es die Möglichkeit gibt, dass man dadurch, dass man an irgendeinem Port irgendwas hinschreibt, dadurch deinen Code in deiner Applikation ausführt, ist halt schon so, will man wahrscheinlich nicht.

Dominik

Ja, also ich weiß halt, wie das sonst gehen könnte, da muss man sich halt eine andere Lösung für überlegen, ne?

Dominik

Ja, also mein Anwendungsfreck ist eigentlich nur, dass tatsächlich über verschiedene Gunning-Worker-Prozesse Zugriff auf ein gemeinsames Dikt haben wollen würde.

Dominik

Und dass ich halt so Dinge ablegen kann.

Ja, aber warum nicht?

Jochen

Also jetzt meine Standardfall, warum nicht einfach eine Datenbank nehmen?

Jochen

Ich meine, dafür ist die Datenbank eigentlich da.

Dominik

Ja, also weil es halt zum Beispiel keine gibt oder halt, dass nur eine SEG-Light, dass die halt dann schon legt ist und so.

Jochen

Ja, wenn du keine Datenbank hast, ja.

Jochen

Warum nicht einen Pfeil nehmen?

Dominik

Zu langsam?

Jochen

Wieso ist das langsam?

Jochen

Muss ja nicht langsam sein.

Jochen

Also ja, natürlich ist das eventuell langsam, aber kommt jetzt auf deine Daten an.

Dominik

Gut, aber theoretisch könnt ihr, wenn dann jemand auf das Pfeil hat, kann er dann auch alles mit dir reinschreiben und das dann nicht.

Jochen

Ja, gepickelte Sachen darf man da nicht reinschreiben.

Dominik

Ja, aber was will ich dann?

Dominik

Das ist ja genau dasselbe Problem dann.

Dominik

Also mein Problem, ja, also.

Jochen

Aber warum möchtest du gepickelte Sachen abspeichern?

Dominik

Um sich später zu verwenden.

Dominik

Also weil ich zum Beispiel, ich habe bestimmte Routinen, die ich ausführen möchte mit Argumenten und so weiter, die quasi schon feststehen, aber die zu einem späteren Zeitpunkt laufen.

Jochen

Ja, aber du kannst ja sozusagen durchaus sagen, ruf die Funktion mit den Parametern auf.

Jochen

Du kannst ja die Parameter kannst du ja schon vielleicht irgendwie, je nachdem, was das ist.

Jochen

Also natürlich.

Jochen

Ja, aber du kannst ja auch den Namen von der Funktion einfach speichern.

Kann ich das?

Jochen

Das kannst du machen.

Dominik

Ja, okay.

Dominik

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, JSON Dumps und Loads, sondern dann muss man das halt selber wieder sich daraus ein Objekt zusammenbauen, oder?

Jochen

Das kann man ja auch machen.

Dominik

Das heißt, ich muss, aber wie baue ich dann den Pfad zu dieser Funktion zusammen?

Dominik

Die muss ich dann irgendwie spät ja spontan ein, wie das geht?

Dominik

Keine Ahnung, ich habe jetzt Pfad zu meiner, das ist jetzt Applikation.functions.fuba.

Jochen

Ja, kannst ja einfach den Vater reinschreiben.

Dominik

Den Vater der Funktion tatsächlich einfach.

Jochen

Dann machst du mit Import-Lib importierst du das Ding dann und.

Dominik

Mit Import-Lib.

Dominik

Relativ oder absolut?

Dominik

Muss ich absolut.

Dominik

Ist das egal?

Jochen

Ja, weiß ich nicht.

Jochen

Wahrscheinlich ist absolut so ein bisschen, also ja, kommt drauf eine, wo das.

Jochen

Wahrscheinlich wird man es absolut zum Paket halt.

Dominik

Okay, ja, das muss ich mal probieren.

Dominik

Weil vielleicht wäre das tatsächlich, da du da den Namen hast, hat der Callabild zu nehmen, eine Rettung, dann hätte ich halt nur noch Argumente, aber gut, die dürfen dann.

Jochen

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

Jochen

Kann man da nicht das sowieso irgendwie eher in so einem Lookup, dann nimmst du halt irgendeinen Namen, völlig egal, musst du nicht über Import machen, das will ich gerade auch, das ist vielleicht nicht so eine schlaue Idee.

Jochen

Sondern du hast halt irgendwo ein Dikt, wo die ganzen Funktionen drin liegen, das halt irgendwie mal initialisierst und dann musst du nur noch deine Funktionen halt, du hast sozusagen eine Registry für diese Funktionen.

Dominik

Okay, ja, das Problem ist halt, dass wenn jemand halt jetzt, also es geht halt um so eine Event-Queue, ja, und wenn jemand halt jetzt neue Events anlegen möchte, die halt quasi dann einfach über so einen Dekorator subscriben kann, auf irgendeinen Typ, den er sich da selber quasi aussuchen kann, indem er das da subscribe, weil er halt der Typ nicht so nicht gibt, wird einfach erstellt, dann müsste man ja quasi diese Funktion, die ja dann, also ein Event ist, dann auch registrieren.

Dominik

Und wenn derjenige es halt vergisst, dann funktioniert es halt nicht.

Dominik

Und das ist halt so ein bisschen nervig, weil es halt an schon an zwei Stellen das dann halt überprüft werden muss, der kann halt nicht irgendein Event erstellen und das dann einfach dann registrieren und dann Händler für nehmen, sondern er muss sich halt an eine Stelle an die Registrierung wenden und das muss halt am händisch machen.

Dominik

Das hätte ich mir halt gerne gespart, weil es halt bestimmte Entwickler gibt, die das verstehen oder nicht verstehen und denen vielleicht einfach eine Methode schreiben können, die dann irgendwas macht.

Jochen

Naja, gut, aber du kannst ja auch, du kannst es ja auch irgendwie, du kannst ja überlegen, wie man die Funktion adressiert sozusagen und dann, das kannst du ja dann selber machen.

Jochen

Naja, gut, ich war ja.

Dominik

Ja, also ich überlege halt, was, also ich glaube, dieses Pickeln ist halt an der Stelle quasi die einfachere Lösung.

Jochen

Ja, aber da weiß ich nicht.

Jochen

Also Pickel.

Dominik

Aber die Frage ist halt, wo es halt geht, ob es halt nur über so ein Mengen-Cache-D geht oder so ein Redis-Kate oder halt noch eine andere Variante gibt, die irgendwie einfacher ist, irgendwie.

Dominik

Ob man einfach.

Dominik

Kann man aus Python raus einfach so ein Chat-Memory außer Halbplatten aufmachen oder geht das nur mit sowas wie Memcache-D und Redis?

Dominik

Gibt es ein Python-Modul, was das kann?

Jochen

Man kann das schon machen, aber ich weiß nicht, ob das empfehlenswert wäre, weil du musst ja irgendwie auch darin drauf zugreifen.

Jochen

Und das dafür bietet ja sowohl Memca-D auch Redis-Dinge an und wenn du es selber machst, ist schwierig.

Jochen

Weil wenn, was ist, wenn dann der Applikationsserver jetzt eine Prozess läuft, jetzt auf dem anderen Rechner damit?

Jochen

Das ist ja auch wieder ein Problem.

Jochen

Also ich, ich meine, klar, natürlich die Abhängigkeiten sind halt blöd.

Jochen

Jetzt dann deswegen noch ein zusätzliches Redis braucht oder so.

Jochen

Das ist halt die Frage, ob es nicht schon irgendwas gibt, was man schon hat, eine Datenbank oder einen Programm.

Ja, genau, anders

Jochen

oder eigentlich die.

Dominik

Ja, also auch die Frage, ob man halt, wenn ihr Projekte voneinander isoliert aufbaut, ob man dann, na ja, ob man, ja, eigentlich müsste man die Sachen dezentral voneinander betreiben, aber das ist halt dann wieder so ein Problem, dann mit Deployment, ganze Deployments zu machen, die vollständig sind und so.

Dominik

Die dann jeweils unabhängig voneinander sind und dann nicht erwarten, dass schon irgendwo anders dann so ein Redisrup liegt oder so und dann eine neue Verbindung aufmachen, einen neuen Redis-Nutzer mit einem neuen Ausländerbizing, bla bla bla.

Dominik

Das ist halt alles relativ auffällig für so kleine Sachen, dass man irgendwo mal kurz so zwei Kies im Dick abliegen will.

Jochen

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

Dominik

Ja, gut, aber das liegt halt auch daran, dass der Ganicorn da so ein bisschen mehr Power kriegen soll.

Dominik

Wenn man jetzt im Gunnycorn sagt, du laufst auf einem Worker, dann reicht es ja halt, ja.

Dominik

Ich hatte irgendwann bei Stack Overflow mal so eine Art von den hat der Preload gemacht, dann hat er erst die Applikation geladen, dann die Worker.

Jochen

Ja, aber wozu brauchst du denn da mehrere Prozesse?

Jochen

Das ist nochmal die Frage, warum mehrere Prozesse an der Stelle?

Dominik

Gunnycorn macht Workerprozesse auf.

Jochen

Ja, aber man muss ja nicht, du kannst ja einen aufmachen.

Dominik

Genau, aber das heißt, das müsste man halt dann als harte Restriktion haben, das geht halt nur mit einem Workerprozess.

Dominik

Und man hat halt dann unerwartete Seiten.

Du meinst, wenn da jemand, wenn das hier ist,

Jochen

wenn jemand mehr startet.

Dominik

Ja, genau, dann stehst du halt dann da und dann funktioniert das halt nicht mehr so richtig.

Jochen

Ja.

Ja, stimmt.

Dominik

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

Dominik

Aber was geht ja eigentlich für alle Dinge, die halt irgendwie einzelne Tanzen haben.

Dominik

Also du hast irgendwie von irgendwas einen Singleton-Pattern oder sowas auf irgendeiner Klasse oder so.

Und das ist ja immer das Problem, dass es halt bei so einem Forken in so einem Web-Applikations-Server-Prozess nicht mehr so wirklich identitär ist.

Jochen

Okay, aber ich würde sagen, das braucht man ja ganz, ganz selten nur sowas.

Na.

Ist jetzt nicht wohl nicht.

Dominik

Ich bin ja in letzten Haben ja schon zweimal drüber gestolpert.

Jochen

Ich hab oder meine Vermutung wäre oft, dann ist irgendwas an dem Problem nicht richtig, weil, oder an der Lösung oder weil, wenn man, also wenn das die Lösung für das Problem ist, dann ist wahrscheinlich das Problem nicht richtig verstanden.

Jochen

Oder vielleicht ist es, ich weiß es nicht genau, aber das gibt es echt fast nie.

Dominik

Ja, also als Beispiel, darf jetzt nur eine offene Verbindung zu irgendeinem anderen Rechner geben, weil er nicht mehr als eine gleichzeitige offene Verbindung akzeptiert.

So, und dann könnte man jetzt irgendwie Verbindungen durchreichen und die halt von mehreren Prozessen trotzdem nutzen.

Dominik

Wenn man die nicht gleichzeitig nutzt, zum Beispiel, wenn er halt dann irgendwie einen Lock drauf hat und dann an der anderen Stelle dann vor einem anderen Prozess halt wartet, bis dieses Log wieder freigegeben ist.

Jochen

Ja, aber das passiert doch automatisch.

Mit den Logs, ja.

Jochen

Nein, nein, ich meine, wenn du, ja, wenn du von der Verbindung zu irgendwas ausbaust, was nur eine zulässt, dann musst du halt warten.

Dominik

Genau, aber das geht halt von den Prozessen her nicht.

Dominik

Also wenn du da verschiedene Prozesse gleichzeitig das machen zum Beispiel, dann gibt es halt einen Exception-Boom, geht nicht.

Dominik

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

Dominik

Das heißt, du musst halt diesen, also nicht nur diesen State irgendwie dann abwarten und dann wieder wieder versuchen, sondern eigentlich willst du ja quasi dieses Objekt dann durchreichen.

Jochen

Ich habe das Problem nun, glaube ich, noch nicht so wirklich verstanden, was das, weil ich meine, ja, also ich meine, das ist doch.

Jochen

Wie willst du das denn lösen?

Jochen

Das kannst du gar nicht lösen.

Dominik

Ja, doch, ja, warum?

Dominik

Also so ein Zugangstoken zum Beispiel, ne?

Den ich ja dafür brauche.

Dominik

Dann will ich ja nicht unbedingt jetzt jedes Mal irgendwo reinschreiben.

Dominik

Außer vielleicht in so eine Platte.

Dominik

Und dann die Frage ist, schreibe ich die halt in, rede es rein, hole mir den immer wieder ab, gucke halt, ob der da ist, wenn es der nicht da ist, dann hole ich mir neu oder so.

Dominik

Benutze ich den halt immer wieder, ist, weiß nicht.

Dominik

Das ist halt so ein Prozessding.

Dominik

Also wie komme ich denn da sonst dran?

Dominik

Ohne, dass ich dann jedes Mal wieder neu nachfrage.

Jochen

Also wieso muss das denn geteilt werden?

Jochen

Also ich würde sagen, wenn du keins hast, dann holst du dir das halt und.

Dominik

Genau, aber das wurde, ich habe jetzt mehrere Prozesse, ja, und ich habe halt einen Zugangsdoken und beispielsweise darf man Zugangsdoken nur alle so und so vier Sekunden holen.

Dominik

Oder so.

Dominik

Sonst kriegt man keinen mehr oder wird geblockt.

Dominik

Dann gibt es halt so komische Antwort-Server, die sowas machen.

Jochen

Das ist halt irgendwo zentralhändig.

Dominik

Genau, ja, genau.

Dominik

Das Problem, daran stehen wir jetzt.

Jochen

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

Ja, klar.

Jochen

Sondern das willst du halt, aber ich meine, ist das nicht eher ein Deployment-Problem?

Dominik

Nee.

Jochen

Das würde ja sein, weil so gehören solche Sachen eigentlich hin, solche Sachen gehören eigentlich in die Umgebungsvariablen von den Prozessen.

Dominik

Ja, aber die kann ich ja noch nicht und ich kann ja nicht das also im Deployment dann ablegen, wenn der halt nach zehn Minuten wieder ausläuft.

Dominik

Das ist ja gerade.

Dominik

Ich muss ja halt, also ich darf halt nur alle irgendwie fünf Minuten fragen, aber nach einer Stunde ist halt wieder weg.

Dominik

Oder so.

Dominik

Und das ist halt blöd, weil ich brauche dann halt alle zwei Sekunden und das ist ja okay, wenn ich mir einmal eine Stunde einholen kann und dann kann ich halt für eine Stunde benutzen, dann ist ja okay, aber ich muss halt von den verschiedenen Prozessen der Anwendung, die parallel laufen, gleichzeitig diesen Key halt haben.

Dominik

Und dann muss ich irgendwie teilen.

Dominik

Also klar, ich könnte hier lokal irgendeine File schreiben, was ja auch nicht so eine gute Idee ist, wenn irgendjemand da auch die File-Systeme zugreifen kann.

Dominik

Das heißt, ich muss dann eigentlich irgendwo den Speicher legen, der geteilt ist, über alle Prozesse hinweg.

Jochen

Ja, 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.

Dominik

Doch nicht, aber die ist halt wenigstens ein bisschen verschlüsselt, hat wenigstens so ein bisschen noch so ein Layer drumherum.

Dominik

Ja, oder halt dann in so einem geteilten Memory-Bereich.

Dominik

Und da ist halt die Frage, wie das dann aussieht, wenn du sagst, okay, ich finde die Idee gar nicht so falsch, dass von verschiedenen Prozessen ja verschiedenen Rechnern liegen können, dann müsste das ja von sowas wie einem Redis oder einem Cache oder so rausgegeben werden, weil das ja quasi auch nur der geteilte Key-Value-Storage, der dann das so irgendwie vergibt.

Jochen

Tja.

Dominik

Aber in Python gibt es halt so eine Möglichkeit nicht, okay, dann habe ich nicht mehr.

Jochen

Ja, aber ich glaube nicht, dass das etwas ist, was man.

Jochen

Also ja, ich meine, das klingt jetzt blöd, weil das natürlich dein Problem nicht löst, aber ich glaube nicht, dass das etwas ist, was man lösen will.

Also würde ich jetzt.

Dominik

Ja, also ich glaube tatsächlich, ich glaube, so eine Antwort wäre mit dem Cache-D oder Readest und da muss man halt dann gucken, braucht man das jetzt oder will man das jetzt oder nicht.

Jochen

Also ich würde sagen, wenn du versuchst, dieses Problem zu lösen, ist die Lösung, macht halt einen Haufen zusätzliche Probleme.

Dominik

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

Jochen

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

Dominik

Also wenn ich halt auf der anderen Seite zum Beispiel keine Einflussmöglichkeiten habe, dann kann ich nicht sagen, dass irgendjemand da anpassen.

Jochen

Ja, ja, klar, klar.

Dominik

Ja, okay, mit dem Serialisieren, das muss man irgendwie wahrscheinlich im Kopf haben, dass das auch ein sicherheitsrelevantes Problem sein kann.

Dominik

Aber dann, ja, also als JSON wäre er wahrscheinlich sicher, weil das ja nur irgendwie ein Zeichenketten sind, das nicht ausgeführt ist.

Dominik

Das heißt, ich muss irgendwie gucken, dass ich alles irgendwie JSON-Serializable mache.

Genau.

Dominik

Und das heißt tatsächlich, dass ich keine Funktion angeben kann, sondern ich muss eine Funktionpfad oder Import-Fahrt angeben.

Jochen

Also ich meine, ich habe zum Beispiel sowas, so einen Fall tatsächlich von gerade mit Fast API fällt mir jetzt gerade so ein.

Jochen

Da habe ich das so gemacht, tatsächlich auch.

Jochen

Deine Padentik-Objekte, die kannst du ja serialisieren.

Dominik

Zu JSON, ja.

Dominik

Aber wenn ich da eine Call Level reinstecke, dann geht das natürlich nicht.

Jochen

Nee, aber du kannst ja ein neues Objekt erzeugen.

Jochen

Also du kannst ja das Ding serialisieren.

Jochen

Ja.

Dominik

Also nicht immer.

Dominik

Also das kann ich nur dann, wenn es serializable ist.

Dominik

Wenn ich jetzt da in Padentik irgendwelche Sachen drin habe, die nicht serializable sind, dann kann ich natürlich mir überlegen, was ich denn mache.

Jochen

Ja, aber.

Dominik

Oder muss ich ja meinen eigenen Serializer schreiben für, wenn das dann.

Jochen

Ja, ja, gut, okay, aber das kannst du ja machen.

Jochen

Also ich weiß noch, ich hatte das halt ein, ich hatte dieses Problem halt in gewisser Weise auch.

Jochen

Also ich hatte das in diesem Benchmark-Umfeld, ja, sozusagen, dass man sagt, okay, ich habe hier, ich baue mir zuerst meinen Server zusammen auf einer kleinen Seite, dann schicke ich das Objekt an den Server und der Server startet dann halt irgendwas damit.

Jochen

Und meine Lösung, also sozusagen, du hast halt in den Pydentech-Modellen sind halt die Daten für das Ding drin, aber ausgeführt wird es dann woanders.

Jochen

Dann rufst du halt das Ding mit den Daten, die du serialisiert hast, auf und sagst halt so, und jetzt starte mal oder so.

Dominik

Ja, das geht schon.

Dominik

Also wenn das Pydentec-Modell das hinbekommt, das zu serialisieren, dann geht das auch so.

Dominik

Aber das Problem ist halt die Serialisierung von Callabils in JSON-kompliktibles Format.

Dominik

Das halt da hinzubekommen, da muss man halt dann deinen Serializer und D-Serializer für extra verschreiben für diese einzelnen Felder und ist dann die Frage, wie man so ein Objekt serialisiert.

Dominik

Und da stehe ich halt wahrscheinlich gerade, vielleicht habe ich das noch nicht gemacht, weil ich nicht weiß, wie ich so ein Pfad zu einer Funktion dann.

Ich kann ja mal gucken, also ich habe da auch tatsächlich so eine Art Registry verwendet, wo man dann halt einfach sagen, ich habe das dann so gemacht, wenn man einen Dekorator nicht klasseregen konnte, dann konnte man sagen, okay, registriere das Ding mal und dann konnte ich quasi das halt wieder komplett so aus dem raushauen.

Jochen

Ja, ja, aber genau, das kann ich mal drauf gucken.

Dominik

Ah, das hat tatsächlich, man müsste dann quasi diese einzelne Funktion dann quasi selber registrieren.

Dominik

Das könnte man ja mit dem Dekorator machen, der eh schon da benutzt wird, für Subscribe und dann könnte man die quasi gleichzeitig durch das Subscribe mit in diese Event-Registrie registrieren unter irgendwas.

Dominik

Oh ja, und das, dieses, was dann dabei rauskommt, das könnte man in das Patentic Model mit reinschreiben, rauspolen und dann auch quasi eine Methode dran schreiben, die dann diese Funktion ausführen kann.

Wow.

Können wir ja gleich mal sagen.

Jochen

Ja, so ein

Dominik

bisschen gepopel, aber ja, das ist das Schöne.

Jochen

Genau, ich habe letztens für dieses, also was ich gerade in einem Stream baue, ist halt irgendwie das Hosting-Ding für eben den Podcast ja auch.

Jochen

Ich würde da gerne so eine Software-As-A-Service-Lösung draus bauen.

Jochen

Und da habe ich so ein Spam-Filter-Dings für gebaut.

Jochen

Spam-Filter-Feature habe ich letzte Woche vorletzte Woche, letzte Woche, diese Woche, ein bisschen dran gearbeitet.

Jochen

Und da ist auch so ein Ding.

Jochen

Das fand ich ganz auch so ähnlich, auch ganz interessant.

Jochen

Also ich möchte ja natürlich meine Spam-Filter-Modelle auch irgendwie in die Datenbank serialisieren.

Jochen

Und Postgres hat meiner JSON-Field, das ist ja voll gut.

Jochen

Aber da habe ich ja jetzt das Problem, okay, ich möchte jetzt ja nicht irgendwie JSON daraus haben, sondern ich möchte hinterher das fertige Modell, auf dem ich dann Predikt aufrufen kann, aus der Datenbank bekommen.

Jochen

Und da habe ich das auch mit Custom Serializer, Deserializer gebaut, den man dann beim JSON-Field angeben kann.

Jochen

Da kann man sagen, das ist der Decoder, das ist der Encoder.

Jochen

Und der Decoder, also der Encoder guckt halt, ja, wie war das?

Jochen

Ne, der guckt halt, äh, was ist das?

Jochen

Und dann ruft er halt irgendwie die, gibt mir halt mal halt ein Dikt zurück Methode von einem so ähnlich wie bei Pendentic ist es.

Jochen

Bei Pythonic ist, glaube ich, auch Punkt Dikt, was man aufgibt.

Jochen

Und das habe ich dann auch halt quasi genauso gemacht, dann Punkt Dikt und dann kommen dann halt irgendwie Daten aus diesem Modell zurück.

Jochen

Habe ich dann ins JSON reingeschrieben und beim Dekodieren guckt er halt, okay, gibt es da ein Attribut Klasse drin, Klass, und wenn das Knife-Base ist, dann mach halt Spezialbehandlungen und sag nochmal irgendwie übergib dieses Dikt, was in JSON war, halt als Dikt für diese Klasse und mach dann halt ein echtes Modell draus, wo ich dann hinterher Predict drauf aufrufen kann.

Jochen

Und dann fällt das gar nicht auf.

Jochen

Dann sagt man halt im Code einfach nur Spamfilter.predict irgendwas.

Jochen

Und Spamfilter ist halt die Tabelle in der Datenbank.

Jochen

Model ist halt sozusagen dieses JSON-Field.

Jochen

Und dadurch, dass das ein Custom-Deserializer hat, wenn man darauf zugreift auf dieses Attribut, wird es halt dieser realisiert und ist dann halt das richtige Modell wieder.

Jochen

Das heißt, man kann sagen, also man kann zum Beispiel sagen, Spamfilter.objects, jetzt setzt Django Semantik, Spamfilter.Objects, Punkt First, PunktModel, Punkt Predict und dann übergibt man irgendwas einen Kommentar oder so und dann sagt einem das Spam oder nicht Spam.

Jochen

Ohne dass man da irgendwas machen muss.

Jochen

Das funktioniert

einfach so.

Dominik

Und du hast da quasi ein fertig trainiertes Modell, hängst du dann quasi per JSON dann in das JSON-Feed rein?

Jochen

Genau, also ich würde es zuerst trainieren und dann sagen, ja, speichere das doch mal.

Jochen

Also Model ist gleich naiv, ist halt das fertig trainierte Model.

Jochen

Und dann sage ich halt Spamfilter.model gleich naiv-base.

Jochen

Also das würde ich sagen, Model gleich naiv-base, irgendwas.fit, irgendwann Trainingsdaten.

Jochen

Und dann sage ich halt spamfilter.model gleich Model und dann sage ich es beim Filter.save und dann ist es eine Datenbank.

Nett, nett.

Jochen

Und genau, das, also da ist es auch so ein ähnliches Problem.

Jochen

Ja, das ging eigentlich relativ problemlos.

Jochen

Ja.

Jochen

Und überhaupt bei Knife Base voll gut.

Jochen

Ja.

Jochen

Ich habe das am April, glaube ich, irgendwann mal auch in die, weil die Kommentars bei mal, also die ganze Zeit lang, also bis letzten, bis Anfang letzten Jahres oder so, haben sie es nie irgendwie, war das nie ein Problem, weil irgendwie, ja, wahrscheinlich diese CSRF-Protection oder keine Ahnung, was auch immer, Django Dam halt an Dingen macht, die verhindern sollen, dass man da beliebig Dinge reinpostet, schon dafür gesorgt haben, dass die Kommentare später mal draußen geblieben sind.

Jochen

Irgendwann sind deren Skripte halt besser geworden.

Jochen

Kommen halt mit diesem Kram klar und nehmen halt das Token dann aus dem GET und packen sie in den Post rein und dann kommen sie halt durch.

Jochen

Weil wir haben da ja auch keine Authentifizierung oder sowas.

Jochen

Jeder kann da Kommentare reinschreiben.

Jochen

Aber wenn man das halt über ein Skript macht und nicht beim Browser, dann fehlen halt vielleicht Daten, die man mit angeben muss und dann sagt Django direkt, nee, nee, so nicht.

Jochen

Aber sozusagen, wenn man es halt mit einem Headless-Browser macht oder mit einem Skript, das ein bisschen besser ist und das halt weiß, wie diese Formfelder heißen und so, dann geht es halt doch.

Dominik

Also was man auch, glaube ich, ganz gut machen kann, ist so ein Feld A-Fiden einfach reinmachen, das halt dann mit im Formular drinsteht, was halt automatisch über das Skript ausgefüllt wird und was halt, wenn es halt sowas drinsteht, dann sagt er halt der A-Spam.

Jochen

Ja, das kann auch, das kann auch sein, dass man, das habe ich mir auch zuerst überlegt, weil das wäre dann die super simple Methode gewesen, dass erstmal alle, dann hätte sich jemand das Skript eddern müssen für diese Seite und das macht dann natürlich keiner.

Jochen

Aber ich bin mir gar nicht so sicher, ehrlich gesagt, also auch gerade wenn ich mir angucke, wie das Muster von den, also das hatte ich mir auch zuerst überlegt, dass das vielleicht die einfachste Lösung für das Problem ist und dann habe ich mir aber das ein bisschen angeguckt und dann, ich habe so den Verdacht, dass das gar keine Skripte sind.

Jochen

Da gehen Leute tatsächlich mit Browsern drauf, die halt das irgendwie dafür bezahlt werden, dass sie das machen und machen das von Hand.

Jochen

Und da hilft das natürlich alles nicht mehr, weil sobald da jemand mit einem Browser drauf geht, dann ja.

Dominik

Ja.

Jochen

Und ja, also, und dann dachte ich mir so, okay, also das sieht schon verdächtig danach aus, dass das irgendwelche Leute sind, die da tatsächlich für bezahlt werden und das von Hand machen, dann kann ich mir das auch, äh, dann hilft das nichts.

Jochen

Dann mache ich es auch gleich richtig und nimm dann baue da halt so einen richtigen contentbasierten Spam-Filter ein.

Jochen

Und genau, Django, weiß ich nicht, Fluent Commands oder so hat halt auch so ein Schnittstelle drin für Archismit oder so, weiß nicht, dieses Spam-Filter-Dings, aber das ist alles ganz furchtbar, das darf man auch, glaube ich, alles gar nicht so richtig verwenden.

Jochen

Weil das, weil man damit ja dann Daten weiterreicht, dann ja, also ist es, äh, das ist alles sehr unschön und man kann das aber relativ leicht selber bauen.

Jochen

Und dann, äh, eben, und Naith Basis bietet sich da halt an, weil das halt keine Abhängigkeiten zu irgendwas anderem.

Jochen

Sondern das kann man halt rein in Python mit Standardbibliotheksmitteln irgendwie alles machen.

Jochen

Und ich habe da auch mal eine Streame-Episode nur darüber gemacht, weil das kann man in anderen Programmiersprachen genauso machen.

Jochen

Das kann man an einem PHP ganz genauso machen.

Jochen

Das kann man halt irgendwie, egal was man verwendet, kann man das relativ einfach implementieren.

Jochen

Es kommt mit wenig Trainingsdaten aus, ist es schnell.

Jochen

Ja, es ist wahrscheinlich für diesen Fall Spam nicht-Sperm, weil die Klassen gut getrennt sind, ist es gut genug.

Jochen

Also es ist natürlich, wenn man das vergleicht mit anderen Sachen nicht so gut wie andere Dinge, aber in dem Fall ist es vielleicht egal, dass es nicht so gut ist.

Jochen

Jedenfalls bei, das hat jetzt halt auf den Dingen hat es jetzt praktisch perfekt funktioniert, mehr oder weniger.

Jochen

Also es ist halt kommt kein Spam mehr durch.

Jochen

Und die ganzen regulären Sachen kommen halt doch durch.

Jochen

Also es funktioniert tatsächlich ziemlich super.

Jochen

Ja, genau.

Ja.

Jochen

Cool.

Dominik

Ja, da müsst ihr euch unbedingt Jochen Stream Tablet verlinken vielleicht.

Dominik

Ja, genau, also die entsprechende Folge auf jeden Fall wäre super.

Dominik

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

Dominik

Ich bin, glaube ich, einmal ausgestiegen, als du dann irgendein Update gemacht hast von Jupiter oder so.

Jochen

Ja, ich bin da ja, ich weiß ja auch oft nicht, was ich da vorher mache.

Jochen

Kram halt da.

Dominik

Tja, wie es halt so ist, wenn man täglich seine Arbeit filmt.

Dominik

Irgendwas passiert nicht immer so die ganzen mega spannenden Sachen.

Dominik

Ja, aber doch.

Jochen

Ja, ja.

Dominik

Ja, also das mit dem Naiv-Wiss, das finde ich sehr spannend.

Dominik

Vielleicht ist es eigentlich fast schon eine eigene Folge wert, wie man eine Naip bei

Jochen

hatten wir schon tatsächlich.

Dominik

Wenn es bei Filter?

Jochen

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

Jochen

Das ist jetzt schon ein bisschen was her, aber.

Dominik

Ja, stimmt.

Dominik

Ja, ich glaube, Machine Learning-Folgen hat er bei eh noch ein paar mehr nachgefragt.

Vielleicht müssen wir da nochmal.

Ja, da müssen wir sowieso.

Dominik

Wir müssen mal Struktur und ein Konzept überlegen, die auch noch weg wird.

Jochen

Ja, also was das auch auf jeden Fall auf dem Plan ist, ist HTMX, das wird jetzt auch nochmal einmal fand ich interessant zu sehen, dass das halt, wenn man sich anguckt, welche Talks sind eigentlich so populär quasi, kann man ja auf YouTube so ein bisschen sehen zum Beispiel auf Konferenzen.

HTMX super.

Dominik

Ja, HTMX macht auch Spaß.

Dominik

Also ich habe es, glaube ich, auch schon mal einmal so Spaß halber gebaut.

Dominik

Ich glaube, da ist noch ein kleiner Bug drin beim Posten von dem Formular, die Validierung geht doch nicht richtig durch, aber sonst müsste man eigentlich mal veröffentlichen.

Dominik

Ich habe so ein Minimum-Beispiel auf Django gebaut auch.

Jochen

Ja, ja, ja.

Jochen

Es gibt ja auch Django HTMX.

Jochen

Adam Johnson hat es, glaube ich, gemacht.

Jochen

Super.

Jochen

Ja, also da muss ich auch mehr mitmachen.

Dominik

Ja, vor allen Dingen ist es halt wirklich so, das, was einen halt bei Django-Templates insbesondere nervt, ist halt so die Reaktivität der Templates, die halt eigentlich nicht da ist.

Dominik

Sondern du hast halt jedes Mal einen neuen Request und musst halt dann hingehen und musst immer komplett die ganze Seite nur abholen, was natürlich beim Nutzer einmal Plack hat und was halt irgendwie anzuschauen.

Jochen

Musst du halt nicht unbedingt, ja genau.

Dominik

Und mit HTMX ist es halt relativ einfach implementierbar, dass du es halt genau das nicht musst, sondern dass du halt Teile einfach validierst und halt dann tatsächlich gleich Feedback anzeigst für Formular, Varalidierung oder was auch immer man da haben möchte.

Jochen

Genau, und der Weg, wie man das früher gemacht hat, üblicherweise ist halt jQuery oder sowas oder halt irgendwie, weiß ich nicht, heutzutage nimmt man dann eher so Alpine.js oder PTV oder so.

Jochen

Aber das Problem dabei ist natürlich, dass sobald das dann halt komplizierter wird und sobald man dann halt irgendwie sowas macht, also was ich ja gerne hätte, ist ja irgendwie, dass auch Pagination darüber funktioniert, man dann so weiterklickt und das halt so schnell ist wie bei einer lokalen App oder so, das ist halt dann doch eher, da ist man dann schon eher schnell im Single Page SPA-Land unterwegs.

Jochen

Aber genau, und ich dachte bisher immer, und mit jQuery und so wird das State Management dann halt auch irgendwann, wenn es komplizierter wird, sehr, sehr hässlich.

Jochen

Und ich dachte immer so, naja gut, okay, da muss man halt doch SPA machen.

Jochen

Aber ich glaube tatsächlich HTMX ist vielleicht tatsächlich eine Lösung.

Jochen

Ich weiß es noch nicht genau, weil ich habe es noch nicht ausprobiert, aber.

Dominik

Ja, wir müssen ja mal ein bisschen ausbauen, dass das so ein bisschen voll.

Dominik

Also die ein bisschen einfacher wird von der Anwendung her, dass man vielleicht noch ein paar eigenen Template-Tex für sowas nimmt oder sowas.

Dominik

Ist ja natürlich besonders toll, aber.

Jochen

Ja, bin ich auf jeden Fall gespannt.

Jochen

Also diesen Trend gibt es ja jetzt auch schon einige Zeit und der gefällt mir tatsächlich sehr gut.

Jochen

Also da würde ich sagen, es ist ja super, wenn das ein bisschen mehr in die

Dominik

Richtung macht.

Jochen

Dass man wieder mehr Server, ja, es sind halt immer so Hype-Cycles, macht alles auf dem Client, oh nein, mach alles vom Server.

Dominik

Ja, bald, wenn das halt mit The Rust, auch bei Python mit Web im Browser geht, dann können wir auch das wieder beim Client machen.

Jochen

Ja, ich meine, ich würde ja sagen, eigentlich macht es schon Sinn, viel auf dem Server zu machen.

Dominik

Eigentlich ist der Terminal, eigentlich brauchst du eigentlich nur eine Tastatur und der Rest ist auf dem Server.

Dominik

Das einzige Problem ist, wenn die Verbindung abbricht, da muss man halt irgendwie gucken, was dann übrig bleibt, aber ja.

Jochen

Naja, aber finde ich, finde ich cool, auch interessant, ich habe jetzt so ein bisschen auch mal bei Ruby und Rails gehört, so ich meine, ich würde ja sagen, diese beiden großen oder so, tatsächlich Ruby und Rails ist halt eher so das große Webframework Batteries Included Ding.

Jochen

Fand ich jetzt auch mal ganz interessant.

Jochen

Also ich habe jetzt auch irgendwie mal was drüber gelesen, was das alles so kann.

Jochen

Ich glaube, ich habe auch letztens irgendwo eine Podcast-Episode dazu gehört.

Shownote.

Jochen

Ja, genau, wieder reinfahren.

Jochen

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

Jochen

Aber Django ist halt immer so das, was man dann auch nennt.

Jochen

Also Django ist so ähnlich.

Jochen

Aber zum Beispiel, was er, was ich nicht wusste, was er, so Ruby und Rails hatte schon immer so eine relativ ausgefeilte Asset-Pipeline drin.

Jochen

Bei Django gibt es sowas so ein bisschen, so mit Django Kompressor oder manchmal, also so ein bisschen gibt es Ansätze, aber nicht mal Ansatz vergleichbar mit dem, was Ruby on Rails da macht.

Jochen

Und Ruby and Rails hatte da so Dinge, da hat sogar Webpack dann am Schluss eingebaut und jetzt sind sie nochmal irgendwie auf was anderes umgestiegen.

Jochen

Und da war das ja auch so lange so, dass CoffeeScript verwendet wurde, halt für die ganzen wirklich Front-end-Front-end-Teile und das wurde dann halt aber alles automatisch gebundelt und so und in JavaScript transpiliert und so.

Jochen

Also, das ist ein Teil, wo Ruby and Rails halt nochmal echt mehr Zeugs hat als Django, würde ich sagen.

Jochen

Und dann ein auch wichtiger Teil, und da dachte ich so, okay, das ist tatsächlich vielleicht etwas, das ist ja auch sowas, das kann man auch mal muss sich einfach Ruby and Realth angucken und dann vielleicht Dinge in Django nachbauen oder so.

Jochen

Das fehlt in Django, ist sowas wie so ein Job-Queue-System.

Jochen

Und zwar gar nicht so, also ich habe mich ja auch schon oft über Salary geärgert und so.

Django Background Task

Jochen

oder so.

Jochen

Ja, genau.

Jochen

Es gibt ja ja dann auch diverse Django Q, es gibt R-Que für diese Redis-Queue-Geschichten, dann gibt es aber auch noch UI oder weiß ich nicht, es gibt noch diverse andere.

Jochen

Es gibt halt irgendwie zig unterschiedliche Q-Systeme.

Jochen

Und gut, denkt man sich, oh gut, muss ja nicht unbedingt in Django selber drin sein, ja, wozu auch.

Jochen

Es gibt ja genug Auswahl, damit man halt irgendwie was am besten gefällt.

Jochen

Aber der Punkt ist eigentlich bei Ruby und Rails ist es halt drin.

Jochen

Da gibt es halt, da nennt es sich, glaube ich, Action-Job oder irgendwie so, ich weiß es auch gar nicht genau.

Jochen

Und das eigentlich Witzige daran ist, dass das halt so ein Ding ist, das ist so ein Interface in Ruby und Rails selber.

Jochen

Genauso wie es da auch so eine Abstraktion gibt für File-Systemzugriff oder für Files irgendwie.

Jochen

Und das gibt es ja in Django auch.

Jochen

Django hast du ja auch irgendwie Default-File, wie heißt das?

Jochen

File-Storage, Default-File-Storage oder so kannst du setzen.

Jochen

Und dann implementierst, ist egal, was du verwendest, ob du irgendeinen Object Store verwendest oder das File-System oder was auch immer.

Jochen

Wenn das halt, es muss halt diese API anbieten und dann kann dahinter liegen, was will, aber du kannst es halt benutzen.

Jochen

Du hast halt innerhalb von Django ist es immer das gleiche Interface.

Jochen

Du kannst halt immer Files irgendwie, du kannst auch denen lesen, kannst sie schreiben und so.

Dominik

Oder wie Cash, ne?

Dominik

Cash-Backend, ja, genau.

Jochen

Genau, oder Cash-Backend, ne?

Jochen

Du kannst hinterher, du kannst hinterher das Cash-Backend austauschen, aber dein Applikationscode muss sich dafür nicht ändern.

Jochen

Und das kannst du mit diesem Jobkram halt dann auch machen.

Jochen

Und das ist eigentlich, ja, in der Ruby und Rails-Welt gibt es halt viele Dinge, die dann darauf aufbauen, dass diese Interfaces halt so sind, wie sie sind.

Jochen

Und das heißt, du kannst halt Third-Part-Party-Packages oder so bauen, die halt dann irgendwie deine Tasks in diese Queue schmeißen und da irgendwie, und sie müssen nicht wissen, welche Implementation du da verwendest.

Jochen

Ob das jetzt RabbitMQ ist oder was ist ja der Teufel, das ist halt alles hinter diesem Interface versteckt und spielt dann auch keine Rolle.

Jochen

Und diese Geschichten gibt es halt in Django gar nicht, weil es dieses einheitliche Interface nicht gibt.

Jochen

Das heißt, wenn ich in Django sowas machen wollte, dann hänge ich halt ab direkt von Celary oder von sonst irgendwas, weil es gibt nicht irgendwie das, ja genau, Django Background Task Interface.

Jochen

Sondern das ist halt, ja.

Dominik

Ja, das will ich tatsächlich noch.

Jochen

Und da dachte ich so, okay, ja.

Jochen

Und an Lindstein hat Real Wells auch noch so ein bisschen mehr Zeugs.

Jochen

Ja.

Jochen

Ja, ja, auch HTMX kommt da ja daher und diverse andere Geschichten.

Jochen

Ja.

Jochen

Und sie haben irgendwie für ihren ORM, da kann man, das kann man auch, also normalerweise Default ist relationale Datenbank, aber man kann halt auch MongoDB direkt dranhängen.

Jochen

Ich dachte so, wow, krass, wie haben sie das denn?

Jochen

Weil das ist auch immer ein Ding, was in Django requestet wird, dass Leute sagen, ich hätte gerne ein MongoDB.

Jochen

Kann ich jetzt ehrlich gesagt gar nicht so richtig verstehen, warum.

Jochen

Müssen wir vielleicht mal, wenn irgendjemand weiß, warum MongoDB cool ist, wir das erklären oder uns mal schreiben, warum das toll ist, weil sagen so, Gott, also verstehe ich gar nicht, warum nimmt man das, aber offenbar gibt es da einen großen Bedarf.

Jochen

Und das geht halt in Django nicht so richtig.

Jochen

Aber könnte man sich auch vorstellen, wenn es halt ein.

Dominik

Dann sag doch mal ganz kurz, warum du das denn doof nest als Wahl oder was.

Jochen

Das heißt doof.

Jochen

Ich würde nur sagen, ja, also JSON-Field in Postgres ist schneller.

Jochen

Ist schneller als MongoDB und ja.

Mehr braucht man nicht auch so.

Jochen

Und es kann halt zusätzlich noch die ganzen relationalen Geschichten.

Jochen

Also wozu dann MongoDB?

Jochen

Also kann halt MongoDB ist ja quasi nur das JSON-Field.

Jochen

Und kann halt die relationalen Dinge nicht.

Jochen

Aber die relationalen Features brauchst du ja eigentlich auch.

Jochen

Und die ganze Transaktionssicherheit und den ganzen Isolationslevel und weißer Teufel, den ganzen Kram willst du eigentlich auch haben.

Jochen

Naja, also irgendwie, keine Ahnung warum.

Jochen

Ja, vielleicht auch, wenn man halt sagt, okay, man halt es irgendwie vereinheitlicht und es gibt halt nur MongoDB, ne?

Jochen

Und jetzt kommt damit klar.

Jochen

Es kann es halt gar nicht einfach irgendwie was anderes machen.

Jochen

Okay, ja, dann ist es halt so.

Jochen

Ja.

Dominik

Ja, ich finde, wir haben jetzt eine sehr, sehr bunte Folge gehabt.

Dominik

Ich glaube, es wäre relativ schwierig, uns zu folgen.

Dominik

Ich hoffe, ihr habt es zum Ende durchgehalten.

Dominik

Vielleicht habt ihr das ja irgendwie geschafft.

Dominik

Haben wir noch irgendwas?

Jochen

Nee, ansonsten.

Dominik

Achso, einen Pick der Woche, ich glaube, ich habe das schon tausendmal.

Jochen

Doch, ich hab, also was ich ganz cool fand, habe ich letztens auch eingebaut.

Jochen

Django Upgrade gibt's.

Jochen

Es gibt ja für Python, glaube ich, hat Anthony Sotil irgendwie auch irgendwie so ein Ding geschrieben.

Jochen

Python Upgrade oder so, ich weiß es nicht genau, wie das Paket heißt.

Jochen

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

Dominik

Die neueste Syntax und die ganzen deprecated Sachen ersetzt werden, automatisch durch die besseren.

Jochen

Ja, ja, und das habe ich dann halt als Priko-Method irgendwie eingebaut, sodass dann halt immer, wenn halt Sachen deprecated werden oder wenn es eine bessere Art gibt, das zu machen, das wird dann halt automatisch ersetzt und ich muss das nicht irgendwie von Hand machen.

Jochen

Ja.

Das war nice.

Jochen

Und das ist ziemlich, naja, das ist ziemlich nett.

Jochen

Das ist auch von Adam Johnson, glaube ich.

Dominik

Ja, was nehme ich denn?

Dominik

Ja, ich habe ja die ganzen Sachen Fast CQM-Bordel habe ich ja schon gesagt.

Dominik

Habe ich auch schon mal Rich erwähnt, eigentlich irgendwo.

Jochen

Ja, das habe ich ja auch schon mehrfach gehabt.

Dominik

Habe ich bestimmt schon mal als schon.

Dominik

Ich nehme es einfach nochmal.

Jochen

Ja, das ist auch wirklich toll.

Jochen

Da gibt es auch jetzt irgendwie Textual oder so irgendwie.

Jochen

Der Autor von Rich und Textual, der macht jetzt auch, der probiert das irgendwie Open Source zu entwickeln, quasi.

Jochen

Und versucht jetzt davon irgendwie, damit irgendwie klar zu kommen, damit durchzukommen, seine Projekte zu entwickeln.

Jochen

Und das fand ich auch faszinierend.

Jochen

Ja, ich bin mal gespannt.

Jochen

Das ist ja auf jeden Fall sehr populär, was er macht und es ist ja auch super.

Jochen

Und ich hoffe mal, das gehabt.

Jochen

Das wäre irgendwie toll, wenn das irgendwie passiert.

Dominik

Also falls ihr nicht wisst, was das ist, which macht ein bisschen Farbe in euer Commando-Output.

Dominik

So ganz, ganz nett.

Dominik

Oh, ich benutze das gerne mit Humanize, vielleicht noch ein nächster Pick, falls ich schon mal gepickt habe.

Dominik

Also Humanize macht auch sowas wie Zahlen oder vor allen Dingen Daytime-Objekten irgendwas vor drei Sekunden oder vor kurzer Zeit und man kann so ein bisschen definieren, dass das irgendwie nett sich anhörte.

Dominik

Ich mag das irgendwie ganz gerne für ein, zwei Dinge.

Dominik

Ein bisschen Human More Readable Logs oder sowas.

Jochen

Ja, klingt gut.

Dominik

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

Dominik

Eine Packaging-Folge.

Dominik

Na, jetzt haben wir Humanized dabei.

Jochen

Okay.

Dominik

Okay.

Dominik

Ja, dann bleibt es gewogen, hört uns weiter, wann ihr wollt.

Dominik

Und bis zum nächsten Mal.

Jochen

Dann, bis zum nächsten Mal.

Jochen

Tschüss.