WEBVTT

00:00:00.840 --> 00:00:04.640
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 35.

00:00:06.260 --> 00:00:09.920
Ja, schön, dass ihr wieder eingestellt habt. Wir waren etwas länger nicht da, das tut uns etwas leid.

00:00:10.260 --> 00:00:15.960
War ziemlich viel zu tun und ja, Ferienfieber und so weiter, was man nicht alles kennt.

00:00:16.760 --> 00:00:16.960
Ja.

00:00:17.900 --> 00:00:19.000
Der alte Wahnsinn.

00:00:19.400 --> 00:00:24.940
Ja, genau. Herzlich willkommen Dominik auch zurück. Bist du sicher, dass das Folge 35 ist?

00:00:25.720 --> 00:00:27.680
Ja, das ist ein bisschen schwierig zu sagen.

00:00:27.680 --> 00:00:28.280
ein bisschen Track.

00:00:29.620 --> 00:00:31.240
Du hast verloren. Das ist übrigens Jochen.

00:00:31.460 --> 00:00:31.820
Hallo.

00:00:33.600 --> 00:00:35.540
Ja, genau. Vielleicht sagen wir das nächste Mal einfach

00:00:35.540 --> 00:00:36.760
herzlich willkommen ohne Episode.

00:00:37.660 --> 00:00:39.680
Das ist ja auch sowas. Das hat Apple Podcasts,

00:00:40.660 --> 00:00:41.700
iTunes hat ja so

00:00:41.700 --> 00:00:43.600
Richtlinien, wie man das, die haben irgendwann mal gesagt,

00:00:43.680 --> 00:00:45.700
sie hätten gern die Episoden-Nummer nicht mehr im Titel.

00:00:46.080 --> 00:00:47.780
Das hat man früher immer so gemacht. Ich habe das auch so gemacht

00:00:47.780 --> 00:00:49.680
und dann habe ich das rausgenommen.

00:00:49.880 --> 00:00:51.600
Ich weiß nicht, am Anfang sind die, glaube ich, noch mit

00:00:51.600 --> 00:00:53.240
dabei und irgendwann habe ich...

00:00:53.240 --> 00:00:55.220
Letztens hatten wir jedenfalls 34, dann 33,

00:00:55.220 --> 00:00:57.200
jetzt haben wir 35 und wir haben eigentlich noch einige

00:00:57.200 --> 00:00:58.740
unveröffentlicht. Das heißt, das ist auch nicht ganz so einfach

00:00:58.740 --> 00:01:01.060
an unseren Files, das zu sehen. Aber ja,

00:01:01.140 --> 00:01:03.300
schön, dass ihr wieder da seid. Wir machen heute eine Mixed-Folge.

00:01:03.540 --> 00:01:05.160
Also ein bisschen über Python

00:01:05.160 --> 00:01:06.440
wollen wir erzählen, drei Zehnen und so.

00:01:06.960 --> 00:01:08.720
Genau, da muss man ja eigentlich was zu sagen.

00:01:09.720 --> 00:01:11.080
Genau, und vielleicht noch über

00:01:11.080 --> 00:01:12.300
die alten Neuerungen, die es so gab.

00:01:12.740 --> 00:01:13.940
Und dann wollen wir noch ein bisschen über

00:01:13.940 --> 00:01:16.880
Shared Memory von

00:01:16.880 --> 00:01:18.620
Python-Prozessen sprechen vielleicht.

00:01:19.640 --> 00:01:21.120
Ja, je nachdem, wie viel uns da einfällt.

00:01:21.220 --> 00:01:21.960
Oder sonst so Dinge.

00:01:23.000 --> 00:01:23.900
Andere Dinge auch.

00:01:24.540 --> 00:01:26.040
Bist du noch nicht so genau. Mal schauen.

00:01:26.320 --> 00:01:28.340
Ja, wir müssen uns wieder strukturierte Formen kriegen,

00:01:28.460 --> 00:01:29.520
aber das haben wir bisher noch nicht hinbekommen.

00:01:29.760 --> 00:01:30.340
Ja, genau.

00:01:32.820 --> 00:01:34.240
Ja, bevor wir jetzt mit Python 3.10 anfangen,

00:01:34.620 --> 00:01:35.960
was haltet ihr eigentlich von Werbung?

00:01:37.040 --> 00:01:38.960
Wir verhalten, wir verhalten das an einem bestimmten Grund.

00:01:40.180 --> 00:01:41.840
Ob wir es so mit Helge Schneider halten sollen,

00:01:41.960 --> 00:01:43.400
so Werbung ist scheiße.

00:01:44.120 --> 00:01:45.600
Oder ist das für euch ein No-Go?

00:01:45.660 --> 00:01:47.000
Es wäre cool, wenn ihr dazu ein bisschen Feedback gebt,

00:01:47.080 --> 00:01:48.960
ob das für euch in Ordnung wäre oder nicht.

00:01:49.620 --> 00:01:52.040
Wir haben uns aus einigen technischen Perspektiven gefragt,

00:01:52.040 --> 00:01:55.300
ob das Sinn macht, oder das mal auszuprobieren.

00:01:55.500 --> 00:01:57.460
Wir sind aber eigentlich noch nicht so wirklich selber davon überzeugt.

00:01:57.700 --> 00:01:59.240
Ja, wäre es natürlich praktisch, wenn es irgendwie

00:01:59.240 --> 00:02:01.320
die ganzen Kosten, die da so ein bisschen, also so

00:02:01.320 --> 00:02:03.320
wahnsinnig hohe Kosten sind es jetzt nicht, aber wenn die auch ein bisschen

00:02:03.320 --> 00:02:05.540
Ich kaufe mir ein Schloss, Jochen.

00:02:08.100 --> 00:02:09.660
Wann das wieder reinkriegen könnte oder so,

00:02:09.740 --> 00:02:10.660
keine Ahnung, muss man mal schauen.

00:02:11.200 --> 00:02:13.160
Ja, das ist auch so ein Thema, genau.

00:02:14.500 --> 00:02:15.520
Ja, ich warte nur

00:02:15.520 --> 00:02:17.460
darauf, dass ich wegen dem Podcast ein Schloss

00:02:17.460 --> 00:02:17.840
ziehen kann.

00:02:19.140 --> 00:02:20.780
Ich glaube, da wirst du noch ein bisschen warten müssen.

00:02:21.320 --> 00:02:23.280
Das wird noch etwas dauern. Ich habe Zeit.

00:02:23.720 --> 00:02:23.860
Ja.

00:02:25.500 --> 00:02:27.300
Wir lieben verlängerte Maßnahmen.

00:02:31.220 --> 00:02:33.440
Tja, genau. Wollen wir so ein bisschen News

00:02:33.440 --> 00:02:35.420
machen? Dann könnten wir mal wieder...

00:02:35.420 --> 00:02:36.340
News, ja.

00:02:37.400 --> 00:02:39.140
Also am Montag kam

00:02:39.140 --> 00:02:41.580
Python 3.10.0 heraus.

00:02:41.820 --> 00:02:43.280
Ja. Also letzten Monat, also am

00:02:43.280 --> 00:02:45.400
4.10. Voll gut, genau.

00:02:45.520 --> 00:02:46.580
Und dazu gab es auch so ein

00:02:46.580 --> 00:02:49.300
Release

00:02:49.300 --> 00:02:51.140
Stream irgendwie, fand ich auch nicht.

00:02:51.140 --> 00:02:52.380
Oh, den habe ich nicht gesehen.

00:02:52.820 --> 00:02:54.880
Ah, ja, genau.

00:02:55.020 --> 00:02:56.920
kann man sich auf YouTube nochmal angucken. Also ehrlich gesagt,

00:02:56.980 --> 00:02:58.960
ich weiß nicht, ob ich den sich wirklich komplett angucken will. Das ist irgendwie

00:02:58.960 --> 00:03:01.000
so über drei Stunden. Aber

00:03:01.000 --> 00:03:02.680
man kann mal reingucken, einfach um

00:03:02.680 --> 00:03:04.980
die Leute zu sehen, die das machen. Das ist vielleicht ganz interessant.

00:03:05.600 --> 00:03:06.980
Die hatten auch lustige Hüte auf. Das ist auch

00:03:06.980 --> 00:03:08.880
super. Oh, cool.

00:03:09.500 --> 00:03:10.960
Genau. Ja, und

00:03:10.960 --> 00:03:12.540
das war auch ganz witzig.

00:03:13.940 --> 00:03:15.100
Ja, es war eine komplizierte

00:03:15.100 --> 00:03:15.880
Geschichte, so ein Release.

00:03:17.700 --> 00:03:18.020
Ja.

00:03:19.920 --> 00:03:20.980
Genau. Ich habe jetzt auch

00:03:20.980 --> 00:03:22.700
schon so ein bisschen, ich weiß nicht, hast du das schon mal

00:03:22.700 --> 00:03:24.540
versucht, irgendwo zu installieren oder mit was zu kaufen?

00:03:24.540 --> 00:03:26.380
Ja, ich benutze schon relativ lange,

00:03:26.560 --> 00:03:28.620
jetzt fast zwei Monate, also den Rescandidate, der so dann

00:03:28.620 --> 00:03:30.540
draußen kam, habe ich auch schon dann

00:03:30.540 --> 00:03:32.680
daily benutzt und habe so ein bisschen gemerkt, was da

00:03:32.680 --> 00:03:34.600
ging, was nicht ging. Direkt da, also ich

00:03:34.600 --> 00:03:36.600
muss den ja meistens oder oft unter Windows

00:03:36.600 --> 00:03:38.460
benutzen, leider, aber

00:03:38.460 --> 00:03:40.740
ja, da gibt es halt ein großes Problem mit Pybin32,

00:03:41.080 --> 00:03:42.780
das kann man aber relativ einfach

00:03:42.780 --> 00:03:44.560
fixen, wer weiß, wie es geht, aber das erzähle ich vielleicht

00:03:44.560 --> 00:03:46.540
einfach später. Ja, okay.

00:03:47.220 --> 00:03:48.560
Genau, ich habe es eigentlich, ich habe es

00:03:48.560 --> 00:03:50.460
vielleicht auch mal, ich habe auch mal eine

00:03:50.460 --> 00:03:52.700
Beta, dann Release Candidate, weiß nicht, mal installiert,

00:03:52.780 --> 00:03:53.460
mal so ein bisschen zu gucken.

00:03:54.480 --> 00:03:56.320
Oder ich glaube, wir hatten irgendwann mal, haben wir uns

00:03:56.320 --> 00:03:58.440
über das Structural Pattern Matching

00:03:58.440 --> 00:04:00.080
auch schon mal unterhalten, das ist schon eine ganze Weile her.

00:04:00.180 --> 00:04:01.820
Ich glaube, das habe ich auch mal kurz ausprobiert oder so.

00:04:02.740 --> 00:04:04.460
Aber ansonsten habe ich das noch nicht verwendet

00:04:04.460 --> 00:04:06.500
und jetzt aber doch dann mal

00:04:06.500 --> 00:04:08.320
installiert auch. Ich habe jetzt versucht, das Projekt

00:04:08.320 --> 00:04:10.680
nämlich gerade... Ja, das sind ja so die Hauptfeatures,

00:04:10.900 --> 00:04:12.480
das Structural Pattern Matching und

00:04:12.480 --> 00:04:14.500
die Typing-Syntax so ein bisschen

00:04:14.500 --> 00:04:15.140
angepasst und so.

00:04:16.600 --> 00:04:18.180
Na gut, also deswegen frage ich, wie man es sieht.

00:04:18.260 --> 00:04:19.000
Also ich glaube,

00:04:20.100 --> 00:04:23.460
so ein bisschen

00:04:23.460 --> 00:04:24.420
kontrovers.

00:04:27.680 --> 00:04:28.960
Aber klar, ich kann schon verstehen,

00:04:29.060 --> 00:04:31.060
warum man die als die wichtigsten neuen Features

00:04:31.060 --> 00:04:33.200
klassifizieren würde.

00:04:33.480 --> 00:04:35.020
Ich glaube, das positivste

00:04:35.020 --> 00:04:37.200
Feedback haben

00:04:37.200 --> 00:04:38.540
die verbesserten Fehlermeldungen bekommen.

00:04:38.980 --> 00:04:40.520
Und das ist tatsächlich super.

00:04:40.780 --> 00:04:42.500
Die werden sogar mit 3.11 noch ein bisschen schöner.

00:04:43.460 --> 00:04:45.020
Und dass man tatsächlich nicht nur

00:04:45.020 --> 00:04:47.120
irgendeinen Quatsch bekommt, sondern tatsächlich die Stelle, an der es steht

00:04:47.120 --> 00:04:48.660
und warum, vielleicht auch ein Hinweis,

00:04:49.060 --> 00:04:50.680
warum es falsch sein könnte und was da falsch ist,

00:04:50.720 --> 00:04:52.220
das wird direkt gut beschrieben.

00:04:52.700 --> 00:04:54.680
Genau, also bisher ist halt, wenn man da irgendwo

00:04:54.680 --> 00:04:56.720
eine Klammer vergessen hat zuzumachen oder so, dann kriegt man

00:04:56.720 --> 00:04:58.680
halt einen Syntax-Error beim

00:04:58.680 --> 00:05:00.600
nächsten Statement, irgendwie beim Gleichheitszeichen

00:05:00.600 --> 00:05:02.800
oder irgendwie sowas. Und das ist

00:05:02.800 --> 00:05:04.740
halt dann irgendwie verwirrend, weil man kriegt halt den Fehler

00:05:04.740 --> 00:05:07.020
angezeigt, nicht an der Stelle, wo man den erwartet,

00:05:07.280 --> 00:05:08.260
wo er passiert ist, sondern

00:05:08.260 --> 00:05:10.520
wo der Interpreter dann halt drüber fällt.

00:05:10.960 --> 00:05:12.740
Aber genau, und

00:05:12.740 --> 00:05:14.760
jetzt ist es halt besser. Und das ist

00:05:14.760 --> 00:05:15.780
halt auch alles konsequent.

00:05:16.440 --> 00:05:18.840
Sogar unterkringelt jetzt richtig die Stelle, an der es ist,

00:05:18.920 --> 00:05:20.580
mit den Numbers und so, ein schönes Debugging.

00:05:20.600 --> 00:05:22.440
Das ist von einem Pack-Parser, der jetzt da neu ist,

00:05:22.520 --> 00:05:23.580
und mit dem kann man einfach mehr machen.

00:05:25.100 --> 00:05:27.220
Ja, weiteres Feature,

00:05:27.320 --> 00:05:29.300
was halt dem neuen Parser

00:05:29.300 --> 00:05:30.020
sozusagen,

00:05:31.400 --> 00:05:33.260
der dafür zuständig ist,

00:05:33.260 --> 00:05:35.180
ist das jetzt in, das ist auch eher so eine

00:05:35.180 --> 00:05:36.720
Randhässlichkeit, aber das ist halt

00:05:36.720 --> 00:05:39.160
schon komisch, wenn man diese

00:05:39.160 --> 00:05:41.220
Limitierung irgendwie, wenn man

00:05:41.220 --> 00:05:43.020
auf die gestoßen ist, dass

00:05:43.020 --> 00:05:44.920
in Context-Manager, also wenn man sagt

00:05:44.920 --> 00:05:47.280
with irgendwie Context-Manager as irgendwas

00:05:47.280 --> 00:05:50.600
da konnte man vorher

00:05:50.600 --> 00:05:52.160
nicht das so klammern.

00:05:52.980 --> 00:05:54.480
Also, dass man das über mehrere Zeilen, das musste

00:05:54.480 --> 00:05:56.600
in einer Zeile sein und man konnte auch

00:05:56.600 --> 00:05:57.700
glaube ich nicht mehrere,

00:05:58.880 --> 00:06:00.340
sondern musste das dann mehrfach

00:06:00.340 --> 00:06:02.460
verschachteln, was dann natürlich, also

00:06:02.460 --> 00:06:04.240
wenn auf dieses Problem gestoßen ist, man hat jetzt mehrere

00:06:04.240 --> 00:06:06.080
Context-Manager und

00:06:06.080 --> 00:06:08.380
dann irgendwann kommen

00:06:08.380 --> 00:06:10.360
dann große Nöte, weil wenn man

00:06:10.360 --> 00:06:12.240
nicht, wenn man immer weiter verschachteln muss, wenn man jetzt

00:06:12.240 --> 00:06:14.220
mehrere davon hat, dann wird das halt, wird der Platz auf der

00:06:14.220 --> 00:06:16.280
rechten Seite eng und wenn man die aber nicht

00:06:16.280 --> 00:06:17.940
umbrechen kann, weil diese Klammer dort

00:06:17.940 --> 00:06:19.940
nicht funktioniert, dann hat man irgendwann

00:06:19.940 --> 00:06:22.200
so ein Problem. Das geht ja jetzt gar nicht mehr

00:06:22.200 --> 00:06:23.480
so richtig. Hässlich wird das.

00:06:23.680 --> 00:06:24.380
Es wird dann sehr hässlich.

00:06:25.800 --> 00:06:26.480
Und das geht jetzt.

00:06:27.020 --> 00:06:29.960
Mit Klammern, sodass man mehrere

00:06:29.960 --> 00:06:31.760
Zeilen verwenden kann und halt auch mehrere

00:06:31.760 --> 00:06:33.720
in einem Dings, sodass man das halt

00:06:33.720 --> 00:06:35.220
quasi, wenn man viele

00:06:35.220 --> 00:06:36.240
Context-Manager

00:06:36.240 --> 00:06:39.400
benutzen möchte, das kann man jetzt einfach

00:06:39.400 --> 00:06:41.540
in eine Zeile schreiben,

00:06:41.660 --> 00:06:42.660
beziehungsweise halt untereinander.

00:06:43.980 --> 00:06:44.100
Ja.

00:06:46.100 --> 00:06:47.740
Es sind wahrscheinlich nicht so viele Leute

00:06:47.740 --> 00:06:48.880
drauf geschossen auf das Problem, aber

00:06:48.880 --> 00:06:50.620
ja, genau.

00:06:51.840 --> 00:06:53.400
Manchmal macht das schon Sinn. Also wenn man das schachteln will,

00:06:53.500 --> 00:06:55.520
könnte man das auch anders lösen, indem man Dekoratoren verwendet

00:06:55.520 --> 00:06:57.000
oder so, aber...

00:06:57.000 --> 00:06:59.160
Ja, aber ich meine, dafür gibt es die Syntax ja, dass man das halt

00:06:59.160 --> 00:07:01.200
verwendet. Und ja,

00:07:01.400 --> 00:07:02.640
wenn man das dann nicht so richtig

00:07:02.640 --> 00:07:04.520
verwenden kann, ist es halt ein bisschen blöd.

00:07:05.640 --> 00:07:07.220
Meistens hat man ja nur so ein, zwei Dinger,

00:07:07.300 --> 00:07:07.920
die man machen möchte.

00:07:08.680 --> 00:07:10.960
Also in diese Verschachtelung,

00:07:11.040 --> 00:07:12.540
oder dass es blöd wurde, ist mir dann

00:07:12.540 --> 00:07:15.000
die einzige Male, wo mir das mal passiert ist,

00:07:15.080 --> 00:07:16.920
das irgendwie ist halt, wenn ich

00:07:16.920 --> 00:07:18.400
in Tests mehrere Sachen,

00:07:19.640 --> 00:07:20.680
also wenn ich da mehrere Sachen

00:07:20.680 --> 00:07:22.600
wegmocken will oder wegpatchen will

00:07:22.600 --> 00:07:24.880
und teilweise

00:07:24.880 --> 00:07:26.820
kann man das halt, kann man ja auch im Dekorator machen,

00:07:26.960 --> 00:07:28.820
manchmal geht das auch nicht, weil das basiert halt auf anderen Sachen

00:07:28.820 --> 00:07:30.940
und dann muss man das halt im

00:07:30.940 --> 00:07:32.880
Test selber machen und dann, wenn man

00:07:32.880 --> 00:07:35.020
viele Sachen hat, die man wegmocken

00:07:35.020 --> 00:07:36.740
möchte, dann wird es halt komisch und

00:07:36.740 --> 00:07:38.740
das ist aber die einzige Stelle, wo man das praktisch

00:07:38.740 --> 00:07:40.540
jemals irgendwie begegnet ist, ansonsten.

00:07:41.620 --> 00:07:43.280
Ne, na gut.

00:07:43.500 --> 00:07:44.880
Also was ich sehr gerne benutze, ist diese neue

00:07:44.880 --> 00:07:46.980
Typing-Syntax, wo man jetzt halt, ich weiß gar nicht, wie heißt

00:07:46.980 --> 00:07:49.000
das Zeichen überhaupt, dieser senkrechte Strich?

00:07:49.220 --> 00:07:50.740
Die Pipe. Pipe-Operator, ja. Genau.

00:07:51.220 --> 00:07:52.780
Den kann man halt jetzt verwenden als Type-In

00:07:52.780 --> 00:07:54.860
zwischen einem Oder-Zeichen, einfach sagen,

00:07:55.380 --> 00:07:56.860
es ist ein Dict oder ein List, der wartet, dass diese

00:07:56.860 --> 00:07:58.820
Funktion, da gibt es sie raus, dann macht man einfach Pipe dazwischen.

00:07:58.960 --> 00:08:00.960
Das ist irgendwie sehr intuitiv und man muss nicht

00:08:00.960 --> 00:08:03.020
immer alles vom Typing direkt importieren und ein Union

00:08:03.020 --> 00:08:05.200
draus machen. Ja, ja, das sieht auf jeden Fall

00:08:05.200 --> 00:08:06.720
deutlich besser aus. Stimmt.

00:08:07.980 --> 00:08:08.900
Genau, ja.

00:08:09.460 --> 00:08:10.980
Das ist schön. Ich finde bei

00:08:10.980 --> 00:08:13.080
dieser Type-In-Syntax immer so, ich habe mich ehrlich gesagt

00:08:13.080 --> 00:08:15.380
auch noch nie so richtig wirklich viel damit beschäftigt,

00:08:15.440 --> 00:08:17.120
muss ich sagen. Will ich auch noch irgendwann machen,

00:08:17.320 --> 00:08:19.080
aber ich habe es bisher nie so benutzt.

00:08:20.940 --> 00:08:21.220
Aber

00:08:21.220 --> 00:08:22.540
ich finde das immer ein bisschen verwirrend von der,

00:08:22.840 --> 00:08:25.000
ich weiß nie so genau, was sind jetzt die aktuelle Formen von

00:08:25.000 --> 00:08:26.740
Syntax, die man da verwenden kann und bis welcher

00:08:26.740 --> 00:08:28.540
Python-Version zurückgeht das denn und so.

00:08:30.440 --> 00:08:31.100
Aber ja,

00:08:31.220 --> 00:08:32.700
also so sieht es auf jeden Fall schon mal viel besser aus.

00:08:32.780 --> 00:08:34.940
Sieht sowieso schon mal viel besser aus, dass man nicht die ganzen Typen

00:08:34.940 --> 00:08:36.420
von irgendwie aus

00:08:36.420 --> 00:08:38.920
Typing importieren muss, sondern dass man halt direkt

00:08:38.920 --> 00:08:39.660
die echten verwenden kann.

00:08:39.660 --> 00:08:41.340
Also es funktioniert halt leider noch nicht immer so komplett,

00:08:41.420 --> 00:08:43.440
je nachdem, wie komplex und wie vollständig man das irgendwie so machen

00:08:43.440 --> 00:08:45.480
will. Aber ja, das ist schon mal auf jeden Fall

00:08:45.480 --> 00:08:47.480
ein Schritt in die richtige, sehr richtige Richtung. Sieht auch gut

00:08:47.480 --> 00:08:49.400
aus. Was mich halt noch so ein bisschen

00:08:49.400 --> 00:08:51.560
nervt, ist halt so, wenn du zirkuläre Abhängigkeiten

00:08:51.560 --> 00:08:52.240
hast oder sowas.

00:08:53.300 --> 00:08:55.100
Das passiert halt bei Typing relativ schnell

00:08:55.100 --> 00:08:57.460
und das ist noch nicht so richtig gelöst.

00:08:57.540 --> 00:08:59.280
Es gibt ja irgendwie so zwei Dinge, die man machen kann,

00:08:59.360 --> 00:09:01.300
dass man von Typing irgendwie das einmal importiert

00:09:01.300 --> 00:09:03.640
und dann nur dann, wenn Typing Type-Checking

00:09:03.640 --> 00:09:05.160
ist, dann die nutzt.

00:09:05.800 --> 00:09:07.420
Das geht auch nicht immer. Manchmal kann man es dann als

00:09:07.420 --> 00:09:09.320
String dann doch hinschreiben und dann hat man einige Types, die

00:09:09.320 --> 00:09:11.180
als Klassen definiert sind und einige als Strings.

00:09:11.260 --> 00:09:12.060
Das ist auch irgendwie hässlich.

00:09:12.340 --> 00:09:14.600
Und naja, da wollen sie aber irgendwie dran arbeiten.

00:09:14.700 --> 00:09:16.220
Aber ich weiß noch nicht genau, wann das eingeführt wird.

00:09:16.720 --> 00:09:18.000
Dass man das halt einfach da machen kann.

00:09:18.060 --> 00:09:19.700
Dass er halt erkennt, dass es ein Type ist

00:09:19.700 --> 00:09:22.020
und es halt dann tatsächlich Lazy importiert oder so.

00:09:22.220 --> 00:09:24.700
Und das dann halt kein Problem ist beim Kompilieren.

00:09:25.960 --> 00:09:28.020
Okay, auch interessant, ja.

00:09:30.820 --> 00:09:32.420
Also das heißt, auch das wird noch besser.

00:09:32.580 --> 00:09:33.840
Also das heißt, wir bekommen insgesamt im Moment

00:09:33.840 --> 00:09:35.820
so ein bisschen hübschere, ästhetischere Sachen

00:09:35.820 --> 00:09:37.320
für so Errors und Syntax und so.

00:09:38.140 --> 00:09:40.080
Je nachdem, ob man Type-Hints überhaupt mag.

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

00:09:47.800 --> 00:09:51.000
Ja, man ist halt nicht persönlich, ursprünglich, da gab es das halt nie.

00:09:51.920 --> 00:09:58.000
Und ja, ich kann es so ein bisschen nachvollziehen auf der anderen Seite. Also ich glaube, ja, man muss es halt dafür einsetzen, wo es halt Sinn macht.

00:09:58.160 --> 00:09:58.460
Ja, genau.

00:09:58.460 --> 00:10:04.360
Also es ist, was ich auch komisch finde, ist, wenn Leute das dann überall verwenden, weil es macht halt nicht überall Sinn.

00:10:04.520 --> 00:10:06.020
Also ich habe auch das Gefühl, dass zum Beispiel, wenn ich

00:10:06.020 --> 00:10:07.420
gerade an den Sachen,

00:10:08.140 --> 00:10:10.360
an denen ich schreibe, wenn das halt so,

00:10:10.480 --> 00:10:12.460
das ist halt ein Projekt, was halt

00:10:12.460 --> 00:10:14.580
andere Bibliotheken verwendet, aber selber keine Bibliothek.

00:10:14.980 --> 00:10:16.440
An der Stelle macht es nicht so wahnsinnig

00:10:16.440 --> 00:10:18.060
viel Sinn, weil ich, also

00:10:18.060 --> 00:10:20.400
es ist schön, wenn ich in der

00:10:20.400 --> 00:10:22.160
IDE sozusagen die, also

00:10:22.160 --> 00:10:24.300
sozusagen, wenn die IDE

00:10:24.300 --> 00:10:25.420
das verwenden kann, um

00:10:25.420 --> 00:10:28.200
mir zu helfen, aber

00:10:28.200 --> 00:10:30.340
wenn ich sowieso, wenn das die Libraries,

00:10:30.460 --> 00:10:32.360
die Verwender tun und brauche

00:10:32.360 --> 00:10:34.220
ich das sozusagen für meinen eigenen Code, den ich nicht

00:10:34.220 --> 00:10:36.060
quasi nie aufrufe, brauche ich das ja gar nicht.

00:10:36.240 --> 00:10:36.980
Oder der halt nur

00:10:36.980 --> 00:10:40.160
verwendet wird, um halt irgendwas

00:10:40.160 --> 00:10:42.100
zu tun. Das ist halt irgendwie da. An der Stelle

00:10:42.100 --> 00:10:44.180
brauche ich es bis jetzt nicht, ob ich es wirklich

00:10:44.180 --> 00:10:46.140
brauche. Also ich mache wahrscheinlich auch im Moment zu

00:10:46.140 --> 00:10:48.020
viel Hints, also weil es gerade irgendwie ein bisschen noch

00:10:48.020 --> 00:10:50.200
reiner als weniger. Aber ich finde das halt schon

00:10:50.200 --> 00:10:51.460
sehr praktisch, wenn ich halt wirklich

00:10:51.460 --> 00:10:54.140
das Objekt quasi schon so

00:10:54.140 --> 00:10:56.120
getitlet habe, dass ich halt weiß, was für ein Objekt

00:10:56.120 --> 00:10:58.080
ich da in der Funktion der Hand habe, weil das

00:10:58.080 --> 00:10:59.940
so getitlet ist. Oder auch bei der Variablenzuweisung, dass

00:10:59.940 --> 00:11:01.780
halt schon relativ klar ist, was das halt mal sein wird

00:11:01.780 --> 00:11:04.040
oder so. Weil dann relativ, also auch

00:11:04.040 --> 00:11:06.120
manchmal kann man halt so eine Base-Klasse nennen, dann weiß man halt, was hat man

00:11:06.120 --> 00:11:07.920
denn da in der Hand und das ist irgendwie, also

00:11:07.920 --> 00:11:10.220
A, natürlich vom Editor, der das halt super dann linden kann

00:11:10.220 --> 00:11:11.840
und dann halt auch die Types dann feststellt auch,

00:11:12.280 --> 00:11:14.060
wenn das halt irgendwie nicht stimmt, das kann er halt relativ

00:11:14.060 --> 00:11:16.000
gut feststellen irgendwie, die meisten modernen können das ja.

00:11:16.780 --> 00:11:18.080
Ja. Und das ist irgendwie schon echt

00:11:18.080 --> 00:11:19.840
hilfreich, also gerade wenn ich jetzt irgendwie mit anderen Leuten

00:11:19.840 --> 00:11:21.860
irgendwie gleichzeitig irgendwie Features entwickle

00:11:21.860 --> 00:11:23.940
und wieder irgendwie so einen kleinen Teil baut und was meint

00:11:23.940 --> 00:11:26.000
der denn da, wenn die Leute nicht immer so gut

00:11:26.000 --> 00:11:28.160
nehmen oder so manchmal, dann sieht man das halt auf jeden Fall

00:11:28.160 --> 00:11:29.900
am Type auch schon, was das dann halt sein

00:11:29.900 --> 00:11:31.880
könnte und das, also

00:11:31.880 --> 00:11:33.540
für mich macht das deutlich verständlicher, also ja,

00:11:33.640 --> 00:11:35.780
man kann es wahrscheinlich auch too much machen an zwei Stellen, aber

00:11:35.780 --> 00:11:37.680
ja, also ich finde halt, das Linting,

00:11:37.780 --> 00:11:39.660
das ist mir so oft aufgefallen, dass irgendwo,

00:11:40.160 --> 00:11:41.560
wenn man dann mal die Type-Ins dann

00:11:41.560 --> 00:11:43.760
reingebaut hat in so einen Code, der irgendwas war komisch

00:11:43.760 --> 00:11:45.780
irgendwie von einem Coworker oder sowas,

00:11:45.840 --> 00:11:47.680
dann merkt man so, oh ja, klar, wird direkt gelintet,

00:11:47.760 --> 00:11:49.660
da ist der Typ irgendwann kaputt gegangen und er gibt halt dann

00:11:49.660 --> 00:11:51.600
doch nicht das zurück, was er erwartet hat und vielleicht

00:11:51.600 --> 00:11:53.480
ist irgendwo doch ein None rausgefallen oder sonst irgendwas

00:11:53.480 --> 00:11:55.640
und solche Sachen, die sieht man halt durch die Type-Ins

00:11:55.640 --> 00:11:57.440
einfach deutlich schneller und deutlich häufiger.

00:11:58.020 --> 00:11:59.580
Ich meine, klar, wenn man sowieso ein so super

00:11:59.580 --> 00:12:01.420
Coder und Programmierer ist wie du, lieber Jockner,

00:12:01.980 --> 00:12:05.100
Ich würde sagen, dass das echt, also mir hilft es

00:12:05.100 --> 00:12:06.900
vielleicht, also ja, vielleicht nicht überall, aber

00:12:06.900 --> 00:12:09.360
Ja, ich glaube,

00:12:09.380 --> 00:12:11.280
ich muss einfach mehr damit mal rumspielen.

00:12:11.760 --> 00:12:13.300
Ja, was interessant ist, es gibt halt auch so

00:12:13.300 --> 00:12:17.240
immer ja, also gerade in diesem ganzen Typing

00:12:17.240 --> 00:12:19.080
das Ding, also alles auf so Interfaces aufzubauen.

00:12:19.200 --> 00:12:21.160
Ja, dass du halt so Datenklassen baust, wo halt relativ

00:12:21.160 --> 00:12:23.120
klar ist, was für Attribute das mit

00:12:23.120 --> 00:12:24.060
welchen Datentypen sind.

00:12:25.000 --> 00:12:26.880
Ja, ja, ich meine, das habe ich auch schon, also Pydentic

00:12:26.880 --> 00:12:28.340
finde ich auch total super.

00:12:28.980 --> 00:12:29.940
Pydentic macht das natürlich.

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

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

00:12:52.360 --> 00:12:53.300
Das ist schon sehr nice.

00:12:53.840 --> 00:12:56.060
Genau, und das funktioniert einfach alles so magisch.

00:12:56.240 --> 00:12:58.500
Oh, FastAPI, kennst du das SQL-Modell?

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

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

00:13:36.440 --> 00:13:41.200
Und mit dem neuen TKM, wo du sagst, einfach table gleich true und das ist wirklich echt angenehm.

00:13:41.200 --> 00:13:43.200
Ja, und da dachte ich schon, das ist aber blöd,

00:13:43.240 --> 00:13:44.960
dass man das zweimal machen muss und ja,

00:13:45.080 --> 00:13:47.060
das ist jetzt weg und das würde ich auch gerne mal ausprobieren.

00:13:47.180 --> 00:13:49.300
Ich habe es bisher noch nicht hingekriegt, aber ich glaube, das mache ich demnächst mal.

00:13:49.460 --> 00:13:50.100
Ja, das ist sehr geil.

00:13:50.600 --> 00:13:52.120
Ich glaube, ich fange jetzt,

00:13:53.320 --> 00:13:55.340
ich nehme mir noch mal dieses Deployment-Dings,

00:13:55.460 --> 00:13:57.400
was ich mal auch, wann habe ich das gebastelt?

00:13:58.440 --> 00:13:59.180
Das war auch ungefähr

00:13:59.180 --> 00:14:01.100
letztes Jahr um die Zeit, ein bisschen

00:14:01.100 --> 00:14:03.120
später noch mal vor

00:14:03.120 --> 00:14:05.480
und dann mache ich das noch mal mit FastAPI,

00:14:06.100 --> 00:14:07.140
Vue.js und vielleicht

00:14:07.140 --> 00:14:08.020
mal mit SQL-Model.

00:14:08.020 --> 00:14:09.740
Ja, also was

00:14:09.740 --> 00:14:11.800
was mir noch so ein bisschen fehlt, ist das letzte, so ein paar

00:14:11.800 --> 00:14:13.720
von den SQL-Alchemy-Features, sowas wie Unique

00:14:13.720 --> 00:14:15.780
Constraints oder so, habe ich aber vielleicht auch

00:14:15.780 --> 00:14:17.700
noch nicht rausgefunden, wie das gut geht. Ich glaube, man kann das

00:14:17.700 --> 00:14:19.860
so mit SQL-Alchemy

00:14:19.860 --> 00:14:21.200
extra Quarks machen oder so, aber

00:14:21.200 --> 00:14:23.680
ja. Ja, keine Ahnung.

00:14:23.980 --> 00:14:25.580
Das funktioniert noch nicht so ganz einwandfrei, aber

00:14:25.580 --> 00:14:27.600
da fehlt auch noch so ein bisschen Dokumentation, das ist ja noch gerade

00:14:27.600 --> 00:14:29.740
relativ frisch. Ja, ja, ja, das gibt es ja gerade erst

00:14:29.740 --> 00:14:31.740
neu. Genau, und ja, also Migrations dazu

00:14:31.740 --> 00:14:32.760
kann man natürlich auch schön machen.

00:14:33.660 --> 00:14:35.580
Ja. Einfach mit, wie machen wir das, mit

00:14:35.580 --> 00:14:37.520
Alembic, glaube ich, die heißen da, wie heißt das?

00:14:38.460 --> 00:14:39.680
Nicht Migrations, sondern Revision

00:14:39.680 --> 00:14:40.800
Revisionen oder so.

00:14:42.140 --> 00:14:43.640
Und das Coole ist, wenn man dann

00:14:43.640 --> 00:14:45.680
quasi sein Management macht mit Typer,

00:14:46.160 --> 00:14:46.920
auch von Sebastian,

00:14:47.120 --> 00:14:49.520
dann hat man quasi auch seine Management-Commands

00:14:49.520 --> 00:14:50.860
direkt da mit drin, was das irgendwie alles ist.

00:14:50.860 --> 00:14:53.360
Ja, das verwende ich auch schon lange, das verwende ich jetzt auch seit über

00:14:53.360 --> 00:14:55.300
anderthalb Jahren schon. Ja, das verwende ich sogar auch mit Django,

00:14:55.560 --> 00:14:57.560
aber... Ja, verwende ich auch mit Django, genau.

00:14:57.680 --> 00:14:59.740
Ich verwende das dann meistens mit Poetry zusammen.

00:15:00.400 --> 00:15:01.120
Genau, ja.

00:15:01.220 --> 00:15:03.420
Und dann, genau, gibt's halt,

00:15:03.940 --> 00:15:05.620
da kann man Scripts definieren und

00:15:05.620 --> 00:15:07.480
dann sind die halt, ich meine,

00:15:07.520 --> 00:15:08.540
ich weiß noch nicht, ob das so hübsch ist,

00:15:09.060 --> 00:15:11.000
Und dann so ein Commands-PY habe ich die dann

00:15:11.000 --> 00:15:12.900
und das sind Funktionen, die dann... Also ich finde das auch super. Also vor allen Dingen,

00:15:12.920 --> 00:15:15.100
du kannst das halt hinterher dann sogar in einem Notebook importieren,

00:15:15.180 --> 00:15:17.040
ja, und kannst halt dann bestimmte Sachen

00:15:17.040 --> 00:15:18.940
einzeln ausführen in deinem Notebook. Das heißt,

00:15:18.980 --> 00:15:21.000
du kannst die Management-Commands sowohl auf der Kommando-Teile als auch

00:15:21.000 --> 00:15:22.600
in deinem Notebook einfach laden und benutzen.

00:15:23.180 --> 00:15:24.880
Und das ist halt dann schon auch sehr cool,

00:15:24.940 --> 00:15:26.700
weil dann kannst du einfach mal on the fly einen User erstellen

00:15:26.700 --> 00:15:28.980
und das User-Create-Command hast du

00:15:28.980 --> 00:15:30.300
dann halt in den Commands zum Beispiel.

00:15:31.120 --> 00:15:32.680
Das gibt es ja zum Beispiel bei Dango ist natürlich mit

00:15:32.680 --> 00:15:35.200
inbound, aber das ist dann bei FastAPI ein bisschen anders.

00:15:36.000 --> 00:15:36.640
Das ist schon cool.

00:15:36.880 --> 00:15:37.260
Das ist schon cool.

00:15:38.860 --> 00:15:40.720
Ja, aber da hätte ich auch noch gleich mehr Fragen zu,

00:15:40.840 --> 00:15:42.760
weil da hatte ich ein Problem, das würde ich gerne mit dir

00:15:42.760 --> 00:15:43.120
besprechen.

00:15:44.500 --> 00:15:46.000
Da ging es halt genau über diese

00:15:46.000 --> 00:15:48.580
Shared-Memory-Sache. Aber vielleicht machen wir

00:15:48.580 --> 00:15:50.240
nochmal mit Python 3.10 weiter.

00:15:50.580 --> 00:15:52.140
Wollen wir das schon inhaltlich nochmal structuren?

00:15:52.220 --> 00:15:54.520
Ich meine, wir haben das ja schon mal besprochen.

00:15:54.660 --> 00:15:56.540
Ich weiß gar nicht, ob man da jetzt nochmal was dazu sagen muss.

00:15:56.760 --> 00:15:57.960
Also man kann halt jetzt ein Match

00:15:57.960 --> 00:16:00.600
Statement und dann

00:16:00.600 --> 00:16:01.820
kann man da halt irgendwie so

00:16:01.820 --> 00:16:04.620
Sachen auspacken und dann gucken,

00:16:04.620 --> 00:16:06.520
ob das da drauf matcht und

00:16:06.520 --> 00:16:08.600
dann führt man halt

00:16:08.600 --> 00:16:10.400
dann, also so ein bisschen wie ein Case-Statement auf

00:16:10.400 --> 00:16:11.660
Cooks.

00:16:12.620 --> 00:16:14.220
Speed, ich weiß nicht.

00:16:15.640 --> 00:16:16.560
Genau, und man kann

00:16:16.560 --> 00:16:18.360
auch noch so Guards setzen davor, das heißt,

00:16:18.620 --> 00:16:20.220
das fällt dann halt da so durch und

00:16:20.220 --> 00:16:21.940
dann kann man halt da noch

00:16:21.940 --> 00:16:24.380
ein If hinterschreiben und dann, je nachdem, ob die

00:16:24.380 --> 00:16:26.440
Bedingung erfüllt ist oder nicht, dann matcht das da halt

00:16:26.440 --> 00:16:28.560
rein oder halt. Jetzt muss ich kurz sagen, was ist ein Guard?

00:16:29.360 --> 00:16:30.600
Genau, also wenn man jetzt sagen kann,

00:16:30.820 --> 00:16:31.260
wenn man sagt,

00:16:31.740 --> 00:16:34.440
wenn man jetzt

00:16:34.440 --> 00:16:35.320
die Bedingungen hat,

00:16:36.120 --> 00:16:38.620
sozusagen, und man möchte

00:16:38.620 --> 00:16:40.420
aber zusätzlich noch irgendwie, und da sagt man noch, wenn

00:16:40.420 --> 00:16:42.020
irgendeine andere Bedingung erfüllt ist, dann kann man

00:16:42.020 --> 00:16:44.340
hintendran an den Ausdruck einfach schreiben,

00:16:44.720 --> 00:16:46.540
if irgendwas x gleich y oder so,

00:16:46.640 --> 00:16:48.640
und dann läuft das da rein, und dann

00:16:48.640 --> 00:16:50.680
wenn das nicht so ist, dann läuft es halt weiter in den Default-Fall

00:16:50.680 --> 00:16:52.000
zum Beispiel, oder halt.

00:16:52.220 --> 00:16:53.960
Okay, das ist der Gart. Genau.

00:16:54.820 --> 00:16:56.360
Das ist halt auch nett, weil, ja, also

00:16:56.360 --> 00:16:58.360
ich habe noch nicht wirklich tolle

00:16:58.360 --> 00:17:00.420
Anwendungsfälle dafür, hätte ich gesagt.

00:17:01.720 --> 00:17:02.500
Ja, es ist halt so ein bisschen zum

00:17:02.500 --> 00:17:04.440
Filtern von so Dingen, ne? Das war irgendwie mit if, das ist halt

00:17:04.440 --> 00:17:05.960
irgendwie sehr verschachtelt, da muss man tausendmal

00:17:05.960 --> 00:17:08.260
den Code schreiben und mit diesem Matchcase,

00:17:08.320 --> 00:17:10.420
da kann man relativ schön gucken, was denn da übergeben wurde.

00:17:10.720 --> 00:17:12.420
So ein Command-Parser zum Beispiel kann man

00:17:12.420 --> 00:17:14.700
sehr schön mit Matchcase, glaube ich, abbilden

00:17:14.700 --> 00:17:16.620
oder so. Ja, vielleicht wenn man irgendwelche Dinge parsed.

00:17:16.700 --> 00:17:18.460
Das könnte man wahrscheinlich deutlich einfacher

00:17:18.460 --> 00:17:20.440
hinkriegen. Oder was ich mir auch vorstellen kann,

00:17:20.500 --> 00:17:22.880
ist, dass wenn man halt so...

00:17:22.880 --> 00:17:24.640
Du hast zum Beispiel so einen generischen Endpunkt

00:17:24.640 --> 00:17:26.140
für irgendwas, da kommt irgendwas rein.

00:17:26.900 --> 00:17:28.560
Ja, aber das ist nur eine gute Idee,

00:17:28.700 --> 00:17:29.220
ist das zu sagen.

00:17:30.840 --> 00:17:32.420
Ja, du kannst zum Beispiel sagen, nur dann, wenn es

00:17:32.420 --> 00:17:34.360
ein bestimmtes Format hat, dann mach ich

00:17:34.360 --> 00:17:35.740
aber was mit, ansonsten schmeiß ich es einfach weg.

00:17:36.900 --> 00:17:38.420
Ja, genau. Also das

00:17:38.420 --> 00:17:40.100
Einzige, wo ich praktische Dinge gesehen habe,

00:17:40.240 --> 00:17:42.260
aber ich bin, ich meine, das kommt natürlich, also

00:17:42.260 --> 00:17:44.060
man müsste wahrscheinlich mal so in die

00:17:44.060 --> 00:17:46.420
Elixierwelt gucken oder

00:17:46.420 --> 00:17:48.260
so, da wird das ja irgendwie, ist das halt

00:17:48.260 --> 00:17:50.220
häufig eine Geschichte, die man da verwendet. Vielleicht gibt es da

00:17:50.220 --> 00:17:51.440
irgendwie ganz tolle Anwendungsfälle für.

00:17:52.460 --> 00:17:54.020
Du redest häufig von Elixieren. Ich sehe immer das Buch in der Ecke.

00:17:54.040 --> 00:17:56.000
Ja, ja, ich bin immer noch nicht so richtig weitergekommen.

00:17:56.000 --> 00:17:57.900
Ja, ich da,

00:17:58.240 --> 00:17:59.980
manchmal muss man es halt

00:17:59.980 --> 00:18:01.940
nicht nur rumliegen haben, sondern auch mal reingucken, aber

00:18:01.940 --> 00:18:03.280
In einem Kopfkissen hilft am besten.

00:18:04.100 --> 00:18:04.480
Ja, genau.

00:18:05.560 --> 00:18:07.460
Oder halt irgendwie eine andere Sprache, die das halt

00:18:07.460 --> 00:18:09.520
kann, aber... Ich lege mir auch immer ganz viel Gold

00:18:09.520 --> 00:18:11.480
in das Kopfkissen, damit ich dann das Stoff kaufen kann.

00:18:13.060 --> 00:18:13.220
Ja.

00:18:15.280 --> 00:18:15.640
Aber

00:18:15.640 --> 00:18:17.720
irgendwie...

00:18:18.520 --> 00:18:19.640
Genau, weil

00:18:19.640 --> 00:18:21.520
weiß ich jetzt, bei Python, also der einzige

00:18:21.520 --> 00:18:23.520
Fall, wo ich das Gefühl habe, da ist etwas,

00:18:23.600 --> 00:18:24.260
das ist so ähnlich.

00:18:25.660 --> 00:18:27.420
Und es ist halt, wenn man jetzt

00:18:27.420 --> 00:18:29.640
in JavaScript im Frontend...

00:18:29.640 --> 00:18:31.740
Da gibt es ja zum Beispiel React, so Redux oder so.

00:18:31.940 --> 00:18:33.100
wo Eventsysteme hat

00:18:33.100 --> 00:18:34.840
und

00:18:34.840 --> 00:18:37.520
da hat man halt

00:18:37.520 --> 00:18:39.480
häufig auch so Dinger, die diese Struktur haben,

00:18:39.560 --> 00:18:41.500
dass man halt ein Case-Statement hat und dann wird das

00:18:41.500 --> 00:18:42.700
halt je nachdem,

00:18:43.460 --> 00:18:45.040
was da passiert ist,

00:18:45.160 --> 00:18:47.340
man hat halt irgendwie ein Event, was da reinfällt

00:18:47.340 --> 00:18:49.400
und dann splittet man das halt auf

00:18:49.400 --> 00:18:51.160
und ruft dann entsprechend Funktionen auf

00:18:51.160 --> 00:18:53.340
oder updatet irgendwie ein State oder macht halt irgendwas

00:18:53.340 --> 00:18:55.440
und im Kern von diesen

00:18:55.440 --> 00:18:57.800
Stores ist halt häufig ein großes Case-Statement

00:18:57.800 --> 00:18:58.260
irgendwie

00:18:58.940 --> 00:18:59.880
und das könnte man

00:18:59.880 --> 00:19:01.740
dann halt, ein Python könnte man das dann auch so machen

00:19:01.740 --> 00:19:03.820
und halt eleganter mit dem Structural Pattern

00:19:03.820 --> 00:19:05.700
Matching. Das wäre jetzt so eine Anwendung, die mir

00:19:05.700 --> 00:19:06.980
einfallen würde, aber ansonsten pfff.

00:19:07.300 --> 00:19:09.420
Du musst ja natürlich jetzt alle If-States durch Match-Cases setzen,

00:19:09.420 --> 00:19:10.320
erst mal um zu testen.

00:19:10.840 --> 00:19:13.260
Das Problem ist halt auch, also wirklich so einfach

00:19:13.260 --> 00:19:15.320
nur so verwenden

00:19:15.320 --> 00:19:17.400
ist halt auch, weil man hat ja oft das Problem, dass man

00:19:17.400 --> 00:19:19.280
einen Code hat, der auch noch auf älteren Python-Versionen

00:19:19.280 --> 00:19:21.360
laufen soll und dann, man kann das

00:19:21.360 --> 00:19:23.180
ja nicht einfach so, also man kann das in irgendeinem Projekt

00:19:23.180 --> 00:19:25.480
verwenden, das komplett neu ist

00:19:25.480 --> 00:19:27.260
oder so, dass man Kontrolle hat, aber wenn das irgendwo,

00:19:27.600 --> 00:19:29.400
wenn man jetzt zum Beispiel eine Library schreibt, dann kann man das nicht gut

00:19:29.400 --> 00:19:31.440
verwenden, weil dann müsste man sagen,

00:19:31.540 --> 00:19:32.820
Geht erst ab 3.10 und...

00:19:32.820 --> 00:19:33.560
Oh, das ist dann halt Pech.

00:19:34.760 --> 00:19:37.100
Ja gut, aber auch

00:19:37.100 --> 00:19:39.120
ein Ding, was ich daran so ein bisschen

00:19:39.120 --> 00:19:40.000
blöd finde, ist,

00:19:41.220 --> 00:19:43.100
wenn man das momentan irgendwo reinschreibt

00:19:43.100 --> 00:19:45.220
und lässt

00:19:45.220 --> 00:19:46.720
dann Black drüber laufen, dann geht das nicht.

00:19:47.600 --> 00:19:49.280
Black mag das nicht? Nicht bei 3.10

00:19:49.280 --> 00:19:50.060
Black? Nein.

00:19:51.700 --> 00:19:52.640
Mit Black geht das noch nicht.

00:19:53.800 --> 00:19:54.440
Das heißt,

00:19:55.100 --> 00:19:57.100
Autoformat funktioniert

00:19:57.100 --> 00:19:58.360
nicht mehr, wenn man...

00:19:58.360 --> 00:19:59.580
Das kann ja gar nicht sein.

00:20:00.080 --> 00:20:02.680
Das muss doch schon gefixt sein, da muss doch schon

00:20:02.680 --> 00:20:04.580
Pull-Requests irgendwo zu geben. Ja, ja, das kommt

00:20:04.580 --> 00:20:06.280
bestimmt dann irgendwann, aber momentan jetzt halt noch nicht.

00:20:06.820 --> 00:20:08.200
Okay, muss ich mir mal anschauen.

00:20:08.920 --> 00:20:09.880
Auch, ah, das habe ich jetzt,

00:20:10.080 --> 00:20:12.080
was ist Python Bytes Podcast, ich weiß nicht genau,

00:20:12.420 --> 00:20:14.220
das gehört habe, es gibt einen, fand ich auch schön,

00:20:14.600 --> 00:20:15.860
man hat ja immer so das Problem, wenn man Sachen

00:20:15.860 --> 00:20:18.000
Basen umstellt auf

00:20:18.000 --> 00:20:20.020
Black,

00:20:20.680 --> 00:20:21.900
dass das dann halt so riesige

00:20:21.900 --> 00:20:24.680
Diffs erzeugt

00:20:24.680 --> 00:20:26.560
und das ist halt irgendwie kacke, weil man

00:20:26.560 --> 00:20:28.440
dann halt nicht mehr sehen kann, wann irgendwas

00:20:28.440 --> 00:20:30.560
passiert ist, weil man landet immer bei diesem riesen

00:20:30.560 --> 00:20:31.400
Änderungsding.

00:20:32.520 --> 00:20:34.380
Da gibt es auch ein Projekt, das

00:20:34.380 --> 00:20:35.160
nennt sich, glaube ich, Darker.

00:20:36.980 --> 00:20:38.340
Und das

00:20:38.340 --> 00:20:40.380
macht quasi Black, aber immer nur für die Änderungen, die man

00:20:40.380 --> 00:20:41.940
also wenn man einen Code ändert,

00:20:42.220 --> 00:20:44.040
dann macht es sozusagen das gleiche wie Black,

00:20:44.180 --> 00:20:45.520
aber nur auf dem Diff.

00:20:46.700 --> 00:20:48.380
Sodass es halt immer so dunkler wird mit der

00:20:48.380 --> 00:20:49.420
Zeit, aber nicht

00:20:49.420 --> 00:20:52.200
das heißt, es ändert nur Sachen, die man

00:20:52.200 --> 00:20:54.220
angefasst hat und das war nicht auch eine nette Idee, eigentlich eine völlig

00:20:54.220 --> 00:20:56.320
offensichtliche Idee, aber ja.

00:20:56.640 --> 00:20:57.060
Ja, okay.

00:20:58.160 --> 00:20:59.240
Ja, fand ich ganz faszinierend.

00:21:00.620 --> 00:21:00.940
Genau.

00:21:02.600 --> 00:21:03.900
Ja, Structural

00:21:03.900 --> 00:21:06.040
Pattern Matching, was haben wir denn noch?

00:21:06.260 --> 00:21:07.960
Ja, also die Disutiles sind deprecated.

00:21:08.420 --> 00:21:10.120
Ja. Oh, das ist mir auch

00:21:10.120 --> 00:21:12.000
und genau,

00:21:12.180 --> 00:21:14.080
Disutiles sind deprecated, da ist auch ein Ding drin,

00:21:14.180 --> 00:21:16.180
das mir auf den Fuß gefallen ist, als ich versucht habe, die Sachen

00:21:16.180 --> 00:21:17.480
dann, die ich so mache,

00:21:19.420 --> 00:21:20.420
mal zu gucken,

00:21:20.500 --> 00:21:21.560
ob das unter 3.10 auch läuft.

00:21:22.600 --> 00:21:24.080
Und da gibt es eine Abhängigkeit, die hat

00:21:24.080 --> 00:21:24.580
Wagtail.

00:21:25.280 --> 00:21:27.900
Ach, das schöne Wagtail, ja.

00:21:28.160 --> 00:21:29.060
Das liebe ich auch so sehr.

00:21:29.800 --> 00:21:31.580
Das hängt ab von L18N,

00:21:31.720 --> 00:21:34.200
da ist das irgendwie, das Paket

00:21:34.200 --> 00:21:36.020
und es hat irgendwie so ein

00:21:36.020 --> 00:21:37.220
L, ich dachte immer, es wäre ein I.

00:21:37.640 --> 00:21:39.740
Ja, nee, das macht so leicht was an. Ich weiß, was es genau macht,

00:21:39.780 --> 00:21:41.560
weiß ich gar nicht. Aber das ist halt so ein Ding,

00:21:41.700 --> 00:21:43.880
das ist halt irgendwie

00:21:43.880 --> 00:21:45.420
so zwei Stars auf GitHub

00:21:45.420 --> 00:21:47.040
von irgendjemandem

00:21:47.040 --> 00:21:49.760
und Wagtail hängt davon ab.

00:21:50.600 --> 00:21:51.480
Und da

00:21:51.480 --> 00:21:53.660
das Ding verwendet im Setup.py-Skript

00:21:53.660 --> 00:21:55.580
irgendwo ein

00:21:55.580 --> 00:21:58.060
bdist-wininst oder so was.

00:21:58.160 --> 00:22:00.120
Und das ist in Python 3.8 deprecated

00:22:00.120 --> 00:22:02.120
worden und in 3.10 ist es rausgeflogen.

00:22:02.240 --> 00:22:03.480
Okay. Und deswegen

00:22:03.480 --> 00:22:05.980
baut es nicht mehr. Das heißt, man kann

00:22:05.980 --> 00:22:07.580
unter 3.10, Python 3.10,

00:22:07.720 --> 00:22:08.660
Wagtail nicht mehr installieren.

00:22:11.780 --> 00:22:13.600
Was halt so ein bisschen Kacke ist.

00:22:14.400 --> 00:22:16.060
Und ja, das ist

00:22:16.060 --> 00:22:17.960
halt, ja,

00:22:18.100 --> 00:22:19.480
ich habe da mal ein Pull-Request gemacht, mal gucken.

00:22:20.420 --> 00:22:21.360
Aber das ist halt,

00:22:21.660 --> 00:22:23.120
ja,

00:22:23.720 --> 00:22:25.960
schon ein bisschen, vielleicht ist diese Abhängigkeit

00:22:25.960 --> 00:22:27.720
nicht so toll.

00:22:28.040 --> 00:22:30.600
da wo wir so blöde Abhängigkeiten sind

00:22:30.600 --> 00:22:32.500
mit Python 3.10 kaputt gehen, dann müsste ich jetzt nochmal

00:22:32.500 --> 00:22:34.140
auf das PyWin32-Problem gehen, weil

00:22:34.140 --> 00:22:36.720
PyWin32 ist unter Windows relativ wichtig,

00:22:36.880 --> 00:22:38.520
weil das halt relativ oft gebraucht wird

00:22:38.520 --> 00:22:40.520
für bestimmte Sachen, um die zu laufen zu lassen.

00:22:40.620 --> 00:22:42.600
Das heißt, ohne PyWin32 geht viel

00:22:42.600 --> 00:22:43.900
von Python-Wheels-Bauen nicht.

00:22:44.560 --> 00:22:46.600
Das heißt, du kannst es fast nicht benutzen, was halt sehr blöd ist.

00:22:47.000 --> 00:22:48.660
Und die Abhängigkeit, die viele Projekte

00:22:48.660 --> 00:22:50.580
haben, ist sowas wie PyWin32-301.

00:22:51.820 --> 00:22:52.640
Das gibt es aber jetzt

00:22:52.640 --> 00:22:54.240
im Moment nicht für 3.10 und auch nicht für 3.8.

00:22:55.300 --> 00:22:56.460
Keiner weiß, warum. Die Wheels werden

00:22:56.460 --> 00:22:57.920
irgendwie nicht richtig bei Python ausgeliefert.

00:22:58.020 --> 00:22:59.520
Ich glaube, der Maintainer ist auch so ein bisschen,

00:23:00.360 --> 00:23:01.960
ich sage mal vorsichtig sperrig,

00:23:02.120 --> 00:23:03.500
was das angeht.

00:23:04.660 --> 00:23:06.480
Ja, und das ist halt blöd, weil du kannst

00:23:06.480 --> 00:23:08.640
halt, dass dann keine Projekte mehr installieren

00:23:08.640 --> 00:23:10.240
oder Pultree geht nicht mehr oder so. Und das ist halt

00:23:10.240 --> 00:23:12.460
extrem ätzend für Leute, die Windows entwickeln.

00:23:13.140 --> 00:23:13.500
Und

00:23:13.740 --> 00:23:15.700
Was man aber machen kann, also ich habe einen kleinen Workaround gefunden.

00:23:15.800 --> 00:23:20.180
Man installiert einfach PyWin32-301.1, also auch irgendwie komische Varianten.

00:23:20.380 --> 00:23:25.400
Die Versionen gehen von 200 auf 301, dann kommt dann 301.1.

00:23:25.900 --> 00:23:29.960
Warum? Na gut, vielleicht ist irgendwann so manche Version reingeflogen, ich weiß es nicht.

00:23:30.320 --> 00:23:34.420
Es ist auf jeden Fall seltsam und naja, man kann es 301 manuell installieren

00:23:34.420 --> 00:23:39.740
und dann, das ist ein bisschen hacky, einfach in das Side-Packages-Verzeichnis gehen

00:23:39.740 --> 00:23:43.240
und im Manifest die Version von 301.1 auf 301 ändern.

00:23:43.740 --> 00:23:45.580
Und dann denkt tatsächlich

00:23:45.580 --> 00:23:47.900
unter dem Foliennamen umbenennen, auch von 301.1

00:23:47.900 --> 00:23:49.820
auf 301. Und dann denkt tatsächlich

00:23:49.820 --> 00:23:51.860
PIP, dass das vernünftig installiert

00:23:51.860 --> 00:23:53.680
ist und fragt nicht mehr. Und es funktioniert alles.

00:23:54.140 --> 00:23:55.840
Und so kommt man halt drumherum.

00:23:55.940 --> 00:23:57.300
Aber das ist halt schon sehr, sehr hässlich.

00:23:57.740 --> 00:23:59.500
Und es gibt auch da wohl ein paar Pull-Requests,

00:23:59.600 --> 00:24:01.520
aber anders gehen bestimmte Sachen da

00:24:01.520 --> 00:24:03.300
leider nicht zu fixen. Das ist ein bisschen blöd.

00:24:03.840 --> 00:24:04.340
Okay, ja.

00:24:05.240 --> 00:24:06.540
Ja, ja, also das sind

00:24:06.540 --> 00:24:09.700
ich meine... Ja, wenn es so ein wichtiges Paket

00:24:09.700 --> 00:24:11.640
gibt, wo dann so ein Maintaining auf einmal nicht mehr stattfindet

00:24:11.640 --> 00:24:12.800
und so, das ist schon anstrengend.

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

00:24:36.020 --> 00:24:37.860
Das Lustige ist halt, wenn man Ragtail

00:24:37.860 --> 00:24:39.580
per PIP installiert, dann funktioniert es nämlich nicht.

00:24:40.340 --> 00:24:41.820
Mir ist es halt auf die Füße gefallen,

00:24:41.940 --> 00:24:43.960
weil ich es per Poetry installiert habe und Poetry

00:24:43.960 --> 00:24:45.760
macht halt was anderes als PIP.

00:24:46.060 --> 00:24:47.860
Ja, es checkt auch noch die Site Dependencies und so.

00:24:48.040 --> 00:24:50.000
Und ja, aber und das macht halt

00:24:50.000 --> 00:24:51.680
und es guckt sich halt dann teilweise die

00:24:51.680 --> 00:24:53.540
Setup UI an und so. Ja.

00:24:53.740 --> 00:24:55.760
Und das ist halt nicht so gut unter Umständen.

00:24:56.060 --> 00:24:57.920
Wenn PIP, wenn da ein Wheel ist, dann installiert

00:24:57.920 --> 00:24:59.460
es halt stumpf das Wheel, das funktioniert dann.

00:24:59.940 --> 00:25:01.640
Das ist halt auf Nahe, wenn man halt nicht auf Windows ist.

00:25:02.540 --> 00:25:03.980
Und ja,

00:25:04.260 --> 00:25:05.840
Poetry macht das halt nicht und dann geht es halt

00:25:05.840 --> 00:25:07.740
schief, weil dann irgendein Import nicht mehr funktioniert

00:25:07.740 --> 00:25:09.760
oder so und Pultree macht sowieso komische Sachen

00:25:09.760 --> 00:25:11.600
teilweise. Im Moment, ich bin auch so ein bisschen, also

00:25:11.600 --> 00:25:13.700
die Version 1.2 habe ich gesehen, ist gar nicht so

00:25:13.700 --> 00:25:15.660
schlecht, die haben aber auch umbestellt das Installation, das heißt

00:25:15.660 --> 00:25:17.500
ich muss auch in den Docker-Files überall von

00:25:17.500 --> 00:25:19.540
Get-Pultree auf Inside-Pultree umstellen und so

00:25:19.540 --> 00:25:21.560
und dann funktioniert es aber auch noch nicht so richtig

00:25:21.560 --> 00:25:23.480
überall und dann das Update auf

00:25:23.480 --> 00:25:25.560
1.2, also es gibt ja so ein Safe-Update mit der

00:25:25.560 --> 00:25:27.540
neuesten Version, da kann man jetzt halt Safe-Update machen, muss

00:25:27.540 --> 00:25:29.540
nicht mehr irgendwie jedes Mal neu das

00:25:29.540 --> 00:25:31.700
vom GitHub-Report ziehen. Das ist schon mal ganz gut auch,

00:25:31.780 --> 00:25:33.480
ja. Ja, aber das funktioniert halt

00:25:33.480 --> 00:25:35.480
dann noch nicht so richtig und dann, dass die PvP-Version

00:25:35.480 --> 00:25:37.120
nicht schützen, wir haben die ausprobiert, einfach ab und so.

00:25:37.800 --> 00:25:38.020
Naja.

00:25:39.400 --> 00:25:40.680
Ja, also ich muss sagen,

00:25:40.880 --> 00:25:43.580
Poetry ärgert mich in letzter Zeit auch irgendwie.

00:25:44.100 --> 00:25:44.940
Ich verstehe gar nicht, warum.

00:25:45.020 --> 00:25:47.120
Zwischendurch lief es wirklich gut, einwandfrei.

00:25:47.260 --> 00:25:48.920
Irgendwer hat irgendwas kaputt gekodet.

00:25:49.660 --> 00:25:51.280
Ja, ich weiß es nicht so genau, aber es ist,

00:25:51.400 --> 00:25:53.580
also ich meine, ich bin ja bereit

00:25:53.580 --> 00:25:55.680
anzuerkennen, dass das halt auch nicht so ein ganz einfaches Problem ist.

00:25:56.380 --> 00:25:57.520
Aber irgendwie läuft es nicht

00:25:57.520 --> 00:25:59.120
rund und jetzt auch nach dem Update,

00:25:59.380 --> 00:26:01.640
also natürlich,

00:26:01.640 --> 00:26:03.580
so die üblichen Kandidaten, das funktioniert alles wieder nicht.

00:26:04.280 --> 00:26:08.240
ich glaube auch Poetry hatte mit 3.10

00:26:08.240 --> 00:26:10.200
auch Probleme irgendwie, da ist auch irgendwas, hat

00:26:10.200 --> 00:26:12.000
dann nicht so richtig funktioniert, aber halt

00:26:12.000 --> 00:26:13.980
NumPy und so, das funktioniert natürlich auch nicht

00:26:13.980 --> 00:26:16.320
und ich meine, gut

00:26:16.320 --> 00:26:17.980
kann man verstehen, es dauert ein bisschen, bis da die

00:26:17.980 --> 00:26:19.920
Wheels und die Binary Star sind, aber

00:26:19.920 --> 00:26:22.180
ja,

00:26:22.660 --> 00:26:24.200
also so richtig rund

00:26:24.200 --> 00:26:25.880
ist das alles irgendwie nicht, ja.

00:26:26.160 --> 00:26:28.040
Ich warte ja meistens bei wichtigeren Sachen auf

00:26:28.040 --> 00:26:29.840
3.1 oder 3.2 oder sowas, also

00:26:29.840 --> 00:26:32.200
Ja, aber ich meine

00:26:32.200 --> 00:26:33.260
3 aber 0.

00:26:33.640 --> 00:26:35.880
Vielleicht sollte man tatsächlich hingehen, das einfach

00:26:35.880 --> 00:26:37.780
vorher schon mal ausprobieren und dann gucken, wo es

00:26:37.780 --> 00:26:39.660
kracht und dann da halt versuchen, so ein bisschen zu helfen.

00:26:40.280 --> 00:26:42.000
Ich meine, das ist wahrscheinlich irgendwie hilfreicher

00:26:42.000 --> 00:26:43.900
als wenn man nur meckert, aber...

00:26:43.900 --> 00:26:45.480
Ja, ja, eigentlich schon.

00:26:46.280 --> 00:26:47.820
Ja, ich habe auch mit dem Pfeifen, ich muss

00:26:47.820 --> 00:26:49.680
das eigentlich mal irgendwo hinschreiben, aber naja.

00:26:50.780 --> 00:26:50.900
Ja.

00:26:51.280 --> 00:26:52.240
Ja, jetzt kommt Werbung.

00:26:53.800 --> 00:26:56.760
Was haltet ihr eigentlich von Werbung? Hier.

00:27:00.300 --> 00:27:00.480
Ja.

00:27:02.860 --> 00:27:04.360
3.11 haben wir noch was zu 3.11,

00:27:04.680 --> 00:27:06.220
weil das ist ja so, 3.11 kommt jetzt

00:27:06.220 --> 00:27:08.140
ja auch. Ja, 3.11 ist Main

00:27:08.140 --> 00:27:09.780
Brand sozusagen bei Python.

00:27:10.520 --> 00:27:12.460
Ich glaube, was da ganz

00:27:12.460 --> 00:27:14.320
interessant, ich weiß es gar nicht, also eben da gibt es

00:27:14.320 --> 00:27:16.360
auch Verbesserungen, wenn man jetzt Fehler

00:27:16.360 --> 00:27:16.680
hat.

00:27:19.140 --> 00:27:20.360
Weitere, genau, aber es gibt

00:27:20.360 --> 00:27:22.340
auch noch, es soll jetzt, also mit 3.11,

00:27:22.520 --> 00:27:24.380
was da, habe ich jetzt letztens irgendwie,

00:27:24.920 --> 00:27:26.420
gab es auch ein Podcast-Interview mit

00:27:26.420 --> 00:27:28.360
Guido, zu

00:27:28.360 --> 00:27:29.480
was denn jetzt so alles

00:27:29.480 --> 00:27:32.400
ansteht zu Performance-Optimierung und da werden

00:27:32.400 --> 00:27:33.660
Oh, da gab es auch noch ein schönes Artikel,

00:27:33.900 --> 00:27:37.040
ein Blogpost von Mark Shannon zu, ein Interview.

00:27:37.340 --> 00:27:41.660
Ja, Mark Shannon, genau, der beschäftigt sich mit der jetzt auch schon wahnsinnig lange.

00:27:41.920 --> 00:27:44.100
Aber den habe ich nicht gesehen, den musste ich mir mal schicken.

00:27:44.660 --> 00:27:46.300
Ja, den haben die schon genutzt.

00:27:48.820 --> 00:27:52.760
Jedenfalls, genau, in die Richtung geht das halt.

00:27:53.100 --> 00:27:55.820
Und da wird jetzt viel daran gearbeitet.

00:27:56.020 --> 00:27:59.260
Und da gibt es jetzt erstmal so Basisgeschichten für N311.

00:27:59.780 --> 00:28:01.500
bis das sich wirklich auswirkt, wird das

00:28:01.500 --> 00:28:03.520
alles noch ein bisschen dauern.

00:28:05.060 --> 00:28:05.620
Aber was

00:28:05.620 --> 00:28:07.600
halt dann in 3.11, glaube ich,

00:28:07.700 --> 00:28:09.300
also wird es auf jeden Fall die Infrastruktur

00:28:09.300 --> 00:28:11.600
dafür geben, dass halt Funktionen

00:28:11.600 --> 00:28:13.540
sich zum Beispiel, also eines der Probleme

00:28:13.540 --> 00:28:15.140
bei Python ist halt, Funktionen langsam

00:28:15.140 --> 00:28:17.680
aus diversen Gründen,

00:28:17.900 --> 00:28:19.560
also einer der Gründe ist

00:28:19.560 --> 00:28:21.380
halt, dass sie halt sehr, dass man

00:28:21.380 --> 00:28:22.800
ja nicht einfach, wenn man jetzt sagt,

00:28:23.260 --> 00:28:25.520
eine Funktion, die nur zwei Zahlen addiert oder so,

00:28:25.520 --> 00:28:26.500
kann man halt nicht sagen,

00:28:28.740 --> 00:28:29.060
ja, man

00:28:29.060 --> 00:28:30.660
addiert den Kram und

00:28:30.660 --> 00:28:33.180
gibt das zurück, sondern

00:28:33.180 --> 00:28:35.380
da muss halt viel Kram

00:28:35.380 --> 00:28:37.540
geprüft werden. Das kann alles mögliche

00:28:37.540 --> 00:28:39.320
sein. Es kann ja halt nicht nur, es kann ja sein, dass

00:28:39.320 --> 00:28:40.100
das was anderes ist.

00:28:41.280 --> 00:28:42.140
Es kann sein, dass

00:28:42.140 --> 00:28:45.040
das überladen

00:28:45.040 --> 00:28:46.560
wurde und

00:28:46.560 --> 00:28:47.980
weiß der Teufel und

00:28:47.980 --> 00:28:51.040
jetzt der Plan sozusagen, wie man

00:28:51.040 --> 00:28:53.180
das besser hinkriegt, ist zu sagen,

00:28:53.400 --> 00:28:55.080
man kann das spezialisieren.

00:28:55.320 --> 00:28:57.180
Also wenn jetzt der Interpreter könnte zum Beispiel

00:28:57.180 --> 00:28:59.240
bemerken, okay, jetzt diese Funktion ist

00:28:59.240 --> 00:29:01.040
tausendmal aufgerufen worden und zwar immer nur mit

00:29:01.040 --> 00:29:03.380
Integern. Jetzt ersetze ich die Funktion,

00:29:03.620 --> 00:29:05.320
die da aufgerufen wurde, halt durch

00:29:05.320 --> 00:29:06.400
eine

00:29:06.400 --> 00:29:09.300
schnellere Funktion,

00:29:09.580 --> 00:29:11.280
sozusagen, also anderer By-Code,

00:29:11.620 --> 00:29:13.260
der halt nur Integer

00:29:13.260 --> 00:29:15.160
macht, ja, sonst nichts.

00:29:15.880 --> 00:29:17.020
Und das geht dann halt viel schneller.

00:29:17.620 --> 00:29:17.840
Und

00:29:17.840 --> 00:29:21.240
das Problem dabei, was das halt schwierig macht,

00:29:21.240 --> 00:29:23.140
ist, dass, wenn

00:29:23.140 --> 00:29:24.980
jetzt das schief geht, wenn da jetzt plötzlich doch ein Float

00:29:24.980 --> 00:29:27.020
reinkommt oder so, dann muss das

00:29:27.020 --> 00:29:29.120
irgendwie wieder trotzdem

00:29:29.120 --> 00:29:31.080
muss es trotzdem funktionieren und wenn

00:29:31.080 --> 00:29:32.780
das häufiger passiert, weil das dann besonders

00:29:32.780 --> 00:29:34.820
ätzend ist, performance-technisch,

00:29:35.160 --> 00:29:37.240
muss dann halt auch diese Optimierung wieder rückgängig

00:29:37.240 --> 00:29:38.900
gemacht werden, wenn halt sozusagen der normale

00:29:38.900 --> 00:29:40.120
Bytecode besser gewesen wäre.

00:29:40.300 --> 00:29:43.140
Das macht es alles ziemlich

00:29:43.140 --> 00:29:45.080
kompliziert und dann eine Geschichte, die mir nicht so

00:29:45.080 --> 00:29:47.080
klar war, das fand ich auch interessant, ist, dass

00:29:47.080 --> 00:29:49.120
halt die Frame-Objekte

00:29:49.120 --> 00:29:51.220
gibt in Python, also wenn man eine Funktion

00:29:51.220 --> 00:29:53.320
aufruft, dann wird erstmal so ein Frame-Objekt

00:29:53.320 --> 00:29:54.340
erstellt. Was ist ein Frame?

00:29:55.080 --> 00:29:57.560
Ja, das muss man auch erklären.

00:29:57.800 --> 00:29:59.600
Ich würde sagen, ja, letztlich

00:29:59.600 --> 00:30:01.680
so ein Stack-Frame, das war dann schon

00:30:01.680 --> 00:30:02.500
sehr maschinennah.

00:30:04.560 --> 00:30:05.360
Ein Stack-Frame?

00:30:05.700 --> 00:30:07.580
Ja, also letztlich in

00:30:07.580 --> 00:30:09.680
Python ist das Frame-Objekt sowas, da steht halt

00:30:09.680 --> 00:30:11.640
drin, welche Globals es gibt, welche Locals

00:30:11.640 --> 00:30:13.520
es gibt, was

00:30:13.520 --> 00:30:15.140
das Code-Objekt ist,

00:30:15.880 --> 00:30:17.360
so Zeugs. Also quasi der aktuelle

00:30:17.360 --> 00:30:19.500
Namespace quasi, das dickt in dem quasi drinsteht,

00:30:19.540 --> 00:30:20.760
was alle gerade aktuell ist?

00:30:21.380 --> 00:30:23.380
Also sozusagen alles, was man braucht halt, um

00:30:23.380 --> 00:30:24.720
diese Funktionen auszuführen.

00:30:25.560 --> 00:30:27.180
Letztlich. Und

00:30:27.180 --> 00:30:29.560
es ist ja auch gut, das zu haben. Wenn man jetzt zum Beispiel

00:30:29.560 --> 00:30:31.500
einen Code debugt oder so, dann ist

00:30:31.500 --> 00:30:33.020
das halt total praktisch, wenn man das halt

00:30:33.020 --> 00:30:35.540
direkt alles nachgucken kann und wenn man es auch

00:30:35.540 --> 00:30:37.560
ändern kann und so. Auf der anderen Seite,

00:30:37.680 --> 00:30:39.340
wenn man jetzt, wenn ein Code wirklich ausgeführt ist, dann

00:30:39.340 --> 00:30:40.380
braucht man das nicht unbedingt.

00:30:41.580 --> 00:30:43.460
Und die Dinger werden halt auch dynamisch

00:30:43.460 --> 00:30:45.340
alloziert, also sowieso alles dynamisch

00:30:45.340 --> 00:30:47.180
und dann hat man halt den ganzen Heap voll,

00:30:47.220 --> 00:30:49.040
wenn man jetzt viele unterschiedliche Funktionen aufruft,

00:30:49.440 --> 00:30:51.380
hat man jetzt den ganzen Heap voll gesprengelt mit diesen Dingern.

00:30:52.440 --> 00:30:53.800
Und das macht halt alles irgendwie langsam.

00:30:54.240 --> 00:30:56.020
Und jetzt, also eine Optimierung,

00:30:56.240 --> 00:30:57.900
ich weiß nicht, ob das, kann auch sein, dass das eine von denen war,

00:30:57.960 --> 00:30:59.460
die Mark Schneider vorgeschlagen hat,

00:30:59.940 --> 00:31:01.520
ist halt zu sagen, man alloziert irgendwie

00:31:01.520 --> 00:31:03.820
erstmal eine ganze Reihe von den Dingern, packt die irgendwo hin

00:31:03.820 --> 00:31:05.520
und dann nimmt man die halt und nicht nur,

00:31:06.000 --> 00:31:07.340
nicht so komplette Objekte, sondern

00:31:07.340 --> 00:31:09.640
für, dass das halt, wenn das ausgeführt werden soll,

00:31:10.060 --> 00:31:11.880
dann sind das halt einfach nur Structs und die

00:31:11.880 --> 00:31:13.680
liegen da an einer bestimmten Stelle und die müssen,

00:31:14.100 --> 00:31:15.940
das wird, und das ist halt

00:31:15.940 --> 00:31:17.640
im Speicher dann lokal und keine Ahnung.

00:31:17.760 --> 00:31:19.740
Also seine Performance ist besser und nur wenn man

00:31:19.740 --> 00:31:21.920
es debugt, verwendet man halt

00:31:21.920 --> 00:31:23.260
diese vollen

00:31:23.260 --> 00:31:26.040
Frame-Objekte, die halt man dann sonst normalerweise

00:31:26.040 --> 00:31:27.040
immer hat. Und was ist ein Struct?

00:31:28.260 --> 00:31:30.480
Ja, das ist jetzt so eine C-Spezialität.

00:31:30.920 --> 00:31:31.860
Das ist eine

00:31:31.860 --> 00:31:33.060
Datenstruktur quasi mit

00:31:33.060 --> 00:31:35.760
mehreren, die halt

00:31:35.760 --> 00:31:37.480
aus mehreren Sachen besteht, nicht nur irgendwie

00:31:37.480 --> 00:31:40.020
also man hat diese grundlegenden

00:31:40.020 --> 00:31:42.020
Datentypen, sowas wie Integer, Float,

00:31:43.200 --> 00:31:43.760
ja, so

00:31:43.760 --> 00:31:44.780
Charakter

00:31:44.780 --> 00:31:48.080
und ein Struct kann dann zum Beispiel, weiß ich nicht,

00:31:48.080 --> 00:31:50.140
ein Charakter-Array haben

00:31:50.140 --> 00:31:52.100
und ein Float und ein Int oder so.

00:31:52.580 --> 00:31:53.880
Und dann der, genau.

00:31:54.660 --> 00:31:56.260
Also ein komplexerer Datentyp

00:31:56.260 --> 00:31:58.360
in C quasi. Sowas wie ein Base Model.

00:31:59.500 --> 00:31:59.760
Ja.

00:32:01.660 --> 00:32:02.380
Ist halt kein

00:32:02.380 --> 00:32:02.900
Objekt, aber

00:32:02.900 --> 00:32:06.160
auch die Art, wie man dann Objekte in C implementiert.

00:32:06.460 --> 00:32:06.900
Aber ja.

00:32:08.040 --> 00:32:10.420
Dann braucht man halt noch Pointer auf die Funktionen, die das Ding

00:32:10.420 --> 00:32:12.240
hat und so. Aber ja, genau.

00:32:13.140 --> 00:32:14.160
Aber genau,

00:32:14.320 --> 00:32:15.720
was ich auch noch

00:32:15.720 --> 00:32:18.180
interessant fand, so an Meta-Geschichten

00:32:18.180 --> 00:32:20.040
zu dieser Performance-Optimierungs-Geschichte, ist halt

00:32:20.040 --> 00:32:21.240
dass

00:32:21.240 --> 00:32:24.260
Guido da so ein bisschen drüber erzählt hat, was

00:32:24.260 --> 00:32:26.400
ich muss den, genau, den Link

00:32:26.400 --> 00:32:28.400
auf die Episode muss ich auch nochmal in die Show-Notes packen,

00:32:29.040 --> 00:32:30.320
was bisher immer

00:32:30.320 --> 00:32:32.320
so schiefgelaufen ist. So PiPi hat

00:32:32.320 --> 00:32:34.120
ja nicht so richtig, muss man leider sagen, wahrscheinlich

00:32:34.120 --> 00:32:35.240
nicht so richtig funktioniert.

00:32:37.480 --> 00:32:38.260
Und der Grund

00:32:38.260 --> 00:32:39.320
ist halt, dass

00:32:39.320 --> 00:32:42.080
aus seiner Perspektive, dass

00:32:42.080 --> 00:32:44.180
sie das, sie haben halt ein

00:32:44.180 --> 00:32:45.020
Problem gelöst,

00:32:45.620 --> 00:32:48.200
aber das schwierige

00:32:48.200 --> 00:32:49.920
Problem halt nicht. Und das ist halt

00:32:49.920 --> 00:32:51.880
wie kriegt man das so hin, dass es

00:32:51.880 --> 00:32:53.860
schneller wird, plus dass die ganzen

00:32:53.860 --> 00:32:55.860
C-Extensions halt noch

00:32:55.860 --> 00:32:57.600
funktionieren. Das ist ja auch immer genau das Problem.

00:32:58.120 --> 00:32:59.520
Also PyPI, äh, PyPi

00:32:59.520 --> 00:33:01.720
ist halt natürlich, es macht einen, äh,

00:33:01.780 --> 00:33:03.520
es ist halt so ein bisschen Just-in-Time, wobei

00:33:03.520 --> 00:33:05.900
kann man auch nicht so richtig sagen, also Just-in-Time-Compilation

00:33:05.900 --> 00:33:07.760
ist halt auch so ein schwieriger Begriff.

00:33:08.660 --> 00:33:09.060
Ähm,

00:33:10.400 --> 00:33:11.540
aber es macht halt irgendwie

00:33:11.540 --> 00:33:13.300
dein Python,

00:33:13.760 --> 00:33:15.660
die Ausführung von deinem Python-Code deutlich, deutlich schneller.

00:33:16.400 --> 00:33:17.720
Nur das Problem ist halt, die ganzen

00:33:17.720 --> 00:33:19.840
C-Geschichten funktionieren dann halt

00:33:19.840 --> 00:33:21.960
nicht mehr. Und das ist natürlich

00:33:21.960 --> 00:33:23.840
ein großes Problem, weil das ist halt das, wo

00:33:23.840 --> 00:33:25.800
du normalerweise deine Performance

00:33:25.800 --> 00:33:27.680
Gewinne herbekommst. Also wenn ich halt Sachen

00:33:27.680 --> 00:33:29.440
in NumPy mache, dann statt in

00:33:29.440 --> 00:33:31.940
mit Python-Listen oder so,

00:33:31.980 --> 00:33:33.220
dann ist das natürlich viel, viel schneller.

00:33:34.260 --> 00:33:35.280
Und ja,

00:33:35.620 --> 00:33:37.680
das geht dann halt so nicht mehr,

00:33:38.100 --> 00:33:39.680
wenn man halt PyPy verwendet.

00:33:40.180 --> 00:33:41.680
Daher macht das alles keinen

00:33:41.680 --> 00:33:43.060
großen Sinn. Und

00:33:43.060 --> 00:33:45.460
diese Geschichten sind halt nie, es ist halt

00:33:45.460 --> 00:33:47.560
vielleicht auch einfach nicht lösbar und daher ist das

00:33:47.560 --> 00:33:48.620
einfach nicht funktioniert.

00:33:49.640 --> 00:33:50.980
Und sie haben halt große Schwierigkeiten

00:33:50.980 --> 00:33:52.960
irgendwie up-to-date

00:33:52.960 --> 00:33:54.900
zu bleiben, weil sich natürlich auch immer alles

00:33:54.900 --> 00:33:56.720
ändert. Irgendwie mit neuen

00:33:56.720 --> 00:33:58.800
Python-Versionen und dann ändert sich halt auch

00:33:58.800 --> 00:34:00.300
die DC

00:34:00.300 --> 00:34:02.740
CAP und so. Es ist alles

00:34:02.740 --> 00:34:04.800
nicht so einfach. Jedenfalls, dieser Weg

00:34:04.800 --> 00:34:06.420
hat halt nicht so richtig funktioniert irgendwie.

00:34:07.540 --> 00:34:08.900
Und dann gab es ja noch ein paar andere Wege.

00:34:09.000 --> 00:34:10.720
Es gab noch Pisten und

00:34:10.720 --> 00:34:11.920
es gab noch irgendwie Sachen.

00:34:12.760 --> 00:34:13.940
Momentan gibt es auch noch, ich glaube,

00:34:14.100 --> 00:34:16.220
es gab es nicht nur, das gibt es auch wieder.

00:34:16.780 --> 00:34:18.680
Es gab bei Microsoft noch Leute, die das versucht haben auf der

00:34:18.680 --> 00:34:20.660
.net Runtime irgendwie laufen zu lassen. Die machen auch

00:34:20.660 --> 00:34:21.340
irgendwie lustige Sachen.

00:34:23.840 --> 00:34:24.160
Aber...

00:34:24.160 --> 00:34:24.760
Was ist denn Pisten?

00:34:25.880 --> 00:34:27.820
Ja, auch ein Projekt, was halt

00:34:27.820 --> 00:34:31.080
so eine Art...

00:34:31.080 --> 00:34:32.600
Lass mich lügen, ich weiß jetzt gar nicht genau,

00:34:32.720 --> 00:34:34.280
was sie an Optimierung gemacht haben.

00:34:34.980 --> 00:34:36.180
Es gab auch vorher schon

00:34:36.180 --> 00:34:38.560
so ein paar Sachen.

00:34:39.140 --> 00:34:40.820
Wie hießen das noch? Psycho?

00:34:42.800 --> 00:34:44.600
Das gibt es aber schon ganz lange nicht mehr, glaube ich.

00:34:45.020 --> 00:34:46.560
Naja, also es gab auf jeden Fall schon so ein paar Versuche,

00:34:46.560 --> 00:34:48.060
da schneller zu machen, aber das alles

00:34:48.060 --> 00:34:50.160
wenn das halt darauf hinaus

00:34:50.160 --> 00:34:51.800
lief, dass es halt irgendwie

00:34:51.800 --> 00:34:53.800
anders funktioniert als CPython

00:34:53.800 --> 00:34:55.880
Bytecode, dann ist es halt

00:34:55.880 --> 00:34:57.420
nicht gut, so richtig, weil

00:34:57.420 --> 00:34:59.060
ja,

00:34:59.520 --> 00:35:01.780
das ist halt dann doch, weil

00:35:01.780 --> 00:35:03.980
das Problem ist, dass viele Sachen, die halt da

00:35:03.980 --> 00:35:05.360
dranhängen, gehen dann halt nicht mehr.

00:35:05.860 --> 00:35:06.980
Unter anderem die ganzen

00:35:06.980 --> 00:35:09.120
C-Extensions.

00:35:10.360 --> 00:35:12.100
Was mich dazu führt, also es gibt ja

00:35:12.100 --> 00:35:13.960
noch Alternativen vielleicht dazu. Ich habe jetzt schon

00:35:13.960 --> 00:35:15.660
ein paar Mal so Rust, Python ist mir irgendwie

00:35:15.660 --> 00:35:18.140
Ja, Rust, das ist auch interessant, ja, auf jeden Fall.

00:35:18.300 --> 00:35:20.160
Also das wäre wahrscheinlich auch für die Zukunft halt,

00:35:20.220 --> 00:35:21.180
ist das eine Geschichte, die,

00:35:22.300 --> 00:35:24.300
also einmal Extensions in Rust

00:35:24.300 --> 00:35:26.340
schreiben und nicht in C, das ist eine interessante Geschichte.

00:35:28.620 --> 00:35:29.720
Und natürlich, was auch

00:35:29.720 --> 00:35:32.140
unter Umständen interessant wäre, halt vielleicht einen Interpreter

00:35:32.140 --> 00:35:33.060
zu schreiben, der halt

00:35:33.060 --> 00:35:35.900
nicht in C ist, sondern in Rust,

00:35:36.040 --> 00:35:37.620
aber das ist natürlich noch ein weiter Weg.

00:35:38.080 --> 00:35:40.180
Aber das hätte halt den Riesenvorteil, wenn man das mal

00:35:40.180 --> 00:35:42.060
irgendwann hinkriegt. Das muss man alles zwar neu schreiben,

00:35:42.060 --> 00:35:43.900
aber ja. Man muss halt so ziemlich alles neu schreiben,

00:35:44.000 --> 00:35:45.560
was halt ein bisschen schwierig ist, aber

00:35:45.560 --> 00:35:48.160
wenn man das dann kriegt, dann könnte man das halt auch

00:35:48.160 --> 00:35:49.900
da, man Rust halt irgendwie nach

00:35:49.900 --> 00:35:51.600
WebAssembly irgendwie kompilieren kann,

00:35:51.920 --> 00:35:53.380
könnte man das halt in den Browser bringen.

00:35:54.720 --> 00:35:55.800
Das wäre natürlich schon nett.

00:35:56.360 --> 00:35:57.500
Dann könnte man einfach im Browser dann

00:35:57.500 --> 00:35:58.460
Python ausführen.

00:36:00.600 --> 00:36:02.160
Ja, aber das ist

00:36:02.160 --> 00:36:03.180
alles noch sehr weit weg.

00:36:04.060 --> 00:36:06.040
Man muss halt einfach nochmal neu schreiben, das war noch ein bisschen

00:36:06.040 --> 00:36:07.360
die Wegstrecke runter.

00:36:07.900 --> 00:36:10.020
Leute entwickeln, finden die auch gut Rust können

00:36:10.020 --> 00:36:11.800
und so, das ist auch nicht so einfach, gibt es ja auch noch nicht so ewig.

00:36:12.740 --> 00:36:14.000
Und das dann in der Kombination,

00:36:14.120 --> 00:36:15.860
dann muss das dann in Rust sich dann auch wieder entwickeln

00:36:15.860 --> 00:36:17.220
und die ganzen Fehlerchen dann wegkommen.

00:36:17.840 --> 00:36:18.320
Ja, ja.

00:36:19.660 --> 00:36:21.940
Aber es könnte tatsächlich doch gar nicht so interessant sein, oder?

00:36:22.060 --> 00:36:23.900
Also es könnte doch deutlich schneller sein als noch

00:36:23.900 --> 00:36:26.040
in C. Sicherer auch als in C.

00:36:26.220 --> 00:36:27.400
Und dann... Ja, ja, klar.

00:36:27.720 --> 00:36:29.220
Also es ist auf jeden Fall

00:36:29.220 --> 00:36:31.400
sehr interessant. Ich bin gespannt.

00:36:31.800 --> 00:36:33.640
Aber genau, um mal wieder den Bogen

00:36:33.640 --> 00:36:34.340
zurückzukriegen.

00:36:35.560 --> 00:36:37.340
Also Guido hat ja jetzt

00:36:37.340 --> 00:36:38.960
wieder, der war ja im Ruhestand,

00:36:38.960 --> 00:36:40.080
ist ja wieder zurückgekommen

00:36:40.080 --> 00:36:42.720
und hat jetzt da so ein Team bei Microsoft

00:36:42.720 --> 00:36:44.600
und das ist auch komisch,

00:36:44.760 --> 00:36:46.340
dass er, wie gedacht, dass er jeweils, also

00:36:46.340 --> 00:36:47.600
ja, aber so ist es halt.

00:36:47.880 --> 00:36:50.400
Ja, ja, er frisst ihre Kinder

00:36:50.400 --> 00:36:52.300
oder so, wie war das? Schon irgendwie, ja,

00:36:52.440 --> 00:36:53.700
das ist jetzt wieder cool und

00:36:53.700 --> 00:36:56.160
genau,

00:36:57.200 --> 00:36:58.460
der widmet sich

00:36:58.460 --> 00:37:00.240
da jetzt hauptsächlich irgendwie Python Performance

00:37:00.240 --> 00:37:02.100
und das natürlich auch schon mal, aber es wird halt noch ein bisschen

00:37:02.100 --> 00:37:04.040
dauern, auch bis sich das dann wirklich auswirkt.

00:37:05.460 --> 00:37:05.820
Und

00:37:05.820 --> 00:37:08.140
aber wir können wahrscheinlich damit rechnen, dass halt

00:37:08.140 --> 00:37:09.920
in den nächsten Jahren Python halt noch ein gutes

00:37:09.920 --> 00:37:12.260
Stückchen schneller wird und das ist auch schon mal eine schöne Sache.

00:37:12.720 --> 00:37:19.900
Genau, ich weiß nicht genau, hatten wir sonst noch

00:37:19.900 --> 00:37:21.340
irgendwas zu Python

00:37:21.340 --> 00:37:23.780
3.10 oder 3.11 haben wir jetzt gepostet

00:37:23.780 --> 00:37:25.940
Genau, also 3.11 Better Facepacks

00:37:25.940 --> 00:37:26.620
haben wir ja auch schon gesagt

00:37:26.620 --> 00:37:29.760
Das sieht wirklich schick aus, das heißt, man kann sie wirklich mal lesen

00:37:29.760 --> 00:37:30.980
Das macht Sinn

00:37:30.980 --> 00:37:32.400
Das ist schon gut, ja

00:37:32.400 --> 00:37:35.800
Also ja, ich glaube

00:37:35.800 --> 00:37:37.600
News gibt es halt noch ein bisschen, Django vielleicht

00:37:37.600 --> 00:37:39.860
Ja, Django, da gibt es jetzt auch eine Alpha-Release

00:37:39.860 --> 00:37:41.660
von Django 4, das habe ich auch mal ausprobiert

00:37:41.660 --> 00:37:43.260
guckt, was dann alles so kaputt geht.

00:37:44.000 --> 00:37:44.700
Und, was geht kaputt?

00:37:45.180 --> 00:37:46.560
Wagtail zum Beispiel geht kaputt.

00:37:46.940 --> 00:37:48.920
Ach so, so eine Überraschung.

00:37:49.800 --> 00:37:51.220
Ja, und noch so ein paar andere Sachen, also

00:37:51.220 --> 00:37:53.020
ich meine, meine Lieblingskandidaten

00:37:53.020 --> 00:37:55.280
für irgendwie, was Sachen geht schief,

00:37:55.340 --> 00:37:55.980
sind ja auch immer so

00:37:55.980 --> 00:37:59.740
die ganzen Comments-Zeugs,

00:37:59.740 --> 00:38:00.860
weil das halt auch nur noch so

00:38:00.860 --> 00:38:03.460
marginal-maintained ist, irgendwie

00:38:03.460 --> 00:38:04.740
Threaded-Comments, Fluent-Comments,

00:38:05.280 --> 00:38:07.400
Contrib-Comments, Contrib-Comments ist glaube ich sogar halbwegs gut

00:38:07.400 --> 00:38:09.840
maintained, da gab es auch Mai oder so

00:38:09.840 --> 00:38:11.460
wieder eine Version, aber

00:38:11.460 --> 00:38:13.380
Fluent-Commands und Threaded-Commands vor allen Dingen

00:38:13.380 --> 00:38:15.420
eher nicht so. Und genau,

00:38:15.640 --> 00:38:17.520
Threaded-Commands ist halt auch kaputt gegangen und da habe ich

00:38:17.520 --> 00:38:19.160
dann halt irgendwie auch, glaube ich, einen Pull-Request gemacht.

00:38:20.620 --> 00:38:21.560
Und dann

00:38:21.560 --> 00:38:23.000
Wagtail ist auch kaputt gegangen.

00:38:23.720 --> 00:38:25.780
Da habe ich dann auch einen Pull-Request

00:38:25.780 --> 00:38:27.140
irgendwie gemacht.

00:38:27.760 --> 00:38:29.240
Der ist auch, dann

00:38:29.240 --> 00:38:31.440
habe ich mich nicht mehr drum herum gekümmert, weil ich keine Zeit hatte.

00:38:31.840 --> 00:38:33.600
Und dann ist er irgendwie so halb durchgegangen.

00:38:34.820 --> 00:38:35.240
Das ist mir,

00:38:35.240 --> 00:38:37.340
das ist mir ehrlich gesagt ein bisschen peinlich,

00:38:37.440 --> 00:38:38.980
weil ich habe da irgendwie nur sowas hingerotzt.

00:38:39.220 --> 00:38:40.840
Und dann kam dann noch so

00:38:40.840 --> 00:38:42.980
Anmerkungen und was ich noch tun könnte

00:38:42.980 --> 00:38:44.700
und so und ich habe einfach nicht mehr reagiert und dann hat

00:38:44.700 --> 00:38:46.960
irgendjemand dann irgendwie Teile davon einfach so gemerged

00:38:46.960 --> 00:38:48.840
und waren halt dann drin. Aber

00:38:48.840 --> 00:38:50.600
es ist irgendwie, ehrlich gesagt, sehr schlampig

00:38:50.600 --> 00:38:52.580
von meiner Seite aus. Aber ja,

00:38:52.760 --> 00:38:54.420
also... So, so, so.

00:38:54.880 --> 00:38:56.760
Ja. Ja. Aber prinzipiell...

00:38:56.760 --> 00:38:58.480
Ich kriege immer auf die Finger, wenn ich irgendwas nicht ordentlich mache.

00:38:58.960 --> 00:38:59.200
Ja.

00:39:01.500 --> 00:39:02.580
Aber prinzipiell

00:39:02.580 --> 00:39:04.980
geht Wagtail mit Django 4.

00:39:05.140 --> 00:39:06.800
Also das funktioniert schon. Also man

00:39:06.800 --> 00:39:08.760
muss da gar nicht so wahnsinnig viel... Prinzipiell

00:39:08.760 --> 00:39:10.720
schon, wenn man noch ein bisschen... Also es

00:39:10.720 --> 00:39:11.780
gibt zwei Dinge, die

00:39:11.780 --> 00:39:13.860
nicht funktionieren. Das eine ist

00:39:13.860 --> 00:39:16.620
wenn man

00:39:16.620 --> 00:39:18.720
ein All-Pass-Quote verwendet, das hat sich

00:39:18.720 --> 00:39:20.580
irgendwie geändert. Das

00:39:20.580 --> 00:39:22.660
war früher in Django selber drin.

00:39:22.760 --> 00:39:24.680
In Django 4 fliegt das raus. Das ist

00:39:24.680 --> 00:39:26.660
sowieso schon deprecated. Und das bedeutet,

00:39:26.720 --> 00:39:27.460
man muss jetzt aus

00:39:27.460 --> 00:39:30.520
From-All-Pass-Import-Quote sagen, statt

00:39:30.520 --> 00:39:31.660
das aus Django zu importieren.

00:39:32.660 --> 00:39:34.540
Weil das jetzt in der Python-Standard-Bibliothek

00:39:34.540 --> 00:39:36.200
genau das gleiche macht wie vorher in Django.

00:39:36.900 --> 00:39:37.700
Und das muss man ändern.

00:39:37.700 --> 00:39:39.220
Also bei URLs-Quoten, meinst du,

00:39:39.300 --> 00:39:41.460
um irgendwie so Sachen rauszubekommen, oder?

00:39:41.960 --> 00:39:43.100
Ja, genau, um zum Beispiel

00:39:43.100 --> 00:39:44.800
irgendwie, das ist halt ein Dikt oder so,

00:39:44.980 --> 00:39:47.400
dann willst du das halt

00:39:47.400 --> 00:39:49.360
in URL-Parameter

00:39:49.360 --> 00:39:50.480
verwandeln, ich weiß gar nicht jetzt genau,

00:39:51.420 --> 00:39:53.400
unter welchen Bedingungen man das jetzt wie verwendet,

00:39:53.480 --> 00:39:55.140
aber ja, genau, also es ist halt so, dass

00:39:55.140 --> 00:39:57.280
irgendwas, was nicht halt

00:39:57.280 --> 00:39:58.840
in der URL stehen kann, was machen, was halt

00:39:58.840 --> 00:40:01.080
da drin stehen kann,

00:40:01.320 --> 00:40:02.240
ja, und

00:40:02.240 --> 00:40:04.780
dann

00:40:04.780 --> 00:40:07.280
eine andere Geschichte ist,

00:40:07.280 --> 00:40:08.240
genau, da ist so ein

00:40:08.240 --> 00:40:11.420
Request.isAjax

00:40:11.420 --> 00:40:12.260
ist rausgeflogen

00:40:12.260 --> 00:40:15.580
und das wurde in Racktail halt auch verwendet.

00:40:15.680 --> 00:40:17.180
Das wird relativ viel verwendet auch irgendwie,

00:40:17.220 --> 00:40:18.460
von IsAjax, ja.

00:40:20.120 --> 00:40:21.320
Warum ist das nochmal rausgeflogen?

00:40:21.420 --> 00:40:21.880
Da gab es irgendeinen Grund.

00:40:22.200 --> 00:40:23.460
Der Grund ist, dass

00:40:23.460 --> 00:40:26.340
die Überprüfung,

00:40:26.800 --> 00:40:28.180
ob das jetzt Ajax ist oder nicht,

00:40:28.960 --> 00:40:30.420
so ein bisschen darauf basiert, dass

00:40:30.420 --> 00:40:32.900
das von jQuery aus

00:40:32.900 --> 00:40:34.620
aufgerufen wird. Also weil jQuery

00:40:34.620 --> 00:40:36.700
macht da irgendwelche, also es setzt halt

00:40:36.700 --> 00:40:38.100
irgendeinen Header, also es ist sowieso

00:40:38.100 --> 00:40:40.480
es macht, glaube ich, nicht mehr, als irgendeinen Header zu überprüfen,

00:40:40.580 --> 00:40:41.360
ob der gesetzt ist.

00:40:45.000 --> 00:40:46.300
Das ist nicht die richtige Methode, man soll direkt

00:40:46.300 --> 00:40:48.140
gucken, ob der Header drin ist, einfach. Genau,

00:40:48.240 --> 00:40:50.300
das ist halt der empfohlene Workaround, das einfach

00:40:50.300 --> 00:40:52.220
ersetzen durch, ist der Header da drin

00:40:52.220 --> 00:40:54.360
oder nicht. Genau, das habe ich dann direkt halt auch gemacht.

00:40:56.040 --> 00:40:56.340
Aber

00:40:56.340 --> 00:40:58.160
insgesamt hieß es halt so

00:40:58.160 --> 00:40:59.500
in den

00:40:59.500 --> 00:41:02.080
Django-Dokumentationen dazu, ja,

00:41:02.300 --> 00:41:04.160
also das ist sowieso nicht so toll, das darüber

00:41:04.160 --> 00:41:06.440
zu machen, weil das ist halt jQuery-spezifisch

00:41:06.440 --> 00:41:08.580
und jQuery ist auch so auf dem Weg

00:41:08.580 --> 00:41:09.520
nach draußen und

00:41:09.520 --> 00:41:12.020
die meisten verwenden halt inzwischen Fetch

00:41:12.020 --> 00:41:14.060
in JavaScript, Fetch API

00:41:14.060 --> 00:41:16.380
und die macht das sowieso irgendwie anders

00:41:16.380 --> 00:41:17.300
und das heißt,

00:41:17.540 --> 00:41:20.340
das ist ein bisschen nutzlos,

00:41:20.540 --> 00:41:22.400
das ist Ajax, das liefert halt einfach nicht mehr

00:41:22.400 --> 00:41:24.280
die richtige, es ist ein

00:41:24.280 --> 00:41:25.180
Ajax-Call, aber

00:41:25.180 --> 00:41:28.460
das kommt halt am Server so nicht an

00:41:28.460 --> 00:41:30.320
beziehungsweise den

00:41:30.320 --> 00:41:32.220
Header zu überprüfen ist so ein bisschen sinnlos und

00:41:32.220 --> 00:41:34.320
weil das halt irgendwie nur von jQuery

00:41:34.320 --> 00:41:36.200
gesetzt wird, das heißt

00:41:36.200 --> 00:41:38.400
im Grunde muss man das streichen, weil das funktioniert so nicht mehr.

00:41:38.580 --> 00:41:40.400
Und dann die andere Geschichte ist halt

00:41:40.400 --> 00:41:42.100
auch so, ja, wozu das überhaupt

00:41:42.100 --> 00:41:44.140
überprüfen? Das ist auch irgendwie Quatsch, weil

00:41:44.140 --> 00:41:46.460
naja,

00:41:46.760 --> 00:41:48.060
oder genau, das ist halt

00:41:48.060 --> 00:41:50.180
empfohlen, was man dann überprüfen soll,

00:41:50.240 --> 00:41:51.860
weil was möchte man eigentlich machen oft?

00:41:52.300 --> 00:41:53.620
Man möchte halt so etwas machen wie,

00:41:54.560 --> 00:41:56.320
ja, wenn da jetzt ein Browser

00:41:56.320 --> 00:41:58.160
auf die URL geht zum Beispiel

00:41:58.160 --> 00:41:59.920
und dann halt sonst JSON kriegen würde,

00:42:00.160 --> 00:42:02.100
dann will man dem nicht einfach

00:42:02.100 --> 00:42:03.820
JSON schicken, sondern vielleicht eine HTML

00:42:03.820 --> 00:42:06.020
Fehlermeldungen

00:42:06.020 --> 00:42:07.960
so, ey, hallo, bitte nicht mit dem Browser

00:42:07.960 --> 00:42:09.880
hier hin, sondern geh lieber da hin, weil

00:42:09.880 --> 00:42:10.860
hier gibt's nur JSON, sowas.

00:42:11.760 --> 00:42:13.400
Und dafür muss man halt eine Fallunterscheidung machen.

00:42:13.780 --> 00:42:15.680
Und da sollte man doch lieber

00:42:15.680 --> 00:42:18.260
auf request.accept

00:42:18.260 --> 00:42:19.820
gucken, ob das Ding jetzt

00:42:19.820 --> 00:42:21.820
zum Beispiel HTML,

00:42:22.380 --> 00:42:23.880
Text-HTML haben will oder so.

00:42:24.260 --> 00:42:26.060
Und wenn es Text-HTML haben will,

00:42:26.120 --> 00:42:27.800
dann sagt man halt hier so, hier Fehlermeldung, ich gebe

00:42:27.800 --> 00:42:29.560
eigentlich nur JSON zurück, ich kann gar nichts anderes als JSON.

00:42:30.560 --> 00:42:31.900
Und das ist halt dann

00:42:31.900 --> 00:42:33.740
besser, das funktioniert dann in jedem

00:42:33.740 --> 00:42:35.440
Fall eigentlich sozusagen. Egal welche,

00:42:36.180 --> 00:42:37.760
wie der Request gemacht wird von der kleinen Seite aus,

00:42:37.960 --> 00:42:39.000
ob über Fetch oder jQuery.

00:42:39.840 --> 00:42:41.780
Genau, das ist halt das, worauf man dann

00:42:41.780 --> 00:42:44.100
langfristig migrieren sollte, oder kurzfristig,

00:42:44.180 --> 00:42:45.120
wenn man es, ja.

00:42:47.080 --> 00:42:47.480
Weil

00:42:47.480 --> 00:42:49.200
AJAX ist halt weg.

00:42:50.100 --> 00:42:50.820
Mit Django 4, ja.

00:42:51.580 --> 00:42:52.640
Aber ansonsten,

00:42:53.080 --> 00:42:55.840
das hat relativ reibungslos funktioniert.

00:42:55.960 --> 00:42:57.260
Also Django 4 funktioniert bei mir schon

00:42:57.260 --> 00:42:58.500
relativ problemlos.

00:42:58.500 --> 00:42:59.680
Und, ja.

00:43:00.580 --> 00:43:02.680
Also Time-Zone-Info

00:43:02.680 --> 00:43:04.100
haben sich so ein paar Sachen, glaube ich, geändert, wenn man die

00:43:04.100 --> 00:43:06.420
verbaut. Also die hat ja, weiß ich nicht,

00:43:06.440 --> 00:43:08.480
Python, wann hat das noch umgestellt? 3 irgendwas?

00:43:09.240 --> 00:43:09.840
Das ist irgendwie

00:43:09.840 --> 00:43:11.700
Zone-Info jetzt neu.

00:43:12.240 --> 00:43:14.480
Ich weiß nicht, ob das bei Python-Renewal drin war,

00:43:14.540 --> 00:43:16.440
dass das jetzt in die Standard-Gewöhnung gewandert ist, ja.

00:43:17.900 --> 00:43:18.120
Genau.

00:43:18.960 --> 00:43:20.460
Und da kann man ja wahrscheinlich mehr machen

00:43:20.460 --> 00:43:22.020
als PyTZ, das irgendwie rauszuholen irgendwann.

00:43:23.360 --> 00:43:24.140
Und das, ja,

00:43:24.480 --> 00:43:25.640
ist ja vielleicht ganz interessant noch.

00:43:26.480 --> 00:43:28.640
Auch ein schönes neues Feature. Ja, und ansonsten

00:43:28.640 --> 00:43:29.780
die anderen Sachen, ehrlich gesagt,

00:43:30.080 --> 00:43:32.420
es gibt ein Standard-Redis-Cache-Weckend jetzt,

00:43:32.460 --> 00:43:33.780
das muss man nicht mehr extra dazu packen.

00:43:34.100 --> 00:43:35.920
Aber gut, keine Third-Party-Library.

00:43:36.340 --> 00:43:37.340
Ja, also ich meine,

00:43:37.820 --> 00:43:40.320
ändert sich da nicht so viel dran,

00:43:40.720 --> 00:43:41.840
weil, ja,

00:43:42.220 --> 00:43:44.200
ich meine, man konnte es ja auch bisher schon alles verwenden.

00:43:44.980 --> 00:43:46.660
Also das war, gibt es eine Umfrage,

00:43:46.780 --> 00:43:48.280
die sie irgendwie gemacht haben, wer verwendet denn,

00:43:48.280 --> 00:43:50.260
was verwendet denn die User denn so

00:43:50.260 --> 00:43:51.080
für

00:43:51.080 --> 00:43:53.620
Caching-Backends und

00:43:53.620 --> 00:43:56.180
Memcache, die

00:43:56.180 --> 00:43:58.220
ist halt drin als in Django,

00:43:58.300 --> 00:43:59.520
da muss man nichts zusätzlich installieren.

00:44:00.000 --> 00:44:01.940
Und dann kam in der Umfrage raus so, oh, die Leute

00:44:01.940 --> 00:44:03.680
verwenden, aber alle Redis und nicht beim CacheD.

00:44:04.520 --> 00:44:06.000
Und ja, das ist halt nicht drin.

00:44:06.100 --> 00:44:08.120
Das heißt, alle müssen nochmal irgendwie Zusatzkram

00:44:08.120 --> 00:44:09.900
installieren. Oh, das bringt mich fast schon zu meiner

00:44:09.900 --> 00:44:11.800
nächsten Frage, weil das da so ein bisschen daran

00:44:11.800 --> 00:44:13.900
anschließt. Aber das, ja, vielleicht

00:44:13.900 --> 00:44:15.440
stellen wir das noch kurz zurück. Wir machen Werbung.

00:44:17.440 --> 00:44:18.120
Wieder ein Wissen.

00:44:19.780 --> 00:44:20.020
Ja,

00:44:20.140 --> 00:44:21.700
dann sind wir fertig denn tatsächlich mit

00:44:21.700 --> 00:44:23.600
Python Dango News. Hast du noch was?

00:44:24.980 --> 00:44:25.620
Lass mal überlegen.

00:44:25.740 --> 00:44:27.880
Nee, doch, also mit den News

00:44:27.880 --> 00:44:28.840
auf jeden Fall, aber

00:44:28.840 --> 00:44:31.440
genau, ich habe noch so ein paar, ach,

00:44:31.700 --> 00:44:33.400
weiß nicht, ob ich das...

00:44:33.400 --> 00:44:35.540
Genau, auch eine News, Psychic Learn

00:44:35.540 --> 00:44:37.400
hat eine Version 1.0.

00:44:37.680 --> 00:44:38.320
Ah, mhm.

00:44:39.160 --> 00:44:41.440
Das war ehrlich gesagt schon relativ lange stabil, aber

00:44:41.440 --> 00:44:43.280
jetzt hat es auch tatsächlich irgendwie eine

00:44:43.280 --> 00:44:44.780
offizielle 1.0-Version, ja, okay.

00:44:45.600 --> 00:44:47.360
Major-Versionsnummer,

00:44:47.600 --> 00:44:49.520
was eine tolle, tolle Geschichte ist,

00:44:49.640 --> 00:44:50.620
ja, super Projekt.

00:44:52.160 --> 00:44:52.460
Genau.

00:44:54.520 --> 00:44:55.500
Ja, das ist auch

00:44:55.500 --> 00:44:57.280
so das Beispiel, ich habe letztens, genau,

00:44:57.380 --> 00:44:58.180
gab es bei Lex Friedman,

00:44:58.880 --> 00:45:03.380
Gründer von Anaconda

00:45:03.380 --> 00:45:05.020
da und von, also der

00:45:05.020 --> 00:45:07.380
Travis Olyphant, der hat auch NumPy,

00:45:07.480 --> 00:45:09.140
SciPy, SciPy hat er zuerst, wusste ich auch nicht,

00:45:09.300 --> 00:45:11.140
fand ich auch interessant, SciPy zuerst

00:45:11.140 --> 00:45:13.380
entwickelt und dann NumPy kam später

00:45:13.380 --> 00:45:15.060
dazu, weil man Numeric und

00:45:15.060 --> 00:45:17.440
das andere Ding, NumArray

00:45:17.440 --> 00:45:19.220
irgendwie zusammenfassen musste,

00:45:19.420 --> 00:45:21.340
weil es gab zwar eben diese beiden unterschiedlichen

00:45:21.340 --> 00:45:23.360
Implementationen, dann ist es halt NumPy geworden.

00:45:25.240 --> 00:45:27.340
Der erzählt halt da auch so ein bisschen

00:45:27.340 --> 00:45:29.660
und da, der hat dann

00:45:29.660 --> 00:45:30.800
Cyclet Learn als so

00:45:30.800 --> 00:45:33.620
beispielhaftes

00:45:33.620 --> 00:45:35.600
Projekt, wie das hätte laufen

00:45:35.600 --> 00:45:37.280
sollen, eigentlich dann erwähnt und

00:45:37.280 --> 00:45:39.540
ein ganz tolles Projekt, ja, also Cyclet Learn

00:45:39.540 --> 00:45:41.540
wirklich voll gut, es gibt auch noch Cyclet Image und noch ein paar

00:45:41.540 --> 00:45:43.360
andere, aber Cyclet Learn ist eigentlich so

00:45:43.360 --> 00:45:44.460
das große

00:45:44.460 --> 00:45:47.140
Ding, was dabei rausgefallen ist, ja,

00:45:47.340 --> 00:45:47.660
voll gut.

00:45:49.260 --> 00:45:50.060
Was haben wir noch?

00:45:51.520 --> 00:45:51.820
Tja,

00:45:54.500 --> 00:45:56.660
Oh, es gab

00:45:56.660 --> 00:45:58.540
eine Sicherheitslücke. Das ist jetzt

00:45:58.540 --> 00:46:00.360
gar nichts mit Python zu tun. Ich fand das nur

00:46:00.360 --> 00:46:02.040
deswegen interessant, weil es halt so eine

00:46:02.040 --> 00:46:04.380
Geschichte ist, die etwas illustriert,

00:46:04.480 --> 00:46:06.280
wenn man das einfach so erzählt, oft

00:46:06.280 --> 00:46:08.880
ist das nicht so ein bisschen intuitiv,

00:46:08.940 --> 00:46:10.140
aber das ist ein sehr schönes

00:46:10.140 --> 00:46:11.680
Beispiel dafür, weil

00:46:11.680 --> 00:46:14.400
oder ich habe halt oft das Gefühl, dass

00:46:14.400 --> 00:46:18.420
ja, es sozusagen

00:46:18.420 --> 00:46:20.440
die Ansicht gibt, dass man Sicherheit

00:46:20.440 --> 00:46:22.300
irgendwie dadurch herstellen kann, dass man

00:46:22.300 --> 00:46:24.400
zusätzlich Dinge tut.

00:46:24.500 --> 00:46:26.840
... oder Dinge erweitert oder so.

00:46:27.480 --> 00:46:30.140
man, weiß ich nicht,

00:46:30.200 --> 00:46:31.560
kauft irgendetwas, was dann halt Sicherheit

00:46:31.560 --> 00:46:32.180
macht oder

00:46:32.180 --> 00:46:35.620
man installiert zusätzliches Zeug,

00:46:35.700 --> 00:46:37.320
das dann Sachen sicherer machen soll oder so und

00:46:37.320 --> 00:46:39.520
ich habe da immer so ein bisschen Bedenken und ich habe das

00:46:39.520 --> 00:46:41.580
Gefühl, dass das geht eigentlich gar nicht, sondern eigentlich

00:46:41.580 --> 00:46:43.360
kriegt man also wirklich Sicherheit nur dadurch, dass man Sachen

00:46:43.360 --> 00:46:45.560
weglässt, weil alles, was halt irgendwas tut,

00:46:45.660 --> 00:46:46.320
hat halt irgendwie,

00:46:46.900 --> 00:46:49.540
macht halt die Angriffsoberfläche

00:46:49.540 --> 00:46:51.420
größer und das ist halt ein Problem

00:46:51.420 --> 00:46:53.540
und jetzt hat es halt so ein Ding erwischt und

00:46:53.540 --> 00:46:54.940
das fand ich...

00:46:54.940 --> 00:46:55.900
Was für ein Ding hast du denn überhaupt?

00:46:56.200 --> 00:46:56.880
Fail to ban.

00:46:57.980 --> 00:47:00.360
Das ist halt irgendwie so ein Ding, dass man sich zusätzlich

00:47:00.360 --> 00:47:02.440
zu SSI installiert und das dann halt

00:47:02.440 --> 00:47:04.440
irgendwie sich anguckt, was da passiert

00:47:04.440 --> 00:47:05.940
und dann halt zum Beispiel den Port zumacht.

00:47:07.060 --> 00:47:08.180
Oder sonst irgendwie was.

00:47:08.880 --> 00:47:09.840
Und das hat ja jetzt,

00:47:10.540 --> 00:47:12.420
ich meine, die Auswirkungen davon sind nicht ganz so schlimm,

00:47:12.640 --> 00:47:14.480
weil, aber was das Ding

00:47:14.480 --> 00:47:15.300
gemacht hat, ist halt

00:47:15.300 --> 00:47:19.060
wenn da irgendwas,

00:47:20.020 --> 00:47:20.700
wenn da jemand

00:47:20.700 --> 00:47:22.400
irgendwie an diesem SH-Port rumgespielt hat,

00:47:22.400 --> 00:47:24.360
hat es halt dann irgendwann ein Whois

00:47:24.360 --> 00:47:24.940
auf

00:47:24.940 --> 00:47:27.880
die IP, von der

00:47:27.880 --> 00:47:29.860
diese Login-Vorsuche kommen,

00:47:30.100 --> 00:47:32.100
gemacht, sich da die

00:47:32.100 --> 00:47:33.760
Informationen rausgeholt und das dann per Mail

00:47:33.760 --> 00:47:35.420
irgendwie an den Admin geschickt.

00:47:36.640 --> 00:47:38.120
Okay. Klingt jetzt erstmal noch nicht

00:47:38.120 --> 00:47:39.900
so schlimm. Das Problem ist, da war

00:47:39.900 --> 00:47:42.240
so eine Shell-Escape-Lücke

00:47:42.240 --> 00:47:44.260
im Mail

00:47:44.260 --> 00:47:45.900
erzeugen.

00:47:45.900 --> 00:47:47.660
Das heißt, das hat irgendwie den Text aus dem Whois

00:47:47.660 --> 00:47:49.700
genommen, dann irgendwie in die Mail und das dann per

00:47:49.700 --> 00:47:51.060
Kommandozeile übergeben.

00:47:51.260 --> 00:47:53.140
Also kannst du modifizieren.

00:47:53.140 --> 00:47:55.440
Wenn du das Suez kontrollieren konntest,

00:47:55.520 --> 00:47:57.260
konntest du da halt dann irgendwie durch

00:47:57.260 --> 00:47:59.880
so Backtick irgendwie, weiß der Teufel,

00:48:00.620 --> 00:48:00.940
irgendwie

00:48:00.940 --> 00:48:03.680
Spielereien, das Ding da zu bringen,

00:48:03.780 --> 00:48:05.420
einen beliebigen Code auszuführen, ja, und dann

00:48:05.420 --> 00:48:06.620
konntest du halt einfach eine

00:48:06.620 --> 00:48:08.160
Rutschschale aufmachen.

00:48:08.580 --> 00:48:10.860
Und, äh, gut.

00:48:12.360 --> 00:48:13.640
Also einige Leute, passiert sowas

00:48:13.640 --> 00:48:15.620
ausnahmsweise, aber ich hab, da muss ich jetzt auch noch

00:48:15.620 --> 00:48:17.680
eine kurze andere Security-relevante

00:48:17.680 --> 00:48:19.340
Geschichte erzählen, und zwar, ihr wisst ja, manchmal

00:48:19.340 --> 00:48:21.440
mach ich auch ein bisschen Asia, und da war was ganz

00:48:21.440 --> 00:48:23.040
Tolles dabei, und zwar

00:48:23.040 --> 00:48:25.500
hat das glaube ich, weiß nicht, so was wie 2,5

00:48:25.500 --> 00:48:27.380
Millionen Kunden betroffen oder so, war auch gar nicht

00:48:27.380 --> 00:48:29.340
so relevant. Jedenfalls alle Leute, die halt

00:48:29.340 --> 00:48:31.320
Linux-VMs bei Azure hosten, was ja man ja macht,

00:48:31.360 --> 00:48:32.860
ich hab nämlich schon ein paar Mal gewundert, warum die irgendwie

00:48:32.860 --> 00:48:35.120
komischen Windows-Fehlermeldungen abstürzen. Ich dachte so, hä?

00:48:35.280 --> 00:48:37.300
Das ist gar nichts. Die laufen halt tatsächlich auf irgendeinem

00:48:37.300 --> 00:48:39.420
Windows drauf. Und was halt da irgendwie

00:48:39.420 --> 00:48:40.880
drumrum ist, ist halt irgendwie so ein Wrapper.

00:48:41.140 --> 00:48:43.700
Und Microsoft macht da irgendwelche Service-Prozesse

00:48:43.700 --> 00:48:45.380
irgendwie auf. Und man kann

00:48:45.380 --> 00:48:47.900
irgendwie auf einen Endpunkt einfach diesen Microsoft-Service-

00:48:47.900 --> 00:48:49.340
Endpunkt ansprechen. Und

00:48:49.340 --> 00:48:51.520
dann muss man halt dann sich authentifizieren,

00:48:51.600 --> 00:48:53.760
damit man da irgendwie Service-Krams

00:48:53.760 --> 00:48:55.740
machen darf. Und ganz besonders

00:48:55.740 --> 00:48:57.660
cool, weil es 2021 wird, dass sowas

00:48:57.660 --> 00:48:59.640
irgendwie möglich ist, weiß man nicht genau. Aber wenn man

00:48:59.640 --> 00:49:01.720
jetzt die Credentials halt falsch eingegeben hat, gibt es halt ein Denied.

00:49:02.000 --> 00:49:03.540
Und was passiert, wenn man gar keine Credentials

00:49:03.540 --> 00:49:04.000
angegeben hat?

00:49:05.460 --> 00:49:06.740
Ja, dann war alles gut.

00:49:08.140 --> 00:49:09.340
Dann war Ruth einfach so.

00:49:09.680 --> 00:49:11.660
Die hat gesagt, okay, eine Credentials, okay, muss wohl Ruth sein,

00:49:11.700 --> 00:49:13.680
ist wohl ein Admin. Dankeschön. Und ja,

00:49:13.760 --> 00:49:15.560
tatsächlich, diese Lücke war tatsächlich einfach da

00:49:15.560 --> 00:49:17.620
und einfach offen. Das heißt, wenn du diesen Endpunkt kennst

00:49:17.620 --> 00:49:19.600
von der Applikation, kannst du dich einfach ohne Credentials

00:49:19.600 --> 00:49:21.640
anmelden und hast ein Root-Jay auf diese ganze

00:49:21.640 --> 00:49:23.620
Applikation bekommen und es war völlig egal, was du gemacht hast,

00:49:23.700 --> 00:49:25.520
weil halt deine ganze Anwendung in deinem

00:49:25.520 --> 00:49:26.780
Linux-VM-Container einfach

00:49:26.780 --> 00:49:29.280
dann schreibbar war. Da war es so ein bisschen

00:49:29.280 --> 00:49:31.520
mittelgut. Und was auch sehr super daran ist,

00:49:32.120 --> 00:49:33.160
das geht nicht

00:49:33.160 --> 00:49:35.040
automatisch zu patchen. Das heißt,

00:49:35.420 --> 00:49:37.320
du musst hier dahin gehen und musst das manuell ausbauen, falls

00:49:37.320 --> 00:49:38.600
er das irgendwie bei sich aktiviert hat.

00:49:39.200 --> 00:49:41.040
Tja, und die sind irgendwie default aktiviert.

00:49:41.680 --> 00:49:41.920
Naja.

00:49:43.580 --> 00:49:43.980
Ja.

00:49:45.640 --> 00:49:47.540
Aber okay. Passiert halt

00:49:47.540 --> 00:49:49.260
wohl. Also wenn ihr

00:49:49.260 --> 00:49:51.200
irgendwelche Dinos bei Ames of Azure habt, guckt da mal

00:49:51.200 --> 00:49:52.360
vielleicht nochmal nach diesem Buckner.

00:49:53.940 --> 00:49:55.140
Klingt auch nur so,

00:49:55.300 --> 00:49:57.000
nicht so, klingt eher so mittel.

00:49:58.340 --> 00:49:59.440
Das war auf jeden Fall so eine Sache,

00:49:59.540 --> 00:50:00.540
wo ich dachte, oh mein Gott.

00:50:00.540 --> 00:50:01.400
Ja, na gut.

00:50:02.200 --> 00:50:03.780
Oh, Sicherheitslücken, wo wir gerade schon bei sind.

00:50:03.860 --> 00:50:05.440
Das war vor ein paar Tagen auf Twitch.

00:50:05.740 --> 00:50:06.860
Oh ja, Twitch wurde was geleakt.

00:50:07.600 --> 00:50:09.700
Komplett wohl, einfach mal komplett geleakt.

00:50:09.940 --> 00:50:13.240
Tja, kann halt mal passieren.

00:50:14.960 --> 00:50:16.260
Aber immerhin nur Passwort-Hashes.

00:50:17.540 --> 00:50:21.800
Ja, aber auch

00:50:21.800 --> 00:50:23.720
was dann auch interessant ist,

00:50:23.900 --> 00:50:25.780
halt auch die Bezahlinformationen.

00:50:26.300 --> 00:50:27.780
Ja, es wäre viel, viel, auch viel.

00:50:27.920 --> 00:50:29.040
Gucken, wie viel das wert ist.

00:50:30.240 --> 00:50:31.760
Da haben wir irgendwie ganz interessante

00:50:31.760 --> 00:50:32.280
Geschichten dabei.

00:50:34.140 --> 00:50:35.620
Also wenn ihr jetzt mal wissen wollt, wie viel euer

00:50:35.620 --> 00:50:37.960
Twitch-Favorite-Streams-Podcast verdient,

00:50:38.080 --> 00:50:39.840
oder wie viel Jochen mit seinen Streams verdient

00:50:39.840 --> 00:50:40.720
vom Python-Podcast.

00:50:41.160 --> 00:50:43.900
Das ist leider relativ traurig,

00:50:43.960 --> 00:50:44.320
da ist nichts.

00:50:45.620 --> 00:50:47.120
Bist du eingetragen? Das kann man da auch

00:50:47.120 --> 00:50:48.380
deine Informationen jetzt abrufen.

00:50:48.760 --> 00:50:51.100
Ich nehme mal an, dass das rausliegt. Es ist halt an der Stelle

00:50:51.100 --> 00:50:53.180
ein bisschen sinnlos, weil es ist eh öffentlich. Ich habe da nichts,

00:50:53.280 --> 00:50:54.400
was irgendwie nicht öffentlich ist, aber

00:50:54.400 --> 00:50:56.180
ja.

00:50:58.060 --> 00:50:59.140
Also da verraten

00:50:59.140 --> 00:51:01.100
die Return Investment bei Twitch

00:51:01.100 --> 00:51:02.060
bei dir im Moment null.

00:51:03.060 --> 00:51:04.960
Ich schaffe es auch nicht, in das

00:51:04.960 --> 00:51:06.960
Affiliate-Programm reinzukommen, weil ich habe noch nicht

00:51:06.960 --> 00:51:09.220
genug. Und jetzt kommt die Advertisement-Werbung.

00:51:10.000 --> 00:51:10.120
Genau.

00:51:11.680 --> 00:51:11.780
Ja.

00:51:13.200 --> 00:51:13.880
Ja, ja.

00:51:15.160 --> 00:51:16.940
Ja, aber ansonsten, ich finde das eigentlich ganz,

00:51:17.040 --> 00:51:18.320
das mache ich jetzt halt schon eine Zeit lang,

00:51:18.440 --> 00:51:21.360
dieses Streamen, das ist eigentlich schon ganz witzig.

00:51:21.500 --> 00:51:23.100
Also das sind teilweise schon,

00:51:25.400 --> 00:51:26.340
also damit hätte ich nicht gerechnet,

00:51:26.420 --> 00:51:29.500
dass da Leute live im Stream mir sagen,

00:51:29.760 --> 00:51:31.200
dass das, was ich da mache, ist halt falsch

00:51:31.200 --> 00:51:32.100
und wie ich es besser machen soll.

00:51:32.900 --> 00:51:33.520
Und das stimmt.

00:51:34.120 --> 00:51:35.340
Das finde ich echt wachsend.

00:51:35.880 --> 00:51:37.280
Das ist wirklich hilfreich.

00:51:37.520 --> 00:51:38.400
Das fand ich schon mal,

00:51:38.860 --> 00:51:40.720
hätte ich ehrlich gesagt nicht mit gerechnet.

00:51:40.880 --> 00:51:42.480
Also einmal hätte ich nicht damit gerechnet,

00:51:42.480 --> 00:51:43.540
dass sich irgendjemand dafür interessiert,

00:51:43.580 --> 00:51:43.980
was ich da tue.

00:51:44.420 --> 00:51:45.780
Womit ich auch nicht gerechnet hätte, ist, dass

00:51:45.780 --> 00:51:47.820
wenn sich jemand dafür interessiert, dass er dann auch besser

00:51:47.820 --> 00:51:49.980
weiß als ich. Aber, ja, gut.

00:51:50.640 --> 00:51:51.860
Wahrscheinlich, wenn sich jemand darauf interessiert,

00:51:51.960 --> 00:51:53.260
dann weiß er es tatsächlich wahrscheinlich sogar besser.

00:51:53.420 --> 00:51:55.740
Ja, offenbar. Und das finde ich faszinierend.

00:51:55.760 --> 00:51:57.160
Was ist dir denn da aufgefallen? Was war denn?

00:51:57.760 --> 00:51:58.600
Zum Beispiel, also gut,

00:52:00.060 --> 00:52:01.780
also bei PyTest waren so ein paar Sachen dabei,

00:52:01.960 --> 00:52:03.240
wie man das richtig macht und

00:52:03.240 --> 00:52:05.740
das wusste ich halt nicht. Oder PyCharm,

00:52:05.880 --> 00:52:07.720
auch einige Sachen, wie man da Dinge einstellt und so.

00:52:07.820 --> 00:52:09.820
Oh ja, aber, äh. Gut, da kenne ich mich jetzt auch

00:52:09.820 --> 00:52:10.680
nicht so aus, das stimmt schon.

00:52:11.500 --> 00:52:12.680
Habe ich gerade B gesagt, Entschuldigung.

00:52:13.900 --> 00:52:15.560
Ich finde Peitscham gar nicht so schlecht.

00:52:15.760 --> 00:52:19.500
Also inzwischen bin ich sogar ein bisschen, also man, ja.

00:52:19.900 --> 00:52:20.660
Bist du ein Fan geworden?

00:52:20.840 --> 00:52:21.940
Nee, das kann man nicht.

00:52:23.020 --> 00:52:25.060
Aber, also ich würde sagen, doch, die kann,

00:52:25.580 --> 00:52:27.960
wahrscheinlich kann die tatsächlich alles, was man so haben will.

00:52:28.220 --> 00:52:31.100
Ja, also ich, also VS Code kann ja noch nicht alles,

00:52:31.160 --> 00:52:31.640
was man so haben will.

00:52:31.740 --> 00:52:33.760
Aber ich schreibe fleißig Tickets herum und gucke,

00:52:33.920 --> 00:52:35.760
vielleicht kann das ja in einem Jahr das alles, was ich haben will.

00:52:36.020 --> 00:52:38.020
Also das Einzige, was mir bei VS Code tatsächlich noch nicht gefällt,

00:52:38.100 --> 00:52:39.780
ist tatsächlich Datenbank-Zugriff.

00:52:39.860 --> 00:52:41.920
Da muss man halt Extensions nehmen, die alle so mittelgut funktionieren.

00:52:42.060 --> 00:52:43.820
Das heißt, direkt die Datenbank einbinden ist so ein bisschen nervig.

00:52:43.900 --> 00:52:45.580
und ja, Tests

00:52:45.580 --> 00:52:47.200
nerven mich immer ein bisschen

00:52:47.200 --> 00:52:49.280
weil die nicht so

00:52:49.280 --> 00:52:51.380
integriert sind, wie ich mir das vorstelle, also es ist immer ein bisschen

00:52:51.380 --> 00:52:52.880
gehampelt, die so einzubauen

00:52:52.880 --> 00:52:54.780
das nervt ein bisschen rum

00:52:54.780 --> 00:52:57.180
vor allem, wenn es dann in Containern läuft auch noch oder so

00:52:57.180 --> 00:52:59.480
das ist so ein bisschen anstrengend, das dann einzubinden

00:52:59.480 --> 00:53:01.400
Ja, ich finde das, also bei PyCharm

00:53:01.400 --> 00:53:03.480
zum Beispiel, die letzte Geschichte, die mich da so, man muss dann halt

00:53:03.480 --> 00:53:05.420
so Testroot ist halt irgendwie, also der macht dann halt

00:53:05.420 --> 00:53:07.080
eine Testkonfiguration, wenn man

00:53:07.080 --> 00:53:08.820
einen einzelnen Test ausführt und dann

00:53:08.820 --> 00:53:11.060
so ganz habe ich es auch noch nicht hingekriegt, aber

00:53:11.060 --> 00:53:12.780
dann ist zum Beispiel das

00:53:12.780 --> 00:53:15.180
Working Directory ist halt dann einfach falsch

00:53:15.180 --> 00:53:16.340
oder so und das funktioniert ja nicht mehr.

00:53:16.780 --> 00:53:18.880
Und dann findet er die Datenbank nicht mehr und

00:53:18.880 --> 00:53:21.000
ich erinnere mich daran, dass ich diese Geschichten bei PyCharm

00:53:21.000 --> 00:53:22.760
schon häufiger hatte. Und dann

00:53:22.760 --> 00:53:24.960
war zum Beispiel die Lösung für einen Großteil dieser Probleme

00:53:24.960 --> 00:53:27.000
irgendwie dann auf das Root-Verzeichnis

00:53:27.000 --> 00:53:29.100
irgendwie in der Projektübersicht rechtsklick drauf

00:53:29.100 --> 00:53:30.560
machen und dann sagen, set as test root.

00:53:30.880 --> 00:53:31.480
Und dann hat es funktioniert.

00:53:32.640 --> 00:53:33.000
Okay.

00:53:35.480 --> 00:53:36.720
Naja, also

00:53:36.720 --> 00:53:39.040
solche Sachen halt. Aber das muss man halt

00:53:39.040 --> 00:53:41.020
also, und vorher dachte ich so, naja, das mit den

00:53:41.020 --> 00:53:42.960
Test funktioniert halt einfach nicht richtig. Aber gut,

00:53:43.000 --> 00:53:45.020
es funktioniert schon, wenn man weiß, wie man es konfigurieren muss, aber das ist halt

00:53:45.020 --> 00:53:46.240
manchmal schon ein bisschen...

00:53:46.240 --> 00:53:48.920
Ja, so was ist eigentlich die IDE von selber wissen, dass sie

00:53:48.920 --> 00:53:50.780
erstmal einen Root ausprobiert oder sowas, wenn es gerade nicht geht.

00:53:51.640 --> 00:53:52.260
Ja, keine Ahnung.

00:53:52.800 --> 00:53:55.380
Aber ansonsten

00:53:55.380 --> 00:53:56.940
Palcharm, genau, eine Sache

00:53:56.940 --> 00:53:58.960
auch im Stream, da habe ich dann geflucht

00:53:58.960 --> 00:53:59.500
darüber, dass

00:53:59.500 --> 00:54:02.780
oder nicht geflucht, ich habe gerade gesagt,

00:54:02.960 --> 00:54:04.940
hier verwende ich ja Palcharm auf Intel,

00:54:05.080 --> 00:54:06.980
aber wenn ich jetzt irgendwie auf meinem M1 Mac unterwegs

00:54:06.980 --> 00:54:09.020
bin, dann nehme ich immer VS Code, weil Palcharm

00:54:09.020 --> 00:54:10.780
kann ich da gar nicht verwenden. Das ist einfach zu langsam.

00:54:10.960 --> 00:54:12.540
Ich finde es ja schon auf Intel langsam, aber

00:54:12.540 --> 00:54:15.280
auf ARM

00:54:15.280 --> 00:54:16.060
geht es gar nicht.

00:54:17.160 --> 00:54:19.040
Und es zieht die ganze Zeit Strom wie Hölle.

00:54:19.260 --> 00:54:21.040
Das heißt, eigentlich hat ja so ein

00:54:21.040 --> 00:54:23.400
M1-Mac super Akkulaufzeit,

00:54:23.520 --> 00:54:25.020
aber wenn man Peitschrauben benutzt,

00:54:25.100 --> 00:54:26.900
so wie ich das getan habe, dann halt nicht.

00:54:26.960 --> 00:54:28.020
Dann sagt das den Akku sofort leer.

00:54:28.700 --> 00:54:29.560
Also, nee.

00:54:30.720 --> 00:54:32.000
Deswegen nehme ich den mal wie das Kot.

00:54:32.660 --> 00:54:34.760
Dann kam auch so ein Chat und so,

00:54:34.860 --> 00:54:36.900
bist du ja eigentlich sicher, dass du das

00:54:36.900 --> 00:54:38.400
irgendwie native, dass du

00:54:38.400 --> 00:54:40.260
die für

00:54:40.260 --> 00:54:42.640
ARM-kompilierte Version da nimmst

00:54:42.640 --> 00:54:44.360
irgendwie und nicht die alte

00:54:44.360 --> 00:54:46.480
Intel-basierte, die dann emuliert wird, weil die

00:54:46.480 --> 00:54:48.640
so, oh Mist, ja, ist tatsächlich so

00:54:48.640 --> 00:54:50.120
und dann ein neues PyCharm

00:54:50.120 --> 00:54:51.880
genommen und das ist deutlich besser.

00:54:52.880 --> 00:54:54.300
Also offenbar

00:54:54.300 --> 00:54:55.980
brauchte man da eine

00:54:55.980 --> 00:54:58.300
JVM, die halt für

00:54:58.300 --> 00:55:00.300
ARM-kompiliert ist und nicht die

00:55:00.300 --> 00:55:02.300
für Intel, weil wenn man die nimmt

00:55:02.300 --> 00:55:04.100
und die auf dem M1 emuliert wird,

00:55:04.780 --> 00:55:06.380
dann, also die Emulation funktioniert wohl ganz gut,

00:55:06.380 --> 00:55:08.180
aber wenn man sowas emuliert, dann ist es halt wohl scheiße.

00:55:08.760 --> 00:55:09.900
Okay. Und das, ja,

00:55:10.200 --> 00:55:11.760
War auch so eine Geschichte, die im Stream

00:55:11.760 --> 00:55:13.260
mir jemand im Chat einfach so gesagt hat.

00:55:13.680 --> 00:55:14.160
Voll gut.

00:55:15.840 --> 00:55:17.960
Ja, ähm,

00:55:18.060 --> 00:55:20.060
tja, ähm,

00:55:20.520 --> 00:55:21.700
genau, Security, genau,

00:55:21.760 --> 00:55:23.720
Twitch hatten wir, war sonst noch irgendwas

00:55:23.720 --> 00:55:25.640
mit News? Ne, mir fällt eigentlich, hätte ich gesagt,

00:55:25.720 --> 00:55:27.620
nichts an. Meine Güte, vielleicht liegt es auch einfach

00:55:27.620 --> 00:55:28.880
daran, dass wir so lange nichts mehr gemacht haben.

00:55:30.020 --> 00:55:31.760
Aber News und wir sind bei einer Stunde,

00:55:31.920 --> 00:55:32.440
was ist denn da los?

00:55:32.440 --> 00:55:34.420
Ja, ja, vielleicht, ja.

00:55:35.640 --> 00:55:36.440
Bisschen gequatscht.

00:55:36.700 --> 00:55:38.340
Ja, okay, tja.

00:55:38.820 --> 00:55:40.760
Ja, dann stelle ich jetzt einfach nochmal meine paar doofen Fragen

00:55:40.760 --> 00:55:42.900
und vielleicht fällt dir jetzt sowas ein zu diesem Thema.

00:55:43.140 --> 00:55:44.180
Ja. Und zwar

00:55:44.180 --> 00:55:46.680
ging es halt tatsächlich darum, wenn ich jetzt in Python

00:55:46.680 --> 00:55:49.200
irgendwie

00:55:49.200 --> 00:55:52.520
mehrere Prozesse habe oder sowas,

00:55:52.600 --> 00:55:54.460
oder Threads oder so, ich weiß nicht, ob das einen Unterschied macht.

00:55:54.900 --> 00:55:55.580
Und zwar

00:55:55.580 --> 00:55:58.600
die ich nicht herausstarte

00:55:58.600 --> 00:56:00.080
aus einem Main Thread oder sowas, sondern die

00:56:00.080 --> 00:56:02.020
beispielsweise wie beim Gunicorn

00:56:02.020 --> 00:56:04.680
einfach weggeforkt werden, während er es aufmacht.

00:56:04.740 --> 00:56:06.540
Er macht dann verschiedene Prozesse auf und macht die gleichzeitig

00:56:06.540 --> 00:56:08.500
auf und so. Ich möchte aber überall

00:56:08.500 --> 00:56:10.900
diese Prozesse hinweg einen geteilten Speicherbereich

00:56:10.900 --> 00:56:12.420
haben und da

00:56:12.420 --> 00:56:14.600
irgendwas, am liebsten Python-Objekte reinschreiben

00:56:14.600 --> 00:56:16.600
können mit, weiß ich nicht,

00:56:16.660 --> 00:56:18.480
Funktionen drin oder irgendwas, dass da halt einfach

00:56:18.480 --> 00:56:20.440
genau gecallt werden kann. Wie mache ich das

00:56:20.440 --> 00:56:21.880
am besten? Geht nicht.

00:56:23.960 --> 00:56:24.940
Das würde ich sagen,

00:56:25.040 --> 00:56:25.920
geht tatsächlich nicht.

00:56:26.520 --> 00:56:28.480
Also mit Threads geht's, da ist es halt so,

00:56:28.560 --> 00:56:29.400
die teilen sich halt

00:56:29.400 --> 00:56:31.920
einen Adressraum und

00:56:31.920 --> 00:56:33.460
einen Speicher,

00:56:34.520 --> 00:56:36.280
aber das ist eigentlich der Hauptunterschied zwischen

00:56:36.280 --> 00:56:38.480
Threads und Prozessen, so was Betriebs

00:56:38.480 --> 00:56:40.060
auf der Betriebssystem-Ebene.

00:56:40.940 --> 00:56:41.920
Also Threads

00:56:41.920 --> 00:56:44.600
laufen halt im gleichen Prozess und haben

00:56:44.600 --> 00:56:45.400
den gleichen Hauptspeicher.

00:56:46.540 --> 00:56:48.540
Und Prozesse sind halt komplett voneinander getrennt,

00:56:48.660 --> 00:56:50.620
können ja gegenseitig nicht

00:56:50.620 --> 00:56:52.640
auf Sachen zugreifen und auch, also sind komplett,

00:56:52.960 --> 00:56:55.380
da braucht man dann halt so Interprozess-Kommunikations-

00:56:55.380 --> 00:56:56.640
Geschichten, um halt zwischen den Prozessen

00:56:56.640 --> 00:56:58.700
zu kommunizieren. Also das heißt, das geht tatsächlich gar nicht

00:56:58.700 --> 00:57:00.560
aus Python heraus, das heißt, ich muss irgendwie

00:57:00.560 --> 00:57:02.700
was Externes nehmen, wie ein Memcached-Diridis

00:57:02.700 --> 00:57:04.880
oder sonst irgendwas, also eine quasi Art von Datenbank

00:57:04.880 --> 00:57:06.740
im Speicher, die dann extra läuft

00:57:06.740 --> 00:57:08.760
und auf die ich dann von allen diesen Prozessen

00:57:08.760 --> 00:57:10.440
irgendwie einen Zugriff bekomme über

00:57:10.440 --> 00:57:12.140
URL oder irgendwas.

00:57:12.420 --> 00:57:14.460
Ja, also, oder was auch immer.

00:57:14.600 --> 00:57:16.560
Es muss ja nicht irgendwie jetzt ein Redis

00:57:16.560 --> 00:57:18.760
oder ein Merkle-Studio sein oder es kann auch eine Datenbank

00:57:18.760 --> 00:57:20.860
sein oder es kann halt ein File sein

00:57:20.860 --> 00:57:22.840
oder es kann halt eine Pipe sein oder

00:57:22.840 --> 00:57:24.820
Ja, das habe ich auch überlegt. Also kann man

00:57:24.820 --> 00:57:26.500
aus weißem Nachweis einfach eine File in Memory aufmachen,

00:57:26.580 --> 00:57:28.260
auf die dann alle Prozesse zugriff haben? Nein, auch nicht wahrscheinlich.

00:57:28.740 --> 00:57:30.500
Doch, klar, das kann man schon machen.

00:57:30.740 --> 00:57:32.600
In Memory? In Memory. Warum

00:57:32.600 --> 00:57:34.720
in Memory? Ja, weil ich will ja nicht I.O. machen

00:57:34.720 --> 00:57:36.720
auf der Platte, weil ich will ja genau diesen Speed

00:57:36.720 --> 00:57:38.660
halt nicht verlieren, denn...

00:57:38.660 --> 00:57:40.740
Naja, du kannst auch Shared Memory, das geht

00:57:40.740 --> 00:57:42.080
auch, aber die Frage wäre halt,

00:57:44.020 --> 00:57:44.760
nein, aber das,

00:57:45.100 --> 00:57:46.680
du musst ja sowieso, also dein

00:57:46.680 --> 00:57:48.320
Bottleneck wird dann ja eh die

00:57:48.320 --> 00:57:49.960
Serialisierung und Deserialisierung sein.

00:57:50.220 --> 00:57:52.540
Aber das heißt, also okay, das war nämlich genau nochmal die nächste

00:57:52.540 --> 00:57:54.540
Frage, ich muss quasi meine Objekte immer

00:57:54.540 --> 00:57:55.860
serialisieren, deserialisieren,

00:57:56.000 --> 00:57:58.680
weil ich nicht darum rumkomme, weil ich nur als

00:57:58.680 --> 00:58:00.500
irgendwie in Bytes oder so in den Speicher

00:58:00.500 --> 00:58:02.420
schreiben kann dann. Genau, du musst halt das irgendwie

00:58:02.420 --> 00:58:04.440
in eine Form bringen, die man halt irgendwo hinschreiben kann, genau.

00:58:05.440 --> 00:58:05.580
Ja.

00:58:06.200 --> 00:58:08.320
Ja, und dann hatte ich die tolle Idee, das dann zu picken.

00:58:08.420 --> 00:58:09.600
Dann sagte Jochen, oh, oh, oh, oh.

00:58:09.980 --> 00:58:12.620
Kann man machen, ist aber, ja.

00:58:13.380 --> 00:58:13.620
Ja.

00:58:15.040 --> 00:58:15.400
Ja.

00:58:16.100 --> 00:58:18.140
Ja, also Jochen hat gesagt, das wäre keine gute Idee,

00:58:18.240 --> 00:58:21.060
weil man könnte ja dann da, wenn man diesen Speicherbereich kontrolliert,

00:58:21.500 --> 00:58:23.160
da was reinschreiben, dann wird es einfach so realisiert

00:58:23.160 --> 00:58:24.480
und dann macht es bumm.

00:58:24.480 --> 00:58:24.820
Ja, genau.

00:58:24.980 --> 00:58:28.620
Also Sachen ausentpickeln ist halt quasi das Gleiche wie Code ausführen.

00:58:28.920 --> 00:58:29.900
Also daher muss man da ein bisschen,

00:58:30.160 --> 00:58:32.660
gibt es auch tatsächlich Sicherheitslücken,

00:58:32.760 --> 00:58:35.000
die große Seiten, ich weiß nicht, welche das war,

00:58:35.560 --> 00:58:36.720
Das war auch irgendein Contest.

00:58:37.160 --> 00:58:38.880
Ich habe es wieder vergessen, welche Seite das war.

00:58:38.960 --> 00:58:40.720
Das war eine von den ganz großen,

00:58:41.820 --> 00:58:43.800
die, wo jemand so reingekommen ist.

00:58:43.880 --> 00:58:44.640
Über Django, auch Django.

00:58:45.140 --> 00:58:47.100
Und da, die hatten irgendwie auch,

00:58:47.260 --> 00:58:49.140
ich weiß nicht, Memcached oder Redis benutzt.

00:58:50.100 --> 00:58:50.760
Und da auch,

00:58:51.080 --> 00:58:53.420
die hatten gepickelte Sachen in User-Cookings abgelegt.

00:58:54.740 --> 00:58:55.180
Und

00:58:55.180 --> 00:58:57.480
das war noch nicht das Problem.

00:58:57.580 --> 00:58:58.600
Und man konnte durch irgendeinen Trick,

00:58:58.600 --> 00:59:00.380
konnte man halt den Kram irgendwie

00:59:00.380 --> 00:59:02.460
in den Memcached bringen und dann da

00:59:02.460 --> 00:59:04.400
den Applikations-Server dazu bringen,

00:59:04.480 --> 00:59:06.420
das dann halt zu entpickeln und dann

00:59:06.420 --> 00:59:10.340
sind da Leute so da

00:59:10.340 --> 00:59:12.120
reingekommen. Also ja,

00:59:12.280 --> 00:59:14.340
das ist problematisch.

00:59:14.500 --> 00:59:16.180
Also wenn die Users

00:59:16.180 --> 00:59:18.420
es schaffen, irgendwie deiner Applikation

00:59:18.420 --> 00:59:20.340
was Gepickeltes zu geben, wo sie Kontrolle drüber hatten,

00:59:20.480 --> 00:59:22.140
dann ja. Oder es war

00:59:22.140 --> 00:59:24.300
auch irgendwie signiert oder so

00:59:24.300 --> 00:59:26.520
und an der Signatur war irgendwas kaputt, ich weiß es nicht genau.

00:59:27.200 --> 00:59:28.300
Aber ja.

00:59:28.300 --> 00:59:30.260
Also das ist theoretisch, wenn ich das auf meinem eigenen

00:59:30.260 --> 00:59:32.300
Server laufe, also wenn einer da schon

00:59:32.300 --> 00:59:33.260
drin ist, dann hat der eh schon Root.

00:59:33.780 --> 00:59:35.800
Ja, aber das ist ja dann zusätzlich, also das ist ja,

00:59:35.880 --> 00:59:37.540
aber das ist ja, vielleicht gibt es ja irgendeine,

00:59:37.660 --> 00:59:39.780
ich meine, wie kommen die Daten da rein, ja, also

00:59:39.780 --> 00:59:42.280
wenn jemand

00:59:42.280 --> 00:59:44.040
quasi, vielleicht hat ja jemand

00:59:44.040 --> 00:59:46.080
dann nur Zugriff auf irgendein, ist irgendwo

00:59:46.080 --> 00:59:47.760
reingekommen über, weiß nicht, der läuft vielleicht auch

00:59:47.760 --> 00:59:50.020
irgendwelche anderen Services und kann halt nur

00:59:50.020 --> 00:59:51.840
eine Netzverbindung aufmachen, ja, und dann

00:59:51.840 --> 00:59:53.880
lauscht da aber dann ein Memcached

00:59:53.880 --> 00:59:55.820
und dann kann er da was reinlegen und dann

00:59:55.820 --> 00:59:57.540
wird das ausgeführt, also

00:59:57.540 --> 00:59:59.980
es ist halt, ja, die Frage

00:59:59.980 --> 01:00:01.100
ist, will man Leuten

01:00:01.100 --> 01:00:03.080
dadurch

01:00:03.080 --> 01:00:05.160
also ich meine,

01:00:05.700 --> 01:00:07.780
sowas wird wahrscheinlich nicht ausgenutzt, wenn man da irgendwie

01:00:07.780 --> 01:00:09.360
eine kleine Geschichte selber hat, aber

01:00:09.360 --> 01:00:12.060
überhaupt, dass es

01:00:12.060 --> 01:00:13.680
die Möglichkeit gibt, dass man

01:00:13.680 --> 01:00:15.640
dadurch, dass man an irgendeinem Port irgendwas hinschreibt,

01:00:15.780 --> 01:00:18.000
dadurch dein Code in deiner Applikation ausführt, ist halt schon so

01:00:18.000 --> 01:00:19.880
will man wahrscheinlich nicht.

01:00:20.260 --> 01:00:21.940
Ja, also ich weiß halt, wie das sonst

01:00:21.940 --> 01:00:24.060
gehen könnte, da muss man sich halt eine andere Lösung

01:00:24.060 --> 01:00:24.480
für überlegen.

01:00:26.740 --> 01:00:27.940
Also mein Anwendungszweck

01:00:27.940 --> 01:00:29.580
ist eigentlich nur, dass ich tatsächlich über verschiedene

01:00:29.580 --> 01:00:31.560
Candy-Con-Worker-Prozesse Zugriff auf ein gemeinsames

01:00:31.560 --> 01:00:33.520
Stickt haben wollen würde, dass ich halt so Dinge

01:00:33.520 --> 01:00:35.460
abblicken kann. Ja, aber warum nicht, also

01:00:35.460 --> 01:00:37.360
jetzt meine Standard-File,

01:00:37.440 --> 01:00:39.540
warum nicht einfach eine Datenbank nehmen? Ich meine, dafür ist Datenbank

01:00:39.540 --> 01:00:41.400
eigentlich da. Ja, weil es halt zum Beispiel keine gibt oder

01:00:41.400 --> 01:00:43.380
halt, dass du eine SQLite hast, die halt dann schon weg ist und so. Achso,

01:00:43.420 --> 01:00:44.900
wenn du keine Datenbank hast, ja.

01:00:45.880 --> 01:00:46.700
Warum nicht einen File nehmen?

01:00:47.960 --> 01:00:48.300
Zu langsam?

01:00:49.360 --> 01:00:51.120
Wieso ist das langsam? Muss ja nicht langsam sein.

01:00:51.880 --> 01:00:52.820
Also ja, natürlich ist das

01:00:52.820 --> 01:00:54.680
eventuell langsam, aber

01:00:54.680 --> 01:00:57.660
kommt jetzt auf deine Daten an. Gut, aber theoretisch

01:00:57.660 --> 01:00:59.380
könnte, wenn dann jemand durch das File hat, kann er auch

01:00:59.380 --> 01:01:01.500
alles Mögliche reinschreiben. Ja, gepickelte

01:01:01.500 --> 01:01:02.380
Sachen darf man da nicht reinschreiben.

01:01:02.460 --> 01:01:04.840
Ja, aber das ist ja genau dasselbe Problem dann.

01:01:07.100 --> 01:01:07.880
Also mein Problem, ja.

01:01:08.380 --> 01:01:12.140
Aber warum möchtest du gepickelte Sachen abspeichern?

01:01:13.440 --> 01:01:14.780
Um sie später zu verwenden.

01:01:14.920 --> 01:01:16.560
Also weil ich zum Beispiel, ich habe bestimmte Routinen,

01:01:16.640 --> 01:01:18.880
die ich ausführen möchte mit Argumenten und so weiter,

01:01:19.420 --> 01:01:20.360
die quasi schon feststehen,

01:01:20.420 --> 01:01:23.220
aber die zu einem späteren Zeitpunkt laufen.

01:01:23.220 --> 01:01:25.220
Ja, aber du kannst ja sozusagen durchaus sagen,

01:01:25.880 --> 01:01:27.260
ruf die Funktion mit den Parametern auf.

01:01:27.400 --> 01:01:28.580
Die Parameter kannst du ja schon,

01:01:28.820 --> 01:01:30.620
vielleicht irgendwie je nachdem, was das ist.

01:01:30.860 --> 01:01:35.380
Ja, aber du kannst aber auch

01:01:35.380 --> 01:01:37.540
den Namen von der Funktion einfach speichern.

01:01:37.640 --> 01:01:39.000
Ja, kann ich das? Das kannst du machen.

01:01:39.260 --> 01:01:40.880
Ja, okay. Und wie kriege ich die dann rausgepult?

01:01:40.980 --> 01:01:41.880
Muss ich nochmal kurz überlegen.

01:01:42.820 --> 01:01:44.700
Ja, ja, das ist dann halt nicht mehr so einfach, dass man einfach sagt

01:01:44.700 --> 01:01:47.160
JSON dumps und loads.

01:01:47.780 --> 01:01:49.000
Sondern da muss man das halt selber wieder

01:01:49.000 --> 01:01:51.340
sich daraus ein Objekt zusammenbauen. Aber das kann man ja auch machen.

01:01:51.620 --> 01:01:52.920
Das heißt, ich muss, aber wie baue ich dann

01:01:52.920 --> 01:01:54.340
den Pfad zu dieser Funktion zusammen?

01:01:54.340 --> 01:01:55.160
Den muss ich dann irgendwie

01:01:55.160 --> 01:01:58.380
später von spontan ein, wie das geht.

01:01:58.500 --> 01:02:00.400
Keine Ahnung, ich habe jetzt Pfad zu meiner

01:02:00.400 --> 01:02:03.580
Setzapplikation.functions.fuba

01:02:03.580 --> 01:02:05.240
Ja, kannst du einfach

01:02:05.240 --> 01:02:05.940
den Vater reinschreiben.

01:02:06.940 --> 01:02:08.220
Den Vater der Funktion, tatsächlich.

01:02:08.460 --> 01:02:10.420
Dann machst du mit importlib

01:02:10.420 --> 01:02:12.280
importierst du das Ding dann.

01:02:13.200 --> 01:02:14.020
Mit importlib.

01:02:15.220 --> 01:02:16.180
Relativ oder absolut?

01:02:17.100 --> 01:02:17.820
Ist das egal?

01:02:20.100 --> 01:02:21.220
Ja, weiß ich nicht.

01:02:21.340 --> 01:02:23.300
Wahrscheinlich ist absolut so ein bisschen

01:02:23.300 --> 01:02:25.180
also ja, kommt drauf an,

01:02:25.180 --> 01:02:25.460
wo das

01:02:25.460 --> 01:02:29.340
wahrscheinlich wird man es absolut zum Paket halt

01:02:29.340 --> 01:02:31.700
Ja, das muss ich mal probieren.

01:02:32.040 --> 01:02:33.600
Weil vielleicht wäre das tatsächlich, also da den Namen

01:02:33.600 --> 01:02:35.060
anscheinend der Callable zu nehmen, eine Rettung.

01:02:35.460 --> 01:02:37.220
Dann hätte ich halt nur noch Argumente, aber

01:02:37.220 --> 01:02:39.260
gut, die dürfen dann halt...

01:02:39.260 --> 01:02:41.300
Die Frage ist, wie viele unterschiedliche Sachen können das denn sein?

01:02:42.620 --> 01:02:43.720
Kann man da nicht, das ist sowieso

01:02:43.720 --> 01:02:45.400
irgendwie eher in so einem Lookup, dann

01:02:45.400 --> 01:02:47.460
nimmst du halt irgendeinen Namen, völlig egal, den musst du nicht über

01:02:47.460 --> 01:02:49.480
Import machen, das will ich gerade auch, das ist

01:02:49.480 --> 01:02:51.380
vielleicht nicht so eine schlaue Idee, sondern

01:02:51.380 --> 01:02:53.440
du hast halt irgendwo einen Dikt, wo die ganzen

01:02:53.440 --> 01:02:55.440
Funktionen drin liegen, das halt irgendwie

01:02:55.440 --> 01:02:57.440
mal initialisierst und dann musst du nur noch deine Funktionen

01:02:57.440 --> 01:02:59.380
halt, du hast sozusagen

01:02:59.380 --> 01:03:00.800
eine Registry für diese Funktion.

01:03:01.480 --> 01:03:03.260
Okay, ja, das Problem ist halt, dass wenn

01:03:03.260 --> 01:03:05.240
jemand halt jetzt, also es geht halt

01:03:05.240 --> 01:03:07.200
um so eine Event-Queue, ja, wenn jemand halt

01:03:07.200 --> 01:03:09.280
jetzt neue Events anlegen möchte, die er halt quasi

01:03:09.280 --> 01:03:11.360
dann einfach über so einen Dekorator subscriben

01:03:11.360 --> 01:03:13.140
kann auf irgendeinen

01:03:13.140 --> 01:03:15.400
Typ, den er sich da selber quasi aussuchen kann,

01:03:15.960 --> 01:03:17.280
indem er das da subscribt, weil halt

01:03:17.280 --> 01:03:18.680
der Typ nicht so nicht gibt, wird einfach erstellt,

01:03:19.220 --> 01:03:21.140
dann müsste man ja quasi diese

01:03:21.140 --> 01:03:22.420
Funktion, die ja dann,

01:03:23.160 --> 01:03:24.180
also ein Event ist,

01:03:24.700 --> 01:03:27.120
dann auch registrieren. Und wenn derjenige

01:03:27.120 --> 01:03:29.220
das vergisst, dann funktioniert es halt nicht. Und das ist halt so ein bisschen nervig,

01:03:29.300 --> 01:03:31.220
weil es halt an zwei Stellen

01:03:31.220 --> 01:03:33.100
das dann halt überprüft werden muss.

01:03:33.220 --> 01:03:34.860
Da kann er halt nicht irgendein Event erstellen und das dann einfach

01:03:34.860 --> 01:03:36.960
registrieren und dann einen Händler für nehmen, sondern

01:03:36.960 --> 01:03:39.060
er muss sich halt an der Stelle an die Registrierung wenden und das

01:03:39.060 --> 01:03:40.080
muss er halt händisch machen.

01:03:40.980 --> 01:03:43.060
Das hätte ich mir halt gerne gespart, weil es halt bestimmte

01:03:43.060 --> 01:03:45.380
Entwickler gibt, die das verstehen oder nicht verstehen,

01:03:45.680 --> 01:03:47.160
aber denen vielleicht einfach eine Methode

01:03:47.160 --> 01:03:48.040
schreiben können, die dann irgendwas macht.

01:03:49.180 --> 01:03:50.600
Naja gut, aber du kannst ja auch

01:03:50.600 --> 01:03:52.060
irgendwie

01:03:52.060 --> 01:03:55.040
überlegen, wie man die Funktion

01:03:55.040 --> 01:03:56.540
adressiert sozusagen und dann

01:03:56.540 --> 01:03:58.640
das kannst du ja dann selber machen.

01:04:00.160 --> 01:04:00.920
Naja gut, ich

01:04:00.920 --> 01:04:02.820
überlege halt was, also ich glaube

01:04:02.820 --> 01:04:04.380
dieses Pickeln ist halt an der Stelle quasi die

01:04:04.380 --> 01:04:06.560
einfachere Lösung. Ja, aber

01:04:06.560 --> 01:04:08.180
das weiß ich nicht, also Pickel

01:04:08.180 --> 01:04:10.820
Aber die Frage ist halt, wo es halt geht,

01:04:10.900 --> 01:04:12.740
ob es halt nur über so ein Main-Cache-Dee geht oder so ein

01:04:12.740 --> 01:04:14.380
Redis geht oder halt noch eine andere

01:04:14.380 --> 01:04:15.820
Variante geht, die irgendwie

01:04:15.820 --> 01:04:18.580
einfacher ist. Kann man

01:04:18.580 --> 01:04:20.580
aus Python raus einfach so ein Chat-Memory außerhalb

01:04:20.580 --> 01:04:22.140
aufmachen oder geht das nur mit sowas wie

01:04:22.140 --> 01:04:24.660
Main-Cache-Dee und Redis? Gibt es im Python-Modul

01:04:24.660 --> 01:04:27.700
man kann das schon machen, aber ich weiß

01:04:27.700 --> 01:04:29.060
nicht, ob das empfehlenswert wäre, weil

01:04:29.060 --> 01:04:31.680
du musst ja irgendwie auch darauf zugreifen

01:04:31.680 --> 01:04:32.300
und

01:04:32.300 --> 01:04:35.520
das dafür bietet

01:04:35.520 --> 01:04:37.160
ja sowohl mit dem KGD, auch

01:04:37.160 --> 01:04:39.240
redest du Dinge an und wenn du das selber machst,

01:04:39.340 --> 01:04:41.480
schwierig, weil was ist, wenn dann

01:04:41.480 --> 01:04:43.220
der Applikationsserver jetzt

01:04:43.220 --> 01:04:45.160
einen Prozess läuft, jetzt auf dem anderen Rechner, dann ist das

01:04:45.160 --> 01:04:46.000
auch wieder ein Problem.

01:04:47.660 --> 01:04:49.440
Also ich, also gut,

01:04:49.560 --> 01:04:51.220
ich meine, klar, natürlich die Abhängigkeiten

01:04:51.220 --> 01:04:51.900
sind halt blöd,

01:04:53.120 --> 01:04:55.400
jetzt dann deswegen noch ein zusätzliches

01:04:55.400 --> 01:04:56.360
Redis braucht oder so.

01:04:57.400 --> 01:04:59.340
Das ist halt die Frage, ob es nicht schon irgendwas gibt, was man schon hat.

01:04:59.400 --> 01:05:01.460
Eine Datenbank oder ein Redis

01:05:01.460 --> 01:05:02.400
oder ein Bank-Hashtag.

01:05:03.160 --> 01:05:05.200
Ja, das ist auch die Frage, ob man halt, wenn man Projekte voneinander

01:05:05.200 --> 01:05:06.360
isoliert aufbaut, ob man dann

01:05:06.360 --> 01:05:09.420
ja, eigentlich

01:05:09.420 --> 01:05:11.120
müsste man die Sachen dezentral voneinander betreiben.

01:05:11.260 --> 01:05:12.840
Aber das ist halt dann wieder so ein Problem, dann

01:05:12.840 --> 01:05:15.100
ganze, mit Deployment,

01:05:15.160 --> 01:05:17.060
ganze Deployments zu machen, die vollständig sind und so.

01:05:17.820 --> 01:05:19.200
Die dann jeweils unanhängig voneinander sind

01:05:19.200 --> 01:05:21.500
und dann nicht erwarten, dass schon irgendwo anders so ein Redis rumliegt

01:05:21.500 --> 01:05:23.460
oder so, und dann neue Verbindungen aufmachen,

01:05:23.540 --> 01:05:25.320
neuen Redis-Nutzer mit neuem Ausländer-WC

01:05:25.320 --> 01:05:27.360
und bla bla bla. Das ist halt alles relativ

01:05:27.360 --> 01:05:29.300
aufwendig für so kleine Sachen, dass man irgendwo mal kurz

01:05:29.300 --> 01:05:30.900
so zwei Kies im Dikt ablegen will.

01:05:31.440 --> 01:05:32.320
Dafür halt so ein Rattenschwanz.

01:05:32.320 --> 01:05:34.420
Dann wäre halt die Frage, wozu brauchst du denn dann mehrere Prozesse?

01:05:35.060 --> 01:05:36.420
Ja, gut, aber das

01:05:36.420 --> 01:05:38.360
liegt halt nur daran, dass der Ganykorn da so ein bisschen

01:05:38.360 --> 01:05:40.500
mehr Power kriegen soll. Wenn man jetzt dem Ganykorn

01:05:40.500 --> 01:05:42.540
sagt, du brauchst noch einen Worker, dann reicht's ja halt.

01:05:44.600 --> 01:05:46.280
Ich hatte irgendwo bei StackOverflow mal

01:05:46.280 --> 01:05:48.140
so eine Antwort gesehen, da hat der Preload gemacht, dann hat der

01:05:48.140 --> 01:05:49.640
erst die Applikation geladen und dann die Worker.

01:05:49.980 --> 01:05:51.340
Wozu brauchst du denn da mehrere Prozesse?

01:05:51.500 --> 01:05:54.020
Das ist nochmal die Frage, warum mehrere Prozesse

01:05:54.020 --> 01:05:54.440
an der Stelle?

01:05:55.400 --> 01:05:56.840
Kennecon macht Worker-Prozesse auf.

01:05:57.040 --> 01:05:59.880
Ja, aber das heißt, das müsste man halt dann

01:05:59.880 --> 01:06:02.060
als harte Restriktion haben, das geht halt nur mit einem Worker-Prozess.

01:06:02.520 --> 01:06:03.540
Und man hat da dann unerwartete

01:06:03.540 --> 01:06:06.300
Seiten-Effekte, wenn das jemand macht.

01:06:06.300 --> 01:06:08.040
Ja, genau, dann stehst du halt danach

01:06:08.040 --> 01:06:09.440
und dann funktioniert das halt nicht mehr so richtig.

01:06:11.440 --> 01:06:11.640
Ja.

01:06:12.480 --> 01:06:13.080
Ja, das stimmt.

01:06:13.680 --> 01:06:15.760
Nun, die Frage ist, ob man halt so ein Workaround hat für solche Fälle.

01:06:16.180 --> 01:06:18.000
Aber es geht ja eigentlich für alle Dinge, die halt irgendwie

01:06:18.000 --> 01:06:19.860
einzelne Instanzen haben. Also du hast irgendwie von irgendwas

01:06:19.860 --> 01:06:21.980
so ein Singleton-Pattern oder sowas

01:06:21.980 --> 01:06:24.060
auf irgendeiner Klasse oder so und das ist ja immer das Problem,

01:06:24.140 --> 01:06:25.820
dass es halt bei so einem Forken in so einem

01:06:25.820 --> 01:06:27.620
Web-Applikations-Server-Prozess

01:06:27.620 --> 01:06:29.880
nicht mehr so wirklich

01:06:29.880 --> 01:06:30.960
identitär ist.

01:06:31.960 --> 01:06:33.980
Okay, aber ich würde sagen, das braucht man ja ganz

01:06:33.980 --> 01:06:35.000
ganz selten oder sowas.

01:06:36.460 --> 01:06:37.900
Ich bin ja in der letzten

01:06:37.900 --> 01:06:39.360
Heimat schon zweimal drüber gestolpert.

01:06:41.180 --> 01:06:42.060
Meine Vermutung wäre

01:06:42.060 --> 01:06:44.060
oft, dann ist irgendwas an dem Problem nicht richtig

01:06:44.060 --> 01:06:45.240
oder an der Lösung.

01:06:46.320 --> 01:06:48.180
Weil wenn das

01:06:48.180 --> 01:06:49.960
die Lösung für das Problem ist, dann ist wahrscheinlich

01:06:49.960 --> 01:06:52.460
hat man das Problem nicht richtig verstanden

01:06:52.460 --> 01:06:54.180
oder vielleicht ist, ich weiß es nicht genau,

01:06:54.380 --> 01:06:56.220
aber das gibt es echt fast nie.

01:06:57.280 --> 01:06:58.240
Ja, also als Beispiel

01:06:58.240 --> 01:07:00.380
darf es nur eine offene

01:07:00.380 --> 01:07:02.300
Verbindung zu irgendeinem anderen

01:07:02.300 --> 01:07:04.220
Rechner geben, weil er nicht mehr als eine gleichzeitig

01:07:04.220 --> 01:07:05.260
offene Verbindung akzeptiert.

01:07:06.560 --> 01:07:08.320
So, und dann könnte man jetzt irgendwie Verbindungen

01:07:08.320 --> 01:07:08.820
durchreichen

01:07:08.820 --> 01:07:12.120
und die halt von mehreren Prozessen

01:07:12.120 --> 01:07:12.740
trotzdem nutzen,

01:07:14.120 --> 01:07:15.960
wenn man die nicht gleichzeitig nutzt. Zum Beispiel, wenn er halt dann irgendwie

01:07:15.960 --> 01:07:18.040
einen Lock drauf hat und an der anderen Stelle dann vom anderen Prozess

01:07:18.040 --> 01:07:19.620
halt wartet, bis dieses Log wieder freigegeben ist.

01:07:19.920 --> 01:07:21.300
Ja, aber das passiert doch automatisch.

01:07:22.400 --> 01:07:23.960
Mit dem Log, ja. Nein, nein, ich meine, wenn du

01:07:23.960 --> 01:07:25.920
ja, wenn du von der Meldung zu irgendwas ausbaust,

01:07:26.000 --> 01:07:27.840
was nur eine zulässt, dann musst du halt warten.

01:07:28.340 --> 01:07:30.240
Genau, aber das geht halt von den Prozessen

01:07:30.240 --> 01:07:31.920
her nicht. Also wenn du da verschiedene

01:07:31.920 --> 01:07:33.900
Prozesse gleichzeitig das machen,

01:07:33.980 --> 01:07:35.940
zum Beispiel, dann gibt es halt einen Exception, bumm,

01:07:35.980 --> 01:07:38.040
geht nicht. Das heißt, du musst das

01:07:38.040 --> 01:07:39.380
halt irgendwie managen. Das heißt, du musst halt diesen,

01:07:39.820 --> 01:07:42.000
also nicht nur diesen State irgendwie dann abwarten und dann

01:07:42.000 --> 01:07:44.100
wieder versuchen, sondern eigentlich willst du

01:07:44.100 --> 01:07:45.320
ja quasi dieses Objekt dann

01:07:45.320 --> 01:07:48.020
durchreichen. Ich habe das Problem

01:07:48.020 --> 01:07:49.400
glaube ich noch nicht so wirklich verstanden,

01:07:49.720 --> 01:07:52.000
weil ich meine, ja, also ich meine,

01:07:52.080 --> 01:07:54.220
das ist ja, wie willst du

01:07:54.220 --> 01:07:55.460
das denn lösen? Das kannst du ja gar nicht lösen.

01:07:55.560 --> 01:07:57.820
Ja, warum? Also so ein Zugangstoken zum Beispiel,

01:07:58.100 --> 01:07:59.920
den ich ja dafür brauche, den will ich ja nicht unbedingt

01:07:59.920 --> 01:08:01.440
jedes Mal irgendwo reinschreiben.

01:08:02.520 --> 01:08:04.160
Außer vielleicht in so eine Platte.

01:08:04.240 --> 01:08:05.660
Und dann die Frage ist, schreibe ich die halt in Redis rein,

01:08:06.040 --> 01:08:08.100
hole mir den immer wieder ab, gucke halt, ob der da ist. Wenn es nicht da ist,

01:08:08.120 --> 01:08:08.880
dann hole ich mir einen neuen oder so.

01:08:10.300 --> 01:08:11.160
Benutze ich den halt immer wieder.

01:08:13.160 --> 01:08:13.580
Weiß nicht.

01:08:13.920 --> 01:08:15.980
Das ist halt so ein Prozessding. Also wie komme ich denn

01:08:15.980 --> 01:08:17.840
da sonst dran? Ohne, dass ich dann jedes Mal

01:08:17.840 --> 01:08:18.660
wieder neue Nachfrage.

01:08:24.220 --> 01:08:25.860
Wieso muss das denn geteilt werden?

01:08:26.860 --> 01:08:27.600
Also ich würde sagen,

01:08:27.800 --> 01:08:29.480
wenn du keins hast, dann holst du das halt.

01:08:30.200 --> 01:08:31.960
Genau, aber das würde jetzt heißen, ich habe jetzt mehrere Prozesse

01:08:31.960 --> 01:08:33.500
und ich habe halt den Zugangstoken und

01:08:33.500 --> 01:08:35.740
beispielsweise darf man Zugangstoken nur alle so

01:08:35.740 --> 01:08:37.740
und so vier Sekunden holen oder so, sonst

01:08:37.740 --> 01:08:40.080
kriegt man keinen mehr oder wird geblockt.

01:08:40.080 --> 01:08:42.040
Dann gibt es halt so komische Antwortserver,

01:08:42.140 --> 01:08:43.960
die sowas machen. Das ist halt irgendwo zentralhändig.

01:08:44.260 --> 01:08:46.000
Genau, ja, das Problem,

01:08:46.200 --> 01:08:47.820
daran stehen wir jetzt. Was aber auch

01:08:47.820 --> 01:08:49.980
was aber auch blöd ist, ne, das willst du ja auch nicht.

01:08:50.040 --> 01:08:51.440
Ja, genau. Sondern das willst du halt, aber

01:08:51.440 --> 01:08:53.040
ist das nicht eher ein Deployment-Problem?

01:08:53.540 --> 01:08:55.840
Nee. Weil ich würde ja sagen, wo

01:08:55.840 --> 01:08:57.760
gehören solche Sachen eigentlich hin? Solche Sachen gehören

01:08:57.760 --> 01:08:59.800
eigentlich in die Umgebungsvariablen von dem Prozess.

01:08:59.880 --> 01:09:01.620
Ja, aber die kenne ich ja noch nicht und ich kann ja nicht das

01:09:01.620 --> 01:09:03.660
also im Deployment dann ablegen, wenn der halt nach

01:09:03.660 --> 01:09:04.880
10 Minuten wieder ausläuft, das ist ja krass.

01:09:05.400 --> 01:09:07.540
Also ich darf halt nur alle irgendwie 5 Minuten

01:09:07.540 --> 01:09:09.320
fragen, aber nach einer Stunde ist er halt wieder weg.

01:09:10.280 --> 01:09:11.580
Oder so. Und das ist halt blöd, weil ich brauche

01:09:11.580 --> 01:09:13.600
halt alle 2 Sekunden und das ist ja okay, wenn ich

01:09:13.600 --> 01:09:15.360
mir einmal eine Stunde eine holen kann

01:09:15.360 --> 01:09:17.500
und dann kann ich halt für eine Stunde benutzen, dann ist das okay, aber

01:09:17.820 --> 01:09:20.520
von den verschiedenen Prozessen der Anwendung, die parallel laufen.

01:09:20.520 --> 01:09:24.520
Gleichzeitig diese, die sind hier halt haben und dann die muss ich irgendwie teilen.

01:09:24.520 --> 01:09:27.420
Also klar, ich könnte lokal eine Fall schreiben, was auch nicht so eine gute Idee ist,

01:09:27.420 --> 01:09:29.520
wenn irgendjemand da auch die Fall System zugreifen kann.

01:09:29.520 --> 01:09:31.220
Das heißt, ich muss den eigentlich irgendwo den Speicher legen,

01:09:31.220 --> 01:09:33.820
der geteilt ist über alle Prozesse hinweg.

01:09:33.820 --> 01:09:36.720
Also eigentlich ist das ja nichts, was du irgendwo hin speichern willst.

01:09:36.720 --> 01:09:39.320
Ja, also eigentlich dann doch nur in die Datenbank oder so ist halt nicht.

01:09:39.320 --> 01:09:41.220
Aber ja, genau, aber die ist halt wenigstens ein bisschen

01:09:41.220 --> 01:09:42.700
ein bisschen verschlüsselt, also wenigstens so ein bisschen

01:09:42.700 --> 01:09:45.260
noch so ein Layer drumherum. Ja, oder halt

01:09:45.260 --> 01:09:47.260
dann in so einem geteilten Memory-Bereich.

01:09:47.320 --> 01:09:49.060
Und da ist halt die Frage, wie das dann aussieht, wenn du sagst, okay,

01:09:49.620 --> 01:09:51.100
ich finde die Idee gar nicht so falsch, dass es von

01:09:51.100 --> 01:09:52.780
verschiedenen Prozessen ja auf verschiedenen Rechnern liegen können,

01:09:53.200 --> 01:09:55.340
dann müsste das ja von

01:09:55.340 --> 01:09:57.280
sowas wie einem Redis oder einem Cached oder so

01:09:57.280 --> 01:09:59.260
rausgegeben werden, weil das

01:09:59.260 --> 01:10:01.280
ja quasi auch nur die geteilte Key-Value-Store ist,

01:10:01.380 --> 01:10:02.360
der dann das so irgendwie hergibt.

01:10:03.820 --> 01:10:05.260
Aber in Python gibt es halt so eine Möglichkeit

01:10:05.260 --> 01:10:06.580
nicht, okay, dann habe ich nicht...

01:10:06.580 --> 01:10:09.100
Ja, aber ich glaube nicht,

01:10:09.100 --> 01:10:10.500
dass das etwas ist, was man...

01:10:10.500 --> 01:10:12.380
Also, ja, ich meine, das klingt jetzt blöd,

01:10:12.460 --> 01:10:13.600
weil das natürlich dann ein Problem nicht löst,

01:10:13.660 --> 01:10:15.760
aber ich glaube nicht, dass das etwas ist,

01:10:15.780 --> 01:10:16.480
was man lösen will.

01:10:18.940 --> 01:10:20.340
Ja, also ich glaube tatsächlich,

01:10:20.420 --> 01:10:22.200
ich glaube, so eine Antwort wäre mit dem Cash-Dealer-Redis

01:10:22.200 --> 01:10:23.840
und da muss man halt dann gucken, braucht man das jetzt

01:10:23.840 --> 01:10:24.700
oder will man das jetzt oder nicht.

01:10:25.160 --> 01:10:27.520
Also, ich würde sagen, wenn du versuchst,

01:10:27.560 --> 01:10:29.300
dieses Problem zu lösen, ist die Lösung,

01:10:29.940 --> 01:10:31.960
macht halt einen Haufen zusätzliche Probleme.

01:10:34.020 --> 01:10:35.920
Ja, gut, aber manchmal kann man halt nicht anders.

01:10:36.160 --> 01:10:38.240
Manchmal kann man nicht anders, ja, dann ist es halt schlecht.

01:10:40.240 --> 01:10:41.860
Also wenn ich halt auf der anderen Seite zum Beispiel

01:10:41.860 --> 01:10:43.780
keine Einflussmöglichkeiten habe, dann kann ich nicht sagen,

01:10:43.880 --> 01:10:45.000
dass ich da irgendjemanden da anpasse.

01:10:46.300 --> 01:10:47.480
Ja, ja, klar, klar.

01:10:48.100 --> 01:10:48.800
Tja, ja.

01:10:49.580 --> 01:10:51.740
Mit dem Serialisieren, das muss man wahrscheinlich im Kopf haben,

01:10:51.800 --> 01:10:53.680
dass das auch ein sicherheitsrelevantes Problem sein kann.

01:10:54.380 --> 01:10:56.020
Aber dann, ja, also als Jason wäre

01:10:56.020 --> 01:10:57.380
er wahrscheinlich sicher, weil das ja nur irgendwie

01:10:57.380 --> 01:10:59.620
Zeichenketten sind, das nicht ausgeführt ist. Das heißt, ich muss

01:10:59.620 --> 01:11:01.480
irgendwie gucken, dass ich alles irgendwie Jason

01:11:01.480 --> 01:11:03.900
Serializable mache. Und das

01:11:03.900 --> 01:11:05.580
heißt tatsächlich, dass ich keine

01:11:05.580 --> 01:11:08.100
Funktionen

01:11:08.100 --> 01:11:10.020
angeben kann, sondern ich muss

01:11:10.020 --> 01:11:12.240
Funktionen Pfad oder

01:11:12.240 --> 01:11:13.960
Importpfad angeht. Ja, also ich meine, ich habe zum Beispiel

01:11:13.960 --> 01:11:15.480
so einen Fall tatsächlich

01:11:15.480 --> 01:11:18.160
von, gerade mit FastAPI

01:11:18.160 --> 01:11:19.020
fällt mir jetzt gerade so ein,

01:11:21.320 --> 01:11:22.300
da habe ich das so gemacht,

01:11:23.020 --> 01:11:23.500
tatsächlich auch,

01:11:24.480 --> 01:11:26.060
deine Pidentic-Objekte,

01:11:26.140 --> 01:11:27.880
die kannst du ja serialisieren. Zu JSON, ja.

01:11:28.100 --> 01:11:30.040
Ja, genau. Aber wenn ich da eine Callable reinstecke, dann geht das

01:11:30.040 --> 01:11:32.000
natürlich nicht. Nee, aber du kannst ja

01:11:32.000 --> 01:11:33.460
ein neues Objekt erzeugen.

01:11:35.240 --> 01:11:35.960
Hä? Also

01:11:35.960 --> 01:11:37.740
du kannst ja das Ding serialisieren. Ja.

01:11:38.760 --> 01:11:40.380
Also nicht immer.

01:11:40.800 --> 01:11:42.840
Das kann ich nur dann, wenn es serializable ist.

01:11:43.100 --> 01:11:44.420
Wenn ich jetzt da in Padentic

01:11:44.420 --> 01:11:46.500
irgendwelche Sachen drin habe, die nicht serializable sind,

01:11:46.560 --> 01:11:48.200
dann kann ich natürlich mir überlegen, was ich denn mache.

01:11:49.860 --> 01:11:50.480
Und dann muss ich ja

01:11:50.480 --> 01:11:51.460
meinen eigenen Serializer schreiben.

01:11:52.140 --> 01:11:53.620
Aber das kannst du ja machen.

01:11:54.800 --> 01:11:56.260
Ich weiß noch, ich hatte das halt

01:11:56.260 --> 01:11:58.240
dieses Problem

01:11:58.240 --> 01:12:00.280
in gewisser Weise auch.

01:12:00.720 --> 01:12:02.920
Ich hatte das in diesem Benchmark-

01:12:02.920 --> 01:12:04.580
Umfeld, dass man sagt,

01:12:04.740 --> 01:12:06.460
okay, ich baue mir zuerst

01:12:06.460 --> 01:12:08.260
meinen Server zusammen auf einer kleinen Seite,

01:12:08.360 --> 01:12:10.360
dann schicke ich das Objekt an den Server und der Server startet

01:12:10.360 --> 01:12:11.160
dann halt irgendwas damit.

01:12:12.280 --> 01:12:14.280
Und meine Lösung, also sozusagen, du hast halt

01:12:14.280 --> 01:12:16.400
in den Pidentic-Modellen,

01:12:16.460 --> 01:12:18.420
da sind halt die Daten für das Ding drin,

01:12:19.200 --> 01:12:20.380
aber ausgeführt wird es dann

01:12:20.380 --> 01:12:22.100
woanders. Dann rufst du halt das Ding mit dem,

01:12:22.300 --> 01:12:24.320
mit den Daten, die du serialisiert hast,

01:12:24.400 --> 01:12:26.120
auf und sagst halt so, und jetzt

01:12:26.120 --> 01:12:28.200
starte mal oder so. Ja, das geht schon.

01:12:28.280 --> 01:12:30.620
Also wenn das Pidentic-Modell das hinbekommt,

01:12:30.620 --> 01:12:32.540
das zu serialisieren, dann geht das auch so.

01:12:32.940 --> 01:12:34.560
Aber das Problem ist halt die Serialisierung von

01:12:34.560 --> 01:12:36.740
Callables in JSON-komplettives

01:12:36.740 --> 01:12:38.460
Format. Und das halt dahinter bekommen.

01:12:38.500 --> 01:12:40.760
Da muss man halt dann den Civilizer und G-Civilizer

01:12:40.760 --> 01:12:42.280
für extra verschreiben, für diese einzelnen Felder.

01:12:42.600 --> 01:12:44.460
Und das ist dann die Frage, wie man so ein Objekt realisiert.

01:12:44.560 --> 01:12:46.400
Und da stehe ich halt wahrscheinlich gerade, vielleicht habe ich das

01:12:46.400 --> 01:12:48.520
noch nicht gemacht, weil ich nicht weiß, wie ich so einen Pfad zu einer

01:12:48.520 --> 01:12:49.520
Funktion dann realisieren kann.

01:12:49.520 --> 01:12:52.480
Ich kann ja mal gucken. Also ich habe da auch

01:12:52.480 --> 01:12:54.340
tatsächlich so eine Art Registry

01:12:54.340 --> 01:12:55.840
verwendet, wo man dann halt einfach sagen,

01:12:56.300 --> 01:12:58.460
ich habe das dann so gemacht, dass man einen Dekorator in die Klasse

01:12:58.460 --> 01:13:00.640
rechnen konnte. Und dann konnte man sagen, okay, registriere das Ding mal.

01:13:00.640 --> 01:13:01.360
Und dann

01:13:01.360 --> 01:13:03.780
konnte ich quasi

01:13:03.780 --> 01:13:06.680
das halt wieder komplett

01:13:06.680 --> 01:13:08.240
so aus dem...

01:13:08.240 --> 01:13:10.460
Raushauen? Ja, aber genau,

01:13:10.540 --> 01:13:12.660
das kann man mal

01:13:12.660 --> 01:13:14.460
draufgucken. Tatsächlich, man müsste dann

01:13:14.460 --> 01:13:16.440
quasi diese einzelne Funktion dann quasi

01:13:16.440 --> 01:13:18.420
selber registrieren. Das könnte man ja mit dem

01:13:18.420 --> 01:13:20.300
Dekorator machen, der eh schon da benutzt wird für das Subscribe.

01:13:20.500 --> 01:13:22.480
Und dann könnte man die quasi gleichzeitig durch das Subscribe

01:13:22.480 --> 01:13:24.600
mit in diese Event-Registry registrieren

01:13:24.600 --> 01:13:25.360
unter irgendwas.

01:13:26.440 --> 01:13:27.740
Oh, ja.

01:13:28.440 --> 01:13:30.300
Und dieses, was dann dabei rauskommt,

01:13:30.360 --> 01:13:32.020
das könnte man in das Bidentic-Modell mit reinschreiben,

01:13:32.120 --> 01:13:34.220
rauspolen und dann auch quasi

01:13:34.220 --> 01:13:36.160
eine Methode dran schreiben, die dann diese

01:13:36.160 --> 01:13:37.080
Funktionen ausführen können.

01:13:38.360 --> 01:13:39.320
Können wir gleich mal...

01:13:39.320 --> 01:13:41.420
Ja, aber...

01:13:41.420 --> 01:13:42.480
Ja, das ist ein bisschen gepopelt, aber ja,

01:13:42.660 --> 01:13:43.700
das ist das Schöne.

01:13:44.580 --> 01:13:46.680
Genau, ich habe letztens

01:13:46.680 --> 01:13:49.080
so ein...

01:13:49.700 --> 01:13:51.160
Also, was ich

01:13:51.160 --> 01:13:52.780
gerade in einem Stream baue, ist halt irgendwie

01:13:52.780 --> 01:13:54.780
das Hosting-Ding für

01:13:54.780 --> 01:13:56.700
eben den Podcast hier auch.

01:13:57.440 --> 01:13:58.700
Ich würde da gerne so eine

01:13:58.700 --> 01:14:00.460
Software-as-a-Service-Lösung draus bauen.

01:14:01.160 --> 01:14:02.800
Und da habe ich so ein

01:14:02.800 --> 01:14:04.640
Spam-Filter-Dings für gebaut. Spam-Filter-Feature

01:14:04.640 --> 01:14:06.700
habe ich vorletzte Woche, letzte Woche,

01:14:07.120 --> 01:14:08.620
diese Woche, ein bisschen

01:14:08.620 --> 01:14:09.700
daran gearbeitet und

01:14:09.700 --> 01:14:12.740
da ist auch so ein

01:14:12.740 --> 01:14:14.840
Ding, das fand ich ganz, auch so ähnlich,

01:14:15.460 --> 01:14:16.180
auch ganz interessant,

01:14:16.700 --> 01:14:17.720
also ich möchte ja natürlich meine

01:14:17.720 --> 01:14:20.740
Spam-Filter-Modelle auch irgendwie in der Datenbank serialisieren

01:14:20.740 --> 01:14:22.300
und Postgres hat man ja in JSON

01:14:22.300 --> 01:14:24.340
viel, das ist ja voll gut,

01:14:24.860 --> 01:14:26.600
aber da

01:14:26.600 --> 01:14:28.460
habe ich ja jetzt das Problem, okay, ich möchte

01:14:28.460 --> 01:14:30.400
jetzt ja nicht irgendwie

01:14:30.400 --> 01:14:32.400
JSON daraus haben, sondern ich möchte hinterher das fertige

01:14:32.400 --> 01:14:34.620
Modell, auf dem ich dann Prädikt aufrufen kann,

01:14:34.640 --> 01:14:36.880
aus der Datenbank bekommen. Und da

01:14:36.880 --> 01:14:39.120
habe ich das auch mit Custom Serializer

01:14:39.120 --> 01:14:40.880
D-Serializer gebaut, den man

01:14:40.880 --> 01:14:41.820
dann beim

01:14:41.820 --> 01:14:44.660
JSON-Field angeben kann. Da kann man sagen, das ist der

01:14:44.660 --> 01:14:45.720
Decoder, das ist der Encoder.

01:14:46.920 --> 01:14:48.120
Und der

01:14:48.120 --> 01:14:50.860
Decoder, also der Encoder

01:14:50.860 --> 01:14:51.500
guckt halt

01:14:51.500 --> 01:14:54.920
ja, wie war das?

01:14:57.220 --> 01:14:58.440
Nee, der guckt halt

01:14:58.440 --> 01:15:00.660
was ist das? Und dann ruft er halt irgendwie die

01:15:00.660 --> 01:15:02.000
gibt mir halt mal ein Dict

01:15:02.000 --> 01:15:04.220
Zurück-Methode, so ähnlich wie

01:15:04.220 --> 01:15:06.120
bei Pandentic ist es. Bei Pandentic ist es, glaube ich, auch

01:15:06.120 --> 01:15:06.520
.dict.

01:15:07.660 --> 01:15:09.940
Das habe ich dann halt quasi genauso gemacht, dann .dict und dann

01:15:09.940 --> 01:15:11.760
kommen halt irgendwie Daten aus diesem

01:15:11.760 --> 01:15:14.280
Modell zurück, habe ich dann ins JSON reingeschrieben

01:15:14.280 --> 01:15:15.840
und beim Dekodieren

01:15:15.840 --> 01:15:17.840
guckt er halt, okay, gibt es da ein Attribut

01:15:17.840 --> 01:15:19.780
Klasse drin, Class

01:15:19.780 --> 01:15:21.620
und wenn das NaiveBase ist, dann

01:15:21.620 --> 01:15:24.320
genau, mach halt Spezialbehandlung

01:15:24.320 --> 01:15:25.960
und sag nochmal irgendwie

01:15:25.960 --> 01:15:27.340
ja,

01:15:28.260 --> 01:15:28.700
übergib

01:15:28.700 --> 01:15:31.320
dieses Dict, was in JSON

01:15:31.320 --> 01:15:33.220
war, halt als Dict für

01:15:33.220 --> 01:15:35.260
diese Klasse und mache dann halt ein echtes Modell

01:15:35.260 --> 01:15:36.780
draus, wo ich dann hinterher

01:15:36.780 --> 01:15:39.220
Predict drauf aufrufen kann. Und dann

01:15:39.220 --> 01:15:41.300
fällt das gar nicht auf. Dann sagt man halt im

01:15:41.300 --> 01:15:43.240
Code einfach

01:15:43.240 --> 01:15:45.520
nur Spamfilter.predict

01:15:45.520 --> 01:15:46.560
irgendwas. Und

01:15:46.560 --> 01:15:49.320
Spamfilter ist halt die Tabelle in der Datenbank.

01:15:50.140 --> 01:15:51.240
Model ist halt sozusagen

01:15:51.240 --> 01:15:53.240
dieses JSON-Field. Und dadurch, dass

01:15:53.240 --> 01:15:55.200
das ein Custom

01:15:55.200 --> 01:15:56.600
Deserializer hat,

01:15:57.420 --> 01:15:59.180
wenn man darauf zugreift, auf dieses Attribut, wird

01:15:59.180 --> 01:16:01.000
es ja deserialisiert und ist dann halt das

01:16:01.000 --> 01:16:02.640
richtige Modell wieder, das heißt, man kann sagen,

01:16:03.160 --> 01:16:05.340
also man kann zum Beispiel sagen, SpamFilter.Objects,

01:16:05.340 --> 01:16:07.620
jetzt ist jetzt Django-Semantik,

01:16:08.360 --> 01:16:12.300
SpamFilter.Objects.First.Model.Predict

01:16:12.300 --> 01:16:13.880
und dann übergibt man irgendwas,

01:16:13.980 --> 01:16:15.360
einen Kommentar oder so, und dann sagt einem das Spam

01:16:15.360 --> 01:16:17.340
oder nicht Spam. Ohne, dass man da irgendwas

01:16:17.340 --> 01:16:18.620
machen muss, das funktioniert einfach so.

01:16:18.640 --> 01:16:21.060
Und du hast da quasi ein fertig trainiertes Modell,

01:16:21.200 --> 01:16:23.300
hängst du dann quasi per JSON dann in das

01:16:23.300 --> 01:16:25.220
JSON-Feed rein, oder? Genau, also

01:16:25.220 --> 01:16:26.600
ich würde es zuerst trainieren und dann sagen,

01:16:27.240 --> 01:16:29.160
ja, speichere das doch mal, also

01:16:29.160 --> 01:16:31.120
Model ist gleich, ist halt das

01:16:31.120 --> 01:16:33.060
fertig trainierte Model und dann sage ich halt,

01:16:33.140 --> 01:16:35.180
ist beim Filter, also ist beim Filterpunkt Model gleich

01:16:35.180 --> 01:16:37.200
Naive Bay, also das, zuerst würde ich

01:16:37.200 --> 01:16:38.940
sagen, Model gleich Naive Bay ist

01:16:38.940 --> 01:16:40.960
irgendwas, Punkt Fit, irgendwann

01:16:40.960 --> 01:16:41.720
Trainingsdaten

01:16:41.720 --> 01:16:45.160
und dann sage ich halt, ist beim Filterpunkt Model gleich

01:16:45.160 --> 01:16:47.060
Model und dann sage ich, ist beim Filterpunkt Save

01:16:47.060 --> 01:16:48.200
und dann ist es halt der Amonk.

01:16:48.840 --> 01:16:50.920
Nett, nett. Und genau, das, also

01:16:50.920 --> 01:16:52.840
da ist es auch so ein ähnliches Problem.

01:16:54.100 --> 01:16:54.760
Ja, das

01:16:54.760 --> 01:16:57.260
ging eigentlich relativ problemlos.

01:16:57.800 --> 01:16:59.100
Ja, und überhaupt

01:16:59.100 --> 01:17:00.460
bei Knifebase, voll gut.

01:17:01.420 --> 01:17:02.880
Ja, ich habe das

01:17:02.880 --> 01:17:04.940
im April, glaube ich, irgendwann mal auch in die,

01:17:05.020 --> 01:17:06.700
weil die Kommentarspammer, also

01:17:06.700 --> 01:17:08.360
eine ganze Zeit lang, also bis letzten,

01:17:08.940 --> 01:17:10.440
bis Anfang letzten Jahres oder so,

01:17:11.060 --> 01:17:12.540
haben sie es nie irgendwie,

01:17:13.500 --> 01:17:14.860
war das nie ein Problem, weil

01:17:14.860 --> 01:17:16.820
irgendwie, ja,

01:17:16.960 --> 01:17:18.840
wahrscheinlich diese CSRF-Protection oder

01:17:18.840 --> 01:17:20.360
keine Ahnung, was auch immer, Django da halt

01:17:20.360 --> 01:17:22.640
an Dingen macht, die verhindern sollen,

01:17:23.400 --> 01:17:24.920
dass man da beliebig

01:17:24.920 --> 01:17:26.900
Dinge reinpostet, schon dafür

01:17:26.900 --> 01:17:28.960
gesorgt haben, dass die Kommentarspammer draußen geblieben

01:17:28.960 --> 01:17:30.900
sind. Irgendwann sind

01:17:30.900 --> 01:17:31.800
deren Skripte halt

01:17:31.800 --> 01:17:34.560
besser geworden, kommen

01:17:34.560 --> 01:17:36.780
halt mit diesem Kram klar und nehmen halt das

01:17:36.780 --> 01:17:38.640
Token dann aus dem Get und

01:17:38.640 --> 01:17:40.900
packen es in den Post rein und dann kommen sie halt durch.

01:17:41.480 --> 01:17:42.980
Weil wir haben da ja auch keine Authentifizierung

01:17:42.980 --> 01:17:44.800
oder sowas. Jeder kann da Kommentare

01:17:44.800 --> 01:17:46.800
reinschreiben. Aber wenn man das

01:17:46.800 --> 01:17:48.860
halt über ein Skript macht und nicht über einen Browser, dann fehlen

01:17:48.860 --> 01:17:50.760
halt vielleicht Daten, die man mit angeben muss. Und dann sagt Django

01:17:50.760 --> 01:17:51.680
direkt, nee, so nicht.

01:17:52.640 --> 01:17:54.520
Aber sozusagen, wenn man es halt

01:17:54.520 --> 01:17:56.600
mit einem Headless-Browser macht oder mit einem Skript,

01:17:56.700 --> 01:17:58.420
das ein bisschen besser ist und das halt weiß, wie diese

01:17:58.420 --> 01:18:00.780
Formfelder heißen und so und

01:18:00.780 --> 01:18:02.800
dann geht es halt doch. Also was man auch

01:18:02.800 --> 01:18:04.500
glaube ich ganz gut machen kann, ist so ein Feld

01:18:04.500 --> 01:18:07.020
einfach reinmachen, das halt dann mit im Formular drin steht,

01:18:07.400 --> 01:18:08.920
was halt automatisch für das Skript ausgeführt

01:18:08.920 --> 01:18:10.840
wird und wenn halt was drinsteht, dann sagt

01:18:10.840 --> 01:18:12.900
halt der App Spam. Ja, das kann

01:18:12.900 --> 01:18:15.000
auch sein, das habe

01:18:15.000 --> 01:18:16.660
ich mir auch zuerst überlegt, weil das wäre dann die super simple

01:18:16.660 --> 01:18:18.840
Methode gewesen, dass erstmal alle, dann hätte

01:18:18.840 --> 01:18:20.840
sich jemand das Skript ändern müssen für diese

01:18:20.840 --> 01:18:21.940
Seite und das macht dann natürlich keiner.

01:18:22.880 --> 01:18:24.560
Aber ich bin mir gar nicht so sicher,

01:18:24.940 --> 01:18:26.700
ehrlich gesagt, also auch wenn ich mir angucke,

01:18:26.920 --> 01:18:28.860
das Muster von den, also das hatte ich mir auch

01:18:28.860 --> 01:18:31.100
zuerst überlegt, dass das vielleicht die

01:18:31.100 --> 01:18:32.960
einfachste Lösung für das Problem ist und dann habe ich mir

01:18:32.960 --> 01:18:34.260
aber das ein bisschen angeguckt und dann

01:18:34.260 --> 01:18:37.020
ich habe so den Verdacht, dass das

01:18:37.020 --> 01:18:37.860
gar keine Skripte sind.

01:18:38.820 --> 01:18:41.300
Ich glaube, da gehen

01:18:41.300 --> 01:18:42.960
Leute tatsächlich mit

01:18:42.960 --> 01:18:44.840
Browsern drauf, die halt irgendwie

01:18:44.840 --> 01:18:47.000
dafür bezahlt werden, dass sie das machen und machen das von Hand.

01:18:47.460 --> 01:18:49.000
Und da hilft das natürlich alles nicht mehr, weil

01:18:49.000 --> 01:18:51.000
sobald da jemand mit einem Browser drauf geht, dann

01:18:51.000 --> 01:18:51.400
ja.

01:18:53.020 --> 01:18:54.480
Und ja, also

01:18:54.480 --> 01:18:56.700
dann dachte ich mir so, okay, also das sieht schon

01:18:56.700 --> 01:18:58.600
verdächtig danach aus, dass das irgendwelche Leute sind,

01:18:58.700 --> 01:19:00.740
die da tatsächlich für bezahlt werden und das von Hand machen,

01:19:01.040 --> 01:19:02.600
dann kann ich mir das auch

01:19:02.600 --> 01:19:04.140
dann hilft das nichts.

01:19:05.180 --> 01:19:06.440
Dann mache ich es auch gleich richtig und

01:19:06.440 --> 01:19:08.800
baue da halt so einen richtigen Content-basierten

01:19:08.800 --> 01:19:09.460
Spam-Filter ein.

01:19:11.280 --> 01:19:12.320
Und genau,

01:19:12.860 --> 01:19:13.120
Django

01:19:13.120 --> 01:19:16.680
Fluent Commands oder so, hat halt auch so

01:19:16.680 --> 01:19:18.700
einen Schnittstelle drin für

01:19:18.700 --> 01:19:20.300
Akismet oder so, weiß nicht, dieses

01:19:20.300 --> 01:19:22.360
Spam-Filter-Dings, aber das ist alles ganz furchtbar.

01:19:22.360 --> 01:19:24.200
Das darf man auch, glaube ich, alles gar nicht so richtig

01:19:24.200 --> 01:19:24.520
verwenden,

01:19:26.000 --> 01:19:27.840
weil man damit ja dann warten

01:19:27.840 --> 01:19:29.540
weiterreicht an, ja, also

01:19:29.540 --> 01:19:31.780
das ist alles sehr unschön und

01:19:31.780 --> 01:19:33.960
man kann das aber

01:19:33.960 --> 01:19:35.460
relativ leicht selber bauen und dann

01:19:35.460 --> 01:19:37.840
eben, und NaiveBase bietet sich da halt an, weil das

01:19:37.840 --> 01:19:39.560
hat keine Abhängigkeiten zu irgendwas anderem,

01:19:40.220 --> 01:19:42.080
sondern das kann man halt

01:19:42.080 --> 01:19:43.880
rein in Python mit

01:19:43.880 --> 01:19:45.840
Standard-Bibliotheksmitteln irgendwie alles machen

01:19:45.840 --> 01:19:47.840
und ich habe da auch

01:19:47.840 --> 01:19:50.220
eine Stream-Episode

01:19:50.220 --> 01:19:51.420
nur darüber gemacht, weil

01:19:51.420 --> 01:19:53.840
das kann man in anderen Programmiersprachen genauso machen, das kann man in PHP

01:19:53.840 --> 01:19:55.780
ganz genauso machen, das kann man halt irgendwie

01:19:55.780 --> 01:19:57.760
egal, was man verwendet, kann man das

01:19:57.760 --> 01:19:59.920
relativ einfach implementieren. Es kommt mit wenig

01:19:59.920 --> 01:20:01.440
Trainingsdaten aus, es ist schnell.

01:20:03.860 --> 01:20:06.020
Es ist wahrscheinlich für diesen Fall

01:20:06.020 --> 01:20:07.940
Spam, nicht Spam, weil die Klassen gut

01:20:07.940 --> 01:20:08.960
getrennt sind, ist es gut genug.

01:20:09.780 --> 01:20:12.000
Es ist natürlich, wenn man das vergleicht mit anderen Sachen, nicht so gut

01:20:12.000 --> 01:20:13.200
wie andere Dinge, aber

01:20:13.200 --> 01:20:15.700
in dem Fall ist es vielleicht egal, dass es nicht so gut ist.

01:20:16.460 --> 01:20:17.860
Jedenfalls bei, das hat

01:20:17.860 --> 01:20:19.200
jetzt halt auf den

01:20:19.200 --> 01:20:21.760
Dingen hat es jetzt praktisch

01:20:21.760 --> 01:20:22.480
perfekt funktioniert.

01:20:23.980 --> 01:20:25.020
Kommt kein Spam mehr durch.

01:20:25.780 --> 01:20:27.600
Und die ganzen regulären Sachen kommen

01:20:27.600 --> 01:20:29.600
halt doch durch. Also es funktioniert

01:20:29.600 --> 01:20:30.580
tatsächlich ziemlich super.

01:20:31.640 --> 01:20:32.200
Ja, genau.

01:20:34.100 --> 01:20:34.500
Ja.

01:20:35.460 --> 01:20:37.520
Ja, da müsst ihr euch unbedingt

01:20:37.520 --> 01:20:38.220
Jochen's Stream-Channel anschauen.

01:20:39.240 --> 01:20:41.520
Also die entsprechende Folge auf jeden Fall wäre super.

01:20:41.620 --> 01:20:43.460
Ich würde die nämlich auch nochmal sehen. Ich bin glaube ich

01:20:43.460 --> 01:20:45.600
einmal ausgestiegen, als du irgendeinen Update gemacht hast

01:20:45.600 --> 01:20:46.580
von Jupiter oder so.

01:20:47.400 --> 01:20:49.320
Ja, ich bin da ja,

01:20:49.440 --> 01:20:51.540
ich weiß ja auch oft nicht, was ich da vorher

01:20:51.540 --> 01:20:53.460
mache. Manchmal habe ich einen langweiligen

01:20:53.460 --> 01:20:55.580
Kram halt da. Ja, wie es halt so ist, wenn man täglich

01:20:55.580 --> 01:20:57.880
seine Arbeit filmt. Irgendwas passiert nicht immer

01:20:57.880 --> 01:20:59.020
so die ganzen megaspannenden Sachen.

01:20:59.380 --> 01:21:01.200
Ja, aber doch.

01:21:02.460 --> 01:21:02.920
Ja, ja.

01:21:03.560 --> 01:21:05.340
Das mit dem Naiv-Base, das finde ich sehr spannend.

01:21:05.620 --> 01:21:07.460
Ist eigentlich fast schon eine eigene Folge wert, wie man

01:21:07.460 --> 01:21:09.780
einen Naiv-Base-Spam findet. Hatten wir schon, tatsächlich.

01:21:10.420 --> 01:21:11.820
Spam-Filter? Ja, wir hatten

01:21:11.820 --> 01:21:13.520
schon eine Naiv-Base-Folge, glaube ich, mal irgendwann.

01:21:13.920 --> 01:21:15.320
Das ist jetzt schon ein bisschen was her, aber...

01:21:15.320 --> 01:21:17.740
Ja, stimmt. Ja, ich glaube, Maschinen-Learning-Folgen

01:21:17.740 --> 01:21:19.760
hattet ihr aber eh noch ein paar mehr nachgefragt.

01:21:19.860 --> 01:21:21.580
Vielleicht müssen wir da nochmal... Ja, da müssen wir sowieso...

01:21:21.580 --> 01:21:23.420
Wir müssen uns mal Struktur und Konzept überlegen, Jochen.

01:21:24.380 --> 01:21:26.460
Ja, also was auch auf jeden Fall

01:21:26.460 --> 01:21:28.040
auf dem Plan ist, ist

01:21:28.040 --> 01:21:30.440
HTMX, das wird jetzt auch nochmal

01:21:30.440 --> 01:21:33.120
Also einmal

01:21:33.120 --> 01:21:34.960
fand ich interessant zu sehen,

01:21:35.080 --> 01:21:37.060
dass das halt, wenn man

01:21:37.060 --> 01:21:39.080
sich anguckt, welche Talks sind eigentlich

01:21:39.080 --> 01:21:39.400
so

01:21:39.400 --> 01:21:43.080
populär quasi, kann man ja auf YouTube so ein bisschen sehen

01:21:43.080 --> 01:21:44.900
zum Beispiel auf Konferenzen.

01:21:45.200 --> 01:21:46.920
HTMX, super. Ja, HTMX macht auch Spaß.

01:21:47.220 --> 01:21:49.000
Ich habe es, glaube ich, auch schon mal einmal so

01:21:49.000 --> 01:21:51.080
spaßeshalber gebaut. Ich glaube, da ist noch ein kleiner Bug drin

01:21:51.080 --> 01:21:53.000
beim Posten von dem

01:21:53.000 --> 01:21:55.080
Formular, die Validierung geht noch nicht richtig durch, aber sonst

01:21:55.080 --> 01:21:56.920
müsste man eigentlich mal veröffentlichen.

01:21:56.980 --> 01:21:58.960
Ich habe so ein Minimumbeispiel auf Dango gebaut auch.

01:21:59.460 --> 01:22:00.780
Ja, ja, ja. Es gibt ja auch Django

01:22:00.780 --> 01:22:02.980
HTMLX. Adam Johnson hat das, glaube ich,

01:22:02.980 --> 01:22:04.900
gemacht. Super. Ja, also da

01:22:04.900 --> 01:22:05.780
muss ich auch mehr mitmachen.

01:22:06.580 --> 01:22:08.880
Vor allem ist es halt wirklich so, also das, was

01:22:08.880 --> 01:22:10.800
einen halt bei Dango Templates insbesondere nervt,

01:22:10.820 --> 01:22:12.860
ist halt so die Reaktivität der Templates, die halt eigentlich

01:22:12.860 --> 01:22:14.720
nicht da ist, sondern du hast halt jedes Mal einen neuen

01:22:14.720 --> 01:22:16.700
Request und musst halt dann hingehen und musst immer komplett

01:22:16.700 --> 01:22:18.860
die ganze Seite nur abholen, was natürlich beim Nutzer

01:22:18.860 --> 01:22:20.840
einmal Zack hat und was halt irgendwie... Musst du halt nicht

01:22:20.840 --> 01:22:22.680
unbedingt. Ja, genau. Und mit

01:22:22.680 --> 01:22:25.000
HTMLX ist es halt relativ einfach implementierbar,

01:22:25.100 --> 01:22:26.600
dass du es halt genau das nicht musst, sondern dass du halt

01:22:26.600 --> 01:22:28.720
Teile einfach validierst und halt dann

01:22:28.720 --> 01:22:30.720
tatsächlich gleich Feedback anzeigst für Formular,

01:22:30.800 --> 01:22:32.960
Validierung oder was auch immer man da haben möchte.

01:22:33.120 --> 01:22:34.660
Genau. Und der Weg, wie man das

01:22:34.660 --> 01:22:36.540
früher gemacht hat, üblicherweise ist halt jQuery

01:22:36.540 --> 01:22:38.560
oder sowas oder halt irgendwie, weiß ich nicht,

01:22:38.740 --> 01:22:40.640
heutzutage nennt man dann eher so AlpineJS

01:22:40.640 --> 01:22:41.020
oder

01:22:41.020 --> 01:22:44.740
PTView oder so.

01:22:45.060 --> 01:22:46.520
Ja. Aber

01:22:46.520 --> 01:22:48.740
das Problem dabei ist natürlich, dass

01:22:48.740 --> 01:22:50.280
sobald das dann halt komplizierter wird

01:22:50.280 --> 01:22:52.540
und sobald man dann halt irgendwie sowas macht, also was ich

01:22:52.540 --> 01:22:54.520
gerne hätte, ist ja irgendwie, dass auch Pagination

01:22:54.520 --> 01:22:56.600
darüber funktioniert, man dann so weiterklickt und das halt so schnell

01:22:56.600 --> 01:22:57.060
ist wie

01:22:57.060 --> 01:23:00.620
bei einer lokalen App oder so, das ist halt

01:23:00.620 --> 01:23:02.500
dann doch eher, da ist man dann schon

01:23:02.500 --> 01:23:04.080
eher schnell im Single-Page

01:23:04.080 --> 01:23:06.820
SPA-Land

01:23:06.820 --> 01:23:07.780
unterwegs,

01:23:08.120 --> 01:23:10.560
aber genau

01:23:10.560 --> 01:23:12.240
und ich dachte bisher immer, und

01:23:12.240 --> 01:23:14.360
mit JQuery und so wird das State-Management dann halt auch

01:23:14.360 --> 01:23:16.240
irgendwie, wenn es komplizierter wird, sehr hässlich

01:23:16.240 --> 01:23:18.240
und ich dachte immer so,

01:23:18.300 --> 01:23:20.140
naja gut, okay, da muss man halt doch SPA machen

01:23:20.140 --> 01:23:22.500
aber ich glaube

01:23:22.500 --> 01:23:24.320
tatsächlich, HTMLX ist vielleicht

01:23:24.320 --> 01:23:26.340
tatsächlich eine Lösung, ich weiß es noch nicht genau, weil ich habe es noch nicht

01:23:26.340 --> 01:23:27.340
ausprobiert, aber könnte gut sein

01:23:27.340 --> 01:23:29.580
Ja, wir müssen ein bisschen ausbauen, dass das so ein bisschen

01:23:29.580 --> 01:23:32.340
voll, also die ein bisschen einfacher

01:23:32.340 --> 01:23:34.240
wird von der Anwendung her, dass man vielleicht noch

01:23:34.240 --> 01:23:36.080
ein paar eigene Template-Texte für sowas nimmt oder sowas

01:23:36.080 --> 01:23:37.880
ist ja natürlich besonders toll, aber

01:23:37.880 --> 01:23:40.060
Ja, da bin ich auf jeden Fall gespannt

01:23:40.060 --> 01:23:42.300
also diesen Trend gibt es ja jetzt auch schon einige Zeit

01:23:42.300 --> 01:23:44.260
und der gefällt mir tatsächlich sehr gut, also da würde ich sagen

01:23:44.260 --> 01:23:46.160
das ist ja super, wenn das ein bisschen mehr

01:23:46.160 --> 01:23:48.120
in die Richtung läuft, dass man wieder mehr

01:23:48.120 --> 01:23:50.240
Server, ja, das sind halt immer so Hype-Cycles.

01:23:50.840 --> 01:23:52.100
Irgendwie, macht alles auf dem

01:23:52.100 --> 01:23:54.060
Client, oh nein, macht alles auf dem Server, uh.

01:23:54.500 --> 01:23:56.100
Ja, weil wenn das halt mit Rust

01:23:56.100 --> 01:23:58.000
auch bei Python mit WebMC im Browser geht,

01:23:58.220 --> 01:23:59.220
dann können wir auch das wieder beim Client machen.

01:24:01.160 --> 01:24:01.360
Ja,

01:24:01.660 --> 01:24:02.900
ich meine,

01:24:03.980 --> 01:24:06.060
ich würde ja sagen, eigentlich macht das schon

01:24:06.060 --> 01:24:07.260
Sinn, viel auf dem Server zu machen.

01:24:07.260 --> 01:24:09.020
Ja, würde ich auch sagen. Also eigentlich ist ja das Terminal,

01:24:09.100 --> 01:24:11.240
eigentlich brauchst du eigentlich nur eine Tastatur und der Rest ist auf dem

01:24:11.240 --> 01:24:12.860
Server. Das einzige Problem ist, wenn die Verbindung

01:24:12.860 --> 01:24:15.100
abbricht, dann muss man halt irgendwie gucken, was dann übrig

01:24:15.100 --> 01:24:16.300
bleibt, aber ja.

01:24:17.260 --> 01:24:18.960
Naja, ja, aber

01:24:18.960 --> 01:24:20.860
finde ich auch interessant.

01:24:21.060 --> 01:24:21.640
Ich habe jetzt so ein bisschen

01:24:21.640 --> 01:24:25.300
auch mal bei Ruby on Rails

01:24:25.300 --> 01:24:27.020
gehört. Ich meine, ich würde ja sagen,

01:24:27.100 --> 01:24:29.240
die beiden großen, oder tatsächlich

01:24:29.240 --> 01:24:31.080
Ruby on Rails ist halt eher so das

01:24:31.080 --> 01:24:33.080
große Web-Framework

01:24:33.080 --> 01:24:36.960
ja, Batteries

01:24:36.960 --> 01:24:39.040
Included-Ding, fand ich

01:24:39.040 --> 01:24:41.000
jetzt auch mal ganz interessant. Also ich habe jetzt auch irgendwie

01:24:41.000 --> 01:24:42.720
mal was drüber gelesen,

01:24:43.920 --> 01:24:44.780
was das alles so kann.

01:24:46.120 --> 01:24:46.920
Ich glaube, ich habe auch letztens

01:24:46.920 --> 01:24:48.380
irgendwo in der Podcast-Review so dazugehört.

01:24:49.980 --> 01:24:51.040
Shownote? Ja, genau,

01:24:51.120 --> 01:24:52.980
wieder reinfahren. Und

01:24:52.980 --> 01:24:55.160
das kann halt tatsächlich, glaube ich, noch ein bisschen mehr als Django.

01:24:55.400 --> 01:24:56.860
Aber Django ist halt immer so das, was

01:24:56.860 --> 01:24:59.220
man dann auch nennt. Also Django ist so ähnlich.

01:24:59.880 --> 01:25:00.940
Aber zum Beispiel, was

01:25:00.940 --> 01:25:02.880
ich nicht wusste, was da so

01:25:02.880 --> 01:25:05.140
Rui und Rails hatte schon immer

01:25:05.140 --> 01:25:06.080
so eine relativ

01:25:06.080 --> 01:25:09.520
ausgefeilte Asset-Pipeline

01:25:09.520 --> 01:25:09.760
drin.

01:25:11.080 --> 01:25:13.620
Bei Django gibt es sowas so ein bisschen, so mit Django-Kompressor

01:25:13.620 --> 01:25:15.360
oder manchmal, also so ein bisschen gibt es

01:25:15.360 --> 01:25:17.280
Ansätze, aber nicht im Ansatz

01:25:17.280 --> 01:25:19.100
vergleichbar mit dem, was Ribbon Rails da macht

01:25:19.100 --> 01:25:21.320
und Ribbon Rails hatte da so

01:25:21.320 --> 01:25:23.140
Dinge, da hat sogar Webpack dann am Schluss

01:25:23.140 --> 01:25:25.280
eingebaut und jetzt sind sie nochmal irgendwie auf was anderes umgestiegen

01:25:25.280 --> 01:25:26.840
und

01:25:26.840 --> 01:25:29.200
da war es ja auch so lange so, dass

01:25:29.200 --> 01:25:31.320
CoffeeScript verwendet wurde, halt für die ganzen

01:25:31.320 --> 01:25:33.200
wirklich frontend-frontend-Teile und

01:25:33.200 --> 01:25:35.160
das wurde dann halt aber alles automatisch

01:25:35.160 --> 01:25:36.340
gebundelt und so

01:25:36.340 --> 01:25:39.180
und in JavaScript transpiliert

01:25:39.180 --> 01:25:41.300
und so, also das ist ein Teil

01:25:41.300 --> 01:25:43.300
wo Ribbon Rails halt nochmal echt mehr Zeugs

01:25:43.300 --> 01:25:45.120
hat als Django, würde ich sagen, und dann

01:25:45.120 --> 01:25:49.440
auch wichtiger Teil und da dachte ich so,

01:25:49.520 --> 01:25:50.940
okay, das ist tatsächlich vielleicht etwas,

01:25:51.200 --> 01:25:52.700
das ist auch sowas, das kann man auch machen, man muss sich einfach

01:25:52.700 --> 01:25:55.400
Greenwells angucken und dann vielleicht Dinge in Django nachbauen oder so.

01:25:55.840 --> 01:25:56.840
Das fehlt in Django,

01:25:57.560 --> 01:25:59.020
ist sowas wie

01:25:59.020 --> 01:25:59.840
so ein

01:25:59.840 --> 01:26:02.700
Job-Queue-System

01:26:02.700 --> 01:26:05.180
und zwar gar nicht so, also

01:26:05.180 --> 01:26:07.240
ich habe mich ja auch schon oft über Salary

01:26:07.240 --> 01:26:09.240
geärgert und so. Django-Background hast du.

01:26:09.380 --> 01:26:11.320
Ja, genau, es gibt ja dann

01:26:11.320 --> 01:26:13.340
auch diverse Django-Queue, es gibt

01:26:13.340 --> 01:26:15.300
RQ

01:26:15.300 --> 01:26:17.280
für diese Redis-Q-Geschichten.

01:26:17.440 --> 01:26:18.280
Dann gibt es aber auch noch

01:26:18.280 --> 01:26:21.280
Yui oder weiß ich nicht. Es gibt noch diverse andere.

01:26:21.400 --> 01:26:23.060
Es gibt halt irgendwie zig

01:26:23.060 --> 01:26:24.760
unterschiedliche Q-Systeme.

01:26:26.160 --> 01:26:30.980
gut, denkt man sich, oh gut, muss ja nicht unbedingt

01:26:30.980 --> 01:26:32.660
in Jago selber drin sein. Ja, wozu auch?

01:26:33.380 --> 01:26:34.560
Es gibt ja genug Auswahl.

01:26:34.560 --> 01:26:36.180
Nimmt man halt irgendwie, was einem am besten gefällt.

01:26:36.640 --> 01:26:38.540
Aber der Punkt ist eigentlich bei

01:26:38.540 --> 01:26:40.420
River and Rails ist das halt drin. Da gibt es halt

01:26:40.420 --> 01:26:42.820
da nennt es sich glaube ich Actionjob

01:26:42.820 --> 01:26:44.340
oder ich war irgendwie so,

01:26:44.500 --> 01:26:45.580
ich weiß jetzt auch gar nichts genau.

01:26:47.180 --> 01:26:48.620
Und das eigentlich

01:26:48.620 --> 01:26:50.820
Witzige daran ist, dass das halt

01:26:50.820 --> 01:26:52.320
so ein Ding ist,

01:26:53.060 --> 01:26:54.820
das ist so ein Interface in Ruby

01:26:54.820 --> 01:26:56.720
und Rails selber. Genauso wie es da

01:26:56.720 --> 01:26:58.780
auch so eine

01:26:58.780 --> 01:27:00.540
Abstraktion gibt für Filesystemzugriff.

01:27:00.860 --> 01:27:01.940
Oder für Files irgendwie.

01:27:02.700 --> 01:27:03.640
Und das gibt es ja in Django auch.

01:27:03.960 --> 01:27:05.480
In Django hast du ja auch irgendwie

01:27:05.480 --> 01:27:07.100
Default File

01:27:07.100 --> 01:27:09.860
wie heißt das?

01:27:10.700 --> 01:27:11.560
File Storage.

01:27:11.900 --> 01:27:12.680
Default File Storage.

01:27:12.820 --> 01:27:15.100
kannst du setzen. Und dann ist

01:27:15.100 --> 01:27:16.780
egal, was du verwendest, ob du irgendeinen Object-Store

01:27:16.780 --> 01:27:19.040
verwendest oder das File-System oder was auch immer.

01:27:21.280 --> 01:27:23.140
Es muss halt diese API anbieten

01:27:23.140 --> 01:27:24.620
und dann kann dahinter liegen, was will.

01:27:25.560 --> 01:27:26.880
Aber du kannst es halt benutzen.

01:27:27.520 --> 01:27:27.840
Du hast halt

01:27:27.840 --> 01:27:30.920
innerhalb von Django ist es immer das gleiche Interface.

01:27:31.100 --> 01:27:32.860
Du kannst halt immer Files irgendwie, kannst auch

01:27:32.860 --> 01:27:35.020
sehen, lesen, kannst dich schreiben. Oder wie Cache, Cache-Backend.

01:27:35.840 --> 01:27:36.880
Genau, oder Cache-Backend.

01:27:37.240 --> 01:27:38.780
Du kannst hinterher

01:27:38.780 --> 01:27:40.000
das Cache-Backend austauschen,

01:27:40.660 --> 01:27:42.540
Aber dein Applikationscode muss sich

01:27:42.540 --> 01:27:44.460
dafür nicht ändern. Und das kannst du mit diesem Jobkram

01:27:44.460 --> 01:27:46.020
halt dann auch machen. Und das ist eigentlich

01:27:46.020 --> 01:27:50.620
für die in der Ruby on Rails Welt

01:27:50.620 --> 01:27:52.400
gibt es halt viele Dinge, die dann darauf

01:27:52.400 --> 01:27:54.580
aufbauen, dass diese Interfaces halt so sind, wie sie sind.

01:27:55.760 --> 01:27:55.960
Und

01:27:55.960 --> 01:27:58.320
das heißt, du kannst halt

01:27:58.320 --> 01:28:00.560
Third-Party-Packages

01:28:00.560 --> 01:28:02.000
oder so bauen, die halt

01:28:02.000 --> 01:28:04.380
dann irgendwie deine

01:28:04.380 --> 01:28:06.580
Tasks in diese

01:28:06.580 --> 01:28:07.940
Queue schmeißen und da irgendwie

01:28:07.940 --> 01:28:10.840
und sie müssen nicht wissen, welche Implementationen

01:28:10.840 --> 01:28:12.640
du da verwendest. Ob das jetzt

01:28:12.640 --> 01:28:14.640
RabbitMQ ist oder was der Teufel,

01:28:14.680 --> 01:28:16.640
das ist halt alles hinter diesem Interface versteckt

01:28:16.640 --> 01:28:18.160
und spielt dann auch keine Rolle.

01:28:20.220 --> 01:28:20.500
Und

01:28:20.500 --> 01:28:22.720
diese Geschichten gibt es halt in Django

01:28:22.720 --> 01:28:24.360
gar nicht, weil es dieses einheitliche Interface nicht gibt.

01:28:24.480 --> 01:28:26.540
Das heißt, wenn ich in Django sowas machen

01:28:26.540 --> 01:28:28.360
wollte, dann hänge ich halt ab direkt von

01:28:28.360 --> 01:28:30.540
Celery oder von sonst irgendwas, weil es gibt nicht

01:28:30.540 --> 01:28:32.380
irgendwie das, ja genau,

01:28:32.480 --> 01:28:33.980
Django-Background-Task-Interface,

01:28:34.080 --> 01:28:36.300
sondern das ist halt, ja.

01:28:36.420 --> 01:28:38.280
Ja, das fehlt tatsächlich noch. Und da dachte ich so,

01:28:38.340 --> 01:28:40.160
okay, ja. Und an

01:28:40.160 --> 01:28:42.080
Linschein hat Ruinrails auch noch so ein bisschen mehr Zeugs.

01:28:42.880 --> 01:28:42.960
Ja.

01:28:44.300 --> 01:28:46.100
Ja, ja, auch HTMX kommt da ja daher

01:28:46.100 --> 01:28:47.740
und diverse andere Geschichten.

01:28:48.760 --> 01:28:49.940
Ja. Und sie haben

01:28:49.940 --> 01:28:51.860
irgendwie für ihren ORM

01:28:51.860 --> 01:28:54.400
da kann

01:28:54.400 --> 01:28:56.100
man auch, also normalerweise

01:28:56.100 --> 01:28:58.140
default ist relationale Datenbank, aber man kann halt auch

01:28:58.140 --> 01:29:00.080
MongoDB direkt dranhängen. Ich dachte so, wow,

01:29:00.180 --> 01:29:02.060
krass, wie haben sie das denn, weil das ist auch immer ein Ding, was in

01:29:02.060 --> 01:29:03.840
Django requestet wird, dass Leute sagen, ich hätte gern

01:29:03.840 --> 01:29:05.960
MongoDB, kann ich jetzt ehrlich gesagt gar nicht so richtig

01:29:05.960 --> 01:29:07.820
verstehen, warum. Wenn irgendjemand

01:29:07.820 --> 01:29:09.600
weiß, warum MongoDB cool ist, wir das

01:29:09.600 --> 01:29:11.860
erklären oder uns mal schreiben, warum das

01:29:11.860 --> 01:29:12.360
toll ist, weil

01:29:12.360 --> 01:29:15.800
verstehe ich gar nicht, warum

01:29:15.800 --> 01:29:16.660
nimmt man das da wahr.

01:29:18.100 --> 01:29:19.640
Offenbar gibt es da großen Bedarf

01:29:19.640 --> 01:29:21.880
und das

01:29:21.880 --> 01:29:22.980
geht halt in Django nicht so richtig.

01:29:24.320 --> 01:29:25.540
Aber könnte man sich auch vorstellen,

01:29:25.660 --> 01:29:27.100
wenn es halt ein...

01:29:27.100 --> 01:29:29.560
Dann sag doch mal ganz kurz, warum du das denn doof nimmst

01:29:29.560 --> 01:29:31.620
als why? Was heißt doof? Ich würde nur

01:29:31.620 --> 01:29:33.680
sagen, ja, also Jason Field

01:29:33.680 --> 01:29:35.920
in Postgres

01:29:35.920 --> 01:29:37.740
schneller. Das ist schneller als MongoDB.

01:29:38.920 --> 01:29:39.720
Mehr braucht man nicht.

01:29:40.000 --> 01:29:41.900
Und es kann halt zusätzlich noch die ganzen relationalen

01:29:41.900 --> 01:29:44.140
Geschichten. Also wozu

01:29:44.140 --> 01:29:44.760
dann MongoDB?

01:29:48.100 --> 01:29:49.760
MongoDB ist ja quasi nur das JSON-Field

01:29:49.760 --> 01:29:51.700
und kann halt die relationalen Dinge nicht. Aber die

01:29:51.700 --> 01:29:53.300
relationalen Features brauchst du ja eigentlich auch.

01:29:53.920 --> 01:29:55.460
Und die ganze Transaktionssicherheit und den ganzen

01:29:55.460 --> 01:29:57.860
Isolationslevel und weiß der Teufel, den ganzen Kram willst du ja eigentlich

01:29:57.860 --> 01:30:00.100
auch haben. Also irgendwie

01:30:00.100 --> 01:30:01.160
keine Ahnung warum.

01:30:02.600 --> 01:30:03.900
Ja, vielleicht auch, wenn man

01:30:03.900 --> 01:30:04.840
halt sagt, okay,

01:30:05.480 --> 01:30:06.980
hat es irgendwie vereinheitlicht

01:30:06.980 --> 01:30:08.880
und es gibt halt nur MongoDB und es kommt damit

01:30:08.880 --> 01:30:10.840
klar, sonst kann ich einfach irgendwie was

01:30:10.840 --> 01:30:12.860
anderes machen. Okay, ja, dann

01:30:12.860 --> 01:30:13.340
ist es halt so.

01:30:15.540 --> 01:30:15.900
Ja.

01:30:17.800 --> 01:30:18.780
Ja, ich finde, wir haben jetzt eine

01:30:18.780 --> 01:30:20.640
sehr, sehr bunte Folge gehabt. Ich glaube, es wird relativ

01:30:20.640 --> 01:30:22.760
schwierig, uns zu folgen. Ich hoffe,

01:30:22.820 --> 01:30:24.740
ihr habt bis zum Ende durchgehalten. Vielleicht habt ihr das ja irgendwie

01:30:24.740 --> 01:30:26.840
geschafft. Haben wir

01:30:26.840 --> 01:30:27.200
noch irgendwas?

01:30:28.840 --> 01:30:30.800
Nee, ansonsten, nee. Hast du einen Pick

01:30:30.800 --> 01:30:32.700
der Woche? Ich glaube, ich hab das schon tausendmal. Doch, ich hab

01:30:32.700 --> 01:30:34.920
also, was ich

01:30:34.920 --> 01:30:37.020
ganz cool fand,

01:30:38.280 --> 01:30:39.000
habe ich letztens

01:30:39.000 --> 01:30:41.140
auch eingebaut, Django Upgrade

01:30:41.140 --> 01:30:42.340
gibt es. Es gibt

01:30:42.340 --> 01:30:45.060
für Python, glaube ich, hat Anthony

01:30:45.060 --> 01:30:47.040
Soti irgendwie auch so ein Ding geschrieben.

01:30:48.460 --> 01:30:49.180
Python Upgrade oder

01:30:49.180 --> 01:30:51.080
ich weiß es nicht genau, wie das Paket heißt und

01:30:51.080 --> 01:30:53.220
so ähnlich gibt es das jetzt auch für Django, wo dann halt

01:30:53.220 --> 01:30:55.080
sozusagen die neueste Syntax und die ganzen

01:30:55.080 --> 01:30:57.100
deprecated Sachen ersetzt werden, automatisch durch die

01:30:57.100 --> 01:30:59.060
Besserung. Ja, ja und das habe ich dann

01:30:59.060 --> 01:31:00.920
als Pre-Commit Hook irgendwie eingebaut

01:31:00.920 --> 01:31:02.760
und so, dass dann halt immer, wenn halt Sachen

01:31:02.760 --> 01:31:04.760
deprecated werden oder wenn es eine bessere Art gibt, das zu machen,

01:31:04.840 --> 01:31:06.460
das wird dann halt automatisch ersetzt und

01:31:06.460 --> 01:31:08.380
ich muss das nicht irgendwie von Hand machen.

01:31:09.360 --> 01:31:10.480
Ja. Das war nice.

01:31:10.500 --> 01:31:12.240
Und das ist ziemlich nett.

01:31:12.520 --> 01:31:13.960
Das ist auch von Adam Johnson, glaube ich.

01:31:16.020 --> 01:31:16.380
Ja,

01:31:16.660 --> 01:31:18.660
was nehme ich denn? Ja, ich habe ja die

01:31:18.660 --> 01:31:20.700
ganzen Sachen, Fast-Fast-SQL-Model, habe ich ja schon

01:31:20.700 --> 01:31:22.220
gesagt. Habe ich auch schon mal

01:31:22.220 --> 01:31:24.700
Rich erwähnt eigentlich irgendwo? Ja, das habe ich ja

01:31:24.700 --> 01:31:26.660
auch schon mehrfach gehabt, ja. Aber ich bestimmt schon mal

01:31:26.660 --> 01:31:28.260
als Schoner, ich nehme es einfach nochmal.

01:31:29.220 --> 01:31:30.620
Ja, das ist auch wirklich toll.

01:31:30.780 --> 01:31:32.740
Da gibt es auch jetzt irgendwie Textual

01:31:32.740 --> 01:31:33.660
oder so irgendwie.

01:31:34.840 --> 01:31:36.460
Der Autor

01:31:36.460 --> 01:31:38.580
von Rich und Textual,

01:31:38.680 --> 01:31:40.260
der probiert das

01:31:40.260 --> 01:31:42.220
Open Source zu entwickeln.

01:31:46.020 --> 01:31:48.600
Und versucht jetzt damit

01:31:48.600 --> 01:31:49.920
durchzukommen,

01:31:50.200 --> 01:31:52.280
seine Projekte zu entwickeln.

01:31:52.280 --> 01:31:53.640
Und das fand ich auch faszinierend.

01:31:55.940 --> 01:31:58.100
Ich bin mal gespannt. Es ist auf jeden Fall sehr populär,

01:31:58.200 --> 01:31:59.160
was er macht und ist ja auch super.

01:31:59.920 --> 01:32:01.140
Ich hoffe mal, dass es klappt.

01:32:01.300 --> 01:32:02.980
Es wäre toll, wenn das

01:32:02.980 --> 01:32:03.320
irgendwie

01:32:03.320 --> 01:32:06.480
mehr funktionieren würde.

01:32:07.600 --> 01:32:09.140
Witch macht ein bisschen

01:32:09.140 --> 01:32:11.120
Farbe in euer Command-Output.

01:32:12.080 --> 01:32:12.180
Ja.

01:32:12.880 --> 01:32:15.100
Ganz nett. Oh, ich benutze das gerne mit

01:32:15.100 --> 01:32:16.940
Humanize, vielleicht noch ein nächster Pick, falls ich jetzt schon mal

01:32:16.940 --> 01:32:18.980
Gepicks habe. Ah, okay. Also Humanize macht

01:32:18.980 --> 01:32:20.880
auch sowas wie Zahlen oder vor allem Daytime-Objekten

01:32:20.880 --> 01:32:22.860
irgendwas vor drei Sekunden oder

01:32:22.860 --> 01:32:24.980
vor kurzer Zeit und man kann so ein bisschen definieren,

01:32:25.300 --> 01:32:26.880
dass das irgendwie nett sich anhört.

01:32:26.880 --> 01:32:28.340
Ich mag das irgendwie ganz gerne für

01:32:28.340 --> 01:32:29.900
ein, zwei Dinge.

01:32:31.440 --> 01:32:33.300
Ein bisschen Human More Readable

01:32:33.300 --> 01:32:34.720
Blogs oder sowas.

01:32:36.220 --> 01:32:37.100
Ja, klingt gut.

01:32:38.480 --> 01:32:38.940
Ja, die hatten

01:32:38.940 --> 01:32:40.880
Richard tatsächlich, ich habe es gerade gesehen, ist gar nicht so lange her.

01:32:41.340 --> 01:32:42.100
Eine Packaging-Folge.

01:32:43.040 --> 01:32:44.620
Jetzt haben wir Humanize dabei.

01:32:46.120 --> 01:32:46.480
Okay.

01:32:47.280 --> 01:32:49.160
Ja, dann bleibt uns gewogen, hört uns weiter,

01:32:49.240 --> 01:32:51.280
wann ihr wollt und bis zum nächsten Mal.

01:32:51.660 --> 01:32:52.820
Dann bis zum nächsten Mal. Tschüss.

01:32:52.820 --> 01:32:53.320
Tschüss.
