WEBVTT

00:00:00.120 --> 00:00:04.240
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast Episode 52.

00:00:04.780 --> 00:00:07.560
Heute reden wir über Kubernetes. Hallo Johannes.

00:00:08.100 --> 00:00:08.740
Hallo zusammen.

00:00:08.840 --> 00:00:09.220
Hallo Jochen.

00:00:09.240 --> 00:00:09.960
Hallo Dominik.

00:00:10.380 --> 00:00:10.940
Hallo Jonas.

00:00:11.160 --> 00:00:12.220
Ja, schön, dass du wieder da bist, Johannes.

00:00:12.820 --> 00:00:14.380
Ja, schön, dass ich wieder da sein darf.

00:00:14.400 --> 00:00:14.920
Super vor Ort.

00:00:16.500 --> 00:00:20.020
Und wir haben uns heute Kubernetes ausgedacht, obwohl das gar nicht so viel mit Python zu tun hat,

00:00:20.100 --> 00:00:24.320
weil wir das, glaube ich, alle so ein bisschen öfter nutzen müssen, wollen.

00:00:25.060 --> 00:00:25.440
Müssen wir.

00:00:25.620 --> 00:00:25.960
Müsst du ja.

00:00:27.100 --> 00:00:28.920
Manche von uns müssen.

00:00:28.920 --> 00:00:31.160
Ich musste auch schon

00:00:31.160 --> 00:00:33.260
Genau, und deswegen wollen wir vielleicht

00:00:33.260 --> 00:00:35.180
ein bisschen erklären, was das ist, was das so macht und was das so tut

00:00:35.180 --> 00:00:37.340
Vielleicht fangen wir wie immer ein bisschen

00:00:37.340 --> 00:00:39.220
an mit den News, da haben wir ja noch so ein paar

00:00:39.220 --> 00:00:40.560
offen, glaube ich

00:00:40.560 --> 00:00:42.920
Ja, aber ich habe mich jetzt auch nur so ein bisschen

00:00:42.920 --> 00:00:45.080
Also es gibt eine große News und

00:00:45.080 --> 00:00:47.340
die kleineren, da verlasse ich mich dann um das andere, das Wissen

00:00:47.340 --> 00:00:49.340
Okay, aber ich mache jetzt einfach mal hier den

00:00:49.340 --> 00:00:51.140
News-Chapter

00:00:51.140 --> 00:00:52.980
Fangen wir doch einfach mit dem normalen Python

00:00:52.980 --> 00:00:55.180
3.12 News an, weil wir haben Oktober

00:00:55.180 --> 00:00:56.880
und ich glaube, da ist immer Neues in Python

00:00:56.880 --> 00:00:58.540
Ja, es ist jetzt immer einmal im Jahr

00:00:58.540 --> 00:01:00.420
irgendwie neue Release. Seit

00:01:00.420 --> 00:01:01.440
drei Tagen, oder?

00:01:02.760 --> 00:01:04.460
Ich weiß gar nicht genau, wann das

00:01:04.460 --> 00:01:06.200
Release wurde, aber ja, noch nicht so lange.

00:01:06.920 --> 00:01:08.520
Je nachdem, wann dieser Podcast gehört wird.

00:01:08.640 --> 00:01:10.520
Ja, genau. Also für uns ist es

00:01:10.520 --> 00:01:11.920
noch frisch, für euch dann vielleicht so,

00:01:12.020 --> 00:01:14.120
das war doch vor ein paar Jahren.

00:01:15.120 --> 00:01:15.520
Ja.

00:01:16.600 --> 00:01:18.400
Genau, und ja,

00:01:19.040 --> 00:01:19.220
also,

00:01:20.120 --> 00:01:22.260
verwendet ihr es schon? Nein.

00:01:22.560 --> 00:01:24.260
Nein? Nicht runtergeladen.

00:01:24.320 --> 00:01:26.400
Habt nur die News gesehen. Also ich

00:01:26.400 --> 00:01:28.280
hab gesehen, dass du Probleme hattest, was auf deinem Mac

00:01:28.280 --> 00:01:29.160
zu installieren.

00:01:30.700 --> 00:01:33.040
Bei mir läuft es,

00:01:33.100 --> 00:01:33.500
aber ich

00:01:33.500 --> 00:01:35.960
habe mich angewöhnt, bei 1 erstmal

00:01:35.960 --> 00:01:36.860
alle Projekte umzuziehen.

00:01:38.540 --> 00:01:40.120
Es ist jetzt nicht das Feature dabei, wo ich sage,

00:01:40.160 --> 00:01:41.320
das baue ich jetzt unbedingt sofort.

00:01:41.600 --> 00:01:44.080
Ja, das war auch so ein bisschen mein Eindruck. Das liest sich alles

00:01:44.080 --> 00:01:45.760
sehr gut, aber es ist nicht so, dass ich sagen würde,

00:01:45.840 --> 00:01:47.100
das will ich jetzt sofort benutzen.

00:01:47.740 --> 00:01:50.120
Es ist ja nicht so richtig dabei, was man so richtig

00:01:50.120 --> 00:01:51.000
benutzen kann, oder?

00:01:51.000 --> 00:01:52.360
Ja, kein neues

00:01:52.360 --> 00:01:54.020
Walrus

00:01:54.020 --> 00:01:56.480
oder kein Matchcase.

00:01:56.780 --> 00:01:58.220
Habt ihr den Match schon mal verwendet?

00:01:58.280 --> 00:01:59.680
Ja, häufig.

00:02:00.280 --> 00:02:03.020
Ich finde es cool, aber ich habe noch nichts damit gemacht.

00:02:03.120 --> 00:02:05.300
So Pattern-Matching, habe ich gehört, geht damit ganz gut.

00:02:06.280 --> 00:02:07.500
So Typing oder Type-Matching.

00:02:07.720 --> 00:02:11.120
Also dann kannst du so Guards bauen und dann kann man halt gucken,

00:02:11.380 --> 00:02:12.760
ob irgendwie so ein Objekt, das reingegangen ist,

00:02:12.820 --> 00:02:15.120
auf irgendein Pydantic-Model validiert oder halt nicht.

00:02:15.880 --> 00:02:17.440
Und dann kannst du das dann halt direkt weiter nutzen.

00:02:17.560 --> 00:02:18.240
Das ist nett.

00:02:18.600 --> 00:02:20.140
Ja, wie gesagt, ich finde das total super,

00:02:20.300 --> 00:02:22.880
aber ich habe einfach irgendwie noch nicht genug damit gemacht.

00:02:22.900 --> 00:02:25.580
Wo wir bei Pydantic reden, ich glaube, Pydantic 2 hatten wir auch noch nicht in den Newsroom,

00:02:25.620 --> 00:02:26.660
weil wir ewig lange nichts gemacht hatten.

00:02:26.660 --> 00:02:28.120
Doch, doch, hatten wir jetzt das letzte Mal

00:02:28.120 --> 00:02:29.800
Genau, aber

00:02:29.800 --> 00:02:33.000
nur, dass ich damit Probleme hatte, das abzudaten

00:02:33.000 --> 00:02:33.980
Ich habe in der Zwischenzeit

00:02:33.980 --> 00:02:36.920
ein weiteres meiner Projekte irgendwie updaten müssen

00:02:36.920 --> 00:02:38.020
weil jemand auf GitHub

00:02:38.020 --> 00:02:40.220
ein Issue aufgemacht hat und gesagt hat

00:02:40.220 --> 00:02:42.700
Ich habe das jetzt gerade mal probiert, es gibt mir diese komische

00:02:42.700 --> 00:02:45.020
Palentik-Fehlermeldung, weiß gar nicht, was das ist

00:02:45.020 --> 00:02:46.040
Ja, und

00:02:46.040 --> 00:02:48.780
genau, so habe ich das dann auch gemerkt, dass das nicht mehr

00:02:48.780 --> 00:02:49.980
funktioniert und

00:02:49.980 --> 00:02:52.660
das habe ich jetzt auch umgezogen und das war auch

00:02:52.660 --> 00:02:54.040
deutlich mehr Arbeit, als ich gedacht hätte

00:02:54.040 --> 00:02:56.040
und also ich habe jetzt zwei Projekte

00:02:56.040 --> 00:02:57.640
umgezogen auf die neue Python Tech Version

00:02:57.640 --> 00:02:59.320
und das war beide Male ätzend.

00:03:00.020 --> 00:03:02.120
Also man braucht da schon so ein bisschen

00:03:02.120 --> 00:03:02.980
Muße, wenn man das

00:03:02.980 --> 00:03:05.940
irgendwie machen will. Oder bei mir, ich habe

00:03:05.940 --> 00:03:08.000
vielleicht das auch einfach falsch gemacht am Anfang

00:03:08.000 --> 00:03:10.060
und deswegen habe ich da besonders viel Arbeit,

00:03:10.320 --> 00:03:12.180
aber ganz wahrscheinlich, höchstwahrscheinlich.

00:03:14.260 --> 00:03:16.100
Ja, aber gut, jetzt inzwischen

00:03:16.100 --> 00:03:17.740
habe ich ein bisschen Übung, dann kann ich ganz andere

00:03:17.740 --> 00:03:19.800
Sachen auch noch umstellen, das ist dann kein Problem mehr.

00:03:19.960 --> 00:03:22.180
Wenn du 312 benutzt hättest,

00:03:22.420 --> 00:03:24.020
hättest du vielleicht schon viel bessere Fehlermeldungen

00:03:24.020 --> 00:03:25.940
bekommen, direkt gesehen, woran es liegt. Könnte sein, aber

00:03:25.940 --> 00:03:27.740
ich finde zum Beispiel auch die PyTentic-Fehlermeldung

00:03:27.740 --> 00:03:29.700
nicht so richtig hilfreich. Also zum Beispiel

00:03:29.700 --> 00:03:31.740
diese

00:03:31.740 --> 00:03:33.980
Field Missing-Fehlermeldung, die finde

00:03:33.980 --> 00:03:35.860
ich ist echt, ich weiß nicht, ob die

00:03:35.860 --> 00:03:37.980
schon immer so war oder ob die jetzt erst so geworden ist,

00:03:38.620 --> 00:03:39.740
aber die

00:03:39.740 --> 00:03:41.980
ist halt, genau,

00:03:42.360 --> 00:03:43.760
das ist hier, ich zeige es dir jetzt mal auf dem

00:03:43.760 --> 00:03:45.540
Monitor, kann sonst keiner sehen außer uns, aber

00:03:45.540 --> 00:03:47.200
da steht halt irgendwie so,

00:03:47.940 --> 00:03:49.940
also da steht noch mehr, da ist eine ganze

00:03:49.940 --> 00:03:52.220
Liste von irgendwie Field Required

00:03:52.220 --> 00:03:53.600
Type Missing Input Value.

00:03:53.600 --> 00:03:57.340
noch nicht, weil ich kann das lesen vom Sofa aus, was du da dann rechnen kannst.

00:03:57.520 --> 00:03:58.320
Ich mache das jetzt größer.

00:03:58.940 --> 00:03:59.840
Ja, ich wollte gerade sagen.

00:03:59.980 --> 00:04:03.740
So, und dann, wenn man diesen Traceback kriegt, der eigentlich relativ lang ist, sodass man

00:04:03.740 --> 00:04:07.640
Schwierigkeiten hat, den relevanten Teil zu erfassen, ich habe jetzt das hier extra so

00:04:07.640 --> 00:04:10.860
rausgekattet, dass man es sehen kann, aber dann ist das, was ich halt lese, vor allen

00:04:10.860 --> 00:04:11.360
Dingen das hier.

00:04:11.720 --> 00:04:14.620
Da steht dann halt irgendwie type missing, input value, database URL und dann komme ich

00:04:14.620 --> 00:04:16.220
halt, ah, database URL ist missing.

00:04:17.220 --> 00:04:17.780
Das stimmt aber nicht.

00:04:18.480 --> 00:04:19.580
Nein, die ist ja da.

00:04:19.800 --> 00:04:20.620
Sondern die ist da.

00:04:20.620 --> 00:04:22.800
Aber die Value ist falsch.

00:04:22.800 --> 00:04:26.140
und die B-Engine ist halt missing, was da drüber steht.

00:04:26.380 --> 00:04:29.720
Und man denkt, das gehört hier noch zu einem anderen Teil und was hier gar nicht drinsteht.

00:04:29.820 --> 00:04:33.560
Das heißt, dieser Kram, der danach kommt, ist eigentlich völlig irrelevant.

00:04:34.280 --> 00:04:38.820
Aber das ist halt, also ich meine, klar, also wenn man jetzt weiß, okay, ach, das Ding hier ist missing.

00:04:39.020 --> 00:04:41.220
Okay, dann ist klar, aber man überliest das leicht.

00:04:41.320 --> 00:04:44.800
Also so wie das bei dir aussieht, könnte auch in der Formatierung, wahrscheinlich hast du es absichtlich so formatiert,

00:04:44.860 --> 00:04:45.940
dass es in deinem Eintrag so aussieht.

00:04:46.020 --> 00:04:47.220
Nein, nein, das sieht wirklich so aus.

00:04:47.600 --> 00:04:48.900
Dass es tatsächlich etwas schräg ist.

00:04:48.900 --> 00:04:51.160
Also die Fehlermeldung ist ein bisschen zu verhackstückelt.

00:04:51.160 --> 00:04:52.880
Hast du das mal mit 3.12 probiert?

00:04:53.320 --> 00:04:53.500
Nein.

00:04:54.620 --> 00:04:57.080
Du hast vorher schon das Problem umgezogen.

00:04:57.700 --> 00:04:58.680
Ja, ja, ja. Also die

00:04:58.680 --> 00:05:01.000
Pydantic ist ja schon eine neue Version

00:05:01.000 --> 00:05:02.500
seit einigen Monaten.

00:05:02.860 --> 00:05:05.040
Aber wäre es anders, wenn 3.12

00:05:05.040 --> 00:05:05.660
dabei geholfen hätte?

00:05:05.880 --> 00:05:08.540
Ist das anders in 3.12? Das ist doch eine Fehlermeldung von Pydantic.

00:05:08.680 --> 00:05:09.280
Ja, ja, genau.

00:05:11.020 --> 00:05:12.760
Aber ich weiß nicht,

00:05:13.000 --> 00:05:15.360
ob die verbesserten Fehlermeldungen in 3.12

00:05:15.360 --> 00:05:17.060
auch was damit zu tun haben, wie dieser ganze

00:05:17.060 --> 00:05:19.280
Traceback-String gerendert wird.

00:05:19.580 --> 00:05:20.340
Genau, weil

00:05:20.340 --> 00:05:25.200
weil da sind ja auch verschiedene andere Sachen passiert, die dieses Rendern beeinflussen,

00:05:25.300 --> 00:05:27.580
weil die App-Strings ja beispielsweise sind auch neu.

00:05:28.820 --> 00:05:30.180
Ja, kommen wir gleich noch zu.

00:05:30.240 --> 00:05:33.900
Also auf jeden Fall dieses Pydentik-Ding, das hat mich jetzt schon zum zweiten Mal,

00:05:34.020 --> 00:05:37.400
wenn ich das nächste Mal sage, beim dritten Mal, hat es auch wieder Schwierigkeiten gemacht.

00:05:37.520 --> 00:05:38.800
Das liegt raus, das liegt bei mir.

00:05:39.660 --> 00:05:40.540
Ja, das kann auch sein.

00:05:40.640 --> 00:05:42.400
Genau, was ist die Konstante an diesem Experiment?

00:05:42.400 --> 00:05:43.000
Ja, genau.

00:05:45.660 --> 00:05:49.840
Jetzt sind wir schon bei den 3.12-Änderungen.

00:05:49.840 --> 00:06:13.520
Genau, bessere Fehlermeldung. Das ist das Einzige, was ich mir davon gemerkt habe. Also es gibt ein paar Dinge, die da geändert wurden, aber die einzige, die ich mir gemerkt habe, weil sie mich an die PyPy-Episode erinnert hat, war, dass jetzt, wenn man irgendwie eine Variable verwendet und die nicht definiert ist sozusagen in der Methode, dann sagt einem jetzt der Traceback so, sag mal, kann es sein, dass du self.vorher vergessen hast?

00:06:13.520 --> 00:06:15.780
und PyPy konnte das halt schon einige Zeit

00:06:15.780 --> 00:06:17.880
und ich glaube, das ist halt, das haben sie sich

00:06:17.880 --> 00:06:19.480
dann von PyPy abgeguckt.

00:06:21.460 --> 00:06:21.820
Diese

00:06:21.820 --> 00:06:23.760
Geschichte und es gibt halt noch so ein paar andere Dinge.

00:06:24.500 --> 00:06:25.320
Ich weiß gar nicht genau.

00:06:26.500 --> 00:06:27.100
Wisst ihr das?

00:06:27.580 --> 00:06:29.160
An der richtigen Stelle unterkringeln und sowas?

00:06:29.360 --> 00:06:31.800
Ja, genau, solche Sachen. Also da ist noch ein bisschen

00:06:31.800 --> 00:06:32.260
was passiert.

00:06:33.220 --> 00:06:35.620
Ich weiß es nicht, weil ich sehe nie Fehlermeldungen.

00:06:37.680 --> 00:06:38.380
Ja, so.

00:06:38.600 --> 00:06:39.740
Johannes, du machst einfach,

00:06:39.940 --> 00:06:42.000
erkennt ihr das Modul, als wollt ihr eigentlich mal so ein Pick, ne?

00:06:42.000 --> 00:06:45.220
Fuckit, du machst einfach pip install fuckit und dann schreibst du einfach add fuckit

00:06:45.220 --> 00:06:47.460
oder with fuckit und dann gibt es keine Fehlermeldung mehr,

00:06:47.520 --> 00:06:47.800
sind weg.

00:06:49.580 --> 00:06:50.520
Ja, dann eine

00:06:50.520 --> 00:06:52.160
andere Geschichte,

00:06:52.820 --> 00:06:55.440
F-Strings haben eine ordentliche

00:06:55.440 --> 00:06:56.580
Überarbeitung erfahren.

00:06:56.920 --> 00:06:58.800
Ja genau, davon musste man natürlich umbauen, hast du gesagt.

00:06:59.280 --> 00:07:00.420
Ja, also

00:07:00.420 --> 00:07:03.380
das mutet so ein wenig nach Detail an,

00:07:03.400 --> 00:07:05.140
dass man jetzt sagt, okay, du kannst jetzt auch Quotes

00:07:05.140 --> 00:07:06.320
innerhalb von F-Strings haben.

00:07:06.320 --> 00:07:08.100
Genau, zwar die selben Quotes wie der String.

00:07:08.760 --> 00:07:10.460
Das hat mir tatsächlich aufgefallen,

00:07:10.460 --> 00:07:12.280
schon, dass man da nicht die gleichen Quotes

00:07:12.280 --> 00:07:14.400
verwendet. Genau, und das beschränkt natürlich die

00:07:14.400 --> 00:07:15.820
Tiefe, in der du F-Strings

00:07:15.820 --> 00:07:18.260
vernesten kannst, also ineinander schachteln

00:07:18.260 --> 00:07:19.480
kannst, auf die

00:07:19.480 --> 00:07:21.720
Anzahl unterschiedlicher

00:07:21.720 --> 00:07:24.260
Arten zu quoten. Wie tief

00:07:24.260 --> 00:07:26.160
würdet ihr denn empfehlen, so F-Strings

00:07:26.160 --> 00:07:28.080
in der Quote? Aber was zum Beispiel echt

00:07:28.080 --> 00:07:30.020
nervig war, dass du zum Beispiel in Multiline

00:07:30.020 --> 00:07:32.040
F-Strings keine Kommentare hinter so

00:07:32.040 --> 00:07:33.960
einem F-String machen mehr konntest. Ja, und Multiline

00:07:33.960 --> 00:07:34.580
F-Strings gehen

00:07:34.580 --> 00:07:37.560
natürlich schon,

00:07:38.020 --> 00:07:40.160
wenn du das halt so machst, wie man das mit Multiline

00:07:40.160 --> 00:07:42.300
Strings halt so macht, aber was jetzt

00:07:42.300 --> 00:07:43.920
auch zusätzlich geht, ist, dass du

00:07:43.920 --> 00:07:46.080
quasi Newlines in

00:07:46.080 --> 00:07:47.240
F-Strings haben kannst.

00:07:48.120 --> 00:07:50.020
Das geht nämlich jetzt auch, das ging vorher auch nicht.

00:07:50.100 --> 00:07:51.880
Genau, Backslash war vorher auch gebannt.

00:07:52.380 --> 00:07:54.300
Genau, geht jetzt auch. Also das wirkt

00:07:54.300 --> 00:07:56.080
so ein bisschen wie Details, aber nein, das ist

00:07:56.080 --> 00:07:57.520
dafür haben sie den

00:07:57.520 --> 00:08:00.200
Tokenizer komplett neu geschrieben.

00:08:00.980 --> 00:08:02.020
Der ist jetzt rein NC

00:08:02.020 --> 00:08:04.220
implementiert und ist halt auch ein gutes Stück

00:08:04.220 --> 00:08:06.140
schneller, ist irgendwie 60% schneller als vorher und

00:08:06.140 --> 00:08:08.300
ja, das hat jetzt zur Folge,

00:08:08.300 --> 00:08:10.820
und wie man F-Strings beliebig nesten kann.

00:08:11.240 --> 00:08:14.200
Und all diese anderen Details jetzt auch gehen.

00:08:14.400 --> 00:08:17.900
Zeit, dass zum Beispiel Logging oder sowas mal aufsteigt und auch mal F-Strings verwendet.

00:08:19.220 --> 00:08:23.020
Ja, da habe ich schon unterschiedliche Meinungen darüber gehört.

00:08:23.100 --> 00:08:25.760
Ja, also genau. Also ich auch, aber ich verstehe es noch nicht so genau.

00:08:26.000 --> 00:08:28.960
Also meine Meinung macht das Logging nicht, weil das nicht evaluiert werden soll,

00:08:29.080 --> 00:08:30.660
bevor es, wenn es nicht geloggt wird, auf dem falschen Level.

00:08:31.020 --> 00:08:36.740
Ja, also der Haupteinwand, den ich da gehört habe, der kommt von Sentry.

00:08:36.740 --> 00:08:38.280
und Sentry macht ja

00:08:38.280 --> 00:08:40.820
Log Aggregation oder Error Log Aggregation

00:08:40.820 --> 00:08:42.120
und

00:08:42.120 --> 00:08:43.880
wenn du jetzt quasi deine

00:08:43.880 --> 00:08:46.480
Fehlermeldung loggst und da deine

00:08:46.480 --> 00:08:49.040
Fehlerobjekte mit reinschreibst,

00:08:50.020 --> 00:08:50.620
dann ist das ja ein

00:08:50.620 --> 00:08:52.700
anderer String bei jeder

00:08:52.700 --> 00:08:54.560
dieser Fehlermeldungen. Das heißt, du kriegst

00:08:54.560 --> 00:08:56.560
keine Aggregation. Wenn du aber

00:08:56.560 --> 00:08:57.960
normale Template Strings

00:08:57.960 --> 00:09:00.260
benutzt, dann

00:09:00.260 --> 00:09:02.520
schickst du ja den Template String und die Argumente, die

00:09:02.520 --> 00:09:04.780
da reinkommen. Das heißt, du kriegst deine Aggregation

00:09:04.780 --> 00:09:06.020
anhand des Template Strings

00:09:06.020 --> 00:09:07.920
und kriegst dann innerhalb dieser

00:09:07.920 --> 00:09:10.000
aggregierten Sache gesagt, hier sind

00:09:10.000 --> 00:09:12.380
mit folgenden Attributen aufgetreten,

00:09:12.500 --> 00:09:13.240
x, y und z.

00:09:13.520 --> 00:09:15.120
Ja, okay, aber man könnte ja auch erst irgendwie

00:09:15.120 --> 00:09:18.080
Sentry erklären, dass sie das bitte anders aggregieren sollen

00:09:18.080 --> 00:09:19.220
und das da wieder rauspopeln sollten.

00:09:19.220 --> 00:09:20.720
Ja, gut, aber dann bist du jetzt schon wieder bei

00:09:20.720 --> 00:09:24.440
so Sprachsachen, dass du sagst,

00:09:24.560 --> 00:09:26.180
da musst du doch rausfinden,

00:09:26.320 --> 00:09:28.000
wo die F-Attribute drin sind.

00:09:28.000 --> 00:09:29.540
Ja, aber das Login-Modul ist eh einigermaßen furchtbar,

00:09:29.580 --> 00:09:31.620
mit CamelCase und sowas, das ist alles eh bäh.

00:09:32.960 --> 00:09:34.080
Ah, das mag ja schon sein,

00:09:34.080 --> 00:09:36.060
aber gerade diese F-Strings, die zerstören halt,

00:09:36.220 --> 00:09:38.140
dass du siehst, wo da die Templates

00:09:38.140 --> 00:09:39.520
stehen. Also das einzige

00:09:39.520 --> 00:09:42.060
Argument, was ich gehört habe, ist, dass halt je nach

00:09:42.060 --> 00:09:44.080
Log-Devel die gar nicht evaluiert werden sollen

00:09:44.080 --> 00:09:45.980
und dass wenn du das halt als F-String da reinschreiben würdest, dann

00:09:45.980 --> 00:09:48.220
würdest du halt jedes Mal immer...

00:09:48.220 --> 00:09:51.020
Ja, keine Ahnung.

00:09:52.640 --> 00:09:53.780
Ich weiß es nicht.

00:09:55.440 --> 00:09:55.540
Ja,

00:09:55.960 --> 00:09:57.560
genau. Achso,

00:09:58.060 --> 00:10:00.160
wofür das vielleicht auch ganz... obwohl ich glaube, das ist jetzt

00:10:00.160 --> 00:10:01.960
auch eine

00:10:01.960 --> 00:10:03.480
doof Idee. Es gibt ja für

00:10:03.480 --> 00:10:06.500
das hatte auch der, na, wie heißt er noch, Thomas Güttler

00:10:06.500 --> 00:10:08.120
der hier war, wegen HTMLX

00:10:08.120 --> 00:10:09.720
immer gesagt, also es gibt ja in

00:10:09.720 --> 00:10:11.680
Python gibt es also nicht sowas wie

00:10:11.680 --> 00:10:14.040
Template Literal Strings

00:10:14.040 --> 00:10:16.220
in JavaScript oder so

00:10:16.220 --> 00:10:18.220
wo man halt Partials da relativ gut

00:10:18.220 --> 00:10:19.420
handeln kann und

00:10:19.420 --> 00:10:21.980
das geht halt mit F-Strings nicht so richtig und

00:10:21.980 --> 00:10:24.120
das geht jetzt vielleicht schon, also das könnte man eventuell

00:10:24.880 --> 00:10:25.980
naja, auch nur bei einfachen

00:10:25.980 --> 00:10:28.200
Template-Ersatzungen wahrscheinlich, ob das Sinn macht

00:10:28.200 --> 00:10:30.200
weiß ich auch nicht. Hast du irgendwas von Partials

00:10:30.200 --> 00:10:32.140
gerade gesagt? Django Template Partials, damit geht

00:10:32.140 --> 00:10:33.380
Das ist halt auch ganz gut eigentlich.

00:10:33.480 --> 00:10:36.280
Genau, das sind aber jetzt so ein paar Module, die waren in einer der letzten

00:10:36.280 --> 00:10:38.460
Folgen von, weiß ich mehr was,

00:10:39.620 --> 00:10:40.220
DjangoCast?

00:10:41.220 --> 00:10:41.940
DjangoChat meinst du,

00:10:41.960 --> 00:10:44.000
den Podcast, ja, das war da auch drin, ja.

00:10:44.400 --> 00:10:45.720
Ja genau, da war irgendwie

00:10:45.720 --> 00:10:47.940
eine nette Folge, wo die Leute genau diese

00:10:47.940 --> 00:10:50.100
Templating-Sachen-Partials

00:10:50.100 --> 00:10:52.180
mitgebruchst, die waren schön,

00:10:52.300 --> 00:10:53.540
weil man kann man schöne Sachen mit

00:10:53.540 --> 00:10:55.820
einzelnen Templates machen, die sonst so

00:10:55.820 --> 00:10:57.100
nicht einfach so modular

00:10:57.100 --> 00:10:59.720
Ich habe das auch schon ein paar Mal verwendet

00:10:59.720 --> 00:11:00.940
und das ist echt tatsächlich ziemlich gut.

00:11:02.140 --> 00:11:03.880
Kommt wahrscheinlich auch in Genro 5.1 mit rein.

00:11:04.640 --> 00:11:05.260
Ah, ja.

00:11:07.500 --> 00:11:07.900
Genau.

00:11:08.980 --> 00:11:09.920
Es gab so ein paar

00:11:09.920 --> 00:11:11.940
Performance-Geschichten bei AppStreams, die sind ein bisschen

00:11:11.940 --> 00:11:13.960
schneller geworden. Es gibt jetzt

00:11:13.960 --> 00:11:15.920
irgendwie Comprehension Inlining.

00:11:17.600 --> 00:11:18.200
Was ist das?

00:11:19.720 --> 00:11:20.360
Ehrlich gesagt,

00:11:20.440 --> 00:11:22.380
was es genau macht, weiß ich nicht, aber

00:11:22.380 --> 00:11:24.320
List-Set Comprehensions

00:11:24.320 --> 00:11:25.380
werden jetzt ungefähr zweimal schneller.

00:11:26.640 --> 00:11:27.680
Das nehmen wir doch mit, oder?

00:11:27.680 --> 00:11:28.880
Das ist gut, ja.

00:11:29.920 --> 00:11:30.920
Und dann natürlich

00:11:30.920 --> 00:11:32.700
die GIL-Aufteilung.

00:11:32.900 --> 00:11:34.300
Das habe ich mit Interesse gelesen.

00:11:34.600 --> 00:11:36.340
Ja, das ist ein sehr interessanter...

00:11:36.340 --> 00:11:38.300
Erklär doch mal, was ist denn die GIL-Aufteilung?

00:11:38.300 --> 00:11:40.180
Ja, es gibt ja das globale

00:11:40.180 --> 00:11:42.160
Interpreter-Log. Das ist

00:11:42.160 --> 00:11:43.800
ein großes Log und das

00:11:43.800 --> 00:11:45.980
sorgt dafür, dass Python sehr schlecht ist bei

00:11:45.980 --> 00:11:48.140
Multithread-Anwendungen, weil

00:11:48.140 --> 00:11:50.020
immer nur ein Thread Python-Code

00:11:50.020 --> 00:11:52.080
ausfüllen kann. Und das ist natürlich so ein bisschen bescheuert,

00:11:52.260 --> 00:11:53.500
weil dann bringt es ja nichts mehr.

00:11:54.120 --> 00:11:55.900
Doch, doch, das bringt ja durchaus schon was.

00:11:56.280 --> 00:11:58.000
Ja, es kommt darauf an, wie deine Threads sind.

00:11:58.060 --> 00:12:00.260
Aber wenn du lauter Python-Threads laufen hast, also du kannst

00:12:00.260 --> 00:12:01.780
nicht mehr als eine CPU verwenden.

00:12:01.980 --> 00:12:04.360
Genau, nicht mehr als eine CPU, aber du kannst schon,

00:12:04.480 --> 00:12:06.240
wenn du mehrere Threads machst, machst du halt viel mehr

00:12:06.240 --> 00:12:08.140
I.O. möglicherweise. Genau,

00:12:08.280 --> 00:12:10.220
für I.O. bringt es was, aber nicht für Compute.

00:12:10.520 --> 00:12:11.320
Also nicht für CPU.

00:12:13.800 --> 00:12:16.340
Das Argument, warum Python so ein

00:12:16.340 --> 00:12:18.700
Gill-Hunt ist, dass das für den Single-Threaded-Case

00:12:18.700 --> 00:12:20.380
einfach die beste Lösung

00:12:20.380 --> 00:12:22.520
ist, weil du keine komplizierten

00:12:22.520 --> 00:12:23.960
Logs einbauen musst, weil es

00:12:23.960 --> 00:12:25.640
schnell ist, weil du gar nichts hast.

00:12:25.760 --> 00:12:27.860
Weil du halt nicht gucken musst, muss das frei werden?

00:12:28.340 --> 00:12:30.020
Genau, es ist einfach ein

00:12:30.020 --> 00:12:31.760
Interpreter ein und fertig.

00:12:32.640 --> 00:12:34.100
Und es gibt ja schon lange

00:12:34.100 --> 00:12:35.780
Bestrebungen und viele Bestrebungen,

00:12:35.980 --> 00:12:37.860
diesen GIL loszuwerden, zum Beispiel PyPy

00:12:37.860 --> 00:12:40.160
oder auch Unladen Swallow, falls ihr euch da noch

00:12:40.160 --> 00:12:41.920
dran erinnert. Wir haben versucht, das loszuwerden.

00:12:42.000 --> 00:12:44.220
Bitte was? Bitte wer? Das war so eine

00:12:44.220 --> 00:12:45.760
Initiative, ich glaube, von Google,

00:12:45.860 --> 00:12:47.560
von Google-Angestellten,

00:12:47.700 --> 00:12:50.140
die versucht haben, eben den Python Interpreter

00:12:50.140 --> 00:12:52.300
neu zu schreiben, ohne das Global Interpreter

00:12:52.300 --> 00:12:54.160
Log. Und es kommt alle paar

00:12:54.160 --> 00:12:56.200
Jahre wieder, weil es einfach ein großes Ärgernis ist,

00:12:56.280 --> 00:12:58.200
dass du Multithreaded-Programme schreibst,

00:12:58.200 --> 00:13:00.060
an Leanswallow, aber trotzdem nicht

00:13:00.060 --> 00:13:02.000
mehr CPU kriegst.

00:13:02.120 --> 00:13:03.740
Genau, an Leanswallow, weil halt die

00:13:03.740 --> 00:13:05.600
schneller fliegen kann.

00:13:07.560 --> 00:13:08.220
Und jetzt

00:13:08.220 --> 00:13:10.240
wandert es auch so langsam, oder beziehungsweise

00:13:10.240 --> 00:13:12.260
es ist ja schon lange unterwegs, dass man

00:13:12.260 --> 00:13:14.220
das schneller macht und den

00:13:14.220 --> 00:13:15.500
GIL so ein bisschen wegbekommt.

00:13:16.120 --> 00:13:18.180
Und da gab es jetzt eben diese

00:13:18.180 --> 00:13:19.940
eine Bewegung, dass es keinen

00:13:19.940 --> 00:13:22.400
globalen, kein globales

00:13:22.400 --> 00:13:23.980
Global Interpreter Log mehr gibt, sondern

00:13:23.980 --> 00:13:25.720
eben eins für Subinterpreter.

00:13:25.720 --> 00:13:26.420
Das heißt,

00:13:26.420 --> 00:13:28.920
die Python Runtime, der

00:13:28.920 --> 00:13:30.140
CPython

00:13:30.140 --> 00:13:33.500
die CPython VM

00:13:33.500 --> 00:13:35.360
kann jetzt Subinterpreter starten, die dann

00:13:35.360 --> 00:13:37.160
ihr eigenes Global Interpreter lockern

00:13:37.160 --> 00:13:39.640
aber ich weiß nicht, wie man da drankommt

00:13:39.640 --> 00:13:40.580
Jochen, weißt du, wie man das macht?

00:13:41.100 --> 00:13:42.860
Ja, über die, also momentan nur

00:13:42.860 --> 00:13:44.880
in C-Code kann man das halt

00:13:44.880 --> 00:13:46.800
kann man halt sich halt einen neuen Interpreter erzeugen und da

00:13:46.800 --> 00:13:48.900
irgendwelche Dinge mitmachen, in 3.13

00:13:48.900 --> 00:13:50.500
soll es dann eine API geben, die halt auch

00:13:50.500 --> 00:13:52.600
innerhalb von Python Code verfügbar ist, wo man dann einfach sagt

00:13:52.600 --> 00:13:54.680
Hallo, machen wir mal einen neuen Interpreter

00:13:54.680 --> 00:13:56.620
und dem gibt man dann einen String

00:13:56.620 --> 00:13:58.500
und dieser String wird dann als Python-Code

00:13:58.500 --> 00:13:59.460
darin ausgewertet.

00:14:00.420 --> 00:14:02.380
Da kann man sich natürlich auch irgendwie hübschere Abstraktionen

00:14:02.380 --> 00:14:03.420
noch drumherum bauen, keine Ahnung.

00:14:04.600 --> 00:14:06.640
Ja, also ich meine, ich finde das auch so ein bisschen

00:14:06.640 --> 00:14:08.400
so ein spezielles, also das mag schon

00:14:08.400 --> 00:14:10.800
Anwendungsfälle geben, wo das sinnvoll ist,

00:14:10.920 --> 00:14:12.600
aber ich meine, das wird schon

00:14:12.600 --> 00:14:14.680
sehr speziell, weil ich meine, für viele Sachen, wo man

00:14:14.680 --> 00:14:16.720
sowas, wo man denken würde, oh, das kann

00:14:16.720 --> 00:14:18.700
ich gut brauchen, warum macht man da nicht einfach einen zweiten

00:14:18.700 --> 00:14:21.020
Prozess auf? Also kann man ja auch machen.

00:14:21.120 --> 00:14:22.440
Einen zweiten Interpreter und

00:14:22.440 --> 00:14:23.940
und da muss man halt schon...

00:14:23.940 --> 00:14:25.160
Da hast du halt dann diese Prozessgrenze.

00:14:25.460 --> 00:14:27.940
Da musst du halt irgendwie

00:14:27.940 --> 00:14:30.000
die Daten von einem Prozess zum anderen übergeben

00:14:30.000 --> 00:14:31.900
und in vielen Fällen, denke ich,

00:14:31.960 --> 00:14:34.160
ist das wahrscheinlich kein so großes Problem, weil...

00:14:34.160 --> 00:14:35.180
Wie macht man das dann am Messen?

00:14:35.620 --> 00:14:37.260
Ja, also es hängt halt von den Daten ab.

00:14:38.280 --> 00:14:39.900
Ja, aber oft übergibst du halt einfach nur

00:14:39.900 --> 00:14:42.040
eine URL zu irgendeinem Bucket

00:14:42.040 --> 00:14:42.560
oder sowas.

00:14:43.280 --> 00:14:45.160
Ja, das kommt natürlich auf den Anwendungsfall an.

00:14:45.380 --> 00:14:47.940
Da gibt es auch Anwendungsfälle,

00:14:48.180 --> 00:14:50.520
wo man viel Daten übergeben muss.

00:14:50.520 --> 00:14:52.100
Viel Kommunikation und viel Compute.

00:14:52.100 --> 00:14:54.040
Dann ist schlecht. Dann musst du ihn mal serialisieren

00:14:54.040 --> 00:14:56.280
oder musst du ihn in den Speicher irgendwo reinschreiben

00:14:56.280 --> 00:14:58.200
oder irgendwie... Genau, du kannst

00:14:58.200 --> 00:15:00.060
natürlich per Pickel einfach serialisieren

00:15:00.060 --> 00:15:02.200
oder irgendwie übergeben

00:15:02.200 --> 00:15:04.220
oder über den Pipe

00:15:04.220 --> 00:15:06.180
schicken oder sowas. Also auch ein Standardweg, wie man

00:15:06.180 --> 00:15:07.800
das macht, ist dann halt einfach

00:15:07.800 --> 00:15:10.100
Chat-Memory verwenden, sodass halt alle Prozesse,

00:15:10.180 --> 00:15:12.120
die man erzeugt, halt auf den gleichen Speicher

00:15:12.120 --> 00:15:13.980
zugreifen. Das geht auch.

00:15:14.600 --> 00:15:16.580
Wie geht denn das? Aber dann hast du ja wieder das Locking-Problem.

00:15:17.000 --> 00:15:17.720
Als Elevator?

00:15:18.160 --> 00:15:19.860
Naja, solange du nur liest, ist es kein Problem.

00:15:20.000 --> 00:15:21.820
Ja, solange du nur liest, ist das nie ein Problem.

00:15:21.820 --> 00:15:51.800
über Python.

00:15:51.820 --> 00:15:53.740
machen sollte. Und dann gibt es vielleicht so ein paar,

00:15:53.960 --> 00:15:55.980
bei denen geht das aus irgendwelchen

00:15:55.980 --> 00:15:57.940
Gründen nicht so gut und dann macht das mit den Subinterpretern

00:15:57.940 --> 00:15:58.580
halt irgendwie Sinn.

00:15:58.920 --> 00:16:01.500
Also du machst irgendwie so ein

00:16:01.500 --> 00:16:03.700
Map-Use-Ding, um die Computation

00:16:03.700 --> 00:16:05.640
auseinanderzudröseln und dann zusammenzuführen und wo

00:16:05.640 --> 00:16:07.560
schreibst du dann wieder was rein und wenn du sagst, du

00:16:07.560 --> 00:16:09.180
Ja, du kriegst es halt wieder zurück.

00:16:09.560 --> 00:16:11.680
Und dann je nachdem, wie groß das ist, was du zurückbekommst

00:16:11.680 --> 00:16:13.680
von der Berechnung, kannst du es halt

00:16:13.680 --> 00:16:15.340
einfach auch wieder irgendwie

00:16:15.340 --> 00:16:18.040
serialisieren und in deinem Masterprozess

00:16:18.040 --> 00:16:19.260
sozusagen wieder deserialisieren.

00:16:19.760 --> 00:16:21.500
Und wenn das zu groß wird, dann schreibst du das halt

00:16:21.500 --> 00:16:23.960
und von wo realisiert

00:16:23.960 --> 00:16:25.540
du das denn? Also von dem Chat memory

00:16:25.540 --> 00:16:27.080
oder was sagst du mit der Pipe, was meinst du damit?

00:16:28.000 --> 00:16:29.500
Es geht ja nur darum,

00:16:29.580 --> 00:16:31.260
dass du in diesem Modell, was der Jochen vorstellt,

00:16:31.360 --> 00:16:33.640
nur zwei Synchronisationspunkte hast, nämlich ganz am Anfang,

00:16:33.720 --> 00:16:35.680
wenn du es verteilst und ganz am Ende, wenn du es zusammenbringst.

00:16:36.540 --> 00:16:37.760
Und das bedeutet,

00:16:37.940 --> 00:16:39.640
dass es nicht so wichtig ist, wie schnell

00:16:39.640 --> 00:16:41.560
die Kommunikation ist, weil du die nicht die ganze Zeit

00:16:41.560 --> 00:16:43.440
verwendest, sondern du verwendest die nur einmal

00:16:43.440 --> 00:16:45.560
en bloc. Wenn du jetzt aber so

00:16:45.560 --> 00:16:47.600
ein System hast, wo du zwölf Threads

00:16:47.600 --> 00:16:49.640
hast, die alle 10 Millisekunden

00:16:49.640 --> 00:16:51.360
miteinander kommunizieren, die irgendeine Nachricht

00:16:51.360 --> 00:16:53.360
über die Queues schicken, sowas wie das Actor-Modell.

00:16:53.500 --> 00:16:55.560
Wenn du in Erlang sagst, jede Funktion

00:16:55.560 --> 00:16:57.460
ist ein Thread und du schickst jedes Mal

00:16:57.460 --> 00:16:59.260
bei jedem Funktionsaufruf eine Message rüber.

00:16:59.720 --> 00:17:01.520
Dann geht das nicht mehr, weil

00:17:01.520 --> 00:17:03.320
du dann eben über diese Prozessgrenze

00:17:03.320 --> 00:17:04.800
irgendwas haben musst, was

00:17:04.800 --> 00:17:07.420
innerhalb des Betriebssystems über die Prozessgrenze

00:17:07.420 --> 00:17:09.200
drüber geht und das ist üblicherweise langsam.

00:17:09.560 --> 00:17:10.760
Egal, welche Technik du hören willst.

00:17:10.920 --> 00:17:12.700
Ob es Pipes sind oder Shared Memory oder

00:17:12.700 --> 00:17:14.300
was weiß ich.

00:17:14.620 --> 00:17:17.340
Es ist ganz anders, weil du hast ja automatisch irgendwie Kontext-Switches dabei,

00:17:17.820 --> 00:17:19.480
wo es halt langsam wird.

00:17:19.640 --> 00:17:22.660
Aber die Frage ist halt, passiert das in der Praxis häufig?

00:17:22.820 --> 00:17:25.220
Weil ich würde sagen, du hast üblicherweise einen von beiden Fällen.

00:17:25.340 --> 00:17:28.500
Du hast halt entweder den Fall, du musst halt viel I.O. machen,

00:17:28.660 --> 00:17:30.100
aber du brauchst eigentlich keine CPU.

00:17:30.260 --> 00:17:34.020
Also wenn du jetzt sowas hast wie eben so eine Web-Anwendung

00:17:34.020 --> 00:17:35.860
oder irgendwie eine Anwendung, die irgendwie so, weiß ich nicht,

00:17:35.900 --> 00:17:39.180
selbst sowas wie ein massiv paralleler Chat-Server oder sowas,

00:17:39.500 --> 00:17:40.380
der rechnet ja nichts aus.

00:17:40.560 --> 00:17:42.760
Also der schiebt ja nur irgendwie Bits und Bytes hin und her.

00:17:43.320 --> 00:17:45.260
Da brauchst du die mehreren CPUs eigentlich nicht.

00:17:46.140 --> 00:17:48.520
Oder du kannst halt dann mehrere Prozesse starten,

00:17:48.520 --> 00:17:50.480
die dann halt alle, auf die du dann loadbalancest,

00:17:50.540 --> 00:17:52.040
die dann halt alle auf einer CPU hocken,

00:17:52.780 --> 00:17:54.660
aber die sich nicht miteinander unterhalten

00:17:54.660 --> 00:17:56.540
müssen. Oder du hast halt den Fall, wo du

00:17:56.540 --> 00:17:58.620
Number Crunching machen willst, aber da brauchst

00:17:58.620 --> 00:17:59.760
du dann eigentlich diese

00:17:59.760 --> 00:18:01.840
Kommunikation nicht mehr.

00:18:02.000 --> 00:18:04.200
Das heißt, Number Crunching meinst du, du lässt dann doch auf jedem

00:18:04.200 --> 00:18:06.140
Kern irgendwie einen Python-Prozess laufen und

00:18:06.140 --> 00:18:08.480
Du willst halt ein Array von

00:18:08.480 --> 00:18:10.540
einem Petabyte irgendwie Zahlen sortieren

00:18:10.540 --> 00:18:11.100
oder sowas.

00:18:12.540 --> 00:18:13.360
Klassische Anwendung.

00:18:13.360 --> 00:18:14.860
Ja, das ist immer das,

00:18:15.400 --> 00:18:17.220
womit man dann demonstriert,

00:18:17.220 --> 00:18:19.300
irgendwie, dass man irgendwas parallelisieren

00:18:19.300 --> 00:18:19.720
kann oder so.

00:18:20.960 --> 00:18:22.960
Ja, aber dafür brauchst du normalerweise keine

00:18:22.960 --> 00:18:24.880
Kommunikation zwischen den Dingern.

00:18:25.680 --> 00:18:27.240
Und ja, also dass man den Fall

00:18:27.240 --> 00:18:29.240
hat, dass man gleichzeitig Kommunikation

00:18:29.240 --> 00:18:30.640
viel hat und gleichzeitig

00:18:30.640 --> 00:18:33.020
irgendwie ganz viel

00:18:33.020 --> 00:18:35.140
Prozessor braucht,

00:18:35.760 --> 00:18:36.020
also

00:18:36.020 --> 00:18:39.300
der ist aus meiner

00:18:39.300 --> 00:18:41.000
Perspektive schon ein ziemlicher Nischenanwendungsfall.

00:18:42.360 --> 00:18:43.040
Ich meine, das wäre natürlich schön,

00:18:43.040 --> 00:18:43.980
wenn das so gehen würde, aber...

00:18:43.980 --> 00:18:45.160
Vielleicht, weil es nicht geht, Jochen.

00:18:45.640 --> 00:18:46.620
Ja, vielleicht auch, weil es nicht geht.

00:18:47.220 --> 00:18:49.760
Wenn es einfacher gehen würde, würden wir das alle machen.

00:18:50.040 --> 00:18:50.540
Ja, vielleicht.

00:18:51.740 --> 00:18:52.260
Weiß ich nicht.

00:18:52.560 --> 00:18:55.040
Auf jeden Fall gibt es Begräbungen in die Richtungen

00:18:55.040 --> 00:18:56.280
und das ist doch schön.

00:18:57.120 --> 00:18:57.340
Genau.

00:18:58.180 --> 00:19:00.080
Jetzt hast du nochmal bei 3.12 was gesagt.

00:19:00.200 --> 00:19:00.720
Teigel?

00:19:02.960 --> 00:19:03.480
Subinterpreter.

00:19:03.620 --> 00:19:05.560
Ja, und der Subinterpreter macht immer seinen eigenen

00:19:05.560 --> 00:19:08.720
Subinterpreter.

00:19:09.720 --> 00:19:10.840
Was haben wir denn noch?

00:19:11.840 --> 00:19:12.860
Ja, es gibt jetzt so ein paar

00:19:12.860 --> 00:19:15.460
Typing-

00:19:15.460 --> 00:19:16.860
Verbesserungen.

00:19:17.220 --> 00:19:17.740
und

00:19:17.740 --> 00:19:19.760
also ich finde das

00:19:19.760 --> 00:19:21.060
ehrlich gesagt, da sagen alle so

00:19:21.060 --> 00:19:23.480
das ist so toll, weil jetzt geht das noch einfacher als

00:19:23.480 --> 00:19:25.600
vorher. Wie bitte, das war vorher einfach?

00:19:26.140 --> 00:19:27.660
Also mit dem Type-Var-Type-Aliases

00:19:27.660 --> 00:19:28.600
Jetzt geht es noch einfacher.

00:19:30.480 --> 00:19:31.600
Also wenn man

00:19:31.600 --> 00:19:33.740
sich da anguckt, wie die Signaturen von Funktionen aussehen,

00:19:34.340 --> 00:19:35.460
das sieht schon, also

00:19:35.460 --> 00:19:37.280
definierst du ja zuerst so ein

00:19:37.280 --> 00:19:39.300
mit Type-Var irgendwie den Namen

00:19:39.300 --> 00:19:41.640
für einen generischen Type und dann

00:19:41.640 --> 00:19:43.720
setzt du den noch irgendwie da ein

00:19:43.720 --> 00:19:45.280
und dann, also es ist schon

00:19:45.280 --> 00:19:47.460
Also du hast auf jeden Fall ganz viele Klammern

00:19:47.460 --> 00:19:48.900
und ganz viele Doppelfunkte und komische Dinge

00:19:48.900 --> 00:19:51.580
Ich muss auch sagen, ich habe den Fehler gemacht

00:19:51.580 --> 00:19:53.540
Ich habe jetzt meinen Editor umgestellt auf die

00:19:53.540 --> 00:19:55.740
neue Linting-Variante mit komplett

00:19:55.740 --> 00:19:57.520
MyPy auch drin und so

00:19:57.520 --> 00:19:59.420
Also normalerweise habe ich das immer nur beim

00:19:59.420 --> 00:20:00.900
Committen drüber laufen lassen, aber jetzt

00:20:00.900 --> 00:20:03.460
Es ist so ein bisschen

00:20:03.460 --> 00:20:04.420
nervig

00:20:04.420 --> 00:20:06.780
Ja, sozusagen

00:20:06.780 --> 00:20:09.160
Verwendest du dann MyPyD oder

00:20:09.160 --> 00:20:10.020
Genau

00:20:10.020 --> 00:20:11.900
Genau, die MyPy

00:20:11.900 --> 00:20:15.100
Da läuft halt dann so ein MyPy-Server und dann

00:20:15.100 --> 00:20:16.600
kann ja mal fragen und mit den ganzen anderen

00:20:16.600 --> 00:20:17.680
Sachen halt auch und

00:20:17.680 --> 00:20:20.820
ja, es ist mehr gekringelt, als ich dachte.

00:20:21.260 --> 00:20:22.940
Weil vorher war das immer schön sauber und aufgeräumt

00:20:23.700 --> 00:20:24.840
und schönster lässt sich auch

00:20:24.840 --> 00:20:25.280
ein bisschen

00:20:25.280 --> 00:20:29.020
also, wenn man halt Module benutzt, die zum Beispiel

00:20:29.020 --> 00:20:30.800
falsch typen oder sowas,

00:20:30.900 --> 00:20:32.960
also in Anführungszeichen, dann meckert

00:20:32.960 --> 00:20:34.760
MyPy direkt und du musst halt einfach nebenschreiben,

00:20:34.960 --> 00:20:36.920
dass er es ignorieren soll, weil es kommt halt aus dem Modul und es ist ja

00:20:36.920 --> 00:20:38.980
falsch, das kann ich jetzt ja nicht ändern. Oder ich kann

00:20:38.980 --> 00:20:40.960
halt den TypePint davon dann neu machen oder

00:20:40.960 --> 00:20:42.900
sowas. Also, oder eine Julien draus

00:20:42.900 --> 00:20:44.340
machen, was ja aber dann eigentlich auch falsch ist, weil

00:20:44.340 --> 00:20:45.560
Was soll das?

00:20:46.640 --> 00:20:48.640
Ja, da müssen wir glaube ich mal eine Episode drüber machen

00:20:48.640 --> 00:20:49.940
Ja, eine Typing-Episode müssen wir machen

00:20:49.940 --> 00:20:51.120
Nicht nur eine, glaube ich

00:20:51.120 --> 00:20:53.200
Das sind so ein paar lange Episoden

00:20:53.200 --> 00:20:55.140
Ja, also

00:20:55.140 --> 00:20:57.320
gerade so bei generischen Types und so

00:20:57.320 --> 00:20:59.460
die finden das ist alles wild

00:20:59.460 --> 00:21:01.000
und da muss man halt echt

00:21:01.000 --> 00:21:03.540
Jango-Stubs oder sowas

00:21:03.540 --> 00:21:06.300
Ja, jetzt ist es auf jeden Fall

00:21:06.300 --> 00:21:06.920
besser geworden

00:21:06.920 --> 00:21:09.480
Genau besser geworden

00:21:09.480 --> 00:21:11.620
Man kann ja zum Beispiel sowas sagen

00:21:11.620 --> 00:21:13.640
wenn man jetzt irgendwo sagen will

00:21:13.640 --> 00:21:15.280
Sternstern KW-Args oder so.

00:21:16.160 --> 00:21:18.100
Was man ja manchmal

00:21:18.100 --> 00:21:19.920
machen möchte, dann ist das ja irgendwie nicht gut

00:21:19.920 --> 00:21:21.100
zu typen. Any.

00:21:21.960 --> 00:21:23.420
Ja, kann man natürlich auch sagen,

00:21:23.500 --> 00:21:25.300
String Any, Dict String Any,

00:21:25.560 --> 00:21:27.360
aber machen ja auch viele,

00:21:27.640 --> 00:21:29.680
aber das natürlich dann geht halt auch irgendwie so ein bisschen der Nutzen

00:21:29.680 --> 00:21:31.560
verloren. Also was man jetzt tun kann, ist,

00:21:31.700 --> 00:21:33.400
man sagt KW-Args

00:21:33.400 --> 00:21:35.420
Unpack und dann zum Beispiel

00:21:35.420 --> 00:21:37.600
Ecke Klammer auf und dann gibt man den Namen

00:21:37.600 --> 00:21:39.220
von einem TypeDict an und dann

00:21:39.220 --> 00:21:41.700
definiert man dann sozusagen für jede,

00:21:42.360 --> 00:21:43.460
für jedes Keyword-Argument

00:21:43.460 --> 00:21:45.420
quasi den genauen Teil. Oh, da könnte man auch

00:21:45.420 --> 00:21:47.160
eine Dataclass reingeben oder sowas. Aber warum?

00:21:47.520 --> 00:21:49.180
Ja, sieht ziemlich genauso aus wie eine Dataclass, ja.

00:21:49.900 --> 00:21:51.400
Warum definiert man die denn nicht direkt?

00:21:51.580 --> 00:21:53.300
Was ist dann noch der Sinn von Quark? Wie willst du

00:21:53.300 --> 00:21:54.200
den hinschreiben? Kannst du nicht.

00:21:55.900 --> 00:21:56.520
Du kannst dann halt

00:21:56.520 --> 00:21:58.980
jedes einzelne KW hin.

00:21:59.020 --> 00:22:01.240
Ja gut, das kannst du natürlich auch machen, ja. Du kannst dann einfach

00:22:01.240 --> 00:22:02.620
die ganzen Keyword-Argumente hin.

00:22:02.880 --> 00:22:07.220
Wenn es halt ganz viele sind, dann hast du sie halt getypt.

00:22:07.640 --> 00:22:09.300
Ja, und du kannst es halt auch nicht wiederverwenden.

00:22:09.320 --> 00:22:09.980
Das hast du schon hingeschrieben.

00:22:10.800 --> 00:22:12.220
Und Validierung kannst du nicht machen.

00:22:12.220 --> 00:22:14.420
Ja, ist schon ein Nischenfall.

00:22:16.420 --> 00:22:18.520
Und genau, bei den

00:22:18.520 --> 00:22:19.840
Generic

00:22:19.840 --> 00:22:22.880
Type-Geschichten

00:22:22.880 --> 00:22:24.440
muss man jetzt auch nicht mehr

00:22:24.440 --> 00:22:26.300
irgendwie type-wahr und type-alias davor schreiben,

00:22:26.400 --> 00:22:28.060
sondern man kann halt irgendwie einfach type nehmen

00:22:28.060 --> 00:22:30.380
als Keyword, also als Statement

00:22:30.380 --> 00:22:32.360
und dann irgendwie den Kram dahinter schreiben

00:22:32.360 --> 00:22:34.480
und muss auch nicht mehr den ganzen Kram importieren.

00:22:35.080 --> 00:22:36.080
Das funktioniert einfach so.

00:22:37.080 --> 00:22:38.180
Ja, also wenn man

00:22:38.180 --> 00:22:40.240
drauf steht, dann ist das wahrscheinlich eine deutliche

00:22:40.240 --> 00:22:40.940
Verbesserung.

00:22:40.940 --> 00:22:42.780
aber ich weiß nicht. Ja, Typing ist schon so ein bisschen

00:22:42.780 --> 00:22:44.920
Bloatware, oder? So Typing? Manchmal?

00:22:45.220 --> 00:22:46.720
Ja, ich glaube,

00:22:46.820 --> 00:22:47.560
da müssen wir mal eine Episode machen.

00:22:48.960 --> 00:22:50.800
Aber das können wir jetzt

00:22:50.800 --> 00:22:51.300
nicht leisten.

00:22:53.300 --> 00:22:54.780
Ja, es ist halt wirklich

00:22:54.780 --> 00:22:56.680
nützlich. Ich würde sagen, kollegatives Arbeiten, gerade

00:22:56.680 --> 00:22:58.740
mit Leuten, die das noch nicht so wissen, was da

00:22:58.740 --> 00:23:00.140
passiert, ist das echt hilfreich.

00:23:00.420 --> 00:23:02.680
Um denen so zu zeigen, welche Dinge es gehen sollte.

00:23:02.900 --> 00:23:04.780
Ich habe da auch Meinungen dazu, ja. Also, nein.

00:23:07.660 --> 00:23:07.980
Ja.

00:23:09.120 --> 00:23:10.740
Was haben wir noch? Ah, coole

00:23:10.940 --> 00:23:12.960
kleine Verbesserungen, die aber, achso,

00:23:13.400 --> 00:23:15.160
genau, auch noch zum Typing, weil das gehört

00:23:15.160 --> 00:23:17.140
auch noch zum Typing dazu, es gibt

00:23:17.140 --> 00:23:19.360
jetzt einen Override-Dekorator.

00:23:20.040 --> 00:23:21.000
Override? Ja.

00:23:21.380 --> 00:23:23.140
Wo man halt über eine Methode schreiben

00:23:23.140 --> 00:23:24.780
kann, addOverride

00:23:24.780 --> 00:23:26.680
und dann damit dem

00:23:26.680 --> 00:23:28.660
einen TypeChecker sagen kann,

00:23:29.560 --> 00:23:30.720
also

00:23:30.720 --> 00:23:33.240
das hier überschreibt übrigens eine Methode

00:23:33.240 --> 00:23:34.800
in der Superklasse, weil

00:23:34.800 --> 00:23:37.040
das Problem, das man bisher hat, ist halt,

00:23:37.500 --> 00:23:39.000
wenn man jetzt Methoden überschreibt

00:23:39.000 --> 00:23:40.440
in der Unterklasse,

00:23:40.940 --> 00:23:43.880
Dann kann die ja komplett korrekt getypt sein und so

00:23:43.880 --> 00:23:45.480
und der statische Typechecker

00:23:45.480 --> 00:23:47.720
und jetzt nennt jemand irgendwie die Methode

00:23:47.720 --> 00:23:49.360
in der Oberklasse, aber refactored die

00:23:49.360 --> 00:23:50.500
und benennt die um.

00:23:51.480 --> 00:23:53.820
Dann merkt der statische Typechecker

00:23:53.820 --> 00:23:55.380
davon überhaupt gar nichts und alles stimmt.

00:23:55.820 --> 00:23:57.200
Das Verhalten ändert sich aber.

00:23:58.080 --> 00:23:59.360
Weil ja jetzt plötzlich

00:23:59.360 --> 00:24:00.820
irgendwie das nicht mehr überschrieben wird.

00:24:01.300 --> 00:24:03.480
Und ja, dann ist natürlich schlecht.

00:24:05.240 --> 00:24:07.720
Das heißt, du sagst explizit, hey, ich überschreibe hier eine Methode.

00:24:07.940 --> 00:24:09.980
Genau, und sobald jemand in der Oberklasse

00:24:09.980 --> 00:24:12.120
das Ding umbenennt,

00:24:12.300 --> 00:24:12.880
dann sagt dir der

00:24:12.880 --> 00:24:14.920
statische Type-Checker,

00:24:15.120 --> 00:24:17.960
das überschreibt überhaupt keine Methode mehr,

00:24:18.020 --> 00:24:20.120
hier ist irgendwas kaputt, was vielleicht schon

00:24:20.120 --> 00:24:21.760
hilfreich ist. Ja, und das tatsächlich

00:24:21.760 --> 00:24:23.420
findet man ein Tramax, ja.

00:24:24.680 --> 00:24:25.500
Genau, das

00:24:25.500 --> 00:24:27.860
ist mit dem Typ-Typing-Zeugs

00:24:27.860 --> 00:24:28.940
dann durch.

00:24:30.700 --> 00:24:32.220
Zu Dekoratoren, ah, habt ihr das

00:24:32.220 --> 00:24:33.420
schon mal verwendet, Cached-Property?

00:24:33.820 --> 00:24:36.380
Ich hab das auch schon häufiger verwendet,

00:24:36.420 --> 00:24:38.220
genau. Ja, das weg.

00:24:39.980 --> 00:24:40.700
Warum?

00:24:41.340 --> 00:24:42.180
Es war kaputt.

00:24:42.880 --> 00:24:44.900
Das Problem ist, es hat

00:24:44.900 --> 00:24:46.840
massiv viele Logs gemacht und

00:24:46.840 --> 00:24:49.200
hat irgendwie nicht auf Instance-Ebene

00:24:49.200 --> 00:24:50.700
geloggt und

00:24:50.700 --> 00:24:52.920
das ist ganz schrecklich und die Leute haben es gemessen und festgestellt,

00:24:53.020 --> 00:24:55.260
es ist viel langsamer damit als vorher.

00:24:55.640 --> 00:24:56.360
Ich habe es nie überprüft.

00:24:56.360 --> 00:24:58.500
Ich dachte mal so, Cash Property,

00:24:58.640 --> 00:25:00.420
voll gut. Nee, war scheiße.

00:25:01.400 --> 00:25:02.320
Das heißt, man hat einfach

00:25:02.320 --> 00:25:03.420
Cash und Methodenaufruf, oder?

00:25:04.220 --> 00:25:06.140
Ja, also ich habe es eben für solche Dinge benutzt,

00:25:06.300 --> 00:25:08.100
wo halt dann irgendeine Berechnung stattfindet und dann

00:25:08.100 --> 00:25:18.100
Genau, also wenn die Berechnung sehr lang ist, gut, vielleicht ist es dann auch noch irgendwie tatsächlich effizienter, aber so generell war es oft eher langsamer mit dem Cache-Dekorator drüber als ohne.

00:25:18.200 --> 00:25:23.600
Naja, man kann ja dann die Kalkulation cachen und dann eine andere Sache machen, wo der Property drin ist.

00:25:24.040 --> 00:25:30.340
Ja, also auf jeden Fall, irgendwie hat sich jemand das genauer angeguckt, dabei hat sich herausgestellt, so wie das gedacht ist, geht das alles gar nicht.

00:25:30.800 --> 00:25:32.700
Und daher haben sie es jetzt entfernt.

00:25:33.820 --> 00:25:35.040
Das heißt, man muss das jetzt selber bauen.

00:25:35.040 --> 00:25:36.840
also du kannst Master 2 Methoden, die eine Methode ist

00:25:36.840 --> 00:25:38.080
eine Property, die andere Methode ist

00:25:38.080 --> 00:25:40.060
Es ist nicht so schlimm, also man kann sich relativ leicht

00:25:40.060 --> 00:25:42.900
sowas bauen. Wenn du keine Logs brauchst.

00:25:44.900 --> 00:25:46.940
Ja, wenn man Logs braucht, dann

00:25:46.940 --> 00:25:48.820
ist man eh schon in so einem

00:25:48.820 --> 00:25:50.100
Drachen

00:25:50.100 --> 00:25:53.240
Territorium, das ist halt

00:25:53.240 --> 00:25:54.780
ja, muss man eh gucken.

00:25:55.520 --> 00:25:57.300
Ja, genau, dann

00:25:57.300 --> 00:25:59.500
Drachen

00:25:59.500 --> 00:26:00.960
Territorium, ja

00:26:00.960 --> 00:26:03.060
wo die wilden Tiere wohnen. Genau.

00:26:03.660 --> 00:26:04.320
Große Drachen.

00:26:05.040 --> 00:26:08.480
Das ist so ein Nervpunkt,

00:26:08.660 --> 00:26:11.160
dass es in Python halt mehrere Module gibt,

00:26:11.240 --> 00:26:13.020
die sich irgendwie mit sowas wie Files

00:26:13.020 --> 00:26:15.000
und so Zeugs beschäftigen, ist halt

00:26:15.000 --> 00:26:17.200
einfach nervtötend. Hat historische Gründe,

00:26:17.340 --> 00:26:18.980
aber es gibt halt ParseLib,

00:26:19.040 --> 00:26:19.880
so als das aktuellste.

00:26:21.440 --> 00:26:22.080
Es gibt OS,

00:26:22.360 --> 00:26:24.920
es gibt dann noch SH-Util

00:26:24.920 --> 00:26:26.320
und es gibt noch irgendwie so ein paar andere.

00:26:27.160 --> 00:26:29.100
Und je nachdem, was man machen möchte, muss man halt eins von denen

00:26:29.100 --> 00:26:31.220
verwenden und es gibt keins, wo man alle verwenden kann.

00:26:31.640 --> 00:26:33.060
Auch ParseLib hat natürlich auch schon

00:26:33.060 --> 00:26:34.700
diverse, also ParseLib, da wird immer

00:26:34.700 --> 00:26:36.840
rumkritisiert, ein bisschen zu Recht,

00:26:36.960 --> 00:26:38.320
dass es ultra langsam ist.

00:26:38.960 --> 00:26:40.560
Vielleicht hat sich das jetzt auch gebessert, das weiß ich nicht genau.

00:26:40.880 --> 00:26:42.860
Auf jeden Fall, wofür man früher immer noch

00:26:42.860 --> 00:26:44.480
mit OS häufig verwenden

00:26:44.480 --> 00:26:46.760
musste, war halt OS-Walk, also wenn man

00:26:46.760 --> 00:26:48.880
halt so ein Dateisystem im Baum einfach mal so

00:26:48.880 --> 00:26:50.060
rekursiv durchgehen möchte.

00:26:50.800 --> 00:26:52.180
Und in Parslip gab es nichts dafür.

00:26:52.520 --> 00:26:54.480
Und jetzt gibt es halt ein Walk

00:26:54.480 --> 00:26:55.800
in Parslip.

00:26:55.800 --> 00:26:57.580
Das musst du machen, etalieren musst du das so machen

00:26:57.580 --> 00:26:59.960
und dann immer rekursiv deine Funktion selber aufrufen.

00:27:00.140 --> 00:27:02.500
Ja, aber das willst du vielleicht nicht selber schreiben.

00:27:02.620 --> 00:27:03.640
Und gleichzeitig Etalfiles

00:27:03.640 --> 00:27:04.280
und das ist

00:27:04.280 --> 00:27:07.600
Arbeit und keine schöne Arbeit

00:27:07.600 --> 00:27:09.380
und leicht falsch zu machen Arbeit.

00:27:09.380 --> 00:27:11.440
Du machst irgendwas anderes und dann willst du jetzt mal

00:27:11.440 --> 00:27:13.440
kurz über alle Falschen in dein Dateisystem

00:27:13.440 --> 00:27:15.540
umgehen und dann fängst du da an mit Rekursionen

00:27:15.540 --> 00:27:17.380
zu machen, Dinge zu tun und so,

00:27:17.720 --> 00:27:18.840
wo viel schief gehen kann.

00:27:19.080 --> 00:27:21.520
Ich weiß nicht. Also da will man doch

00:27:21.520 --> 00:27:23.240
eigentlich eine Funktion einfach nehmen und die

00:27:23.240 --> 00:27:24.300
dann einfach...

00:27:24.300 --> 00:27:27.320
Generell alles, was mit Dateien zu tun hat, ist so,

00:27:27.380 --> 00:27:29.680
dass man eigentlich da lieber Funktionen dazu hat,

00:27:30.520 --> 00:27:31.460
die sich schon mal jemand

00:27:31.460 --> 00:27:33.420
ausgedacht hat, der was davon versteht.

00:27:33.640 --> 00:27:33.800
Ja

00:27:33.800 --> 00:27:37.480
Die sind deceptively simple, wie man so sagt

00:27:37.480 --> 00:27:39.380
Die sind ganz einfach zu schreiben und gehen dann auf

00:27:39.380 --> 00:27:41.760
überraschend beeindruckende Art und Weise kaputt

00:27:41.760 --> 00:27:42.820
An vielen verschiedenen Stellen

00:27:42.820 --> 00:27:44.600
An allen Stellen

00:27:44.600 --> 00:27:46.180
Oder Cycles

00:27:46.180 --> 00:27:50.280
Du kannst ja Cycles in deinem Verzeichnis haben

00:27:50.280 --> 00:27:51.000
Und links

00:27:51.000 --> 00:27:53.420
zu einem gut darüberliegenden Verzeichnis

00:27:53.420 --> 00:27:54.900
und dann hast du eine Kurve drin

00:27:54.900 --> 00:27:57.560
und dann hast du schon einmal

00:27:57.560 --> 00:27:58.440
Tüdüdüdü

00:27:58.440 --> 00:28:00.280
Der Ding zu da, der Ding zu da

00:28:00.280 --> 00:28:01.840
Und dann kommt der Beachball

00:28:01.840 --> 00:28:03.540
Wenn du dich in dieses Rabbit Hole

00:28:03.540 --> 00:28:06.000
eingreifst, dann wird das, was du eigentlich machen wolltest,

00:28:06.060 --> 00:28:07.140
nicht mehr fertig, sondern dann

00:28:07.140 --> 00:28:09.240
bist du irgendwie verschwunden.

00:28:09.960 --> 00:28:11.720
Oder mit dem Cycle-Klink, das könnte man ja mit lustiger

00:28:11.720 --> 00:28:12.120
Sachen machen.

00:28:13.880 --> 00:28:15.540
Ja, schon. Oder andere

00:28:15.540 --> 00:28:17.640
Devices und dann von den anderen Devices wieder das

00:28:17.640 --> 00:28:19.040
andere Device eingebunden und

00:28:19.040 --> 00:28:21.940
ein Cycle über Devices.

00:28:22.940 --> 00:28:23.760
Habe ich letztens irgendwo

00:28:23.760 --> 00:28:25.820
sehr schön, hat das jemand beschrieben,

00:28:26.120 --> 00:28:27.460
ich weiß nicht, ob es auf Mastodon war oder

00:28:27.460 --> 00:28:29.420
keine Ahnung. Ja, also die

00:28:29.420 --> 00:28:31.440
coole Innovation von Unix ist ja,

00:28:31.440 --> 00:28:34.940
und wie man das in Unix einfach alles ein File ist.

00:28:36.100 --> 00:28:38.540
Es gibt ein kleines Problem mit dieser Philosophie,

00:28:38.640 --> 00:28:42.640
nämlich dass eigentlich so gut wie gar nichts ein File tatsächlich ist.

00:28:42.940 --> 00:28:44.180
Ansonsten war es eine super Idee.

00:28:46.320 --> 00:28:48.600
Ja, ist was dran.

00:28:49.220 --> 00:28:50.780
Den Bits musst du jetzt nochmal genau erklären.

00:28:50.860 --> 00:28:51.780
Das war jetzt so ein Insider.

00:28:52.600 --> 00:28:56.100
Also die Philosophie von Unix ist ja, alles ist ein File.

00:28:56.880 --> 00:29:00.600
Da gibt es Files, wo du die CPU-Auslastung auslesen kannst.

00:29:00.600 --> 00:29:04.480
Aber das heißt, du machst einen Händler auf, der zeigt an irgendeiner Stelle und dann

00:29:04.480 --> 00:29:06.300
Ja, du musst halt den richtigen Dateinamen wissen

00:29:06.300 --> 00:29:07.780
Alles ein Pfeil, tatsächlich fast alles ein Pfeil

00:29:07.780 --> 00:29:08.820
Aber was bedeutet das denn?

00:29:08.920 --> 00:29:09.400
Vielleicht willst du ja erklären

00:29:09.400 --> 00:29:12.280
Also du hast ein Pfeil da drauf hin und kannst von da aus losrennen

00:29:12.280 --> 00:29:13.200
Nee, du hast

00:29:13.200 --> 00:29:13.940
Nee, das ist ein Pfadnamen

00:29:13.940 --> 00:29:16.580
Du hast ein Pfadnamen und dann öffnest du die Datei

00:29:16.580 --> 00:29:21.080
Und anstatt dass du Daten von der Festplatte liest, kriegst du halt Daten von irgendwoher anders geliefert

00:29:21.080 --> 00:29:25.900
Zum Beispiel CPU-Auslastung oder zum Beispiel Netzwerksockets oder zum Beispiel sonst irgendwas

00:29:25.900 --> 00:29:27.780
Das ist zumindest die Idee, ja

00:29:27.780 --> 00:29:29.740
dass wenn du halt den richtigen Part

00:29:29.740 --> 00:29:40.642
auf eine bestimmte Datei hast ja das ist gar keine Datei sondern ein Socket an irgendeinem Also Netzwerkverbindungen sind auch nur Files Ger sind auch nur Files

00:29:41.102 --> 00:29:42.782
Piles sind auch nur Piles.

00:29:43.642 --> 00:29:45.222
Eines der ersten Unix-Dinge, die man

00:29:45.222 --> 00:29:47.062
so macht, wenn Leute das nicht kennen, ist,

00:29:47.122 --> 00:29:48.822
man nimmt halt irgendwie die Shell, zum Beispiel Bash,

00:29:49.202 --> 00:29:50.982
sagt halt Cat, bin Bash oder

00:29:50.982 --> 00:29:51.602
nach

00:29:51.602 --> 00:29:55.502
größerzeichen DevAudio.

00:29:55.502 --> 00:29:56.842
Und dann kann man irgendwie in dem Programm

00:29:56.842 --> 00:29:58.922
aus dem Lautsprecher-Tropfen zuhören.

00:29:59.722 --> 00:30:00.482
Und solche Dinge.

00:30:01.002 --> 00:30:02.242
Weil das ist auch nur eine Datei.

00:30:03.022 --> 00:30:04.842
Also unter Windows oder MS-Boss

00:30:04.842 --> 00:30:06.722
war das halt, das ist halt irgendwie,

00:30:06.882 --> 00:30:07.882
weil das war zu aufwendig.

00:30:08.642 --> 00:30:10.922
Das ist ja auch von Unix inspiriert, aber das haben sie

00:30:10.922 --> 00:30:12.942
halt nicht so richtig implementiert, sondern da haben sie

00:30:12.942 --> 00:30:14.382
da so komische Dinge gemacht wie

00:30:14.382 --> 00:30:16.702
Laufwerksbuchstaben oder Device-Buchstaben.

00:30:17.042 --> 00:30:18.802
Ja, so reservierte Namen.

00:30:18.962 --> 00:30:20.942
Du darfst keine Datei haben, die COM1 heißt.

00:30:21.022 --> 00:30:21.942
Auch unter Windows 11 noch nicht.

00:30:23.282 --> 00:30:25.022
Und das ist natürlich eigentlich

00:30:25.022 --> 00:30:25.802
total schrecklich.

00:30:27.442 --> 00:30:28.542
Aber ja gut,

00:30:29.122 --> 00:30:30.522
wenn man das nicht anders kennt, dann

00:30:30.522 --> 00:30:32.382
Fällt einem das vielleicht gar nicht so auf, aber

00:30:32.382 --> 00:30:34.662
genau, nur

00:30:34.662 --> 00:30:36.842
genau, also diese Philosophie, dass halt alles

00:30:36.842 --> 00:30:38.982
ein Pfeil ist und man alles gleich behandeln kann, ist eigentlich schon sehr cool

00:30:38.982 --> 00:30:40.982
und ist eigentlich auch immer

00:30:40.982 --> 00:30:42.862
so ein Beispiel für eine sehr gelungene API

00:30:42.862 --> 00:30:44.922
weil man halt fast, also ganz ganz

00:30:44.922 --> 00:30:46.002
viel kann man damit erschlagen

00:30:46.002 --> 00:30:48.722
und die API ist gleichzeitig einerseits

00:30:48.722 --> 00:30:50.962
sehr schmal oben, also sozusagen

00:30:50.962 --> 00:30:52.602
es gibt nur wenige Dinge, die man drauf machen kann

00:30:52.602 --> 00:30:55.082
lesen, schreiben, bestimmte

00:30:55.082 --> 00:30:55.722
Stelle spulen

00:30:55.722 --> 00:30:58.962
man kann aber wahnsinnig viel damit

00:30:58.962 --> 00:31:00.162
machen, die ist halt total tief

00:31:00.162 --> 00:31:30.142
und PyTest.

00:31:30.162 --> 00:31:47.642
Genau, also sozusagen, also das ist halt, also Leute sagen mal, das ist wirklich schön, das ist eine schöne Abstraktion, das hat super funktioniert. Genau, man kann halt sagen, aber ein kleines Problem, es gibt ein kleines, kleines Detail, das nicht so richtig gut funktioniert, nämlich die meisten Sachen sind kein Pfeil und verhalten sich auch nicht so und daher...

00:31:47.642 --> 00:31:52.902
Wie kriegt man das Problem? Muss man da irgendwie reinstopfen oder so eine Spule bauen oder...

00:31:52.902 --> 00:31:54.382
Nee, das ist halt so ein bisschen, ja,

00:31:54.582 --> 00:31:57.062
das stimmt auch irgendwo.

00:31:57.202 --> 00:31:58.642
Also es ist halt einfach, ja, es gibt halt,

00:31:59.062 --> 00:31:59.782
alles ist halt furchtbar.

00:32:00.682 --> 00:32:03.062
Was habe ich letztens, ich habe letztens ein Essay gelesen

00:32:03.062 --> 00:32:04.942
auf einer sehr schönen Domain. Die Domain heißt

00:32:04.942 --> 00:32:07.182
irgendwie stilldrinking.com

00:32:07.182 --> 00:32:08.982
und da steht irgendwie

00:32:08.982 --> 00:32:10.542
Programming Sucks oder so

00:32:10.542 --> 00:32:12.502
und da ist sehr schön aufgelistet,

00:32:12.602 --> 00:32:14.922
was alles so schief geht und warum

00:32:14.922 --> 00:32:17.062
eigentlich nie irgendwas funktioniert, warum wir alle keine schönen Dinge

00:32:17.062 --> 00:32:17.502
haben können.

00:32:18.902 --> 00:32:20.682
Kann man ja mal lesen. Ja, ich glaube, ich verlege das mal in den Schuhen.

00:32:20.682 --> 00:32:21.242
Ja, bitte, bitte.

00:32:21.242 --> 00:32:23.182
Den kenne ich auch noch nicht

00:32:23.182 --> 00:32:25.902
Ja, der ist schon relativ alt inzwischen

00:32:25.902 --> 00:32:27.182
Der ist von 2014 oder so

00:32:27.182 --> 00:32:29.842
Aber er ist immer noch genauso wahr wie damals

00:32:29.842 --> 00:32:31.902
Er wird sich wahrscheinlich auch nie ändern

00:32:31.902 --> 00:32:34.182
Ja

00:32:34.182 --> 00:32:37.522
Das mit dem Audio muss ich auch mal ausprobieren

00:32:37.522 --> 00:32:40.082
Das kann ich auch nicht

00:32:40.082 --> 00:32:42.082
Direct von Bash auf

00:32:42.082 --> 00:32:42.822
Def Audio

00:32:42.822 --> 00:32:44.002
Genau, was auch

00:32:44.002 --> 00:32:46.902
C-Python benutzt jetzt auch Precumit

00:32:46.902 --> 00:32:48.462
Auch nett

00:32:48.462 --> 00:32:51.062
Precumit sind die Hooks, die den Code automatisch

00:32:51.062 --> 00:32:53.082
blinden?

00:32:53.402 --> 00:32:54.862
Ja, also du kannst halt mit

00:32:54.862 --> 00:32:56.762
Precommit irgendwie diverse

00:32:56.762 --> 00:32:58.722
Regeln aufstellen, die halt erfüllt

00:32:58.722 --> 00:32:59.182
sein sollen.

00:33:00.122 --> 00:33:02.042
Also zum Beispiel Black-kompatibel oder

00:33:02.042 --> 00:33:04.522
bei C-Python ist das jetzt in R&C, also irgendwie

00:33:04.522 --> 00:33:06.202
Jammer-Syntax gecheckt wird oder

00:33:06.202 --> 00:33:08.822
weiß ich nicht, falls sie zu groß sind.

00:33:09.142 --> 00:33:10.642
Weniger Bugs? Fühlst du weniger Bugs?

00:33:11.622 --> 00:33:11.882
Vielleicht?

00:33:13.682 --> 00:33:14.522
Naja, du kannst damit

00:33:14.522 --> 00:33:16.402
zumindest irgendwie relativ hart

00:33:16.402 --> 00:33:18.382
sicherstellen, dass bestimmte Regeln

00:33:18.382 --> 00:33:20.522
eingehalten werden. Machst du Precommit bei deinem Projekt?

00:33:20.522 --> 00:33:22.502
auch mit MyPy?

00:33:23.762 --> 00:33:23.962
Ja.

00:33:26.382 --> 00:33:27.602
Aber, ja.

00:33:27.842 --> 00:33:28.642
Mach ich auch, also ich mach

00:33:28.642 --> 00:33:31.122
Ruff und MyPy und Icehorde und Black

00:33:31.122 --> 00:33:33.222
und PyUpgrade und

00:33:33.222 --> 00:33:35.062
sowas. Ja, mach ich auch.

00:33:35.262 --> 00:33:37.162
Also bis auf Ruff, das benutze

00:33:37.162 --> 00:33:39.282
ich nicht, weil ehrlich gesagt,

00:33:39.362 --> 00:33:40.862
wenn man MyPy verwendet, ist es so langsam,

00:33:41.022 --> 00:33:42.462
dass alles an den Regalen ist.

00:33:44.242 --> 00:33:45.182
Aber catcht MyPy

00:33:45.182 --> 00:33:46.082
nicht nach dem ersten Durchlauf?

00:33:47.082 --> 00:33:49.042
Ja, mag sein. Ich weiß nicht, ich hab immer

00:33:49.042 --> 00:33:50.442
die Erfahrung, dass wenn ich mir denke,

00:33:50.522 --> 00:33:52.742
so, ich hab doch jetzt auf diesen Knopf gedrückt,

00:33:53.082 --> 00:33:54.802
doofes PyCharm, warum reagiert

00:33:54.802 --> 00:33:56.582
dieser Knopf, ist ausgegraut und irgendwas

00:33:56.582 --> 00:33:58.322
tut es und dann gucke ich hoch, so und sehe ich, ah,

00:33:58.422 --> 00:34:00.162
CPU-Auslastung ist hoch, dann denke ich mir so,

00:34:00.902 --> 00:34:02.642
PyCharm. Und dann denke ich mir,

00:34:03.022 --> 00:34:03.842
nein, MyPy.

00:34:05.362 --> 00:34:06.542
Und es dauert einfach lange

00:34:06.542 --> 00:34:08.542
und ja. Also MyPy muss man ja

00:34:08.542 --> 00:34:10.482
irgendwie, wenn man das konfiguriert, die ganzen Dependencies

00:34:10.482 --> 00:34:12.323
irgendwie mit angeben, das ist ja nicht fürchterlich alles.

00:34:13.343 --> 00:34:14.442
Ja, weil das halt

00:34:14.442 --> 00:34:16.202
in einem eigenen Virtual Env alles stattfindet.

00:34:16.242 --> 00:34:18.522
Ja, aber warum kann das das nicht selber

00:34:18.522 --> 00:34:20.482
raffen aus der PyProject-Hummel oder sowas

00:34:20.482 --> 00:34:22.282
wo man seine Dependencies hat oder wo auch immer die liegen.

00:34:23.302 --> 00:34:24.562
Tja, wo auch immer

00:34:24.562 --> 00:34:26.343
die liegen. Ja, da kann man doch sagen,

00:34:26.582 --> 00:34:28.502
deine Dependencies liegen hier. Guck mal nach,

00:34:28.582 --> 00:34:30.382
das Format kennst du bestimmt. Nimm sie

00:34:30.382 --> 00:34:31.362
und bau da was mit.

00:34:33.502 --> 00:34:34.682
Ja, vielleicht. Ich weiß es nicht.

00:34:34.782 --> 00:34:35.542
Aber es ist auf jeden Fall

00:34:35.542 --> 00:34:38.022
nicht so einfach. Aber C-Python benutzt es jetzt.

00:34:38.823 --> 00:34:40.323
Es erhöht die Wahrscheinlichkeit, dass es nicht

00:34:40.323 --> 00:34:41.022
weggeht. Das ist gut.

00:34:42.722 --> 00:34:44.343
Ja, also dass sich jemand findet, der das

00:34:44.343 --> 00:34:46.422
dann halt weiter maintaint. Was auch noch schön ist,

00:34:46.482 --> 00:34:47.762
ist, oh, das ist total super.

00:34:48.042 --> 00:34:49.843
Ich weiß nicht, das habe ich in jedem Projekt

00:34:49.843 --> 00:34:51.562
gehabt und jetzt ist es

00:34:51.562 --> 00:34:53.902
also, jetzt ist es halt quasi

00:34:53.902 --> 00:34:55.643
hoffentlich gelöst.

00:34:56.143 --> 00:34:57.782
Ich habe in jedem Projekt irgendwie eine

00:34:57.782 --> 00:34:59.662
kleine Funktion, die ich dann auch immer von Projekt zu Projekt

00:34:59.662 --> 00:35:01.643
kopiere, weil es ist einfach zu wenig,

00:35:02.182 --> 00:35:03.542
um daraus irgendwie ein eigenes

00:35:03.542 --> 00:35:05.782
Paket zu machen oder so, aber ich brauche es halt irgendwie

00:35:05.782 --> 00:35:07.582
tatsächlich, in jedem Projekt brauche ich halt irgendwie so ein Ding,

00:35:07.902 --> 00:35:09.762
dass mir, wenn

00:35:09.762 --> 00:35:11.643
so eine lange Liste oder

00:35:11.643 --> 00:35:13.582
irgendwie ein langes Iterable

00:35:13.582 --> 00:35:15.582
kommt, was mir das halt so in Batches

00:35:15.582 --> 00:35:17.662
zerlegt, wo ich dann mit den Batches irgendwas mache.

00:35:18.643 --> 00:35:19.042
Brauche ich immer.

00:35:19.042 --> 00:35:20.362
und das ist auch ein Schild.

00:35:22.362 --> 00:35:23.143
Nee, einfach

00:35:23.143 --> 00:35:25.562
in Stücke hacken, in Viererblöcke, in Achterblöcke,

00:35:25.702 --> 00:35:27.322
in Zwölferblöcke. Genau, weil du willst

00:35:27.322 --> 00:35:28.643
halt zum Beispiel irgendwie alle,

00:35:29.002 --> 00:35:31.182
du willst immer 100 Dinger gleichzeitig in die Datenbank

00:35:31.182 --> 00:35:33.342
oder immer in hunderter Blöcke in die Datenbank schreiben

00:35:33.342 --> 00:35:35.182
oder ausgeben

00:35:35.182 --> 00:35:37.382
oder sonst irgendwie was machen,

00:35:37.442 --> 00:35:39.182
aber du willst das halt nicht jedes Mal machen, sondern halt

00:35:39.182 --> 00:35:41.282
so. Genau, also ich brauche das irgendwie

00:35:41.282 --> 00:35:42.643
immer und

00:35:42.643 --> 00:35:45.082
bei mir heißt diese Funktion

00:35:45.082 --> 00:35:46.422
meist so chunked oder sowas

00:35:46.422 --> 00:35:48.762
und jetzt gibt es eine in

00:35:48.762 --> 00:35:51.762
in Intertools. Die heißt Batched und die macht genau das.

00:35:52.202 --> 00:35:54.322
Ist die neu? Die ist neu.

00:35:55.042 --> 00:35:56.982
Ich dachte, da gäbe es sowas ähnliches.

00:35:57.922 --> 00:36:00.682
Also man kann auch mit Zip

00:36:00.682 --> 00:36:02.682
oder mit Icelice bauen.

00:36:04.682 --> 00:36:06.902
Aber meine Batched ist neu.

00:36:07.462 --> 00:36:11.123
Ich habe irgendwie letztes Jahr beim Advent of Code

00:36:11.123 --> 00:36:12.362
Varianten irgendwie sowas.

00:36:14.143 --> 00:36:15.762
Jeder hat sowas schon mal geschrieben.

00:36:15.762 --> 00:36:18.202
Ja, also da ich das irgendwie immer brauche

00:36:18.202 --> 00:36:20.102
ist es gut, wenn das jetzt in der Standardbibliothek

00:36:20.102 --> 00:36:21.143
Das hast du jetzt reingebracht, Jochen

00:36:21.143 --> 00:36:21.342
Nein

00:36:21.342 --> 00:36:24.002
Aber

00:36:24.002 --> 00:36:27.322
irgendwie, ja, ganz in meinem Sinne

00:36:27.322 --> 00:36:29.123
Ja, das glaube ich

00:36:29.123 --> 00:36:31.462
Dann genau, ich habe es wie gesagt schon installiert

00:36:31.462 --> 00:36:32.822
und ich hatte auch so ein bisschen Probleme

00:36:32.822 --> 00:36:35.722
Also ich weiß nicht so ganz genau

00:36:35.722 --> 00:36:37.562
woran diese Probleme liegen, ist ja auch noch alles sehr frisch

00:36:37.562 --> 00:36:40.102
Ich habe sie bloß, ich stehe noch unter dem Eindruck

00:36:40.102 --> 00:36:41.482
sie erfahren zu haben

00:36:41.482 --> 00:36:43.422
So was wie zum Beispiel

00:36:43.422 --> 00:36:46.882
also bei Projekten, die ich dann auf 3.12 umgestellt habe

00:36:46.882 --> 00:36:49.302
das ging halt irgendwie nicht

00:36:49.302 --> 00:36:52.502
also irgendwie das Installieren von dem ganzen Virtual-Event funktioniert nicht, weil

00:36:52.502 --> 00:36:54.942
es sagt halt so, ich kann dieses Wheel nicht bauen

00:36:54.942 --> 00:36:57.602
von irgendeiner Abhängigkeit

00:36:57.602 --> 00:37:01.422
und dann habe ich was reingeguckt, warum kann ich das nicht bauen, ja weil irgendwie

00:37:02.262 --> 00:37:05.002
Dist-Utils vielleicht fehlen

00:37:05.002 --> 00:37:07.702
manchmal, weil Dist-Utils sind

00:37:07.702 --> 00:37:10.362
Disintegrated, aber wenn man Setup-Tools installiert

00:37:10.362 --> 00:37:12.762
dann kommen die alten Dist-Utils quasi mit und dann geht's wieder

00:37:12.762 --> 00:37:16.302
und

00:37:16.302 --> 00:37:19.342
genau, achso, und früher wurde das automatisch

00:37:19.342 --> 00:37:21.982
in VNF, wenn man per VNF

00:37:21.982 --> 00:37:25.282
irgendwie in Visual Nv erzeugt hatte, wurden die Setup-Tools direkt mit installiert

00:37:25.282 --> 00:37:28.082
und das passiert nicht mehr, also das ist auch nicht mehr drin

00:37:28.082 --> 00:37:31.362
also auf jeden Fall, da an der Stelle ist es halt bei mir irgendwie zuverlässig gebrochen

00:37:31.362 --> 00:37:34.602
und wo es auch gebrochen ist, das fand ich etwas

00:37:34.602 --> 00:37:37.162
überraschend und ich habe keine Ahnung, ob das irgendwie so beabsichtigt war

00:37:37.162 --> 00:37:40.143
ist es bei vielen Abhängigkeiten

00:37:40.143 --> 00:37:42.342
die halt nur noch eine PyProject

00:37:42.342 --> 00:37:43.722
Hummel mitbringen, aus der dann

00:37:43.722 --> 00:37:45.922
sozusagen steuert, wie den

00:37:45.922 --> 00:37:46.722
Wheel erzeugt wird

00:37:46.722 --> 00:37:50.002
das geht nur noch, wenn PyZMQ

00:37:50.002 --> 00:37:52.242
installiert ist, keine Ahnung warum

00:37:52.242 --> 00:37:54.582
Was ist denn PyZMQ?

00:37:55.182 --> 00:37:56.022
Irgendwas mit einer

00:37:56.022 --> 00:37:57.922
diese, irgendein

00:37:57.922 --> 00:37:59.662
Messaging Queue

00:37:59.662 --> 00:38:02.162
Hätte ich jetzt nicht mit Wheels

00:38:02.162 --> 00:38:04.062
in Verbindung gebracht. Ja, ich auch nicht, deswegen hat es mich

00:38:04.062 --> 00:38:06.123
gewundert und zwar auch in einer relativ neuen Version

00:38:06.123 --> 00:38:08.162
und wenn man das halt nicht installiert hat, also ich muss jetzt

00:38:08.162 --> 00:38:09.623
eine Reihe von Projekten das Ding als

00:38:09.623 --> 00:38:12.162
Core-Abhängigkeit mit hinzufügen,

00:38:12.522 --> 00:38:14.123
weil ansonsten konnte man

00:38:14.123 --> 00:38:16.002
irgendwie die ganzen Abhängigkeiten nicht mehr installieren.

00:38:16.742 --> 00:38:18.022
In 3.12, in 3.11 geht's noch.

00:38:18.302 --> 00:38:20.042
Also keine Ahnung, was da genau das Problem ist,

00:38:20.102 --> 00:38:20.722
aber naja.

00:38:22.382 --> 00:38:24.143
Vielleicht installiert das irgendwie eine Subdependency

00:38:24.143 --> 00:38:25.262
auf die irgendwie hin.

00:38:25.643 --> 00:38:27.982
Ja, genau

00:38:27.982 --> 00:38:29.782
weiß ich jetzt nicht, aber das ist halt etwas,

00:38:29.782 --> 00:38:32.042
wo ich gestolpert bin und wo ich auch gestolpert bin,

00:38:32.123 --> 00:38:33.623
aber das kann sein, dass das jetzt ein sehr spezifisches

00:38:33.623 --> 00:38:34.782
Mac-Problem ist, ist halt,

00:38:35.302 --> 00:38:37.582
auf dem M1 findet, wenn man

00:38:37.582 --> 00:38:39.643
Python kompiliert mit Homebrew

00:38:39.643 --> 00:38:40.643
das

00:38:40.643 --> 00:38:43.582
statt der aktuellen OpenSSL-Version

00:38:43.582 --> 00:38:45.442
die OpenSSL-Version 1.1

00:38:45.442 --> 00:38:46.222
wenn sie installiert ist

00:38:46.222 --> 00:38:48.362
und das geht dann schief, weil

00:38:48.362 --> 00:38:51.102
zu alt, wahrscheinlich ist das irgendein Fehler im

00:38:51.102 --> 00:38:53.143
Configure-Skript oder so

00:38:53.143 --> 00:38:54.762
und wenn man

00:38:54.762 --> 00:38:57.482
dann OpenSSL 1.1 entfernt

00:38:57.482 --> 00:38:59.682
und dann geht's

00:38:59.682 --> 00:38:59.862
ja

00:38:59.862 --> 00:39:02.302
ja

00:39:02.302 --> 00:39:04.022
das möchte man ja eigentlich

00:39:04.022 --> 00:39:07.222
ich dachte dann, wenn man sagt

00:39:07.222 --> 00:39:09.742
im Fernsmal, dann hat es mir gesagt, ganz viele Pakete,

00:39:10.242 --> 00:39:11.662
die darauf basieren, unter anderem sowas wie

00:39:11.662 --> 00:39:13.262
TMAX und so und

00:39:13.262 --> 00:39:15.522
diverse andere Geschichten,

00:39:15.802 --> 00:39:17.342
ImageMagick, LibHive,

00:39:17.802 --> 00:39:19.582
so Sachen, wo man sagt, das kann ich nicht deinstallieren.

00:39:20.962 --> 00:39:22.022
Da wiederum

00:39:22.022 --> 00:39:23.302
dependet zu viel anderes Zeugs drauf.

00:39:23.942 --> 00:39:25.643
Wenn man das alles deinstalliert, dann

00:39:25.643 --> 00:39:27.842
OpenSSL 1.1 entfernt und dann

00:39:27.842 --> 00:39:29.202
das nochmal installiert, dann

00:39:29.202 --> 00:39:32.202
linkt das halt gegen die richtige OpenSSL.

00:39:32.422 --> 00:39:33.902
Ja, gut. Also wahrscheinlich ist da auch

00:39:33.902 --> 00:39:35.342
wieder ein Fehler in irgendwelchen Configure-Struppen.

00:39:35.342 --> 00:39:36.922
Das ist doch ein Mac-Problem, oder?

00:39:36.982 --> 00:39:37.722
Kauft euch mal einen richtigen.

00:39:38.782 --> 00:39:40.222
Ja, kann schon sein.

00:39:41.623 --> 00:39:42.422
Genau, ja.

00:39:43.202 --> 00:39:45.042
Jetzt haben wir aber tatsächlich so ein bisschen News, also nur von

00:39:45.042 --> 00:39:46.522
Python 3.12 gemacht und ich glaube,

00:39:47.582 --> 00:39:48.242
wir müssen

00:39:48.242 --> 00:39:50.042
eine neue Folge

00:39:50.042 --> 00:39:52.582
aufmachen mit Python 3.12.

00:39:52.762 --> 00:39:54.362
Wir machen chaptermark.

00:39:55.222 --> 00:39:57.102
Also eigentlich wollten wir ja über

00:39:57.102 --> 00:39:59.062
Kubernetes reden und ich glaube, wir hatten jetzt so

00:39:59.062 --> 00:40:00.442
eine neue Markierung

00:40:00.442 --> 00:40:03.022
und haben die ganzen News jetzt, wenn ihr noch

00:40:03.022 --> 00:40:04.202
dran seid und Kubernetes benutzen wollt.

00:40:04.202 --> 00:40:05.442
oder übersprungen habt.

00:40:05.442 --> 00:40:06.902
Python 12 ist schon auch relevant.

00:40:07.542 --> 00:40:08.322
Ja, das stimmt natürlich.

00:40:08.862 --> 00:40:09.882
Die anderen News dann später.

00:40:11.502 --> 00:40:12.222
Haben wir noch welche?

00:40:12.962 --> 00:40:14.442
Nee, ich nicht.

00:40:15.562 --> 00:40:16.502
Sprechen wir jetzt über Kubernetes.

00:40:17.362 --> 00:40:17.802
Spannend.

00:40:18.882 --> 00:40:20.002
So ganz am Einstieg, was ist denn das?

00:40:21.902 --> 00:40:22.762
Das ist schwer zu sagen.

00:40:23.242 --> 00:40:25.402
Es ist schwer zu beschreiben, was Kubernetes eigentlich ist.

00:40:27.362 --> 00:40:29.562
In wenigen Worten zusammengefasst

00:40:29.562 --> 00:40:31.082
würde ich sagen, das ist eine verteilte

00:40:31.082 --> 00:40:33.643
Runtime für Docker-VMs.

00:40:34.202 --> 00:40:39.442
Also sowas, das irgendwie so ein paar Boote auf einem See beaufsichtigt.

00:40:41.702 --> 00:40:42.102
Nee.

00:40:44.162 --> 00:40:44.562
Doch.

00:40:45.002 --> 00:40:53.643
Also ich glaube, wenn man sich das so vorstellt, dann laufen halt so bestimmte Boote, also Pots, so Container halt.

00:40:54.482 --> 00:40:55.302
So Containerschiff sozusagen.

00:40:55.702 --> 00:40:55.842
Genau.

00:40:56.242 --> 00:40:57.382
Ja, oder ich weiß nicht, ob das ein Schiff ist.

00:40:57.442 --> 00:41:00.382
Vielleicht sind das einfach so kleine Nussschalen oder sowas auf so einem See rum.

00:41:01.182 --> 00:41:04.123
Und irgendwer guckt halt, dass die in der richtigen Reihenfolge da laufen.

00:41:04.202 --> 00:41:06.542
und dass man damit Dinge anstehen kann.

00:41:08.062 --> 00:41:09.482
Also das ist ein Bild, was ich nicht

00:41:09.482 --> 00:41:11.602
in den Kopf kriege, aber

00:41:11.602 --> 00:41:14.282
man kann es sicherlich so

00:41:14.282 --> 00:41:14.682
betrachten.

00:41:15.502 --> 00:41:17.782
Du hast ja auch schon mal gesagt, verteilte Runtime

00:41:17.782 --> 00:41:19.962
für, man könnte auch sagen, vielleicht ein Betriebssystem

00:41:19.962 --> 00:41:21.542
für eine Gruppe von Rechnern irgendwie.

00:41:22.123 --> 00:41:22.262
Ja.

00:41:22.262 --> 00:41:25.422
Die kann man dann wie ein Ding ansprechen,

00:41:25.742 --> 00:41:26.942
obwohl es halt viele Rechner sind.

00:41:27.222 --> 00:41:29.602
Ja, also das finde ich tatsächlich gar nicht so wichtig

00:41:29.602 --> 00:41:31.682
da dran, sondern das Wichtige da dran finde ich eigentlich,

00:41:31.822 --> 00:41:33.882
dass das weggeht von dem imperativen

00:41:33.882 --> 00:41:35.922
Modell, was man ja so bei den, also wenn man

00:41:35.922 --> 00:41:37.942
Ansible macht, dann sagst du, auf diesem

00:41:37.942 --> 00:41:40.062
Server soll jetzt das hier ausgeführt

00:41:40.062 --> 00:41:41.962
werden und auf diesem Server soll das hier ausgeführt werden.

00:41:42.623 --> 00:41:43.662
Das ist sehr imperativ,

00:41:43.862 --> 00:41:45.382
du gibst an, was passieren soll.

00:41:46.262 --> 00:41:47.702
Und Kubernetes geht

00:41:47.702 --> 00:41:49.402
hin zu so einem

00:41:49.402 --> 00:41:51.302
deklarativen Modell.

00:41:51.762 --> 00:41:53.802
Du sagst gar nicht mehr, auf dem Computer soll

00:41:53.802 --> 00:41:56.002
das passieren, sondern du sagst, es soll drei

00:41:56.002 --> 00:41:57.902
Instanzen von dieser VM

00:41:57.902 --> 00:41:59.902
geben. Also das ist wahrscheinlich auch noch so

00:41:59.902 --> 00:42:01.682
einer der Tracker, die Kubernetes am meisten irgendwie

00:42:01.682 --> 00:42:03.442
verwendet wird, dass du halt irgendwie so ein

00:42:03.442 --> 00:42:04.902
Load-Balancing machen kannst und halt

00:42:04.902 --> 00:42:07.362
Skalieren kannst,

00:42:07.582 --> 00:42:09.123
in horizontale Richtung, wenn du mehr

00:42:09.123 --> 00:42:10.222
Last kriegst oder sowas.

00:42:11.022 --> 00:42:12.422
Oder dass du vielleicht so Releases machen kannst.

00:42:12.962 --> 00:42:15.562
Das ist ein Aspekt davon,

00:42:15.802 --> 00:42:17.522
dass du so Skalierungsthemen

00:42:17.522 --> 00:42:19.302
hast, finde ich jetzt aber gar nicht tatsächlich so wichtig,

00:42:19.442 --> 00:42:21.262
sondern für mich ist eher wichtig, dass du so

00:42:21.262 --> 00:42:22.602
eine Abstraktion hast zwischen

00:42:22.602 --> 00:42:25.202
was ist das

00:42:25.202 --> 00:42:27.182
Substrat, also die

00:42:27.182 --> 00:42:29.262
Computer, die du hast und was ist

00:42:29.262 --> 00:42:31.362
die Workload, also die Sachen, die du ausführen

00:42:31.362 --> 00:42:32.822
möchtest. Und

00:42:32.822 --> 00:42:34.442
und so ein bisschen wie bei einer Datenbank.

00:42:34.562 --> 00:42:36.722
Bei einer Datenbank ist das Substrat die Festplatte

00:42:36.722 --> 00:42:39.602
und die Workloads sind die Daten, die du drin hast.

00:42:39.702 --> 00:42:42.102
Und ich will eigentlich gar nicht selber entscheiden müssen,

00:42:42.262 --> 00:42:44.722
welche Daten wo liegen und wie die aufgebaut sind.

00:42:45.482 --> 00:42:47.143
Und deshalb nehme ich eine SQL-Datenbank,

00:42:47.222 --> 00:42:48.662
weil da sage ich einfach nur, hier sind die Daten

00:42:48.662 --> 00:42:50.202
und die haben folgende Eigenschaften,

00:42:50.282 --> 00:42:51.442
sorgt dafür, dass die gut sind.

00:42:52.662 --> 00:42:54.202
Und bei Kubernetes ist es genauso.

00:42:54.422 --> 00:42:56.462
Da sage ich, ich habe hier meine Nodes,

00:42:56.922 --> 00:42:58.102
das sind die Computer, die ich habe,

00:42:58.862 --> 00:43:00.123
und nehme die mal.

00:43:00.123 --> 00:43:04.322
und dann komme ich von der anderen Seite und sage, hier ist meine Workload.

00:43:04.402 --> 00:43:08.362
Ich brauche jetzt zwei VMs von der Sorte und fünf von der Sorte und sieben von der Sorte

00:43:08.362 --> 00:43:11.842
und die müssen so und so miteinander kommunizieren können. Sorg mal dafür.

00:43:12.143 --> 00:43:16.502
Also zweimal eine Datenbank, fünfmal eine Anwendung. Genau, und die müssen folgende Ports offen haben

00:43:16.502 --> 00:43:20.382
und die müssen folgenden Speicherplatz haben und die müssen miteinander kommunizieren können und die müssen so

00:43:20.382 --> 00:43:23.482
und so exposed sein und sorg mal dafür, dass das passiert.

00:43:24.482 --> 00:43:26.702
Ja, da steckt man halt quasi so ein bisschen Lego zusammen.

00:43:26.702 --> 00:43:28.462
Jein

00:43:28.462 --> 00:43:31.342
Du steckst es nicht selber zusammen

00:43:31.342 --> 00:43:32.623
sondern du sagst hier

00:43:32.623 --> 00:43:34.862
so soll das Lego Modell am Ende aussehen

00:43:34.862 --> 00:43:35.922
Schreibst die Bauanleitung für Lego

00:43:35.922 --> 00:43:40.262
Und das ist das, was mich da eigentlich

00:43:40.262 --> 00:43:42.282
dran reizt

00:43:42.282 --> 00:43:44.282
dass du eben nicht mehr sagst, es soll etwas passieren

00:43:44.282 --> 00:43:46.123
sondern du sagst, es soll ein Zustand erreicht werden

00:43:46.123 --> 00:43:47.102
Ja

00:43:47.102 --> 00:43:50.242
Und das beschreibt auch so ein bisschen das System

00:43:50.242 --> 00:43:52.322
Das beschreibt so ein bisschen

00:43:52.322 --> 00:43:53.422
was Kubernetes überhaupt ist

00:43:53.422 --> 00:43:55.862
Das ist eine Engine, die dafür sorgt, dass

00:43:55.862 --> 00:43:58.002
ein Zustand von VMs

00:43:58.002 --> 00:43:59.082
erreicht wird

00:43:59.082 --> 00:44:01.322
mit den gegebenen Ressourcen.

00:44:05.062 --> 00:44:07.362
Und das ist was Sinnvolles, das ist was Nützliches.

00:44:07.942 --> 00:44:09.582
Das ist nicht dann nützlich, wenn du eine VM

00:44:09.582 --> 00:44:11.382
ausführst oder wenn du einen Rechner hast.

00:44:11.702 --> 00:44:13.782
Das ist dann nützlich, wenn du 100 Rechner hast

00:44:13.782 --> 00:44:15.162
und 1000 VMs ausführen musst.

00:44:15.862 --> 00:44:17.922
Weil dann, wenn du das manuell machen möchtest,

00:44:18.222 --> 00:44:19.262
das fängt alles an.

00:44:20.542 --> 00:44:21.602
Dann musst du

00:44:21.602 --> 00:44:23.402
irgendwelche Node-Gruppen machen und musst

00:44:23.402 --> 00:44:25.562
irgendwelche Verteilungsdinge

00:44:25.562 --> 00:44:27.382
machen und Affinitäten und Netzwerk

00:44:27.382 --> 00:44:29.002
was weiß ich.

00:44:29.482 --> 00:44:31.522
Mit Kubernetes sagst du halt einfach,

00:44:31.662 --> 00:44:33.362
das ist jetzt in Anführungsstrichen

00:44:33.362 --> 00:44:35.402
gesetzt, sagst du einfach, hier sind

00:44:35.402 --> 00:44:37.522
deine Nodes und dann kommst

00:44:37.522 --> 00:44:39.262
du von der anderen Seite an die AP ran und sagst,

00:44:39.322 --> 00:44:41.482
ich habe jetzt hier Workloads und zwar diese hier

00:44:41.482 --> 00:44:43.522
und diese hier und diese hier und diese hier und jetzt mach mal.

00:44:44.522 --> 00:44:45.482
Und idealerweise

00:44:45.482 --> 00:44:47.462
sorgt dann das System dafür, dass die

00:44:47.462 --> 00:44:49.402
Workloads, also die Images, die du laufen

00:44:49.402 --> 00:44:51.282
möchtest, auf diesen Knoten, die du hast,

00:44:51.342 --> 00:44:53.302
verteilt werden, sodass die

00:44:53.302 --> 00:44:55.222
alle ihre Anforderungen erfüllen und dass die

00:44:55.222 --> 00:44:57.442
Knoten trotzdem alle gut ausgelastet

00:44:57.442 --> 00:44:59.002
sind und gut verteilt sind und

00:44:59.002 --> 00:45:01.282
was weiß ich nicht, was man da alles noch einteilen

00:45:01.282 --> 00:45:01.482
kann.

00:45:03.502 --> 00:45:05.042
Aber im Endeffekt ist es,

00:45:05.482 --> 00:45:07.222
wenn man das, also aus

00:45:07.222 --> 00:45:09.302
Anwendersicht, aus Workload

00:45:09.302 --> 00:45:10.042
Betreiber Sicht,

00:45:11.022 --> 00:45:13.242
ist es schon was relativ simples.

00:45:13.962 --> 00:45:15.222
Du sagst halt, du beschreibst halt,

00:45:15.742 --> 00:45:16.123
wie deine

00:45:16.123 --> 00:45:18.902
Workloads ausschauen sollen,

00:45:19.182 --> 00:45:20.582
was du gerne am Laufen haben möchtest.

00:45:21.082 --> 00:45:21.782
Und auch wie viele.

00:45:23.042 --> 00:45:24.982
Also wenn du so ein System hast, wo du

00:45:24.982 --> 00:45:26.623
100 Nodes hast oder 1000 Nodes,

00:45:26.782 --> 00:45:29.002
dann ist es leicht zu sagen, ich brauche jetzt 100 von

00:45:29.002 --> 00:45:30.802
diesen Files oder 200 von diesen oder

00:45:30.802 --> 00:45:32.962
da ist jetzt gerade Last drauf, also mach die bitte

00:45:32.962 --> 00:45:33.882
hoch oder wieder runter.

00:45:36.562 --> 00:45:37.162
Das klingt

00:45:37.162 --> 00:45:39.202
erstmal sehr charmant,

00:45:39.302 --> 00:45:40.762
wenn man das einfach so, wenn man sagen kann, okay,

00:45:40.842 --> 00:45:43.062
ich abstrahiere von den konkreten

00:45:43.062 --> 00:45:44.662
Maschinen irgendwie, da können unten

00:45:44.662 --> 00:45:46.462
Leute immer neue

00:45:46.462 --> 00:45:48.942
Maschinen und Racks

00:45:48.942 --> 00:45:50.962
stecken und mein Cluster

00:45:50.962 --> 00:45:51.822
wird halt größer.

00:45:53.742 --> 00:45:54.562
Genau, und

00:45:54.562 --> 00:45:56.282
Ich muss das alles gar nicht wissen.

00:45:57.282 --> 00:45:58.522
Und auch von den Operationen.

00:45:58.582 --> 00:46:00.522
Du gehst weg von den Operationen.

00:46:00.682 --> 00:46:02.643
Also eine Node braucht tatsächlich nichts anderes als

00:46:02.643 --> 00:46:04.702
ein installiertes System mit einem

00:46:04.702 --> 00:46:06.562
Kubernetes. Das weiß ich nicht genau, wie

00:46:06.562 --> 00:46:08.202
das eingerichtet wird, weil

00:46:08.202 --> 00:46:10.682
diese Operations-Seite

00:46:10.682 --> 00:46:12.082
habe ich noch nicht selber erlebt. Wir

00:46:12.082 --> 00:46:13.962
benutzen überall nur Managed

00:46:13.962 --> 00:46:15.623
Kubernetes.

00:46:17.202 --> 00:46:20.582
Das Lustige ist ja,

00:46:20.882 --> 00:46:22.582
das Argument gibt es ganz oft,

00:46:22.762 --> 00:46:24.282
Google macht das, also machen wir das auch.

00:46:24.562 --> 00:46:26.502
und das

00:46:26.502 --> 00:46:28.682
stimmt aber so nicht, weil Google hat halt

00:46:28.682 --> 00:46:30.643
bestimmte Anforderungen und andere

00:46:30.643 --> 00:46:32.802
Firmen oder Projekte oder Teams haben halt andere

00:46:32.802 --> 00:46:34.602
Anforderungen. Wir haben ja bestimmt zwei Applikationen,

00:46:34.643 --> 00:46:36.143
dafür brauchen wir ein Kubernetes-Cluster. Ja, genau.

00:46:36.342 --> 00:46:38.742
Wir haben hier zwei Server, dann mach doch mal

00:46:38.742 --> 00:46:40.582
ein Kubernetes-Cluster auf. Wir wollen da

00:46:40.582 --> 00:46:42.722
vier VMs laufen lassen, mach doch mal ein Kubernetes-Cluster auf.

00:46:42.802 --> 00:46:44.842
Nee, das brauchst du nicht.

00:46:45.402 --> 00:46:46.462
Dafür brauchst du einen Server

00:46:46.462 --> 00:46:48.623
und da kann jeder Docker-VMs starten

00:46:48.623 --> 00:46:49.663
oder andere VMs.

00:46:50.742 --> 00:46:52.183
Das brauchst du dann, wenn du

00:46:52.183 --> 00:46:54.502
1000 Rechner hast und 30 Teams

00:46:54.502 --> 00:46:56.322
die 5000 VMs

00:46:56.322 --> 00:46:58.482
da drauf betreiben wollen, weil dann willst du da nicht mehr

00:46:58.482 --> 00:47:00.382
händisch reingehen und sagen, ihr kriegt

00:47:00.382 --> 00:47:02.442
jetzt diese Server und ihr kriegt diese Server

00:47:02.442 --> 00:47:04.242
und ihr kriegt diese Server, sondern dann sagst du einfach

00:47:04.242 --> 00:47:06.422
hier ist euer Quota und hier ist euer

00:47:06.422 --> 00:47:07.482
Quota und hier ist euer Quota

00:47:07.482 --> 00:47:10.242
und ihr dürft da drauf starten,

00:47:10.382 --> 00:47:12.123
was ihr wollt, solange ihr in eurem Quota bleibt.

00:47:12.462 --> 00:47:14.422
Kurz, was ist ein Quota, also ein Anteil

00:47:14.422 --> 00:47:16.422
von Rechenkapazität? Genau, also du kannst

00:47:16.422 --> 00:47:18.362
Accounts,

00:47:18.442 --> 00:47:20.362
also es ist natürlich alles viel komplizierter, als es

00:47:20.362 --> 00:47:22.442
sich anhört, weil genau wie bei Datenbanken,

00:47:22.442 --> 00:47:24.382
eine Datei auf die Festplatte speichern ist easy,

00:47:24.502 --> 00:47:26.102
eine Datenbank betreiben, ist nicht so easy.

00:47:26.902 --> 00:47:28.582
Und das kommt auch mit der

00:47:28.582 --> 00:47:30.802
Scale dazu. Wenn du so eine gewisse

00:47:30.802 --> 00:47:32.542
Größe erreicht hast, wenn du halt mehr

00:47:32.542 --> 00:47:34.562
als fünf Teams hast oder mehr als zehn Teams hast,

00:47:34.643 --> 00:47:36.442
dann musst du da irgendwie Autorisierung drin haben.

00:47:37.202 --> 00:47:38.502
Und dann musst du auch dafür sorgen, dass

00:47:38.502 --> 00:47:40.623
sich die Teams nicht gegenseitig zu sehr auf die Füße

00:47:40.623 --> 00:47:42.163
treten können. Oder abschießen können.

00:47:42.482 --> 00:47:44.422
Genau. Das heißt, du musst verhindern,

00:47:44.522 --> 00:47:46.342
dass ein Team sagt, so, wir brauchen jetzt 100.000

00:47:46.342 --> 00:47:48.382
VMs mit jeweils einem Gigabyte Speicher und

00:47:48.382 --> 00:47:50.402
dann ist dein ganzer Knoten nur noch von

00:47:50.402 --> 00:47:52.282
diesen kaputten Sachen. Ich hatte

00:47:52.282 --> 00:47:54.282
so ein bisschen, so meiner Erfahrung nach,

00:47:54.502 --> 00:47:56.382
Ich hatte nicht so das Gefühl, dass mir das wirklich

00:47:56.382 --> 00:47:58.242
dafür sorgt, dass mir niemand auf die Füße tritt,

00:47:58.522 --> 00:48:00.442
sondern eher so, dass ich die auf mir

00:48:00.442 --> 00:48:02.623
also ich hätte mir immer noch die Schmerzen, als ob mir jemand auf die Füße

00:48:02.623 --> 00:48:03.382
getreten hätte,

00:48:04.402 --> 00:48:06.822
aber ich kann die nicht mehr sehen, die das waren.

00:48:06.942 --> 00:48:08.542
Ja genau, weil du eine andere Absatzgruppe

00:48:08.542 --> 00:48:10.942
Es gibt eine Administrationsgruppe,

00:48:11.002 --> 00:48:12.822
die dann trotzdem alles da hat, die Geisterkundin

00:48:12.822 --> 00:48:14.422
hat, die das Putzen und Zaubern hat.

00:48:14.422 --> 00:48:16.822
Aber normalerweise, also um zu dem Normalzustand

00:48:16.822 --> 00:48:18.462
zurückzukehren, ja normalerweise hast du halt dann da

00:48:18.462 --> 00:48:20.502
deine Teams drauf, die irgendwelche Accounts auf diesem

00:48:20.502 --> 00:48:22.663
Kubernetes-System haben und diese Accounts haben ein Quota,

00:48:22.663 --> 00:48:24.623
das heißt, die dürfen eine bestimmte Menge

00:48:24.623 --> 00:48:26.663
CPU anfordern und eine bestimmte Menge Rahmen

00:48:26.663 --> 00:48:28.322
anfordern und

00:48:28.322 --> 00:48:29.123
mehr

00:48:29.123 --> 00:48:32.742
starten, mehr VMs starten kannst du halt

00:48:32.742 --> 00:48:34.582
nicht, du kannst dem System sagen, starte bitte

00:48:34.582 --> 00:48:36.663
mehr VMs und dann sagt das System, nee, ich kann

00:48:36.663 --> 00:48:38.322
nicht mehr VMs starten, weil dein Quota

00:48:38.322 --> 00:48:39.102
aufgebraucht ist

00:48:39.102 --> 00:48:42.302
und ja, auch das kann zu Schmerzen

00:48:42.302 --> 00:48:44.442
führen, dass du halt sagst, okay, wir brauchen

00:48:44.442 --> 00:48:46.482
aber mehr und das geht nicht mehr, nur

00:48:46.482 --> 00:48:48.342
das Problem hattest du vorher auch,

00:48:48.442 --> 00:48:50.462
wenn du hier die drei Server hattest und

00:48:50.462 --> 00:48:52.482
die sind halt voll, dann kannst du

00:48:52.482 --> 00:48:54.322
Ich sehe höchstens noch selber dran.

00:48:54.402 --> 00:48:56.862
Es gibt schon Probleme, die man kriegt,

00:48:56.982 --> 00:48:58.582
die ich so sonst nicht

00:48:58.582 --> 00:49:00.183
kenne, also die ich halt ohne

00:49:00.183 --> 00:49:01.702
Kubernetes nicht habe,

00:49:02.663 --> 00:49:04.602
weil diese Abstraktion

00:49:04.602 --> 00:49:05.982
halt doch irgendwie leaky ist.

00:49:06.202 --> 00:49:07.242
Ja, natürlich.

00:49:07.882 --> 00:49:09.722
Also zum Beispiel etwas, was halt irgendwie

00:49:09.722 --> 00:49:12.402
keine Ahnung, vielleicht gibt es auch

00:49:12.402 --> 00:49:14.542
eine tolle Lösung für, aber was ich

00:49:14.542 --> 00:49:16.302
halt schon irgendwie ätzend fand, ist halt,

00:49:16.742 --> 00:49:18.342
dass du eben, wenn du jetzt

00:49:18.342 --> 00:49:20.562
viel Zeug betreibst, dann kannst

00:49:20.562 --> 00:49:22.442
du ja nicht irgendwie allen

00:49:22.442 --> 00:49:24.402
Sachen irgendwie ganz viel Ressourcen geben, weil

00:49:24.402 --> 00:49:25.663
sonst sagt der Cluster dir so,

00:49:26.202 --> 00:49:28.782
du hast ja viel Schuttland, das geht nicht.

00:49:29.163 --> 00:49:30.342
Das heißt, du überlegst dir dann so, okay,

00:49:31.262 --> 00:49:32.342
naja, also eigentlich

00:49:32.342 --> 00:49:34.422
braucht der, das braucht ja gar nicht so viel.

00:49:35.422 --> 00:49:36.422
Dann setzt man

00:49:36.422 --> 00:49:37.222
die Ressourcen darunter.

00:49:37.842 --> 00:49:40.623
Zu wenig Ressourcen, dann war dein Quota zu niedrig.

00:49:41.163 --> 00:49:42.402
Ja, und

00:49:42.402 --> 00:49:44.262
dann passieren aber im Betrieb so Dinge,

00:49:44.382 --> 00:49:46.322
wo man dann halt mal kurzfristig ein bisschen mehr

00:49:46.322 --> 00:49:48.183
braucht. Und dann, zum Beispiel

00:49:48.183 --> 00:49:50.143
Hauptspeicher, und dann killt es das einfach weg.

00:49:51.143 --> 00:49:51.902
Das ist halt,

00:49:52.442 --> 00:49:54.663
und das ist dann tatsächlich

00:49:54.663 --> 00:49:56.582
das Interessante, was da passiert,

00:49:57.242 --> 00:49:58.143
weil das System

00:49:58.143 --> 00:50:00.462
kompliziert genug ist, findest du

00:50:00.462 --> 00:50:02.482
auf einmal die Ecken und Kanten. Also zum Beispiel,

00:50:03.282 --> 00:50:04.422
dass du zwei

00:50:04.422 --> 00:50:06.322
Limits hast. Du hast ein Requests-Limit

00:50:06.322 --> 00:50:08.342
und ein Limit-Limit.

00:50:08.782 --> 00:50:10.462
Du forderst, du brauchst mindestens

00:50:10.462 --> 00:50:11.502
so viel RAM,

00:50:12.442 --> 00:50:13.862
aber auf keinen Fall mehr als so viel.

00:50:14.602 --> 00:50:15.782
Und manchmal brauchst du es halt aber doch.

00:50:16.663 --> 00:50:18.222
Und diese Worte bedeuten auch nicht,

00:50:18.342 --> 00:50:20.102
dass was sie bedeuten, sondern

00:50:20.102 --> 00:50:21.902
dieses Requests, wenn du zwischen dem

00:50:21.902 --> 00:50:23.822
Requests und dem Limit bist, dann heißt

00:50:23.822 --> 00:50:25.802
es, dass Kubernetes

00:50:25.802 --> 00:50:27.742
diese vor allem abschalten darf.

00:50:28.842 --> 00:50:29.663
Weil du ja

00:50:29.663 --> 00:50:31.762
über dem Request drüber bist. Du bist über

00:50:31.762 --> 00:50:33.062
das, was du angefordert hast.

00:50:34.382 --> 00:50:35.762
Diese Worte bedeuten halt

00:50:35.762 --> 00:50:37.762
nur, wenn du übers Request gehst,

00:50:37.882 --> 00:50:38.602
darf Kubernetes

00:50:38.602 --> 00:50:41.222
deine VfA abschalten.

00:50:41.562 --> 00:50:43.742
Beim Limit muss es die VfA abschalten.

00:50:44.542 --> 00:50:45.802
Das heißt, es darf halt dann, wenn andere

00:50:45.802 --> 00:50:47.643
anfragen, ob sie neue Ressourcen haben können

00:50:47.643 --> 00:50:48.822
und es keine freien mehr findet.

00:50:50.282 --> 00:50:51.762
Ja, beziehungsweise, wenn du über

00:50:51.762 --> 00:50:54.462
Es gibt zwei wichtige

00:50:54.462 --> 00:50:56.123
Kenngrößen, CPU und

00:50:56.123 --> 00:50:57.042
Memory.

00:50:58.342 --> 00:51:00.242
Für jede der beiden kannst du angeben,

00:51:00.382 --> 00:51:02.422
wie viel du requestest, also wie viel

00:51:02.422 --> 00:51:03.322
du anforderst

00:51:03.322 --> 00:51:06.562
und wie viel du maximal benutzen

00:51:06.562 --> 00:51:08.482
wirst, also wie viel du am Limit hast.

00:51:09.882 --> 00:51:10.062
Und

00:51:10.062 --> 00:51:12.922
das Scheduling, also die Zuweisung,

00:51:13.802 --> 00:51:14.202
welche

00:51:14.202 --> 00:51:16.582
Arbeitslasten auf welchem System,

00:51:17.042 --> 00:51:18.222
auf welchem Knoten laufen,

00:51:18.222 --> 00:51:19.602
die gehen über das Request.

00:51:19.602 --> 00:51:21.222
PyTest. Das heißt,

00:51:21.542 --> 00:51:23.422
wenn du sagst, meine Anwendung verbraucht

00:51:23.422 --> 00:51:24.702
500 MB Hauptspeicher

00:51:24.702 --> 00:51:27.302
und maximal

00:51:27.302 --> 00:51:29.422
1000, dann kannst du auf einen Rechner gesetzt

00:51:29.422 --> 00:51:31.282
werden, auf einen Knoten gesetzt werden, wo 500

00:51:31.282 --> 00:51:32.302
MB frei sind.

00:51:33.163 --> 00:51:35.302
Weil dann ist deine Anforderung erfüllt. Du hast gesagt,

00:51:35.382 --> 00:51:37.143
ich brauche 500 MB Hauptspeicher.

00:51:38.082 --> 00:51:39.302
Wenn du drüber gehst, dann

00:51:39.302 --> 00:51:41.442
kann es halt sein, dass es nicht geht.

00:51:41.562 --> 00:51:43.302
Du kannst nicht mehr Speicher reservieren oder es

00:51:43.302 --> 00:51:45.302
kann sein, dass du abgeschossen wirst,

00:51:45.683 --> 00:51:47.442
weil jemand anderes auch gerade

00:51:47.442 --> 00:51:49.482
500 MB angefordert

00:51:49.482 --> 00:51:51.282
hat und du halt aber mehr als deine

00:51:51.282 --> 00:51:53.342
500 MB verbraucht hast, weil du zwischen Request

00:51:53.342 --> 00:51:53.902
und Limit bist.

00:51:54.742 --> 00:51:57.482
Die pragmatische Lösung, die sich bei uns

00:51:57.482 --> 00:51:59.342
in diesem Projekt ergeben hat, ist, dass du

00:51:59.342 --> 00:52:01.163
Request gleich Limit setzt. Das heißt,

00:52:01.482 --> 00:52:03.322
du forderst einfach so viel an, wie du denkst,

00:52:03.342 --> 00:52:05.282
dass du maximal brauchst und

00:52:05.282 --> 00:52:07.022
Spitzen darfst du dann halt nicht haben.

00:52:07.123 --> 00:52:09.202
Beziehungsweise Spitzen hast du dadurch abgedeckt, dass

00:52:09.202 --> 00:52:11.302
das... Das kenne ich auch, aber das Problem

00:52:11.302 --> 00:52:11.842
ist halt...

00:52:11.842 --> 00:52:15.342
Und ist auch

00:52:15.342 --> 00:52:17.102
nicht schlau. Eigentlich willst du ja, dass sich diese

00:52:17.102 --> 00:52:17.982
Wellen so ergänzen.

00:52:17.982 --> 00:52:20.802
Und wenn ich jetzt einfach auf dem normalen Rechner

00:52:20.802 --> 00:52:22.562
sozusagen deploye und ich habe jetzt halt irgendwie

00:52:22.562 --> 00:52:24.762
sagen wir mal 10 Projekte, die alle unterschiedliche

00:52:24.762 --> 00:52:26.722
Last haben und so und ansonsten brauchen die halt

00:52:26.722 --> 00:52:28.183
mal so einen Gigabyte Hauptspeicher oder

00:52:28.183 --> 00:52:30.382
zwei für irgendwas

00:52:30.382 --> 00:52:31.962
weil sie halt irgendwie zum Beispiel

00:52:31.962 --> 00:52:34.702
ein Fall, an den ich mich gut erinnere, wo das halt

00:52:34.702 --> 00:52:36.782
echt Kopfschmerzen breitet hat

00:52:36.782 --> 00:52:38.822
manchmal startest du

00:52:38.822 --> 00:52:40.482
und du kannst es auch nicht, hast es nicht unter Kontrolle

00:52:40.482 --> 00:52:42.462
Bei Python hast du es halt oft unter Kontrolle

00:52:42.462 --> 00:52:44.522
da kann man schon irgendwas machen

00:52:44.522 --> 00:52:46.422
aber zum Beispiel für manche Sachen

00:52:46.422 --> 00:52:48.982
wenn man dann so ein externes Binary startet

00:52:48.982 --> 00:52:50.102
wie zum Beispiel FFmpeg

00:52:50.102 --> 00:52:52.342
FFmpeg, du kannst nicht

00:52:52.342 --> 00:52:53.342
Der isst einfach alles aus

00:52:53.342 --> 00:52:56.202
Naja, also es kann auf jeden Fall passieren

00:52:56.202 --> 00:52:58.522
Du hast halt, also normalerweise passiert

00:52:58.522 --> 00:53:00.462
nichts, aber du hast halt FFmpeg mit

00:53:00.462 --> 00:53:02.002
irgendwie so, weiß ich nicht

00:53:02.002 --> 00:53:04.402
200 Zeichen irgendwie komischen Optionen

00:53:04.402 --> 00:53:05.882
hintendran und meistens passiert gar nichts

00:53:05.882 --> 00:53:08.163
In komischen Fällen manchmal braucht das dann halt

00:53:08.163 --> 00:53:09.602
2 GB Hauptsprecher

00:53:09.602 --> 00:53:11.802
Ja, aber solltest du das dann nicht abschießen in dem Fall?

00:53:12.522 --> 00:53:12.742
Nein

00:53:12.742 --> 00:53:16.163
Und es ist halt dummerweise sinnvoll

00:53:16.163 --> 00:53:17.502
und das braucht es halt wirklich.

00:53:18.042 --> 00:53:19.602
Und jetzt kann man natürlich dann irgendwie, keine Ahnung,

00:53:19.683 --> 00:53:21.902
MPEG irgendwie sich angucken und schauen, wo ist denn

00:53:21.902 --> 00:53:23.022
das Problem. Aber

00:53:23.022 --> 00:53:26.222
wie geht man denn mit so einem Fall um?

00:53:26.542 --> 00:53:28.183
Wenn ich einfach auf eine normale Maschine

00:53:28.183 --> 00:53:29.042
deploye, dann das

00:53:29.042 --> 00:53:31.623
gleicht sich alles aus, das ist kein Problem.

00:53:31.902 --> 00:53:33.663
Wenn dann mal ein Prozess mit ein bisschen mehr Hauptspeicher

00:53:33.663 --> 00:53:35.822
läuft, ist nicht schlimm.

00:53:36.082 --> 00:53:37.902
Das dauert auch nicht so lange, dann ist es wieder gut.

00:53:38.442 --> 00:53:40.042
Weil Kubernetes hat mir das echt

00:53:40.042 --> 00:53:41.222
das macht dann echt Kopfschmerzen.

00:53:41.742 --> 00:53:43.982
Es geht so weit, dass dann Leute dann hingehen und neue Maschinen kaufen,

00:53:44.163 --> 00:53:45.683
weil man das irgendwie nicht in den Griff kriegt sonst.

00:53:46.163 --> 00:53:48.042
und das ist halt schon irgendwie so, wenn ich denke so,

00:53:48.102 --> 00:53:50.262
ja, genau, aber dann denke ich mir so, also irgendwie

00:53:50.262 --> 00:53:51.882
kann das doch nicht die Lösung sein, oder? Also,

00:53:52.082 --> 00:53:54.322
ja, weil man braucht

00:53:54.322 --> 00:53:55.962
es ja tatsächlich eigentlich nicht, also

00:53:55.962 --> 00:53:57.762
es ist ja nicht so, dass man, also,

00:53:57.942 --> 00:53:59.702
ja. Ja, man muss ja eigene

00:53:59.702 --> 00:54:01.802
Pods starten mit

00:54:01.802 --> 00:54:04.342
FFmpeg drin. Ja, ja, genau, das kann man

00:54:04.342 --> 00:54:06.342
natürlich dann auch machen. Du kannst dann halt

00:54:06.342 --> 00:54:07.762
irgendwie so dir spezielle,

00:54:08.222 --> 00:54:09.882
oder das Problem hast du dann natürlich auch, wenn du

00:54:09.882 --> 00:54:11.882
Spezialhardware hast, sowas wie GPUs oder sowas.

00:54:11.962 --> 00:54:13.643
Ja, gut, klar, die musst du natürlich. Aber dann

00:54:13.643 --> 00:54:15.902
geht auch so ein bisschen der ganze Vorteil irgendwie so ein bisschen

00:54:15.902 --> 00:54:17.882
wieder verloren, weil dann musste ich ja doch

00:54:17.882 --> 00:54:18.822
wieder um die ganze...

00:54:18.822 --> 00:54:21.822
Die Annahme ist halt, dass du

00:54:21.822 --> 00:54:22.683
viele

00:54:22.683 --> 00:54:25.163
gleichpräige

00:54:25.163 --> 00:54:27.163
Arbeitlasten hast,

00:54:28.123 --> 00:54:29.782
wo es nur darum geht, die irgendwie

00:54:29.782 --> 00:54:31.782
so mehr oder weniger gleichmäßig zu verteilen.

00:54:32.342 --> 00:54:33.602
Und dann ist das großartig.

00:54:33.922 --> 00:54:34.442
Ja, gut.

00:54:35.242 --> 00:54:38.002
Aber das Interessante,

00:54:38.143 --> 00:54:39.922
was ich als ich Kubernetes gelernt habe,

00:54:40.322 --> 00:54:41.643
war, dass sich da

00:54:41.643 --> 00:54:43.643
die Denke so ein bisschen verändert. Genauso wie

00:54:43.643 --> 00:54:45.502
wenn man SQL lernt. Beim SQL lernen, wenn du

00:54:45.502 --> 00:54:47.683
anfängst SQL zu lernen, dann ist die

00:54:47.683 --> 00:54:49.742
Frage oft so, wie sorge ich

00:54:49.742 --> 00:54:52.123
denn dafür, dass er das aus der Tabelle holt?

00:54:52.123 --> 00:54:53.623
Ja. Und die Antwort ist

00:54:53.623 --> 00:54:55.663
gar nicht. Du sorgst da gar nicht dafür, sondern

00:54:55.663 --> 00:54:57.762
du sagst nur, ich brauche was aus der Tabelle

00:54:57.762 --> 00:54:59.202
und dann sorgt er schon selber dafür,

00:54:59.742 --> 00:55:01.022
dass es aus der Tabelle kommt. Ja.

00:55:01.362 --> 00:55:03.362
Und so Situationen

00:55:03.362 --> 00:55:04.982
gibt es bei Kubernetes

00:55:04.982 --> 00:55:07.562
auch ganz viele, weil du eben zu diesem deklarativen

00:55:07.562 --> 00:55:09.482
Modell hingehst. Zum Beispiel

00:55:09.482 --> 00:55:11.582
eine der schönsten ersten Lernerfahrungen war,

00:55:11.862 --> 00:55:13.442
wie sorge ich denn dafür, dass diese

00:55:13.442 --> 00:55:14.602
Maschine neu gestartet wird?

00:55:14.602 --> 00:55:16.542
und die Antwort ist gar nicht.

00:55:17.542 --> 00:55:18.302
Du löscht die einfach.

00:55:18.502 --> 00:55:20.623
Du machst einfach die, die jetzt gerade existiert,

00:55:20.702 --> 00:55:22.482
weg und Kubernetes bemerkt,

00:55:22.582 --> 00:55:24.663
oh Moment, da fehlt ja eine und startet eine neue.

00:55:25.842 --> 00:55:26.022
Und

00:55:26.022 --> 00:55:28.663
das ist am Anfang

00:55:28.663 --> 00:55:30.002
manchmal etwas unintuitiv,

00:55:30.082 --> 00:55:32.802
auf diese Operationen zu kommen,

00:55:32.862 --> 00:55:34.242
wenn du irgendwas erreichen möchtest,

00:55:34.683 --> 00:55:35.902
wie du das deklarativ machst.

00:55:36.822 --> 00:55:38.822
Diese Maschine soll jetzt bitte entfernt werden.

00:55:39.882 --> 00:55:40.282
Ja.

00:55:42.082 --> 00:55:43.183
Das sind auch so ein paar Probleme.

00:55:43.183 --> 00:55:43.462
also

00:55:43.462 --> 00:55:46.522
was das halt auch kann, ist irgendwie so Rolling Release

00:55:46.522 --> 00:55:48.222
dann halt irgendwie, das hat mehrere Versionen

00:55:48.222 --> 00:55:50.782
von einer Software, die dann live ist, weil die halt

00:55:50.782 --> 00:55:52.502
eine wundervolle Sache oder Blue-Green-Apple

00:55:52.502 --> 00:55:55.022
ja genau, also das ist keinerlei

00:55:55.022 --> 00:55:56.643
Verzug mehr zwischen neuer Version

00:55:56.643 --> 00:55:58.802
also gefühlt und 10%

00:55:58.802 --> 00:56:00.782
laufen noch auf der alten Version oder schon auf der neuen

00:56:00.782 --> 00:56:02.742
und dann falten die, wenn die Prozesse

00:56:02.742 --> 00:56:04.262
irgendwie fertig sind, alte Maschinen ab und

00:56:04.262 --> 00:56:05.402
neue halt irgendwie rein

00:56:05.402 --> 00:56:07.683
aber das ist auch ein bisschen

00:56:07.683 --> 00:56:10.842
Ja, aber ist doch eine großartige

00:56:10.842 --> 00:56:12.602
Sache. Es gab einen super

00:56:12.602 --> 00:56:14.623
Artikel zu Blue-Green-Deployments mit Django.

00:56:15.382 --> 00:56:16.643
Da hast du halt...

00:56:17.902 --> 00:56:18.022
Genau.

00:56:19.183 --> 00:56:19.862
Wird in den

00:56:19.862 --> 00:56:20.982
Shownotes erscheinen.

00:56:22.482 --> 00:56:24.442
Wo du halt ganz arg darauf achten musst, dass du

00:56:24.442 --> 00:56:26.683
deine Datenbank-Migration so machst,

00:56:26.683 --> 00:56:28.422
dass du quasi bei jedem Übergang

00:56:28.422 --> 00:56:30.482
beide Versionen betreiben kannst.

00:56:30.602 --> 00:56:32.502
Das ist ja genau das Problem. Was machst du in Migration?

00:56:32.962 --> 00:56:33.722
In Django?

00:56:34.163 --> 00:56:36.643
Und dann fällt die Tabelle auf einmal neu?

00:56:36.982 --> 00:56:38.882
Es steht dir ja frei, das anzuhalten

00:56:38.882 --> 00:56:40.522
und dann die Migration zu machen und dann

00:56:40.522 --> 00:56:42.302
neu zu starten. Das darfst du ja machen.

00:56:42.602 --> 00:56:45.202
Neu ist ja kein Problem

00:56:45.202 --> 00:56:46.482
Problem ist halt eher, wenn

00:56:46.482 --> 00:56:47.663
eins wegfällt oder so

00:56:47.663 --> 00:56:50.522
Aber wie gesagt, dieser Mechanismus kannst du ja immer noch machen

00:56:50.522 --> 00:56:51.942
Du kannst ja alle anhalten und

00:56:51.942 --> 00:56:54.022
Mutation machen und alle neu starten

00:56:54.022 --> 00:56:55.262
Das ist ja kein Ding

00:56:55.262 --> 00:56:58.202
Nur, was du jetzt auch noch machen kannst

00:56:58.202 --> 00:57:00.702
ist eben diese, ja zum Beispiel ein Rolling Release

00:57:00.702 --> 00:57:02.342
oder ein Blue-Green Deployment

00:57:02.342 --> 00:57:04.222
Rolling Release

00:57:04.222 --> 00:57:06.643
Ich glaube, wir müssen das erklären, ich wusste diese Worte auch nicht

00:57:06.643 --> 00:57:08.802
Rolling Release heißt

00:57:08.802 --> 00:57:10.502
dass wenn du zum Beispiel

00:57:10.502 --> 00:57:12.502
5 VMs in einer bestimmten Version

00:57:12.502 --> 00:57:14.683
laufen hast, dass du das Kubernetes-System

00:57:14.683 --> 00:57:16.502
anweisen kannst, ich möchte jetzt auf

00:57:16.502 --> 00:57:18.042
eine andere Version, auf eine höhere Version

00:57:18.042 --> 00:57:19.442
und zwar Rolling.

00:57:20.462 --> 00:57:22.183
Das heißt, er wird die

00:57:22.183 --> 00:57:24.163
VMs nach und nach abschalten,

00:57:24.422 --> 00:57:25.342
nach und nach die neuen zu verändern.

00:57:25.342 --> 00:57:28.602
Das heißt, eine stoppen, dann eine neue

00:57:28.602 --> 00:57:30.302
hochfahren. Und erst wenn die neue hochgefahren ist,

00:57:30.302 --> 00:57:31.762
wird die nächste alte gestoppt.

00:57:33.302 --> 00:57:34.663
Das heißt, du hast keine Situation,

00:57:35.062 --> 00:57:36.362
wo du keine

00:57:36.362 --> 00:57:37.402
Erreichbarkeit hast.

00:57:37.402 --> 00:57:39.102
Ja genau, aber das ist so ein Problem.

00:57:39.102 --> 00:57:41.602
wenn die PostgreSQL da ein Gipf draufkriegt mit einem neuen Feld.

00:57:41.962 --> 00:57:44.322
Das muss halt deine Software dann können.

00:57:44.822 --> 00:57:46.183
Und das ist nicht immer so einfach.

00:57:47.242 --> 00:57:47.683
Ja, also

00:57:47.683 --> 00:57:50.202
das kannst du auch mit Ensemble machen.

00:57:50.322 --> 00:57:51.502
Dieses Problem hast du natürlich sowieso.

00:57:52.623 --> 00:57:54.143
Mit Ensemble ist es natürlich schwierig,

00:57:54.242 --> 00:57:55.562
weil es ist schon eine komplizierte Operation.

00:57:56.643 --> 00:57:58.242
Ja, aber gut,

00:57:58.342 --> 00:58:00.562
ich weiß nicht, ob man das halt so einfach automatisieren kann,

00:58:00.683 --> 00:58:02.422
weil es gibt halt sehr unterschiedliche

00:58:02.422 --> 00:58:04.302
Arten von, also es gibt halt die Dinge, wo man halt

00:58:04.302 --> 00:58:06.322
ein Rolling Update machen kann, wo das halt

00:58:06.322 --> 00:58:08.242
gar kein Problem ist, wo man sozusagen

00:58:08.242 --> 00:58:10.942
nur irgendwie die alten rausnimmt

00:58:10.942 --> 00:58:12.542
und die neuen im Loadbalancer mit hinzufügt.

00:58:12.942 --> 00:58:14.882
Aber dann gibt es halt auch Dinge, wo das halt nicht geht,

00:58:15.022 --> 00:58:16.782
sondern wo du alle auf einmal umschalten musst.

00:58:17.322 --> 00:58:19.242
Weil das sonst

00:58:19.242 --> 00:58:20.562
deine Datenbank kaputt macht zum Beispiel.

00:58:21.702 --> 00:58:22.322
Ja, oder du musst halt

00:58:22.322 --> 00:58:24.842
zu deiner alten Datenbank eine neue Datenbank

00:58:24.842 --> 00:58:26.462
gleichzeitig hochfahren und dann erst

00:58:26.462 --> 00:58:28.562
die neuen Daten halt einmal spiegeln,

00:58:28.623 --> 00:58:30.942
dann rüberfahren und dann irgendwie aufsammeln,

00:58:31.022 --> 00:58:33.123
das, was in der Zwischenzeit noch in die alten Datenbank geschrieben wird

00:58:33.123 --> 00:58:35.282
und dann auch so eine Liste machen,

00:58:35.362 --> 00:58:36.862
die du dann in die neuen Datenbank migrierst

00:58:36.862 --> 00:58:38.462
und dann das aber dann rollen.

00:58:38.542 --> 00:58:40.202
Das heißt, während du migrierst immer länger,

00:58:40.602 --> 00:58:42.582
bis du dann irgendwann abschalten kannst, dann kannst du nur noch die Neuen

00:58:42.582 --> 00:58:44.542
das danach fliegen und dann hast du vielleicht nicht mehr ganz

00:58:44.542 --> 00:58:45.882
klar Daten, weil welche kamen jetzt zuerst.

00:58:46.802 --> 00:58:48.502
Also es eignet sich sicherlich nicht

00:58:48.502 --> 00:58:50.082
für jede Situation, sagen wir es mal so.

00:58:50.902 --> 00:58:52.342
Aber wenn du zum Beispiel irgendwo nur

00:58:52.342 --> 00:58:54.143
Konfigurationsänderungen machst oder nur

00:58:54.143 --> 00:58:56.623
keine Ahnung, irgendwelche harmlosen

00:58:56.623 --> 00:58:58.442
Features live schaltest, dann ist das schon irgendwie

00:58:58.442 --> 00:59:00.022
schön, weil du dann halt Zero Downtime hast.

00:59:00.163 --> 00:59:01.422
Ja, aber das hast du doch sonst auch.

00:59:03.222 --> 00:59:04.562
Wenn ich bei mir

00:59:04.562 --> 00:59:06.582
irgendwie ein neues Deployment

00:59:06.582 --> 00:59:18.505
und PyTest zu Downtiming Ich habe eine Sekunde Downtime in der Mitte Du machst den einen alten System dann f du das neue System hoch und dann zeigst du aber den Loadbalancer einfach

00:59:18.505 --> 00:59:20.505
aufs neue System. Das ist Blue-Green-Deployment, was ihr da

00:59:20.505 --> 00:59:22.245
beschreibt. Das heißt, du hast ein System

00:59:22.245 --> 00:59:24.045
im Background laufen, was Blue ist,

00:59:24.365 --> 00:59:26.025
also was den Status Blue hat

00:59:26.025 --> 00:59:28.325
und sagst dem Loadbalancer, bitte allen

00:59:28.325 --> 00:59:30.405
Traffic auf Blue und dann startest du ein System,

00:59:30.545 --> 00:59:32.305
ein komplettes, was Green hat als Status

00:59:32.305 --> 00:59:34.305
und wenn das fertig da ist, sagst du dem

00:59:34.305 --> 00:59:35.665
Loadbalancer, jetzt umschalten auf Green.

00:59:35.665 --> 00:59:38.325
Diese Technik, die ihr beschreibt, heißt Blue-Green-Deployment

00:59:38.325 --> 00:59:39.345
Also ich weiß es gar nicht ganz

00:59:39.345 --> 00:59:41.365
Die ist relativ leicht mit Kubernetes umzusetzen

00:59:41.365 --> 00:59:44.325
Die eigentliche

00:59:44.325 --> 00:59:45.885
Frage, die sich für mich stellt, ist

00:59:45.885 --> 00:59:48.605
Braucht man überhaupt Zero-Downtime-Deployments?

00:59:48.725 --> 00:59:49.905
Ja, das ist auch so eine Frage

00:59:49.905 --> 00:59:51.985
Die machen ja ungeheuer viel Arbeit und die machen

00:59:51.985 --> 00:59:53.725
ungeheuer viele Probleme, also dieser

00:59:53.725 --> 00:59:56.005
Django-Artikel über Blue-Green-Deployments

00:59:56.005 --> 00:59:57.965
ist wunderbar zu lesen und ist auch

00:59:57.965 --> 00:59:59.925
sehr schön, aber es sind halt einfach

00:59:59.925 --> 01:00:01.925
acht Arbeitsschritte mehr, als wenn du sagst

01:00:01.925 --> 01:00:03.865
Okay, wir halten kurz an, dann sind wir für eine Minute

01:00:03.865 --> 01:00:05.385
down, dann machen wir die Migrationen

01:00:05.385 --> 01:00:07.005
und dann starten wir es einfach wieder.

01:00:07.105 --> 01:00:08.525
Das gibt da noch ganz viele schöne Reihen.

01:00:08.825 --> 01:00:11.125
Wenn du sowas nämlich in so einer CICD-Chain drin hast,

01:00:11.205 --> 01:00:13.345
wo man, um zu testen, ob das überhaupt funktioniert,

01:00:13.465 --> 01:00:15.345
noch einen Staging-Prozess zwischendurch hat,

01:00:15.685 --> 01:00:17.165
der dann aber sowas macht, wie erstmal

01:00:17.165 --> 01:00:19.245
die alte Version auschecken und dann darauf

01:00:19.245 --> 01:00:21.265
ein Update fahren, damit halt klar ist,

01:00:21.285 --> 01:00:23.245
dass das Update geht und er nicht direkt neue Sachen

01:00:23.245 --> 01:00:24.725
baut, dann kann ja sein, dass

01:00:24.725 --> 01:00:27.165
neue Versionen bauen anders ist, als auf ein altes

01:00:27.165 --> 01:00:29.145
System Update setzen. Und dann musst du halt erst alte

01:00:29.145 --> 01:00:31.185
bauen und dann das neue. Und wenn man dann sowas macht,

01:00:31.345 --> 01:00:33.245
wie neue Environments oder Sequels dazu

01:00:33.245 --> 01:00:35.305
und die es beim Anfang noch nicht gibt,

01:00:35.385 --> 01:00:37.105
beim Ende dann schon, dann muss halt quasi,

01:00:37.625 --> 01:00:39.505
oder halt welche Entfernteil, größeres Problem,

01:00:39.665 --> 01:00:41.065
dann sind die halt auf einmal weg beim

01:00:41.065 --> 01:00:43.405
das sind ein paar Sachen, die so problematisch sind, weil

01:00:43.405 --> 01:00:45.485
dann musst du zwei Releases machen, um so

01:00:45.485 --> 01:00:46.585
Sachen rauszukriegen zum Beispiel.

01:00:47.205 --> 01:00:49.265
Ja, das ist diese Krankheit. Google macht das,

01:00:49.425 --> 01:00:50.245
also machen wir das auch.

01:00:50.905 --> 01:00:52.545
Also die allermeisten

01:00:52.545 --> 01:00:55.425
Projekte und Teams und Unternehmen

01:00:55.425 --> 01:00:57.345
können doch eine Minute

01:00:57.345 --> 01:00:59.045
Downtime hinnehmen. Das ist doch egal.

01:01:00.085 --> 01:01:01.665
Ja, aber wenn du Service-Level-

01:01:01.665 --> 01:01:02.405
Agreements hast, wo

01:01:02.405 --> 01:01:06.305
5.9, das hat so 99,999%

01:01:06.305 --> 01:01:07.445
Das sind ja alle haben.

01:01:07.445 --> 01:01:08.045
Das sind ja nur 9.5.

01:01:09.625 --> 01:01:11.065
Das ist mein Service Level Agreement.

01:01:11.185 --> 01:01:15.385
Ich karatiere mindestens 55,555% Abteil.

01:01:16.085 --> 01:01:17.625
Hauptsache viele fahren.

01:01:17.625 --> 01:01:19.185
Hauptsache viele sind auf dem T-Shirt.

01:01:19.625 --> 01:01:20.665
Ne, das ist eben die Sache.

01:01:20.845 --> 01:01:21.765
Das ist diese Krankheit.

01:01:22.605 --> 01:01:23.865
Man kann das machen,

01:01:24.705 --> 01:01:26.145
aber muss man das machen.

01:01:26.725 --> 01:01:29.225
Und klar, vom Engineering her

01:01:29.225 --> 01:01:29.865
ist das schon cool.

01:01:29.865 --> 01:01:32.745
hast du eine Woche Arbeit reingesteckt

01:01:32.745 --> 01:01:33.785
um ein Update zu machen

01:01:33.785 --> 01:01:36.705
und dafür hast du 100%

01:01:36.705 --> 01:01:38.545
Availability, großartig

01:01:38.545 --> 01:01:41.145
ja, es gibt Fälle

01:01:41.145 --> 01:01:41.685
wo das so ist

01:01:41.685 --> 01:01:43.585
ja klar, es gibt Fälle in denen das so ist

01:01:43.585 --> 01:01:45.965
aber ich meine, wie viele

01:01:45.965 --> 01:01:47.445
Engineering Stunden

01:01:47.445 --> 01:01:50.045
sind eine Minute Downtime wert

01:01:50.045 --> 01:01:52.225
oder zwei Minuten oder fünf Minuten oder zehn Minuten

01:01:52.225 --> 01:01:53.565
ja

01:01:53.565 --> 01:01:56.245
das ist eine Frage

01:01:56.245 --> 01:01:58.405
die man sich stellen muss und bloß weil man das kann

01:01:58.405 --> 01:02:00.225
und weil die Techniker das machen wollen,

01:02:00.805 --> 01:02:01.925
ich zähle mich da ja auch dazu,

01:02:02.065 --> 01:02:04.125
ich möchte auch gerne so ein cooles Deployment-System bauen,

01:02:04.205 --> 01:02:06.605
wo du Zero-Downtime hast und 100%

01:02:06.605 --> 01:02:08.505
Uptime und dann geht es aber leider doch nicht,

01:02:08.605 --> 01:02:09.625
weil du irgendwo Websocket verbindest.

01:02:10.345 --> 01:02:12.145
Ich hatte ja auch mit dem operativen Teil von

01:02:12.145 --> 01:02:14.345
so größeren Systemen schon irgendwie intensiveren

01:02:14.345 --> 01:02:16.445
Kontakt irgendwie vor langer

01:02:16.445 --> 01:02:17.925
Zeit. Damals.

01:02:18.125 --> 01:02:19.945
Damals. Als wir noch jung waren.

01:02:20.525 --> 01:02:22.345
Aber sozusagen

01:02:22.345 --> 01:02:24.165
mein Bauchgefühl aus der Zeit würde

01:02:24.165 --> 01:02:26.105
sagen, es gibt so viele

01:02:26.105 --> 01:02:28.185
unterschiedliche Arten von Dingen, die man tun muss,

01:02:28.185 --> 01:02:30.905
Das kann man unmöglich irgendwie abstrahieren.

01:02:31.445 --> 01:02:33.965
Und das ist halt von der Hardware auch abhängig, die da drunter liegt.

01:02:34.085 --> 01:02:35.785
Das ist halt, dass man das weg abstrahieren kann.

01:02:35.805 --> 01:02:37.285
Aber Jochen, Google macht das doch auch.

01:02:37.705 --> 01:02:41.485
Wenn du ein Managed Kubernetes Cluster kaufst, dann kannst du einfach zwei Pods hochschreiben

01:02:41.485 --> 01:02:44.725
und da kannst du so einen Schieberegler in deinem Webinterface einstellen.

01:02:44.825 --> 01:02:47.885
Der sagt dann sieben Pods von 8 bis 10 Uhr.

01:02:49.425 --> 01:02:54.145
Oder Load Balance auch, wenn die CPU-Auslastung über 50% steigt.

01:02:54.325 --> 01:02:55.565
Dann skalierst du hoch.

01:02:55.565 --> 01:02:58.065
Okay, es kann sein, dass man das heutzutage alles nicht mehr braucht.

01:02:58.185 --> 01:03:28.165
und PyTest.

01:03:28.185 --> 01:03:58.165
und das ist ein Testframework für Python

01:04:28.185 --> 01:04:31.345
über so ein Fake-Interface

01:04:31.345 --> 01:04:33.765
raus und das landet dann halt alles irgendwie,

01:04:33.865 --> 01:04:35.865
das kann halt dann deutlich dicker sein, das ist dann kein Problem.

01:04:37.005 --> 01:04:39.225
Und sowas geht dann ja also schon nicht mehr.

01:04:39.465 --> 01:04:43.425
Das kannst du gar nicht mehr machen, weil du musst ja dann alle gleich behandeln können.

01:04:43.425 --> 01:04:45.365
Und der Loadbalancing geht ja auch nur so,

01:04:45.685 --> 01:04:48.905
es kann ja nicht so sein, dass beim Loadbalancing, oder ich denke mal,

01:04:49.005 --> 01:04:51.765
so in Kubernetes kann es ja nicht sein, dass die Pakete über den einen Weg rein

01:04:51.765 --> 01:04:55.065
und auch über den anderen Weg rausgehen oder sowas, was man ja an der Stelle gerne halt...

01:04:55.065 --> 01:04:56.705
in Westen. Das wirst du ja vielleicht über

01:04:56.705 --> 01:04:58.905
Netzwerk-Policies schon irgendwie hinkriegen.

01:04:59.065 --> 01:05:01.125
Ich weiß es nicht, aber mir scheint das so, als ob

01:05:01.125 --> 01:05:02.965
das irgendwie da implizit

01:05:02.965 --> 01:05:05.185
mit drin wäre, dass das irgendwie alles schon egal

01:05:05.185 --> 01:05:07.245
ist, wenn das über das Netzwerk geht und das ist kein Problem.

01:05:07.445 --> 01:05:08.685
Ja, Netzwerk hast du ja immer genug.

01:05:08.805 --> 01:05:10.785
Ja, genau. Das glaube ich nicht.

01:05:11.885 --> 01:05:12.765
Also, dass das keinen

01:05:12.765 --> 01:05:13.465
Unterschied macht.

01:05:14.805 --> 01:05:16.865
Ja, also, okay. Ich weiß es nicht.

01:05:17.025 --> 01:05:18.785
Aber ich habe so den Verdacht, dass das dann doch

01:05:18.785 --> 01:05:19.585
vielleicht irgendwann liegt.

01:05:21.385 --> 01:05:23.065
Ja, aber...

01:05:23.065 --> 01:05:24.925
Eine sehr schöne Sache ist halt,

01:05:24.925 --> 01:05:54.905
und PyTest.

01:05:54.925 --> 01:05:56.205
Klar, bezahle ich da zu viel.

01:05:56.485 --> 01:05:57.725
Das ist bei Amazon immer so, ja.

01:05:58.145 --> 01:06:00.485
Ja, ja, aber gut, okay, verstehe ich auch, dass das Sinn machen kann.

01:06:00.805 --> 01:06:02.805
Aber es macht mir einfach eine Sache weg.

01:06:02.985 --> 01:06:06.885
Wenn mein Business halt viel Geld umsetzt und ich dafür gar nicht so viel IT brauche

01:06:06.885 --> 01:06:10.105
und ich damit keine Schmerzen haben möchte und sage, okay.

01:06:10.145 --> 01:06:10.705
Ja, oder auch eine Trennung.

01:06:10.785 --> 01:06:11.425
Du hast eine Trennung.

01:06:11.485 --> 01:06:14.385
Du kannst eine Trennung machen zwischen den Leuten, die die Computer betreiben,

01:06:15.005 --> 01:06:18.785
die sich um so unangenehme Sachen wie Strom und Wärme kümmern müssen

01:06:18.785 --> 01:06:20.665
und wer da dran darf.

01:06:20.665 --> 01:06:22.985
und du hast die Entwickler,

01:06:23.125 --> 01:06:24.565
die eigentlich das als abstrakte

01:06:24.565 --> 01:06:26.605
Computergrößen sehen und wie viele

01:06:26.605 --> 01:06:28.285
Milli-CPUs du da brauchst.

01:06:29.885 --> 01:06:30.445
Das ist schon

01:06:30.445 --> 01:06:32.185
für, aber wieder

01:06:32.185 --> 01:06:34.425
für ein Unternehmen einer

01:06:34.425 --> 01:06:35.205
gewissen Größe.

01:06:36.305 --> 01:06:38.565
Und ich möchte nicht zu Hause auf meinem

01:06:38.565 --> 01:06:40.605
Raspberry Pi oder auf meinen Raspberry

01:06:40.605 --> 01:06:42.745
Pis einen Kubernetes-Cluster betreiben müssen,

01:06:42.885 --> 01:06:44.305
bloß weil ich da ein Power-VM starten möchte.

01:06:44.625 --> 01:06:45.505
Das mache ich halt händisch.

01:06:46.205 --> 01:06:48.345
Oder mit irgendwelchen Tools, die dann

01:06:48.345 --> 01:06:50.525
dafür geeignet sind.

01:06:50.665 --> 01:06:52.145
und das ist eigentlich so, das

01:06:52.145 --> 01:06:53.945
finde ich so das Problem an

01:06:53.945 --> 01:06:56.505
diesen ganzen Enterprise

01:06:56.505 --> 01:06:58.485
Sachen. Lohnt sich

01:06:58.485 --> 01:06:59.405
das überhaupt für

01:06:59.405 --> 01:07:02.145
diese Situation?

01:07:02.685 --> 01:07:04.205
Und es gibt viele Situationen, in denen

01:07:04.205 --> 01:07:06.365
Kubernetes eingesetzt wird, in denen es sich einfach nicht lohnt,

01:07:06.505 --> 01:07:08.285
weil die Last

01:07:08.285 --> 01:07:11.905
nicht groß genug ist, weil die

01:07:11.905 --> 01:07:14.025
Inhomogenität nicht groß genug ist.

01:07:14.205 --> 01:07:16.365
Wenn du tausend identische Maschinen starten

01:07:16.365 --> 01:07:18.005
möchtest, gibt es einfache Wege.

01:07:19.565 --> 01:07:20.205
Wenn du

01:07:20.205 --> 01:07:21.005
Wenn du

01:07:21.005 --> 01:07:24.285
50 Maschinen starten möchtest,

01:07:24.365 --> 01:07:25.445
gibt es einfachere Wege.

01:07:25.885 --> 01:07:27.945
Du musst kurz so einen kleinen Elevator machen.

01:07:28.045 --> 01:07:28.465
Warum? Was?

01:07:29.245 --> 01:07:31.825
Es gibt ja ganz viele Workloads, die sehr

01:07:31.825 --> 01:07:33.865
computer-heavy sind. Ich war mal in so einem

01:07:33.865 --> 01:07:35.645
Projekt in Norwegen, wo wir einfach eine

01:07:35.645 --> 01:07:36.765
Berechnung durchführen mussten

01:07:36.765 --> 01:07:39.845
und wir hatten nicht viel Zeit und wir

01:07:39.845 --> 01:07:41.245
hatten aber terabyteweise Daten.

01:07:42.305 --> 01:07:43.885
Eine Möglichkeit, die du hast, ist halt

01:07:43.885 --> 01:07:44.625
das zu verteilen.

01:07:45.665 --> 01:07:47.345
Du sagst, okay, wir nehmen halt mehr Computer,

01:07:47.345 --> 01:07:48.645
weil du mehr CPUs brauchst.

01:07:48.645 --> 01:07:55.985
und diese Arbeitslast oder diese Dinge, die wir berechnet haben, die waren auf jedem Computer gleich.

01:07:58.065 --> 01:08:03.985
Das heißt, das ist dann sehr einfach in Ansible zu gehen oder in Salt oder in Terraform oder in sonst was

01:08:03.985 --> 01:08:07.365
und halt nicht nur eine Hostadresse zu hinterlegen, sondern 100.

01:08:08.445 --> 01:08:13.345
Und dann auf diesen 100 Hosts oder 1000 IP-Adressen zu hinterlegen und zu sagen,

01:08:13.445 --> 01:08:17.065
starte bitte auf allen diesen Rechnern, diesem Inventory diese Workload.

01:08:18.645 --> 01:08:20.585
und da brauche ich keinen Kubernetes dafür.

01:08:21.145 --> 01:08:22.485
Ja, aber du musst ja trotzdem irgendwie das

01:08:22.485 --> 01:08:24.325
I-O-Commando, wo kommt das alles her?

01:08:24.365 --> 01:08:26.245
Ja, gut, klar, das musst du dann immer noch merken, aber

01:08:26.245 --> 01:08:28.065
das ist dann bei allen gleich.

01:08:28.585 --> 01:08:29.745
Und das ist das, worauf ich raus möchte.

01:08:29.865 --> 01:08:32.625
Wenn du tausend identische Dinge hast,

01:08:33.085 --> 01:08:33.825
dann reicht ein Ansible.

01:08:34.145 --> 01:08:36.405
Und das ist auch nicht mal

01:08:36.405 --> 01:08:38.465
kompliziert, weil die alle gleich konfiguriert sind.

01:08:41.645 --> 01:08:42.245
Kubernetes hat

01:08:42.245 --> 01:08:44.325
einen bestimmten Anwendungsfall und der ist,

01:08:44.405 --> 01:08:45.705
du hast viele verschiedene

01:08:46.545 --> 01:08:47.885
Workloads, die aber alle

01:08:47.885 --> 01:08:49.765
Compute ähnlich sind

01:08:49.765 --> 01:08:51.785
auf vielen verschiedenen

01:08:51.785 --> 01:08:53.865
Maschinen, die aber

01:08:53.865 --> 01:08:55.805
Compute ähnlich sind. Das muss man nochmal genau

01:08:55.805 --> 01:08:57.985
erklären. Also vielleicht so ein reales

01:08:57.985 --> 01:08:59.245
Beispiel. Und am besten,

01:09:00.245 --> 01:09:01.925
also auch das würde ich denken, geht eigentlich

01:09:01.925 --> 01:09:03.865
noch sehr gut, es sei denn, du hast jetzt noch

01:09:03.865 --> 01:09:06.125
die Software

01:09:06.125 --> 01:09:07.945
läuft auf sehr unterschiedlichen

01:09:07.945 --> 01:09:09.865
Betriebssystemen, in sehr unterschiedlichen

01:09:09.865 --> 01:09:11.525
Alterungsverordnung

01:09:11.525 --> 01:09:13.805
Verwesungsstufen

01:09:13.805 --> 01:09:16.005
auf verschiedenen Teams, weil dann

01:09:16.005 --> 01:09:17.425
so, dass du halt nicht sagen kannst,

01:09:17.425 --> 01:09:19.365
und ich deploye das jetzt auf eine homogene

01:09:19.365 --> 01:09:21.505
Geschichte, wo man sagen muss, das geht nur mit

01:09:21.505 --> 01:09:23.465
Docker, das geht nicht anders, weil das halt einfach zu

01:09:23.465 --> 01:09:24.125
unterschiedlich ist.

01:09:24.725 --> 01:09:26.685
Das machen Entwickler sowieso, Jochen.

01:09:27.145 --> 01:09:28.745
Das machen ja nach Docker, nur du willst das.

01:09:29.805 --> 01:09:31.605
Na gut. Ja, aber dann verstehe ich das.

01:09:31.705 --> 01:09:33.465
Also wenn man sagt, okay, ich mache hier auf der einen Seite

01:09:33.465 --> 01:09:35.385
irgendwie, keine Ahnung, ein Headless

01:09:35.385 --> 01:09:37.485
Qt in einer sehr alten Version,

01:09:37.605 --> 01:09:39.165
weil ich das für irgendwas sehr Spezielles brauche

01:09:39.165 --> 01:09:41.185
und hier habe ich jetzt irgendwie, keine Ahnung,

01:09:41.425 --> 01:09:42.525
ein aktuelles

01:09:42.525 --> 01:09:45.265
NixOS und da habe ich hier ein Debian und das muss ich aber

01:09:45.265 --> 01:09:46.225
alles gleich auf dem gleichen Klasse.

01:09:46.225 --> 01:09:49.105
Java 17 und 18 und 21 und 8 und 2

01:09:49.105 --> 01:09:50.525
Ja und für alte Sachen

01:09:50.525 --> 01:09:52.185
sind alle Programmierer schon gestorben,

01:09:52.285 --> 01:09:53.605
das muss ich aber weiter betreiben.

01:09:53.885 --> 01:09:55.105
Deine Kobo Docker VM

01:09:55.105 --> 01:09:56.545
Ja, okay, okay, dann

01:09:56.545 --> 01:09:59.125
eine AS400 Docker VM

01:09:59.125 --> 01:10:04.165
Ja, also das

01:10:04.165 --> 01:10:06.265
Also nochmal, anwenden Sie bitte noch einmal,

01:10:06.365 --> 01:10:08.725
du wolltest das nochmal erläutern, also was denn da

01:10:08.725 --> 01:10:10.485
Also wir haben jetzt verschiedene Sachen, die

01:10:10.485 --> 01:10:12.885
ganz heterogen sind

01:10:12.885 --> 01:10:13.685
Okay, aber

01:10:13.685 --> 01:10:16.125
Also zum Beispiel Google, ja? Google betreibt

01:10:16.125 --> 01:10:18.145
35.000 verschiedene Services

01:10:18.145 --> 01:10:20.385
auf ihren 8 Millionen Computern

01:10:20.385 --> 01:10:20.945
oder was weiß ich.

01:10:21.645 --> 01:10:24.045
Und dann ist das großartig, weil dann kannst du einfach sagen,

01:10:24.185 --> 01:10:25.965
okay, es gibt jetzt eine Mannschaft,

01:10:26.085 --> 01:10:28.005
eine große Mannschaft, die sorgt dafür, dass diese

01:10:28.005 --> 01:10:30.265
Computer laufen und ans Netzwerk angeschlossen

01:10:30.265 --> 01:10:31.825
sind und dass die in den

01:10:31.825 --> 01:10:33.445
Kubernetes-Cluster eingeordnet sind

01:10:33.445 --> 01:10:36.045
und das ist deren Spezialität

01:10:36.045 --> 01:10:38.205
und auf der anderen Seite hast du eine Mannschaft von Softwareentwicklern,

01:10:38.705 --> 01:10:39.885
die halt auf diesem

01:10:39.885 --> 01:10:42.125
einen großen Kubernetes-Computer

01:10:42.125 --> 01:10:44.905
Workloads starten dürfen, also die

01:10:44.905 --> 01:10:46.905
VRM starten dürfen. Und zwar egal, welche

01:10:46.905 --> 01:10:49.225
sie wollen. Und klar, wenn

01:10:49.225 --> 01:10:51.025
du 5000 verschiedenen Teams

01:10:51.025 --> 01:10:52.985
hast, die eben diese 5000

01:10:52.985 --> 01:10:54.945
verschiedenen Sachen starten, dann

01:10:54.945 --> 01:10:57.145
ist das großartig. Dann willst du nicht mehr jedem einzelnen

01:10:57.145 --> 01:10:58.885
Entwickler sagen müssen, okay, du kriegst jetzt

01:10:58.885 --> 01:11:00.865
die VM und du kriegst die VM und du kriegst die VM.

01:11:01.225 --> 01:11:02.085
Sondern du willst aber sagen,

01:11:02.245 --> 01:11:04.885
wir machen einfach einen großen

01:11:04.885 --> 01:11:06.005
Computer-Mischmasch

01:11:06.005 --> 01:11:08.805
und einen großen Kubernetes-Cluster und

01:11:08.805 --> 01:11:10.925
hier ist dein Quota und innerhalb des Quotas darfst du

01:11:10.925 --> 01:11:12.465
machen, was du willst. Bist du verantwortlich.

01:11:13.025 --> 01:11:14.965
Das heißt, du hast einfach diese Trennung zwischen

01:11:14.965 --> 01:11:16.865
den Computern, die das betreiben und der

01:11:16.865 --> 01:11:18.565
Software, die da laufen soll.

01:11:19.305 --> 01:11:21.025
Und wo die dann läuft, das kannst du meistens

01:11:21.025 --> 01:11:22.905
gar nicht sagen. Du kannst meistens gar nicht sagen,

01:11:23.645 --> 01:11:24.645
ich habe jetzt

01:11:24.645 --> 01:11:26.805
hier einen Pod, also eine

01:11:26.805 --> 01:11:29.085
Docker-VM, die hier laufen

01:11:29.085 --> 01:11:30.985
soll. Du kannst vielleicht sagen, die soll in einer bestimmten Zone

01:11:30.985 --> 01:11:32.745
laufen oder in einem bestimmten Cluster oder in einem

01:11:32.745 --> 01:11:34.865
bestimmten Datacenter, aber manchmal nicht

01:11:34.865 --> 01:11:37.105
mehr das. Wenn du einen Kubernetes-

01:11:37.105 --> 01:11:38.865
Cluster hast, der über viele Datacenter verteilt

01:11:38.865 --> 01:11:39.125
ist,

01:11:39.125 --> 01:11:47.025
Dann kannst du höchstens noch sagen, du willst, dass die möglichst weit voneinander entfernt sind, dann willst du, dass sie möglichst nah aneinander dran sind, aber wo die dann laufen

01:11:47.025 --> 01:11:52.465
Ich hätte gern mehr Netzwerk-Latenz, das ist doch immer gut

01:11:52.465 --> 01:12:00.605
Größere Zahlen, mehr Netzwerk-Latenz hinter meinen Microservices, das muss doch Spaß machen

01:12:00.605 --> 01:12:03.925
Ganz ehrlich, für mich als Anwendungsentwickler ist es auch völlig egal, wo das läuft

01:12:03.925 --> 01:12:05.785
solange das halt läuft

01:12:05.785 --> 01:12:07.645
Jaja, na

01:12:07.645 --> 01:12:10.065
also ich weiß nicht

01:12:10.065 --> 01:12:11.225
ich hab halt doch so

01:12:11.225 --> 01:12:13.385
von Erfahrung her würde ich

01:12:13.385 --> 01:12:16.245
also ich, es gibt halt

01:12:16.245 --> 01:12:18.325
es gibt halt Infrastruktur, die gut

01:12:18.325 --> 01:12:20.165
funktioniert, aber es gibt halt Infrastruktur

01:12:20.165 --> 01:12:22.145
die nicht gut funktioniert und das hat

01:12:22.145 --> 01:12:24.385
meine Erfahrung hat weniger

01:12:24.385 --> 01:12:26.085
damit zu tun, ob man jetzt Kubernetes verwendet

01:12:26.085 --> 01:12:28.345
oder keine Ahnung, irgendwas anderes

01:12:28.345 --> 01:12:29.985
sondern eher damit

01:12:29.985 --> 01:12:31.865
welche Leute die betreiben

01:12:31.865 --> 01:12:33.505
ich sag zum Beispiel

01:12:33.505 --> 01:12:35.605
Oh Gott, das hört sich so an wie, ne, so

01:12:35.605 --> 01:12:38.005
Ihr seid alle blöd und ihr könnt es nicht

01:12:38.005 --> 01:12:42.765
Ja, aber also mit dem Alter, also das ist halt auch sowas, vielleicht werde ich auch einfach alt, das kann auch sein, aber früher

01:12:42.765 --> 01:12:45.185
Oh, du willst wissen, wo deine Programme laufen

01:12:45.185 --> 01:12:47.125
Ja, na, nee, ja, ja

01:12:47.125 --> 01:12:55.045
Also früher hätte ich gedacht, also Prozesse, ne, beim Softwareentwickeln Prozesse ganz wichtig und das total, wenn man das richtig macht, dann ist das voll gut

01:12:55.045 --> 01:12:57.825
Und wenn man es falsch macht, dann ist alles eine Katastrophe

01:12:57.825 --> 01:13:00.225
und irgendwie Engineering

01:13:00.225 --> 01:13:01.565
total super, wenn

01:13:01.565 --> 01:13:04.025
man halt nur die richtigen Tools verwendet und

01:13:04.025 --> 01:13:06.085
dann geht

01:13:06.085 --> 01:13:08.125
alles super und wenn man halt das Falsche macht

01:13:08.125 --> 01:13:09.985
und heute denke ich mir eher so,

01:13:10.325 --> 01:13:11.945
ja gut, die Sachen, die ich gesehen habe, die

01:13:11.945 --> 01:13:13.885
wirklich gut funktioniert haben, teilweise war das

01:13:13.885 --> 01:13:15.065
Engineering sehr grottig.

01:13:16.165 --> 01:13:17.765
Möglicherweise auch deswegen, also einfach

01:13:17.765 --> 01:13:19.825
von der Zeit her geschuldet, weil man hatte nichts

01:13:19.825 --> 01:13:20.165
Besseres.

01:13:20.665 --> 01:13:22.805
Wir hatten ja damals nichts anderes.

01:13:23.525 --> 01:13:24.805
Ich kann mich da nicht mehr erinnern,

01:13:24.925 --> 01:13:26.525
vielleicht besser nicht bei mir, aber

01:13:26.525 --> 01:13:30.545
Da lief die ganze Operations-Geschichte

01:13:30.545 --> 01:13:32.285
halt über Shell-Skripte, die von einem

01:13:32.285 --> 01:13:34.185
gemeinsam gemounteten NFS-Ding

01:13:34.185 --> 01:13:36.305
halt liefen und so. Wo man sich sagt,

01:13:36.405 --> 01:13:37.845
oh mein Gott, das ist ja alles total schrecklich.

01:13:38.225 --> 01:13:39.905
Aber das war es nicht. Es war ziemlich cool.

01:13:40.165 --> 01:13:41.565
Das hat richtig gut funktioniert alles.

01:13:41.865 --> 01:13:43.385
Auch mit richtig vielen...

01:13:43.385 --> 01:13:45.245
Du hast eigentlich selber ein Proto-Kubernetes gebaut.

01:13:45.605 --> 01:13:46.545
Nein, das war kein Kubernetes.

01:13:47.085 --> 01:13:49.265
Die Shell-Skripte waren auch teilweise ein bisschen...

01:13:49.265 --> 01:13:51.525
Aber das hat richtig gut funktioniert.

01:13:52.145 --> 01:13:53.845
Und ich habe auch schon Kubernetes gesehen.

01:13:53.845 --> 01:13:55.845
Auch ein großes Unternehmen

01:13:55.845 --> 01:13:57.705
mit groß viel... und das war

01:13:57.705 --> 01:13:58.725
scheußlich, weil

01:13:58.725 --> 01:14:01.565
ja, man hatte... also

01:14:01.565 --> 01:14:03.985
dieses Versprechen wurde nicht eingelöst,

01:14:04.065 --> 01:14:05.925
dass halt man sich nicht mehr drum kümmern muss, sondern

01:14:05.925 --> 01:14:07.565
ein Großteil des...

01:14:07.565 --> 01:14:10.185
ein größerer Anteil

01:14:10.185 --> 01:14:11.865
der Zeit, als ich mir oft hätte,

01:14:12.645 --> 01:14:14.265
muss ich mich damit

01:14:14.265 --> 01:14:16.065
verbringen, warum der Kram denn jetzt nicht so

01:14:16.065 --> 01:14:18.065
funktioniert, wie ich mir das denke und was denn da jetzt das

01:14:18.065 --> 01:14:19.645
Problem ist und warum ich das nicht sehen kann,

01:14:19.985 --> 01:14:21.485
was da das Problem ist, weil ich nicht darf.

01:14:21.645 --> 01:14:24.185
Da musst du schon ranchern oder so. Ja, genau, weil du es nicht darfst.

01:14:24.185 --> 01:14:27.145
weil du es nicht sollst und deshalb darfst du es auch nicht.

01:14:27.185 --> 01:14:29.065
Ja, und dann versuchen wir mit den Leuten zu reden, die verantwortlich sind

01:14:29.065 --> 01:14:29.965
und dann denkt man sich so...

01:14:29.965 --> 01:14:32.885
Und Performance und Latenz sind auch so Sachen, wo du halt

01:14:32.885 --> 01:14:35.085
einfach plötzlich viel weniger

01:14:35.085 --> 01:14:36.505
Einblick rein hast.

01:14:36.605 --> 01:14:38.885
Genau, man sieht einfach viel weniger, was ja

01:14:38.885 --> 01:14:40.925
kann ja ein Feature sein, aber...

01:14:40.925 --> 01:14:43.105
Ja, klar, in vielen großen Organisationen

01:14:43.105 --> 01:14:44.865
ist es ja ein Feature. Du willst die Leute nicht zu nah

01:14:44.865 --> 01:14:46.925
an die gefährlichen Dinge

01:14:46.925 --> 01:14:48.765
ranlassen. Also lieber schlecht betrieben als

01:14:48.765 --> 01:14:49.445
gar nicht betrieben.

01:14:50.465 --> 01:14:51.845
Ja, aber...

01:14:51.845 --> 01:14:54.365
Also, es wäre einfach so,

01:14:54.465 --> 01:14:56.085
es ist halt, wenn das Leute sind,

01:14:56.365 --> 01:14:57.905
die das betreiben, die das halt irgendwie,

01:14:57.965 --> 01:14:59.505
denen das Spaß macht, die da Interesse dran haben,

01:14:59.605 --> 01:15:01.805
die das irgendwie auch versuchen zu optimieren,

01:15:02.885 --> 01:15:04.085
die sich da reinfuchsen oder so,

01:15:04.165 --> 01:15:05.825
dann kann es sein, dass man auch, dass die halt auch,

01:15:05.965 --> 01:15:07.925
keine Ahnung, mit einem Stock und einem

01:15:07.925 --> 01:15:08.965
Feuerstein irgendwie

01:15:08.965 --> 01:15:11.385
den Raum warm kriegen, ja,

01:15:11.685 --> 01:15:12.925
während halt irgendwie,

01:15:13.665 --> 01:15:14.785
keine Ahnung,

01:15:14.945 --> 01:15:18.065
es gibt halt Leute, die nehmen halt

01:15:18.065 --> 01:15:20.045
den Schaufelradbagger und baggern

01:15:20.045 --> 01:15:21.465
halt das falsche Dorf weg, ja,

01:15:21.465 --> 01:15:23.605
Das ist halt irgendwie so, das muss nicht unbedingt

01:15:23.605 --> 01:15:25.605
besser sein, wenn man ein besseres Tool hat, wenn man halt

01:15:25.605 --> 01:15:26.705
die falschen Leute steuern.

01:15:28.045 --> 01:15:29.405
Ja, das ist aber so ein bisschen

01:15:29.405 --> 01:15:30.925
eine Tautologie, oder Jochen?

01:15:31.145 --> 01:15:33.465
Die guten Leute kriegen Dinge gut hin

01:15:33.465 --> 01:15:35.705
und die schlechten Leute kriegen

01:15:35.705 --> 01:15:36.105
Dinge schlecht hin.

01:15:36.105 --> 01:15:39.285
Aus so einer 10.000 Fuß

01:15:39.285 --> 01:15:41.225
Übersichtsperspektive

01:15:41.225 --> 01:15:43.385
sieht das halt zu einfach aus. Das sieht halt so aus,

01:15:43.505 --> 01:15:45.345
wie wir machen das, was alle machen

01:15:45.345 --> 01:15:47.145
und das funktioniert dann schon.

01:15:47.265 --> 01:15:48.605
Wir haben auch viel Geld ausgegeben jetzt.

01:15:48.825 --> 01:15:49.985
Dann muss das auch gut sein.

01:15:49.985 --> 01:15:52.025
Ja, aber vielleicht funktioniert es auch nicht

01:15:52.025 --> 01:15:53.965
und zwar aus anderen Gründen, als man jetzt sagte

01:15:53.965 --> 01:15:54.645
Also

01:15:54.645 --> 01:15:57.865
Also ich muss sagen, aus Anwendungsentwicklersicht

01:15:57.865 --> 01:16:00.125
ich finde es sehr angenehm, weil ich einfach nur noch sagen muss

01:16:00.125 --> 01:16:01.905
hier ist ein Docker-Image, sorgt dafür, dass es läuft

01:16:01.905 --> 01:16:02.685
Ja

01:16:02.685 --> 01:16:04.805
Der Rest ist mir egal

01:16:04.805 --> 01:16:06.025
Der Rest ist mir egal, ja

01:16:06.025 --> 01:16:09.345
Für Performance ist

01:16:09.345 --> 01:16:10.805
Irgendjemand anders ist dafür verantwortlich

01:16:10.805 --> 01:16:13.625
Ja, aber was passiert denn, wenn das nicht, also funktioniert das dann tatsächlich auch

01:16:13.625 --> 01:16:15.645
Also ich meine, dann wäre das ja wahrscheinlich ein Fall für

01:16:15.645 --> 01:16:18.065
das betreiben dann halt auch Leute, die sich da irgendwie

01:16:18.065 --> 01:16:18.945
Ja, Amazon, AWS

01:16:18.945 --> 01:16:20.165
Ja, aber

01:16:20.165 --> 01:16:22.705
okay, die können das wahrscheinlich sogar

01:16:22.705 --> 01:16:24.045
Azure, ja, ist genauso

01:16:24.045 --> 01:16:26.545
Ja, da habe ich das schon häufiger gehört

01:16:26.545 --> 01:16:29.385
Kriegt man bei Google Compute oder bei Google Cloud

01:16:29.385 --> 01:16:31.305
kriegt man da auch Kubernetes Plastomin

01:16:31.305 --> 01:16:32.945
Ja, ja

01:16:32.945 --> 01:16:35.305
Wäre ich mir jetzt aber nicht so sicher, ob die gut sind

01:16:35.305 --> 01:16:37.025
Weiß ich auch nicht, also bei Azure

01:16:37.025 --> 01:16:38.965
habe ich auch schon gehört, da waren Leute auch nicht so

01:16:38.965 --> 01:16:40.065
etwas unter

01:16:40.065 --> 01:16:43.005
Ja gut, dann wäre es halt bei dem großen

01:16:43.005 --> 01:16:45.145
A-Zeit halt auch den Premiumpreis

01:16:45.145 --> 01:16:46.385
Ja, das ist schon alles

01:16:46.385 --> 01:16:47.865
nicht günstig, aber es ist halt die Frage,

01:16:48.345 --> 01:16:49.265
wenn man das eh bezahlen kann,

01:16:50.445 --> 01:16:50.685
egal.

01:16:51.785 --> 01:16:54.345
Möchtest du vielleicht noch einen Manager haben, der vielleicht nicht so technisch

01:16:54.345 --> 01:16:56.265
affin ist, der dann so ein Load-Binding-Screen

01:16:56.265 --> 01:16:58.085
mal kurz in einem Webinterface hochschieben kann,

01:16:58.185 --> 01:17:00.085
weil der gerade eine Spitze am Wochenende erwartet oder so?

01:17:00.685 --> 01:17:02.125
Ja, das ist aber so ein bisschen der Trend, oder?

01:17:02.185 --> 01:17:04.205
Dass du weggehst von den eigenen Data Centers

01:17:04.205 --> 01:17:06.245
und hin in die Cloud. Ja, das ist ja das Versprechen der Cloud,

01:17:06.385 --> 01:17:07.865
dass jemand anders für dich besser managt.

01:17:08.445 --> 01:17:10.165
Ich unterschreibe das nicht

01:17:10.165 --> 01:17:12.165
immer so und ich glaube auch nicht, dass das

01:17:12.165 --> 01:17:14.025
immer eine gute Idee ist, in die Cloud zu gehen.

01:17:14.085 --> 01:17:15.945
Und ich glaube auch nicht, dass das immer billiger ist,

01:17:15.945 --> 01:17:17.345
in die Cloud zu gehen. Ganz im Gegenteil.

01:17:18.805 --> 01:17:19.545
Ja. Aber

01:17:19.545 --> 01:17:21.705
es ist der Trend gerade. Es ist der Trend

01:17:21.705 --> 01:17:23.885
weg vom eigenen Datacenter hin zu... Das Hauptproblem ist halt,

01:17:24.105 --> 01:17:25.905
wenn du eine Konzernstruktur

01:17:25.905 --> 01:17:27.605
hast mit einer sehr heterogenen

01:17:27.605 --> 01:17:29.725
Infrastrukturwelt, dann

01:17:29.725 --> 01:17:31.765
ermöglicht dir halt dieser Weg in die Cloud

01:17:31.765 --> 01:17:33.845
eine Homogenisierung deines ganzen

01:17:33.845 --> 01:17:35.685
Geschäfts.

01:17:36.345 --> 01:17:37.845
Ja, natürlich für Geld. Und danach kannst du

01:17:37.845 --> 01:17:39.385
vielleicht wieder lokal machen.

01:17:39.705 --> 01:17:42.085
Aber diese Fortentwicklung

01:17:42.085 --> 01:17:43.825
quasi, dass halt diese ganzen heterogenen Teams

01:17:43.825 --> 01:17:45.765
alle abgelöst werden müssen, durch

01:17:45.765 --> 01:17:46.485
was Neues.

01:17:47.345 --> 01:17:49.645
Da verliert man natürlich Know-how, aber du kannst

01:17:49.645 --> 01:17:51.625
halt so Prozesse, Skaleffekte erzeugen

01:17:51.625 --> 01:17:53.505
irgendwie und dann vielleicht doch merken,

01:17:53.625 --> 01:17:55.745
wo du halt was nicht mehr so brauchst.

01:17:55.905 --> 01:17:57.865
Ich weiß nicht, also dieses Skaleffekt

01:17:57.865 --> 01:17:59.025
der Erfolg klingt ganz falsch.

01:17:59.025 --> 01:18:00.985
Ja, das hört sich immer gut an,

01:18:01.085 --> 01:18:03.005
das hört sich in so Business-Präsentationen immer gut an.

01:18:03.025 --> 01:18:03.745
Wann funktioniert das wirklich?

01:18:04.285 --> 01:18:05.205
Da habe ich so meine...

01:18:05.205 --> 01:18:09.665
Naja, aber ich will auch schon, also du

01:18:09.665 --> 01:18:11.525
kriegst halt die Leute dazu,

01:18:11.625 --> 01:18:12.885
dass sie dann das alles Gleiche machen müssen.

01:18:13.085 --> 01:18:15.225
Du fährst halt dann vier Hunden runter,

01:18:15.225 --> 01:18:45.205
und PyTest.

01:18:45.225 --> 01:18:47.085
ganz... Ja, aber du hast

01:18:47.085 --> 01:18:49.025
diese Syshalter tatsächlich aufgebrochen und du brauchst

01:18:49.025 --> 01:18:51.005
dann tatsächlich, musst du halt

01:18:51.005 --> 01:18:51.845
wieder von vorne anfangen.

01:18:52.585 --> 01:18:53.545
Du kannst das wieder neu bauen.

01:18:54.525 --> 01:18:56.945
Ja, es kommt wahrscheinlich darauf an, aber

01:18:56.945 --> 01:18:59.025
ich würde auch, ich würde immer dazu sagen,

01:18:59.205 --> 01:19:00.945
also klar, okay, das mag sein, dass das alles super ist

01:19:00.945 --> 01:19:02.725
und es kann sein, dass das, wenn man das an AWS

01:19:02.725 --> 01:19:04.865
oder sonst wen gibt, dass es dann besser ist als das, was

01:19:04.865 --> 01:19:06.725
vorher da war und dass man diese...

01:19:06.725 --> 01:19:08.465
Kann alles sein.

01:19:08.825 --> 01:19:10.485
Vielleicht ist das dann auch super

01:19:10.485 --> 01:19:13.045
viel besser als vorher. Und wenn du so Spitzen

01:19:13.045 --> 01:19:14.985
hast, kann es ja auch sein, dass das, dass du da

01:19:14.985 --> 01:19:16.425
mehr machen kannst, als du vorher machen kannst.

01:19:16.545 --> 01:19:18.645
Weil der hat einfach ungeheuer viel

01:19:18.645 --> 01:19:20.725
Kapazität jetzt kurz.

01:19:21.225 --> 01:19:22.685
Aber ich würde immer mit dazu

01:19:22.685 --> 01:19:24.725
sagen wollen, dass es halt auch so Dinge gibt,

01:19:25.025 --> 01:19:25.605
wie eben

01:19:25.605 --> 01:19:28.665
zum Beispiel, die das halt in einem halben Rack

01:19:28.665 --> 01:19:29.905
machen. Und

01:19:29.905 --> 01:19:32.225
einer der Gründe, warum sie das können, ist halt,

01:19:32.625 --> 01:19:34.445
dass da jemand irgendwie ein

01:19:34.445 --> 01:19:36.485
totaler Switch-Nerd ist und sich halt mit dem

01:19:36.485 --> 01:19:37.365
Netzwerk-Kram auskennt.

01:19:38.125 --> 01:19:40.725
Und dieses System

01:19:40.725 --> 01:19:42.325
kannst du in keine Cloud deployen.

01:19:42.785 --> 01:19:44.465
Weil die hat halt die Hardware nicht.

01:19:44.985 --> 01:19:48.265
und die haben auch nicht die Kenntnisse über das, was man da...

01:19:48.265 --> 01:19:49.985
Die können das nicht, willst du damit sagen, die können das nicht?

01:19:50.045 --> 01:19:51.965
Ja, bei bestimmten Sachen, die man da so den Spann mitnimmt,

01:19:52.045 --> 01:19:54.185
wenn die irgendwie so ein Redis irgendwie im Minister hängen,

01:19:54.265 --> 01:19:56.705
dann müssen die manuell hingehen, dann musst du eine halbe Stunde warten,

01:19:56.805 --> 01:19:58.985
weil irgendjemand da runterrennt und das Rack reinschiebt oder so, ja.

01:19:59.805 --> 01:20:01.085
Ja, das ist dann vielleicht noch viel schlechter.

01:20:01.105 --> 01:20:02.205
Ja, man muss da planen vorher.

01:20:02.765 --> 01:20:04.665
Ich glaube auch, Stack Overflow ist inzwischen tatsächlich

01:20:04.665 --> 01:20:07.305
irgendwie irgendwo hin in irgendeine Cloud umgezogen.

01:20:07.745 --> 01:20:10.545
Insofern kann ich das auch vielleicht nicht mehr als Beispiel...

01:20:10.545 --> 01:20:11.725
Nicht mehr das beste Beispiel.

01:20:11.725 --> 01:20:13.765
Aber sagen wir so, für viele, die halt

01:20:13.765 --> 01:20:15.825
unterhalb der Google-Größe

01:20:15.825 --> 01:20:17.845
sind oder, weiß ich nicht, konzernpolitische

01:20:17.845 --> 01:20:19.805
Probleme haben, könnte

01:20:19.805 --> 01:20:21.605
sein, dass manchmal vielleicht der eine oder andere

01:20:21.605 --> 01:20:22.745
schon mal sowas gesehen hat.

01:20:23.285 --> 01:20:25.365
Was mich ja auch noch interessiert, ich meine, hey, dann haben wir jetzt so ein

01:20:25.365 --> 01:20:27.565
Managed-Criminalist-Cluster irgendwie gemäß, aber wie kriege ich denn

01:20:27.565 --> 01:20:29.125
vom Entwickler den Pod da hin?

01:20:31.525 --> 01:20:31.965
Ja, da gibt es

01:20:31.965 --> 01:20:33.545
verschiedene Möglichkeiten. Ah ja, Moment,

01:20:33.745 --> 01:20:35.305
aber jetzt sind wir ja irgendwie wieder bei so einem anderen Thema,

01:20:35.385 --> 01:20:37.465
das müssen wir irgendwie so eine Kette haben, so eine CI,

01:20:37.625 --> 01:20:39.445
die das dann baut oder das dahin deployed

01:20:39.445 --> 01:20:40.745
oder auf dem Branch.

01:20:40.745 --> 01:20:42.845
oder? Ja, es gibt ja verschiedene Möglichkeiten. Also ich meine, du kannst es natürlich

01:20:42.845 --> 01:20:44.705
prinzipiell manuell machen. Yay!

01:20:45.865 --> 01:20:46.305
Großartig.

01:20:46.805 --> 01:20:48.425
Auch genau der Verwendungszweck.

01:20:48.525 --> 01:20:49.465
Ja, genau.

01:20:50.625 --> 01:20:52.225
Einmal bitte hier diesen Pott bitte neu.

01:20:52.885 --> 01:20:54.305
Oder du hast ein CI-System,

01:20:54.525 --> 01:20:55.925
was das dann halt irgendwie pusht.

01:20:55.925 --> 01:20:59.085
Du hast ein Jenkins-System oder du hast ein was weiß ich System.

01:20:59.205 --> 01:21:00.425
Wo kriegt man dieses CI-System her?

01:21:01.205 --> 01:21:02.445
Das kannst du auch mieten.

01:21:02.745 --> 01:21:03.105
Achso.

01:21:05.105 --> 01:21:06.825
Automatisch? Du betreibst es auf deinem

01:21:06.825 --> 01:21:08.185
Kubernetes-Cluster. Aha.

01:21:08.985 --> 01:21:10.725
Also so ein Drone. Habe ich tatsächlich gesehen.

01:21:10.745 --> 01:21:11.365
Also ich meine,

01:21:12.845 --> 01:21:14.865
dass du Jenkins auf einem

01:21:14.865 --> 01:21:16.085
Kubernetes-Cluster startest.

01:21:16.405 --> 01:21:17.785
Oder Drone-CI oder sowas?

01:21:18.065 --> 01:21:19.525
Ja, oder irgendein CI.

01:21:19.525 --> 01:21:20.285
Ja, da gibt es ja 2000.

01:21:22.725 --> 01:21:23.625
Also das ist dann,

01:21:23.725 --> 01:21:25.405
nochmal, ein CI ist noch wie

01:21:25.405 --> 01:21:27.045
so ein anderer Server, auf dem eigentlich nichts anderes passiert,

01:21:27.125 --> 01:21:28.965
also irgendwie sind so Diplom-Skript-Ablaufen, oder?

01:21:29.625 --> 01:21:31.165
Ja, das kommt drauf an. Also ich meine, kann man

01:21:31.165 --> 01:21:32.905
auf verschiedene Arten und Weisen verwenden.

01:21:33.065 --> 01:21:35.345
Das Erste, was du machst, ist ja Continuous Integration.

01:21:36.285 --> 01:21:37.705
Das heißt, da hast du auf jeden Fall

01:21:37.705 --> 01:21:39.525
deine Tests laufen und deine

01:21:39.525 --> 01:21:41.625
Dein Testing und dann

01:21:41.625 --> 01:21:42.625
musst du eigentlich noch...

01:21:42.625 --> 01:21:45.585
Also die Integration heißt ja nur, dass du

01:21:45.585 --> 01:21:47.585
immer eine getestete

01:21:47.585 --> 01:21:48.285
Version hast.

01:21:49.185 --> 01:21:51.625
Der nächste Schritt ist dann Continuous Deployment.

01:21:52.045 --> 01:21:52.645
Delivery, oder?

01:21:53.185 --> 01:21:55.625
Delivery oder Deployment? Irgendwas mit D halt.

01:21:57.305 --> 01:21:57.725
CD,

01:21:57.905 --> 01:21:58.525
die ICD.

01:21:58.905 --> 01:22:01.585
Dass du eben diese Continuous Delivery oder Deployment

01:22:01.585 --> 01:22:03.485
machst, wo du halt

01:22:03.485 --> 01:22:05.705
sagst, gut, jedes Mal, wenn eine fertig gebaut ist

01:22:05.705 --> 01:22:08.205
und korrekt getestet, dann kannst du ja auch gleich ausrollen.

01:22:08.205 --> 01:22:11.425
Aber der sagt dann genau, korrekt getestet

01:22:11.425 --> 01:22:13.545
sind das nur die automatischen Tests, die durchlaufen müssen

01:22:13.545 --> 01:22:14.885
oder muss noch irgendwie mal das abnehmen

01:22:14.885 --> 01:22:16.005
oder so

01:22:16.005 --> 01:22:19.505
Aber muss noch jemand auf den grünen Knopf drücken

01:22:19.505 --> 01:22:21.085
oder nicht, oder muss jemand abnehmen

01:22:21.085 --> 01:22:23.425
Da muss halt so verschiedene Systeme dann gebaut werden

01:22:23.425 --> 01:22:24.825
Das musst du dann irgendwie wieder übernehmen

01:22:24.825 --> 01:22:25.845
und das muss halt dann eigentlich

01:22:25.845 --> 01:22:29.225
wie das halt gestartet wird, also ich würde sagen, ideal wäre es

01:22:29.225 --> 01:22:31.145
du hast einen Production Branch irgendwie und du pushst dann irgendwie

01:22:31.145 --> 01:22:32.605
und dann gibt es eine Action auf deinem GitHub

01:22:32.605 --> 01:22:34.665
die dann das Ding anspricht

01:22:34.665 --> 01:22:37.445
Das ist viel zu spezifisch

01:22:37.445 --> 01:22:39.745
für deine Umgebung.

01:22:40.725 --> 01:22:41.745
Da kann ich mir

01:22:41.745 --> 01:22:43.165
viele verschiedene Umgebungen vorstellen,

01:22:43.365 --> 01:22:44.125
wo das sowas nicht geht.

01:22:44.685 --> 01:22:45.865
Oder wo du es auch nicht machen darfst.

01:22:45.965 --> 01:22:47.825
Oder wo du es auch nicht machen kannst.

01:22:48.265 --> 01:22:49.165
Und wie machen wir das denn dann?

01:22:50.325 --> 01:22:51.285
Mit anderen Prozessen.

01:22:51.705 --> 01:22:53.485
Jochen hat doch vorhin geschrieben,

01:22:53.805 --> 01:22:55.005
dass du Prozesse haben musst.

01:22:56.005 --> 01:22:57.105
Ja, aber das ist ja genau der Punkt.

01:22:57.185 --> 01:22:58.085
Da musst du dich irgendwie darum kümmern.

01:22:58.185 --> 01:22:58.805
Da musst du ja das machen.

01:22:58.805 --> 01:23:00.865
Dann ist er aber doch wieder jemand,

01:23:00.965 --> 01:23:01.625
der sich damit auskennen muss,

01:23:01.665 --> 01:23:02.525
wie das ganze Zeug funktioniert.

01:23:03.505 --> 01:23:04.845
Also, sag mal so,

01:23:04.905 --> 01:23:07.045
das kann auch ein Entwicklungsteam machen.

01:23:07.445 --> 01:23:08.445
So ist es ja nicht.

01:23:08.565 --> 01:23:10.605
Ja, aber du brauchst halt jemanden, der sich damit auskennt.

01:23:10.605 --> 01:23:12.085
Auf jeden Fall muss das ein Entwicklungsthema sein.

01:23:12.105 --> 01:23:13.845
Wenn das aber jemand sich damit nicht auskennt,

01:23:13.925 --> 01:23:15.805
dieser ganze Quatsch irgendwie gar nicht da ist,

01:23:15.985 --> 01:23:17.945
dann hast du das Problem.

01:23:18.405 --> 01:23:19.585
Ja, also wie gesagt,

01:23:19.845 --> 01:23:21.525
alleine möchte ich das nicht betreiben müssen

01:23:21.525 --> 01:23:23.205
und alleine möchte ich es mir auch nicht ausdenken müssen.

01:23:23.645 --> 01:23:26.425
Aber als Entwickler in einem großen Konzern

01:23:26.425 --> 01:23:27.805
ist das doch bequem,

01:23:27.885 --> 01:23:29.645
weil da gibt es ja die Leute schon, die das machen.

01:23:29.665 --> 01:23:30.225
Ach, da gibt es die schon?

01:23:30.465 --> 01:23:30.765
Ja, klar.

01:23:30.965 --> 01:23:31.525
Oh ja, wirklich?

01:23:32.765 --> 01:23:35.245
Außer du bist in der Abteilung, die das macht.

01:23:35.245 --> 01:23:37.685
und dann ist es besser auch

01:23:37.685 --> 01:23:39.685
Irgendwer kann bestimmt DevOps oder so

01:23:39.685 --> 01:23:41.465
Nee, das ist ja tatsächlich mehr Ops

01:23:41.465 --> 01:23:42.585
Das ist ja nicht DevOps

01:23:42.585 --> 01:23:45.125
Das ist ja nur Ops, genau

01:23:45.125 --> 01:23:47.005
Du sorgst ja nur dafür, dass der Cluster da ist

01:23:47.005 --> 01:23:48.925
und auch funktioniert

01:23:48.925 --> 01:23:50.925
Die DevOps-Schicht ist ja

01:23:50.925 --> 01:23:51.625
Ja, aber das ist ja

01:23:51.625 --> 01:23:53.545
DevOps, oder?

01:23:54.345 --> 01:23:56.145
Ja, genau, aber das ist ja in den Anwendungsteams

01:23:56.145 --> 01:23:59.065
Aber wenn du jetzt nur noch

01:23:59.065 --> 01:24:01.285
Devs hast, die kein Ops können

01:24:01.285 --> 01:24:02.645
Ja gut, aber das

01:24:02.645 --> 01:24:04.685
muss ja auf der Scale

01:24:04.685 --> 01:24:06.665
wo du so einen Cluster einsetzt, musst du davon

01:24:06.665 --> 01:24:08.845
ausgehen, dass du dann halt auch das machen musst.

01:24:09.065 --> 01:24:10.585
Ja genau, aber das ist genau der Punkt. Ich glaube, dass das

01:24:10.585 --> 01:24:12.485
bei vielen so, die denken halt, ey, ich kaufe mir jetzt so

01:24:12.485 --> 01:24:14.305
einen Managed-Kibinist-Cluster und dann habe ich mich hier.

01:24:14.845 --> 01:24:16.705
Genau, und dann die Arbeit, das passt schon

01:24:16.705 --> 01:24:18.405
irgendwie. Und die vergessen diesen

01:24:18.405 --> 01:24:22.725
Ja gut, das kann auch

01:24:22.725 --> 01:24:23.345
gut und schlecht sein.

01:24:26.085 --> 01:24:26.745
Das, was

01:24:26.745 --> 01:24:29.065
ich vorhin meinte mit dieser Cost-Center-Mentalität,

01:24:29.245 --> 01:24:30.705
dass du halt sagst, okay, früher haben wir

01:24:30.705 --> 01:24:32.805
ein Data-Center betrieben und es war so teuer

01:24:32.805 --> 01:24:35.065
und heute betreiben wir Cloud

01:24:35.065 --> 01:24:36.865
und dann ist das verteilt auf die Teams und

01:24:36.865 --> 01:24:38.925
jedes hat seinen Quota und dann muss jedes Team die Kosten

01:24:38.925 --> 01:24:40.345
tragen und ist selber verantwortlich.

01:24:40.845 --> 01:24:42.545
Und die Kosten sind aber immer noch da, die sind höher.

01:24:43.065 --> 01:24:44.865
Nur hast du sie jetzt anders verteilt, sodass du sie

01:24:44.865 --> 01:24:46.785
nicht mehr in einer Spalte siehst, sondern halt

01:24:46.785 --> 01:24:48.865
im Team auf die Teams oder auf die

01:24:48.865 --> 01:24:50.025
Anwendungen oder wie auch immer du es spielst.

01:24:50.025 --> 01:24:52.165
Ja, aber dann hast du im Controlling die Aggregationsspalte vergessen.

01:24:52.425 --> 01:24:55.085
Ja, genau. Beziehungsweise die ist halt jetzt woanders.

01:24:55.905 --> 01:24:56.965
Nicht mehr im Data Center

01:24:56.965 --> 01:24:59.125
sondern im Development.

01:24:59.825 --> 01:25:00.945
Das ist halt möglicherweise

01:25:00.945 --> 01:25:01.545
eine ganz andere

01:25:01.545 --> 01:25:04.025
ganz anderer Seite der

01:25:04.025 --> 01:25:06.045
Bilanz halt. Ja, aber das ist ja eigentlich

01:25:06.045 --> 01:25:08.065
vom Controlling her eher so fail, weil eigentlich müssen ja auch

01:25:08.065 --> 01:25:09.385
Projekte, die irgendwie erlöst konnten,

01:25:09.385 --> 01:25:10.845
aber ich glaube, dass

01:25:10.845 --> 01:25:13.505
solche Fails haben

01:25:13.505 --> 01:25:15.105
reale Konsequenzen. Also ob du das jetzt,

01:25:15.525 --> 01:25:17.325
also genau, es kann sein, dass auf der

01:25:17.325 --> 01:25:19.385
einen Seite, du zahlst

01:25:19.885 --> 01:25:21.125
halt irgendwie

01:25:21.125 --> 01:25:23.345
einen guten Teil deines Umsatzes

01:25:23.345 --> 01:25:25.505
an Amazon oder an Microsoft oder so

01:25:25.505 --> 01:25:27.265
und das wird verbucht

01:25:27.265 --> 01:25:29.245
als Investition, wo irgendwie

01:25:29.245 --> 01:25:30.785
Geld zurückkommt.

01:25:30.785 --> 01:25:31.605
Was heißt das?

01:25:31.605 --> 01:25:31.925
Sieht ja auch so.

01:25:33.365 --> 01:25:34.465
Also vielleicht, ja.

01:25:34.845 --> 01:25:36.605
Du könntest dir weniger investieren

01:25:36.605 --> 01:25:38.485
und könntest trotzdem genauso viel umsetzen.

01:25:38.505 --> 01:25:39.865
Und auf der anderen Seite sieht das so aus wie,

01:25:39.985 --> 01:25:42.105
das sind halt bloß Kosten,

01:25:42.545 --> 01:25:43.425
die da rausgehen.

01:25:44.205 --> 01:25:46.265
Da brauchst du Leute, die da hingehen und ein Gebäude,

01:25:46.645 --> 01:25:47.825
das sind sowieso tote Kosten

01:25:47.825 --> 01:25:50.405
und dann brauchst du Hardware und was machst du mit der

01:25:50.405 --> 01:25:52.085
nach zwei Jahren, wenn du die nicht mehr verkaufen kannst?

01:25:52.085 --> 01:25:54.445
Ja, aber das steckt genau so ein Problem.

01:25:54.865 --> 01:25:56.525
Du musst halt irgendwie ein Team finden.

01:25:56.525 --> 01:25:59.025
Das ist doch der klassische Kauf versus Mieten.

01:25:59.025 --> 01:26:00.965
Genau, aber wo findest du genau das interne?

01:26:01.065 --> 01:26:02.525
Du bist jetzt mal ein Konzern, du hast jetzt

01:26:02.525 --> 01:26:03.505
keine Ahnung.

01:26:03.625 --> 01:26:06.025
Wir verkaufen ihr Zeugs und mieten es zurück zu einem teuren Preis.

01:26:06.805 --> 01:26:08.045
Du hast jetzt keine Ahnung.

01:26:08.525 --> 01:26:09.985
Du machst halt irgendwas anderes.

01:26:10.465 --> 01:26:12.645
Und dann brauchst du irgendwas mit Cloud.

01:26:12.825 --> 01:26:13.385
Dann hast du überlegt,

01:26:13.465 --> 01:26:16.005
wir sind jetzt ein so geballer Konzern.

01:26:17.445 --> 01:26:18.545
Das ist ja Buzzword, Cloud,

01:26:18.685 --> 01:26:19.465
KI und so.

01:26:20.225 --> 01:26:22.725
Und dann dachtest du, ja, okay, dann müssen jetzt aber schon

01:26:22.725 --> 01:26:24.805
alle so modern sein und ein bisschen Cloud machen.

01:26:25.245 --> 01:26:26.845
Und wenn wir jetzt aber unser eigenes Data Center

01:26:26.845 --> 01:26:28.525
irgendwie betreiben, das müssen wir dann irgendwie

01:26:28.525 --> 01:26:30.705
Offshore und das funktioniert

01:26:30.705 --> 01:26:32.505
aber auch nicht so richtig, weil die guten Leute

01:26:32.505 --> 01:26:33.665
irgendwie dann doch irgendwie so, ja,

01:26:34.365 --> 01:26:36.025
und dann baust du dann irgendwie so ein Letter Center,

01:26:36.185 --> 01:26:37.785
merkst dann irgendwie so, ja, selbst wenn wir jetzt irgendwie in Deutschland

01:26:37.785 --> 01:26:39.565
sowas bauen, was ja irgendwie total

01:26:39.565 --> 01:26:41.705
gut ist, ist aber schon teuer und

01:26:41.705 --> 01:26:44.645
das festigt sich dann da alles

01:26:44.645 --> 01:26:46.645
und können jetzt Globalas betreiben und die kennen ja die ganzen

01:26:46.645 --> 01:26:48.725
Sachen nicht und wie bieten die das jetzt für Services

01:26:48.725 --> 01:26:50.405
in Brasilien an und so und

01:26:50.405 --> 01:26:52.805
dann können die ja gar nicht mit denen reden und gar nicht kommunizieren

01:26:52.805 --> 01:26:54.445
und warum machen wir jetzt nicht alles in der Cloud?

01:26:54.545 --> 01:26:56.685
Das ist ja total einfach, einfaches Interface für alle gleich

01:26:56.685 --> 01:26:58.065
und benutzen das dann einfach und

01:26:58.065 --> 01:26:59.865
und dann haben wir dieses Controlling-Problem,

01:27:00.225 --> 01:27:03.265
dann brauchst du halt diese ganzen Sachen nicht mehr.

01:27:03.365 --> 01:27:05.985
Aber tatsächlich, du musst das nicht selber vorhalten die ganze Zeit.

01:27:06.145 --> 01:27:08.405
Du brauchst nicht das ganze Team vor Ort an der gleichen Stelle,

01:27:08.525 --> 01:27:10.965
das diese ganzen Sachen managt und irgendwelche Schnittstellen nach außen anbietet.

01:27:11.285 --> 01:27:13.565
Das ist operativ sicherlich wesentlich einfacher,

01:27:13.865 --> 01:27:17.105
von Amazon Services zu mieten, anstatt ein eigenes Datacenter zu betreiben.

01:27:17.665 --> 01:27:18.945
Nur ab einer gewissen Größe.

01:27:19.525 --> 01:27:21.045
Ich meine, es gibt ja auch Schritte dazwischen.

01:27:21.145 --> 01:27:24.725
Es gibt ja auch Co-Location und es gibt ja auch so Mietracks und so weiter.

01:27:25.225 --> 01:27:26.805
Aber ab einer gewissen Größe lohnt es sich halt.

01:27:26.805 --> 01:27:28.925
und ganz ehrlich, ich sehe

01:27:28.925 --> 01:27:31.045
die Vorteile von vielen von diesen Cloud-Diensten

01:27:31.045 --> 01:27:32.785
nicht. Die sind sehr teuer und die haben

01:27:32.785 --> 01:27:34.645
viele so fiktive Vorteile. Ja, aber du kannst

01:27:34.645 --> 01:27:36.945
die hochskalieren so viel wie du willst. Ja, gut.

01:27:37.145 --> 01:27:38.385
Okay. Aber ich habe

01:27:38.385 --> 01:27:40.825
zwölf Visitor im Monat und ich muss nie

01:27:40.825 --> 01:27:42.585
mal etwas hochskalieren. Ich würde es gerne...

01:27:42.585 --> 01:27:44.505
Dann machst du Serverless. Noch weiter. Ja, genau.

01:27:44.565 --> 01:27:45.225
Dann mache ich Serverless.

01:27:46.405 --> 01:27:49.245
Die gleiche

01:27:49.245 --> 01:27:50.725
Latenz wie vorher, nur für einen

01:27:50.725 --> 01:27:51.585
höheren Preis. Voll gut.

01:27:52.865 --> 01:27:54.525
Ja, aber da muss jetzt nicht die ganze Anleitung bezahlt werden.

01:27:54.525 --> 01:27:55.505
Nur für die genutzte Minute.

01:27:55.505 --> 01:27:57.745
Ja, gut, aber dafür muss ich

01:27:57.745 --> 01:27:59.465
auch das Ein- und Ausschalten mitbezahlen und

01:27:59.465 --> 01:28:01.705
wenn dann mal 100.000 kommen, dann muss ich auf einmal alles

01:28:01.705 --> 01:28:02.105
bezahlen

01:28:02.105 --> 01:28:04.525
Ne, das will ich gar nicht

01:28:04.525 --> 01:28:07.725
Also, das ist so eine

01:28:07.725 --> 01:28:09.405
Ja, da wird ja viel

01:28:09.405 --> 01:28:10.165
Buzzword-Bingo gespielt

01:28:10.165 --> 01:28:12.265
Ich verstehe zum Beispiel gar nicht, warum Amazon

01:28:12.265 --> 01:28:15.525
nicht einfach so eine tolle Strategie fährt

01:28:15.525 --> 01:28:17.425
wie zu sagen, hey, wir könnten unseren Umsatz

01:28:17.425 --> 01:28:19.185
hochbekommen, wir gucken einfach mal bei allen unseren Kunden

01:28:19.185 --> 01:28:21.405
dann stellen wir irgendwelche Server in Russland auf

01:28:21.405 --> 01:28:23.605
und machen einfach ganz knapp viele Requests

01:28:23.605 --> 01:28:24.505
auf die ganzen Server

01:28:24.505 --> 01:28:26.205
per Lambda angeboten sind oder so

01:28:26.205 --> 01:28:28.965
und hauen einfach da mal so die Quotas so massiv

01:28:28.965 --> 01:28:30.705
hoch, weil wir benutzen das alles einfach mal

01:28:30.705 --> 01:28:32.065
und die mal Geld brauchen.

01:28:32.065 --> 01:28:34.105
Ja, aber bisher brauchen sie das noch gar nicht.

01:28:35.185 --> 01:28:35.545
Voll einfach.

01:28:36.405 --> 01:28:37.925
Du kannst einfach dann dadurch so

01:28:37.925 --> 01:28:39.065
deinen Umsatz voll hoch.

01:28:40.945 --> 01:28:42.425
Das ist ja auch eine gute Idee.

01:28:42.765 --> 01:28:53.947
Die Preise erh oder so Voll viele Leute nutzen unsere Sachen und dann merken sie oh da kommt eigentlich ein Umsatz raus oder Es gab von der Weile so einen Artikel ich kann den auch f die Show noch wieder raussuchen dass

01:28:53.947 --> 01:28:56.567
Amazon Prime, dieses

01:28:56.567 --> 01:28:58.927
Video-Hosting, die sind umgestiegen von

01:28:58.927 --> 01:29:00.188
Serverless

01:29:00.188 --> 01:29:02.728
auf quasi

01:29:02.728 --> 01:29:03.987
reservierte Instanzen.

01:29:05.188 --> 01:29:06.787
Weil die halt auch so FFM-Pack-Lasten

01:29:06.787 --> 01:29:08.447
haben, ja, und weil die da auch so

01:29:08.447 --> 01:29:09.728
Transcoding machen und

01:29:09.728 --> 01:29:12.688
das über diese Serverless verteilte

01:29:12.688 --> 01:29:14.067
Total cool ist, weil jede

01:29:14.067 --> 01:29:16.547
einzelne Komponente des Systems kann

01:29:16.547 --> 01:29:18.547
einzeln skalieren, aber brauchst

01:29:18.547 --> 01:29:20.447
gar nicht, weil du hast nur eine in der Mitte, die halt

01:29:20.447 --> 01:29:22.487
dick Rechenkraft verbraucht und dann

01:29:22.487 --> 01:29:24.567
außen so ein bisschen Gewürz außenrum.

01:29:25.607 --> 01:29:26.827
Auch da mit den Abstraktionsledern,

01:29:26.967 --> 01:29:28.447
die da tolle, du brauchst da gar nicht mehr.

01:29:28.447 --> 01:29:30.627
Also die haben irgendwie ihr Budget um 90%

01:29:30.627 --> 01:29:31.447
gesenkt und

01:29:31.447 --> 01:29:33.547
die Latenzen auch.

01:29:35.208 --> 01:29:36.567
Und das finde ich so ein bisschen

01:29:36.567 --> 01:29:38.787
gruselig, wenn so die Amazon-internen

01:29:38.787 --> 01:29:40.607
Teams sagen, also wir wollen das

01:29:40.607 --> 01:29:41.407
nicht benutzen.

01:29:41.407 --> 01:29:44.228
dann ist da doch schon was im Argen

01:29:44.228 --> 01:29:45.767
aber klar, also ich meine

01:29:45.767 --> 01:29:48.168
das ist ja das Problem bei diesen ganzen Technologien

01:29:48.168 --> 01:29:51.347
die sind cool und neu und man will die mal ausprobieren

01:29:51.347 --> 01:29:53.168
und auch im Unternehmensumfeld ist es ja so

01:29:53.168 --> 01:29:55.067
die sind cool und neu und man will die mal ausprobieren

01:29:55.067 --> 01:29:57.347
genau wie bei Kubernetes auch

01:29:57.347 --> 01:29:59.267
das ist auch cool und neu

01:29:59.267 --> 01:30:00.907
und damit kannst du alles das machen, was

01:30:00.907 --> 01:30:02.407
Google auch macht

01:30:02.407 --> 01:30:05.467
aber brauchst du es wirklich?

01:30:07.668 --> 01:30:08.507
Ja, also meistens

01:30:08.507 --> 01:30:11.327
wie du sagst, dieses deklarative

01:30:11.327 --> 01:30:13.208
hat halt was für sich, man schreibt zwei, drei

01:30:13.208 --> 01:30:15.447
Konfigurationsdateien und wenn man sich jetzt ein Minikube

01:30:15.447 --> 01:30:17.327
auf dem Server deployt, dann ist auch das relativ einfach.

01:30:17.547 --> 01:30:19.148
Da muss man auch dazu sagen, ehrlicherweise

01:30:19.148 --> 01:30:21.327
ist es Jammer, was man schreiben muss an Konfigurationsdateien.

01:30:24.407 --> 01:30:25.027
Naja, ist das schlimm?

01:30:26.007 --> 01:30:27.427
Ich weiß nicht, ich muss halt mal an dieses

01:30:27.427 --> 01:30:29.127
Memem-Bild denken,

01:30:29.188 --> 01:30:31.228
von dem Typen, der halt irgendwie

01:30:31.228 --> 01:30:33.327
vor einem Haufen Soldaten

01:30:33.327 --> 01:30:36.407
steht und

01:30:36.407 --> 01:30:39.327
die dann sagen,

01:30:39.327 --> 01:30:41.107
ja, schieß ihn oder so

01:30:41.107 --> 01:30:42.648
und dann so, hey, aber ich kann irgendwie

01:30:42.648 --> 01:30:44.728
Kubernetes, oder ich kann

01:30:44.728 --> 01:30:46.507
mal mit Computer ein Ding machen

01:30:46.507 --> 01:30:48.648
und dann sagen die, ja, kannst du auch

01:30:48.648 --> 01:30:50.967
Jammer für Kubernetes schreiben? Und dann so, erschießt mich bitte.

01:30:55.047 --> 01:30:56.648
Da gibt es auch dieses Bild mit der

01:30:56.648 --> 01:30:57.547
Schlange und der Maus,

01:30:57.787 --> 01:31:00.567
wo die Maus sagt, bitte friss mich nicht

01:31:00.567 --> 01:31:02.487
und die Schlange sagt, nee, ich will dich gar nicht fressen.

01:31:02.627 --> 01:31:04.208
Dann sagt die Maus, okay, was willst du denn stattdessen?

01:31:05.067 --> 01:31:06.228
Dann sagt die Schlange, kannst du nicht

01:31:06.228 --> 01:31:08.867
Kubernetes-Ingenieur bei uns werden? Dann sagt die Maus, bitte friss mich.

01:31:11.107 --> 01:31:12.367
Ja

01:31:12.367 --> 01:31:15.067
Ich glaube mit Schlange und Maus, ich glaube, dass das mal ein Python

01:31:15.067 --> 01:31:17.487
eine Python-Metapher war

01:31:17.487 --> 01:31:21.387
Jason, genau das, wie man es eigentlich jetzt machen sollte?

01:31:21.567 --> 01:31:22.427
Nee, auch nicht

01:31:22.427 --> 01:31:24.127
Ach, alles

01:31:24.127 --> 01:31:25.307
Ist alles nicht so schön

01:31:25.307 --> 01:31:26.127
Tommel

01:31:26.127 --> 01:31:30.407
Ist auch nicht schön, aber der beste Kandidat

01:31:30.407 --> 01:31:32.708
Ihr könnt es vielleicht nochmal erkennen, bitte kurz den Unterschied

01:31:32.708 --> 01:31:35.047
zwischen Jamel und Tommel

01:31:35.047 --> 01:31:36.668
Jamel ist yet another Marker-Language

01:31:36.668 --> 01:31:38.547
und Tommel ist Toms Marker-Language

01:31:38.547 --> 01:31:41.087
Also die Probleme bei Jamel

01:31:41.087 --> 01:31:42.987
sind halt das, wenn man da nicht vorsichtig ist,

01:31:43.087 --> 01:31:45.228
dann bedeutet halt, ja, will Dateiparsen

01:31:45.228 --> 01:31:46.527
halt Code ausführen, was

01:31:46.527 --> 01:31:48.287
vielleicht für die Leute nicht so gut ist.

01:31:48.287 --> 01:31:50.987
Ja, oder auch so Ambiguitäten, ja, das Norwegen-Problem.

01:31:52.607 --> 01:31:53.467
Oh, das ist halt ein Norwegen-Problem.

01:31:53.527 --> 01:31:54.567
Jetzt musst du noch untertechnen, was das Norwegen-Problem ist.

01:31:54.567 --> 01:31:55.728
Tabs versus Spaces.

01:31:56.007 --> 01:31:58.507
Das Norway-Problem.

01:31:58.507 --> 01:31:58.947
Das No.

01:32:00.287 --> 01:32:02.487
Wenn man eine Liste

01:32:02.487 --> 01:32:04.228
von Ländern speichern möchte

01:32:04.228 --> 01:32:06.867
und dann dazu die ISO-Länder-Codes

01:32:06.867 --> 01:32:08.267
verwendet, dann sind das ja zwei

01:32:08.267 --> 01:32:10.407
buchstabige Länder-Codes und es geht

01:32:10.407 --> 01:32:12.287
bei den allermeisten Ländern sehr gut, außer

01:32:12.287 --> 01:32:14.447
bei Norwegen, weil der norwegische

01:32:14.447 --> 01:32:16.407
Ländercode ist NO und das

01:32:16.407 --> 01:32:18.607
wird von Jammel als FALSE geparst,

01:32:18.688 --> 01:32:20.527
weil NO ist ja ein Synonym für FALSE.

01:32:21.107 --> 01:32:22.527
Das heißt, du hast dann so eine Liste von Ländern,

01:32:22.748 --> 01:32:23.287
Deutschland,

01:32:24.627 --> 01:32:25.767
Dänemark, Schweden,

01:32:26.447 --> 01:32:26.787
Nein.

01:32:30.367 --> 01:32:32.607
Das kann einem auch echt das Deployment kaputt machen,

01:32:33.168 --> 01:32:33.668
wenn man das

01:32:33.668 --> 01:32:34.767
halt da drin hat.

01:32:35.867 --> 01:32:38.567
Ja, oder Tabs vs. Spaces, ja, und generell

01:32:38.567 --> 01:32:40.387
so Significant Whitespace, das ist ja

01:32:40.387 --> 01:32:41.367
generell abzulehnen,

01:32:42.168 --> 01:32:43.807
gerade in der Python-Welt.

01:32:45.767 --> 01:32:46.087
Ja, das

01:32:46.087 --> 01:32:47.607
ist halt so eine,

01:32:48.367 --> 01:32:49.947
das krankt halt an den

01:32:49.947 --> 01:32:52.208
gleichen Problemen, die

01:32:52.208 --> 01:32:54.507
viele solche Datenbeschreibungssprachen

01:32:54.507 --> 01:32:55.807
haben, dass

01:32:55.807 --> 01:32:58.107
wenn man genügend Daten da durchschickt oder

01:32:58.107 --> 01:32:59.947
wenn genügend Leute damit arbeiten, dann siehst du

01:32:59.947 --> 01:33:01.268
alle Ecken und Kanten.

01:33:02.208 --> 01:33:04.107
Und wenn die nur so ein

01:33:04.107 --> 01:33:05.947
kleines Loch haben, wo sie nicht genügend

01:33:05.947 --> 01:33:08.148
spezifiziert sind, dann fallen dir da

01:33:08.148 --> 01:33:09.547
gigabyteweise die Daten raus.

01:33:09.547 --> 01:33:12.067
und das ist bei allen

01:33:12.067 --> 01:33:14.107
Sprachen so, das ist bei Jason so

01:33:14.107 --> 01:33:15.407
Jason hat seine Probleme

01:33:15.407 --> 01:33:17.387
und auch seine

01:33:17.387 --> 01:33:20.027
Ungereimtheiten, es gibt nur Floats

01:33:20.027 --> 01:33:23.447
Wir haben nur so vier Dattypen

01:33:23.447 --> 01:33:24.347
das ist vielleicht manchmal

01:33:24.347 --> 01:33:26.708
einfach, elegant

01:33:26.708 --> 01:33:28.768
oder halt auch irgendwie

01:33:28.768 --> 01:33:31.007
Ja und auch die Wiederholung, du kannst nicht

01:33:31.007 --> 01:33:33.047
wenn du irgendwie eine Million

01:33:33.047 --> 01:33:35.208
gleiche Objekte hast, dann die alle

01:33:35.208 --> 01:33:37.287
10 Byte benutzen, aber die Keys

01:33:37.287 --> 01:33:39.027
die du da halt reinschmeißt, die sind alle

01:33:39.027 --> 01:33:41.287
diesen Gigabyte-weise Keys reingeschrieben.

01:33:41.927 --> 01:33:42.648
Das Komma,

01:33:42.887 --> 01:33:43.807
keine Kommentare,

01:33:44.627 --> 01:33:46.827
Trailing-Komma

01:33:46.827 --> 01:33:47.268
und

01:33:47.268 --> 01:33:50.507
Jason Parsons geht inzwischen

01:33:50.507 --> 01:33:53.188
quasi schneller, als du von der Platte

01:33:53.188 --> 01:33:53.668
lesen kannst.

01:33:54.708 --> 01:33:56.627
Ich lese mal das Blog von

01:33:56.627 --> 01:33:58.168
Daniel

01:33:58.168 --> 01:34:00.208
Lemire,

01:34:00.367 --> 01:34:01.607
ich weiß nicht genau, wie man das ausspricht,

01:34:01.867 --> 01:34:02.547
kanadischer

01:34:02.547 --> 01:34:05.648
Computer Science.

01:34:05.768 --> 01:34:08.087
Ich habe das auch in meinem RSS-Reader drin,

01:34:08.087 --> 01:34:10.287
in diesem Blog, aber der schreibt so viel

01:34:10.287 --> 01:34:10.768
gute Sachen.

01:34:11.047 --> 01:34:12.668
Ja, das muss man auch irgendwie mal lesen.

01:34:13.067 --> 01:34:15.668
Der war letztens in irgendeinem

01:34:15.668 --> 01:34:18.168
von dem IEEE

01:34:18.168 --> 01:34:19.967
Podcast, Software Engineering Radio

01:34:19.967 --> 01:34:21.688
oder so, wo er auch drüber geschrieben hat,

01:34:21.987 --> 01:34:22.967
äh, geredet hat.

01:34:25.268 --> 01:34:25.927
Der hat

01:34:25.927 --> 01:34:27.747
Sam D. Jason, glaube ich,

01:34:27.827 --> 01:34:28.547
geschrieben.

01:34:29.627 --> 01:34:31.967
Und wie man das halt machen kann und was, wo man

01:34:31.967 --> 01:34:33.768
aufpassen muss und man kann

01:34:33.768 --> 01:34:35.867
Jason parsen quasi beliebig schnell

01:34:35.867 --> 01:34:37.987
hinbekommen. Also sie waren

01:34:37.987 --> 01:34:39.768
über mehrere Gigabyte pro Sekunde und

01:34:39.768 --> 01:34:42.247
Ja gut, aber mehrere Gigabyte pro Sekunde

01:34:42.247 --> 01:34:44.327
impliziert ja immer noch, dass du mehrere Gigabyte

01:34:44.327 --> 01:34:46.228
hast, die du pausen musst.

01:34:47.127 --> 01:34:47.927
Und wenn du dann stattdessen

01:34:47.927 --> 01:34:50.107
Protobuff hast und nur 100 Megabyte hast, dann ist

01:34:50.107 --> 01:34:51.927
das natürlich weniger. Gut, aber

01:34:51.927 --> 01:34:52.787
sei es drum.

01:34:53.507 --> 01:34:55.887
Die eigentliche Aussage ist ja, jede von diesen

01:34:55.887 --> 01:34:58.027
Beschreibungssprachen hat Vor- und Nachteile

01:34:58.027 --> 01:34:59.927
und jede hat ihre Krankheiten. Und Tommel

01:34:59.927 --> 01:35:01.987
ist da nichts anderes. Tommel ist halt eine

01:35:01.987 --> 01:35:03.847
relativ simple

01:35:03.847 --> 01:35:05.827
Sprache, so ein bisschen an

01:35:05.827 --> 01:35:07.847
INI angelehnt, damit man auch das schön

01:35:07.847 --> 01:35:09.688
im Texteditor haben können, damit du auch

01:35:09.688 --> 01:35:11.867
schön so auf quasi Dateiebene

01:35:11.867 --> 01:35:13.768
das machen kannst. Aber Jochen, würdest du

01:35:13.768 --> 01:35:15.847
tatsächlich irgendwo eine Schnittstelle machen, die Tommel verwendet?

01:35:16.967 --> 01:35:17.847
Also würdest du Tommel

01:35:17.847 --> 01:35:18.967
irgendwo schreiben?

01:35:21.347 --> 01:35:21.887
Ich habe

01:35:21.887 --> 01:35:23.507
das Gefühl, dass Tommel sowas ist, so eine

01:35:23.507 --> 01:35:25.648
Konfigurationssprache. Die wird manuell geschrieben

01:35:25.648 --> 01:35:26.708
und maschinell ausgelesen.

01:35:27.247 --> 01:35:29.708
Ich weiß nicht, ob ich auf die Idee käme,

01:35:29.807 --> 01:35:31.067
Tommel maschinell zu schreiben.

01:35:31.307 --> 01:35:32.148
Nee, wahrscheinlich nicht.

01:35:32.987 --> 01:35:35.127
Messagespeck oder sowas mit Python und dann

01:35:35.127 --> 01:35:36.927
eine genaue...

01:35:36.927 --> 01:35:38.807
Für automatische Sachen würde ich eher tatsächlich

01:35:38.807 --> 01:35:39.668
sowas wie JSON nehmen.

01:35:41.127 --> 01:35:43.107
Aber für Menschen ist JSON

01:35:43.107 --> 01:35:43.648
halt nicht so toll.

01:35:43.708 --> 01:35:45.247
Weil es die Default-Wahl ist.

01:35:47.168 --> 01:35:48.947
Und wenn es für Menschen nicht so toll ist, dann kannst du auch

01:35:48.947 --> 01:35:50.607
XML nehmen.

01:35:52.807 --> 01:35:53.768
Auf Dominik.

01:35:55.188 --> 01:35:56.887
Nein, Photobuff oder Messageback.

01:35:57.127 --> 01:35:58.688
Das würde ich gerne noch,

01:35:59.027 --> 01:36:00.688
wir sind jetzt auch schon ein bisschen dran, aber

01:36:00.688 --> 01:36:02.648
das würde ich gerne noch, das habe ich

01:36:02.648 --> 01:36:04.887
versucht zu sagen und habe es so irgendwie 20 Minuten

01:36:04.887 --> 01:36:05.587
lang nicht hingekriegt.

01:36:05.587 --> 01:36:08.668
und das hat mich irgendwie dann noch verfolgt.

01:36:10.188 --> 01:36:10.747
Also XML,

01:36:11.107 --> 01:36:12.668
warum das halt,

01:36:13.327 --> 01:36:14.867
also alle jammern immer drüber,

01:36:15.087 --> 01:36:17.027
aber warum das halt unter Umständen

01:36:17.027 --> 01:36:18.208
eine schlechte Idee ist oder was überhaupt,

01:36:18.708 --> 01:36:21.027
das ist auch wieder ein schönes Beispiel für, das hatten wir ja auch schon

01:36:21.027 --> 01:36:22.907
ein paar Mal, warum Abstraktion

01:36:22.907 --> 01:36:24.947
ist immer so Fluch und Segen, das ist immer so schwierig

01:36:24.947 --> 01:36:27.067
und XML hat halt auch so fiese

01:36:27.067 --> 01:36:28.827
Probleme, warum jammern da Leute immer so

01:36:28.827 --> 01:36:31.107
und ich hab dann irgendwie gesagt

01:36:31.107 --> 01:36:32.867
so, ja, CSV

01:36:32.867 --> 01:36:35.127
gefällt mir viel besser als XML,

01:36:35.127 --> 01:36:52.787
weil ich war ja lange in diesem Datenexport-Import-Geschäft tätig und nach viel Schmerzen wurde jedem, der halt irgendwie an diesem Datenaustauschpunkt teilnehmen wollte, geraten von den Kundenberatern halt immer so, nimm CSV, nimm nicht XML.

01:36:52.787 --> 01:36:54.427
Wir können XML, klar.

01:36:55.007 --> 01:36:56.407
Du kannst uns auch XML geben, das geht.

01:36:56.907 --> 01:36:58.527
Mach es nicht. Nimm CSV.

01:36:59.527 --> 01:36:59.827
Und

01:36:59.827 --> 01:37:02.787
ich dachte auch nur so, ich würde immer CSV

01:37:02.787 --> 01:37:03.787
vorziehen und

01:37:03.787 --> 01:37:05.387
gegenüber XML.

01:37:07.668 --> 01:37:08.487
Wieso das denn?

01:37:08.747 --> 01:37:10.768
CSV ist ja noch viel schrecklicher, da ist ja gar nichts

01:37:10.768 --> 01:37:11.487
definiert und so.

01:37:11.527 --> 01:37:14.208
Wenn auf Python Readability Counts?

01:37:15.168 --> 01:37:16.327
Nee, das ist gar nicht so der Punkt.

01:37:17.268 --> 01:37:18.487
Sondern der Punkt ist eher dieses

01:37:18.487 --> 01:37:20.487
Abstraktionsding aus meiner Perspektive.

01:37:20.487 --> 01:37:22.287
Es gibt möglicherweise auch Anwendungen,

01:37:22.287 --> 01:37:24.287
Es gibt auch Anwendungen, nicht möglicherweise ganz sicher,

01:37:24.747 --> 01:37:26.127
wo XML viel besser ist und wo

01:37:26.127 --> 01:37:28.447
CSV schrecklich ist, aber

01:37:28.447 --> 01:37:30.347
Jochen, du verkaufst gerade alle Zuhörer.

01:37:30.527 --> 01:37:32.467
Das ist ganz schlimm, dir zuzuhören.

01:37:32.587 --> 01:37:33.987
Haben wir jetzt noch welche jetzt gerade?

01:37:34.607 --> 01:37:36.347
CSV ist besser, XML ist besser.

01:37:37.807 --> 01:37:38.287
Aber

01:37:38.287 --> 01:37:40.148
es ist schon interessant, wo dann so

01:37:40.148 --> 01:37:42.168
Probleme passieren, weil oft

01:37:42.168 --> 01:37:44.007
hast du halt kaputte Prozesse innerhalb von

01:37:44.007 --> 01:37:44.967
Unternehmer, das hatten wir auch schon,

01:37:46.027 --> 01:37:48.107
und wenn du jetzt XML

01:37:48.107 --> 01:37:50.287
erzeugst und das irgendwo hinschiebst,

01:37:51.107 --> 01:37:51.347
dann

01:37:51.347 --> 01:37:53.947
bist du ja gezwungen. Zum Beispiel, wenn du das auch

01:37:53.947 --> 01:37:55.827
gegen die DTD validierst oder so.

01:37:55.947 --> 01:37:57.447
Das musst du überhaupt irgendwie. Die meisten

01:37:57.447 --> 01:38:00.067
XML-Schreibbibliotheken weigern

01:38:00.067 --> 01:38:02.007
sich halt einfach, irgendwie was rauszuschreiben,

01:38:02.107 --> 01:38:03.427
was halt nicht okay ist als XML.

01:38:04.168 --> 01:38:06.228
Das heißt, wenn du irgendwie Mist machst

01:38:06.228 --> 01:38:07.787
und dann aber was rausschreiben willst,

01:38:07.847 --> 01:38:08.728
dann funktioniert das halt nicht.

01:38:09.467 --> 01:38:11.708
Und dann kann es sein,

01:38:12.007 --> 01:38:13.747
dass die Probleme, dass es halt aus einem

01:38:13.747 --> 01:38:15.268
kleinen Fehler ein großer Fehler wird.

01:38:15.867 --> 01:38:17.567
Und das ist halt das eigentlich üble Problem.

01:38:17.787 --> 01:38:19.487
Also sozusagen das praktische Beispiel, was

01:38:19.487 --> 01:38:21.247
immer und immer wieder passiert ist halt oft,

01:38:21.347 --> 01:38:22.827
sowas wie, wir kriegen CSV

01:38:22.827 --> 01:38:25.047
und dann passieren da so Dinge

01:38:25.047 --> 01:38:27.107
drin wie, naja, also ein Teil

01:38:27.107 --> 01:38:29.347
der Zeilen ist halt UTF-8

01:38:29.347 --> 01:38:31.168
irgendwie Encoding verwendet, ein Teil

01:38:31.168 --> 01:38:33.127
der Zeilen irgendwie Windows, ein Teil der Zeilen

01:38:33.127 --> 01:38:35.367
Latin One. Großartig.

01:38:35.527 --> 01:38:36.668
Großartig kann man sagen, ja so,

01:38:36.827 --> 01:38:38.867
das nehme ich nicht, das geht nicht,

01:38:38.967 --> 01:38:40.887
das ist irgendwie kaputt, kann man machen,

01:38:41.367 --> 01:38:43.007
aber ist halt auch

01:38:43.007 --> 01:38:44.648
Geld, das dann verloren geht unter Umständen

01:38:44.648 --> 01:38:46.688
und ehrlich gesagt, wenn ich jetzt sage,

01:38:46.887 --> 01:38:48.447
ich paste jetzt diese Zeile

01:38:48.447 --> 01:38:50.747
und dann kriege ich halt irgendwie eine Exception

01:38:50.747 --> 01:38:53.867
oder ich weiß nicht, ich merke halt so, oh, das ist hier was ganz anderes, das ist kein UTF-8,

01:38:54.367 --> 01:38:56.747
dann zu sagen, na gut, dann probiere ich halt mal Latin1, okay, geht.

01:38:57.347 --> 01:39:00.168
Ja, oder so, das ist nicht so schlimm, das geht, das kann man programmieren, das geht.

01:39:00.688 --> 01:39:03.527
Ich kann jetzt immer noch parsen, ja, selbst wenn solche Dinge passieren wie,

01:39:04.127 --> 01:39:10.467
ja, das ist halt jetzt nicht mehr Semikolon der Spalten-Trenner, sondern Komma oder Tab

01:39:10.467 --> 01:39:12.587
oder da gab es doch nicht so ein Zeichen für.

01:39:12.827 --> 01:39:15.587
Ja, have the separated values, das ist mein eigener kleiner Kreuzzug.

01:39:17.168 --> 01:39:20.487
Genau, das kann ich auch irgendwie erkennen und dann kann ich damit irgendwie umgehen

01:39:20.487 --> 01:39:22.327
und wenn man das halt ein paar Jahre macht, dann hat man halt

01:39:22.327 --> 01:39:24.327
irgendwie ein paar Sachen. Da kannst du gegenschmeißen,

01:39:24.347 --> 01:39:26.067
was du willst, der passt, ist alles egal. Geht.

01:39:26.527 --> 01:39:28.407
So. Okay, ist Aufwand und ist

01:39:28.407 --> 01:39:30.487
hässlich und macht keinen Spaß, aber es geht

01:39:30.487 --> 01:39:32.527
irgendwie. Und die

01:39:32.527 --> 01:39:34.327
meisten Probleme bei CSV sind so, dass man die

01:39:34.327 --> 01:39:36.247
schon irgendwie in den Griff kriegt. Man muss

01:39:36.247 --> 01:39:37.947
halt irgendwie wollen, aber

01:39:37.947 --> 01:39:40.168
ja, es geht auf jeden Fall.

01:39:40.228 --> 01:39:42.728
Man kann sich aus diesem Problem wieder rausrecovern.

01:39:43.067 --> 01:39:44.287
Bei XML ist es oft so, dass

01:39:44.287 --> 01:39:46.228
du Probleme halt dann siehst, aus denen

01:39:46.228 --> 01:39:48.087
du dich überhaupt nicht mehr rausrecovern kannst,

01:39:48.168 --> 01:39:50.268
wie zum Beispiel, es kommt halt ein syntaktisch korrektes XML,

01:39:50.487 --> 01:39:52.327
aber

01:39:52.327 --> 01:39:54.127
das ist halt leer

01:39:54.127 --> 01:39:57.107
und jetzt bedeutet halt leer halt zum Beispiel sowas wie

01:39:57.107 --> 01:39:59.208
naja, lösche alle

01:39:59.208 --> 01:40:01.648
Dinge, die halt vorher da waren

01:40:01.648 --> 01:40:03.047
was halt

01:40:03.047 --> 01:40:05.107
ein katastrophaler Fehler sein kann

01:40:05.107 --> 01:40:07.047
wo dann Rechtsstreit

01:40:07.047 --> 01:40:07.547
draus wird

01:40:07.547 --> 01:40:11.228
die Frage ist, was machst du denn

01:40:11.228 --> 01:40:13.247
an der Stelle, du siehst halt, okay, jetzt kommt hier dieses Ding

01:40:13.247 --> 01:40:14.668
und dann denkst du so, okay

01:40:14.668 --> 01:40:16.228
was willst du denn jetzt

01:40:16.228 --> 01:40:18.567
als Programmlogik machen

01:40:18.567 --> 01:40:19.287
willst du sagen

01:40:19.287 --> 01:40:22.007
Nö, das

01:40:22.007 --> 01:40:24.087
führe ich jetzt nicht aus, weil das kommt mir

01:40:24.087 --> 01:40:26.188
irgendwie komisch vor, landest du im Rechtsstreit

01:40:26.188 --> 01:40:27.827
Du führst das aus

01:40:27.827 --> 01:40:30.067
viel Geld geht verloren, du landest

01:40:30.067 --> 01:40:31.827
in einem Rechtsstreit, du hast nur schlechte Optionen

01:40:31.827 --> 01:40:34.047
du hast nicht die Option so, okay, wir machen das

01:40:34.047 --> 01:40:35.967
in Coding nochmal ein bisschen anders und dann versuchen wir das irgendwie anders

01:40:35.967 --> 01:40:37.987
zu parsen, dann geht's, sondern du bist eigentlich nur

01:40:37.987 --> 01:40:40.007
bei, eigentlich wahrscheinlich müsst du dann irgendwie

01:40:40.007 --> 01:40:41.987
alarmieren und dann müsste jemand irgendwie einen anrufen

01:40:41.987 --> 01:40:44.067
oder so, aber das ist halt auch dann

01:40:44.067 --> 01:40:45.607
einfach Kacke, ja

01:40:45.607 --> 01:40:47.947
das ist einfach, und solche Sachen

01:40:47.947 --> 01:40:49.768
hast du halt bei, wenn die

01:40:49.768 --> 01:40:51.947
Fehler nicht mehr, also die Idee bei XML ist so ein bisschen

01:40:51.947 --> 01:40:53.607
wenn du auf der syntaktischen, also

01:40:53.607 --> 01:40:55.867
wenn man sagt halt, ah, wir haben so viele Probleme mit diesen

01:40:55.867 --> 01:40:57.907
Syntax und so, wir machen jetzt

01:40:57.907 --> 01:40:59.887
ein Format, wo das validiert ist, dass das nicht mehr passieren

01:40:59.887 --> 01:41:01.947
kann, ja, und dann hast du halt

01:41:01.947 --> 01:41:03.867
sozusagen mit dieser

01:41:03.867 --> 01:41:05.887
Art Wacky Mole zu spielen, ja, dann kommt

01:41:05.887 --> 01:41:07.887
das Ding halt an einer anderen Stelle wieder hoch und zwar auf einer

01:41:07.887 --> 01:41:09.607
semantischen Ebene, wo du gar nichts mehr machen kannst

01:41:09.607 --> 01:41:11.688
oder wo es viel schwerer ist, damit umzugehen mit dem Fehler

01:41:11.688 --> 01:41:13.907
und ja, das ist halt

01:41:13.907 --> 01:41:15.907
so ein bisschen mein Problem mit XML

01:41:15.907 --> 01:41:17.987
und dass man das halt, man kriegt die Probleme

01:41:17.987 --> 01:41:18.607
nicht so einfach weg.

01:41:19.347 --> 01:41:21.447
Also wenn da Abteilungen sind und die

01:41:21.447 --> 01:41:23.567
verwenden alle Excel und dann in unterschiedlichen Formaten,

01:41:23.668 --> 01:41:25.648
dann ziehst du das irgendwie zusammen und versuchst es rauszuschreiben.

01:41:27.168 --> 01:41:31.567
Dann besser, du schreibst es irgendwie raus

01:41:31.567 --> 01:41:33.827
und es ist halt falsch und du kannst es hinterher noch irgendwie wieder fixen,

01:41:34.188 --> 01:41:36.027
als da fehlen dann halt bei zwei Abteilungen,

01:41:36.107 --> 01:41:37.827
die fehlen die Daten einfach und du weißt

01:41:37.827 --> 01:41:38.728
halt nicht, was passiert ist.

01:41:40.047 --> 01:41:41.847
Das ist so ein bisschen die Debatte zwischen

01:41:41.847 --> 01:41:43.887
be lenient with what you accept

01:41:43.887 --> 01:41:45.887
and strict with what you create.

01:41:45.907 --> 01:41:48.347
Robustensprinciple.

01:41:48.807 --> 01:41:49.728
Ja, das ist

01:41:49.728 --> 01:41:52.228
Programming by Contract und wenn du

01:41:52.228 --> 01:41:53.708
das nicht 100% erfüllst, dann ist es halt weg.

01:41:54.728 --> 01:41:55.347
Ja, also

01:41:55.347 --> 01:41:58.007
schmeiße ich alles weg, wenn ich halt irgendwie

01:41:58.007 --> 01:41:59.527
Mist bekomme auf meiner API.

01:41:59.987 --> 01:42:00.847
Sage ich harte Begegnungen.

01:42:00.847 --> 01:42:02.907
Das ist halt jemand, die

01:42:02.907 --> 01:42:04.307
gar nicht benutzen kann, die API.

01:42:04.668 --> 01:42:06.847
Vielleicht weiß ich ja noch gar nicht, was

01:42:06.847 --> 01:42:08.807
da alles kommen soll. Vielleicht möchte

01:42:08.807 --> 01:42:10.768
ich das ja einfach irgendwie als Zeichenkette

01:42:10.768 --> 01:42:12.987
konvertieren und da trotzdem reinschreiben und wieder rausgeben,

01:42:13.067 --> 01:42:13.827
wenn da jemand nachfragt.

01:42:13.827 --> 01:42:16.387
selbst wenn das irgendwie gar nicht dem entspricht, was ich eigentlich

01:42:16.387 --> 01:42:17.947
dachte, was ich haben brauche.

01:42:18.728 --> 01:42:20.347
Das kommt auch so ein bisschen in Wellen, oder?

01:42:20.407 --> 01:42:22.347
Dieses Robustness-Principle. Für eine Weile

01:42:22.347 --> 01:42:23.307
lang war das total

01:42:23.307 --> 01:42:26.287
ja, wir akzeptieren alles und

01:42:26.287 --> 01:42:27.967
dann hast du so lustige Modi-Bake

01:42:27.967 --> 01:42:30.007
in deinem Notepad drin.

01:42:30.327 --> 01:42:31.567
Shit in, shit out, sagt man ja.

01:42:33.188 --> 01:42:34.247
Internet Explorer zeigt

01:42:34.247 --> 01:42:36.208
auf einmal alles auf Koreanisch an und dann

01:42:36.208 --> 01:42:38.347
schwingt das Pendel wieder in die

01:42:38.347 --> 01:42:40.247
andere Richtung, wo alles XML, XHTML sein

01:42:40.247 --> 01:42:42.307
muss und nur wenn das validiert, kannst du die Webseite

01:42:42.307 --> 01:42:43.268
auch überhaupt anzeigen.

01:42:43.827 --> 01:42:49.807
und dann schwingt es wiederum zu HTML5, wo das so, ja gut, wenn da ein HTML5-Teig drin ist, dann kannst du schon irgendwas draus machen.

01:42:52.487 --> 01:43:01.708
Ja, so persönlich ist mir aber das irgendwie, wir versuchen es irgendwie hinzukriegen, ist mir sympathischer als, wir machen jetzt eine Bürokratie und dann fällt uns auch das...

01:43:01.708 --> 01:43:04.387
Nein, der Kunde ist schuld, der Benutzer ist schuld, das ist immer die richtige Antwort.

01:43:06.447 --> 01:43:07.987
Ja, naja.

01:43:09.987 --> 01:43:12.427
Ja, schwierig, schwierig da auch, ja.

01:43:13.827 --> 01:43:16.287
wieder wie vorhin, es gibt Situationen,

01:43:16.407 --> 01:43:18.027
in denen es so ist und es gibt Situationen,

01:43:18.107 --> 01:43:18.527
in denen es so ist.

01:43:19.827 --> 01:43:21.247
Aber klar, vor allem, also ich meine,

01:43:21.708 --> 01:43:24.087
viele von diesen Datenschnittstellen

01:43:24.087 --> 01:43:25.787
sind ja zwischen

01:43:25.787 --> 01:43:27.427
Entitäten, die

01:43:27.427 --> 01:43:29.728
mehr oder minder professionell sind und

01:43:29.728 --> 01:43:31.927
dann ist es halt

01:43:31.927 --> 01:43:33.407
einfach pragmatisch zu sagen, okay,

01:43:33.787 --> 01:43:35.708
das kann halt sein, dass die das nicht

01:43:35.708 --> 01:43:37.287
100% richtig generieren können.

01:43:38.067 --> 01:43:39.527
Und wie geht man damit um?

01:43:41.728 --> 01:43:41.887
Und

01:43:41.887 --> 01:43:42.287
ja,

01:43:42.287 --> 01:43:45.188
Ja, okay

01:43:45.188 --> 01:43:47.347
Das hat jetzt aber nichts mehr mit Kubernetes zu tun

01:43:47.347 --> 01:43:48.787
Ich wollte gerade sagen, kube-control-apply

01:43:48.787 --> 01:43:50.927
In gewisser Weise schon, weil

01:43:50.927 --> 01:43:53.367
bei Kubernetes hast du halt auch so eine

01:43:53.367 --> 01:43:55.327
Abstraktionsschicht, die dann halt irgendwie

01:43:55.327 --> 01:43:57.547
du sagst, okay, ich zwinge dich dazu, dass du

01:43:57.547 --> 01:43:59.527
sagen kannst, wie viel Hauptspeicher du denn brauchst

01:43:59.527 --> 01:44:00.168
Ja, okay, gut

01:44:00.168 --> 01:44:02.467
Und dann kann es sein, dass du halt ein anderes Problem kriegst

01:44:02.467 --> 01:44:05.527
Das ist quasi das, was du vorhin sagen wolltest

01:44:05.527 --> 01:44:05.827
Genau

01:44:05.827 --> 01:44:09.547
Dass es Situationen gibt, in denen kannst du gar nicht sagen, wie viel Hauptspeicher du brauchst

01:44:09.547 --> 01:44:11.507
Also zumindest nicht dauerhaft oder zumindest nicht

01:44:11.507 --> 01:44:12.287
so richtig im Vordergrund.

01:44:12.307 --> 01:44:14.688
Das ist ein gutes Argument.

01:44:15.067 --> 01:44:16.407
Das ist halt so viel aufwendiger.

01:44:17.007 --> 01:44:18.607
Beziehungsweise du überprovisionierst.

01:44:18.847 --> 01:44:21.347
Du musst halt einfach quasi vom Worst Case ausgehen

01:44:21.347 --> 01:44:23.807
und der Worst Case

01:44:23.807 --> 01:44:24.347
ist halt,

01:44:25.487 --> 01:44:26.587
alle Menschen auf der Welt

01:44:26.587 --> 01:44:28.427
rufen gleichzeitig dieses Video ab und

01:44:28.427 --> 01:44:29.487
das

01:44:29.487 --> 01:44:31.768
musst du jetzt einplanen.

01:44:31.827 --> 01:44:33.087
Ja, und das musst du dann halt auch bezahlen.

01:44:33.447 --> 01:44:35.708
Ja genau, das musst du dann auch bezahlen, weil so viel hast du ja requestet.

01:44:35.847 --> 01:44:38.067
Also zum Beispiel für so einen Konzertticketanbieter wäre das vielleicht

01:44:38.067 --> 01:44:38.768
ein relevantes Problem.

01:44:39.708 --> 01:44:41.188
Ja, oder überall, wo du Spitzen hast.

01:44:41.507 --> 01:44:44.387
Es gibt ja überall Saisonalität, es gibt ja überall

01:44:44.387 --> 01:44:48.708
Zeitpunkte, wo mehr Traffic ist und wo weniger Traffic ist

01:44:48.708 --> 01:44:53.228
und Spannungsspitzen, aber das ist ja auch das Versprechen, das ist ja das Versprechen

01:44:53.228 --> 01:44:57.347
von Cloud, dass du diese Spitzen abfangen kannst, für die realen Kosten

01:44:57.347 --> 01:45:01.648
sag ich mal. In dem Moment mietest du dann halt mehr Rechenleistung

01:45:01.648 --> 01:45:05.527
als in anderen Momenten. Du mietest ja auf einmal halt 250.000 Rechner, die normalerweise

01:45:05.527 --> 01:45:08.648
aber auch nur 5, aber für das Wochenende, wo halt dann die Konzertkarten

01:45:08.648 --> 01:45:10.907
Ja, wo Taylor Swift eine Milliarde Dollar umsetzt

01:45:10.907 --> 01:45:12.427
mit ihren Konzertkarten, dann

01:45:12.427 --> 01:45:14.027
bricht dein System halt trotzdem zusammen.

01:45:15.027 --> 01:45:15.887
So war es ja.

01:45:20.127 --> 01:45:21.268
Ja gut, aber das

01:45:21.268 --> 01:45:24.527
ist so ein bisschen das eigentlich Frustrierende,

01:45:24.668 --> 01:45:26.587
finde ich, dass man aus technischer Sicht so

01:45:26.587 --> 01:45:28.208
viele Sachen sieht, die man machen könnte

01:45:28.208 --> 01:45:30.728
und dann macht aber trotzdem

01:45:30.728 --> 01:45:32.027
jemand so viel Geld mit

01:45:32.027 --> 01:45:34.427
Shell-Skripten, die jede Nacht

01:45:34.427 --> 01:45:36.188
alles neu starten und

01:45:36.188 --> 01:45:38.607
diese Personen, die sitzen

01:45:38.648 --> 01:45:40.107
an der richtigen Stelle. So ärgerlich.

01:45:40.907 --> 01:45:42.107
Wir könnten es alles viel besser.

01:45:44.648 --> 01:45:47.407
Das war ein Kauf-mich-Vortrag.

01:45:47.887 --> 01:45:48.688
Ja, jede

01:45:48.688 --> 01:45:50.787
Unterhaltung ist, jedes Gespräch ist

01:45:50.787 --> 01:45:51.547
ein Kauf-mich-Vortrag.

01:45:52.507 --> 01:45:54.547
Was meinst du, warum ich immer herkomme, Dominik?

01:45:54.587 --> 01:45:56.887
Ach so, natürlich. Für die ganzen großen Aufträge.

01:45:56.947 --> 01:45:58.587
Ja, dann habe ich alle schon über den Podcast

01:45:58.587 --> 01:45:59.467
an Landtag gezogen.

01:46:00.987 --> 01:46:02.467
Funktioniert jedes Mal. Immer.

01:46:02.907 --> 01:46:04.387
Also, liebe Zuhörer, wenn auch Sie

01:46:04.387 --> 01:46:06.827
Interesse haben an einem...

01:46:06.827 --> 01:46:08.188
An einem Pick.

01:46:08.648 --> 01:46:09.707
Ein Pick?

01:46:10.707 --> 01:46:11.728
Dominik, hast du einen Pick?

01:46:12.367 --> 01:46:14.347
Environs. Kennt ihr das?

01:46:14.427 --> 01:46:14.987
Was ist Environs?

01:46:15.367 --> 01:46:17.228
Kennt ihr Django Environ oder kennt ihr

01:46:17.228 --> 01:46:19.847
Python.env oder sowas?

01:46:20.507 --> 01:46:20.648
Genau.

01:46:23.367 --> 01:46:24.847
Environ, doch, ja, nicht ganz.

01:46:25.688 --> 01:46:26.867
Environ ist so ein anderes Paket,

01:46:26.947 --> 01:46:28.467
wo man halt Environment-Dateien

01:46:28.467 --> 01:46:30.907
lesen kann oder halt aus der Environment-Variablen

01:46:30.907 --> 01:46:32.648
dann irgendwann seine Sachen

01:46:32.648 --> 01:46:33.188
ins Projekt bekommt.

01:46:34.148 --> 01:46:36.987
Das ist so ein bisschen anders als Django Environ.

01:46:36.987 --> 01:46:38.987
irgendwie. Und das macht halt auch sowas, dass man

01:46:38.987 --> 01:46:40.027
halt irgendwie

01:46:40.027 --> 01:46:42.827
quasi auf das

01:46:42.827 --> 01:46:44.067
Environment irgendwie

01:46:44.067 --> 01:46:46.947
geordneter Form zugreifen kann. Genau, also

01:46:46.947 --> 01:46:48.707
mit Konvertierung direkt in die richtigen

01:46:48.707 --> 01:46:50.228
Datentypen und sowas. Ah, okay.

01:46:51.067 --> 01:46:51.607
Und ja.

01:46:53.668 --> 01:46:54.787
Finde ich ganz nett, also weil

01:46:54.787 --> 01:46:56.947
Dango Envyron habe ich sonst immer benutzt, ich versuche gerade alles umzuziehen

01:46:56.947 --> 01:46:57.247
und

01:46:57.247 --> 01:47:00.527
ist irgendwie schön. Ich weiß noch nicht, ist das einfach,

01:47:00.648 --> 01:47:02.707
intuitiv, funktioniert das? Du machst ein Env auf

01:47:02.707 --> 01:47:04.808
und machst dann Read Env von den Podfiles, die du haben willst

01:47:04.808 --> 01:47:06.168
und für dich. Apropos,

01:47:06.168 --> 01:47:08.188
wie nutzt ihr es? Schreibt ihr einfach tatsächlich

01:47:08.188 --> 01:47:10.168
Stumpf-Secrets irgendwo rein oder

01:47:10.168 --> 01:47:12.327
habt ihr da irgendwelche Secret-Vaults

01:47:12.327 --> 01:47:14.347
oder es gibt ja noch ganz andere

01:47:14.347 --> 01:47:15.648
Sachen, also man muss ja irgendwem vertrauen.

01:47:15.967 --> 01:47:17.387
Ich weiß nicht, ob ich das jetzt hier sagen will.

01:47:19.668 --> 01:47:20.447
Jochen's Secrets

01:47:20.447 --> 01:47:21.587
liegen auf einem offenen

01:47:21.587 --> 01:47:23.987
S3-Bucket, wo nur er

01:47:23.987 --> 01:47:24.747
die ID kennt.

01:47:25.787 --> 01:47:26.967
Nee, verschlüsselt im Git.

01:47:28.387 --> 01:47:29.887
Gut, das sind zwei unterschiedliche Probleme.

01:47:30.087 --> 01:47:32.148
Einmal, wie hält man die Secrets

01:47:32.148 --> 01:47:34.168
vor,

01:47:34.168 --> 01:47:36.007
bevor man deployed hat?

01:47:36.168 --> 01:47:36.527
sozusagen.

01:47:37.847 --> 01:47:40.087
Und wie hält man die Secrets eigentlich,

01:47:40.387 --> 01:47:41.387
wenn deployed ist, weil

01:47:41.387 --> 01:47:44.087
die Applikation ja irgendwie sie kennen

01:47:44.087 --> 01:47:46.047
muss. Und dafür können sie ja nicht mehr verschlüsselt

01:47:46.047 --> 01:47:47.867
sein. Ja, aber das ist doch das DRM-Problem, oder? Du kannst

01:47:47.867 --> 01:47:49.887
eine Nachricht nicht vor dem Empfänger verschlüsseln.

01:47:50.268 --> 01:47:51.967
Genau, genau, genau. Aber der

01:47:51.967 --> 01:47:53.087
Empfänger muss sie auch irgendwie kriegen.

01:47:53.907 --> 01:47:56.007
Ich benutze ja gerade einen proprietären Service

01:47:56.007 --> 01:47:57.327
für, den ich ganz gut finde.

01:47:57.927 --> 01:47:59.907
Doppler. Und also

01:47:59.907 --> 01:48:01.808
natürlich kennen die dann halt auch die ganzen Sachen, aber die

01:48:01.808 --> 01:48:03.587
machen sowas wie Automatic Rotation oder sowas.

01:48:03.587 --> 01:48:05.487
Da musst du nicht mehr anfassen und du kannst halt

01:48:05.487 --> 01:48:07.427
für jeden Entwickler irgendwie so eigene Sachen

01:48:07.427 --> 01:48:08.967
haben, der muss ja einfach nur noch sagen,

01:48:09.067 --> 01:48:10.787
Doppler-Login, Doppler-Setup, fertig.

01:48:11.507 --> 01:48:13.427
Für so ein Projekt. Oder halt Doppler-Use

01:48:13.427 --> 01:48:15.387
und der schreibt dann, wenn du willst, seine Dot-Ams rein oder so.

01:48:16.168 --> 01:48:16.987
Aber Moment,

01:48:17.168 --> 01:48:18.747
da liegen dann deine

01:48:18.747 --> 01:48:21.287
Secrets getrennt von allem anderen, also auch von

01:48:21.287 --> 01:48:23.247
deinen Repositories

01:48:23.247 --> 01:48:25.447
und deine Produktionsmaschine geht halt auch zu Doppler

01:48:25.447 --> 01:48:27.127
und zieht da die Secrets und

01:48:27.127 --> 01:48:29.168
schreibt sie nochmal irgendwo lokal hin?

01:48:29.668 --> 01:48:30.487
Oder holt sich die einfach?

01:48:31.247 --> 01:48:33.188
Oder du musst auch irgendwie auf Doppler zugreifen.

01:48:33.308 --> 01:48:34.607
Genau, du musst halt mit Token

01:48:34.607 --> 01:48:35.668
mit Token.

01:48:36.007 --> 01:48:38.127
Das Token musst du aber die Applikation irgendwie kennen.

01:48:38.127 --> 01:48:39.148
Das ist dann Masterkey.

01:48:39.987 --> 01:48:42.467
Wenn ich den kenne, dann kann ich alle Secrets abgreifen.

01:48:44.707 --> 01:48:46.487
Wie weißt du dieses Token?

01:48:46.707 --> 01:48:47.967
Du musst das vorhin nur

01:48:47.967 --> 01:48:49.587
und schreibst das dann ins Deployment-Skript.

01:48:51.347 --> 01:48:52.688
Du hast ein sekundäres

01:48:52.688 --> 01:48:53.987
System, wo dieses Token drin ist.

01:48:54.127 --> 01:48:56.407
Genau, eben. Weil wenn du das schon ein System hast,

01:48:56.487 --> 01:48:58.047
um dieses Secret, was sehr wichtig ist,

01:48:58.407 --> 01:49:00.207
zu deployen, warum deployst du dann nicht einfach

01:49:00.207 --> 01:49:01.027
auch alle anderen Sachen damit?

01:49:01.027 --> 01:49:02.907
Wo ist jetzt der Vorteil?

01:49:04.607 --> 01:49:07.507
Also du musst ja, also du kannst das ja irgendwie mit

01:49:07.507 --> 01:49:11.487
Ich muss gerade kurz überlegen

01:49:11.487 --> 01:49:13.308
Ja, also

01:49:13.308 --> 01:49:15.847
wie willst du die anderen Sachen da reinbekommen

01:49:15.847 --> 01:49:16.188
dann

01:49:16.188 --> 01:49:19.527
Also wenn ich jetzt so ein Deploy-Token

01:49:19.527 --> 01:49:21.467
hab, das halt dann einfach so zugreift auf die ganzen

01:49:21.467 --> 01:49:23.107
anderen Keys, die da irgendwo rumliegen und die vielleicht

01:49:23.107 --> 01:49:23.987
rotated sind oder was

01:49:23.987 --> 01:49:26.587
Das ist ein Token, okay, dann hab ich

01:49:26.587 --> 01:49:28.927
lesende Zugriff auf die ganzen Geheimnisse

01:49:28.927 --> 01:49:31.027
Aber

01:49:31.027 --> 01:49:33.168
wenn du die sonst eh nicht hinschreibst

01:49:33.168 --> 01:49:34.168
und ich verstehe den Unterschied nicht.

01:49:34.867 --> 01:49:37.188
Also mein Punkt wäre halt gerade,

01:49:37.268 --> 01:49:39.188
wenn du eine, dieses Ding muss ja auch geheim

01:49:39.188 --> 01:49:40.827
bleiben. Und wenn du einen

01:49:40.827 --> 01:49:43.308
Weg haben musst, wie du dieses Geheimnis

01:49:43.308 --> 01:49:44.648
deiner Applikation mitteilst,

01:49:44.967 --> 01:49:48.627
warum kannst du diesen Weg nicht benutzen,

01:49:48.707 --> 01:49:49.247
um alle anderen

01:49:49.247 --> 01:49:51.207
Geheimnisse, die du halt auch hast, der Applikation

01:49:51.207 --> 01:49:52.228
auch mitzuteilen, weil

01:49:52.228 --> 01:49:53.668
ja,

01:49:54.387 --> 01:49:56.327
musst du ihn ja eh haben.

01:49:56.507 --> 01:49:58.387
Oder machst du das einmal beim Setup?

01:50:01.327 --> 01:50:02.987
Manuelle Eingabe einmal, irgendwie

01:50:02.987 --> 01:50:04.587
mit PyTest. Ja, aber das kann sich ja auch ändern.

01:50:06.107 --> 01:50:06.747
Also du hast

01:50:06.747 --> 01:50:08.668
eigentlich nur die Menge der Secrets, die du

01:50:08.668 --> 01:50:09.907
mitgehen möchtest,

01:50:10.787 --> 01:50:11.728
verringert. Ja.

01:50:12.567 --> 01:50:14.827
Hast die Secrets komprimiert.

01:50:15.087 --> 01:50:16.627
Also du kannst halt zum Beispiel jetzt GitHub

01:50:16.627 --> 01:50:18.707
irgendwie sagen, bei den Secrets steht es drin,

01:50:18.747 --> 01:50:20.607
da könntest du aber auch sagen, du sagst dann halt, okay, dann machst du alle

01:50:20.607 --> 01:50:22.007
bei Secrets, bei GitHub Secrets.

01:50:24.347 --> 01:50:24.707
Ja.

01:50:26.347 --> 01:50:26.707
Okay,

01:50:26.808 --> 01:50:27.427
ich wollte ja gar nicht,

01:50:27.808 --> 01:50:29.927
es ist ein blödes Problem, aber

01:50:29.927 --> 01:50:31.728
was ich tatsächlich mache, ist ich,

01:50:31.728 --> 01:50:34.207
Oh doof, das ist echt doof, das zu sagen,

01:50:34.268 --> 01:50:34.607
aber

01:50:34.607 --> 01:50:39.747
Ich habe Sachen oft in

01:50:39.747 --> 01:50:41.907
Voice drin liegen und dann

01:50:41.907 --> 01:50:44.047
schreibe ich das halt tatsächlich in so einen Endfile

01:50:44.047 --> 01:50:45.547
und dann hat die Applikation das.

01:50:46.148 --> 01:50:48.148
Der Vorteil dabei ist, es ist eigentlich

01:50:48.148 --> 01:50:50.027
total einfach, ich muss mir keine Gedanken machen über

01:50:50.027 --> 01:50:51.967
irgendwelche externen Services oder so, ich habe auch kein System

01:50:51.967 --> 01:50:54.268
neben dem Repository, es ist alles im Repository

01:50:54.268 --> 01:50:55.827
drin, aber halt verschlüsselt.

01:50:56.487 --> 01:50:58.148
So, zack. Genau, aber

01:50:58.148 --> 01:51:00.268
die Nachteile sind

01:51:00.268 --> 01:51:04.467
und, äh, tja, wenn ein Angreifer irgendwie in meine Applikation reinkommt, dann...

01:51:04.467 --> 01:51:06.148
Ja, der muss auch entschlüsseln halt einfach.

01:51:06.308 --> 01:51:09.427
Nein, nein, der muss nichts entschlüsseln. Das ist halt das, was ein Angreifer...

01:51:09.427 --> 01:51:10.487
In der Applikation ist es ja...

01:51:10.487 --> 01:51:11.387
In der Applikation...

01:51:11.387 --> 01:51:12.207
Aber das ist ja immer so.

01:51:12.507 --> 01:51:18.228
Ja, aber er hat es halt besonders einfach, weil er muss einfach nur, er nimmt einmal das komplette Environment,

01:51:18.907 --> 01:51:25.487
ne, macht da JSON raus und schickt es an irgendeinen, ich hier alle Secrets in, alle Environments von allen irgendwie stormen.

01:51:25.607 --> 01:51:28.127
Und dann hinterher guckt er, ob da vielleicht ein ABS-Key drin war oder sowas.

01:51:28.607 --> 01:51:29.867
So, also das ist halt blöd.

01:51:29.867 --> 01:51:31.607
bei jeder HFM oder bei irgendwas,

01:51:31.747 --> 01:51:32.827
das muss ja irgendwie, muss die Sache liegen.

01:51:34.228 --> 01:51:35.567
Ja, aber genau,

01:51:35.747 --> 01:51:37.308
also das würde ich sagen, der Nachteil ist,

01:51:37.308 --> 01:51:38.148
es ist halt besonders, also ich,

01:51:38.907 --> 01:51:41.148
wenn jemand meine Applikation schafft aufzumachen, dann

01:51:41.148 --> 01:51:43.247
habe ich ein Problem.

01:51:43.347 --> 01:51:45.188
Ja gut, aber genau, also

01:51:45.188 --> 01:51:46.967
Envy Runs macht ja auch nichts anderes, als dass du irgendeine

01:51:46.967 --> 01:51:49.407
Pfeile oder irgendwie anders die Sachen reinzuschreiben.

01:51:49.587 --> 01:51:51.027
Ja, man könnte es ja auch anders machen, man könnte ja auch

01:51:51.027 --> 01:51:51.808
sowas machen wie,

01:51:52.447 --> 01:51:54.808
man packt es in ein

01:51:54.808 --> 01:51:57.007
Modul mit komischen Namen

01:51:57.007 --> 01:51:59.467
irgendwie und schreibt es halt als Python-Code

01:51:59.467 --> 01:52:01.887
irgendwo hin. Security by Obscurity.

01:52:02.047 --> 01:52:03.567
Und importiert den Kram,

01:52:03.668 --> 01:52:05.447
ja. Also, sag mal so, wirklich

01:52:05.447 --> 01:52:07.367
helfen tut es nicht, weil du kommst immer noch in den Kram ran,

01:52:07.707 --> 01:52:09.347
aber die automatischen

01:52:09.347 --> 01:52:11.188
Dinge, die halt über irgendwie eine

01:52:11.188 --> 01:52:13.247
Sicherheitslücke in Django gefunden und

01:52:13.247 --> 01:52:15.547
es läuft über alle Dinge, wo man

01:52:15.547 --> 01:52:17.467
erkennen kann, oh, das ist ein Django, läuft das halt

01:52:17.467 --> 01:52:19.648
drüber und holt alle Environments

01:52:19.648 --> 01:52:21.648
und damit alle Secrets. Das wird

01:52:21.648 --> 01:52:23.507
da nicht funktionieren. Das ist genauso, wenn ich den

01:52:23.507 --> 01:52:25.547
Standard-SSH-Port auf 2224

01:52:26.148 --> 01:52:27.668
ändere, damit das nicht... Ja, okay,

01:52:27.768 --> 01:52:29.207
es ist Security by Obscurity so ein bisschen.

01:52:29.207 --> 01:52:31.268
Was du dann eigentlich machen müsstest, ist, dass

01:52:31.268 --> 01:52:33.207
du irgendwelche Capabilities hast.

01:52:33.367 --> 01:52:35.107
Also, dass du die Datenverbindung nicht mehr

01:52:35.107 --> 01:52:37.047
direkt über Django machst,

01:52:37.188 --> 01:52:38.987
wo das Datenbankpasswort drinsteht, sondern

01:52:38.987 --> 01:52:40.567
dass es da einen getrennten Service gibt, der

01:52:40.567 --> 01:52:43.107
ein anderer Benutzer ist, der eine andere Technologie hat,

01:52:43.547 --> 01:52:45.347
den du nicht automatisch mit aufgemacht hast,

01:52:45.867 --> 01:52:47.107
der nur von dem Django-System

01:52:47.107 --> 01:52:48.987
erreichbar ist, wo du quasi sagen kannst, ich möchte jetzt

01:52:48.987 --> 01:52:50.047
eine Datenbankverbindung haben.

01:52:50.867 --> 01:52:52.967
Aber das ist ja dann auch schon wieder so viel

01:52:52.967 --> 01:52:53.287
Aufwand.

01:52:55.367 --> 01:52:57.107
Aber vielleicht fehlt

01:52:57.107 --> 01:52:57.887
deine Standardlösung.

01:52:57.887 --> 01:52:59.527
Vielleicht fehlt da eine

01:52:59.527 --> 01:53:01.668
Security-Onion um

01:53:01.668 --> 01:53:02.987
Django außenrum.

01:53:04.247 --> 01:53:05.007
Ja, ich weiß es nicht.

01:53:05.648 --> 01:53:08.067
Ich überlege immer noch, was für diesen profiteren Service spricht, weil das sind

01:53:08.067 --> 01:53:10.047
verschiedene Sachen, die halt dann davon getrennt sind, die vielleicht

01:53:10.047 --> 01:53:12.127
gar nicht so schlecht sind, weil wenn ich halt aufs Repo

01:53:12.127 --> 01:53:13.987
zugreifen kann oder auf die Secure-Sager komme, ist dann

01:53:13.987 --> 01:53:14.967
trotzdem an die Secures nicht dran.

01:53:16.527 --> 01:53:18.168
Es ist halt die Frage, wo liegt denn dieser Key

01:53:18.168 --> 01:53:20.247
zum Produktionsdeployment?

01:53:20.327 --> 01:53:22.027
Da kann man ja noch Benet-Safe und so davon

01:53:22.027 --> 01:53:22.427
und so.

01:53:23.607 --> 01:53:26.148
Ich muss mir nochmal genau überlegen, was davon der coole Vorteil ist.

01:53:27.047 --> 01:53:27.688
Also weil alternativ,

01:53:27.688 --> 01:53:29.967
Die anderen Lösungen finde ich alle nicht so

01:53:29.967 --> 01:53:30.287
convenient.

01:53:31.367 --> 01:53:33.527
Es gibt halt diesen Level von

01:53:33.527 --> 01:53:35.587
ich habe jetzt DevSecrets für den einen Entwickler

01:53:35.587 --> 01:53:37.247
als die anderen DevSecrets. Ich habe noch

01:53:37.247 --> 01:53:38.427
StagingSecrets, die stehen alle drin.

01:53:38.808 --> 01:53:40.907
Du kannst einfach mit einem Kommando aufsetzen, das funktioniert,

01:53:41.007 --> 01:53:43.287
das wird eingetragen, das ist nutzbar, das ist übertragbar.

01:53:43.707 --> 01:53:45.347
Du kannst einfach, wenn irgendwie ein Entwickler aussteigt,

01:53:45.407 --> 01:53:47.327
kannst du einfach den Account da rausnehmen oder so.

01:53:47.747 --> 01:53:49.188
Das sind alles Sachen, die ziemlich easy sind.

01:53:49.287 --> 01:53:50.867
Und du kannst automatisch dann halt so Sachen migrieren und so.

01:53:50.927 --> 01:53:53.067
Das ist schon nice. Und das hast du zum Beispiel

01:53:53.067 --> 01:53:54.747
alles bei diesen anderen Vaults nicht mit drin.

01:53:54.768 --> 01:53:55.688
Du musst alles selber anfassen.

01:53:57.688 --> 01:53:59.308
Ja, okay.

01:54:00.127 --> 01:54:00.768
Ja, na.

01:54:02.087 --> 01:54:03.107
Okay, was ist denn dein Pick?

01:54:04.027 --> 01:54:05.427
Mein Pick ist ein Artikel

01:54:05.427 --> 01:54:07.207
mit dem Titel

01:54:07.207 --> 01:54:09.447
An Interactive Intro to CRDTs.

01:54:10.268 --> 01:54:11.527
Ich bin ja ein großer Fan

01:54:11.527 --> 01:54:12.547
von CRDTs, also

01:54:12.547 --> 01:54:15.387
Concurrent Replicated Data Types.

01:54:16.367 --> 01:54:17.507
Wie sagt ihr dieses Wort?

01:54:18.347 --> 01:54:18.947
CRDT.

01:54:19.188 --> 01:54:19.507
WTF?

01:54:20.567 --> 01:54:21.107
Everpet?

01:54:22.587 --> 01:54:24.887
Also ich sag, keine Ahnung,

01:54:24.887 --> 01:54:25.847
Crudities?

01:54:25.847 --> 01:54:28.787
also

01:54:28.787 --> 01:54:32.887
Conflict-Free-Resolution-Dependent-Data-Times

01:54:32.887 --> 01:54:36.228
wo du

01:54:36.228 --> 01:54:40.487
Datenstrukturen hast, die sich selbst wieder in einen

01:54:40.487 --> 01:54:44.827
synchronen Zustand bringen. Also sowas wie Etherpad oder

01:54:44.827 --> 01:54:48.787
HedgeDoc oder Google Documents, wo zwei Leute gleichzeitig

01:54:48.787 --> 01:54:51.987
bearbeiten können und am Ende ist ein Dokument da, was bei beiden

01:54:51.987 --> 01:54:52.467
Google Wave.

01:54:53.247 --> 01:54:55.148
Google Wave war großartig.

01:54:56.247 --> 01:54:56.707
Live Share.

01:54:57.627 --> 01:55:00.027
Ja, und da gibt es viele Anwendungsfälle

01:55:00.027 --> 01:55:02.067
dafür und dieser Artikel ist eben eine

01:55:02.067 --> 01:55:03.127
interaktive

01:55:03.127 --> 01:55:06.007
Erklärung, wie diese Datentypen

01:55:06.007 --> 01:55:07.887
funktionieren und wie man die

01:55:07.887 --> 01:55:09.407
umsetzen kann. Und weil ich

01:55:09.407 --> 01:55:11.827
CRDTs großartig finde und jeder sollte die verwenden

01:55:11.827 --> 01:55:13.287
und überall und ich kann sie aber auch nicht,

01:55:14.707 --> 01:55:15.867
hat mir

01:55:15.867 --> 01:55:17.768
das sehr weitergeholfen und ich finde das

01:55:17.768 --> 01:55:19.308
sehr großartig. Und es ist auch schön so mit

01:55:19.308 --> 01:55:20.987
interaktiv. Also du kannst dann

01:55:20.987 --> 01:55:23.067
Hast dann zwei Malfenster und kannst

01:55:23.067 --> 01:55:24.947
im einen malen, kannst im anderen malen, kannst auch

01:55:24.947 --> 01:55:26.847
zwischendurch die Verbindung abschalten und dann sehen, wie die sich

01:55:26.847 --> 01:55:28.947
synchronisieren. Und das ist sehr, sehr

01:55:28.947 --> 01:55:30.487
schön gemacht und sehr anschaulich.

01:55:30.567 --> 01:55:32.347
Das muss ich unbedingt mal spielen. Das ist sehr gut.

01:55:33.027 --> 01:55:34.827
Das empfehle ich jedem. Deshalb ist das mein Pick

01:55:34.827 --> 01:55:36.487
in dieser Episode.

01:55:38.707 --> 01:55:38.867
Ja,

01:55:39.067 --> 01:55:39.947
ich hatte ja letztes Mal

01:55:39.947 --> 01:55:42.787
etwas gepickt, was ich in der Episode

01:55:42.787 --> 01:55:44.427
davor schon mal gepickt habe.

01:55:45.268 --> 01:55:47.007
Das war auch

01:55:47.007 --> 01:55:47.787
ein sehr leckerer Pick.

01:55:48.507 --> 01:55:50.927
Daher dachte ich mir heute, okay, mache ich mal etwas, was ich noch nicht

01:55:50.927 --> 01:55:52.688
gepickt habe und etwas, das

01:55:52.688 --> 01:55:54.547
absichtlich besonders unappetitlich und

01:55:54.547 --> 01:55:55.507
unverdrohlich daherkommt.

01:55:56.648 --> 01:55:57.607
Und das ist,

01:55:58.407 --> 01:56:00.268
ich weiß nicht, ob ihr das kennt, man sollte

01:56:00.268 --> 01:56:02.447
es aber trotzdem mal konsumieren,

01:56:03.648 --> 01:56:04.127
nämlich

01:56:04.127 --> 01:56:06.228
das

01:56:06.228 --> 01:56:06.887
VBOG.

01:56:07.787 --> 01:56:10.387
Das Software Engineering Body of Knowledge.

01:56:10.907 --> 01:56:12.627
Haben wir doch alle schon mal konsumiert,

01:56:12.747 --> 01:56:14.047
sonst wären wir doch gar keine Software Engineering.

01:56:14.947 --> 01:56:15.427
Also,

01:56:16.707 --> 01:56:18.967
ja, ich habe es mir jetzt auch irgendwie mal...

01:56:18.967 --> 01:56:19.907
Es sind auch nicht viele Seiten.

01:56:19.907 --> 01:56:21.627
Ich bin eh in der Ticketschubse

01:56:21.627 --> 01:56:23.047
Code Monkey, da ist ja ein anderer noch hier

01:56:23.047 --> 01:56:25.627
Es ist ein bisschen kompliziert

01:56:25.627 --> 01:56:27.467
reinzukommen, man muss halt irgendwie so ein Formular ausfüllen

01:56:27.467 --> 01:56:29.487
und dann kann man sich mal einen Downloadlink geschickt, aber

01:56:29.487 --> 01:56:31.747
genau, und dann kann man, da steht halt

01:56:31.747 --> 01:56:33.688
da sind halt alle solche, das ist eigentlich

01:56:33.688 --> 01:56:35.627
wenn man sich diese Fragen, die wir ja auch schon öfter

01:56:35.627 --> 01:56:37.688
diskutiert haben, was sind eigentlich die unterschiedlichen Arten von

01:56:37.688 --> 01:56:39.967
Tests, irgendwie Unit Integration

01:56:39.967 --> 01:56:41.627
oder sonst irgendwas, da wird das

01:56:41.627 --> 01:56:42.247
alles definiert

01:56:42.247 --> 01:56:45.487
Da wird einfach die Wahrheit

01:56:45.487 --> 01:56:46.527
festgelegt

01:56:46.527 --> 01:56:48.627
Genau, aber sozusagen, um diese Diskussion

01:56:48.627 --> 01:56:50.308
zu beenden, kann man immer sagen, ja, ich verwende jetzt die

01:56:50.308 --> 01:56:52.507
Definition hier aus dem Ding, sondern auch

01:56:52.507 --> 01:56:54.567
die ganzen Prozesse und so, das ist alles definiert und

01:56:54.567 --> 01:56:56.507
was sind die Requirements und wie funktioniert das und

01:56:56.507 --> 01:56:58.587
was gibt es alles für, weiß ich nicht, Dinge,

01:56:58.648 --> 01:56:59.987
die man so tun kann in der Softwareentwicklung.

01:57:00.148 --> 01:57:00.787
Welche Version ist das?

01:57:00.787 --> 01:57:08.347
Das ist das große Glossary für alle

01:57:08.347 --> 01:57:09.867
Dinge, die Softwareentwicklung.

01:57:09.867 --> 01:57:11.007
Ja, die Festlegung der Wahrheit.

01:57:11.607 --> 01:57:13.168
Die einzig wahre Wahrheit, TM.

01:57:13.168 --> 01:57:14.247
Die ist hier festgelegt.

01:57:14.808 --> 01:57:15.367
Na dann?

01:57:15.367 --> 01:57:18.587
Ja, sehr appetitlich Jochen, sehr schön

01:57:18.587 --> 01:57:21.327
Ja, das war auch schon der Picker

01:57:21.327 --> 01:57:22.107
Wohlbekommens

01:57:22.107 --> 01:57:25.268
Na gut

01:57:25.268 --> 01:57:26.387
Ja, dann

01:57:26.387 --> 01:57:29.907
eine nicht so Kubernetes-Kubernetes-Folge

01:57:29.907 --> 01:57:30.087
Aha

01:57:30.087 --> 01:57:32.047
Ja, doch, war auch schlau

01:57:32.047 --> 01:57:35.268
Ja, wir haben nicht so viel

01:57:35.268 --> 01:57:37.148
erklärt, wie man das benutzt, aber das müsst ihr selber

01:57:37.148 --> 01:57:37.447
rausfinden

01:57:37.447 --> 01:57:41.387
Aber wenn ihr wirkliche Dinge wissen wollt,

01:57:41.467 --> 01:57:42.688
dann dürft ihr nicht hierher zukommen

01:57:42.688 --> 01:57:45.268
Ja, es gibt auch so ein paar einfache Sachen, die der Golo hatte

01:57:45.268 --> 01:57:46.587
irgendwie. Vielleicht können wir das auch noch verlinken.

01:57:46.947 --> 01:57:48.607
So einen schönen YouTube-Einsteiger-Ding.

01:57:49.047 --> 01:57:51.107
Finde mal, wie du dein Minikube aufgesetzt hast

01:57:51.107 --> 01:57:52.688
und was man damit machen kann. Ja, genau. Also ich habe eigentlich

01:57:52.688 --> 01:57:54.567
Golos-Tutorials ein bisschen gemacht.

01:57:55.447 --> 01:57:57.627
Ist das dein zweiter Pick?

01:57:57.707 --> 01:57:58.707
Ist das der Pick, der

01:57:58.707 --> 01:58:00.587
Jochen's letztes Mal? Ja, das ist so ein YouTube-Kanal, der

01:58:00.587 --> 01:58:02.047
die Woche irgendwie so Sachen macht.

01:58:02.447 --> 01:58:05.067
Es ist relativ einfach auf Deutsch, ein bisschen langsamer als wir reden.

01:58:05.507 --> 01:58:06.247
Und es ist ganz nett.

01:58:06.907 --> 01:58:08.127
Vielleicht sollte man das am Anfang sagen.

01:58:10.287 --> 01:58:10.808
Alles klar?

01:58:11.067 --> 01:58:12.087
Okay. Dann

01:58:12.087 --> 01:58:13.947
bleibt uns gewogen.

01:58:13.947 --> 01:58:15.587
Schaltet uns ein, wann auch immer ihr hört

01:58:15.587 --> 01:58:16.887
Mittags, morgens, abends, nachts

01:58:16.887 --> 01:58:19.347
Einen guten Tag und gute Zeit

01:58:19.347 --> 01:58:20.467
Bis zum nächsten Mal

01:58:20.467 --> 01:58:21.627
Tschüss Johannes, bis bald
