WEBVTT

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

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

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

00:00:16.700 --> 00:00:16.940
Ja.

00:00:18.020 --> 00:00:18.940
Der alte Wahnsinn.

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

00:00:25.700 --> 00:00:27.620
Ja, das ist ein bisschen schwierig zu sagen.

00:00:27.620 --> 00:00:29.100
ein bisschen trackt.

00:00:29.700 --> 00:00:31.200
Das ist übrigens Jochen.

00:00:31.860 --> 00:00:34.140
Ja, genau.

00:00:34.380 --> 00:00:35.500
Vielleicht sagen wir das nächste Mal einfach

00:00:35.500 --> 00:00:36.720
herzlich willkommen ohne Episode.

00:00:37.620 --> 00:00:38.480
Das ist ja auch sowas.

00:00:38.940 --> 00:00:41.680
Apple Podcasts, iTunes hat ja so

00:00:41.680 --> 00:00:43.580
Richtlinien, wie man das... Die haben irgendwann mal gesagt,

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

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

00:00:47.880 --> 00:00:49.640
Und dann habe ich das rausgenommen.

00:00:49.840 --> 00:00:51.860
Ich weiß nicht. Am Anfang sind die, glaube ich, noch mit dabei.

00:00:52.240 --> 00:00:53.220
Und irgendwann habe ich...

00:00:53.220 --> 00:00:55.180
Letztens hatten wir jedenfalls 34, dann 33,

00:00:55.180 --> 00:00:57.160
jetzt sind wir 35 und wir haben eigentlich noch einige

00:00:57.160 --> 00:00:59.180
unveröffentlicht. Das heißt, das ist auch nicht ganz so einfach an unseren

00:00:59.180 --> 00:01:01.020
Files. Aber ja,

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

00:01:03.440 --> 00:01:05.120
also ein bisschen über Python

00:01:05.120 --> 00:01:06.400
wollen wir erzählen, drei Themen und so.

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

00:01:09.700 --> 00:01:11.040
Genau, und vielleicht noch über

00:01:11.040 --> 00:01:13.140
die alten Neuerungen, die es so gab. Und dann wollen wir

00:01:13.140 --> 00:01:14.060
noch ein bisschen über

00:01:14.060 --> 00:01:17.220
Shared Memory von Python

00:01:17.220 --> 00:01:18.580
und Prozessen sprechen vielleicht.

00:01:19.600 --> 00:01:21.080
Ja, je nachdem, wie viel uns da entfällt.

00:01:21.180 --> 00:01:21.920
Oder sonst so Dinge.

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

00:01:24.520 --> 00:01:26.020
Bist du noch nicht so genau. Mal schauen.

00:01:26.020 --> 00:01:28.180
Ja, wir müssen uns wieder strukturierte Formen

00:01:28.180 --> 00:01:29.480
kriegen, aber das haben wir bisher noch nicht hinbekommen.

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

00:01:32.860 --> 00:01:33.960
Bevor wir jetzt mit Python 3.10

00:01:33.960 --> 00:01:35.920
anfangen, was haltet ihr eigentlich von Werbung?

00:01:37.600 --> 00:01:37.920
Beiden

00:01:37.920 --> 00:01:38.780
fangen wir an zu beschreiben.

00:01:40.100 --> 00:01:41.800
Ob wir es so mit Helge Schneider halten sollen,

00:01:42.000 --> 00:01:43.380
so Werbung ist scheiße.

00:01:44.100 --> 00:01:45.900
Oder ist das für euch ein No-Go? Es wäre cool,

00:01:45.960 --> 00:01:47.920
wenn ihr jetzt so ein bisschen Feedback gebt, ob das für euch

00:01:47.920 --> 00:01:48.940
in Ordnung wäre oder nicht.

00:01:49.600 --> 00:01:52.000
Wir haben uns aus einigen technischen Perspektiven gefragt,

00:01:52.100 --> 00:01:52.880
ob das Sinn macht oder

00:01:52.880 --> 00:01:55.100
das mal ausprobieren.

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

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

00:01:59.200 --> 00:02:01.300
die ganzen Kosten wieder so ein bisschen, also so

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

00:02:03.280 --> 00:02:05.500
Ich kaufe mir ein Schloss, Jochen.

00:02:08.080 --> 00:02:09.300
Wann das wieder reinkriegen könnte

00:02:09.300 --> 00:02:10.620
oder so, keine Ahnung, muss man schauen.

00:02:11.160 --> 00:02:13.120
Ja, das ist auch so ein Thema, genau.

00:02:14.460 --> 00:02:15.340
Ja, ich warte

00:02:15.340 --> 00:02:16.900
nur darauf, dass ich wegen dem Podcast

00:02:16.900 --> 00:02:17.800
ein Schloss ziehen kann.

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

00:02:21.280 --> 00:02:22.280
Das wird noch etwas dauern.

00:02:22.760 --> 00:02:23.240
Ich habe Zeit.

00:02:25.100 --> 00:02:27.260
Liebensverlängernde Maßnahmen.

00:02:31.260 --> 00:02:33.720
Ja, genau. Wollen wir so ein bisschen News machen?

00:02:34.420 --> 00:02:35.420
Dann könnten wir mal wieder...

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

00:02:37.380 --> 00:02:39.600
Also am Montag kam Python

00:02:39.600 --> 00:02:41.540
3.10.0 heraus.

00:02:41.780 --> 00:02:43.780
Ja. Also letztes Mal also am 4.10.

00:02:44.400 --> 00:02:45.380
Voll gut, genau.

00:02:45.480 --> 00:02:46.540
Und dazu gab es auch so ein

00:02:46.540 --> 00:02:50.060
Release-Stream

00:02:50.060 --> 00:02:51.100
irgendwie, fand ich auch nicht.

00:02:51.220 --> 00:02:52.480
Oh, wir haben dich nicht gesehen, nein.

00:02:52.480 --> 00:03:07.180
Ah, ja, genau, kann man sich auf YouTube nochmal angucken, also ehrlich gesagt, ich weiß nicht, ob ich den sich wirklich komplett angucken will, das ist irgendwie so über drei Stunden, aber man kann mal reingucken, einfach um die Leute zu sehen, die das machen, das ist vielleicht ganz interessant, die hatten auch lustige Hüte auf, das ist auch super.

00:03:08.240 --> 00:03:08.840
Oh, cool.

00:03:08.840 --> 00:03:11.340
Genau, ja und das war

00:03:11.340 --> 00:03:12.540
auch ganz witzig

00:03:12.540 --> 00:03:15.320
Ja, es war eine komplizierte Geschichte

00:03:15.320 --> 00:03:16.420
so ein Release und

00:03:16.420 --> 00:03:18.040
ja

00:03:18.040 --> 00:03:21.500
genau, ich habe jetzt auch schon so ein bisschen

00:03:21.500 --> 00:03:23.060
ich weiß nicht, hast du das schon mal versucht

00:03:23.060 --> 00:03:24.480
irgendwo zu installieren oder mit was?

00:03:24.480 --> 00:03:27.360
Ja, ich benutze es schon relativ lange, jetzt fast drei Monate

00:03:27.360 --> 00:03:29.080
also den Re-Scanned-Edit, der so dann draußen kam

00:03:29.080 --> 00:03:31.200
den habe ich auch schon dann daily benutzt

00:03:31.200 --> 00:03:33.400
und habe so ein bisschen gemerkt, was da ging, was nicht ging

00:03:33.400 --> 00:03:35.020
also ich muss den ja

00:03:35.020 --> 00:03:37.140
meistens oder oft unter Windows benutzen

00:03:37.140 --> 00:03:39.100
leider. Aber ja, da gibt es

00:03:39.100 --> 00:03:40.720
ein großes Problem mit Python 32.

00:03:41.600 --> 00:03:42.980
Das kann man aber relativ einfach fixieren,

00:03:43.060 --> 00:03:44.920
man weiß, wie es geht, aber das erzähle ich vielleicht etwas später.

00:03:45.860 --> 00:03:46.480
Ja, okay.

00:03:47.320 --> 00:03:49.200
Genau, ich habe es eigentlich, ich habe es vielleicht auch mal

00:03:49.200 --> 00:03:50.700
ich habe auch mal eine Beta

00:03:50.700 --> 00:03:52.660
oder ein Release-Kandidat, weiß nicht, mal installiert,

00:03:52.740 --> 00:03:54.760
mal so ein bisschen zu gucken. Oder ich glaube,

00:03:54.760 --> 00:03:56.620
wir hatten irgendwann mal, haben wir uns über

00:03:56.620 --> 00:03:58.760
das Structural-Pattern-Matching auch schon mal

00:03:58.760 --> 00:04:00.720
unterhalten, das ist schon eine Weile her. Ich glaube, das habe ich auch

00:04:00.720 --> 00:04:01.780
mal kurz ausprobiert oder so.

00:04:02.720 --> 00:04:04.420
Aber ansonsten habe ich das noch nicht verwendet.

00:04:04.780 --> 00:04:06.960
Und jetzt aber doch dann mal installiert

00:04:06.960 --> 00:04:09.440
auch. Ich habe jetzt versucht, das Projekt gerade...

00:04:09.440 --> 00:04:10.800
Ja, das sind ja so die Hauptfeatures, ne?

00:04:10.900 --> 00:04:12.780
Also das ist das gleiche Patch-Hand-Matching und die

00:04:12.780 --> 00:04:15.100
Typing-Syntax so ein bisschen angepasst und so.

00:04:16.580 --> 00:04:16.920
Na gut,

00:04:17.220 --> 00:04:18.960
also das ist ja die Frage, wie man es sieht. Also ich glaube,

00:04:20.080 --> 00:04:20.220
so

00:04:20.220 --> 00:04:22.600
das, was...

00:04:22.600 --> 00:04:24.360
Also so ein bisschen kontrovers.

00:04:27.760 --> 00:04:28.920
Aber klar, ich kann schon verstehen,

00:04:28.980 --> 00:04:31.020
warum man die als die wichtigsten neuen Features

00:04:31.020 --> 00:04:33.160
klassifizieren würde.

00:04:33.400 --> 00:04:34.980
Ich glaube, das positivste

00:04:34.980 --> 00:04:36.340
Feedback hat

00:04:36.340 --> 00:04:38.480
und haben die verbesserten Fehlermeldungen bekommen.

00:04:38.960 --> 00:04:40.420
Ja, die sind tatsächlich super.

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

00:04:42.740 --> 00:04:43.760
Ja, ich weiß.

00:04:44.040 --> 00:04:46.280
Und dass man tatsächlich nicht nur irgendeinen Quatsch bekommt, sondern tatsächlich die

00:04:46.280 --> 00:04:48.220
Stelle, an der es steht und warum, vielleicht auch

00:04:48.220 --> 00:04:50.300
einen Hinweis, warum es falsch sein könnte und was da

00:04:50.300 --> 00:04:52.180
falsch ist, das wird direkt gut beschrieben.

00:04:52.660 --> 00:04:54.100
Genau, also bisher ist halt, wenn

00:04:54.100 --> 00:04:56.200
man da irgendwo eine Klammer vergessen hat zuzumachen oder so,

00:04:56.260 --> 00:04:57.540
dann kriegt man halt einen Syntax-Error

00:04:57.540 --> 00:05:00.560
beim nächsten Statement, irgendwie beim Gleichheitszeichen

00:05:00.560 --> 00:05:01.620
oder irgendwie sowas.

00:05:02.140 --> 00:05:04.220
Und das ist halt dann irgendwie verwirrend, weil man kriegt

00:05:04.220 --> 00:05:06.120
halt den Fehler angezeigt, nicht an der Stelle,

00:05:06.120 --> 00:05:08.000
wo er passiert ist

00:05:08.000 --> 00:05:10.500
und wo der Interpreter dann halt drüber fällt.

00:05:10.900 --> 00:05:12.480
Aber genau

00:05:12.480 --> 00:05:13.980
und jetzt ist es halt besser

00:05:13.980 --> 00:05:15.740
und das ist halt auch alles konsequent.

00:05:16.320 --> 00:05:18.780
Man unterkringelt jetzt richtig die Stelle, an der es ist

00:05:18.780 --> 00:05:19.840
mit Numbers und so.

00:05:20.440 --> 00:05:22.400
Von dem Pack-Parser, der jetzt da neu ist

00:05:22.400 --> 00:05:23.560
und mit dem kann man einfach mehr machen.

00:05:25.020 --> 00:05:25.420
Ja,

00:05:26.160 --> 00:05:27.560
weiteres Feature, was halt

00:05:27.560 --> 00:05:30.000
dem neuen Parser sozusagen

00:05:30.000 --> 00:05:31.700
der

00:05:31.700 --> 00:05:33.700
für zuständig ist, ist, dass jetzt

00:05:33.700 --> 00:05:35.860
das ist auch eher so eine Randhässlichkeit,

00:05:35.860 --> 00:05:37.060
aber das ist halt

00:05:37.060 --> 00:05:39.860
schon komisch, wenn man diese Limitierung

00:05:39.860 --> 00:05:42.040
irgendwie, wenn man auf die gestoßen ist

00:05:42.040 --> 00:05:43.460
das in

00:05:43.460 --> 00:05:44.880
Context Manager, also wenn man sagt

00:05:44.880 --> 00:05:47.240
Context Manager S irgendwas

00:05:47.240 --> 00:05:50.300
da konnte man

00:05:50.300 --> 00:05:52.140
vorher nicht das so klammern

00:05:52.140 --> 00:05:53.800
also dass man das über mehrere

00:05:53.800 --> 00:05:55.300
Zeilen, das musste in einer Zeile sein

00:05:55.300 --> 00:05:57.660
und man konnte auch glaube ich nicht mehrere

00:05:57.660 --> 00:05:59.580
sondern musste das dann

00:05:59.580 --> 00:06:01.820
mehrfach verschachteln, was dann natürlich

00:06:01.820 --> 00:06:03.840
also wenn auf dieses Problem gestoßen ist, man hat

00:06:03.840 --> 00:06:04.800
jetzt mehrere Context Manager

00:06:04.800 --> 00:06:07.800
und dann irgendwann

00:06:07.800 --> 00:06:09.880
kommen einem große Nöte, weil

00:06:09.880 --> 00:06:11.900
wenn man immer weiter verschachteln muss,

00:06:11.980 --> 00:06:13.980
wenn man jetzt mehrere davon hat, dann wird der Platz

00:06:13.980 --> 00:06:15.940
auf der rechten Seite eng und wenn man die aber

00:06:15.940 --> 00:06:17.760
nicht umbrechen kann, weil diese Klammer

00:06:17.760 --> 00:06:19.900
dazu noch nicht funktioniert, dann hat man irgendwann

00:06:19.900 --> 00:06:22.020
das Problem, das geht ja jetzt gar nicht

00:06:22.020 --> 00:06:23.440
mehr so richtig. Hässlich wird das.

00:06:23.600 --> 00:06:24.360
Das wird dann sehr hässlich.

00:06:25.760 --> 00:06:26.460
Und das geht jetzt.

00:06:26.860 --> 00:06:29.760
Mit Klammern, sodass man

00:06:29.760 --> 00:06:31.700
mehrere Zeilen verwenden kann und halt auch mehrere

00:06:31.700 --> 00:06:33.680
in einem Dings, sodass man das halt

00:06:33.680 --> 00:06:35.180
quasi, wenn man viele

00:06:35.180 --> 00:06:36.200
Context-Manager

00:06:36.200 --> 00:06:39.380
benutzen möchte, das kann man jetzt einfach

00:06:39.380 --> 00:06:41.500
in eine Zeile schreiben

00:06:41.500 --> 00:06:42.620
beziehungsweise halt untereinander.

00:06:44.040 --> 00:06:44.840
Ja, kann man tun.

00:06:46.580 --> 00:06:47.520
Da sind wahrscheinlich nicht so viele

00:06:47.520 --> 00:06:49.220
Leute drauf geschossen auf das Problem, aber ja.

00:06:50.260 --> 00:06:50.620
Genau.

00:06:51.740 --> 00:06:53.100
Das macht schon Sinn. Also wenn man das schafft,

00:06:53.220 --> 00:06:55.480
könnte man ja auch anders lösen, wenn man Dekoratoren verwendet

00:06:55.480 --> 00:06:56.940
oder so, aber...

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

00:06:59.100 --> 00:07:00.200
verwendet.

00:07:01.100 --> 00:07:02.620
Wenn man das dann nicht so richtig

00:07:02.620 --> 00:07:04.480
verwenden kann. Das ist halt ein bisschen blöd.

00:07:05.560 --> 00:07:06.920
Meistens hat man ja nur so ein, zwei

00:07:06.920 --> 00:07:07.900
Dinger, die man machen möchte.

00:07:08.640 --> 00:07:10.940
Also in diese Verschachtelung,

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

00:07:12.480 --> 00:07:14.980
die einzige Male, wo mir das mal passiert ist,

00:07:15.040 --> 00:07:16.880
das ist halt, wenn ich

00:07:16.880 --> 00:07:18.380
in Tests mehrere Sachen

00:07:18.380 --> 00:07:20.640
also wenn ich da mehrere Sachen

00:07:20.640 --> 00:07:22.580
wegmocken will oder wegpatchen will

00:07:22.580 --> 00:07:24.840
und teilweise

00:07:24.840 --> 00:07:26.780
kann man ja auch einen Dekorator machen,

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

00:07:28.800 --> 00:07:30.260
und dann muss man das halt

00:07:30.260 --> 00:07:32.060
im Test selber machen und dann

00:07:32.060 --> 00:07:33.760
wenn man viele Sachen hat, die man

00:07:33.760 --> 00:07:35.900
wegmocken möchte, dann wird es halt komisch.

00:07:36.540 --> 00:07:37.900
Und das ist aber die einzige

00:07:37.900 --> 00:07:39.900
Stelle, wo das praktisch jemals irgendwie begegnet ist.

00:07:40.060 --> 00:07:40.780
Ansonsten, hm.

00:07:42.700 --> 00:07:44.120
Na gut. Also was ich sehr gerne

00:07:44.120 --> 00:07:45.920
benutze, ist diese neue Typing-Syntax, wo man

00:07:45.920 --> 00:07:47.620
jetzt halt, ich weiß gar nicht, wie heißt das Zeichen überhaupt?

00:07:47.740 --> 00:07:49.560
Dieser senkrechte Strich, die Pipe.

00:07:49.640 --> 00:07:51.760
Pipe-Operator, ja. Genau. Den kann man halt jetzt

00:07:51.760 --> 00:07:53.480
verwenden als Typing zwischen einem

00:07:53.480 --> 00:07:54.840
oder-Zeichen, einfach sagen.

00:07:55.340 --> 00:07:57.740
Es ist jetzt ein Dict oder ein List, der wartet jetzt diese Funktion, dann gibt sie raus,

00:07:57.800 --> 00:07:59.200
dann macht man einfach Pipe dazwischen. Das ist irgendwie

00:07:59.200 --> 00:08:01.800
sehr intuitiv und man muss nicht immer alles vom Typing

00:08:01.800 --> 00:08:03.480
direkt importieren und ein Union draus machen.

00:08:03.860 --> 00:08:05.940
Ja, es sieht auf jeden Fall deutlich besser aus.

00:08:06.320 --> 00:08:06.680
Stimmt.

00:08:07.960 --> 00:08:08.860
Genau, ja.

00:08:09.440 --> 00:08:11.920
Das ist schön. Ich bin bei dieser TypeHint-Syntax

00:08:11.920 --> 00:08:13.760
immer so, ich habe mich ehrlich gesagt auch noch nie so richtig

00:08:13.760 --> 00:08:15.840
wirklich viel damit beschäftigt, muss ich sagen.

00:08:16.180 --> 00:08:17.480
Will ich auch noch irgendwann machen, aber

00:08:17.480 --> 00:08:18.780
ich habe es bisher nie so genutzt.

00:08:20.820 --> 00:08:21.780
Aber ich finde das immer ein bisschen

00:08:21.780 --> 00:08:23.620
verwirrend von der, ich weiß nie so genau,

00:08:23.660 --> 00:08:25.900
was sind jetzt die aktuelle Formen von Syntax, die man da verwenden kann

00:08:25.900 --> 00:08:27.700
und bis welcher Python-Version geht

00:08:27.700 --> 00:08:28.500
zurück, geht das denn und so.

00:08:30.320 --> 00:08:31.720
Aber ja, also so sieht es

00:08:31.720 --> 00:08:33.760
auf jeden Fall schon mal viel besser aus. Sieht sowieso schon mal viel besser aus,

00:08:33.780 --> 00:08:35.280
dass man nicht die ganzen Typen von

00:08:35.280 --> 00:08:37.880
irgendwie aus Typing importieren

00:08:37.880 --> 00:08:39.620
muss, sondern dass man halt direkt die echten...

00:08:39.620 --> 00:08:41.720
Es funktioniert halt leider noch nicht immer so komplett, je nachdem wie

00:08:41.720 --> 00:08:43.580
komplex und wie vollständig man das irgendwie so machen will.

00:08:44.140 --> 00:08:45.640
Aber ja, es ist schon mal auf jeden Fall ein Schritt

00:08:45.640 --> 00:08:47.600
in die richtige, sehr richtige Richtung. Sieht auch gut aus.

00:08:48.380 --> 00:08:49.660
Was mich halt noch so ein bisschen nervt,

00:08:49.700 --> 00:08:51.780
ist halt so, wenn du zirkuläre Abhängigkeiten hast

00:08:51.780 --> 00:08:53.580
oder sowas. Das

00:08:53.580 --> 00:08:55.060
passiert halt bei Typing relativ schnell

00:08:55.060 --> 00:08:57.420
und das ist auch nicht so richtig gelöst.

00:08:57.500 --> 00:08:59.480
Es gibt ja irgendwie so zwei Dinge, die man machen kann, dass man

00:08:59.480 --> 00:09:01.260
von Typing irgendwie das einmal importiert

00:09:01.260 --> 00:09:03.620
und dann nur dann, wenn Typing Type-Checking

00:09:03.620 --> 00:09:05.120
ist, dann die nutzt.

00:09:05.740 --> 00:09:07.600
Das geht auch nicht, weil manchmal kann man es dann als String

00:09:07.600 --> 00:09:09.500
dann doch hinschreiben, weil dann hat man einige Types, die als

00:09:09.500 --> 00:09:11.680
Klassen definiert sind, einige als Strings, das ist auch irgendwie

00:09:11.680 --> 00:09:12.620
hässlich und naja.

00:09:13.460 --> 00:09:15.460
Da wollen sie aber irgendwie dran arbeiten. Aber ich weiß noch nicht genau,

00:09:15.520 --> 00:09:17.560
wann das eingeführt wird, dass man das halt einfach

00:09:17.560 --> 00:09:19.660
da machen kann, dass er halt erkennt, dass es ein Type ist

00:09:19.660 --> 00:09:21.660
und es halt dann tatsächlich lazy importiert

00:09:21.660 --> 00:09:23.480
oder so und das dann halt kein Problem ist

00:09:23.480 --> 00:09:24.680
beim Kompilieren.

00:09:25.940 --> 00:09:27.980
Okay. Auch interessant, ja.

00:09:30.000 --> 00:09:30.280
Ja.

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

00:09:32.540 --> 00:09:34.100
Das heißt, wir bekommen insgesamt im Moment so ein bisschen

00:09:34.100 --> 00:09:36.200
hübschere, ästhetischere Sachen für so

00:09:36.200 --> 00:09:37.920
Errors und Syntax und so.

00:09:38.180 --> 00:09:40.040
Je nachdem, ob man Typefins überhaupt mag.

00:09:40.780 --> 00:09:42.140
Genau, deswegen, also ich meine, ich würde sagen,

00:09:42.240 --> 00:09:44.300
das ist halt durchaus eine kontroverse

00:09:44.300 --> 00:09:46.340
Geschichte, weil es gibt halt auch viele Leute,

00:09:46.460 --> 00:09:47.220
die finden das gar nicht gut.

00:09:47.860 --> 00:09:50.160
Nicht bei Sonic, aber ursprünglich,

00:09:50.200 --> 00:09:50.960
da gab es das nie.

00:09:51.860 --> 00:09:53.660
Und ja, ich kann es so ein bisschen nachvollziehen auf der anderen Seite.

00:09:53.780 --> 00:09:55.340
Also ich glaube, man muss es halt

00:09:55.340 --> 00:09:57.960
dafür einsetzen, wo es halt Sinn macht.

00:09:57.960 --> 00:09:58.440
Ja, genau.

00:09:58.440 --> 00:10:01.140
Was ich auch komisch finde, ist, wenn Leute das dann überall

00:10:01.140 --> 00:10:03.320
verwenden, weil

00:10:03.320 --> 00:10:05.140
es macht halt nicht überall Sinn. Also ich habe auch das Gefühl,

00:10:05.340 --> 00:10:07.200
dass zum Beispiel, wenn ich gerade an den

00:10:07.200 --> 00:10:09.340
Sachen, an denen ich schreibe,

00:10:09.720 --> 00:10:10.900
wenn das halt so, das ist halt

00:10:10.900 --> 00:10:13.220
ein Projekt, was halt andere Bibliotheken

00:10:13.220 --> 00:10:14.540
verwendet, aber selber keine Bibliothek,

00:10:14.900 --> 00:10:17.100
an der Stelle macht es nicht so wahnsinnig viel Sinn, weil

00:10:17.100 --> 00:10:18.020
ich, also

00:10:18.020 --> 00:10:21.200
es ist schön, wenn ich in der IDE sozusagen

00:10:21.200 --> 00:10:22.680
die Ergänzung, also sozusagen

00:10:22.680 --> 00:10:25.380
eine Idee des verwenden kann, um

00:10:25.380 --> 00:10:27.160
mir zu helfen,

00:10:27.160 --> 00:10:29.380
aber wenn ich sowieso

00:10:29.380 --> 00:10:31.000
wenn das die Libraries, die Verwender tun

00:10:31.000 --> 00:10:33.120
und brauche ich das, also sozusagen

00:10:33.120 --> 00:10:35.000
für meinen eigenen Code, den ich quasi nie aufrufe

00:10:35.000 --> 00:10:36.940
brauche ich das ja gar nicht, weil der halt nur

00:10:36.940 --> 00:10:39.220
verwendet wird

00:10:39.220 --> 00:10:40.540
um halt irgendwas zu tun

00:10:40.540 --> 00:10:42.780
das ist halt irgendwie da, an der Stelle brauche ich es

00:10:42.780 --> 00:10:44.460
bis jetzt nicht, ob ich es wirklich brauche

00:10:44.460 --> 00:10:47.060
Also ich mache wahrscheinlich auch im Moment zu viel hints, also weil es gerade

00:10:47.060 --> 00:10:48.900
irgendwie ein bisschen noch reiner als weniger

00:10:48.900 --> 00:10:51.100
aber ich finde das dann schon sehr praktisch, wenn ich halt

00:10:51.100 --> 00:10:53.140
wirklich das Objekt

00:10:53.140 --> 00:10:55.160
quasi schon so getitletet habe, dass ich halt

00:10:55.160 --> 00:10:57.220
weiß, was für ein Objekt ich da in der Funktion in der Hand habe,

00:10:57.720 --> 00:10:59.000
weil das so getyped ist oder auch bei der

00:10:59.000 --> 00:11:01.060
Variablenzuweisung, dass halt schon relativ klar ist, was das

00:11:01.060 --> 00:11:03.160
halt mal sein wird oder so, weil

00:11:03.160 --> 00:11:05.060
dann relativ, also auch manchmal kann man halt so eine Base-Klasse

00:11:05.060 --> 00:11:07.040
nehmen, dann weiß man halt, was hat man denn da in der Hand und das ist

00:11:07.040 --> 00:11:09.100
irgendwie, also A, natürlich vom Editor, der das

00:11:09.100 --> 00:11:11.060
halt super dann linden kann und dann halt auch die Types

00:11:11.060 --> 00:11:13.200
dann feststellt auch, wenn das halt irgendwie nicht stimmt,

00:11:13.280 --> 00:11:14.960
das kann er halt relativ gut feststellen irgendwie, die

00:11:14.960 --> 00:11:15.960
meisten modernen können das ja.

00:11:17.160 --> 00:11:19.020
Und das ist irgendwie schon echt hilfreich, also gerade wenn ich

00:11:19.020 --> 00:11:20.920
jetzt irgendwie mit anderen Leuten irgendwie gleichzeitig irgendwie

00:11:20.920 --> 00:11:23.020
Features entwickle und wieder irgendwie so einen kleinen

00:11:23.020 --> 00:11:24.940
Type-Out und was meint der denn da, wenn die Leute

00:11:24.940 --> 00:11:26.700
nicht immer so gut nehmen oder so manchmal.

00:11:27.080 --> 00:11:29.120
Da sieht man das halt auf jeden Fall am Type auch schon,

00:11:29.200 --> 00:11:30.100
was das dann halt sein könnte.

00:11:31.540 --> 00:11:33.140
Also für mich macht das so deutlich verständlicher.

00:11:33.300 --> 00:11:34.900
Ja, man kann es wahrscheinlich auch too much machen

00:11:34.900 --> 00:11:37.140
an zwei Stellen, aber ja, also ich finde

00:11:37.140 --> 00:11:39.140
das Linting, das ist mir so oft aufgefallen,

00:11:39.240 --> 00:11:40.860
dass irgendwo, wenn man dann mal die

00:11:40.860 --> 00:11:42.780
Type-Pins dann reingebaut hat in so ein Code,

00:11:42.860 --> 00:11:44.140
der irgendwas war komisch von

00:11:44.140 --> 00:11:46.520
Coworker oder sowas, dann merkt man so, oh ja,

00:11:46.640 --> 00:11:48.980
klar, wird direkt gelintet, da ist der Typ irgendwann kaputt gegangen

00:11:48.980 --> 00:11:50.840
und er gibt halt dann doch nicht das zurück, was er erwartet hat

00:11:50.840 --> 00:11:52.860
und vielleicht ist irgendwo doch ein None rausgefallen

00:11:52.860 --> 00:11:54.920
oder sonst irgendwas. Und solche Sachen, die sieht man halt

00:11:54.920 --> 00:11:56.980
durch die Typhons einfach deutlich schneller und deutlich

00:11:56.980 --> 00:11:58.860
häufiger. Ich meine, klar, wenn man sowieso

00:11:58.860 --> 00:12:00.920
ein so super Coder und Programmierer ist wie du,

00:12:01.000 --> 00:12:02.980
lieber Jochen, dann...

00:12:02.980 --> 00:12:04.960
Ich würde sagen, das ist echt, also mir hilft

00:12:04.960 --> 00:12:06.980
es vielleicht, also ja, vielleicht nicht überall, aber...

00:12:07.840 --> 00:12:09.320
Ja, ich glaube,

00:12:09.340 --> 00:12:11.240
ich muss einfach mehr damit mal rumspielen.

00:12:11.700 --> 00:12:12.960
Ja, was interessant ist, es gibt halt auch

00:12:12.960 --> 00:12:15.400
so...

00:12:15.400 --> 00:12:16.880
immer ja, also gerade diesen ganzen

00:12:16.880 --> 00:12:19.040
Typing, das Ding, also alles auf so Interfaces aufzubauen.

00:12:19.140 --> 00:12:20.840
Ja, also halt so Datenklassenbaus, wo halt

00:12:20.840 --> 00:12:22.940
relativ klar ist, was für Attribute das

00:12:22.940 --> 00:12:24.020
und welchen Datentypen sind.

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

00:12:26.840 --> 00:12:28.320
finde ich auch total super.

00:12:28.960 --> 00:12:30.680
Pydentic macht das natürlich. Also genau,

00:12:30.860 --> 00:12:32.820
was ich total, also gerade mit Fast

00:12:32.820 --> 00:12:34.880
API zusammen, was ich total super finde, ist,

00:12:34.940 --> 00:12:36.200
dass man halt einfach dann Objekte

00:12:36.200 --> 00:12:38.960
auch in serialisierter Form halt einfach hin und her schicken kann.

00:12:39.640 --> 00:12:40.840
Das ist total super mit Fast API.

00:12:40.940 --> 00:12:42.820
Bei Fast API kannst du einfach dann quasi von einem anderen

00:12:42.820 --> 00:12:44.560
Modell erben und lässt dann beispielsweise für

00:12:44.560 --> 00:12:46.780
dein Datenmarktmodell ein paar Spalten weg

00:12:46.780 --> 00:12:48.740
oder sowas und kannst es halt einfach dann als Modell einmal

00:12:48.740 --> 00:12:50.640
definieren und kannst es als Response-Modell ausgeben und

00:12:50.640 --> 00:12:52.800
das ist alles dann mit drin. Das ist schon

00:12:52.800 --> 00:12:54.560
sehr nice. Genau, und das

00:12:54.560 --> 00:12:56.020
funktioniert einfach alles so magisch.

00:12:56.220 --> 00:12:58.440
Oh, Apropos, fast ab, wie kennst du das SQL-Model?

00:12:59.040 --> 00:12:59.620
Ja, ja, ja.

00:12:59.860 --> 00:13:02.440
Das ist auch von Sebastian Ramirez und da

00:13:02.440 --> 00:13:04.620
macht er quasi einen Rapper noch um

00:13:04.620 --> 00:13:06.500
Pydentic und SQL-Alchemy rum

00:13:06.500 --> 00:13:08.620
und baut das alles zusammen in eine Klasse

00:13:08.620 --> 00:13:10.560
rein, dass man halt nicht mehr so viel duplicated

00:13:10.560 --> 00:13:12.700
Code hat und gleichzeitig irgendwie SQL-Alchemy-Modelle

00:13:12.700 --> 00:13:14.480
und Pydentic-Scheme nachschreiben muss.

00:13:14.680 --> 00:13:16.580
Ja, ja, das ist eine Frage, die ich mir, ich hab

00:13:16.580 --> 00:13:18.440
irgendwann, ich weiß nicht, wenn ich

00:13:18.440 --> 00:13:20.100
war es auch schon über ein Jahr her,

00:13:20.460 --> 00:13:22.120
als ich zum ersten Mal angefangen hab, so ein bisschen mit

00:13:22.120 --> 00:13:23.640
mit FastAPI rumzuspielen.

00:13:23.740 --> 00:13:25.280
Dann dachte ich so, okay, SQL Alchemy,

00:13:25.740 --> 00:13:27.960
schon ein schöner ORM, aber was halt doof ist,

00:13:28.000 --> 00:13:30.080
ist halt, dass man die Modelle immer doppelt definieren

00:13:30.080 --> 00:13:32.140
muss, einmal als SQL Alchemy

00:13:32.140 --> 00:13:33.920
Modell und dann halt nochmal als Pidentic

00:13:33.920 --> 00:13:35.980
Modell, damit man es rausländern kann.

00:13:36.360 --> 00:13:37.780
Und mit dem neuen TKM und

00:13:37.780 --> 00:13:38.800
sagst einfach TAB gleich 2.

00:13:39.500 --> 00:13:41.160
Und das ist wirklich echt angenehm.

00:13:41.320 --> 00:13:43.460
Ja, und da dachte ich schon, das ist aber blöd, dass man das

00:13:43.460 --> 00:13:45.620
zwei Mal machen muss und das ist jetzt weg.

00:13:45.700 --> 00:13:47.720
Und das würde ich auch gerne mal ausprobieren. Ich habe es bisher noch

00:13:47.720 --> 00:13:49.280
nicht hingekriegt, aber ich glaube, das mache ich demnächst mal.

00:13:49.280 --> 00:13:50.080
Ja, das ist sehr geil.

00:13:50.080 --> 00:13:52.080
weil ich glaube, ich fange jetzt

00:13:52.080 --> 00:13:54.240
ich nehme mir noch mal

00:13:54.240 --> 00:13:55.980
dieses Deployment-Dings, was ich mal auch

00:13:55.980 --> 00:13:57.400
das, wann habe ich das gebastelt?

00:13:58.400 --> 00:13:59.820
Das war auch ungefähr letztes Jahr

00:13:59.820 --> 00:14:02.080
um die Zeit, ein bisschen später

00:14:02.080 --> 00:14:04.100
nochmal vor und dann mache ich das

00:14:04.100 --> 00:14:05.440
nochmal mit FastAPI,

00:14:06.060 --> 00:14:08.000
Vue.js und vielleicht mal mit SQL-Model.

00:14:08.580 --> 00:14:09.720
Ja, also was

00:14:09.720 --> 00:14:12.020
mir noch so ein bisschen fehlt, ist das letzte, so ein paar von den

00:14:12.020 --> 00:14:13.680
SQL-Alchemy-Features, sowas wie Unique

00:14:13.680 --> 00:14:15.920
Constraints oder so, habe ich aber vielleicht auch noch

00:14:15.920 --> 00:14:18.040
nicht rausgefunden, wie das gut geht. Ich glaube, man kann das so mit

00:14:18.040 --> 00:14:21.160
SQL-Achemy-Extra-Quarks machen oder so, aber

00:14:21.160 --> 00:14:22.720
ja,

00:14:23.000 --> 00:14:25.360
das funktioniert noch nicht so ganz einwandfrei,

00:14:25.480 --> 00:14:27.000
aber da fehlt auch noch so ein bisschen Dokumentation,

00:14:27.080 --> 00:14:28.180
das ist noch gerade relativ frisch.

00:14:28.560 --> 00:14:29.860
Ja, das wird ja gerade erst neu.

00:14:29.860 --> 00:14:31.720
Genau, und ja, also Migrations dazu

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

00:14:34.100 --> 00:14:35.540
Einfach mit, wie machen wir das, mit

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

00:14:38.340 --> 00:14:39.760
Nicht Migrations, sondern Revisions,

00:14:39.900 --> 00:14:40.760
Revisionen oder so.

00:14:42.120 --> 00:14:43.600
Und das Coole ist, wenn man dann

00:14:43.600 --> 00:14:45.660
quasi sein Management macht mit Typer,

00:14:46.140 --> 00:14:46.860
auch von Sebastian,

00:14:46.860 --> 00:14:49.480
dann hat man quasi auch seine Management-Commands

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

00:14:50.820 --> 00:14:52.780
Ja, das verwende ich ja auch schon lange, das verwende ich jetzt auch

00:14:52.780 --> 00:14:54.180
seit über anderthalb Jahren schon.

00:14:54.300 --> 00:14:55.260
Ja, das verwende ich sogar auch mit Django.

00:14:56.060 --> 00:14:58.920
Ja, verwende ich auch mit Django, genau. Ich verwende das dann meistens mit

00:14:58.920 --> 00:14:59.720
Pultree zusammen.

00:15:01.420 --> 00:15:02.820
Und dann, genau,

00:15:02.920 --> 00:15:05.120
gibt es halt, da kann man Skripts definieren

00:15:05.120 --> 00:15:06.740
und dann sind sie halt

00:15:06.740 --> 00:15:08.520
ich meine, ich weiß noch nicht, ob das so hübsch ist,

00:15:09.040 --> 00:15:10.980
in so einem Commands-Py habe ich die dann

00:15:10.980 --> 00:15:11.660
und das ist eine Funktion.

00:15:11.800 --> 00:15:15.060
Also vor allem, du kannst das halt hinterher dann sogar in einem Notebook importieren

00:15:15.060 --> 00:15:16.780
und kannst halt dann bestimmte

00:15:16.780 --> 00:15:18.620
Sachen einzeln ausführen in deinem Notebook.

00:15:18.700 --> 00:15:20.640
Das heißt, du kannst die Management-Commands sowohl auf der Kommando-Teile

00:15:20.640 --> 00:15:22.560
als auch in deinem Notebook einfach laden und benutzen.

00:15:23.160 --> 00:15:24.840
Und das ist halt dann schon auch sehr cool,

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

00:15:26.660 --> 00:15:28.700
und den User-Create-Command

00:15:28.700 --> 00:15:30.440
hast du dann halt in den Commands zum Beispiel drin.

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

00:15:32.660 --> 00:15:34.640
inbound, aber das ist dann bei FASTA

00:15:34.640 --> 00:15:36.620
ein bisschen anders. Das ist schon cool.

00:15:36.860 --> 00:15:37.240
Das ist schon cool.

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

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

00:15:42.720 --> 00:15:43.080
besprechen.

00:15:44.460 --> 00:15:45.920
Da ging es halt genau über diese

00:15:45.920 --> 00:15:48.300
Shared-Memory-Sache. Aber vielleicht

00:15:48.300 --> 00:15:50.200
machen wir nochmal mit Python 3.10 weiter.

00:15:50.320 --> 00:15:51.680
Ich weiß nicht, wollen wir das schon inhaltlich nochmal

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

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

00:15:56.700 --> 00:15:57.920
Also man kann halt jetzt ein Match

00:15:57.920 --> 00:16:00.400
Statement und

00:16:00.400 --> 00:16:01.800
dann kann man halt irgendwie so

00:16:01.800 --> 00:16:04.440
Sachen auspacken und dann

00:16:04.440 --> 00:16:06.360
gucken, ob das da drauf matcht.

00:16:06.500 --> 00:16:08.560
Und dann führt man halt

00:16:08.560 --> 00:16:10.360
dann, es ist so ein bisschen wie ein Case-Statement auf

00:16:10.360 --> 00:16:11.640
Cooks

00:16:11.640 --> 00:16:14.200
Speed, ich weiß nicht.

00:16:14.200 --> 00:16:16.380
und Steelworks. Genau, und man

00:16:16.380 --> 00:16:18.320
kann auch noch so Guards setzen davor, das heißt

00:16:18.320 --> 00:16:20.180
man fällt dann halt da so durch und

00:16:20.180 --> 00:16:21.900
dann kann man halt da noch

00:16:21.900 --> 00:16:24.240
ein if hinterschreiben und dann, je nachdem, ob

00:16:24.240 --> 00:16:26.260
die Bedingung erfüllt ist oder nicht, dann matcht es da

00:16:26.260 --> 00:16:28.520
halt rein oder halt... Jetzt kannst du kurz sagen, was ist ein Guard?

00:16:29.320 --> 00:16:30.580
Genau, also wenn man jetzt sagen kann,

00:16:30.780 --> 00:16:31.220
wenn man sagt,

00:16:31.640 --> 00:16:34.400
wenn man jetzt

00:16:34.400 --> 00:16:35.300
die Bedingungen hat,

00:16:36.060 --> 00:16:38.400
sozusagen, und man

00:16:38.400 --> 00:16:40.200
möchte aber zusätzlich noch irgendwie, und dann sagt man noch,

00:16:40.260 --> 00:16:41.980
wenn irgendeine andere Bedingung erfüllt ist, dann kann man

00:16:41.980 --> 00:16:44.320
hintendran an den Ausdruckerfragen schreiben,

00:16:44.680 --> 00:16:46.500
if irgendwas x gleich y oder so

00:16:46.500 --> 00:16:48.440
und dann läuft das da rein und

00:16:48.440 --> 00:16:50.640
wenn das nicht so ist, dann läuft es halt weiter in den Default-File

00:16:50.640 --> 00:16:51.120
zum Beispiel.

00:16:51.940 --> 00:16:52.940
Okay, das ist der Gart.

00:16:53.640 --> 00:16:55.740
Genau, das ist halt auch nett, weil

00:16:55.740 --> 00:16:58.320
ich habe noch nicht wirklich tolle

00:16:58.320 --> 00:17:00.520
Anwendungsfälle dafür, ehrlich gesagt.

00:17:01.700 --> 00:17:02.460
Ja, es ist halt so ein bisschen zum

00:17:02.460 --> 00:17:04.140
Filtern von so Dingen. Das war irgendwie mit if,

00:17:04.180 --> 00:17:05.920
das ist halt irgendwie sehr verschachtelt, da muss man tausendmal

00:17:05.920 --> 00:17:08.240
den Code schreiben und in diesem Match-Case,

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

00:17:10.400 --> 00:17:12.380
zu kennen. So ein Command-Parser zum Beispiel kann man

00:17:12.380 --> 00:17:14.660
sehr schön mit Match-Case, glaube ich, abbilden

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

00:17:16.660 --> 00:17:18.420
Das könnte man wahrscheinlich deutlich einfacher

00:17:18.420 --> 00:17:20.400
hinkriegen. Oder was ich mir auch vorstellen kann,

00:17:20.460 --> 00:17:22.560
ist, dass wenn man halt so...

00:17:22.560 --> 00:17:24.600
Also du hast zum Beispiel so einen generischen Endpunkt

00:17:24.600 --> 00:17:26.100
für irgendwas, da kommt irgendwas rein.

00:17:26.780 --> 00:17:28.520
Ja, aber das ist eine gute Idee,

00:17:28.660 --> 00:17:29.080
ist das da.

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

00:17:32.380 --> 00:17:34.320
ein bestimmtes Format hat, dann mach ich

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

00:17:36.840 --> 00:17:38.380
Ja, genau. Also das

00:17:38.380 --> 00:17:40.080
Einzige, wo ich praktische Dinge gesehen habe,

00:17:40.080 --> 00:17:46.580
Ich meine, das kommt natürlich, also man müsste wahrscheinlich mal so in die Elixierwelt gucken oder so.

00:17:46.640 --> 00:17:49.640
Da ist das halt häufig eine Geschichte, die man da verwendet.

00:17:49.700 --> 00:17:51.420
Vielleicht gibt es da irgendwie ganz tolle Anwendungsfälle für.

00:17:52.400 --> 00:17:53.980
Du gehst häufig in Elixier, ich sehe immer das Buch in der Ecke.

00:17:54.000 --> 00:17:55.960
Ja, ich bin immer noch nicht so richtig weitergekommen.

00:17:59.000 --> 00:18:01.540
Manchmal muss man es halt nicht nur rumliegen haben, sondern auch mal reingucken.

00:18:02.060 --> 00:18:03.220
In einem Kopfkissen hilft am besten.

00:18:04.040 --> 00:18:04.460
Ja, genau.

00:18:05.600 --> 00:18:08.000
Oder halt irgendwie eine andere Sprache, die das halt kann.

00:18:08.000 --> 00:18:10.060
Ich lege mir auch immer ganz viel Gold in das Kopfkissen.

00:18:10.060 --> 00:18:10.380
Ja.

00:18:15.160 --> 00:18:15.600
Aber

00:18:15.600 --> 00:18:16.560
irgendwie

00:18:16.560 --> 00:18:20.120
genau, weil ich jetzt

00:18:20.120 --> 00:18:22.360
bei Python, also der einzige Fall, wo ich

00:18:22.360 --> 00:18:24.240
das Gefühl habe, da ist etwas, das ist so ähnlich

00:18:24.240 --> 00:18:25.900
und

00:18:25.900 --> 00:18:27.880
ist halt, wenn man jetzt in

00:18:27.880 --> 00:18:29.940
JavaScript im Frontend, da gibt es

00:18:29.940 --> 00:18:31.760
zum Beispiel React, so Redux oder so,

00:18:32.080 --> 00:18:33.060
so Eventsysteme hat

00:18:33.060 --> 00:18:34.820
und

00:18:34.820 --> 00:18:37.480
da hat man halt

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

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

00:18:41.460 --> 00:18:42.680
halt je nachdem,

00:18:43.440 --> 00:18:45.000
was da passiert ist,

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

00:18:47.300 --> 00:18:49.380
und dann splittet man das halt auf

00:18:49.380 --> 00:18:51.120
und ruft dann entsprechend Funktionen auf

00:18:51.120 --> 00:18:53.320
oder updatet irgendwie ein State oder macht halt irgendwas

00:18:53.320 --> 00:18:55.400
und im Kern von diesen

00:18:55.400 --> 00:18:57.360
Stores ist halt häufig ein großes Case

00:18:57.360 --> 00:18:58.220
Statement irgendwie

00:18:58.220 --> 00:19:01.240
und das könnte man dann halt, in Python könnte man das

00:19:01.240 --> 00:19:03.020
dann auch so machen und halt eleganter mit dem

00:19:03.020 --> 00:19:04.740
Structural Pattern Matching, das wäre jetzt so

00:19:04.740 --> 00:19:06.620
eine Anwendung, die mir einfallen würde, aber ansonsten

00:19:06.620 --> 00:19:08.700
Du musst ja natürlich jetzt alle If-Statements durch

00:19:08.700 --> 00:19:10.280
Match-Case ersetzen erstmal, um zu testen.

00:19:11.000 --> 00:19:12.540
Das Problem ist halt auch, so wirklich

00:19:12.540 --> 00:19:13.780
einfach nur so

00:19:13.780 --> 00:19:16.760
verwenden ist halt auch, weil man hat ja oft

00:19:16.760 --> 00:19:18.780
das Problem, dass man einen Code hat, der auch noch auf älteren

00:19:18.780 --> 00:19:20.140
Python-Versionen laufen soll und dann

00:19:20.140 --> 00:19:22.620
man kann das ja nicht einfach so, also man kann das

00:19:22.620 --> 00:19:24.600
in irgendeinem Projekt verwenden, das

00:19:24.600 --> 00:19:26.660
komplett neu ist oder so, das man in Kontrolle hat, aber

00:19:26.660 --> 00:19:28.640
wenn das irgendwo, wenn man jetzt zum Beispiel eine Library schreibt,

00:19:28.740 --> 00:19:29.960
dann kann man das nicht gut verwenden, weil

00:19:29.960 --> 00:19:32.720
dann müsste man sagen, geht erst ab 3.10 und

00:19:32.720 --> 00:19:33.560
Das ist dann halt Pech.

00:19:34.740 --> 00:19:35.740
Ja gut, aber

00:19:35.740 --> 00:19:38.780
auch ein Ding, was ich daran

00:19:38.780 --> 00:19:39.960
so ein bisschen blöd finde, ist

00:19:39.960 --> 00:19:43.060
wenn man das momentan irgendwo reinschreibt

00:19:43.060 --> 00:19:45.180
und lässt

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

00:19:47.540 --> 00:19:48.280
Black mag das nicht?

00:19:48.400 --> 00:19:49.240
Nicht bei 3.10?

00:19:49.640 --> 00:19:50.000
Nein.

00:19:51.660 --> 00:19:54.340
Das heißt

00:19:54.340 --> 00:19:56.560
Autoformat

00:19:56.560 --> 00:19:58.060
funktioniert nicht mehr, wenn man

00:19:58.060 --> 00:19:59.560
Das kann ja gar nicht sein.

00:20:01.240 --> 00:20:02.260
Das muss doch schon gefixt sein.

00:20:02.340 --> 00:20:03.620
Da muss doch schon ein Pull-Request irgendwo zu geben.

00:20:03.620 --> 00:20:05.420
Ja, ja, das kommt bestimmt dann irgendwann, aber

00:20:05.420 --> 00:20:06.240
momentan jetzt halt noch nicht.

00:20:06.760 --> 00:20:08.180
Okay, muss ich mir mal anschauen.

00:20:08.880 --> 00:20:11.400
Auch, ah, das war das Python Bytes Podcast,

00:20:11.540 --> 00:20:13.200
ich weiß nicht genau, das ich gehört habe. Es gibt einen,

00:20:13.460 --> 00:20:15.380
fand ich auch schön, man hat ja immer so das Problem,

00:20:15.460 --> 00:20:17.520
wenn man Sachen, Basen umstellt

00:20:17.520 --> 00:20:17.900
auf

00:20:17.900 --> 00:20:21.380
Black, dass das dann halt so

00:20:21.380 --> 00:20:21.880
riesige

00:20:21.880 --> 00:20:25.400
Diffs erzeugt und

00:20:25.400 --> 00:20:27.460
das ist halt irgendwie kacke, weil man dann halt nicht mehr sehen kann,

00:20:27.980 --> 00:20:29.220
wann irgendwas passiert ist, weil

00:20:29.220 --> 00:20:31.360
man landet immer bei diesem riesen Änderungsding.

00:20:31.360 --> 00:20:31.540
Ja.

00:20:31.540 --> 00:20:33.180
Da gibt es

00:20:33.180 --> 00:20:35.140
ein Projekt, das nennt sich, glaube ich, Darker

00:20:35.140 --> 00:20:36.600
Darker? Ja

00:20:36.600 --> 00:20:39.560
Und das macht quasi Black, aber immer nur

00:20:39.560 --> 00:20:40.360
für die Änderungen, die man

00:20:40.360 --> 00:20:43.400
Also wenn man einen Code ändert, dann macht es sozusagen

00:20:43.400 --> 00:20:45.500
das gleiche wie Black, aber nur auf dem Diff

00:20:45.500 --> 00:20:47.520
So dass es halt immer so

00:20:47.520 --> 00:20:48.940
dunkler wird mit der Zeit, aber

00:20:48.940 --> 00:20:51.660
Das heißt, es ändert

00:20:51.660 --> 00:20:53.300
nur Sachen, die man eh angefasst hat und das war nicht auch

00:20:53.300 --> 00:20:55.060
eine nette Idee, eigentlich eine völlig offensichtliche Idee

00:20:55.060 --> 00:20:56.320
Aber ja

00:20:56.320 --> 00:20:57.020
Ja, okay

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

00:20:59.240 --> 00:21:00.880
Genau

00:21:00.880 --> 00:21:03.860
Structural

00:21:03.860 --> 00:21:06.020
Pattern Matching, was haben wir denn noch?

00:21:06.220 --> 00:21:07.940
Ja, also die Disutiles sind deprecated.

00:21:08.360 --> 00:21:10.080
Ja, oh, das ist mir auch

00:21:10.080 --> 00:21:11.960
und genau,

00:21:12.140 --> 00:21:14.040
Disutiles sind deprecated, da ist auch ein Ding drin,

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

00:21:16.140 --> 00:21:17.440
dann, die ich so mache,

00:21:19.240 --> 00:21:20.380
mal zu gucken,

00:21:20.460 --> 00:21:21.520
ob das unter 3.10 auch läuft

00:21:21.520 --> 00:21:24.060
und da gibt es eine Abhängigkeit, die hat

00:21:24.060 --> 00:21:24.560
Wagtail.

00:21:26.420 --> 00:21:27.880
Das schöne Wagtail, ja,

00:21:27.880 --> 00:21:29.040
das liebe ich auch so sehr.

00:21:29.040 --> 00:21:31.560
Das fängt ab von L18N,

00:21:31.640 --> 00:21:34.180
das ist irgendwie das Paket.

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

00:21:37.600 --> 00:21:40.180
Ja, nee, das macht so leicht was an. Ich weiß, was es genau macht, weiß ich gar nicht.

00:21:40.680 --> 00:21:42.260
Aber das ist halt so ein Ding, das ist halt

00:21:42.260 --> 00:21:43.860
irgendwie

00:21:43.860 --> 00:21:45.400
zwei Stars auf GitHub

00:21:45.400 --> 00:21:47.020
von irgendjemandem

00:21:47.020 --> 00:21:49.720
und Wagtail hängt davon ab.

00:21:50.580 --> 00:21:52.240
Und das Ding

00:21:52.240 --> 00:21:53.640
verwendet im Setup-PY-Skript

00:21:53.640 --> 00:21:56.120
irgendwo ein BDist

00:21:56.120 --> 00:21:58.000
Wininst oder sowas

00:21:58.000 --> 00:22:00.420
und das ist in Python 3.8 defrecated worden

00:22:00.420 --> 00:22:01.880
und in 3.10 ist es rausgeflogen.

00:22:02.660 --> 00:22:04.640
Und deswegen baut es nicht mehr.

00:22:05.180 --> 00:22:06.760
Das heißt, man kann unter 3.10

00:22:06.760 --> 00:22:08.620
Python 3.10 Wagtail nicht mehr installieren.

00:22:11.660 --> 00:22:12.760
Das ist halt so ein bisschen

00:22:12.760 --> 00:22:13.320
Kacke.

00:22:13.960 --> 00:22:16.320
Und ja, das ist halt

00:22:16.320 --> 00:22:18.480
ja, ich habe da mal

00:22:18.480 --> 00:22:19.440
ein Full-Request gemacht, mal gucken.

00:22:20.400 --> 00:22:21.320
Aber das ist halt

00:22:21.320 --> 00:22:24.540
ja, schon ein bisschen

00:22:24.540 --> 00:22:26.340
vielleicht ist diese Abhängigkeit nicht so

00:22:26.340 --> 00:22:27.680
toll.

00:22:27.680 --> 00:22:30.560
Da wo wir so blöden Abhängigkeiten sind

00:22:30.560 --> 00:22:32.480
mit Python 3.10 kaputt gehen, da müsste ich jetzt noch mal

00:22:32.480 --> 00:22:34.100
auf das PyWin32 Problem gehen, weil

00:22:34.100 --> 00:22:36.680
PyWin32 ist unter Windows relativ wichtig,

00:22:36.840 --> 00:22:38.500
weil es halt relativ oft gebraucht wird

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

00:22:40.580 --> 00:22:42.560
Das heißt, ohne PyWin32 geht viel

00:22:42.560 --> 00:22:43.860
von Python Wheels bauen nicht.

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

00:22:47.040 --> 00:22:48.640
Und die Abhängigkeit, die viele Projekte

00:22:48.640 --> 00:22:50.540
haben, ist sowas wie PyWin32-301.

00:22:51.800 --> 00:22:52.600
Das gibt es aber jetzt

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

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

00:22:56.640 --> 00:22:58.400
nicht richtig bei Python ausgeliefert. Ich glaube, der

00:22:58.400 --> 00:22:59.500
Maintainer ist auch so ein bisschen,

00:23:00.320 --> 00:23:02.420
ich sage mal, vorsichtig sperrig, was

00:23:02.420 --> 00:23:03.460
das angeht.

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

00:23:06.440 --> 00:23:08.600
halt, dass dann keine Projekte mehr installieren

00:23:08.600 --> 00:23:20.120
oder Pultree geht nicht mehr oder so Und das ist halt extrem f Leute die Windows entwickeln Und was man aber machen kann also ich habe einen kleinen Workaround gefunden man installiert einfach Python 32 301 also auch irgendwie komische Varianten

00:23:20.300 --> 00:23:23.200
die Versionen gehen von 200 auf

00:23:23.200 --> 00:23:24.500
301, dann kommt dann

00:23:24.500 --> 00:23:26.220
301.1, warum?

00:23:26.780 --> 00:23:28.740
Na gut, vielleicht ist irgendwann so manche Version

00:23:28.740 --> 00:23:30.880
reingeflogen, ich weiß es nicht, es ist auf jeden Fall

00:23:30.880 --> 00:23:32.840
seltsam und naja, man kann

00:23:32.840 --> 00:23:34.360
es 301 manuell installieren

00:23:34.360 --> 00:23:36.820
und dann, das ist ein bisschen hacky,

00:23:36.820 --> 00:23:37.900
einfach in das

00:23:37.900 --> 00:23:40.720
Side-Packages-Verzeichnis gehen und im Manifest

00:23:40.720 --> 00:23:42.840
die Version von 301.1 auf 301

00:23:42.840 --> 00:23:44.440
ändern und dann denkt

00:23:44.440 --> 00:23:46.800
tatsächlich unter den Folien-Namen umbenennen

00:23:46.800 --> 00:23:48.340
auch von 301.1 auf 301

00:23:48.340 --> 00:23:50.700
und dann denkt tatsächlich PIP,

00:23:50.880 --> 00:23:52.620
dass das vernünftig installiert ist und fragt nicht mehr

00:23:52.620 --> 00:23:54.660
und es funktioniert alles. Und so

00:23:54.660 --> 00:23:56.760
kommt man halt drumherum, aber das ist halt schon sehr,

00:23:56.900 --> 00:23:58.720
sehr hässlich und es gibt auch da wohl ein paar

00:23:58.720 --> 00:24:00.660
Pull-Requests, aber anders gehen

00:24:00.660 --> 00:24:02.660
bestimmte Sachen da leider nicht zu fixen, das ist

00:24:02.660 --> 00:24:03.240
ein bisschen blöd.

00:24:03.760 --> 00:24:05.860
Ja, also

00:24:05.860 --> 00:24:08.180
oder das sind, ich meine...

00:24:08.180 --> 00:24:09.800
Ja, wenn es so ein wichtiges Paket gibt,

00:24:09.880 --> 00:24:11.780
wo dann so ein Maintaining auf einmal nicht mehr stattfindet und so,

00:24:11.800 --> 00:24:13.140
das ist schon ein Anstrengung.

00:24:14.260 --> 00:24:14.520
Ja,

00:24:15.800 --> 00:24:17.640
das ist schon

00:24:17.640 --> 00:24:19.880
fies. Also mir ist auch

00:24:19.880 --> 00:24:21.300
wieder jetzt bei dem Upgrade,

00:24:21.780 --> 00:24:24.160
also einmal im Jahr fällt einem das dann auf,

00:24:24.300 --> 00:24:26.000
mindestens, wenn es halt eine neue

00:24:26.000 --> 00:24:27.840
Python-Version gibt. Aber bei den Miner-Versions

00:24:27.840 --> 00:24:29.980
oder Updates von Python fällt es mir auch häufiger auf,

00:24:30.040 --> 00:24:31.440
dass es halt alles noch echt ziemlich

00:24:31.440 --> 00:24:33.900
wild ist, weil also auch

00:24:33.900 --> 00:24:35.960
Poetry hat da so Schwierigkeiten.

00:24:36.060 --> 00:24:37.800
Das Lustige ist halt, wenn man Ragtale

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

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

00:24:41.860 --> 00:24:43.900
weil ich es per Poetry installiert habe und Poetry

00:24:43.900 --> 00:24:45.700
macht halt was anderes als PIP.

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

00:24:47.980 --> 00:24:49.940
Und ja, aber das macht es halt

00:24:49.940 --> 00:24:51.620
und es guckt sich halt dann teilweise die

00:24:51.620 --> 00:24:52.680
Setup UI an und so.

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

00:24:56.000 --> 00:24:57.860
Wenn dann Reel ist, dann installiert

00:24:57.860 --> 00:24:59.400
es halt stumpf das Reel, das funktioniert dann.

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

00:25:02.500 --> 00:25:03.880
Und ja,

00:25:03.900 --> 00:25:06.000
Poetry macht das halt nicht und dann geht es halt schief,

00:25:06.120 --> 00:25:08.060
weil dann irgendein Import nicht mehr funktioniert oder so

00:25:08.060 --> 00:25:10.020
und Poetry macht sowieso komische Sachen teilweise.

00:25:10.460 --> 00:25:11.760
Im Moment, ich bin auch so ein bisschen, also die

00:25:11.760 --> 00:25:13.840
Version 1.2 habe ich gesehen, ist gar nicht so schlecht,

00:25:13.920 --> 00:25:15.600
die haben einfach umbestellt das Installation, das heißt,

00:25:16.040 --> 00:25:17.960
ich muss auch in den Docker-Files überall von Get-Poetry

00:25:17.960 --> 00:25:19.960
auf Install-Poetry umstellen und so und

00:25:19.960 --> 00:25:21.920
dann funktioniert es aber auch noch nicht so richtig überall

00:25:21.920 --> 00:25:23.920
und dann das Update auf 1.2,

00:25:24.060 --> 00:25:25.940
also es gibt ja so ein Safe-Update, da mit der neuesten Version,

00:25:26.040 --> 00:25:27.800
da kann man jetzt halt Safe-Update machen, muss nicht mehr

00:25:27.800 --> 00:25:29.460
irgendwie jedes Mal neu das

00:25:29.460 --> 00:25:31.820
vom GitHub-Input ziehen. Das funktioniert schon mal ganz gut auch, ja.

00:25:31.820 --> 00:25:34.000
Ja, aber das funktioniert halt dann noch nicht so richtig.

00:25:34.200 --> 00:25:35.780
Und dass die Preview-Versionen nicht schützen,

00:25:35.900 --> 00:25:37.060
wenn man die ausprobiert, einfach ab und so.

00:25:37.720 --> 00:25:37.960
Naja.

00:25:39.340 --> 00:25:40.620
Ja, also ich muss sagen,

00:25:40.820 --> 00:25:43.520
Poetry ärgert mich in letzter Zeit auch irgendwie.

00:25:44.020 --> 00:25:44.860
Ich verstehe gar nicht, warum.

00:25:44.940 --> 00:25:47.060
Zwischendurch lief es wirklich gut, einwandfrei.

00:25:47.200 --> 00:25:48.860
Irgendwer hat irgendwas kaputtgecodet.

00:25:49.600 --> 00:25:50.660
Ja, ich weiß es nicht so genau.

00:25:50.960 --> 00:25:53.860
Aber ich bin ja bereit anzuerkennen,

00:25:53.960 --> 00:25:55.620
dass das halt auch nicht so ein ganz einfaches Problem ist.

00:25:56.300 --> 00:25:57.700
Aber irgendwie läuft es nicht rund.

00:25:57.700 --> 00:25:59.060
Und jetzt auch nach dem Update.

00:25:59.060 --> 00:25:59.720
und also

00:25:59.720 --> 00:26:02.980
natürlich, so die üblichen Kandidaten, das funktioniert alles

00:26:02.980 --> 00:26:04.200
wieder nicht, also

00:26:04.200 --> 00:26:06.940
ich glaube auch

00:26:06.940 --> 00:26:08.820
Poetry hatte mit 3.10 auch Probleme

00:26:08.820 --> 00:26:11.120
irgendwie, da hat auch irgendwas nicht so richtig funktioniert,

00:26:11.500 --> 00:26:12.860
aber halt NumPy und so, das

00:26:12.860 --> 00:26:13.900
funktioniert natürlich auch nicht

00:26:13.900 --> 00:26:16.960
und ich meine, gut kann man verstehen, es dauert

00:26:16.960 --> 00:26:18.820
ein bisschen, bis da die Wheels und die

00:26:18.820 --> 00:26:19.860
Binary Star sind, aber

00:26:19.860 --> 00:26:22.840
ja, also

00:26:22.840 --> 00:26:24.920
so richtig rund ist das alles irgendwie

00:26:24.920 --> 00:26:26.820
nicht, ja. Ich war ja meistens

00:26:26.820 --> 00:26:28.940
bei wichtigeren Sachen auf 3.1 oder 3.2

00:26:28.940 --> 00:26:29.500
oder sowas.

00:26:31.120 --> 00:26:32.140
Ja, aber ich meine,

00:26:33.020 --> 00:26:35.220
vielleicht sollte man tatsächlich hingehen

00:26:35.220 --> 00:26:36.960
und das einfach vorher schon mal ausprobieren

00:26:36.960 --> 00:26:38.820
und dann gucken, wo es kracht und dann da halt versuchen,

00:26:38.900 --> 00:26:41.020
so ein bisschen zu helfen. Ich meine, das ist

00:26:41.020 --> 00:26:42.500
wahrscheinlich irgendwie hilfreicher als wenn man nur meckert.

00:26:43.600 --> 00:26:44.640
Ja, ja, ja.

00:26:44.920 --> 00:26:45.420
Eigentlich schon.

00:26:46.220 --> 00:26:48.660
Ich muss das eigentlich mal irgendwo hinschreiben.

00:26:48.920 --> 00:26:49.620
Aber naja.

00:26:51.400 --> 00:26:52.180
Ja, jetzt kommt Werbung.

00:26:52.180 --> 00:26:52.780
Dö, dö, dö, dö.

00:26:53.520 --> 00:26:56.480
Was haltet ihr eigentlich von Werbung?

00:26:56.540 --> 00:26:56.680
Hier.

00:26:58.940 --> 00:27:03.840
3.11 haben wir noch was?

00:27:03.940 --> 00:27:04.300
3.11?

00:27:04.620 --> 00:27:05.900
Weil das ist ja 3.11

00:27:05.900 --> 00:27:07.520
Ja, 3.11 ist

00:27:07.520 --> 00:27:09.740
Main-Branche bei Python

00:27:09.740 --> 00:27:11.000
Ich glaube,

00:27:11.880 --> 00:27:13.540
was da ganz interessant, ich weiß es gar nicht,

00:27:13.660 --> 00:27:15.840
da gibt es auch Verbesserungen, wenn man

00:27:15.840 --> 00:27:16.700
jetzt Fehler hat

00:27:16.700 --> 00:27:19.780
Weitere, genau

00:27:19.780 --> 00:27:21.520
aber es gibt auch noch, es soll jetzt

00:27:21.520 --> 00:27:23.600
mit 3.11, was da, habe ich jetzt letztens

00:27:23.600 --> 00:27:26.020
irgendwie, gab es auch ein Podcast-Interview

00:27:26.020 --> 00:27:26.840
mit Guido

00:27:26.840 --> 00:27:29.420
zu, was denn jetzt so alles

00:27:29.420 --> 00:27:31.860
ansteht, zu Performance-Optimierung.

00:27:32.080 --> 00:27:33.600
Oh, da gab es auch mal ein schönes Artikel,

00:27:33.820 --> 00:27:35.720
ein Blogpost von

00:27:35.720 --> 00:27:36.980
Mark Shannon zu einem Interview.

00:27:37.300 --> 00:27:39.380
Ja, Mark Shannon, genau, der hat

00:27:39.380 --> 00:27:41.600
beschäftigt sich mit der auch schon wahnsinnig lange,

00:27:41.840 --> 00:27:43.180
aber den habe ich nicht gesehen, den musste ich mir

00:27:43.180 --> 00:27:44.620
mal schicken, weil dann...

00:27:44.620 --> 00:27:46.200
Ja, genau, den haben die schon genutzt.

00:27:48.760 --> 00:27:49.560
Jedenfalls, genau,

00:27:50.140 --> 00:27:51.820
genau, in die

00:27:51.820 --> 00:27:53.580
Richtung geht das halt und

00:27:53.580 --> 00:27:55.760
da wird jetzt viel dran gearbeitet

00:27:55.760 --> 00:27:58.380
und da gibt es jetzt erstmal so Basisgeschichten

00:27:58.380 --> 00:28:00.100
für in 3.11. Bis das

00:28:00.100 --> 00:28:02.020
sich wirklich auswirkt, wird das alles noch ein bisschen

00:28:02.020 --> 00:28:03.460
dauern.

00:28:05.160 --> 00:28:05.800
Aber was halt

00:28:05.800 --> 00:28:07.780
dann in 3.11, glaube ich, also

00:28:07.780 --> 00:28:09.860
wird es auf jeden Fall die Infrastruktur dafür geben,

00:28:10.040 --> 00:28:11.740
dass halt Funktionen sich

00:28:11.740 --> 00:28:14.000
zum Beispiel, also eines der Probleme bei Python ist

00:28:14.000 --> 00:28:15.020
halt Funktionen langsam

00:28:15.020 --> 00:28:17.600
aus diversen Gründen.

00:28:17.860 --> 00:28:19.820
Also einer der Gründe ist halt, dass

00:28:19.820 --> 00:28:21.660
sie halt sehr, dass man ja nicht

00:28:21.660 --> 00:28:23.720
einfach, wenn man jetzt sagt, eine Funktion, die

00:28:23.720 --> 00:28:25.460
nur zwei Zahlen addiert oder so,

00:28:25.460 --> 00:28:55.440
und Jochen unterhalten sich über die Programmiersprache Python

00:28:55.460 --> 00:28:57.580
jetzt. Der Interpreter könnte zum Beispiel bemerken,

00:28:58.120 --> 00:28:59.460
okay, jetzt diese Funktion ist tausendmal

00:28:59.460 --> 00:29:01.360
aufgerufen worden und zwar immer nur mit Integer.

00:29:01.900 --> 00:29:03.320
Jetzt ersetze ich die Funktion,

00:29:03.540 --> 00:29:05.260
die da aufgerufen wurde, halt durch

00:29:05.260 --> 00:29:06.340
eine

00:29:06.340 --> 00:29:09.240
schnellere Funktion,

00:29:09.540 --> 00:29:11.200
sozusagen, also anderer By-Code,

00:29:11.540 --> 00:29:13.200
der halt nur Integer

00:29:13.200 --> 00:29:15.100
macht, sonst nichts.

00:29:15.840 --> 00:29:16.940
Und das geht dann halt viel schneller.

00:29:17.620 --> 00:29:19.680
Und das Problem

00:29:19.680 --> 00:29:21.380
dabei, was das halt schwierig macht, ist,

00:29:21.640 --> 00:29:23.380
dass, wenn jetzt das

00:29:23.380 --> 00:29:25.280
schief geht, wenn jetzt plötzlich doch ein Float reinkommt

00:29:25.280 --> 00:29:27.420
oder so, dann muss es irgendwie

00:29:27.420 --> 00:29:29.340
wieder, muss es

00:29:29.340 --> 00:29:31.160
trotzdem funktionieren und wenn das

00:29:31.160 --> 00:29:32.740
häufiger passiert, weil das dann besonders

00:29:32.740 --> 00:29:34.760
ätzend ist, performancetechnisch,

00:29:35.140 --> 00:29:37.160
muss dann halt auch diese Optimierung wieder rückgängig

00:29:37.160 --> 00:29:39.240
gemacht werden, wenn halt sozusagen der normale Bytecode

00:29:39.240 --> 00:29:40.960
besser gewesen wäre. Oder ja genau, dann die

00:29:40.960 --> 00:29:43.080
Vorwärtsumme cached ein. Das macht alles ziemlich

00:29:43.080 --> 00:29:45.260
kompliziert und dann eine Geschichte, die mir nicht so klar war,

00:29:45.300 --> 00:29:47.200
das fand ich auch interessant, ist, dass halt

00:29:47.200 --> 00:29:49.280
die Frame-Objekte gibt

00:29:49.280 --> 00:29:51.160
in Python, also wenn man eine Funktion

00:29:51.160 --> 00:29:53.260
aufruft, dann wird erstmal so ein Frame-Objekt

00:29:53.260 --> 00:29:54.280
erstellt. Was ist ein Frame?

00:29:54.280 --> 00:29:55.380
Oh je

00:29:55.380 --> 00:29:57.500
Ja, das muss man auch erklären

00:29:57.500 --> 00:30:00.300
Ich würde sagen, ja, letztlich so ein Stackframe

00:30:00.300 --> 00:30:02.460
das war dann schon sehr maschinennah

00:30:02.460 --> 00:30:05.300
Ein Stackframe?

00:30:05.600 --> 00:30:08.140
Ja, also letztlich in Python ist das

00:30:08.140 --> 00:30:09.800
Frame-Objekt sowas, da steht halt drin

00:30:09.800 --> 00:30:11.920
welche Globals es gibt, welche Locals es gibt

00:30:11.920 --> 00:30:14.180
was das

00:30:14.180 --> 00:30:16.240
Code-Objekt ist, so Zeugs

00:30:16.240 --> 00:30:18.120
Also quasi der aktuelle Namespace quasi

00:30:18.120 --> 00:30:20.720
das dickt in dem quasi drinsteht, was alle gerade aktuell ist

00:30:20.720 --> 00:30:22.140
Also sozusagen

00:30:22.140 --> 00:30:24.040
alles was man braucht halt, um so diese Funktion

00:30:24.040 --> 00:30:24.660
auszuführen.

00:30:26.600 --> 00:30:28.340
Und es ist ja auch gut,

00:30:28.400 --> 00:30:29.480
das zu haben. Wenn man jetzt zum Beispiel

00:30:29.480 --> 00:30:32.300
Code debuggt oder so, dann ist das halt total praktisch,

00:30:32.360 --> 00:30:34.260
wenn man das halt direkt alles

00:30:34.260 --> 00:30:36.120
nachgucken kann und wenn man es auch ändern kann und so.

00:30:36.920 --> 00:30:37.900
Auf der anderen Seite, wenn man jetzt

00:30:37.900 --> 00:30:40.320
Code wirklich ausgeführt ist, dann braucht man das nicht unbedingt.

00:30:41.520 --> 00:30:42.280
Und die Dinger

00:30:42.280 --> 00:30:43.820
werden halt auch dynamisch alloziert,

00:30:44.000 --> 00:30:46.080
also sowieso alles dynamisch und dann hat man halt

00:30:46.080 --> 00:30:47.840
den ganzen Heap voll, wenn man jetzt viele

00:30:47.840 --> 00:30:49.900
unterschiedliche Funktionen aufruft, hat man jetzt den ganzen

00:30:49.900 --> 00:30:51.320
Heap voll gesprengelt mit diesen Dingern.

00:30:52.380 --> 00:30:53.740
Und das macht halt alles irgendwie langsam.

00:30:54.040 --> 00:30:55.960
und jetzt also eine Optimierung,

00:30:56.180 --> 00:30:57.840
ich weiß nicht, ob das kann auch sein, dass das eine von denen war,

00:30:57.900 --> 00:30:59.380
die Marc Schender vorgeschlagen hat,

00:30:59.880 --> 00:31:01.460
ist halt zu sagen, man allociert irgendwie

00:31:01.460 --> 00:31:03.760
erstmal eine ganze Reihe von den Dingern, packt die irgendwo hin

00:31:03.760 --> 00:31:05.440
und dann nimmt man die halt und nicht nur

00:31:05.440 --> 00:31:07.280
nicht so komplette Objekte, sondern

00:31:07.280 --> 00:31:09.580
für, dass das halt, wenn das ausgeführt werden soll,

00:31:09.980 --> 00:31:11.680
dann sind das halt einfach nur Structs und

00:31:11.680 --> 00:31:13.640
die liegen da an einer bestimmten Stelle und die müssen

00:31:13.640 --> 00:31:15.880
das wird, und das ist halt

00:31:15.880 --> 00:31:17.580
im Speicher dann lokal und keine Ahnung,

00:31:17.700 --> 00:31:19.680
also seine Performance ist besser und nur wenn man

00:31:19.680 --> 00:31:21.840
es debugt, verwendet man halt

00:31:21.840 --> 00:31:23.180
diese vollen

00:31:23.180 --> 00:31:26.240
Frame-Objekte, die man sonst normalerweise immer hat.

00:31:26.320 --> 00:31:26.980
Und das ist Instruct?

00:31:28.200 --> 00:31:30.420
Ja, das ist jetzt so eine C-Spezialität.

00:31:31.420 --> 00:31:32.360
Eine Datenstruktur

00:31:32.360 --> 00:31:33.000
quasi mit

00:31:33.000 --> 00:31:35.700
mehreren, die halt

00:31:35.700 --> 00:31:36.700
aus mehreren Sachen besteht.

00:31:37.760 --> 00:31:39.960
Man hat die grundlegenden

00:31:39.960 --> 00:31:41.960
Datentypen, sowas wie Integer, Float,

00:31:43.160 --> 00:31:44.720
Charakter

00:31:44.720 --> 00:31:46.400
und

00:31:46.400 --> 00:31:47.540
Instruct kann dann zum Beispiel

00:31:47.540 --> 00:31:50.080
ein Character-Array haben

00:31:50.080 --> 00:31:52.020
und ein Float und ein Int oder so.

00:31:52.020 --> 00:31:53.820
und dann der, genau.

00:31:54.600 --> 00:31:56.200
Also ein komplexerer Datentyp

00:31:56.200 --> 00:31:58.300
in C quasi, sowas wie ein Base-Model.

00:31:59.420 --> 00:31:59.700
Ja.

00:32:01.620 --> 00:32:02.580
Ist halt kein Objekt,

00:32:02.820 --> 00:32:04.800
aber auch die Art,

00:32:04.880 --> 00:32:06.100
wie man dann Objekte in C implementiert.

00:32:07.680 --> 00:32:08.980
Ja, da braucht man halt noch

00:32:08.980 --> 00:32:10.560
Pointe auf die Funktionen, die das Ding hat.

00:32:11.320 --> 00:32:12.160
Ja, genau.

00:32:13.100 --> 00:32:14.100
Aber genau,

00:32:14.240 --> 00:32:16.880
was ich auch noch interessant fand,

00:32:16.940 --> 00:32:18.460
so an Metageschichten zu dieser

00:32:18.460 --> 00:32:19.960
Performance-Optimierungsgeschichte ist halt,

00:32:19.960 --> 00:32:21.180
dass

00:32:21.180 --> 00:32:23.760
wie du da so ein bisschen drüber erzählt hast

00:32:23.760 --> 00:32:25.420
was, ich muss den

00:32:25.420 --> 00:32:27.820
Link auf die Episode, muss ich auch nochmal in die

00:32:27.820 --> 00:32:29.720
Show Notes packen, was

00:32:29.720 --> 00:32:31.560
bisher immer so schief gelaufen ist, so

00:32:31.560 --> 00:32:33.580
PyPy hat ja nicht so richtig, muss man leider sagen

00:32:33.580 --> 00:32:35.180
wahrscheinlich nicht so richtig funktioniert

00:32:35.180 --> 00:32:37.840
und

00:32:37.840 --> 00:32:39.260
der Grund ist halt, dass

00:32:39.260 --> 00:32:41.360
aus einer Perspektive

00:32:41.360 --> 00:32:43.000
dass sie

00:32:43.000 --> 00:32:44.940
haben halt ein Problem gelöst

00:32:44.940 --> 00:32:47.620
aber das

00:32:47.620 --> 00:32:49.660
schwierige Problem halt nicht und das ist

00:32:49.660 --> 00:32:52.280
wie kriegt man das so hin, dass es schneller wird

00:32:52.280 --> 00:32:53.740
plus, dass die ganzen

00:32:53.740 --> 00:32:56.280
C-Extensions halt noch funktionieren

00:32:56.280 --> 00:32:57.540
das ist ja auch immer genau das Problem

00:32:57.540 --> 00:32:58.640
PyPi

00:32:58.640 --> 00:33:00.380
ist halt natürlich

00:33:00.380 --> 00:33:02.700
so ein bisschen Just-in-Time

00:33:02.700 --> 00:33:04.900
wobei kann man auch nicht so richtig sagen

00:33:04.900 --> 00:33:07.720
Just-in-Time-Compilation ist halt auch so ein schwieriger Begriff

00:33:07.720 --> 00:33:11.480
aber es macht halt irgendwie

00:33:11.480 --> 00:33:13.260
dein Python

00:33:13.260 --> 00:33:15.580
die Ausführung von deinem Python-Code deutlich schneller

00:33:15.580 --> 00:33:17.360
nur das Problem ist halt

00:33:17.360 --> 00:33:19.500
die ganzen C-Geschichten funktionieren

00:33:19.500 --> 00:33:21.600
halt nicht mehr. Und das ist

00:33:21.600 --> 00:33:23.540
natürlich ein großes Problem, weil das ist halt

00:33:23.540 --> 00:33:24.540
das, wo du normalerweise deine

00:33:24.540 --> 00:33:27.420
Performance-Gewinne herbekommst. Also wenn ich halt

00:33:27.420 --> 00:33:29.380
Sachen in NumPy mache, dann statt in

00:33:29.380 --> 00:33:31.460
mit Python-Listen

00:33:31.460 --> 00:33:33.160
oder so, dann ist das natürlich viel, viel schneller.

00:33:34.120 --> 00:33:35.220
Und ja,

00:33:35.540 --> 00:33:37.600
das geht dann halt so nicht mehr,

00:33:38.020 --> 00:33:39.600
wenn man halt PyPy verwendet.

00:33:40.080 --> 00:33:41.160
Daher macht das alles

00:33:41.160 --> 00:33:43.000
keinen großen Sinn. Und

00:33:43.000 --> 00:33:44.840
diese Geschichten sind halt nie,

00:33:45.020 --> 00:33:47.120
vielleicht auch einfach nicht lösbar und daher

00:33:47.120 --> 00:33:48.560
ist das einfach nicht funktioniert.

00:33:49.500 --> 00:33:51.520
und sie haben halt große Schwierigkeiten, irgendwie

00:33:51.520 --> 00:33:53.320
up-to-date zu bleiben,

00:33:53.520 --> 00:33:55.220
weil sich natürlich auch immer alles ändert,

00:33:55.340 --> 00:33:57.300
irgendwie mit neuen Python-Versionen

00:33:57.300 --> 00:33:58.960
und dann ändert sich halt auch die

00:33:58.960 --> 00:34:01.220
DC-CAP

00:34:01.220 --> 00:34:03.220
und so, es ist alles nicht so einfach.

00:34:03.700 --> 00:34:05.380
Jedenfalls, dieser Weg hat halt nicht so

00:34:05.380 --> 00:34:06.360
richtig funktioniert irgendwie

00:34:06.360 --> 00:34:09.180
und dann gab es ja noch ein paar andere Wege, es gab noch

00:34:09.180 --> 00:34:11.280
Pisten und es gab noch

00:34:11.280 --> 00:34:13.480
irgendwie Sachen, momentan gibt es auch noch,

00:34:13.660 --> 00:34:15.600
ich glaube, es gab es nicht nur,

00:34:15.640 --> 00:34:17.380
das gibt es auch wieder, es gab bei Microsoft

00:34:17.380 --> 00:34:18.980
noch Leute, die das versucht haben auf der .NET

00:34:18.980 --> 00:34:21.280
Runtime irgendwie laufen zu lassen. Die machen auch irgendwie lustige Sachen.

00:34:23.680 --> 00:34:24.080
Aber...

00:34:24.080 --> 00:34:24.700
Was ist dein Pisten?

00:34:25.780 --> 00:34:27.340
Ja, auch ein Projekt,

00:34:27.460 --> 00:34:29.380
was halt so eine Art...

00:34:31.000 --> 00:34:31.620
Lass mich lügen,

00:34:31.680 --> 00:34:32.860
ich weiß jetzt gar nicht genau, was sie

00:34:32.860 --> 00:34:34.220
an Optimierungen gemacht haben.

00:34:35.080 --> 00:34:36.100
Es gab auch vorher schon

00:34:36.100 --> 00:34:38.540
ein paar Sachen,

00:34:39.020 --> 00:34:40.780
wie hießen das noch? Psycho?

00:34:42.700 --> 00:34:43.340
Das gibt es

00:34:43.340 --> 00:34:44.520
auch schon ganz lange nicht mehr, glaube ich.

00:34:44.740 --> 00:34:46.500
Naja, es gab auf jeden Fall schon so ein paar Versuche,

00:34:46.500 --> 00:34:47.940
schneller zu machen, aber das alles,

00:34:48.520 --> 00:34:50.360
wenn das halt darauf hinaus lief,

00:34:50.440 --> 00:34:52.560
dass es halt irgendwie anders

00:34:52.560 --> 00:34:54.800
funktioniert als C-Python-Bytecode,

00:34:55.060 --> 00:34:56.360
dann ist es halt nicht gut.

00:34:56.760 --> 00:34:57.360
So richtig, weil

00:34:57.360 --> 00:35:00.660
das ist halt

00:35:00.660 --> 00:35:02.480
dann doch, weil das Problem

00:35:02.480 --> 00:35:04.480
ist, dass viele Sachen, die halt da dranhängen,

00:35:04.520 --> 00:35:06.340
gehen dann halt nicht mehr. Unter anderem

00:35:06.340 --> 00:35:06.920
die ganzen

00:35:06.920 --> 00:35:09.060
C-Extensions.

00:35:10.300 --> 00:35:12.260
Was mich dazu führt, also es gibt ja noch

00:35:12.260 --> 00:35:14.220
Alternativen vielleicht dazu. Ich habe jetzt schon ein paar Mal

00:35:14.220 --> 00:35:15.580
so Rust-Python-Issens irgendwie.

00:35:15.580 --> 00:35:18.060
Ja, Rust, das ist auch interessant, ja, auf jeden Fall.

00:35:18.240 --> 00:35:19.760
Also das wäre wahrscheinlich auch für die Zukunft

00:35:19.760 --> 00:35:21.120
halt, das ist eine Geschichte, die

00:35:21.120 --> 00:35:23.840
also einmal Extensions

00:35:23.840 --> 00:35:25.960
in Rust schreiben und nicht in C, das ist eine interessante

00:35:25.960 --> 00:35:26.280
Geschichte.

00:35:28.560 --> 00:35:29.660
Und natürlich, was auch

00:35:29.660 --> 00:35:31.660
unter Umständen interessant wäre, halt vielleicht

00:35:31.660 --> 00:35:33.080
einen Interpreter zu schreiben, der halt

00:35:33.080 --> 00:35:35.840
nicht in C ist, sondern in Rust,

00:35:35.980 --> 00:35:37.560
aber das ist natürlich noch ein weiter Weg.

00:35:38.020 --> 00:35:39.700
Aber das hätte halt einen riesen Vorteil,

00:35:39.740 --> 00:35:41.700
wenn man das mal irgendwann hinkriegt. Das muss man alles zwar neu

00:35:41.700 --> 00:35:43.640
schreiben, aber ja. Man muss halt so ziemlich alles neu

00:35:43.640 --> 00:35:45.500
schreiben, was ein bisschen schwierig ist, aber

00:35:45.500 --> 00:35:48.100
wenn man das dann kriegt, dann könnte man das halt auch

00:35:48.100 --> 00:35:49.840
da, man Rust halt irgendwie nach

00:35:49.840 --> 00:35:51.540
WebAssembly irgendwie kopieren kann,

00:35:51.860 --> 00:35:53.320
könnte man das halt in den Browser bringen.

00:35:54.640 --> 00:35:55.740
Das wäre natürlich schon nett.

00:35:56.320 --> 00:35:57.440
Dann könnte man einfach im Browser dann

00:35:57.440 --> 00:35:58.400
Python ausführen.

00:36:00.520 --> 00:36:02.080
Aber das ist

00:36:02.080 --> 00:36:03.120
alles noch sehr weit weg.

00:36:03.980 --> 00:36:06.000
Man muss halt einfach nochmal neu schreiben, das war noch ein bisschen

00:36:06.000 --> 00:36:07.280
ein bisschen weg runter.

00:36:07.840 --> 00:36:09.940
Leute entwickeln, finden die auch gut Rust können

00:36:09.940 --> 00:36:11.740
und so, das ist auch nicht so einfach, gibt es ja auch noch nicht so ewig.

00:36:12.680 --> 00:36:13.940
Und das dann in der Kombination,

00:36:13.940 --> 00:36:15.800
und dann muss das dann in Rust sich dann auch wieder entwickeln

00:36:15.800 --> 00:36:17.160
und die ganzen Fehlerchen dann wegkommen.

00:36:19.540 --> 00:36:20.220
Aber es könnte

00:36:20.220 --> 00:36:21.860
tatsächlich doch gar nicht so interessant sein, oder?

00:36:22.000 --> 00:36:23.840
Also es könnte doch deutlich schneller sein als noch

00:36:23.840 --> 00:36:25.980
in C. Sicherer auch als in C.

00:36:26.580 --> 00:36:27.340
Ja, ja, klar.

00:36:28.260 --> 00:36:29.160
Es ist auf jeden Fall

00:36:29.160 --> 00:36:31.360
sehr interessant. Ich bin gespannt.

00:36:31.760 --> 00:36:33.580
Aber genau, um mal wieder den Bogen

00:36:33.580 --> 00:36:34.300
zurückzukriegen.

00:36:36.580 --> 00:36:37.280
Guido hat ja jetzt

00:36:37.280 --> 00:36:38.900
wieder im Ruhestand

00:36:38.900 --> 00:36:41.500
zurückgekommen und hat jetzt

00:36:41.500 --> 00:36:43.180
ein Team bei Microsoft und

00:36:43.180 --> 00:36:44.540
und das ist auch komisch,

00:36:44.720 --> 00:36:46.260
wie gedacht, dass er jeweils, also

00:36:46.260 --> 00:36:47.480
so ist es halt.

00:36:48.880 --> 00:36:49.640
Man kann es auch trennen.

00:36:51.000 --> 00:36:52.220
Schon irgendwie, ja,

00:36:52.380 --> 00:36:53.640
ist jetzt wieder cool und

00:36:53.640 --> 00:36:56.120
genau,

00:36:57.160 --> 00:36:58.660
er widmet sich da jetzt

00:36:58.660 --> 00:37:00.500
hauptsächlich irgendwie Python Performance und das

00:37:00.500 --> 00:37:02.380
natürlich auch schon mal, aber es wird halt noch ein bisschen lauern,

00:37:02.480 --> 00:37:03.980
auch bis sich das dann wirklich auswirkt.

00:37:06.180 --> 00:37:06.540
Aber

00:37:06.540 --> 00:37:08.440
wir können wahrscheinlich damit rechnen, dass halt in den nächsten

00:37:08.440 --> 00:37:10.460
Jahren Python halt nochmal ein gutes Stückchen

00:37:10.460 --> 00:37:12.220
schneller wird und das ist auch schon mal eine schöne Sache.

00:37:13.180 --> 00:37:14.740
Ja, genau.

00:37:18.640 --> 00:37:19.840
Ich weiß nicht genau, hatten wir sonst noch

00:37:19.840 --> 00:37:22.620
irgendwas zu Python 3.10?

00:37:22.880 --> 00:37:23.640
Oder 3.11 haben wir gesagt?

00:37:24.300 --> 00:37:26.540
Ja, 3.11 Better FacePacks haben wir auch schon gesagt.

00:37:27.180 --> 00:37:28.300
Das sieht wirklich schick aus,

00:37:28.400 --> 00:37:29.660
das heißt, man kann sie wirklich mal lesen.

00:37:30.140 --> 00:37:32.280
Das macht Sinn. Das ist schon gut, ja.

00:37:34.960 --> 00:37:36.420
Also ja, ich glaube, News gibt es halt noch

00:37:36.420 --> 00:37:37.500
ein bisschen, Django vielleicht.

00:37:37.800 --> 00:37:40.560
Ja, Django, da gibt es auch eine Alpha-Release von Django 4,

00:37:40.560 --> 00:37:41.600
das habe ich auch mal ausprobiert,

00:37:41.600 --> 00:37:43.200
geguckt, was dann alles so kaputt geht.

00:37:43.940 --> 00:37:44.640
Und, was geht kaputt?

00:37:45.100 --> 00:37:45.780
Wagtail zum Beispiel.

00:37:46.880 --> 00:37:48.880
Ach so, so eine Überraschung.

00:37:49.740 --> 00:37:50.800
Ja, noch so ein paar andere Sachen.

00:37:51.280 --> 00:37:52.960
Ich meine, meine Lieblingskandidaten

00:37:52.960 --> 00:37:55.320
für Sachen, die schief sind,

00:37:55.320 --> 00:37:55.900
sind ja auch mal so

00:37:55.900 --> 00:37:59.680
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:02.980
marginal-Maintenant ist.

00:38:03.340 --> 00:38:04.680
Stratag Comments, Fluent Comments,

00:38:05.220 --> 00:38:06.860
Contrib Comments. Contrib Comments ist, glaube ich, sogar

00:38:06.860 --> 00:38:08.720
halbwegs gut-Maintenant. Da gab es auch

00:38:08.720 --> 00:38:10.400
Mai oder so wieder eine Version.

00:38:10.400 --> 00:38:12.920
und Fluncommands und Threadedcommands

00:38:12.920 --> 00:38:14.000
vor allen Dingen eher nicht so.

00:38:14.920 --> 00:38:16.620
Und genau, Threadedcommands ist halt auch kaputt

00:38:16.620 --> 00:38:18.400
gegangen und da habe ich dann halt irgendwie auch, glaube ich,

00:38:18.400 --> 00:38:19.100
einen Pull-Request gemacht.

00:38:20.980 --> 00:38:22.600
Und dann Wagtail ist auch kaputt

00:38:22.600 --> 00:38:24.560
gegangen. Da habe ich dann auch

00:38:24.560 --> 00:38:25.720
einen Pull-Request

00:38:25.720 --> 00:38:27.080
irgendwie gemacht.

00:38:27.700 --> 00:38:30.580
Dann habe ich mich nicht mehr drum herum gekümmert,

00:38:30.660 --> 00:38:32.480
weil ich keine Zeit hatte. Und dann ist er

00:38:32.480 --> 00:38:33.540
irgendwie so halb durchgegangen.

00:38:34.800 --> 00:38:36.640
Das ist mir, ehrlich gesagt,

00:38:36.680 --> 00:38:38.400
ein bisschen peinlich, weil ich habe da irgendwie nur so etwas

00:38:38.400 --> 00:39:08.400
gerotzt und dann kamen dann noch so Anmerkungen und was ich noch tun könnte und so und ich habe einfach nicht mehr reagiert und dann hat irgendjemand dann irgendwie Teile davon einfach so gemerged und waren halt dann drin. Aber es ist irgendwie, ehrlich gesagt, sehr schlampig von meiner Seite aus. Aber ja, also... So, so, so. Ja. Ich kicke immer auf die Finger, wenn ich das nicht ordentlich mache. Ja. Aber prinzipiell geht Wagtail mit Django 4. Also das funktioniert schon. Also man muss da gar nicht so wahnsinnig viel...

00:39:08.400 --> 00:39:09.900
prinzipiert, wenn man noch ein bisschen...

00:39:09.900 --> 00:39:11.700
Es gibt zwei Dinge, die

00:39:11.700 --> 00:39:14.100
nicht funktionieren. Das eine ist zwar

00:39:14.100 --> 00:39:16.220
aus...

00:39:16.220 --> 00:39:18.160
Wenn man ein All-Pass-Quote verwendet,

00:39:18.260 --> 00:39:19.440
das hat sich irgendwie geändert.

00:39:20.320 --> 00:39:22.320
Das war früher in Django selber

00:39:22.320 --> 00:39:23.900
drin. In Django 4 fliegt das raus.

00:39:24.020 --> 00:39:25.520
Das ist sowieso schon deprecated.

00:39:26.080 --> 00:39:27.100
Und das bedeutet, man muss jetzt

00:39:27.100 --> 00:39:30.200
von All-Pass-Import-Quotes sagen,

00:39:30.300 --> 00:39:31.600
statt das aus Django zu importieren.

00:39:32.560 --> 00:39:34.480
Weil das jetzt halt in der Python-Standard-Bibliothek

00:39:34.480 --> 00:39:36.120
genau das gleiche macht wie halt vorher in Django.

00:39:36.400 --> 00:39:37.640
Und das muss man ändern.

00:39:37.640 --> 00:39:39.520
Also URL-Quoten, meinst du, um

00:39:39.520 --> 00:39:41.400
irgendwie so Sachen rauszubekommen, oder?

00:39:41.900 --> 00:39:43.400
Ja, genau, um zum Beispiel irgendwie

00:39:43.400 --> 00:39:44.740
ein Dikt oder so,

00:39:44.900 --> 00:39:47.360
dann willst du das halt

00:39:47.360 --> 00:39:49.600
in URL-Parameter verwandeln.

00:39:49.700 --> 00:39:50.420
Ich weiß gar nicht jetzt genau,

00:39:51.400 --> 00:39:53.320
unter welchen Bedingungen man das jetzt wie verwendet,

00:39:53.400 --> 00:39:55.080
aber ja, genau, also es ist halt so, dass

00:39:55.080 --> 00:39:57.580
irgendwas, was nicht halt in der URL

00:39:57.580 --> 00:39:58.780
stehen kann, was machen, was halt

00:39:58.780 --> 00:40:01.020
da drin stehen kann.

00:40:01.800 --> 00:40:02.160
Und

00:40:02.160 --> 00:40:04.700
dann

00:40:04.700 --> 00:40:07.480
eine andere Geschichte ist genau,

00:40:07.480 --> 00:40:37.460
und Jochen unterhalten sich über die Programmiersprache Python

00:40:37.480 --> 00:40:39.200
Also sowieso, es macht glaube ich nicht mehr als

00:40:39.200 --> 00:40:41.300
irgendeinen Header zu überprüfen, ob der gesetzt ist.

00:40:44.900 --> 00:40:47.120
Das ist nicht die richtige Methode, man soll direkt gucken, ob der Header drin ist.

00:40:47.700 --> 00:40:49.440
Genau, das ist halt der empfohlene

00:40:49.440 --> 00:40:50.900
Workaround, das einfach ersetzen durch

00:40:50.900 --> 00:40:52.520
ist der Header da drin oder nicht.

00:40:53.060 --> 00:40:54.300
Genau, das habe ich dann im Werkzeug auch gemacht.

00:40:55.960 --> 00:40:57.140
Aber insgesamt

00:40:57.140 --> 00:40:58.100
hieß es halt so

00:40:58.100 --> 00:41:01.380
in der Django-Dokumentation

00:41:01.380 --> 00:41:03.080
dazu, ja, also das ist sowieso

00:41:03.080 --> 00:41:04.920
nicht so toll, das darüber zu machen, weil das ist halt

00:41:04.920 --> 00:41:06.360
jQuery-spezifisch.

00:41:06.360 --> 00:41:08.520
und jQuery ist auch so auf dem Weg

00:41:08.520 --> 00:41:10.480
nach draußen und die

00:41:10.480 --> 00:41:11.960
meisten verwenden halt inzwischen Fetch

00:41:11.960 --> 00:41:14.000
in JavaScript, Fetch API

00:41:14.000 --> 00:41:16.320
und die macht das sowieso irgendwie anders

00:41:16.320 --> 00:41:17.220
und das heißt,

00:41:17.480 --> 00:41:20.280
das ist ein bisschen nutzlos.

00:41:20.500 --> 00:41:22.420
Das ist Ajax, das liefert halt einfach nicht mehr die

00:41:22.420 --> 00:41:24.480
richtige, es ist ein Ajax

00:41:24.480 --> 00:41:26.260
Call, aber das

00:41:26.260 --> 00:41:28.380
kommt halt am Server so nicht an

00:41:28.380 --> 00:41:30.440
beziehungsweise den Header

00:41:30.440 --> 00:41:32.160
zu überprüfen ist so ein bisschen sinnlos und

00:41:32.160 --> 00:41:34.260
weil das halt irgendwie nur von jQuery

00:41:34.260 --> 00:41:36.120
gesetzt wird, das heißt

00:41:36.120 --> 00:41:38.340
im Grunde muss man das streichen, weil das funktioniert so nicht mehr.

00:41:38.500 --> 00:41:40.340
Und dann die andere Geschichte ist halt

00:41:40.340 --> 00:41:42.040
auch so, ja wozu das überhaupt

00:41:42.040 --> 00:41:44.080
überprüfen, das ist auch irgendwie Quatsch, weil

00:41:44.080 --> 00:41:46.420
naja,

00:41:46.740 --> 00:41:48.000
oder genau, das ist halt

00:41:48.000 --> 00:41:50.320
empfohlen, was man dann überprüfen soll, weil

00:41:50.320 --> 00:41:51.800
was möchte man eigentlich machen oft?

00:41:52.260 --> 00:41:53.540
Man möchte halt so etwas machen wie,

00:41:54.500 --> 00:41:56.260
ja, wenn da jetzt ein Browser

00:41:56.260 --> 00:41:58.100
auf die URL geht zum Beispiel

00:41:58.100 --> 00:42:00.380
und dann halt sonst JSON kriegen würde, dann

00:42:00.380 --> 00:42:02.300
will man dem nicht einfach JSON

00:42:02.300 --> 00:42:03.760
schicken, sondern vielleicht eine HTML

00:42:03.760 --> 00:42:06.180
Fehlermeldungen, so

00:42:06.180 --> 00:42:08.240
Hallo, bitte nicht mit dem Browser hier hin,

00:42:08.600 --> 00:42:10.440
sondern geh lieber da hin, weil hier gibt es nur JSON,

00:42:10.540 --> 00:42:12.460
sowas. Und dafür muss man halt

00:42:12.460 --> 00:42:13.720
eine Fallunterscheidung machen und

00:42:13.720 --> 00:42:15.600
da sollte man doch lieber

00:42:15.600 --> 00:42:18.200
auf request.accept

00:42:18.200 --> 00:42:20.680
gucken, ob das Ding jetzt zum Beispiel

00:42:20.680 --> 00:42:21.700
HTML,

00:42:22.320 --> 00:42:23.820
Text HTML haben will oder so.

00:42:24.180 --> 00:42:26.500
Wenn es Text HTML haben will, dann sagt man halt

00:42:26.500 --> 00:42:28.440
hier so, hier Fehlermeldung, ich gebe eigentlich nur JSON zurück,

00:42:28.440 --> 00:42:29.500
ich kann gar nichts anderes als JSON

00:42:29.500 --> 00:42:32.540
und das ist halt dann besser, das funktioniert

00:42:32.540 --> 00:42:34.400
in jedem Fall eigentlich.

00:42:34.680 --> 00:42:36.900
Wie der Request gemacht wird

00:42:36.900 --> 00:42:38.560
von der kleinen Seite aus, ob über Fetch oder

00:42:38.560 --> 00:42:40.820
Jackfairy. Genau, das ist halt das,

00:42:41.260 --> 00:42:42.720
worauf man dann langfristig migrieren

00:42:42.720 --> 00:42:44.560
sollte, kurzfristig, wenn man es

00:42:44.560 --> 00:42:45.040
ja,

00:42:46.580 --> 00:42:48.700
weil Ajax

00:42:48.700 --> 00:42:50.480
ist halt weg mit Django 4.

00:42:51.440 --> 00:42:52.600
Genau, aber ansonsten

00:42:52.600 --> 00:42:54.240
das hat

00:42:54.240 --> 00:42:56.360
relativ reibungslos funktioniert. Also Django 4

00:42:56.360 --> 00:42:58.440
funktioniert bei mir schon relativ problemlos

00:42:58.440 --> 00:42:59.620
und ja.

00:43:00.520 --> 00:43:02.360
Also Timezone-Informationen

00:43:02.540 --> 00:43:04.020
haben sich schon ein paar Sachen, glaube ich, geändert, wenn man die

00:43:04.020 --> 00:43:05.340
vorwärts...

00:43:05.340 --> 00:43:08.420
Python, wann hat das noch umgestellt? 3 irgendwas?

00:43:09.320 --> 00:43:09.780
Das ist irgendwie

00:43:09.780 --> 00:43:11.660
Zone-Info jetzt neu.

00:43:12.200 --> 00:43:14.420
Ich weiß nicht, ob da Python 3 neu drin war,

00:43:14.460 --> 00:43:16.220
dass das jetzt in die Standard-Bildung gewandert ist.

00:43:17.820 --> 00:43:18.040
Genau.

00:43:19.200 --> 00:43:20.400
Und da kann man ja wahrscheinlich mehr machen,

00:43:20.500 --> 00:43:21.940
als Python, die das irgendwie raus soll irgendwann.

00:43:23.340 --> 00:43:24.600
Und das ist

00:43:24.600 --> 00:43:25.560
vielleicht ganz interessant noch.

00:43:26.440 --> 00:43:27.360
Auch ein schönes neues Feature.

00:43:28.000 --> 00:43:29.720
Und ansonsten, die anderen Sachen, ehrlich gesagt,

00:43:29.720 --> 00:43:32.220
es gibt ein Standard-Redis-Cache-Weckend

00:43:32.220 --> 00:43:33.720
jetzt, das muss man nicht mehr extra dazu packen.

00:43:34.040 --> 00:43:36.100
Aber gut, keine third-party-library, aber

00:43:36.100 --> 00:43:37.260
ja, also ich meine,

00:43:37.900 --> 00:43:40.260
ändert sich da nicht so viel dran,

00:43:40.420 --> 00:43:41.780
weil, ja,

00:43:42.140 --> 00:43:44.140
ich meine, man konnte es ja auch bisher schon alles verwenden.

00:43:44.900 --> 00:43:46.140
Also das war, gibt es eine

00:43:46.140 --> 00:43:48.240
Umfrage, die sie irgendwie gemacht haben, wer verwendet denn

00:43:48.240 --> 00:43:50.200
was für User denn so

00:43:50.200 --> 00:43:51.040
für

00:43:51.040 --> 00:43:53.560
Caching-Backends und

00:43:53.560 --> 00:43:56.120
Memcache, die

00:43:56.120 --> 00:43:58.160
ist halt drin als in Django,

00:43:58.240 --> 00:43:59.440
da muss man nichts zusätzlich installieren.

00:43:59.940 --> 00:44:02.120
Und dann kam in der Umfrage raus, oh, die Leute verwenden

00:44:02.120 --> 00:44:03.600
aber alle Redes und nicht in einem Cache-D.

00:44:04.440 --> 00:44:05.940
Und ja, das ist halt nicht drin.

00:44:06.040 --> 00:44:08.040
Das heißt, alle müssen nochmal irgendwie Zusatzkram

00:44:08.040 --> 00:44:10.040
installieren. Oh, das bringt mich fast schon zu meiner nächsten

00:44:10.040 --> 00:44:12.040
Frage, weil das so ein bisschen daran anschließt.

00:44:12.840 --> 00:44:14.100
Aber das, ja, vielleicht stellen wir das

00:44:14.100 --> 00:44:15.380
noch kurz zurück. Wir machen Werbung.

00:44:17.380 --> 00:44:18.060
Wieder ein Wissen.

00:44:19.700 --> 00:44:19.960
Ja,

00:44:20.080 --> 00:44:21.620
dann sind wir fertig denn tatsächlich mit

00:44:21.620 --> 00:44:22.980
Python Dango News.

00:44:24.900 --> 00:44:25.560
Lass mal überlegen.

00:44:26.640 --> 00:44:28.300
Doch, also mit den News auf jeden Fall.

00:44:28.480 --> 00:44:30.020
Aber, genau,

00:44:30.140 --> 00:44:31.360
ich habe noch so ein paar, ach,

00:44:31.360 --> 00:44:35.500
auch eine News, Psychic Learn

00:44:35.500 --> 00:44:37.340
hat eine Version 1.0

00:44:37.340 --> 00:44:41.380
das war ehrlich gesagt schon relativ lange stabil, aber

00:44:41.380 --> 00:44:43.200
jetzt hat es auch tatsächlich irgendwie eine

00:44:43.200 --> 00:44:44.320
offizielle 1.0 Version

00:44:44.320 --> 00:44:47.320
Major Versionsnummer

00:44:47.320 --> 00:44:49.480
was eine tolle Geschichte ist

00:44:49.480 --> 00:44:50.600
super Projekt

00:44:50.600 --> 00:44:52.420
genau

00:44:52.420 --> 00:44:55.440
ja, das ist auch

00:44:55.440 --> 00:44:56.900
so das Beispiel, ich habe letztens

00:44:56.900 --> 00:44:58.160
Alex Friedman

00:44:58.160 --> 00:45:03.320
der Gründer von Anaconda

00:45:03.320 --> 00:45:07.320
und von Travis Olyphant, der hat auch NumPy,

00:45:07.420 --> 00:45:09.080
SciPy, SciPy hat er zuerst, wusste ich auch nicht,

00:45:09.300 --> 00:45:13.300
SciPy zuerst entwickelt und dann NumPy kam später

00:45:13.300 --> 00:45:15.000
dazu, weil man Numeric und

00:45:15.000 --> 00:45:19.140
das andere Ding, NumArray, irgendwie zusammenfassen musste,

00:45:19.360 --> 00:45:21.920
weil es gab zwar eben diese beiden unterschiedlichen Implementationen,

00:45:21.920 --> 00:45:23.320
dann ist es halt NumPy geworden.

00:45:25.380 --> 00:45:27.280
Der erzählt halt auch so ein bisschen

00:45:27.280 --> 00:45:29.580
und der hat dann

00:45:29.580 --> 00:45:30.740
Cyclet Learn als so

00:45:30.740 --> 00:45:33.840
beispielhaftes Projekt,

00:45:33.980 --> 00:45:35.860
wie das hätte laufen sollen,

00:45:35.940 --> 00:45:37.220
eigentlich dann erwähnt und

00:45:37.220 --> 00:45:39.480
ein ganz tolles Projekt. Also Cyclet Learn,

00:45:39.600 --> 00:45:41.700
wirklich voll gut. Es gibt auch noch Cyclet Image und noch ein paar andere.

00:45:42.160 --> 00:45:43.440
Aber Cyclet Learn ist eigentlich so das

00:45:43.440 --> 00:45:45.860
große Ding,

00:45:45.900 --> 00:45:46.840
was dabei rausgefallen ist.

00:45:46.840 --> 00:45:47.580
Ja, voll gut.

00:45:49.160 --> 00:45:49.980
Was haben wir noch?

00:45:51.440 --> 00:45:51.760
Tja.

00:45:55.820 --> 00:45:56.780
Oh, es gab eine

00:45:56.780 --> 00:45:58.940
Sicherheitslücke. Das hat jetzt gar nichts

00:45:58.940 --> 00:46:01.020
mit Python zu tun. Ich fand das nur deswegen interessant,

00:46:01.120 --> 00:46:01.980
weil es halt so eine

00:46:01.980 --> 00:46:04.320
Geschichte ist, die etwas illustriert,

00:46:04.420 --> 00:46:06.800
wenn man das einfach so erzählt, oft ist das nicht

00:46:06.800 --> 00:46:08.820
so ein bisschen intuitiv,

00:46:08.880 --> 00:46:10.740
aber das ist ein sehr schönes Beispiel

00:46:10.740 --> 00:46:11.620
dafür, weil

00:46:11.620 --> 00:46:14.320
ich habe halt oft das Gefühl, dass

00:46:14.320 --> 00:46:18.700
es sozusagen die

00:46:18.700 --> 00:46:20.860
Ansicht gibt, dass man Sicherheit irgendwie

00:46:20.860 --> 00:46:22.240
dadurch herstellen kann, dass man

00:46:22.240 --> 00:46:31.800
zus Dinge tut oder Dinge erweitert oder so also man wei ich nicht kauft irgendetwas was dann halt Sicherheit macht

00:46:33.220 --> 00:46:34.880
Oder man installiert

00:46:34.880 --> 00:46:36.760
zusätzliches Zeug, das dann Sachen sicherer machen soll.

00:46:37.140 --> 00:46:38.740
Ich habe da immer so ein bisschen

00:46:38.740 --> 00:46:40.840
Bedenken und ich habe das Gefühl, dass das geht eigentlich gar nicht.

00:46:40.980 --> 00:46:42.680
Sondern eigentlich kriegt man wirklich Sicherheit nur

00:46:42.680 --> 00:46:43.980
dadurch, dass man Sachen weglässt, weil

00:46:43.980 --> 00:46:46.260
alles, was halt irgendwas tut, hat halt irgendwie

00:46:46.260 --> 00:46:49.480
die Angriffsoberfläche

00:46:49.480 --> 00:46:49.860
größer.

00:46:50.400 --> 00:46:52.080
Und das ist halt ein Problem. Und jetzt hat es halt

00:46:52.080 --> 00:46:54.240
einen so ein Ding erwischt und das fand ich

00:46:54.240 --> 00:46:56.020
Was für ein Ding hast du denn überhaupt erwischt?

00:46:56.180 --> 00:46:56.820
Fail to ban.

00:46:57.960 --> 00:47:00.300
Das ist halt irgendwie so ein Ding, dass man sich zusätzlich

00:47:00.300 --> 00:47:02.380
zu SSI installiert und das dann halt

00:47:02.380 --> 00:47:04.380
irgendwie sich anguckt, was da passiert

00:47:04.380 --> 00:47:05.860
und dann halt zum Beispiel den Port so macht.

00:47:07.020 --> 00:47:08.120
Oder sonst irgendwie was.

00:47:08.780 --> 00:47:09.760
Und das hatte jetzt,

00:47:10.480 --> 00:47:12.360
ich meine, die Auswirkungen davon sind nicht ganz so schlimm,

00:47:12.560 --> 00:47:14.420
weil, aber was das Ding

00:47:14.420 --> 00:47:15.240
gemacht hat, ist halt

00:47:15.240 --> 00:47:18.980
wenn da irgendwas,

00:47:19.980 --> 00:47:20.620
wenn da jemand

00:47:20.620 --> 00:47:22.680
irgendwie an diesem SH-Port rumgespielt hat, hat es halt

00:47:22.680 --> 00:47:24.300
dann irgendwann ein Whois

00:47:24.300 --> 00:47:24.880
auf

00:47:24.880 --> 00:47:27.820
die IP, von der

00:47:27.820 --> 00:47:30.340
diese Login-Versuche kommen, gemacht,

00:47:31.300 --> 00:47:32.800
sich ja die Information rausgeholt

00:47:32.800 --> 00:47:34.640
und das dann per Mail irgendwie an

00:47:34.640 --> 00:47:35.360
den Admin geschickt.

00:47:37.040 --> 00:47:38.360
Klingt jetzt erstmal noch nicht so schlimm.

00:47:38.960 --> 00:47:39.840
Das Problem ist, da war

00:47:39.840 --> 00:47:42.180
so eine Shell-Escape-Lücke

00:47:42.180 --> 00:47:44.200
im Mail

00:47:44.200 --> 00:47:46.540
erzeugen. Das heißt, das hat

00:47:46.540 --> 00:47:48.480
irgendwie den Text aus dem Whois genommen, dann irgendwie

00:47:48.480 --> 00:47:50.560
in die Mail und das dann per Kommandozeile

00:47:50.560 --> 00:47:51.000
übergeben.

00:47:51.160 --> 00:47:54.460
Wenn du das

00:47:54.460 --> 00:47:56.400
cool ist, kontrollieren konntest, konntest du da halt dann

00:47:56.400 --> 00:47:58.180
irgendwie durch so

00:47:58.180 --> 00:47:59.820
Backtick irgendwie, weiß der Teufel,

00:48:00.520 --> 00:48:02.500
irgendwie Spielereien

00:48:02.500 --> 00:48:04.360
das Ding dazu bringen, einen beliebigen Code

00:48:04.360 --> 00:48:06.160
auszuführen und dann konntest du halt einfach

00:48:06.160 --> 00:48:08.100
einen Rutsch halt aufmachen.

00:48:08.540 --> 00:48:09.140
Sehr gut, danke.

00:48:12.300 --> 00:48:12.500
Also

00:48:12.500 --> 00:48:14.040
einige Leute, passiert sowas auch sonst was,

00:48:14.280 --> 00:48:16.180
aber da muss ich jetzt auch noch eine kurze andere

00:48:16.180 --> 00:48:18.300
Security-relevante Geschichte erzählen

00:48:18.300 --> 00:48:20.040
und zwar, ihr wisst ja, manchmal mache ich auch ein bisschen Asia.

00:48:20.560 --> 00:48:21.940
und da war was ganz Tolles dabei.

00:48:22.640 --> 00:48:24.460
Und zwar hat das, glaube ich,

00:48:24.480 --> 00:48:26.500
2,5 Millionen Kunden betroffen

00:48:26.500 --> 00:48:27.740
oder so, war auch gar nicht so relevant.

00:48:28.280 --> 00:48:30.460
Jedenfalls alle Leute, die halt Linux-VMs bei Azure hosten,

00:48:30.540 --> 00:48:32.260
was ja man ja macht, ich habe nämlich schon ein paar Mal gewundert,

00:48:32.380 --> 00:48:34.600
warum die irgendwie komischen Windows-Fehlermeldungen abstürzen.

00:48:34.720 --> 00:48:35.660
Ich dachte so, hä? Das kann doch nichts.

00:48:35.920 --> 00:48:37.720
Die laufen halt tatsächlich auf irgendeinem Windows drauf.

00:48:38.300 --> 00:48:40.240
Und was halt da irgendwie drumrum ist, ist halt

00:48:40.240 --> 00:48:42.080
irgendwie so ein Wrapper und Microsoft macht da

00:48:42.080 --> 00:48:44.300
irgendwelche Service-Prozesse irgendwie auf.

00:48:44.660 --> 00:48:46.140
Und man kann irgendwie auf einen Endpunkt

00:48:46.140 --> 00:48:48.400
einfach diesen Microsoft-Service-Endpunkt ansprechen.

00:48:49.040 --> 00:48:50.100
Und dann

00:48:50.100 --> 00:48:52.220
musste man halt dann sich authentifizieren, damit man da irgendwie

00:48:52.220 --> 00:48:54.060
Service-Prams machen darf.

00:48:54.680 --> 00:48:55.820
Und ganz besonders cool,

00:48:56.040 --> 00:48:58.020
2021 wird das sowas irgendwie möglich,

00:48:58.100 --> 00:49:00.260
das weiß man nicht genau, aber wenn man jetzt die Credentials

00:49:00.260 --> 00:49:01.660
als falsch angegeben hat, gibt es halt ein Denied.

00:49:02.000 --> 00:49:03.940
Und was passiert, wenn man gar keine Credentials angegeben hat?

00:49:05.400 --> 00:49:06.680
Tja, dann war alles gut.

00:49:08.080 --> 00:49:08.560
Dann war gut.

00:49:08.820 --> 00:49:09.280
Einfach so.

00:49:09.620 --> 00:49:12.160
Die haben gesagt, okay, eine Credentials, okay, muss wohl gut sein, ist wohl ein Admin.

00:49:12.680 --> 00:49:13.960
Dankeschön. Und ja, tatsächlich,

00:49:14.040 --> 00:49:16.080
diese Lücke war tatsächlich einfach da und einfach offen.

00:49:16.480 --> 00:49:18.180
Das heißt, wenn du diesen Endpunkt kennst von der Applikation,

00:49:18.180 --> 00:49:19.860
konnte ich einfach ohne Quintenz anmelden.

00:49:20.040 --> 00:49:21.980
Da hast du eine Routet auf diese ganze Applikation

00:49:21.980 --> 00:49:23.760
bekommen und es war völlig egal, was du da gemacht hast, weil

00:49:23.760 --> 00:49:26.340
deine ganze Anwendung in deinem Linux4M-Container

00:49:26.340 --> 00:49:28.320
einfach dann schreibbar war.

00:49:28.380 --> 00:49:29.680
Da war es ein bisschen mittelgut.

00:49:30.080 --> 00:49:31.440
Was auch sehr super daran ist,

00:49:32.060 --> 00:49:34.340
das geht nicht automatisch zu patchen.

00:49:34.540 --> 00:49:36.080
Das heißt, du musst hier dahin gehen und

00:49:36.080 --> 00:49:38.000
musst das manuell ausbauen, falls er das irgendwie bei sich

00:49:38.000 --> 00:49:40.040
aktiviert hat. Tja, und die sind

00:49:40.040 --> 00:49:40.980
irgendwie default aktiviert.

00:49:41.620 --> 00:49:41.860
Naja.

00:49:45.540 --> 00:49:46.280
Aber okay.

00:49:46.860 --> 00:49:47.640
Passiert halt wohl.

00:49:48.180 --> 00:49:53.300
Also wenn ihr irgendwelche Dinos bei Ames of Azure habt, guckt da mal vielleicht nochmal nach diesem Backnapp.

00:49:53.880 --> 00:49:56.940
Klingt auch nur so, nicht so, klingt eher so mittel.

00:49:58.260 --> 00:50:00.500
Das war auf jeden Fall so eine Sache, wo ich dachte, oh mein Gott.

00:50:01.500 --> 00:50:03.720
Ja, oh, Sicherheitslücken, wo wir gerade schon bei sind.

00:50:03.800 --> 00:50:05.380
Das war vor ein paar Tagen auf Twitch.

00:50:05.680 --> 00:50:06.800
Oh ja, Twitch wurde das geleakt.

00:50:07.260 --> 00:50:09.620
Irgendwie komplett wohl, einfach mal komplett geleakt.

00:50:09.880 --> 00:50:10.880
Tja, ja, komm, komm.

00:50:12.140 --> 00:50:13.180
Kann halt mal passieren.

00:50:14.960 --> 00:50:16.200
Aber immerhin nur Passwort-Hashes.

00:50:18.180 --> 00:50:25.740
Ja, aber auch die Bezahlinformationen.

00:50:26.460 --> 00:50:27.840
Ja, wer wie viel, wie auch jemand.

00:50:27.860 --> 00:50:28.960
Gucken, wie viel das wert ist.

00:50:30.180 --> 00:50:32.220
Da haben wir irgendwie ganz interessante Geschichten dabei.

00:50:32.920 --> 00:50:33.060
Ja.

00:50:34.080 --> 00:50:37.900
Also wenn ihr jetzt mal wissen wollt, wie viel euer Twitch-Facebook-Podcast verdient,

00:50:38.020 --> 00:50:40.620
oder wie viel Jochen mit seinen Streams verdient vom Python-Podcast.

00:50:41.100 --> 00:50:44.260
Ja, das ist leider relativ traurig, da ist nichts.

00:50:44.260 --> 00:50:45.620
aber ich bin auf deiner Seite

00:50:45.620 --> 00:50:48.300
Bist du eingetragen? Kann man da auch deine Informationen abrufen?

00:50:48.660 --> 00:50:49.620
Ich nehme mal an, dass es

00:50:49.620 --> 00:50:52.440
an der Stelle ein bisschen sinnlos ist, weil es ist eh öffentlich

00:50:52.440 --> 00:50:54.320
ich habe da nichts, was irgendwie nicht öffentlich ist, aber

00:50:54.320 --> 00:50:56.140
ja

00:50:56.140 --> 00:50:57.180
Ja

00:50:57.180 --> 00:50:59.320
Da verraten die

00:50:59.320 --> 00:51:02.000
Return Investment bei Twitch bei dir im Moment null

00:51:02.000 --> 00:51:04.240
Null, ich schaffe es auch nicht

00:51:04.240 --> 00:51:06.320
in das Affiliate-Programm reinzukommen

00:51:06.320 --> 00:51:07.220
weil ich habe noch nicht genug

00:51:07.220 --> 00:51:08.160
Und jetzt kommt Flower

00:51:08.160 --> 00:51:09.720
Genau

00:51:09.720 --> 00:51:11.700
Ja

00:51:11.700 --> 00:51:13.900
Ja, ja

00:51:13.900 --> 00:51:16.080
Ja, aber ansonsten

00:51:16.080 --> 00:51:18.120
ich finde das eigentlich ganz, ich mache ja jetzt halt schon eine Zeit

00:51:18.120 --> 00:51:20.140
lang dieses Streamen, das ist eigentlich

00:51:20.140 --> 00:51:22.060
schon ganz witzig, also das sind teilweise

00:51:22.060 --> 00:51:23.060
schon

00:51:23.060 --> 00:51:26.280
also damit hätte ich nicht gerechnet,

00:51:26.380 --> 00:51:28.020
dass da Leute live

00:51:28.020 --> 00:51:30.180
im Stream mir sagen, dass das, was ich

00:51:30.180 --> 00:51:32.060
da mache, ist halt falsch und wie ich es besser machen soll

00:51:32.060 --> 00:51:33.480
und das stimmt.

00:51:34.100 --> 00:51:35.500
Das ist wirklich beachtlich.

00:51:36.000 --> 00:51:37.220
Das ist wirklich hilfreich.

00:51:37.460 --> 00:51:40.140
Das hätte ich ehrlich gesagt

00:51:40.140 --> 00:51:42.100
nicht mit gerechnet. Also einmal hätte ich nicht

00:51:42.100 --> 00:51:43.920
damit gerechnet, dass sich irgendjemand dafür interessiert, was ich da tue.

00:51:44.440 --> 00:51:45.680
Wobei ich auch nicht gerechnet hätte, dass

00:51:45.680 --> 00:51:48.280
wenn sich jemand dafür interessiert, dass er dann auch besser weiß als ich.

00:51:49.200 --> 00:51:49.920
Aber, ja, gut.

00:51:50.560 --> 00:51:52.240
Wahrscheinlich, wenn sich jemand darauf interessiert, dann weiß er

00:51:52.240 --> 00:51:53.200
tatsächlich wahrscheinlich sogar besser.

00:51:53.340 --> 00:51:55.660
Ja, offenbar. Und das finde ich faszinierend.

00:51:55.680 --> 00:51:56.680
Was ist dir denn da aufgefallen?

00:51:57.660 --> 00:52:00.820
Also bei PyTest

00:52:00.820 --> 00:52:02.740
waren so ein paar Sachen dabei, wie man das richtig macht.

00:52:03.160 --> 00:52:04.500
Und das wusste ich halt nicht.

00:52:04.900 --> 00:52:06.620
Oder PyCharm, auch einige Sachen,

00:52:06.700 --> 00:52:07.660
wie man da Dinge einstellt und so.

00:52:08.840 --> 00:52:10.600
Gut, da kenne ich mich jetzt auch nicht so aus, das stimmt schon.

00:52:10.600 --> 00:52:12.640
Aber da habe ich gerade Bär gesagt, Entschuldigung

00:52:12.640 --> 00:52:15.520
Ich finde Python gar nicht so schlecht

00:52:15.520 --> 00:52:17.720
Also inzwischen bin ich sogar ein bisschen

00:52:17.720 --> 00:52:19.440
Also man, ja

00:52:19.440 --> 00:52:20.600
Bist du ein Fan geworden?

00:52:20.800 --> 00:52:21.920
Nee, das kann man nicht

00:52:21.920 --> 00:52:25.000
Aber, also ich würde sagen, doch, die kann

00:52:25.000 --> 00:52:27.940
Wahrscheinlich kann die tatsächlich alles, was man so haben will

00:52:27.940 --> 00:52:29.200
Ja, also ich

00:52:29.200 --> 00:52:31.580
Also VS Code kann ja noch nicht alles, was man so haben will

00:52:31.580 --> 00:52:33.740
Aber ich schreibe fleißig Tickets herum und gucken

00:52:33.740 --> 00:52:35.720
Vielleicht kann das ja in einem Jahr das alles, was ich haben will

00:52:35.720 --> 00:52:37.960
Also das Einzige, was mir bei VS Code tatsächlich noch nicht gefällt

00:52:37.960 --> 00:52:39.580
Ist tatsächlich Datenmantel

00:52:39.580 --> 00:53:09.560
und Python-Programmierung.

00:53:09.580 --> 00:53:11.020
ganz, habe ich es auch noch nicht hingekriegt, aber

00:53:11.020 --> 00:53:12.700
dann ist zum Beispiel das

00:53:12.700 --> 00:53:15.480
Working Directory ist halt dann einfach falsch oder so

00:53:15.480 --> 00:53:16.900
und das funktioniert ja nicht mehr und dann

00:53:16.900 --> 00:53:19.000
findet er die Datenbank nicht mehr und ich

00:53:19.000 --> 00:53:21.540
erinnere mich daran, dass ich diese Geschichten bei PyCharm schon häufiger hatte

00:53:21.540 --> 00:53:23.400
und dann war zum Beispiel

00:53:23.400 --> 00:53:25.400
die Lösung für einen Großteil dieser Probleme irgendwie dann

00:53:25.400 --> 00:53:27.340
auf das Root-Verzeichnis irgendwie

00:53:27.340 --> 00:53:29.420
in der Projektübersicht rechtsklick drauf machen und dann

00:53:29.420 --> 00:53:31.420
sagen Set as Test Root und dann hat es funktioniert.

00:53:32.100 --> 00:53:33.080
So, okay.

00:53:35.380 --> 00:53:36.680
Naja, also

00:53:36.680 --> 00:53:39.220
solche Sachen halt. Aber das muss man halt, also

00:53:39.220 --> 00:53:42.220
und vorher dachte ich so, naja, das mit den Tests funktioniert halt einfach nicht richtig.

00:53:42.440 --> 00:53:44.480
Aber gut, das funktioniert schon, wenn man weiß, wie man es konfigurieren muss,

00:53:44.540 --> 00:53:46.160
aber das ist halt manchmal schon ein bisschen...

00:53:46.160 --> 00:53:48.620
Ja, so was ist eigentlich die IDE von selber wissen,

00:53:48.700 --> 00:53:50.680
dass sie erstmal einen Root ausprobiert oder sowas, wenn es gerade nicht geht.

00:53:51.560 --> 00:53:52.200
Ja, keine Ahnung.

00:53:52.740 --> 00:53:55.320
Aber ansonsten,

00:53:55.420 --> 00:53:57.640
eine Sache auch im Stream,

00:53:58.040 --> 00:53:59.160
da habe ich dann geflucht darüber,

00:53:59.460 --> 00:54:02.120
dass, oder nicht geflucht,

00:54:02.180 --> 00:54:04.120
ich habe gerade gesagt, hier verwende ich ja PyCharm

00:54:04.120 --> 00:54:05.880
auf Intel, aber wenn ich jetzt irgendwie

00:54:05.880 --> 00:54:07.160
auf meinem M1 Mac unterwegs bin,

00:54:07.160 --> 00:54:09.500
dann nehme ich immer VS Code, weil Pileschramm kann ich da gar nicht

00:54:09.500 --> 00:54:11.340
verwenden, das ist einfach zu langsam, ich finde es ja auch schon

00:54:11.340 --> 00:54:13.400
auf Intel langsam, aber auf

00:54:13.400 --> 00:54:15.580
ARM geht es

00:54:15.580 --> 00:54:17.420
gar nicht und

00:54:17.420 --> 00:54:19.500
es fehlt die ganze Zeit Strom wie Hölle, ja, das heißt

00:54:19.500 --> 00:54:21.720
eigentlich hat ja so ein M1

00:54:21.720 --> 00:54:23.540
Mac super Akkulaufzeit, aber

00:54:23.540 --> 00:54:25.480
wenn man Pileschramm benutzt, so wie ich das

00:54:25.480 --> 00:54:27.500
getan habe, dann halt nicht, dann sagt das den Akku

00:54:27.500 --> 00:54:28.880
sofort leer, also

00:54:28.880 --> 00:54:31.340
und deswegen nehme ich immer

00:54:31.340 --> 00:54:33.580
VS Code, dann kam

00:54:33.580 --> 00:54:35.140
auch so ein Chat und so, ah ja

00:54:35.140 --> 00:54:36.840
Bist du dir eigentlich sicher, dass du das

00:54:36.840 --> 00:54:38.820
native, dass du

00:54:38.820 --> 00:54:41.120
die für ARM

00:54:41.120 --> 00:54:42.580
kompilierte Version da nimmst

00:54:42.580 --> 00:54:45.160
und nicht die alte Intel-basierte,

00:54:45.320 --> 00:54:46.420
die dann emuliert wird, weil die

00:54:46.420 --> 00:54:48.600
oh Mist, ist tatsächlich so,

00:54:48.660 --> 00:54:51.080
ein neues PyCharm genommen und

00:54:51.080 --> 00:54:51.820
das ist deutlich besser.

00:54:53.160 --> 00:54:54.240
Also offenbar

00:54:54.240 --> 00:54:55.940
brauchte man da eine

00:54:55.940 --> 00:54:59.000
JVM, die halt für ARM

00:54:59.000 --> 00:55:01.020
kompiliert ist und nicht die für Intel,

00:55:01.380 --> 00:55:03.020
weil wenn man die nimmt und die

00:55:03.020 --> 00:55:04.840
auf dem M1 emuliert wird, dann

00:55:04.840 --> 00:55:06.980
Also die Emulation funktioniert wohl ganz gut, aber wenn man sowas

00:55:06.980 --> 00:55:08.100
emuliert, dann ist halt wohl scheiße.

00:55:08.760 --> 00:55:11.220
Und das war auch eine Geschichte,

00:55:11.380 --> 00:55:13.200
die mir jemand im Chat einfach so gesagt hat.

00:55:13.820 --> 00:55:14.080
Voll gut.

00:55:15.780 --> 00:55:15.940
Ja.

00:55:18.060 --> 00:55:18.460
Tja.

00:55:20.260 --> 00:55:20.620
Genau.

00:55:20.820 --> 00:55:22.400
Security, genau. Twitch hatten wir.

00:55:23.000 --> 00:55:24.120
War sonst noch irgendwas mit News?

00:55:24.320 --> 00:55:25.940
Nee, mir fällt eigentlich, wie gesagt, nichts ein.

00:55:26.040 --> 00:55:28.400
Meine Güte. Vielleicht liegt es auch einfach daran, dass wir so lange nichts mehr

00:55:28.400 --> 00:55:28.800
gemacht haben.

00:55:29.940 --> 00:55:32.380
Aber News und wir sind bei einer Stunde. Was ist denn da los?

00:55:32.600 --> 00:55:33.760
Ja, vielleicht.

00:55:34.840 --> 00:55:36.380
ein bisschen gequatscht.

00:55:36.680 --> 00:55:37.740
Ja, okay.

00:55:38.500 --> 00:55:40.700
Dann stelle ich jetzt einfach nochmal meine paar doofen Fragen

00:55:40.700 --> 00:55:42.820
und vielleicht fällt dir jetzt sowas ein zu diesem Thema.

00:55:43.760 --> 00:55:44.900
Und zwar ging es

00:55:44.900 --> 00:55:46.620
tatsächlich darum, wenn ich jetzt in Python

00:55:46.620 --> 00:55:49.180
irgendwie

00:55:49.180 --> 00:55:51.160
mehrere

00:55:51.160 --> 00:55:52.620
Prozesse habe oder sowas, oder

00:55:52.620 --> 00:55:54.420
ich weiß nicht, ob das einen Unterschied macht,

00:55:55.100 --> 00:55:55.500
und zwar

00:55:55.500 --> 00:55:58.820
die ich nicht herausstarte aus einem

00:55:58.820 --> 00:56:00.820
Manshade oder sowas, sondern die beispielsweise

00:56:00.820 --> 00:56:02.800
wie beim Gunicorn einfach

00:56:02.800 --> 00:56:04.620
weggeforkt werden, während er es aufmacht.

00:56:04.620 --> 00:56:07.020
und macht dann verschiedene Prozesse auf und macht die gleichzeitig auf und so.

00:56:07.540 --> 00:56:09.160
Ich möchte aber über all diese Prozesse hinweg

00:56:09.160 --> 00:56:11.240
einen geteilten Speicherbereich haben

00:56:11.240 --> 00:56:13.260
und da irgendwas am liebsten

00:56:13.260 --> 00:56:14.820
Python-Objekte reinschreiben können

00:56:14.820 --> 00:56:17.160
mit, weiß nicht, Funktionen drin

00:56:17.160 --> 00:56:19.400
oder irgendwas, dass da halt einfach genau gecallt werden kann.

00:56:19.760 --> 00:56:20.660
Wie mache ich das am besten?

00:56:21.440 --> 00:56:21.820
Geht nicht.

00:56:23.960 --> 00:56:24.880
Das würde ich sagen,

00:56:24.960 --> 00:56:26.920
geht tatsächlich nicht. Also mit

00:56:26.920 --> 00:56:28.960
ThreadSkills, da ist es halt so, die teilen

00:56:28.960 --> 00:56:29.760
sich halt einen

00:56:29.760 --> 00:56:31.860
Adressraum und

00:56:31.860 --> 00:56:33.380
einen Speicher.

00:56:34.460 --> 00:56:36.200
Aber das ist eigentlich der Hauptunterschied zwischen

00:56:36.200 --> 00:56:37.400
Threads und Prozessen.

00:56:37.780 --> 00:56:40.000
Auf der Betriebssystem-Ebene.

00:56:40.860 --> 00:56:41.860
Also Threads

00:56:41.860 --> 00:56:44.180
laufen halt im gleichen Prozess

00:56:44.180 --> 00:56:45.340
und haben den gleichen Hauptspeicher.

00:56:46.480 --> 00:56:48.480
Und Prozesse sind halt komplett voneinander getrennt.

00:56:48.600 --> 00:56:50.320
Können gegenseitig

00:56:50.320 --> 00:56:51.480
nicht auf Sachen zugreifen.

00:56:52.540 --> 00:56:54.340
Da braucht man dann halt so Interprozess-

00:56:54.340 --> 00:56:56.200
Kommunikationsgeschichten, um halt zwischen

00:56:56.200 --> 00:56:57.140
den Prozessen zu kommunizieren.

00:56:57.140 --> 00:56:58.640
Also das heißt, das geht tatsächlich gar nicht

00:56:58.640 --> 00:57:01.020
aus Python heraus. Das heißt, ich muss irgendwie was Externes

00:57:01.020 --> 00:57:03.000
nehmen, wie ein Memcached-D-Redis oder sonst

00:57:03.000 --> 00:57:04.820
irgendwas, also eine quasi Art von Datenbank

00:57:04.820 --> 00:57:06.920
im Speicher, die dann extra läuft und

00:57:06.920 --> 00:57:08.680
auf dich dann von allen diesen Prozessen

00:57:08.680 --> 00:57:10.360
irgendwie einen Zuruf bekomme über

00:57:10.360 --> 00:57:12.120
URL oder irgendwas.

00:57:12.340 --> 00:57:14.840
Ja, also, oder was auch immer, es muss ja

00:57:14.840 --> 00:57:16.620
nicht irgendwie jetzt ein Redis oder

00:57:16.620 --> 00:57:18.940
Memcached-D-Redis sein, oder es kann auch eine Datenbank sein

00:57:18.940 --> 00:57:20.800
oder es kann halt ein File sein

00:57:20.800 --> 00:57:22.760
oder es kann halt eine Pipe sein oder

00:57:22.760 --> 00:57:24.760
Ja, das habe ich auch überlegt, also kann man

00:57:24.760 --> 00:57:26.740
aus Preisnachweis einfach eine File in Memory aufmachen, auf die dann

00:57:26.740 --> 00:57:28.200
alle Prozesse durchgeführt haben? Nein, auch nicht wahrscheinlich.

00:57:28.680 --> 00:57:30.420
Doch, klar, das kann man schon machen.

00:57:30.420 --> 00:57:31.140
in Memory?

00:57:31.680 --> 00:57:33.180
In Memory, warum in Memory?

00:57:33.320 --> 00:57:35.200
Ja, weil ich will ja nicht I.O. machen auf der Platte,

00:57:35.320 --> 00:57:37.380
weil ich will ja genau diesen Speed halt nicht verlieren.

00:57:38.440 --> 00:57:39.940
Naja, du kannst auch

00:57:39.940 --> 00:57:42.020
Chat Memory, das geht auch, aber die Frage wäre halt,

00:57:43.960 --> 00:57:45.820
du musst ja sowieso,

00:57:46.140 --> 00:57:47.560
also dein Bottleneck wird dann ja eh

00:57:47.560 --> 00:57:49.900
die Serialisierung und Deserialisierung sein.

00:57:50.160 --> 00:57:51.780
Aber das heißt, also okay, das war nämlich genau,

00:57:51.860 --> 00:57:53.680
nochmal die nächste Frage, ich muss quasi

00:57:53.680 --> 00:57:55.780
meine Objekte immer serialisieren,

00:57:56.260 --> 00:57:57.900
weil ich nicht darum rumkomme,

00:57:57.900 --> 00:57:59.640
weil ich nur als irgendwie in Bytes oder so

00:57:59.640 --> 00:58:00.920
im Speicher schreiben kann.

00:58:01.320 --> 00:58:03.540
Genau, du musst halt das irgendwie in eine Form bringen, die man halt

00:58:03.540 --> 00:58:04.380
irgendwo hinschreiben kann, genau.

00:58:06.180 --> 00:58:07.660
Ja, und dann hatte ich die tolle Idee,

00:58:07.740 --> 00:58:09.500
das dann zu picken, dann sagte Jochen, oh, oh, oh.

00:58:10.000 --> 00:58:11.560
Kann man machen, ist aber,

00:58:12.360 --> 00:58:12.560
ja.

00:58:13.340 --> 00:58:13.540
Ja.

00:58:15.020 --> 00:58:17.580
Ja, also Jochen hat gesagt, das wäre

00:58:17.580 --> 00:58:19.400
keine gute Idee, weil man könnte ja dann da,

00:58:19.600 --> 00:58:21.000
wenn man diesen Speicherbereich kontrolliert,

00:58:21.460 --> 00:58:23.520
da was reinschreiben, dann wird es einfach sehr realisiert und dann macht es

00:58:23.520 --> 00:58:25.420
bumm. Ja, genau, also Sachen

00:58:25.420 --> 00:58:27.700
ausentpickeln ist halt quasi

00:58:27.700 --> 00:58:29.620
das gleiche wie Code ausführen. Also daher muss man

00:58:29.620 --> 00:58:30.880
ein bisschen. Da gibt es auch tatsächlich

00:58:30.880 --> 00:58:33.300
Sicherheitslücken, die große Seiten,

00:58:33.760 --> 00:58:34.940
ich weiß nicht, welche das war,

00:58:35.500 --> 00:58:36.660
das war auch irgendein Contest,

00:58:37.100 --> 00:58:38.820
ich habe es wieder vergessen, welche Seite das war,

00:58:38.880 --> 00:58:40.640
war eine von den ganz großen,

00:58:41.760 --> 00:58:43.740
die, wo jemand so reingekommen ist,

00:58:43.820 --> 00:58:45.200
war Django, auch Django, und

00:58:45.200 --> 00:58:47.020
da, die hatten irgendwie auch,

00:58:47.200 --> 00:58:49.080
ich weiß nicht, Memcached oder Redis benutzt,

00:58:50.140 --> 00:58:51.400
und da auch, die hatten

00:58:51.400 --> 00:58:53.360
gepickelte Sachen in User Cookies abgelegt.

00:58:54.740 --> 00:58:55.140
Und

00:58:55.140 --> 00:58:57.420
das war noch nicht das Problem,

00:58:57.420 --> 00:58:59.280
man konnte durch irgendeinen Trick, konnte man halt

00:58:59.280 --> 00:59:01.280
den Kram irgendwie in den Memcached-Di bringen

00:59:01.280 --> 00:59:02.400
und dann da

00:59:02.400 --> 00:59:04.900
den Applikations-Server dazu bringen, das dann halt

00:59:04.900 --> 00:59:06.360
zu entpickeln. Und dann

00:59:06.360 --> 00:59:08.940
sind da

00:59:08.940 --> 00:59:10.800
Leute so da reingekommen.

00:59:11.160 --> 00:59:12.680
Also ja, das ist

00:59:12.680 --> 00:59:14.640
problematisch. Also wenn

00:59:14.640 --> 00:59:17.120
die Users schaffen, irgendwie

00:59:17.120 --> 00:59:19.260
da in der Applikation was Gepickeltes zu geben,

00:59:19.340 --> 00:59:20.540
wo sie Kontrolle drüber hatten, dann

00:59:20.540 --> 00:59:23.160
ja. Oder es war auch irgendwie

00:59:23.160 --> 00:59:25.160
signiert oder so und an der Signatur war

00:59:25.160 --> 00:59:26.460
irgendwas kaputt, ich weiß es nicht genau.

00:59:27.140 --> 00:59:28.220
Aber ja.

00:59:28.220 --> 00:59:30.400
Das ist ja zirrelisch, wenn ich auf meinem eigenen Server

00:59:30.400 --> 00:59:32.520
laufe, wenn einer dann da schon drin ist,

00:59:32.600 --> 00:59:33.260
dann hat der eh schon Routen.

00:59:33.940 --> 00:59:34.680
Ja, aber das ist ja

00:59:34.680 --> 00:59:38.380
vielleicht, gibt es ja irgendwie, ich meine, wie kommen

00:59:38.380 --> 00:59:39.160
die Daten da rein?

00:59:41.440 --> 00:59:42.260
Wenn jemand

00:59:42.260 --> 00:59:44.320
quasi, vielleicht hat ja jemand dann nur

00:59:44.320 --> 00:59:46.520
Zugriff auf irgendein, ist irgendwo reingekommen

00:59:46.520 --> 00:59:47.840
über, weiß nicht, der läuft vielleicht auch noch

00:59:47.840 --> 00:59:50.780
irgendwelche anderen Services und kann halt nur eine Netzverbindung

00:59:50.780 --> 00:59:51.200
aufmachen.

00:59:51.480 --> 00:59:53.820
Dann lauscht er aber dann in Memcached

00:59:53.820 --> 00:59:55.760
und dann kann er da was reinlegen und dann

00:59:55.760 --> 00:59:56.960
wird das ausgeführt.

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

01:00:20.140 --> 01:00:24.420
Ja, also die Frage ist halt, wie es sonst gehen könnte, da muss man sich halt eine andere Lösung für überlegen.

01:00:24.420 --> 01:00:29.500
Ja, also mein Anwendungszweck ist eigentlich nur, dass ich tatsächlich über verschiedene

01:00:29.500 --> 01:00:32.440
Gannikon-Worker-Prozesse Zugriff auf ein gemeinsames Dict haben wollen würde,

01:00:32.920 --> 01:00:34.120
dass ich halt so Dinge abblicken kann.

01:00:34.620 --> 01:00:38.640
Ja, aber warum nicht einfach eine Datenbank nehmen?

01:00:38.720 --> 01:00:39.800
Ich meine, dafür ist die Datenbank eigentlich da.

01:00:39.900 --> 01:00:42.420
Ja, weil es da zum Beispiel keine gibt oder halt, dass du eine SQLite hast,

01:00:42.460 --> 01:00:43.320
die halt dann schon gelegt ist und so.

01:00:43.340 --> 01:00:44.840
Ach so, wenn du keine Datenbank hast, ja.

01:00:45.820 --> 01:00:46.640
Warum nicht einen Pfeil nehmen?

01:00:47.860 --> 01:00:48.240
Zu langsam?

01:00:49.300 --> 01:00:51.060
Wieso ist das langsam? Muss ja nicht langsam sein.

01:00:51.620 --> 01:00:54.140
Also ja, natürlich ist das eventuell langsam.

01:00:54.420 --> 01:00:56.600
oder kommt auf deine Daten an.

01:00:57.000 --> 01:00:58.180
Gut, aber theoretisch könnte, wenn dann jemand

01:00:58.180 --> 01:01:00.400
durch das Pfeil hat, kann er auch alles Mögliche reinschreiben.

01:01:00.800 --> 01:01:02.320
Ja, gepickelte Sachen darf man da nicht reinschreiben.

01:01:02.380 --> 01:01:04.780
Ja, aber das ist ja genau dasselbe Problem dann.

01:01:06.960 --> 01:01:07.820
Also mein Problem, ja.

01:01:08.500 --> 01:01:10.740
Warum möchtest du gepickelte Sachen

01:01:10.740 --> 01:01:12.080
abspeichern?

01:01:13.300 --> 01:01:14.720
Um sie später zu verwenden.

01:01:14.860 --> 01:01:16.500
Also weil ich zum Beispiel, ich habe bestimmte Routinen,

01:01:16.580 --> 01:01:18.820
die ich ausfüllen möchte mit Argumenten und so weiter,

01:01:19.380 --> 01:01:20.540
die quasi schon feststehen, aber

01:01:20.540 --> 01:01:21.840
die zu einem späteren Zeitpunkt

01:01:21.840 --> 01:01:24.020
gelaufen. Ja, aber du kannst ja

01:01:24.020 --> 01:01:26.020
sozusagen durchaus sagen, ruf die

01:01:26.020 --> 01:01:27.960
Funktion mit den Parametern auf. Die Parameter

01:01:27.960 --> 01:01:30.140
kannst du ja schon vielleicht irgendwie, je nachdem

01:01:30.140 --> 01:01:31.180
was das ist, also natürlich.

01:01:32.700 --> 01:01:36.020
Ja, aber du kannst aber auch den Namen von der

01:01:36.020 --> 01:01:37.900
Funktion einfach speichern. Ja, kann ich das?

01:01:38.260 --> 01:01:40.040
Das kannst du machen. Ja, okay. Und wie kriege

01:01:40.040 --> 01:01:41.820
ich die dann rausgepult? Muss ich nochmal kurz überlegen.

01:01:42.740 --> 01:01:44.080
Jaja, das ist dann halt nicht mehr so einfach,

01:01:44.160 --> 01:01:45.260
dass man einfach sagt, JSON

01:01:45.260 --> 01:01:48.060
dumps und loads. Sondern da muss

01:01:48.060 --> 01:01:50.020
man das halt selber wieder, sich daraus ein Objekt

01:01:50.020 --> 01:01:51.280
zusammenbauen, aber das kann man ja auch machen.

01:01:51.940 --> 01:01:54.000
Aber wie baue ich dann den Pfad zu dieser Funktion

01:01:54.000 --> 01:01:54.280
zusammen?

01:01:54.280 --> 01:01:55.100
Die muss ich dann irgendwie

01:01:55.100 --> 01:01:58.320
später spontan ein, wie das geht.

01:01:58.420 --> 01:02:00.340
Keine Ahnung, ich habe jetzt Pfad zu meiner

01:02:00.340 --> 01:02:02.420
Applikation dot functions

01:02:02.420 --> 01:02:03.520
dot fuba.

01:02:04.600 --> 01:02:05.880
Kannst du einfach den Pfad reinschreiben.

01:02:06.920 --> 01:02:08.160
Den Pfad zu der Funktion tatsächlich.

01:02:08.400 --> 01:02:09.500
Dann machst du mit

01:02:09.500 --> 01:02:12.220
Importlib, importierst du das Ding dann.

01:02:13.240 --> 01:02:13.960
Mit Importlib.

01:02:15.180 --> 01:02:16.120
Relativ oder absolut?

01:02:17.080 --> 01:02:17.760
Ist das egal?

01:02:20.020 --> 01:02:21.560
Ja, weiß ich nicht. Wahrscheinlich

01:02:21.560 --> 01:02:23.240
ist absolut so ein bisschen,

01:02:24.180 --> 01:02:25.400
also ja, kommt drauf an, wo das

01:02:25.400 --> 01:02:27.880
wahrscheinlich wird man es

01:02:27.880 --> 01:02:29.100
absolut zum Paket halt

01:02:29.100 --> 01:02:31.660
Okay, ja, das muss ich mal probieren.

01:02:31.980 --> 01:02:33.520
Weil vielleicht wäre das tatsächlich, also da den Namen,

01:02:33.600 --> 01:02:35.000
anstatt der Callable zu nehmen, eine Rettung.

01:02:35.440 --> 01:02:37.220
Dann hätte ich halt nur noch Argumente, aber

01:02:37.220 --> 01:02:39.200
gut, die dürfen dann halt...

01:02:39.200 --> 01:02:41.240
Die Frage ist, wie viele unterschiedliche Sachen können das denn sein?

01:02:42.540 --> 01:02:43.660
Kann man da nicht, das ist sowieso

01:02:43.660 --> 01:02:45.760
irgendwie eher in so einem Lookup, dann nimmst du halt

01:02:45.760 --> 01:02:47.660
irgendeinen Namen, völlig egal, musst du nicht über Import

01:02:47.660 --> 01:02:49.580
machen, das will ich gerade auch, das ist vielleicht

01:02:49.580 --> 01:02:51.340
nicht so eine schlaue Idee, sondern

01:02:51.340 --> 01:02:53.360
du hast halt irgendwo ein Dikt, wo die ganzen

01:02:53.360 --> 01:02:55.520
Funktionen drin liegen, das halt irgendwie mal

01:02:55.520 --> 01:02:57.560
installisierst und dann musst du nur noch deine Funktionen halt

01:02:57.560 --> 01:02:59.320
du hast sozusagen

01:02:59.320 --> 01:03:01.420
ein Registry für diese Funktionen.

01:03:01.420 --> 01:03:03.460
Okay, ja, das Problem ist halt, dass wenn jemand

01:03:03.460 --> 01:03:05.400
halt jetzt, also es geht halt um so

01:03:05.400 --> 01:03:07.280
eine Event-Queue, ja, wenn jemand halt jetzt

01:03:07.280 --> 01:03:09.220
neue Events anlegen möchte, die er halt quasi

01:03:09.220 --> 01:03:11.300
dann einfach über so einen Dekorator subscriben

01:03:11.300 --> 01:03:12.400
kann auf irgendeinen

01:03:12.400 --> 01:03:15.340
Typ, den er sich da selber quasi aussuchen kann,

01:03:15.880 --> 01:03:17.220
indem er das da subscribt, weil halt

01:03:17.220 --> 01:03:18.620
Typen, die es noch nicht gibt, werden einfach erstellt.

01:03:19.580 --> 01:03:21.620
dann müsste man ja quasi diese Funktion,

01:03:21.900 --> 01:03:23.820
die ja dann, also ein Event

01:03:23.820 --> 01:03:25.980
ist, dann auch registrieren.

01:03:26.340 --> 01:03:27.680
Und wenn derjenige das dann vergisst, dann

01:03:27.680 --> 01:03:29.360
funktioniert es halt nicht. Und das ist halt so ein bisschen nervig, weil

01:03:29.360 --> 01:03:31.900
es halt an zwei Stellen, das dann halt

01:03:31.900 --> 01:03:33.780
überprüft werden muss, der kann halt nicht irgendein

01:03:33.780 --> 01:03:35.700
Event erstellen und das dann einfach registrieren und

01:03:35.700 --> 01:03:37.680
dann einen Händler für nehmen, sondern der muss sich halt an eine

01:03:37.680 --> 01:03:39.320
Stelle an die Registrierung wenden und das muss er halt

01:03:39.320 --> 01:03:41.680
händisch machen. Das hätte ich mir halt gerne

01:03:41.680 --> 01:03:43.740
gespart, weil es halt bestimmte Entwickler gibt, die das

01:03:43.740 --> 01:03:45.340
verstehen oder nicht verstehen,

01:03:45.640 --> 01:03:47.480
aber denen vielleicht einfach eine Methode schreiben können,

01:03:47.480 --> 01:03:47.980
die dann irgendwas macht.

01:03:47.980 --> 01:03:49.620
hat. Naja gut,

01:03:49.760 --> 01:03:50.540
du kannst ja auch

01:03:50.540 --> 01:03:53.580
irgendwie überlegen, wie man

01:03:53.580 --> 01:03:55.880
die Funktion adressiert sozusagen

01:03:55.880 --> 01:03:57.880
und das kannst

01:03:57.880 --> 01:03:58.580
du ja dann selber machen.

01:04:00.100 --> 01:04:01.520
Naja gut, ich weiß...

01:04:01.520 --> 01:04:03.560
Ich glaube, dieses Pickeln ist halt

01:04:03.560 --> 01:04:05.520
die einfachere Lösung.

01:04:06.040 --> 01:04:07.460
Ja, aber das weiß ich nicht.

01:04:07.620 --> 01:04:09.100
Also Pickel...

01:04:09.100 --> 01:04:11.380
Die Frage ist halt, wo es geht. Ob es nur über so ein

01:04:11.380 --> 01:04:13.360
Maincash-Di geht oder so ein Redis geht oder

01:04:13.360 --> 01:04:15.420
halt noch eine andere Variante gibt, die

01:04:15.420 --> 01:04:17.280
irgendwie einfacher ist.

01:04:17.280 --> 01:04:19.140
irgendwie. Kann man aus Python raus

01:04:19.140 --> 01:04:21.020
einfach so ein Chat-Memory außerhalb dann auch machen

01:04:21.020 --> 01:04:23.340
oder geht das nur mit sowas wie Memcached-Dien-Redis?

01:04:23.980 --> 01:04:24.800
Gibt es im Python-Modus das?

01:04:25.900 --> 01:04:27.020
Man kann das schon machen, aber

01:04:27.020 --> 01:04:29.000
ich weiß nicht, ob das empfehlenswert wäre, weil

01:04:29.000 --> 01:04:30.960
du musst ja irgendwie auch darauf

01:04:30.960 --> 01:04:32.240
zugreifen und

01:04:32.240 --> 01:04:35.140
das dafür

01:04:35.140 --> 01:04:37.580
bietet ja sowohl Memcached-Dien-Redis

01:04:37.580 --> 01:04:39.180
Dinge an und wenn du das selber machst,

01:04:39.280 --> 01:04:41.220
schwierig, weil was ist, wenn

01:04:41.220 --> 01:04:42.980
dann der Applikations-Server

01:04:42.980 --> 01:04:45.080
jetzt einen Prozess läuft auf einem anderen Rechner, dann ist das

01:04:45.080 --> 01:04:45.940
auch wieder ein Problem.

01:04:47.280 --> 01:05:02.340
Also gut, ich meine, klar, natürlich die Abhängigkeiten sind halt blöd, jetzt dann deswegen noch ein zusätzliches Redis braucht oder so. Das ist halt die Frage, ob es nicht schon irgendwas gibt, was man schon hat, eine Datenbank oder ein Redis oder ein Bank-Hashtag.

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

01:05:17.280 --> 01:05:19.140
und die dann jeweils unabhängig voneinander sind

01:05:19.140 --> 01:05:21.440
und dann nicht erwarten, dass schon irgendwo anders so ein Redis rumliegt

01:05:21.440 --> 01:05:23.400
und dann neue Verbindungen aufmachen,

01:05:23.480 --> 01:05:25.240
neuen Redis-Nutzer mit neuem Authentic-Bit,

01:05:25.300 --> 01:05:27.280
bla bla bla. Das ist ja relativ

01:05:27.280 --> 01:05:29.240
aufwendig für so kleine Sachen, dass man irgendwo mal kurz

01:05:29.240 --> 01:05:30.840
so zwei Kies im Dick ablegen will

01:05:30.840 --> 01:05:32.280
und dafür halt so ein Rattenschwanz...

01:05:32.280 --> 01:05:34.360
Dann wäre halt die Frage, wozu brauchst du denn dann mehrere Prozesse?

01:05:35.000 --> 01:05:37.060
Ja gut, aber das liegt halt nur daran, dass

01:05:37.060 --> 01:05:39.300
der Ganykorn da so ein bisschen mehr Power kriegen soll.

01:05:39.520 --> 01:05:41.140
Wenn man jetzt dem Ganykorn sagt, du brauchst noch

01:05:41.140 --> 01:05:42.480
einen Worker, dann reicht es ja halt.

01:05:44.520 --> 01:05:45.220
Ich hatte irgendwo

01:05:45.220 --> 01:05:46.780
bei Stack Overflow mal so eine Antwort gesehen,

01:05:46.780 --> 01:05:48.900
hat er Preload gemacht, dann hat er erst die Applikation geladen

01:05:48.900 --> 01:05:50.880
und dann die Worker. Ja, aber wozu brauchst du denn da mehrere

01:05:50.880 --> 01:05:52.660
Prozesse? Das ist nochmal die Frage.

01:05:52.840 --> 01:05:54.360
Warum mehrere Prozesse an der Stelle?

01:05:55.340 --> 01:05:56.780
Panic On Work macht Worker-Prozesse auf.

01:05:56.940 --> 01:05:58.500
Ja, aber musst du ja nicht. Du kannst ja einen aufmachen.

01:05:58.500 --> 01:06:00.860
Genau, aber das heißt, das müsste man halt dann als harte Restriktion haben.

01:06:00.940 --> 01:06:02.000
Das geht halt nur mit einem Worker-Prozess.

01:06:02.440 --> 01:06:04.540
Und man hat dann unerwartete Seiten. Oh, du meinst, wenn da jemand

01:06:04.540 --> 01:06:07.040
mehr startet. Ja, genau.

01:06:07.180 --> 01:06:08.800
Dann schießt es halt danach und dann funktioniert das halt

01:06:08.800 --> 01:06:09.340
nicht mehr so richtig.

01:06:11.380 --> 01:06:11.560
Ja.

01:06:12.420 --> 01:06:14.860
Ja, stimmt. Nun, die Frage ist auch, ob man halt so ein Workaround

01:06:14.860 --> 01:06:16.740
hat für solche Fälle. Aber was geht da eigentlich

01:06:16.740 --> 01:06:18.660
für alle Dinge, die halt irgendwie einzelne Instanzen haben.

01:06:18.780 --> 01:06:21.420
Also du hast irgendwie von irgendwas einen Singleton-Pattern

01:06:21.420 --> 01:06:22.900
oder sowas auf irgendeiner Klasse oder so

01:06:22.900 --> 01:06:24.960
und das ist ja immer das Problem, dass das halt bei so einem

01:06:24.960 --> 01:06:26.920
Forken in so einem Web-Applikations-

01:06:26.920 --> 01:06:27.560
Server-Prozess

01:06:27.560 --> 01:06:30.880
nicht mehr so wirklich identitär ist.

01:06:31.880 --> 01:06:33.040
Okay, aber ich würde

01:06:33.040 --> 01:06:34.940
sagen, das braucht man ja ganz selten oder sowas.

01:06:35.060 --> 01:06:35.260
Na?

01:06:37.040 --> 01:06:39.280
Ich bin ja in der letzten Halbzeit schon zweimal drüber gestolpert.

01:06:40.580 --> 01:06:40.940
Oder

01:06:40.940 --> 01:06:42.840
meine Vermutung wäre oft, dann ist

01:06:42.840 --> 01:06:44.280
irgendwas an dem Problem nicht richtig oder

01:06:44.280 --> 01:06:45.480
an der Lösung oder

01:06:45.480 --> 01:06:48.420
weil wenn das die Lösung

01:06:48.420 --> 01:06:49.880
für das Problem ist, dann ist wahrscheinlich

01:06:49.880 --> 01:06:52.400
hat man das Problem nicht richtig verstanden

01:06:52.400 --> 01:06:54.120
oder vielleicht ist, ich weiß es nicht genau

01:06:54.120 --> 01:06:56.180
aber das gibt es echt fast nie

01:06:56.180 --> 01:06:58.180
Ja, also als Beispiel

01:06:58.180 --> 01:07:00.320
es darf ja nur eine offene

01:07:00.320 --> 01:07:02.240
Verbindung zu irgendeinem anderen

01:07:02.240 --> 01:07:04.180
Rechner geben, weil er nicht mehr als eine gleichzeitig

01:07:04.180 --> 01:07:05.220
offene Verbindung akzeptiert

01:07:05.220 --> 01:07:08.260
So, und dann könnte man jetzt irgendwie Verbindungen

01:07:08.260 --> 01:07:08.760
durchreichen

01:07:08.760 --> 01:07:12.060
und die halt von mehreren Prozessen

01:07:12.060 --> 01:07:12.680
trotzdem nutzen

01:07:12.680 --> 01:07:15.280
wenn man die nicht gleichzeitig nutzt, zum Beispiel

01:07:15.280 --> 01:07:45.260
und Jochen unterhalten sich über die Programmiersprache Python

01:07:45.280 --> 01:07:46.660
durchreichen.

01:07:47.220 --> 01:07:49.340
Ich habe das Problem, glaube ich, noch nicht so wirklich verstanden.

01:07:50.720 --> 01:07:55.400
Wie willst du das denn lösen? Das kannst du ja gar nicht lösen.

01:07:55.500 --> 01:07:57.420
Ja, warum? Also so ein Zugangstoken

01:07:57.420 --> 01:07:59.360
zum Beispiel, den ich dafür brauche, den will ich

01:07:59.360 --> 01:08:01.380
ja nicht unbedingt jedes Mal irgendwo reinschreiben.

01:08:02.440 --> 01:08:03.180
Außer vielleicht

01:08:03.180 --> 01:08:05.600
in so eine Platte. Und dann die Frage ist, schreibe ich die halt in Redis rein,

01:08:05.980 --> 01:08:07.520
hole mir den immer wieder ab, gucke halt, ob der da ist.

01:08:07.560 --> 01:08:08.820
Wenn es nicht da ist, dann hole ich mir einen neuen oder so.

01:08:10.220 --> 01:08:11.100
Benutze ich den halt immer wieder.

01:08:13.100 --> 01:08:13.520
Weiß nicht.

01:08:13.880 --> 01:08:15.020
Das ist halt so ein Prozessding.

01:08:15.020 --> 01:08:16.460
Wie komme ich denn da sonst ran?

01:08:17.040 --> 01:08:18.600
Ohne, dass ich dann jedes Mal wieder neu nachfrage.

01:08:24.100 --> 01:08:25.800
Wieso muss das denn geteilt werden?

01:08:26.860 --> 01:08:29.440
Also ich würde sagen, wenn du keins hast, dann holst du es erst halt.

01:08:30.140 --> 01:08:31.900
Genau, aber das wurde jetzt, ich habe jetzt mehrere Prozesse.

01:08:32.060 --> 01:08:33.120
Und ich habe halt den Zugangstoken.

01:08:33.440 --> 01:08:36.560
Und beispielsweise darf man Zugangstoken nur alle so und so viele Sekunden holen.

01:08:36.660 --> 01:08:37.020
Oder so.

01:08:37.480 --> 01:08:38.860
Sonst kriegt man keinen mehr oder wird geblockt.

01:08:40.000 --> 01:08:42.500
Da gibt es halt so komische Antworten, die sowas machen.

01:08:42.500 --> 01:08:43.940
Das ist halt irgendwo zentralhandig.

01:08:44.200 --> 01:08:44.600
Genau, ja.

01:08:45.020 --> 01:08:47.080
Das Problem, daran stehen wir jetzt.

01:08:47.240 --> 01:08:48.820
Was aber auch blöd ist.

01:08:49.100 --> 01:08:49.920
Das willst du ja auch nicht.

01:08:50.380 --> 01:08:52.960
Ist das nicht eher ein Deployment-Problem?

01:08:53.480 --> 01:08:53.620
Nee.

01:08:54.660 --> 01:08:57.080
Wo gehören solche Sachen eigentlich hin?

01:08:57.160 --> 01:08:59.240
Solche Sachen gehören eigentlich in die Umgebungsvariablen

01:08:59.240 --> 01:09:00.720
von dem Prozess. Ja, aber die kenne ich ja noch nicht.

01:09:00.780 --> 01:09:02.680
Und ich kann ja nicht das im Deployment dann ablegen,

01:09:02.760 --> 01:09:04.340
wenn der halt nach 10 Minuten wieder ausläuft.

01:09:05.080 --> 01:09:06.860
Ich darf halt nur alle

01:09:06.860 --> 01:09:09.260
5 Minuten fragen, aber nach einer Stunde ist es halt wieder weg.

01:09:10.220 --> 01:09:11.060
Oder so. Und das ist halt blöd,

01:09:11.060 --> 01:09:12.660
weil ich brauche halt alle 2 Sekunden.

01:09:12.780 --> 01:09:14.680
Und das ist ja okay, wenn ich mir einmal eine Stunde

01:09:14.680 --> 01:09:16.820
nur eine holen kann und den kann ich halt für eine Stunde benutzen,

01:09:16.900 --> 01:09:18.700
dann ist der okay, aber ich muss halt von den verschiedenen Prozessen

01:09:18.700 --> 01:09:21.020
der Anwendung, die parallel laufen, gleichzeitig

01:09:21.020 --> 01:09:23.380
diesen Key halt haben

01:09:23.380 --> 01:09:24.440
und den muss ich auch irgendwie teilen.

01:09:24.660 --> 01:09:27.340
Klar, ich könnte lokal irgendeine File schreiben, was auch nicht so eine gute Idee ist,

01:09:27.400 --> 01:09:29.120
wenn irgendjemand da auch die Filesysteme zugreifen kann.

01:09:29.520 --> 01:09:31.160
Das heißt, ich muss den eigentlich irgendwo in den Speicher legen,

01:09:31.240 --> 01:09:32.680
der geteilt ist über alle Prozesse hinweg.

01:09:32.700 --> 01:09:35.140
Also eigentlich ist das ja nichts, was du

01:09:35.140 --> 01:09:47.220
irgendwo hinspeichern willst Ja also eigentlich dann doch nur in die Datenbank oder so Auch nicht aber Aber die ist halt wenigstens ein bisschen verschl wenigstens so ein bisschen noch so ein Layer drumherum Ja oder halt dann in so einen geteilten Memory

01:09:47.260 --> 01:09:48.360
Und da ist halt die Frage, wie das dann aussieht,

01:09:48.420 --> 01:09:50.680
wenn du sagst, okay, ich finde die Idee gar nicht so falsch,

01:09:50.740 --> 01:09:52.720
dass es von verschiedenen Prozessen auf verschiedenen Rechnern liegen können,

01:09:53.180 --> 01:09:57.240
dann müsste das ja von sowas wie einem Redis oder einem Cache oder so

01:09:57.240 --> 01:10:01.220
rausgegeben werden, weil das ja quasi auch nur die geteilte Key-Value-Store ist,

01:10:01.220 --> 01:10:02.380
die dann das irgendwie...

01:10:02.380 --> 01:10:03.000
Tja.

01:10:03.860 --> 01:10:05.400
Aber in Python gibt es halt so eine Möglichkeit nicht.

01:10:05.400 --> 01:10:07.540
Ja, aber ich

01:10:07.540 --> 01:10:09.820
glaube nicht, dass das etwas ist,

01:10:09.920 --> 01:10:11.760
was man, also ja, ich meine, das klingt

01:10:11.760 --> 01:10:13.540
jetzt blöd, weil das natürlich dann ein Problem nicht löst,

01:10:13.600 --> 01:10:15.700
aber ich glaube nicht, dass das etwas ist,

01:10:15.720 --> 01:10:16.420
was man lösen will.

01:10:18.880 --> 01:10:19.980
Ja, also ich glaube

01:10:19.980 --> 01:10:21.320
tatsächlich, so eine Antwort wäre mit

01:10:21.320 --> 01:10:23.660
CacheData, Redis und da muss man halt dann gucken, braucht man das

01:10:23.660 --> 01:10:24.640
jetzt oder will man das jetzt oder nicht.

01:10:25.080 --> 01:10:27.460
Also ich würde sagen, wenn du versuchst,

01:10:27.500 --> 01:10:29.260
dieses Problem zu lösen, ist die Lösung

01:10:29.260 --> 01:10:31.580
macht halt einen Haufen zusätzliche

01:10:31.580 --> 01:10:31.900
Probleme.

01:10:31.900 --> 01:10:36.100
Ja gut, aber manchmal kann man halt nicht anders, weil

01:10:36.100 --> 01:10:38.200
Manchmal kann man nicht anders, ja, dann ist halt schlecht

01:10:38.200 --> 01:10:42.020
Also wenn ich halt auf der anderen Seite zum Beispiel keine

01:10:42.020 --> 01:10:43.860
Einflussmöglichkeiten habe, dann kann ich nicht sagen, dass

01:10:43.860 --> 01:10:45.280
ich da irgendjemanden da anpasse, aber

01:10:45.280 --> 01:10:47.860
Ja, ja, klar, klar, ja

01:10:47.860 --> 01:10:48.840
Tja, ja

01:10:48.840 --> 01:10:51.920
Ja, also okay, mit dem Serialisieren, das muss man wahrscheinlich im Kopf haben, dass das

01:10:51.920 --> 01:10:53.620
auch ein sicherheitsrelevantes Problem sein kann

01:10:53.620 --> 01:10:55.960
Aber dann, ja, also als Jason wäre

01:10:55.960 --> 01:10:57.940
er wahrscheinlich sicher, weil das ja nur irgendwie Zeichenketten sind

01:10:57.940 --> 01:10:59.980
das nicht ausgeführt ist, das heißt, ich muss irgendwie gucken

01:10:59.980 --> 01:11:02.100
dass ich alles irgendwie JSON-serializable

01:11:02.100 --> 01:11:03.840
mache. Genau. Und das

01:11:03.840 --> 01:11:05.520
heißt tatsächlich, dass ich keine

01:11:05.520 --> 01:11:08.040
Funktionen

01:11:08.040 --> 01:11:09.960
angeben kann, sondern ich muss

01:11:09.960 --> 01:11:10.640
eine Funktion

01:11:10.640 --> 01:11:13.900
Pfad oder Import-Pfad angeben. Ja, aber ich meine, ich habe zum Beispiel

01:11:13.900 --> 01:11:15.420
so einen Fall tatsächlich

01:11:15.420 --> 01:11:17.640
von, gerade mit

01:11:17.640 --> 01:11:18.940
Chars.api, ich fände mir das gerade so ein,

01:11:21.260 --> 01:11:21.860
da habe ich das so

01:11:21.860 --> 01:11:23.440
gemacht, tatsächlich auch,

01:11:24.400 --> 01:11:25.980
deine Pidentic-Objekte,

01:11:26.080 --> 01:11:27.800
die kannst du ja serialisieren. Zu JSON, ja.

01:11:27.800 --> 01:11:29.600
Ja, genau. Aber wenn ich da eine Call-Label reinstecke,

01:11:29.600 --> 01:11:59.580
und Jochen unterhalten sich über die Programmiersprache Python

01:11:59.600 --> 01:12:01.500
auch. Also ich hatte das in diesem

01:12:01.500 --> 01:12:03.180
Matchmark-Umfeld,

01:12:03.500 --> 01:12:04.820
dass man sagt, okay,

01:12:05.280 --> 01:12:07.400
ich baue mir zuerst meinen Server zusammen

01:12:07.400 --> 01:12:09.540
auf einer kleinen Seite, dann schicke ich das Objekt an den Server

01:12:09.540 --> 01:12:11.080
und der Server startet dann halt irgendwas damit.

01:12:12.180 --> 01:12:13.120
Und meine Lösung war,

01:12:13.360 --> 01:12:15.620
du hast halt in den

01:12:15.620 --> 01:12:17.140
Pydentic-Modellen, da sind halt die Daten

01:12:17.140 --> 01:12:19.440
für das Ding drin, aber

01:12:19.440 --> 01:12:21.360
ausgeführt wird es dann woanders. Dann rufst du halt

01:12:21.360 --> 01:12:23.380
das Ding mit den Daten, die

01:12:23.380 --> 01:12:25.480
du serialisiert hast, auf und sagst halt

01:12:25.480 --> 01:12:27.320
so, und jetzt starte mal oder so.

01:12:27.620 --> 01:12:28.940
Ja, das geht schon. Also wenn das

01:12:28.940 --> 01:12:30.880
Pydentic-Modell das hinbekommt, das zu

01:12:30.880 --> 01:12:32.480
serialisieren, dann geht das auch so.

01:12:32.820 --> 01:12:34.940
Aber das Problem ist halt die Serialisierung von Callables

01:12:34.940 --> 01:12:37.040
in JSON-komplettives Format.

01:12:37.600 --> 01:12:38.860
Das halt hinzubekommen, da muss man halt

01:12:38.860 --> 01:12:40.880
dann Simulizer und Deserializer für

01:12:40.880 --> 01:12:42.720
extra verschreiben für diese einzelnen Felder und

01:12:42.720 --> 01:12:44.700
ist dann die Frage, wie man so ein Objekt serialisiert und da

01:12:44.700 --> 01:12:46.740
verstehe ich halt wahrscheinlich gerade, vielleicht habe ich das schon nicht gemacht,

01:12:46.820 --> 01:12:48.860
weil ich nicht weiß, wie ich so ein Pfad zu einer Funktion

01:12:48.860 --> 01:12:49.960
dann realisieren kann.

01:12:49.960 --> 01:12:50.620
Also ich habe da

01:12:50.620 --> 01:12:53.640
auch tatsächlich so eine Art

01:12:53.640 --> 01:12:55.780
Registry verwendet, wo man dann halt einfach sagen,

01:12:56.280 --> 01:12:57.780
ich habe das dann so gemacht, dass man einen Dekorator

01:12:57.780 --> 01:12:59.580
in die Klasse rechnen konnte und dann konnte man sagen, okay,

01:12:59.720 --> 01:13:01.320
registriere das Ding mal und dann

01:13:01.320 --> 01:13:03.600
konnte ich quasi

01:13:03.600 --> 01:13:06.080
das halt

01:13:06.080 --> 01:13:07.200
wieder komplett so aus dem

01:13:07.200 --> 01:13:09.000
raus hauen.

01:13:09.000 --> 01:13:10.400
Ja, aber genau,

01:13:10.480 --> 01:13:13.020
das kann man mal drauf gucken.

01:13:13.480 --> 01:13:15.060
Tatsächlich, man müsste dann quasi diese

01:13:15.060 --> 01:13:16.380
einzelne Funktion dann quasi

01:13:16.380 --> 01:13:18.920
selber registrieren. Das könnte man ja mit dem Dekorator machen,

01:13:18.980 --> 01:13:20.880
der eh schon da benutzt wird für das Subscribe und dann könnte man

01:13:20.880 --> 01:13:22.420
die quasi gleichzeitig durch das Subscribe

01:13:22.420 --> 01:13:24.840
mit in diese Event-Registry registrieren unter

01:13:24.840 --> 01:13:25.300
irgendwas.

01:13:25.300 --> 01:13:30.740
und das, was dann dabei rauskommt, das könnte man

01:13:30.740 --> 01:13:34.160
in das Pythonic Model mit reinschreiben, rauspolen und dann auch quasi

01:13:34.160 --> 01:13:37.020
eine Methode dran schreiben, die dann diese Funktion ausführen kann.

01:13:38.300 --> 01:13:42.420
Ja, das ist ein bisschen gepopelt, aber ja,

01:13:42.600 --> 01:13:43.640
das ist das Schöne.

01:13:44.440 --> 01:13:46.600
Genau, ich habe letztens

01:13:46.600 --> 01:13:51.840
so ein, also was ich gerade im Stream baue,

01:13:51.920 --> 01:13:54.720
ist halt irgendwie das Hosting-Ding für

01:13:54.720 --> 01:13:56.660
für eben den Podcast hier auch.

01:13:57.660 --> 01:13:58.640
Ich würde da gerne so eine

01:13:58.640 --> 01:14:00.400
Software-as-a-Service-Lösung draus bauen

01:14:00.400 --> 01:14:02.720
und da habe ich so ein

01:14:02.720 --> 01:14:04.580
Spam-Filter-Dings für gebaut. Spam-Filter-Feature

01:14:04.580 --> 01:14:06.620
habe ich vorletzte Woche, letzte Woche,

01:14:07.040 --> 01:14:08.560
diese Woche, ein bisschen

01:14:08.560 --> 01:14:09.660
daran gearbeitet und

01:14:09.660 --> 01:14:12.680
da ist auch so ein

01:14:12.680 --> 01:14:14.700
Ding, das fand ich ganz ähnlich,

01:14:15.380 --> 01:14:16.120
auch ganz interessant.

01:14:16.700 --> 01:14:17.560
Also ich möchte natürlich meine

01:14:17.560 --> 01:14:20.080
Spam-Filter-Modelle auch irgendwie in der Datenbank

01:14:20.080 --> 01:14:21.840
serialisieren und Postgres hat mal

01:14:21.840 --> 01:14:24.280
ein JSON-Field, das ist ja voll gut.

01:14:24.720 --> 01:14:26.760
Aber da habe ich

01:14:26.760 --> 01:14:28.720
jetzt das Problem, okay, ich möchte jetzt

01:14:28.720 --> 01:14:30.700
ja nicht irgendwie JSON

01:14:30.700 --> 01:14:32.540
daraus haben, sondern ich möchte hinterher das fertige Modell,

01:14:32.640 --> 01:14:34.560
auf dem ich dann Predict aufrufen kann,

01:14:35.020 --> 01:14:36.000
aus der Datenbank bekommen.

01:14:36.480 --> 01:14:38.440
Und da habe ich das auch mit Custom

01:14:38.440 --> 01:14:40.560
Serializer, Deserializer gebaut,

01:14:40.660 --> 01:14:41.760
den man dann beim

01:14:41.760 --> 01:14:44.600
JSON-Field angeben kann. Da kann man sagen, das ist der

01:14:44.600 --> 01:14:45.660
Decoder, das ist der Encoder.

01:14:46.780 --> 01:14:48.060
Und der

01:14:48.060 --> 01:14:50.480
Decoder, also der

01:14:50.480 --> 01:14:51.460
Encoder guckt halt,

01:14:53.240 --> 01:14:53.460
ja,

01:14:53.460 --> 01:14:54.860
wie war das?

01:14:57.180 --> 01:14:59.320
Der guckt halt, was ist das?

01:14:59.420 --> 01:15:00.320
Und dann ruft er halt irgendwie,

01:15:00.720 --> 01:15:02.660
gib mir mal ein Dict zurück.

01:15:03.180 --> 01:15:05.100
Methode von so ähnlich wie bei Pandentic ist es.

01:15:05.160 --> 01:15:06.460
Bei Pandentic ist es glaube ich auch .dict.

01:15:07.600 --> 01:15:09.140
Das habe ich dann halt quasi genauso gemacht.

01:15:09.240 --> 01:15:10.780
Dann .dict und dann kommen halt irgendwie Daten

01:15:10.780 --> 01:15:12.480
aus diesem Modell zurück.

01:15:12.800 --> 01:15:14.680
Habe ich dann ins JSON reingeschrieben und beim

01:15:14.680 --> 01:15:16.960
dekodieren guckt er halt, okay,

01:15:17.120 --> 01:15:19.140
gibt es da ein Attribut Klasse drin?

01:15:19.380 --> 01:15:21.160
Class. Und wenn das NaiveBase ist,

01:15:21.160 --> 01:15:23.040
dann genau,

01:15:23.040 --> 01:15:24.580
und mache halt Spezialbehandlungen und

01:15:24.580 --> 01:15:25.880
sage nochmal irgendwie

01:15:25.880 --> 01:15:28.680
ja, übergebe

01:15:28.680 --> 01:15:30.920
dieses Dict, was

01:15:30.920 --> 01:15:32.500
in JSON war, halt als Dict

01:15:32.500 --> 01:15:35.040
für diese Klasse und mache dann halt ein echtes

01:15:35.040 --> 01:15:36.760
Modell draus, wo ich dann hinterher

01:15:36.760 --> 01:15:38.620
Predict drauf aufrufen kann.

01:15:38.880 --> 01:15:40.780
Und dann fällt das gar nicht auf. Dann sagt man halt

01:15:40.780 --> 01:15:42.920
im Code

01:15:42.920 --> 01:15:44.920
einfach nur Spamfilter.predict

01:15:45.460 --> 01:15:45.900
irgendwas.

01:15:47.300 --> 01:15:48.700
Spamfilter ist halt die Tabelle

01:15:48.700 --> 01:15:50.840
in der Datenbank. Model ist

01:15:50.840 --> 01:15:51.980
halt sozusagen dieses JSON-Field.

01:15:51.980 --> 01:15:53.400
und dadurch, dass das

01:15:53.400 --> 01:15:55.160
ein Custom

01:15:55.160 --> 01:15:57.600
Deserializer hat, wenn man

01:15:57.600 --> 01:15:59.960
darauf zugreift auf dieses Attribut, wird es ja deserialisiert

01:15:59.960 --> 01:16:01.740
und ist dann halt das richtige Modell wieder.

01:16:01.820 --> 01:16:02.580
Das heißt, man kann sagen,

01:16:03.100 --> 01:16:05.280
Spamfilter.objects,

01:16:05.280 --> 01:16:07.580
jetzt Django-Semantik,

01:16:08.300 --> 01:16:12.260
Spamfilter.objects.first.model.predict

01:16:12.260 --> 01:16:13.460
und dann übergibt man

01:16:13.460 --> 01:16:15.800
irgendwas, einen Kommentar oder so und dann sagt einem das Spam oder nicht Spam.

01:16:16.320 --> 01:16:17.740
Ohne, dass man da irgendwas machen muss.

01:16:17.840 --> 01:16:18.560
Das funktioniert einfach so.

01:16:18.580 --> 01:16:21.000
Und du hast da quasi ein fertig trainiertes Modell,

01:16:21.000 --> 01:16:22.660
hängst du dann quasi per JSON

01:16:22.660 --> 01:16:23.800
in das JSON-Feed rein?

01:16:24.520 --> 01:16:26.560
Genau, also ich würde es zuerst trainieren und dann sagen,

01:16:27.180 --> 01:16:28.580
ja, speichere das auch mal.

01:16:29.000 --> 01:16:29.800
Also Model ist gleich,

01:16:30.180 --> 01:16:32.740
ist halt das fertig trainierte Model und dann sage ich

01:16:32.740 --> 01:16:34.880
halt, ist beim Filter, also ist beim Filter.model

01:16:34.880 --> 01:16:35.980
gleich NaiveBase, also das

01:16:35.980 --> 01:16:38.820
zuerst würde ich sagen, Model gleich NaiveBase

01:16:38.820 --> 01:16:40.220
irgendwas, Punkt Fit,

01:16:40.680 --> 01:16:41.640
irgendwann Trainingsdaten

01:16:41.640 --> 01:16:44.700
und dann sage ich halt, ist beim Filter.model

01:16:44.700 --> 01:16:47.000
gleich Model und dann sage ich, ist beim Filter.save

01:16:47.000 --> 01:16:48.100
und dann ist es halt der Abmunk.

01:16:48.740 --> 01:16:49.400
Nett, nett.

01:16:49.400 --> 01:16:51.820
und genau, da ist

01:16:51.820 --> 01:16:52.780
auch so ein ähnliches Problem.

01:16:54.040 --> 01:16:55.780
Ja, das ging eigentlich

01:16:55.780 --> 01:16:57.220
relativ problemlos.

01:16:58.240 --> 01:16:59.100
Und überhaupt,

01:16:59.460 --> 01:17:00.400
Nightbase, voll gut.

01:17:02.100 --> 01:17:02.800
Ich habe das

01:17:02.800 --> 01:17:04.580
im April, glaube ich, irgendwann mal auch

01:17:04.580 --> 01:17:06.400
in die, weil die kommen fast bei mal

01:17:06.400 --> 01:17:07.800
eine ganze Zeit lang, also bis

01:17:07.800 --> 01:17:10.380
Anfang letzten Jahres oder so

01:17:10.380 --> 01:17:12.540
haben sie es nie irgendwie,

01:17:13.440 --> 01:17:14.440
war das nie ein Problem,

01:17:14.600 --> 01:17:15.700
weil irgendwie

01:17:15.700 --> 01:17:18.580
ja, wahrscheinlich diese CSRF-Protection

01:17:18.580 --> 01:17:20.320
oder keine Ahnung was auch immer in Django da halt

01:17:20.320 --> 01:17:22.580
an Dingen macht, die verhindern sollen,

01:17:23.360 --> 01:17:24.860
dass man da beliebig

01:17:24.860 --> 01:17:26.580
Dinge reinpostet, schon

01:17:26.580 --> 01:17:28.660
dafür gesorgt haben, dass die Kommentarsperma draußen

01:17:28.660 --> 01:17:30.520
geblieben sind. Irgendwann

01:17:30.520 --> 01:17:31.740
sind deren Skripte halt

01:17:31.740 --> 01:17:33.100
besser geworden.

01:17:34.360 --> 01:17:36.580
Kommen halt mit diesem Kram klar und nehmen halt

01:17:36.580 --> 01:17:38.560
das Token dann aus dem Get und

01:17:38.560 --> 01:17:40.620
packen es in den Post rein und dann kommen sie halt

01:17:40.620 --> 01:17:42.920
durch, weil wir haben da ja auch keine Authentifizierung

01:17:42.920 --> 01:17:44.760
oder sowas. Jeder kann da Kommentare

01:17:44.760 --> 01:17:46.620
reinschreiben, aber wenn man

01:17:46.620 --> 01:17:48.420
das halt über ein Skript macht und nicht über einen Browser, dann

01:17:48.420 --> 01:17:50.200
fehlen halt vielleicht Daten, die man mit angeben muss.

01:17:50.280 --> 01:17:51.620
Und dann sagt Django direkt, nee, so nicht.

01:17:52.560 --> 01:17:54.460
Aber sozusagen, wenn man es halt

01:17:54.460 --> 01:17:55.540
mit dem Headless-Browser macht,

01:17:55.680 --> 01:17:57.980
mit dem Script, das ein bisschen besser ist und das halt weiß,

01:17:58.060 --> 01:18:00.340
wie diese Formfelder heißen und so,

01:18:00.540 --> 01:18:01.920
dann geht es halt doch.

01:18:02.240 --> 01:18:03.960
Also was man auch, glaube ich, ganz gut machen kann, ist,

01:18:04.000 --> 01:18:06.180
so ein Feld auf jeden einfach reinmachen, das halt dann mit

01:18:06.180 --> 01:18:08.040
im Formular drin steht, was halt automatisch

01:18:08.040 --> 01:18:09.760
über das Script ausgeführt wird und wenn

01:18:09.760 --> 01:18:11.280
was drinsteht, dann sagt halt der App Spam.

01:18:12.080 --> 01:18:14.300
Ja, das kann auch sein.

01:18:14.640 --> 01:18:16.060
Das habe ich mir auch zuerst überlegt, weil das wäre dann

01:18:16.060 --> 01:18:18.000
die super simple Methode gewesen, dass erstmal alle

01:18:18.000 --> 01:18:20.380
dann hätte sich jemand das Skript ändern müssen

01:18:20.380 --> 01:18:21.900
für diese Seite und das macht dann natürlich keiner

01:18:21.900 --> 01:18:24.520
aber ich bin mir gar nicht so sicher

01:18:24.520 --> 01:18:26.220
ehrlich gesagt, also auch wenn ich mir

01:18:26.220 --> 01:18:27.900
angucke, wie das Muster von den

01:18:27.900 --> 01:18:30.140
also das hatte ich mir auch zuerst überlegt, dass das

01:18:30.140 --> 01:18:32.100
vielleicht die einfachste Lösung für das Problem ist

01:18:32.100 --> 01:18:34.240
und dann habe ich mir aber das ein bisschen angeguckt und dann

01:18:34.240 --> 01:18:36.000
ich habe so den Verdacht

01:18:36.000 --> 01:18:37.820
dass das gar keine Skripte sind

01:18:37.820 --> 01:18:40.500
ich glaube, das sind

01:18:40.500 --> 01:18:42.060
da gehen Leute tatsächlich

01:18:42.060 --> 01:18:44.260
mit Browsern drauf, die halt

01:18:44.260 --> 01:18:46.220
irgendwie dafür bezahlt werden, dass sie das machen

01:18:46.220 --> 01:18:48.260
und machen das von Hand. Und da hilft das natürlich alles

01:18:48.260 --> 01:18:50.300
nicht mehr, weil sobald da jemand mit dem Browser

01:18:50.300 --> 01:18:51.320
drauf geht, dann ja.

01:18:52.960 --> 01:18:54.060
Und ja,

01:18:54.280 --> 01:18:55.860
also, und dann dachte ich mir so, okay,

01:18:56.040 --> 01:18:58.320
das sieht schon verdächtig danach aus, dass das irgendwelche Leute

01:18:58.320 --> 01:19:00.220
sind, die da tatsächlich für bezahlt werden und das

01:19:00.220 --> 01:19:02.340
von Hand machen, dann kann ich mir das

01:19:02.340 --> 01:19:04.060
auch, dann hilft das nichts.

01:19:05.100 --> 01:19:06.080
Dann mache ich es auch gleich richtig

01:19:06.080 --> 01:19:07.780
und nehme dann im Bauler halt so einen richtigen

01:19:07.780 --> 01:19:09.400
Content-basierten Spam-Filter ein.

01:19:10.980 --> 01:19:12.240
Und genau,

01:19:12.780 --> 01:19:13.080
Django,

01:19:13.500 --> 01:19:16.100
weiß ich nicht, Fluent Commands oder so,

01:19:16.100 --> 01:19:17.560
hat halt auch so ein

01:19:17.560 --> 01:19:19.560
Schnellschalter drin für Archismit oder so,

01:19:19.620 --> 01:19:21.640
weiß nicht, dieses Spamfilter-Dings, aber das ist alles

01:19:21.640 --> 01:19:23.480
ganz furchtbar, das darf man auch, glaube ich,

01:19:23.480 --> 01:19:24.460
gar nicht so richtig verwenden,

01:19:26.000 --> 01:19:27.540
weil man damit ja dann

01:19:27.540 --> 01:19:28.280
Daten weiterreißt.

01:19:29.060 --> 01:19:31.720
Das ist alles sehr unschön und

01:19:31.720 --> 01:19:33.780
man kann das

01:19:33.780 --> 01:19:35.380
aber relativ leicht selber bauen und dann

01:19:35.380 --> 01:19:37.580
eben, und Nightbraces bietet sich da halt an,

01:19:37.620 --> 01:19:39.480
weil das hat keine Abhängigkeiten zu irgendwas anderem,

01:19:40.160 --> 01:19:41.160
sondern das kann man halt

01:19:41.160 --> 01:19:43.620
rein in Python

01:19:43.620 --> 01:19:45.780
mit Standard-Bibliotheksmittel irgendwie alles machen

01:19:45.780 --> 01:19:48.100
und ich habe da auch eine

01:19:48.100 --> 01:19:50.460
Stream-Episode nur

01:19:50.460 --> 01:19:52.220
darüber gemacht, weil das kann man in anderen

01:19:52.220 --> 01:19:54.520
Programmiersprachen genauso machen, das kann man in PHP ganz genauso machen,

01:19:54.920 --> 01:19:56.380
das kann man halt irgendwie, egal was man

01:19:56.380 --> 01:19:58.280
verwendet, kann man das relativ einfach

01:19:58.280 --> 01:20:00.380
implementieren, es kommt mit wenig Trainingsdaten

01:20:00.380 --> 01:20:01.380
aus, es ist schnell,

01:20:02.540 --> 01:20:04.480
ja, es ist

01:20:04.480 --> 01:20:05.960
wahrscheinlich für diesen Fall,

01:20:05.960 --> 01:20:08.300
weil die Klassen gut getrennt sind,

01:20:08.360 --> 01:20:10.040
ist es gut genug, also es ist

01:20:10.040 --> 01:20:11.940
natürlich, wenn man das vergleicht mit anderen Sachen, nicht so gut

01:20:11.940 --> 01:20:14.000
wie andere Dinge, aber in dem

01:20:14.000 --> 01:20:15.600
Fall ist es vielleicht egal, dass es nicht so gut ist,

01:20:15.780 --> 01:20:24.980
jedenfalls bei, das hat jetzt halt auf den Dingen hat es jetzt praktisch perfekt funktioniert mehr oder weniger, also es kommt kein Spam mehr durch

01:20:24.980 --> 01:20:30.540
und die ganzen regulären Sachen kommen halt doch durch, also es funktioniert tatsächlich ziemlich super

01:20:30.540 --> 01:20:32.220
ja, genau

01:20:32.220 --> 01:20:34.440
ja

01:20:34.440 --> 01:20:38.420
ja, da müsst ihr euch unbedingt Jochen's Stream-Channel anschauen

01:20:38.420 --> 01:20:42.560
ja, genau, also die entsprechende Folge auf jeden Fall wäre super, ich will sie nämlich auch nochmal sehen

01:20:42.560 --> 01:20:46.520
Ich bin glaube ich einmal ausgestiegen, als du einen Update gemacht hast von Jupiter oder so.

01:20:47.360 --> 01:20:51.700
Ja, ich weiß ja auch oft nicht, was ich da vorher mache.

01:20:51.780 --> 01:20:52.120
Jochen macht halt seine Arbeit.

01:20:52.120 --> 01:20:54.160
Manchmal hat er langweiligen Kram halt da.

01:20:54.340 --> 01:20:56.660
Ja, wie es halt so ist, wenn man täglich seine Arbeit filmt.

01:20:56.860 --> 01:20:58.960
Irgendwas passiert nicht immer so, die ganzen megaspannenden Sachen.

01:20:59.320 --> 01:20:59.520
Ja.

01:20:59.680 --> 01:21:01.140
Ja, aber doch.

01:21:02.400 --> 01:21:02.880
Ja, ja.

01:21:03.500 --> 01:21:05.280
Ja, also das mit dem Naiv-Weiß, das finde ich sehr spannend.

01:21:05.460 --> 01:21:08.100
Vielleicht ist das eigentlich fast schon eine eigene Folge wert, wie man...

01:21:08.100 --> 01:21:09.700
Hatten wir schon, tatsächlich.

01:21:10.360 --> 01:21:11.000
Für den Spam-Filter?

01:21:11.000 --> 01:21:13.460
Ja, wir hatten schon eine Naive-Base-Volke, glaube ich, mal irgendwann.

01:21:13.860 --> 01:21:15.260
Das ist ja jetzt schon ein bisschen was her, aber...

01:21:15.260 --> 01:21:17.100
Ja, stimmt. Ja, ich glaube,

01:21:17.140 --> 01:21:18.800
Maschinen-Unternehmen-Volke hattet ihr aber eh noch ein paar mehr

01:21:18.800 --> 01:21:20.420
nachgefragt. Vielleicht müssen wir da nochmal...

01:21:20.420 --> 01:21:21.500
Ja, da müssen wir sowieso...

01:21:21.500 --> 01:21:25.520
Ja, also was

01:21:25.520 --> 01:21:27.360
auch auf jeden Fall auf dem Plan

01:21:27.360 --> 01:21:27.980
ist, ist

01:21:27.980 --> 01:21:31.760
HTMLX. Das wird jetzt auch nochmal...

01:21:31.760 --> 01:21:33.080
Also einmal

01:21:33.080 --> 01:21:35.260
fand ich interessant zu sehen, dass das

01:21:35.260 --> 01:21:37.300
halt, wenn man sich anguckt,

01:21:37.300 --> 01:21:39.300
welche Talks sind eigentlich so

01:21:39.300 --> 01:21:43.420
populär quasi. Kann man ja auf YouTube so ein bisschen sehen zum Beispiel

01:21:43.420 --> 01:21:44.840
auf Konferenzen.

01:21:45.160 --> 01:21:46.860
Ja, HTMX macht da Spaß.

01:21:47.200 --> 01:21:48.940
Ich habe es, glaube ich, auch schon mal einmal so

01:21:48.940 --> 01:21:51.020
spaßeshalber gebaut. Ich glaube, da ist noch ein kleiner Bug drin

01:21:51.020 --> 01:21:53.240
beim Posten von dem Formular.

01:21:53.340 --> 01:21:55.040
Die Validierung geht noch nicht richtig durch, aber sonst

01:21:55.040 --> 01:21:56.840
müsste man eigentlich mal veröffentlichen.

01:21:56.920 --> 01:21:58.900
Ich habe so ein Minimumbeispiel auf Django gebaut auch.

01:21:59.380 --> 01:22:01.260
Ja, ja, ja. Es gibt ja auch Django, HTMX,

01:22:01.620 --> 01:22:03.080
Adam Johnson hat das, glaube ich, gemacht.

01:22:03.080 --> 01:22:05.100
Super. Ja, also da muss ich

01:22:05.100 --> 01:22:05.720
auch mehr mitmachen.

01:22:06.480 --> 01:22:08.040
Vor allem ist es halt wirklich so,

01:22:08.040 --> 01:22:09.880
Das, was einen bei Dango Templates

01:22:09.880 --> 01:22:11.860
insbesondere nervt, ist die Reaktivität

01:22:11.860 --> 01:22:13.340
der Templates, die eigentlich nicht da ist,

01:22:13.660 --> 01:22:15.900
sondern du hast jedes Mal einen neuen Request und musst dann hingehen

01:22:15.900 --> 01:22:17.640
und musst immer komplett die ganze Seite abholen,

01:22:17.940 --> 01:22:19.400
was natürlich beim Nutzer einmal Sack hat.

01:22:20.100 --> 01:22:21.120
Musst du halt nicht unbedingt.

01:22:21.980 --> 01:22:24.140
Mit HTMLX ist es relativ einfach

01:22:24.140 --> 01:22:26.020
implementierbar, dass du das nicht musst,

01:22:26.100 --> 01:22:28.160
sondern dass du Teile einfach validierst

01:22:28.160 --> 01:22:30.060
und dann tatsächlich gleich Feedback anzeigst

01:22:30.060 --> 01:22:32.200
für Formular, Validierung oder was auch immer

01:22:32.200 --> 01:22:32.900
man da haben möchte.

01:22:33.700 --> 01:22:35.260
Der Weg, wie man das früher gemacht hat,

01:22:35.340 --> 01:22:37.100
üblicherweise ist halt jQuery oder sowas

01:22:37.100 --> 01:22:38.500
oder halt irgendwie, weiß ich nicht,

01:22:38.680 --> 01:22:40.940
heutzutage nennt man dann eher so AlpineJS oder

01:22:40.940 --> 01:22:44.680
PTView oder so.

01:22:46.040 --> 01:22:46.400
Aber

01:22:46.400 --> 01:22:49.060
das Problem dabei ist natürlich, dass sobald

01:22:49.060 --> 01:22:51.120
das dann halt komplizierter wird und sobald

01:22:51.120 --> 01:22:52.980
man dann halt irgendwie sowas macht, also was ich ja gerne hätte,

01:22:53.100 --> 01:22:55.080
ist ja irgendwie, dass auch Pagination darüber funktioniert

01:22:55.080 --> 01:22:57.000
und man dann so weiterklickt und das halt so schnell ist wie

01:22:57.000 --> 01:22:59.160
bei einer lokalen

01:22:59.160 --> 01:23:00.840
App oder so, dass es halt dann

01:23:00.840 --> 01:23:03.000
doch eher, da ist man dann schon eher schnell

01:23:03.000 --> 01:23:06.740
im Single-Page-SPA-Land

01:23:06.740 --> 01:23:07.720
unterwegs.

01:23:09.200 --> 01:23:10.980
Aber genau, und ich dachte

01:23:10.980 --> 01:23:13.120
bisher immer, und mit Jackfrey und so

01:23:13.120 --> 01:23:15.160
wird das State-Management dann halt auch irgendwann, wenn es komplizierter wird,

01:23:15.280 --> 01:23:16.160
sehr hässlich.

01:23:16.940 --> 01:23:18.660
Und ich dachte immer so, naja, gut,

01:23:18.820 --> 01:23:20.060
da muss man halt doch SBL machen.

01:23:20.760 --> 01:23:22.440
Aber ich glaube,

01:23:22.840 --> 01:23:24.980
tatsächlich, HTMLX ist vielleicht tatsächlich eine Lösung.

01:23:24.980 --> 01:23:26.900
Ich weiß es noch nicht genau, weil ich habe es noch nicht ausprobiert, aber

01:23:26.900 --> 01:23:28.760
Ja, wir müssen ein bisschen ausbauen,

01:23:28.880 --> 01:23:30.420
dass das dann ein bisschen voll,

01:23:30.820 --> 01:23:32.640
also die ein bisschen einfacher wird von

01:23:32.640 --> 01:23:35.080
der Anwendung her, dass man vielleicht noch ein paar eigene Template-Text

01:23:35.080 --> 01:23:36.040
für sowas nimmt oder sowas.

01:23:36.040 --> 01:23:38.800
ist natürlich besonders toll, aber...

01:23:38.800 --> 01:23:40.000
Ja, da bin ich auf jeden Fall gespannt.

01:23:40.120 --> 01:23:42.240
In diesem Trend geht es ja jetzt auch schon einige Zeit

01:23:42.240 --> 01:23:44.200
und der gefällt mir tatsächlich sehr gut. Also da würde ich sagen,

01:23:44.240 --> 01:23:46.520
das ist ja super, wenn das ein bisschen mehr in die Richtung

01:23:46.520 --> 01:23:48.360
läuft, dass man wieder mehr Server...

01:23:48.360 --> 01:23:50.140
Ja, das sind halt immer so Hype-Cycles.

01:23:51.360 --> 01:23:52.300
Macht alles auf dem Client.

01:23:52.420 --> 01:23:53.620
Oh nein, macht alles auf dem Server.

01:23:54.440 --> 01:23:56.040
Wenn das halt mit Rust,

01:23:56.200 --> 01:23:57.940
bei Python, mit WebMX im Browser geht,

01:23:58.160 --> 01:23:59.200
dann können wir auch das wieder beim Client machen.

01:24:01.100 --> 01:24:01.300
Ja,

01:24:01.660 --> 01:24:02.840
ich meine,

01:24:03.940 --> 01:24:06.000
ich würde ja sagen, eigentlich macht das schon

01:24:06.000 --> 01:24:07.200
Sinn, viel auf dem Server zu machen.

01:24:07.760 --> 01:24:09.880
Eigentlich brauchst du eigentlich nur eine

01:24:09.880 --> 01:24:11.400
Tastatur und der Rest ist auf dem Server.

01:24:11.800 --> 01:24:13.680
Das einzige Problem ist, wenn die Verbindung abbricht, dann muss man halt

01:24:13.680 --> 01:24:15.260
gucken, was übrig bleibt.

01:24:17.060 --> 01:24:17.460
Naja.

01:24:18.680 --> 01:24:19.460
Aber schon finde ich

01:24:19.460 --> 01:24:21.620
auch interessant. Ich habe jetzt so ein bisschen

01:24:21.620 --> 01:24:24.260
auch mal

01:24:24.260 --> 01:24:25.780
bei Ruby on Rails gehört.

01:24:26.080 --> 01:24:27.700
Ich würde ja sagen, sie beiden großen

01:24:27.700 --> 01:24:29.200
oder tatsächlich

01:24:29.200 --> 01:24:31.540
Ruby on Rails ist halt eher so das große

01:24:31.540 --> 01:24:33.020
Webframework

01:24:33.020 --> 01:24:37.320
Batteries Included

01:24:37.320 --> 01:24:37.580
Ding.

01:24:38.480 --> 01:24:39.840
Fand ich jetzt auch mal ganz interessant.

01:24:39.960 --> 01:24:42.660
Ich habe jetzt auch irgendwie mal was drüber gelesen,

01:24:43.860 --> 01:24:44.720
was das alles so kann.

01:24:46.060 --> 01:24:46.600
Ich glaube, ich habe auch

01:24:46.600 --> 01:24:48.320
letztens irgendwo eine Podcast-Revise dazu gehört.

01:24:49.820 --> 01:24:50.220
Schon, oder?

01:24:50.420 --> 01:24:51.000
Ja, genau.

01:24:52.340 --> 01:24:54.320
Und das kann halt tatsächlich, glaube ich,

01:24:54.320 --> 01:24:56.240
noch ein bisschen mehr als Django. Aber Django ist halt

01:24:56.240 --> 01:24:58.060
immer so das, was man dann auch nennt.

01:24:58.320 --> 01:25:00.140
Django ist so ähnlich. Aber

01:25:00.140 --> 01:25:01.820
zum Beispiel, was ich nicht wusste,

01:25:01.820 --> 01:25:06.040
Ruby on Rails hatte schon immer so eine relativ

01:25:06.040 --> 01:25:08.160
ausgefeilte

01:25:08.160 --> 01:25:09.720
Asset-Pipeline drin.

01:25:11.020 --> 01:25:11.760
Bei Django gibt es so etwas

01:25:11.760 --> 01:25:13.580
so ein bisschen, so mit Django-Kompressor

01:25:13.580 --> 01:25:15.760
oder manchmal, also so ein bisschen gibt es Ansätze,

01:25:15.880 --> 01:25:17.600
aber nicht im Ansatz vergleichbar

01:25:17.600 --> 01:25:19.020
mit dem, was Ruby on Rails da macht.

01:25:19.740 --> 01:25:21.480
Und Ruby on Rails hatte da so Dinge,

01:25:21.680 --> 01:25:23.640
da hat sogar Webpack dann am Schluss eingebaut

01:25:23.640 --> 01:25:25.220
und jetzt sind sie nochmal irgendwie auf was anderes umgestiegen.

01:25:26.420 --> 01:25:26.780
Und

01:25:26.780 --> 01:25:29.760
da war es ja auch so lange so, dass CoffeeScript

01:25:29.760 --> 01:25:31.280
verwendet wurde, halt für die ganzen

01:25:31.280 --> 01:25:33.280
wirklich von den Frontend-Teile und das

01:25:33.280 --> 01:25:35.100
wird dann halt aber alles automatisch

01:25:35.100 --> 01:25:36.280
gebundelt und so

01:25:36.280 --> 01:25:39.480
und in JavaScript transpiliert und so.

01:25:40.420 --> 01:25:41.240
Also das ist ein Teil,

01:25:41.400 --> 01:25:43.240
wo Ruby on Rails halt nochmal echt mehr Zeugs

01:25:43.240 --> 01:25:45.060
hat als Django, würde ich sagen. Und dann

01:25:45.060 --> 01:25:45.600
ein

01:25:45.600 --> 01:25:49.380
auch wichtiger Teil und da dachte ich so,

01:25:49.460 --> 01:25:50.880
okay, das ist tatsächlich vielleicht etwas,

01:25:51.160 --> 01:25:53.140
das ist auch sowas, das können wir auch machen, man muss sich einfach Ruby on Rails

01:25:53.140 --> 01:25:54.880
angucken und dann vielleicht Dinge in Django nachbauen.

01:25:55.520 --> 01:25:56.780
Das fehlt in Django.

01:25:57.880 --> 01:25:58.940
Ist sowas wie

01:25:58.940 --> 01:25:59.780
so ein

01:25:59.780 --> 01:26:02.620
Job-Queue-System.

01:26:03.740 --> 01:26:04.860
Und zwar gar nicht so,

01:26:05.000 --> 01:26:06.760
also ich habe mich ja auch schon oft über

01:26:06.760 --> 01:26:07.860
Celery geärgert und so.

01:26:08.220 --> 01:26:09.200
Django-Background hast du.

01:26:10.360 --> 01:26:12.760
Es gibt ja dann auch diverse Django-Queue,

01:26:12.960 --> 01:26:13.300
es gibt

01:26:13.300 --> 01:26:17.220
R-Queue für diese Redis-Queue-Geschichten,

01:26:17.380 --> 01:26:18.200
dann gibt es aber auch noch

01:26:18.200 --> 01:26:20.700
Yui oder weiß ich nicht, es gibt noch

01:26:20.700 --> 01:26:21.960
diverse andere, es gibt halt irgendwie

01:26:21.960 --> 01:26:24.640
zig unterschiedliche Queue-Systeme.

01:26:25.900 --> 01:26:26.100
Und

01:26:26.100 --> 01:26:30.940
gut, denkt man sich, oh gut, muss ja nicht unbedingt

01:26:30.940 --> 01:26:32.620
in Django selber drin sein, ja wozu auch

01:26:32.620 --> 01:26:34.500
es gibt ja genug Auswahl

01:26:34.500 --> 01:26:36.140
halt irgendwie was einem am besten gefällt

01:26:36.140 --> 01:26:38.480
aber der Punkt ist eigentlich bei

01:26:38.480 --> 01:26:40.400
River and Whales ist das halt drin, da gibt es halt

01:26:40.400 --> 01:26:42.760
da nennt sich das glaube ich Action Job

01:26:42.760 --> 01:26:44.300
oder irgendwie so

01:26:44.300 --> 01:26:45.500
ich weiß es auch gar nicht genau

01:26:45.500 --> 01:26:48.540
und das eigentlich

01:26:48.540 --> 01:26:50.780
witzige daran ist, dass das halt

01:26:50.780 --> 01:26:52.260
so ein Ding ist

01:26:52.260 --> 01:26:54.420
das ist so ein Interface in

01:26:54.420 --> 01:26:56.440
Ruby und Rails selber. Genauso wie es

01:26:56.440 --> 01:26:58.740
da auch so eine

01:26:58.740 --> 01:26:59.900
Abstraktion gibt für Files

01:26:59.900 --> 01:27:01.880
den Zugriff. Oder für Files irgendwie.

01:27:02.640 --> 01:27:03.580
Und das gibt es ja in Django auch.

01:27:03.900 --> 01:27:05.920
Django hast ja auch irgendwie Default

01:27:05.920 --> 01:27:07.040
File

01:27:07.040 --> 01:27:09.800
wie heißt das?

01:27:10.660 --> 01:27:11.500
File Storage.

01:27:11.840 --> 01:27:13.360
Default File Storage kannst du setzen.

01:27:14.100 --> 01:27:15.800
Und dann ist egal, was du verwendest.

01:27:15.880 --> 01:27:18.080
Ob du ein Object Store verwendest oder das File System

01:27:18.080 --> 01:27:19.020
oder was auch immer.

01:27:21.220 --> 01:27:22.340
Es muss halt

01:27:22.340 --> 01:27:24.180
diese API anbieten und dann kann dahinter liegen,

01:27:24.180 --> 01:27:26.220
was will, aber du kannst

01:27:26.220 --> 01:27:27.220
es halt benutzen.

01:27:28.880 --> 01:27:30.080
Innerhalb von Django ist es immer

01:27:30.080 --> 01:27:31.840
das gleiche Interface. Du kannst halt immer Files

01:27:31.840 --> 01:27:33.720
irgendwie, kannst aus denen lesen, kannst sie schreiben.

01:27:33.840 --> 01:27:34.960
Oder wie Cache, Cache-Backend.

01:27:35.780 --> 01:27:36.820
Genau, oder Cache-Backend.

01:27:37.160 --> 01:27:39.940
Du kannst hinterher das Cache-Backend austauschen,

01:27:40.740 --> 01:27:42.240
aber dein Applikationscode

01:27:42.240 --> 01:27:43.980
muss sich dafür nicht ändern. Und das kannst du mit diesem

01:27:43.980 --> 01:27:45.100
Jobkram halt dann auch machen.

01:27:45.420 --> 01:27:45.960
Und das ist eigentlich,

01:27:46.840 --> 01:27:50.240
in der Ruby on Rails

01:27:50.240 --> 01:27:52.120
Welt gibt es halt viele Dinge, die dann

01:27:52.120 --> 01:27:54.080
darauf aufbauen, dass diese Interfaces halt so sind,

01:27:54.080 --> 01:27:54.520
wie sie sind.

01:27:56.360 --> 01:27:58.240
Das heißt, du kannst halt

01:27:58.240 --> 01:28:00.500
Third-Party-Packages

01:28:00.500 --> 01:28:01.940
oder so bauen, die halt

01:28:01.940 --> 01:28:03.920
dann irgendwie

01:28:03.920 --> 01:28:06.200
deine Tasks

01:28:06.200 --> 01:28:07.880
in diese Queue schmeißen und da irgendwie

01:28:07.880 --> 01:28:10.120
und sie müssen nicht wissen, welche

01:28:10.120 --> 01:28:11.280
Implementation du da verwendest.

01:28:11.740 --> 01:28:13.860
Ob das jetzt RabbitMQ ist oder

01:28:13.860 --> 01:28:16.120
was der Teufel, das ist halt alles hinter diesem Interface

01:28:16.120 --> 01:28:18.100
versteckt und spielt dann auch keine Rolle.

01:28:20.180 --> 01:28:20.960
Und diese

01:28:20.960 --> 01:28:24.000
Geschichten gibt es halt in Django gar nicht, weil es dieses einheitliche Interface

01:28:24.000 --> 01:28:26.000
nicht gibt. Das heißt, wenn ich in Django

01:28:26.000 --> 01:28:27.880
sowas machen wollte, dann hänge ich halt ab,

01:28:27.940 --> 01:28:29.920
direkt von Celery oder von sonst irgendwas, weil

01:28:29.920 --> 01:28:31.200
es gibt nicht irgendwie das

01:28:31.200 --> 01:28:33.920
Django-Background-Task-Interface.

01:28:34.620 --> 01:28:36.340
Sondern das ist halt...

01:28:36.340 --> 01:28:37.260
Ja, das fehlt tatsächlich noch.

01:28:37.400 --> 01:28:38.840
Und da dachte ich so, okay, ja.

01:28:39.840 --> 01:28:42.020
Und an den Scheinen hat RuinRates auch mal so ein bisschen mehr Zeugs.

01:28:42.820 --> 01:28:42.920
Ja.

01:28:44.180 --> 01:28:46.060
Ja, ja, auch HTMX kommt da ja daher

01:28:46.060 --> 01:28:47.700
und diverse andere Geschichten.

01:28:48.700 --> 01:28:49.880
Ja. Und sie haben

01:28:49.880 --> 01:28:51.800
irgendwie für ihren ORM

01:28:51.800 --> 01:28:55.320
da kann man auch

01:28:55.320 --> 01:28:57.460
normalerweise default ist, relationale Datenbank

01:28:57.460 --> 01:28:59.380
aber man kann halt auch MongoDB direkt dranhängen

01:28:59.380 --> 01:29:01.440
ich dachte so, wow, krass, wie haben sie das denn, weil das ist auch immer

01:29:01.440 --> 01:29:03.360
ein Ding, was in Django requestet wird, dass Leute sagen

01:29:03.360 --> 01:29:05.480
ich hätte gern MongoDB, kann ich jetzt ehrlich gesagt

01:29:05.480 --> 01:29:07.120
gar nicht so richtig verstehen, warum, das wäre vielleicht mal

01:29:07.120 --> 01:29:09.160
wenn irgendjemand weiß, warum MongoDB cool ist

01:29:09.160 --> 01:29:11.120
wir das mal erklären oder uns mal

01:29:11.120 --> 01:29:12.300
schreiben, warum das toll ist, weil

01:29:12.300 --> 01:29:15.220
also verstehe ich

01:29:15.220 --> 01:29:16.540
gar nicht, warum nimmt man das aber

01:29:16.540 --> 01:29:19.080
offenbar gibt es da großen

01:29:19.080 --> 01:29:21.100
Bedarf und

01:29:21.100 --> 01:29:22.920
das geht halt in Django nicht so richtig.

01:29:24.220 --> 01:29:25.480
Aber könnte man sich auch vorstellen.

01:29:26.980 --> 01:29:28.140
Dann sag doch mal ganz kurz,

01:29:28.320 --> 01:29:29.980
warum du das denn doof nimmst als Wahl.

01:29:30.420 --> 01:29:31.800
Was heißt doof? Ich würde nur sagen,

01:29:31.940 --> 01:29:33.640
Jason Field

01:29:33.640 --> 01:29:36.520
in Postgres ist schneller.

01:29:36.780 --> 01:29:37.700
Ist schneller als MongoDB.

01:29:39.000 --> 01:29:39.660
Mehr braucht man nicht.

01:29:39.940 --> 01:29:42.100
Und es kann halt zusätzlich noch die ganzen relationalen Geschichten.

01:29:43.220 --> 01:29:44.700
Also wozu dann MongoDB?

01:29:48.000 --> 01:29:49.700
MongoDB ist ja quasi nur das Jason Field.

01:29:49.700 --> 01:29:52.240
und kann halt die relationalen Dinge nicht, aber die relationalen

01:29:52.240 --> 01:29:53.220
Features brauchst du ja eigentlich auch.

01:29:53.840 --> 01:29:55.400
Die ganze Transaktionssicherheit und den ganzen

01:29:55.400 --> 01:29:58.140
Isolationslevel und weiß der Teufel, die ganzen Sachen willst du ja eigentlich auch haben.

01:29:58.840 --> 01:30:00.040
Naja, also irgendwie

01:30:00.040 --> 01:30:01.100
keine Ahnung warum.

01:30:02.520 --> 01:30:04.040
Ja, vielleicht auch, wenn man halt

01:30:04.040 --> 01:30:06.240
sagt, okay, man hat es

01:30:06.240 --> 01:30:07.860
irgendwie vereinheitlicht und es gibt halt nur MongoDB

01:30:07.860 --> 01:30:09.080
und es kommt damit klar.

01:30:09.280 --> 01:30:11.240
Das kann ich einfach irgendwie was anderes machen.

01:30:11.680 --> 01:30:13.240
Okay, ja, dann ist es halt so.

01:30:13.840 --> 01:30:14.240
Ja.

01:30:17.660 --> 01:30:18.260
Ja, ich finde,

01:30:18.260 --> 01:30:19.800
Wir haben jetzt eine sehr, sehr bunte Folge gehabt.

01:30:19.920 --> 01:30:22.220
Ich glaube, es wird relativ schwierig, uns zu befolgen.

01:30:22.360 --> 01:30:23.640
Ich hoffe, ihr habt bis zum Ende durchgehalten.

01:30:23.760 --> 01:30:25.860
Vielleicht habt ihr das ja irgendwie geschafft.

01:30:26.440 --> 01:30:27.140
Haben wir noch irgendwas?

01:30:28.800 --> 01:30:30.280
Nee, ansonsten...

01:30:30.280 --> 01:30:32.040
Hast du einen Pick der Woche? Ich glaube, ich habe das schon tausendmal.

01:30:32.120 --> 01:30:34.060
Doch, ich habe...

01:30:34.060 --> 01:30:36.320
Also, was ich ganz cool

01:30:36.320 --> 01:30:36.960
fand,

01:30:38.240 --> 01:30:39.880
habe ich letztens auch eingebaut.

01:30:40.200 --> 01:30:41.560
Django Upgrade gibt es.

01:30:42.780 --> 01:30:43.260
Ah, stimmt.

01:30:43.260 --> 01:30:45.480
Für Python, glaube ich, hat Anthony Sotir

01:30:45.480 --> 01:30:46.980
irgendwie auch so ein Ding geschrieben.

01:30:48.260 --> 01:30:50.320
Python Upgrade oder so, ich weiß es nicht genau, wie das Paket

01:30:50.320 --> 01:30:52.300
heißt und so ähnlich gibt es das jetzt auch

01:30:52.300 --> 01:30:53.740
für Django, wo dann halt sozusagen...

01:30:53.740 --> 01:30:56.080
Die neueste Syntax und die ganzen deprecated Sachen ersetzt

01:30:56.080 --> 01:30:57.380
automatisch durch die Besserung.

01:30:57.560 --> 01:30:59.820
Ja, und das habe ich dann halt als Pre-Commit Hook

01:30:59.820 --> 01:31:01.680
eingebaut und so, dass dann halt immer,

01:31:02.260 --> 01:31:04.160
wenn halt Sachen deprecated werden oder wenn es eine bessere Art

01:31:04.160 --> 01:31:06.040
gibt, das zu machen, das wird dann halt automatisch ersetzt

01:31:06.040 --> 01:31:08.300
und ich muss das nicht irgendwie von Hand machen.

01:31:09.840 --> 01:31:10.420
Das war nice.

01:31:10.440 --> 01:31:11.100
Und das ist nämlich,

01:31:11.380 --> 01:31:13.920
das ist auch von Adam Johnson, glaube ich.

01:31:16.080 --> 01:31:17.780
Ja, was nehme ich denn?

01:31:17.780 --> 01:31:19.080
Ja, ich habe ja die ganzen Sachen

01:31:19.080 --> 01:31:20.880
fast auf SQL-Model, habe ich ja schon gesagt

01:31:20.880 --> 01:31:23.860
Habe ich auch schon mal Ridge erwähnt eigentlich irgendwo?

01:31:24.020 --> 01:31:25.680
Ja, das habe ich ja auch schon mehrfach gehabt

01:31:25.680 --> 01:31:26.600
Aber ich bestimmt schon mal

01:31:26.600 --> 01:31:28.260
Ich nehme es einfach nochmal

01:31:28.260 --> 01:31:31.020
Ja, das ist auch wirklich toll, da gibt es auch

01:31:31.020 --> 01:31:33.180
Textual oder so

01:31:33.180 --> 01:31:35.380
Der

01:31:35.380 --> 01:31:37.620
Autor von Ridge

01:31:37.620 --> 01:31:39.660
und Textual, der macht jetzt auch

01:31:39.660 --> 01:31:40.620
der probiert das irgendwie

01:31:40.620 --> 01:31:42.680
Open Source zu entwickeln, quasi

01:31:42.680 --> 01:31:49.860
und versucht jetzt damit irgendwie durchzukommen,

01:31:50.220 --> 01:31:52.200
seine Projekte zu entwickeln.

01:31:52.400 --> 01:31:53.560
Und das fand ich auch faszinierend.

01:31:55.480 --> 01:31:56.680
Ja, ich bin mal gespannt.

01:31:56.840 --> 01:31:58.440
Also es ist ja auf jeden Fall sehr populär, was er macht.

01:31:58.520 --> 01:31:59.080
Und es ist ja auch super.

01:31:59.620 --> 01:32:01.060
Und ich hoffe mal, das klappt.

01:32:01.060 --> 01:32:04.220
Das wäre toll, wenn das irgendwie mehr funktionieren würde.

01:32:04.980 --> 01:32:06.420
Also falls ihr nicht wisst, was das ist,

01:32:07.540 --> 01:32:11.060
Witch macht ein bisschen Farbe in eurer Command-Output.

01:32:12.000 --> 01:32:12.140
Ja.

01:32:12.680 --> 01:32:15.040
ganz nett. Oh, ich benutze das gerne mit

01:32:15.040 --> 01:32:16.880
Humanize, vielleicht noch ein nächster Pick, falls ich jetzt schon mal

01:32:16.880 --> 01:32:19.020
gepicks habe. Also Humanize macht auch

01:32:19.020 --> 01:32:20.820
sowas wie Zahlen oder vor allem Daytime-Objekten

01:32:20.820 --> 01:32:22.800
irgendwas vor drei Sekunden oder

01:32:22.800 --> 01:32:24.920
vor kurzer Zeit und man kann so ein bisschen definieren,

01:32:25.260 --> 01:32:26.820
dass das irgendwie nett sich anhört.

01:32:26.920 --> 01:32:28.320
Ich mag das irgendwie ganz gerne für

01:32:28.320 --> 01:32:29.820
ein, zwei Dinge.

01:32:31.400 --> 01:32:33.240
Ein bisschen Human More Readable

01:32:33.240 --> 01:32:34.660
Blogs oder sowas.

01:32:36.180 --> 01:32:37.040
Ja, klingt gut.

01:32:38.420 --> 01:32:38.980
Ja, der hat einen

01:32:38.980 --> 01:32:40.820
Richard-Test, ich habe es gerade gesehen, ist gar nicht so lange her.

01:32:41.300 --> 01:32:42.040
Eine Packaging-Folge.

01:32:42.680 --> 01:32:44.560
Jetzt haben wir Humanize dabei.

01:32:45.980 --> 01:32:46.420
Okay.

01:32:46.820 --> 01:32:48.400
Okay, ja dann bleibt uns gewogen,

01:32:48.480 --> 01:32:49.840
hört uns weiter, wann ihr wollt und

01:32:49.840 --> 01:32:51.240
bis zum nächsten Mal.

01:32:51.640 --> 01:32:52.780
Dann bis zum nächsten Mal. Tschüss.
