WEBVTT

00:00:00.000 --> 00:00:04.280
Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 58.

00:00:04.280 --> 00:00:05.640
Wow, 58.

00:00:05.640 --> 00:00:07.220
Ja, gar nicht so schlecht, oder?

00:00:07.220 --> 00:00:10.740
Über was reden wir heute? Über Fluent Python. Hi, Jochen.

00:00:10.740 --> 00:00:13.060
Jo, hallihallo, Dominik. Herzlich willkommen.

00:00:13.060 --> 00:00:14.240
Und hi, Johannes.

00:00:14.240 --> 00:00:15.120
Johannes, hi.

00:00:15.120 --> 00:00:15.960
Schön, dass du da bist.

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

00:00:18.080 --> 00:00:19.440
Wir hatten dich ja schon ein paar Mal hier, habe ich gehört.

00:00:19.440 --> 00:00:24.520
Ich war schon, ich glaube, ein- oder zweimal oder so ungefähr dabei, ja.

00:00:24.520 --> 00:00:27.120
Ja, glaube ich auch. Anderthalb oder so.

00:00:28.260 --> 00:00:32.380
Wir wollen heute über ein Buch sprechen, Fluent Python, von Luciano Ramalho.

00:00:32.380 --> 00:00:34.360
Richtig ausgesprochen? Ich weiß nicht, genau.

00:00:34.360 --> 00:00:37.200
Ja, oder das haben wir uns so ein bisschen als Vorlage hergenommen.

00:00:37.200 --> 00:00:41.820
Ich würde eher denken, wir, also, es wurde, es wurde, wir hatten,

00:00:41.820 --> 00:00:43.200
Warum sprechen wir denn über ein Buch?

00:00:43.200 --> 00:00:46.500
Uns erreichten, genau, uns erreichten irgendwie Zuschriften, die sagten,

00:00:46.500 --> 00:00:49.280
ah, mach doch mal ein bisschen was mehr für Anfänger und irgendwie mehr.

00:00:49.280 --> 00:00:51.620
Und dann hast du dir das tollste Buch ausgedrückt, wo du dann.

00:00:51.620 --> 00:00:54.800
Mein, mein, mein, tatsächlich mein Lieblings, Lieblings-Python-Buch.

00:00:54.800 --> 00:00:57.500
Und dann dachte ich, ah ja, da kann man ja vielleicht mal so ein bisschen durchgehen.

00:00:57.500 --> 00:00:58.160
Ja.

00:00:58.160 --> 00:00:58.600
Dass da so die.

00:00:58.600 --> 00:01:01.440
Ich lese mal kurz aus dem Buch vor, weil du sagtest ja, du bist ein Anfänger.

00:01:01.440 --> 00:01:02.180
Ja, aber ein Anfänger, ja.

00:01:02.180 --> 00:01:05.560
If you are just learning Python, this book is going to be hard to follow.

00:01:05.560 --> 00:01:07.980
Not only that, if you read it too early in your Python,

00:01:07.980 --> 00:01:11.420
it may give you the best and every Python-Scription-level-special-message

00:01:11.420 --> 00:01:13.220
and metaprogramming-tricks und so weiter.

00:01:13.220 --> 00:01:15.900
Also, da steht für alle Leute, die es nicht verstanden haben,

00:01:15.900 --> 00:01:17.140
es ist kein Anfängerbuch.

00:01:17.140 --> 00:01:19.540
Ja, ja, gut, aber wir machen ja jetzt nicht Metaprogramming.

00:01:19.540 --> 00:01:21.100
Also, Metaprogramming-Zeugs ist da auch drin,

00:01:21.100 --> 00:01:22.760
aber das machen wir ja jetzt gar nicht, noch nicht.

00:01:22.760 --> 00:01:26.420
Okay, dann steigen wir leicht ein mit Datenstrukturen und sowas.

00:01:26.960 --> 00:01:30.480
Genau, wir fangen jetzt mit so ganz grundlegenden Dingen dann an.

00:01:30.480 --> 00:01:33.000
Nicht, dass wir Struktur hätten in dieser Folge, aber wir versuchen es heute.

00:01:33.000 --> 00:01:33.960
Ja, so ein bisschen.

00:01:33.960 --> 00:01:36.860
Also, wir hatten ja auch schon mal was zu Dicts gemacht und zu Listen.

00:01:36.860 --> 00:01:37.320
Ja.

00:01:37.320 --> 00:01:39.040
Ich weiß nicht, ob wir schon Strings hatten.

00:01:39.040 --> 00:01:39.880
Hatten wir, glaube ich, noch nicht.

00:01:39.880 --> 00:01:41.580
Also, wir haben darüber schon öfter gesprochen,

00:01:41.580 --> 00:01:43.860
aber ich glaube, wir haben tatsächlich noch keine Folge dazu gemacht.

00:01:43.860 --> 00:01:46.260
Steht noch auf unserer Möchten-wir-gerne-machen-Liste.

00:01:46.260 --> 00:01:48.220
Aber vielleicht jetzt noch mal zu News.

00:01:48.220 --> 00:01:50.880
Gibt es denn was Neues in Python, in der Python-Community?

00:01:50.880 --> 00:01:53.660
Ja, also, seitdem wir das letzte Mal aufgenommen haben,

00:01:53.660 --> 00:01:55.340
ist nicht so wahnsinnig viel passiert.

00:01:55.340 --> 00:01:56.380
Ist jetzt auch gar nicht mehr her.

00:01:56.380 --> 00:01:56.940
Letzte Woche war YouTube.

00:01:56.960 --> 00:01:57.640
Euro-Python, Jürgen.

00:01:57.640 --> 00:01:59.400
Ach ja, ja, Euro-Python.

00:01:59.400 --> 00:02:00.320
Wie war denn die Euro-Python?

00:02:00.320 --> 00:02:01.340
War gut, hat Spaß gemacht.

00:02:01.340 --> 00:02:02.000
Ja, war cool.

00:02:02.000 --> 00:02:05.700
Hat sehr viel nette Leute kennengelernt und mit ihnen geschnackt,

00:02:05.700 --> 00:02:06.280
wie das halt so ist.

00:02:06.280 --> 00:02:08.420
Ich weiß aber nicht, ob das einen News-Charakter hat.

00:02:08.420 --> 00:02:10.100
Also, außer mich persönlich natürlich.

00:02:10.100 --> 00:02:14.140
Was ich sehr genossen habe, war tatsächlich Luca Schlanger

00:02:14.140 --> 00:02:16.460
und der Python-Rapple-3.13-Talk,

00:02:16.460 --> 00:02:18.960
der quasi der letzte war vor der Abschlussrede,

00:02:18.960 --> 00:02:23.040
wo man so ein bisschen interaktive Möglichkeiten sehen konnte

00:02:23.040 --> 00:02:24.140
von dem, was so möglich ist.

00:02:24.140 --> 00:02:26.620
Es war so ein bisschen eine Mischung aus iPython

00:02:26.620 --> 00:02:26.940
mit Python.

00:02:26.960 --> 00:02:29.820
Und man konnte richtig coole Sachen machen

00:02:29.820 --> 00:02:31.600
und Bindings und Fancy-Stuff.

00:02:31.600 --> 00:02:33.360
Ist so ein bisschen ein Spaß-Talk gewesen.

00:02:33.360 --> 00:02:34.340
Also, er hat dabei Musik gemacht,

00:02:34.340 --> 00:02:35.240
hat Euro-Rack angeschlossen

00:02:35.240 --> 00:02:36.900
und seine MIDI-Synthesizer damit bedient.

00:02:36.900 --> 00:02:38.480
Also, genau war mein Ding.

00:02:38.480 --> 00:02:39.160
Ja.

00:02:39.160 --> 00:02:40.880
Fanden die Talks raus und schaut doch mal rein.

00:02:40.880 --> 00:02:42.160
Ist mit Sicherheit sehr nett.

00:02:42.160 --> 00:02:44.620
Und was ich auch ganz gut fand,

00:02:44.620 --> 00:02:46.700
war, wir haben alle relativ viel darüber diskutiert,

00:02:46.700 --> 00:02:48.700
was Armin Ronacher so erzählt hat zu,

00:02:48.700 --> 00:02:51.360
was scheiße läuft in Python,

00:02:51.360 --> 00:02:53.480
und zwar das ganze Packaging-Ding und so.

00:02:53.480 --> 00:02:53.680
Ja.

00:02:53.680 --> 00:02:55.460
Das wissen, sind wir ja wahrscheinlich

00:02:55.460 --> 00:02:56.420
alle derselben Meinung.

00:02:56.960 --> 00:02:58.920
Dass es da irgendwann mal so ein Tool geben könnte,

00:02:58.920 --> 00:03:01.320
das sowas macht wie vielleicht Cargo für Rust oder so.

00:03:01.320 --> 00:03:03.160
Ja, nein, der Meinung bin ich aber nicht.

00:03:03.160 --> 00:03:05.560
Also, ich bin der Meinung,

00:03:05.560 --> 00:03:06.840
dass es schön wäre, wenn wir sowas hätten.

00:03:06.840 --> 00:03:08.000
Aber ich glaube, ich fürchte,

00:03:08.000 --> 00:03:09.060
dass wir sowas nicht kriegen können.

00:03:09.060 --> 00:03:10.220
Okay, aber das ist ja was anderes.

00:03:10.220 --> 00:03:11.880
Aber da gibt es auch schon 23 Tools,

00:03:11.880 --> 00:03:12.440
die sowas machen.

00:03:12.440 --> 00:03:12.920
Ja, genau.

00:03:12.920 --> 00:03:14.260
Armin meinte auch,

00:03:14.260 --> 00:03:15.100
da gibt es halt noch ein 24.

00:03:15.100 --> 00:03:15.460
Das ist jetzt.

00:03:15.460 --> 00:03:17.200
Aber das ist so,

00:03:17.200 --> 00:03:18.880
das ist der alte XKCD-Comic.

00:03:18.880 --> 00:03:22.200
Aber das ist so ein bisschen,

00:03:22.200 --> 00:03:23.760
vielleicht doch.

00:03:23.760 --> 00:03:25.320
Also, vielleicht sollte man einfach miteinander reden

00:03:25.320 --> 00:03:26.720
und vielleicht doch so ein Ding,

00:03:26.960 --> 00:03:28.780
bauen, was dann übrig bleibt.

00:03:28.780 --> 00:03:30.620
Weil man braucht halt was,

00:03:30.620 --> 00:03:32.120
was diese ganze Quark-Sache,

00:03:32.120 --> 00:03:34.480
wie Pakete managen und PIP-Tools

00:03:34.480 --> 00:03:37.260
und PyEnv und Conda

00:03:37.260 --> 00:03:38.600
und, und, und, und, und, und, und.

00:03:38.600 --> 00:03:41.660
Irgendwie so schön nutzbar macht,

00:03:41.660 --> 00:03:42.260
dass irgendjemand,

00:03:42.260 --> 00:03:43.340
der das noch alles nicht kennt,

00:03:43.340 --> 00:03:45.160
einfach mal so ein Curl macht

00:03:45.160 --> 00:03:46.140
auf so eine Installation

00:03:46.140 --> 00:03:47.500
und dann hat der ein Tool,

00:03:47.500 --> 00:03:48.520
mit dem das alles geht.

00:03:48.520 --> 00:03:50.360
Das wäre schon ziemlich gut.

00:03:50.360 --> 00:03:51.020
Also, so vom.

00:03:51.020 --> 00:03:51.900
Ja.

00:03:51.900 --> 00:03:53.580
Vom Paint-Faktor her.

00:03:53.580 --> 00:03:54.740
Und immer dann,

00:03:54.740 --> 00:03:55.980
wenn ich jetzt Leuten versucht habe,

00:03:55.980 --> 00:03:56.880
das beizubringen,

00:03:56.960 --> 00:03:57.580
oder versucht habe,

00:03:57.580 --> 00:03:58.540
bei denen Python zu installieren,

00:03:58.540 --> 00:04:00.320
oder auf so einer Schulung

00:04:00.320 --> 00:04:00.980
irgendwie kleine Sachen

00:04:00.980 --> 00:04:01.660
mit denen machen wollte,

00:04:01.660 --> 00:04:02.640
oder die zum ersten Mal

00:04:02.640 --> 00:04:03.760
so ein Notebook in die Hand nehmen wollten,

00:04:03.760 --> 00:04:06.420
oder irgendwie irgendwas anderes,

00:04:06.420 --> 00:04:09.080
das war immer Schmerzen damit verbunden.

00:04:09.080 --> 00:04:09.960
Ja.

00:04:09.960 --> 00:04:11.960
Und da ja Rust gerade so.

00:04:11.960 --> 00:04:13.640
Nein, eigentlich ist das ganz einfach.

00:04:13.640 --> 00:04:15.280
Also, du musst folgende Sachen installieren.

00:04:15.280 --> 00:04:16.960
Das ist wirklich nur eine sehr kurze Liste.

00:04:16.960 --> 00:04:18.940
Ja, ja.

00:04:18.940 --> 00:04:20.760
Also, erst mal brauchst du Build Essentials

00:04:20.760 --> 00:04:22.500
und dann brauchst du die ganzen Abhängigkeiten

00:04:22.500 --> 00:04:24.760
und LibJPG und LibJPG 98

00:04:24.760 --> 00:04:26.940
und LibJPG 2K.

00:04:26.960 --> 00:04:29.700
Und dann musst du Pyra installieren

00:04:29.700 --> 00:04:31.020
und dann bist du schon fast so weit.

00:04:31.020 --> 00:04:32.100
Und dann Apfel und eine Banane

00:04:32.100 --> 00:04:32.620
und wie Jochen sagt,

00:04:32.620 --> 00:04:33.260
den ganzen Dschungel.

00:04:33.260 --> 00:04:34.720
Und ja.

00:04:34.720 --> 00:04:36.300
Also, ich habe am.

00:04:36.300 --> 00:04:37.020
Das ist wirklich sehr.

00:04:37.020 --> 00:04:38.040
Der RealPython am Sprint

00:04:38.040 --> 00:04:39.500
und für Pyra und so ein paar Sachen installiert,

00:04:39.500 --> 00:04:40.260
weil ich es kompilieren wollte.

00:04:40.260 --> 00:04:41.500
Es hat tatsächlich drei Stunden gedauert,

00:04:41.500 --> 00:04:42.160
bis ich es kompiliert habe

00:04:42.160 --> 00:04:42.800
auf meinem Tunnel.

00:04:42.800 --> 00:04:44.140
Klasse.

00:04:44.140 --> 00:04:44.920
Ja.

00:04:44.920 --> 00:04:46.460
Aber so ist das manchmal.

00:04:46.460 --> 00:04:47.940
Ja.

00:04:47.940 --> 00:04:50.400
Ja, also, ja, ich bin mal gespannt.

00:04:50.400 --> 00:04:51.220
Also, ich bin da.

00:04:51.220 --> 00:04:53.740
Also, ich habe ja auch schon dann irgendwie gehört,

00:04:53.740 --> 00:04:54.480
was Leute dazu sagen,

00:04:54.480 --> 00:04:55.280
die sich mit diesem ganzen Thema

00:04:55.280 --> 00:04:55.960
schon lange beschäftigen.

00:04:55.960 --> 00:04:56.900
Und es gab auch schon mehrere,

00:04:56.920 --> 00:04:58.920
Versuche, das zu vereinheitlichen

00:04:58.920 --> 00:05:01.840
und da auch Peps zu etablieren,

00:05:01.840 --> 00:05:04.320
die quasi das standardisieren.

00:05:04.320 --> 00:05:05.840
Und die sind gescheitert alle bisher.

00:05:05.840 --> 00:05:07.160
Auch das letzte Mal,

00:05:07.160 --> 00:05:07.660
als jetzt der,

00:05:07.660 --> 00:05:08.460
wie heißt er jetzt noch?

00:05:08.460 --> 00:05:09.200
Einer ganz bekannter,

00:05:09.200 --> 00:05:10.100
einer der bekanntesten

00:05:10.100 --> 00:05:11.400
Python-Core-Entwickler,

00:05:11.400 --> 00:05:12.200
der halt auch da irgendwie

00:05:12.200 --> 00:05:13.000
so ein großes Team

00:05:13.000 --> 00:05:13.700
bei Microsoft leitet.

00:05:13.700 --> 00:05:16.500
Der große Kanadier,

00:05:16.500 --> 00:05:17.060
wie heißt er noch?

00:05:17.060 --> 00:05:17.960
Ich habe den Namen vergessen.

00:05:17.960 --> 00:05:18.480
Keine Ahnung.

00:05:18.480 --> 00:05:19.220
Auf jeden Fall,

00:05:19.220 --> 00:05:20.640
der hat da versucht,

00:05:20.640 --> 00:05:21.360
einen Peps zu gemacht.

00:05:21.360 --> 00:05:22.500
Das ist halt hinterher gescheitert,

00:05:22.500 --> 00:05:24.460
weil, ja, also mit dem Fazit,

00:05:24.460 --> 00:05:25.100
es geht nicht.

00:05:25.100 --> 00:05:25.780
Armin meinte,

00:05:25.780 --> 00:05:26.760
es braucht vielleicht noch ein Jahr,

00:05:26.840 --> 00:05:27.400
dann sind viele

00:05:27.400 --> 00:05:28.920
der Grundvoraussetzungen geschaffen,

00:05:28.920 --> 00:05:30.140
die da noch fehlen

00:05:30.140 --> 00:05:31.220
und das wären gar nicht mehr so viele.

00:05:31.220 --> 00:05:32.100
Okay, ich bin gespannt.

00:05:32.100 --> 00:05:33.420
Also, wenn das dann funktioniert,

00:05:33.420 --> 00:05:34.740
dann lasse ich mich überzeugen.

00:05:34.740 --> 00:05:35.600
Aber das, ja, gut.

00:05:35.600 --> 00:05:38.080
Werden wir dann sehen.

00:05:38.080 --> 00:05:40.360
Was auch interessant ist,

00:05:40.360 --> 00:05:42.160
es gibt einmal diese UV-Geschichte,

00:05:42.160 --> 00:05:43.800
da gibt es dann auch noch

00:05:43.800 --> 00:05:45.540
diese Firma von Charlie Marsh,

00:05:45.540 --> 00:05:46.520
die hat ja das irgendwie übernommen,

00:05:46.520 --> 00:05:47.580
das zu maintainen, das UV.

00:05:47.580 --> 00:05:48.800
Ja, genau.

00:05:48.800 --> 00:05:51.360
Ja, also UV und RAI,

00:05:51.360 --> 00:05:52.260
was war von einem?

00:05:52.260 --> 00:05:53.880
Quatsch, genau,

00:05:53.880 --> 00:05:54.920
der hat nicht UV übernommen,

00:05:54.920 --> 00:05:55.860
sondern RAI, sondern genau.

00:05:55.860 --> 00:05:56.780
Die integrieren sich tatsächlich

00:05:56.780 --> 00:05:57.960
relativ,

00:05:57.960 --> 00:05:58.940
die reden auch voneinander

00:05:58.940 --> 00:06:00.400
und übereinander und so

00:06:00.400 --> 00:06:01.360
und die integrieren einander

00:06:01.360 --> 00:06:02.200
relativ viel

00:06:02.200 --> 00:06:03.700
und RAI benutzt das UV

00:06:03.700 --> 00:06:05.200
statt PIP-Tools, glaube ich,

00:06:05.200 --> 00:06:05.620
oder so, ne,

00:06:05.620 --> 00:06:06.800
dann darüber,

00:06:06.800 --> 00:06:07.820
das sieht alles gar nicht

00:06:07.820 --> 00:06:08.340
so schlecht aus

00:06:08.340 --> 00:06:09.420
und die Firma ist, glaube ich,

00:06:09.420 --> 00:06:10.320
Astral oder so

00:06:10.320 --> 00:06:11.860
und die machen ja auch RUF

00:06:11.860 --> 00:06:12.580
und das,

00:06:12.580 --> 00:06:14.320
was eigentlich auch relativ gut

00:06:14.320 --> 00:06:15.180
funktioniert, finde ich.

00:06:15.180 --> 00:06:16.200
Ja, ja, die machen so

00:06:16.200 --> 00:06:17.140
eben ganz viel um RUF.

00:06:17.140 --> 00:06:19.640
Gibt es auch eine Firma hier,

00:06:19.640 --> 00:06:20.480
also es gibt ja da irgendwie

00:06:20.480 --> 00:06:21.480
auch eine schnellere Alternative

00:06:21.480 --> 00:06:22.820
zu Conda, Mamba,

00:06:22.820 --> 00:06:25.900
von PrefixDev

00:06:25.900 --> 00:06:26.500
oder weiß ich nicht,

00:06:26.500 --> 00:06:26.720
Wolf,

00:06:26.720 --> 00:06:27.940
Volbrecht

00:06:27.940 --> 00:06:29.400
oder so,

00:06:29.400 --> 00:06:30.200
den könnten wir vielleicht

00:06:30.200 --> 00:06:30.460
auch mal,

00:06:30.460 --> 00:06:31.000
den könnten wir

00:06:31.000 --> 00:06:31.800
über diesen Thema fragen.

00:06:31.800 --> 00:06:33.120
Ja, du weißt ja gerade,

00:06:33.120 --> 00:06:33.800
dass du für dich zuhörst.

00:06:33.800 --> 00:06:36.560
Ja, und genau, genau

00:06:36.560 --> 00:06:38.300
und das kommt da auch

00:06:38.300 --> 00:06:38.840
irgendwie mit rein,

00:06:38.840 --> 00:06:42.680
deren Geschichten sollen da

00:06:42.680 --> 00:06:43.620
auch irgendwie mit integriert werden,

00:06:43.620 --> 00:06:44.500
weil das ist halt unten drunter

00:06:44.500 --> 00:06:45.080
auch alles Rust

00:06:45.080 --> 00:06:47.080
und ja, also okay,

00:06:47.080 --> 00:06:47.660
es tut sich was,

00:06:47.660 --> 00:06:48.500
also insofern ist es schon mal gut.

00:06:48.500 --> 00:06:49.640
Ja, mal mal gespannt.

00:06:49.640 --> 00:06:50.960
Ja, und ich finde es auch gut,

00:06:50.960 --> 00:06:51.820
dass man tatsächlich jetzt

00:06:51.820 --> 00:06:53.480
echt irgendwann durch ist

00:06:53.480 --> 00:06:55.060
mit diesem ganzen Snarf

00:06:55.060 --> 00:06:56.540
und vielleicht also Standards,

00:06:56.660 --> 00:06:58.180
also ich mag ja zum Beispiel

00:06:58.180 --> 00:06:58.940
diesen Go nicht,

00:06:58.940 --> 00:07:00.100
weil zu viel Standard und so,

00:07:00.100 --> 00:07:01.000
das ist immer zu viel Opinion

00:07:01.000 --> 00:07:02.380
und so und dann, okay,

00:07:02.380 --> 00:07:03.500
dann nutzt man dann doch Black,

00:07:03.500 --> 00:07:06.780
aber vielleicht gibt es

00:07:06.780 --> 00:07:07.240
also ein paar.

00:07:07.240 --> 00:07:08.500
Moment, das habe ich nicht verstanden,

00:07:08.500 --> 00:07:09.060
was nützt du nicht?

00:07:09.060 --> 00:07:09.900
Also ich mag Standards nicht,

00:07:09.900 --> 00:07:11.240
also ich mag es eigentlich nicht,

00:07:11.240 --> 00:07:12.000
wenn irgendjemand sagt,

00:07:12.000 --> 00:07:12.380
wie es sein muss,

00:07:12.380 --> 00:07:13.580
wenn jemand so opinionated ist

00:07:13.580 --> 00:07:15.060
und sagt, wir machen jetzt,

00:07:15.060 --> 00:07:15.760
keine Ahnung,

00:07:15.760 --> 00:07:17.380
Tabs instead of Spaces,

00:07:17.380 --> 00:07:19.140
weil ich will das so,

00:07:19.140 --> 00:07:20.820
wenn ich das anders möchte

00:07:20.820 --> 00:07:22.920
und das nervt mich immer so ein bisschen,

00:07:22.920 --> 00:07:24.780
weil das ist das Schöne an Python,

00:07:24.780 --> 00:07:25.720
es ist halt dynamisch,

00:07:25.720 --> 00:07:26.540
ich kann es nicht aussuchen,

00:07:26.600 --> 00:07:26.920
wie ich es mache.

00:07:26.920 --> 00:07:28.840
Ja, aber gut,

00:07:28.840 --> 00:07:29.580
also ich meine,

00:07:29.580 --> 00:07:32.940
aber würdest du das,

00:07:32.940 --> 00:07:34.620
sozusagen würdest du,

00:07:34.620 --> 00:07:35.480
du würdest aber nur

00:07:35.480 --> 00:07:36.580
das konfigurieren wollen,

00:07:36.580 --> 00:07:37.100
wie es aussieht,

00:07:37.100 --> 00:07:37.560
aber du würdest schon

00:07:37.560 --> 00:07:38.500
ein Auto formaten wollen?

00:07:38.500 --> 00:07:39.680
Ja.

00:07:39.680 --> 00:07:41.360
Ja, okay, ja gut,

00:07:41.360 --> 00:07:42.280
kann man machen, wie man will.

00:07:42.280 --> 00:07:44.080
Ja, also ich meine,

00:07:44.080 --> 00:07:45.100
aber wenn man jetzt bei Black

00:07:45.100 --> 00:07:46.380
dann irgendwie eine Konfigurationsdatei

00:07:46.380 --> 00:07:47.040
jedes Mal mit schieben muss,

00:07:47.040 --> 00:07:47.800
das ist halt auch irgendwie

00:07:47.800 --> 00:07:48.780
ad absurdum, ne?

00:07:48.780 --> 00:07:50.000
Ja, genau, weil Black gibt es

00:07:50.000 --> 00:07:50.800
das halt nicht, genau,

00:07:50.800 --> 00:07:51.820
dann muss man halt das andere sehen,

00:07:51.820 --> 00:07:52.660
aber es gibt ja auch noch andere.

00:07:52.660 --> 00:07:54.460
Das ist so eine Sache,

00:07:54.460 --> 00:07:56.400
die denke ich mir schon lange,

00:07:56.540 --> 00:07:57.940
dass eigentlich diese ganze

00:07:57.940 --> 00:08:00.040
Code-Formatting-Debatte,

00:08:00.040 --> 00:08:00.860
die ist doch Quatsch, oder?

00:08:00.860 --> 00:08:01.180
Ja.

00:08:01.180 --> 00:08:03.000
Eigentlich sollte doch

00:08:03.000 --> 00:08:04.120
eine Python-Datei

00:08:04.120 --> 00:08:06.260
den AST enthalten

00:08:06.260 --> 00:08:07.520
und dann hast du einen Editor

00:08:07.520 --> 00:08:09.040
und der kann dir den AST anzeigen,

00:08:09.040 --> 00:08:09.920
auf eine Art und Weise,

00:08:09.920 --> 00:08:10.860
wie es dir passt.

00:08:10.860 --> 00:08:11.320
Ja, genau.

00:08:11.320 --> 00:08:12.760
Und wenn du die Sachen

00:08:12.760 --> 00:08:14.000
in grün oder gelb haben willst

00:08:14.000 --> 00:08:14.740
oder in Dateien

00:08:14.740 --> 00:08:15.900
oder Modulen aufgeteilt

00:08:15.900 --> 00:08:16.560
oder wie auch immer

00:08:16.560 --> 00:08:17.260
du es haben willst,

00:08:17.260 --> 00:08:19.740
da gibt es so viele Sachen,

00:08:19.740 --> 00:08:20.560
die man auf der Ebene

00:08:20.560 --> 00:08:21.060
machen könnte,

00:08:21.060 --> 00:08:21.940
aber stattdessen haben wir

00:08:21.940 --> 00:08:22.560
Textdateien.

00:08:22.560 --> 00:08:24.400
Ja, so ein bisschen so,

00:08:24.400 --> 00:08:26.480
da müsste man

00:08:26.480 --> 00:08:27.220
jemandem was machen.

00:08:27.220 --> 00:08:29.880
Da kommt dann immer der Einwand,

00:08:29.880 --> 00:08:30.800
dann mach doch mal was dagegen

00:08:30.800 --> 00:08:31.140
und dann sage ich,

00:08:31.140 --> 00:08:31.360
nee.

00:08:31.360 --> 00:08:33.420
Das Problem ist halt,

00:08:33.420 --> 00:08:34.280
wie kriegst du denn

00:08:34.280 --> 00:08:35.920
aus dem AST wieder was,

00:08:35.920 --> 00:08:37.540
wenn du jetzt tatsächlich

00:08:37.540 --> 00:08:38.980
was manuell anders haben willst?

00:08:38.980 --> 00:08:39.560
Also du möchtest

00:08:39.560 --> 00:08:41.200
deine VR-Brille aufziehen

00:08:41.200 --> 00:08:42.400
und dann hast du vor dir

00:08:42.400 --> 00:08:43.680
den einen Balken,

00:08:43.680 --> 00:08:44.400
den einen Graphen

00:08:44.400 --> 00:08:45.060
und hast die Nodes,

00:08:45.060 --> 00:08:45.960
musst du eine durchmaschinen,

00:08:45.960 --> 00:08:47.140
kannst du dich auf dein Laufband

00:08:47.140 --> 00:08:47.960
stellen und hinlaufen?

00:08:47.960 --> 00:08:50.620
Nee, also da gibt es bestimmt

00:08:50.620 --> 00:08:51.540
Leute, die das so wollen,

00:08:51.540 --> 00:08:53.000
aber ich will ja nicht laufen,

00:08:53.000 --> 00:08:54.040
ich bin ja ein Softwareentwickler.

00:08:56.420 --> 00:08:58.560
Aber ob du jetzt

00:08:58.560 --> 00:08:59.720
Tabs oder Spaces hast

00:08:59.720 --> 00:09:02.220
oder ob du die Variablen

00:09:02.220 --> 00:09:03.060
so oder so nennst

00:09:03.060 --> 00:09:04.280
oder ob du, keine Ahnung,

00:09:04.280 --> 00:09:06.820
viele Dinge, die du da,

00:09:06.820 --> 00:09:08.400
ob du Einrückungen

00:09:08.400 --> 00:09:09.340
oder Braces haben willst,

00:09:09.340 --> 00:09:10.580
das ist doch auch völlig egal.

00:09:10.580 --> 00:09:11.320
Wenn Leute lieber

00:09:11.320 --> 00:09:12.120
Braces haben wollen,

00:09:12.120 --> 00:09:12.880
dann sollen sie halt

00:09:12.880 --> 00:09:14.140
sich ihren Editor so einstellen,

00:09:14.140 --> 00:09:14.780
dass der die Blöcke

00:09:14.780 --> 00:09:15.900
mit Braces umfasst.

00:09:15.900 --> 00:09:17.620
Und umgekehrt,

00:09:17.620 --> 00:09:19.460
wenn ich TypeScript schreibe

00:09:19.460 --> 00:09:19.740
oder so,

00:09:19.740 --> 00:09:21.200
dann will ich dann nicht

00:09:21.200 --> 00:09:22.280
überall Braces haben.

00:09:22.280 --> 00:09:23.300
Dann muss doch mein Editor,

00:09:23.300 --> 00:09:24.740
muss doch smart genug sein,

00:09:26.360 --> 00:09:27.740
das umformen zu können.

00:09:27.740 --> 00:09:29.060
Und warum ist das so schwierig?

00:09:29.060 --> 00:09:31.000
Ja, also ein Grund,

00:09:31.000 --> 00:09:31.520
der mir jetzt sofort...

00:09:31.520 --> 00:09:31.960
Das ist so eine Debatte,

00:09:31.960 --> 00:09:33.960
die jetzt auch ins Gebüsch führt.

00:09:33.960 --> 00:09:35.440
Ja, also ein Grund,

00:09:35.440 --> 00:09:36.460
der mir direkt so einfallen würde,

00:09:36.460 --> 00:09:37.300
ist halt, was ist,

00:09:37.300 --> 00:09:38.060
weil das hatte ich jetzt

00:09:38.060 --> 00:09:38.580
letztens wieder,

00:09:38.580 --> 00:09:40.420
ist halt, was ist,

00:09:40.420 --> 00:09:42.320
wenn ich Dinge anders machen möchte

00:09:42.320 --> 00:09:43.280
als jeder andere?

00:09:43.280 --> 00:09:45.940
Du meinst Innovation?

00:09:45.940 --> 00:09:47.960
Nein, einfach optisch.

00:09:47.960 --> 00:09:48.360
Müll.

00:09:48.360 --> 00:09:49.160
Ach so, Entschuldigung.

00:09:49.160 --> 00:09:51.280
Ja, das muss doch

00:09:51.280 --> 00:09:51.960
dein Editor können.

00:09:51.960 --> 00:09:53.280
Das muss doch eine

00:09:53.280 --> 00:09:54.320
Einstellungssache bei dir sein.

00:09:54.320 --> 00:09:55.560
Weil am Ende kommt

00:09:55.560 --> 00:09:56.300
der gleiche Python,

00:09:56.300 --> 00:09:56.880
der weiß den Code raus.

00:09:56.880 --> 00:09:58.300
Ja, aber wenn jetzt sozusagen,

00:09:58.300 --> 00:09:59.520
du kriegst jetzt Code

00:09:59.520 --> 00:10:00.180
von jemand anders.

00:10:00.180 --> 00:10:02.000
Wie soll denn das,

00:10:02.000 --> 00:10:04.360
so wie ich das sehen will,

00:10:04.360 --> 00:10:06.040
wie soll der denn

00:10:06.040 --> 00:10:06.900
dahin transformiert werden?

00:10:06.900 --> 00:10:07.380
Das kannst du nur

00:10:07.380 --> 00:10:07.680
im Sprachmodell machen.

00:10:07.680 --> 00:10:10.380
In der Standardform geht leicht,

00:10:10.380 --> 00:10:11.500
aber der umgekehrte Weg

00:10:11.500 --> 00:10:11.940
geht halt nicht.

00:10:11.940 --> 00:10:12.900
Oder?

00:10:12.900 --> 00:10:13.580
Über den Sprachmodell.

00:10:13.580 --> 00:10:14.960
Ich glaube, das geht

00:10:14.960 --> 00:10:15.680
in alle Richtungen.

00:10:15.680 --> 00:10:18.240
Aber das wäre halt das,

00:10:18.240 --> 00:10:19.300
was da zu beweisen wäre.

00:10:19.300 --> 00:10:19.840
Und ich glaube,

00:10:19.840 --> 00:10:23.300
dass die richtige Darstellungsart

00:10:23.300 --> 00:10:24.900
eben nicht Text

00:10:26.240 --> 00:10:28.140
in ASCII oder Unicode ist,

00:10:28.140 --> 00:10:28.740
sondern halt

00:10:28.740 --> 00:10:31.520
ein strukturierteres Modell.

00:10:31.520 --> 00:10:32.060
Und aus diesem

00:10:32.060 --> 00:10:33.000
strukturierteren Modell

00:10:33.000 --> 00:10:34.020
kannst du dann ja mehr Sachen

00:10:34.020 --> 00:10:34.680
auch rausziehen.

00:10:34.680 --> 00:10:36.920
Ja, gut.

00:10:36.920 --> 00:10:38.360
Aber es ist unbewiesen.

00:10:38.360 --> 00:10:39.260
Ja, das ist hier so ein,

00:10:39.260 --> 00:10:39.620
wie gesagt,

00:10:39.620 --> 00:10:42.980
so ein Jemand-sollte-das-mal-tun-Projekt.

00:10:42.980 --> 00:10:43.380
Ja.

00:10:43.380 --> 00:10:46.200
In meiner vierstelligen Liste

00:10:46.200 --> 00:10:47.080
der Nebenprojekte

00:10:47.080 --> 00:10:48.460
ist es nicht auf Platz 1.

00:10:48.460 --> 00:10:48.840
Also jedenfalls,

00:10:48.840 --> 00:10:49.420
ich wollte eigentlich

00:10:49.420 --> 00:10:50.240
für Standards

00:10:50.240 --> 00:10:50.840
an der Stelle sprechen,

00:10:50.840 --> 00:10:51.820
weil ich tatsächlich finde,

00:10:51.820 --> 00:10:52.620
dass das so ein bisschen

00:10:52.620 --> 00:10:53.120
anstrengend ist.

00:10:53.120 --> 00:10:53.920
Und es wäre schon gut,

00:10:53.920 --> 00:10:54.920
wenn so ein Standard

00:10:54.920 --> 00:10:55.620
das so löst,

00:10:55.620 --> 00:10:56.180
dass diese ganzen

00:10:56.180 --> 00:10:57.380
Pains und Probleme

00:10:57.380 --> 00:10:59.560
eine Lösung haben,

00:10:59.560 --> 00:11:01.380
die tatsächlich von allen

00:11:01.380 --> 00:11:03.040
so mitgetragen wird.

00:11:03.040 --> 00:11:04.740
Das wäre schon irgendwie

00:11:04.740 --> 00:11:05.740
nice to have.

00:11:05.740 --> 00:11:07.000
Also so ein

00:11:07.000 --> 00:11:08.440
Cholera-Boutive-Spiel,

00:11:08.440 --> 00:11:08.920
äh, Cholo,

00:11:08.920 --> 00:11:09.760
boah,

00:11:09.760 --> 00:11:10.660
Zungenbrecher.

00:11:10.660 --> 00:11:11.740
Ihr wisst, was ich meine.

00:11:11.740 --> 00:11:12.320
Ein Cholera-Spiel?

00:11:12.320 --> 00:11:12.680
Ja.

00:11:12.680 --> 00:11:14.020
Aber du meinst jetzt

00:11:14.020 --> 00:11:14.720
für Code-Format?

00:11:14.720 --> 00:11:16.140
Nein.

00:11:16.140 --> 00:11:17.020
Ach so, okay.

00:11:17.020 --> 00:11:18.040
Ich meine für Packaging.

00:11:18.040 --> 00:11:18.500
Packaging.

00:11:18.500 --> 00:11:19.800
Und also Installation

00:11:19.800 --> 00:11:21.000
und Python generell

00:11:21.000 --> 00:11:21.820
und Binarys verteilen

00:11:21.820 --> 00:11:23.380
und Setup

00:11:23.380 --> 00:11:24.140
und VENVs

00:11:24.140 --> 00:11:25.020
und Dependencies

00:11:25.020 --> 00:11:26.020
und,

00:11:26.120 --> 00:11:27.100
und sowas alles.

00:11:27.100 --> 00:11:28.300
Naja, ich habe mir halt

00:11:28.300 --> 00:11:30.100
diese Diskussion

00:11:30.100 --> 00:11:30.960
halt so ein bisschen angeguckt

00:11:30.960 --> 00:11:31.540
und die hinter,

00:11:31.540 --> 00:11:32.740
hat mich so ein bisschen

00:11:32.740 --> 00:11:33.580
hoffnungslos

00:11:33.580 --> 00:11:34.480
zurückgelassen,

00:11:34.480 --> 00:11:34.800
weil,

00:11:34.800 --> 00:11:36.740
also auch die Leute,

00:11:36.740 --> 00:11:37.500
die sich damit beschäftigt haben,

00:11:37.500 --> 00:11:37.920
die sind ja,

00:11:37.920 --> 00:11:39.120
haben das ja auch,

00:11:39.120 --> 00:11:40.240
das sei ja das Ziel

00:11:40.240 --> 00:11:41.400
und das Ergebnis war,

00:11:41.400 --> 00:11:42.580
geht nicht.

00:11:42.580 --> 00:11:43.700
Ja, das Problem ist halt,

00:11:43.700 --> 00:11:44.260
man will sich aber

00:11:44.260 --> 00:11:45.180
damit gar nicht beschäftigen.

00:11:45.180 --> 00:11:45.740
Doch, doch,

00:11:45.740 --> 00:11:46.080
da haben sich,

00:11:46.080 --> 00:11:46.720
oh yeah,

00:11:46.720 --> 00:11:49.140
da haben sich viele Leute

00:11:49.140 --> 00:11:49.960
ganz lange mit beschäftigt.

00:11:49.960 --> 00:11:50.660
Ich möchte mich nicht

00:11:50.660 --> 00:11:51.180
damit beschäftigen,

00:11:51.180 --> 00:11:52.140
was für Problem-Python

00:11:52.140 --> 00:11:53.140
beim Packaging installieren

00:11:53.140 --> 00:11:53.640
beim VENV hat,

00:11:53.640 --> 00:11:54.080
sondern ich möchte

00:11:54.080 --> 00:11:54.880
Packages installieren,

00:11:54.880 --> 00:11:55.420
die die benutzen.

00:11:55.580 --> 00:11:56.040
Ja, aber,

00:11:56.040 --> 00:11:56.620
weil ich möchte halt

00:11:56.620 --> 00:11:57.280
Programme schreiben.

00:11:57.280 --> 00:11:57.980
Ja, aber die Frage ist,

00:11:57.980 --> 00:11:59.040
ist das überhaupt möglich

00:11:59.040 --> 00:11:59.920
bei einer so alten Sprache?

00:11:59.920 --> 00:12:00.600
Geht das?

00:12:00.600 --> 00:12:02.300
Und bei Rust,

00:12:02.300 --> 00:12:03.500
also die Antwort ist,

00:12:03.500 --> 00:12:04.260
warum geht das bei Rust,

00:12:04.260 --> 00:12:04.740
ist halt,

00:12:04.740 --> 00:12:06.260
die Antwort darauf ist halt,

00:12:06.260 --> 00:12:07.000
das geht deswegen,

00:12:07.000 --> 00:12:08.160
weil das eine sehr junge Sprache ist

00:12:08.160 --> 00:12:09.700
und weil man all die Dinge,

00:12:09.700 --> 00:12:10.800
die man früher bei Python macht,

00:12:10.800 --> 00:12:11.460
hat da halt nicht drin.

00:12:11.460 --> 00:12:12.000
Ja, aber da müssen wir

00:12:12.000 --> 00:12:12.280
auftärmen,

00:12:12.280 --> 00:12:13.060
das sind also,

00:12:13.060 --> 00:12:13.440
so jung ist Rust nicht.

00:12:13.440 --> 00:12:14.600
Ja, aber das Problem ist,

00:12:14.600 --> 00:12:17.360
das ist ja,

00:12:17.360 --> 00:12:18.640
ja, aber ein Großteil

00:12:18.640 --> 00:12:19.080
von dem Zeug,

00:12:19.080 --> 00:12:20.000
das verwendet wird,

00:12:20.000 --> 00:12:21.300
ist halt älter als 20 Jahre

00:12:21.300 --> 00:12:22.260
und macht Dinge,

00:12:22.260 --> 00:12:23.120
die total komisch sind.

00:12:23.120 --> 00:12:24.020
Und dann,

00:12:25.580 --> 00:12:27.140
Johann, was würdest du sagen,

00:12:27.140 --> 00:12:28.900
wann ist Rust erschienen?

00:12:28.900 --> 00:12:29.960
Wann war das erste Release

00:12:29.960 --> 00:12:30.360
von Rust?

00:12:30.360 --> 00:12:30.920
Ich glaube,

00:12:30.920 --> 00:12:31.560
das ist etwas mehr

00:12:31.560 --> 00:12:32.180
als 10 Jahre her.

00:12:32.180 --> 00:12:33.920
Also irgendwann 2013,

00:12:33.920 --> 00:12:35.160
2015?

00:12:35.160 --> 00:12:36.140
15. Mai 2015,

00:12:36.140 --> 00:12:37.520
also 9 Jahre.

00:12:37.520 --> 00:12:38.500
Ah, gut.

00:12:38.500 --> 00:12:39.740
Nicht so schlecht.

00:12:39.740 --> 00:12:40.560
Habe ich sogar ein bisschen

00:12:40.560 --> 00:12:41.400
zu alt geschätzt, ja.

00:12:41.400 --> 00:12:42.360
Ja, okay,

00:12:42.360 --> 00:12:43.520
aber also ganz junge Sprache

00:12:43.520 --> 00:12:44.120
ist es auch nicht mehr.

00:12:44.120 --> 00:12:45.300
Nee, aber viel, viel jünger

00:12:45.300 --> 00:12:45.700
als Python,

00:12:45.700 --> 00:12:46.580
viel, viel jünger.

00:12:46.580 --> 00:12:47.940
Ja, gut,

00:12:47.940 --> 00:12:48.700
das stimmt natürlich.

00:12:48.700 --> 00:12:49.560
Wobei Python 3

00:12:49.560 --> 00:12:50.440
ist jetzt auch noch nicht,

00:12:50.440 --> 00:12:51.080
ist doch auch erst

00:12:51.080 --> 00:12:51.720
seit ein paar Jahren.

00:12:51.720 --> 00:12:53.380
Ja.

00:12:55.580 --> 00:12:56.200
Ich sage ja,

00:12:56.200 --> 00:12:56.860
wir zeigen Python 4.

00:12:56.860 --> 00:12:58.340
Okay, ja.

00:12:58.340 --> 00:13:00.340
Die nächste Version

00:13:00.340 --> 00:13:01.240
ist Python 8, oder?

00:13:01.240 --> 00:13:02.120
Da gab es doch mal

00:13:02.120 --> 00:13:02.900
so einen April-Scherz.

00:13:02.900 --> 00:13:04.740
So ein Pep,

00:13:04.740 --> 00:13:06.000
wie die nächste Python-Version

00:13:06.000 --> 00:13:06.560
heißen sollte

00:13:06.560 --> 00:13:07.180
und dass man dann

00:13:07.180 --> 00:13:08.140
immer additiv vorgeht.

00:13:08.140 --> 00:13:09.660
Der große Vorteil

00:13:09.660 --> 00:13:10.540
von dem Versionsschema

00:13:10.540 --> 00:13:10.940
ist, dass man

00:13:10.940 --> 00:13:11.880
alle anderen Versionen

00:13:11.880 --> 00:13:12.380
einholt.

00:13:12.380 --> 00:13:14.140
Das war auch ein lustiger Talk.

00:13:14.140 --> 00:13:14.720
Wer ist nochmal

00:13:14.720 --> 00:13:16.000
der Release-Manager

00:13:16.000 --> 00:13:17.100
von 13 und 14?

00:13:17.100 --> 00:13:17.440
Wisst ihr?

00:13:17.440 --> 00:13:19.160
Thomas Waters?

00:13:19.160 --> 00:13:21.040
Kann er auf jeden Fall,

00:13:21.040 --> 00:13:21.520
ja.

00:13:21.520 --> 00:13:22.140
Ich meine,

00:13:22.140 --> 00:13:24.000
der war auch lustig,

00:13:24.000 --> 00:13:24.700
weil er meinte nämlich,

00:13:24.700 --> 00:13:25.520
er möchte gerne

00:13:25.520 --> 00:13:27.000
das Versioning

00:13:27.000 --> 00:13:27.620
von Python ändern,

00:13:27.620 --> 00:13:29.180
einfach auf Jahreszahlen

00:13:29.180 --> 00:13:29.540
anpassen.

00:13:29.540 --> 00:13:30.600
Dann wäre es halt

00:13:30.600 --> 00:13:32.420
demnächst Python 24

00:13:32.420 --> 00:13:32.780
einfach,

00:13:32.780 --> 00:13:34.480
dann Python 25.

00:13:34.480 --> 00:13:35.380
Und dann aber

00:13:35.380 --> 00:13:35.960
mit drei davon,

00:13:35.960 --> 00:13:36.580
wenn wir drei behalten,

00:13:36.580 --> 00:13:37.260
dann 325,

00:13:37.260 --> 00:13:38.040
weil Semantik-Version

00:13:38.040 --> 00:13:38.620
irgendwie Blut wäre.

00:13:38.620 --> 00:13:41.460
Dann müssen sie sich

00:13:41.460 --> 00:13:41.880
aber auch noch

00:13:41.880 --> 00:13:42.580
irgendwelche lustigen

00:13:42.580 --> 00:13:43.580
Tiernamen ausdenken,

00:13:43.580 --> 00:13:44.540
die da dazu passen.

00:13:44.540 --> 00:13:44.740
Ja.

00:13:44.740 --> 00:13:46.100
Und bitte

00:13:46.100 --> 00:13:47.320
alphabetisch aufsteigend.

00:13:47.320 --> 00:13:48.380
Ja, genau,

00:13:48.380 --> 00:13:48.860
so ungefähr.

00:13:48.860 --> 00:13:49.960
Ja, das war dann

00:13:49.960 --> 00:13:50.500
die Debatte.

00:13:50.500 --> 00:13:51.840
Ja, also ich meine,

00:13:51.840 --> 00:13:52.560
es gab viel Spaß

00:13:52.560 --> 00:13:53.260
und die Talks sind

00:13:53.260 --> 00:13:54.260
sicher auch irgendwann bald da

00:13:54.260 --> 00:13:54.740
und die kann man sich

00:13:54.740 --> 00:13:55.460
alle angucken

00:13:55.460 --> 00:13:55.620
gucken.

00:13:55.620 --> 00:13:56.900
Es gab ja

00:13:56.900 --> 00:13:57.340
verschiedene Tracks,

00:13:57.340 --> 00:13:58.120
der Data-Track war

00:13:58.120 --> 00:13:59.220
relativ viel vertreten

00:13:59.220 --> 00:13:59.480
wieder.

00:13:59.480 --> 00:14:01.160
LLMs und so

00:14:01.160 --> 00:14:02.420
sind ja wie immer

00:14:02.420 --> 00:14:04.200
hoch dabei.

00:14:04.200 --> 00:14:05.220
Ich hatte nicht

00:14:05.220 --> 00:14:06.080
das große Glück,

00:14:06.080 --> 00:14:06.580
dass ich jetzt da

00:14:06.580 --> 00:14:07.220
so einen Talk erwischt

00:14:07.220 --> 00:14:07.740
hatte, der mich

00:14:07.740 --> 00:14:08.840
so total faszinierte.

00:14:08.840 --> 00:14:09.640
Die waren immer sehr,

00:14:09.640 --> 00:14:10.300
ich sag mal,

00:14:10.300 --> 00:14:10.660
High-Level,

00:14:10.660 --> 00:14:11.160
was jetzt auch

00:14:11.160 --> 00:14:11.680
nicht schlecht sein muss.

00:14:11.680 --> 00:14:13.380
Aber ja,

00:14:13.380 --> 00:14:14.500
bis auf so ein paar Sachen,

00:14:14.500 --> 00:14:15.160
die halt darum gingen,

00:14:15.160 --> 00:14:16.320
so wie man das vielleicht

00:14:16.320 --> 00:14:17.300
mit dem Trainieren

00:14:17.300 --> 00:14:17.680
noch ein bisschen

00:14:17.680 --> 00:14:18.260
besser hinkriegt

00:14:18.260 --> 00:14:19.060
oder mit dem Feintunen,

00:14:19.060 --> 00:14:19.440
dass man ein bisschen

00:14:19.440 --> 00:14:20.240
effektiver sein kann

00:14:20.240 --> 00:14:20.760
und nicht so viel

00:14:20.760 --> 00:14:22.080
Speicher dafür braucht

00:14:22.080 --> 00:14:22.360
oder so.

00:14:22.360 --> 00:14:23.040
Aber das müssten wir uns

00:14:23.040 --> 00:14:23.700
eigentlich mal für eigene

00:14:23.700 --> 00:14:24.820
Episoden irgendwann aufheben.

00:14:24.820 --> 00:14:26.440
Sowas.

00:14:26.440 --> 00:14:27.720
Ja.

00:14:27.720 --> 00:14:29.960
Was für News

00:14:29.960 --> 00:14:30.480
haben wir noch, Jochen?

00:14:30.480 --> 00:14:31.740
Ah ja,

00:14:31.740 --> 00:14:32.840
jetzt wo es um

00:14:32.840 --> 00:14:33.580
Euro-Python ging,

00:14:33.580 --> 00:14:34.560
was mir eingefallen ist,

00:14:34.560 --> 00:14:35.040
stimmt,

00:14:35.040 --> 00:14:35.380
wir hatten ja

00:14:35.380 --> 00:14:35.860
letztes Mal auch

00:14:35.860 --> 00:14:36.540
über die DjangoCon

00:14:36.540 --> 00:14:38.520
Europe 2024 geredet

00:14:38.520 --> 00:14:40.220
und die Vorträge

00:14:40.220 --> 00:14:40.940
sind jetzt online.

00:14:40.940 --> 00:14:41.360
Ja.

00:14:41.360 --> 00:14:41.900
Können Sie sich angucken

00:14:41.900 --> 00:14:42.420
und da bin ich jetzt

00:14:42.420 --> 00:14:42.840
gerade dran,

00:14:42.840 --> 00:14:43.500
die so ein bisschen

00:14:43.500 --> 00:14:44.940
nach und nach anzugucken,

00:14:44.940 --> 00:14:45.980
die ich interessant finde.

00:14:45.980 --> 00:14:47.040
Und da habe ich auch

00:14:47.040 --> 00:14:47.800
schon interessante gesehen.

00:14:47.800 --> 00:14:48.880
Da war auch jetzt

00:14:48.880 --> 00:14:49.380
diese Woche

00:14:49.380 --> 00:14:50.700
ein Treffen

00:14:50.700 --> 00:14:51.800
der Pythons

00:14:53.040 --> 00:14:53.440
User Group,

00:14:53.440 --> 00:14:55.440
Django Cologne

00:14:55.440 --> 00:14:56.160
User Group,

00:14:56.160 --> 00:14:57.340
wo es dann halt

00:14:57.340 --> 00:14:58.060
auch einen Vortrag gab

00:14:58.060 --> 00:15:00.200
über Background Tasks,

00:15:00.200 --> 00:15:01.780
was ganz interessant war.

00:15:01.780 --> 00:15:02.320
Genau.

00:15:02.320 --> 00:15:03.280
Und ja,

00:15:03.280 --> 00:15:04.200
das klingt alles

00:15:04.200 --> 00:15:05.120
tatsächlich ziemlich interessant.

00:15:05.120 --> 00:15:06.260
Also da haben sich schon

00:15:06.260 --> 00:15:07.240
Gedanken über das Interface

00:15:07.240 --> 00:15:07.460
gemacht.

00:15:07.460 --> 00:15:08.120
Salary ID.

00:15:08.120 --> 00:15:09.880
Ja, könnte sein,

00:15:09.880 --> 00:15:11.460
was eine gute Sache wäre.

00:15:11.460 --> 00:15:13.440
Ja, und es wäre richtig gut.

00:15:13.440 --> 00:15:15.560
Ja, aber

00:15:15.560 --> 00:15:16.380
da wollte ich noch sagen,

00:15:16.380 --> 00:15:17.020
weil du gesagt hast,

00:15:17.020 --> 00:15:17.840
die ganzen Talks gucken,

00:15:17.840 --> 00:15:18.820
das war tatsächlich auch super.

00:15:18.820 --> 00:15:19.520
Ich mag dieses

00:15:19.520 --> 00:15:20.240
hybride Format

00:15:20.240 --> 00:15:21.580
von Konferenzen.

00:15:21.580 --> 00:15:22.420
Auch bei der Europe Heist

00:15:22.420 --> 00:15:23.020
konnte man halt,

00:15:23.040 --> 00:15:23.880
weil abends,

00:15:23.880 --> 00:15:24.560
wenn man ganz

00:15:24.560 --> 00:15:26.080
schon durch war

00:15:26.080 --> 00:15:26.900
von dem ganzen Tag

00:15:26.900 --> 00:15:27.680
und die ganzen Konferenzen

00:15:27.680 --> 00:15:28.280
live gesehen hat,

00:15:28.280 --> 00:15:29.460
sich nochmal den Track

00:15:29.460 --> 00:15:30.060
von den Sachen,

00:15:30.060 --> 00:15:30.960
die man verpasst hatte,

00:15:30.960 --> 00:15:32.300
bei YouTube auf anderthalbfach

00:15:32.300 --> 00:15:33.320
angucken zum Einschlafen

00:15:33.320 --> 00:15:34.040
oder zum Runterkommen.

00:15:34.040 --> 00:15:35.420
Ja, das war sehr cool.

00:15:35.420 --> 00:15:36.380
Das heißt,

00:15:36.380 --> 00:15:36.940
man kann alle Sachen

00:15:36.940 --> 00:15:38.100
parallel gucken gleichzeitig

00:15:38.100 --> 00:15:40.400
oder länger frühstücken,

00:15:40.400 --> 00:15:40.800
wenn man mag.

00:15:40.800 --> 00:15:41.820
Was echt schön ist.

00:15:41.820 --> 00:15:43.680
Sehr zu empfehlen.

00:15:43.680 --> 00:15:44.140
Sehr zu empfehlen.

00:15:44.140 --> 00:15:46.340
Ja, ansonsten

00:15:46.340 --> 00:15:47.160
so in Ermangelung

00:15:47.160 --> 00:15:47.880
von Dingen,

00:15:47.880 --> 00:15:48.560
die jetzt mit Pythons

00:15:48.560 --> 00:15:49.440
so viel zu tun haben,

00:15:49.440 --> 00:15:51.300
was mich hier gerade

00:15:51.300 --> 00:15:51.880
so noch so ein bisschen

00:15:51.880 --> 00:15:52.500
umtreibt,

00:15:52.500 --> 00:15:53.020
ist halt,

00:15:53.040 --> 00:15:53.720
ach ja,

00:15:53.720 --> 00:15:54.460
es war bald Urlaub

00:15:54.460 --> 00:15:58.000
und ich habe ein bisschen

00:15:58.000 --> 00:15:58.640
neue Hardware

00:15:58.640 --> 00:15:59.720
irgendwie mir zugelegt.

00:15:59.720 --> 00:16:00.820
Jochen,

00:16:00.820 --> 00:16:01.880
das ist keine Werbeveranstaltung

00:16:01.880 --> 00:16:02.080
hier.

00:16:02.080 --> 00:16:02.740
Nee, aber

00:16:02.740 --> 00:16:05.220
was ganz cool ist,

00:16:05.220 --> 00:16:06.920
es gibt jetzt so ein,

00:16:06.920 --> 00:16:07.520
tatsächlich,

00:16:07.520 --> 00:16:08.640
also dieser Haushalt

00:16:08.640 --> 00:16:09.560
enthält Computer,

00:16:09.560 --> 00:16:10.740
kann Spuren von Computern

00:16:10.740 --> 00:16:11.180
enthalten

00:16:11.180 --> 00:16:15.160
und der schnellste Computer

00:16:15.160 --> 00:16:15.920
in diesem Haushalt

00:16:15.920 --> 00:16:16.760
ist jetzt ein iPad.

00:16:16.760 --> 00:16:19.360
Und ja,

00:16:19.360 --> 00:16:20.440
also da sind ja

00:16:20.440 --> 00:16:21.160
diese M4-Dinger drin,

00:16:21.160 --> 00:16:21.920
die sind sackschnell.

00:16:21.920 --> 00:16:22.700
Also es ist unglaublich

00:16:22.700 --> 00:16:23.020
schnell.

00:16:23.040 --> 00:16:24.580
Also lässt du das jetzt

00:16:24.580 --> 00:16:25.440
deine Machine Learning-Modelle

00:16:25.440 --> 00:16:25.640
tunen?

00:16:25.640 --> 00:16:26.360
Aber das ist doch kein

00:16:26.360 --> 00:16:28.100
General-Purpose-Computer.

00:16:28.100 --> 00:16:28.760
Nee, leider nicht.

00:16:28.760 --> 00:16:29.340
Argumentiert,

00:16:29.340 --> 00:16:29.980
dass es kein

00:16:29.980 --> 00:16:31.200
General-Purpose-Computer ist.

00:16:31.200 --> 00:16:33.220
Ja, das ist blöd,

00:16:33.220 --> 00:16:34.520
aber es wäre voll cool,

00:16:34.520 --> 00:16:35.620
wenn es ein

00:16:35.620 --> 00:16:36.800
General-Purpose-Computer wäre,

00:16:36.800 --> 00:16:37.840
weil es wäre nämlich

00:16:37.840 --> 00:16:38.460
der schnellste,

00:16:38.460 --> 00:16:38.860
den ich hätte.

00:16:38.860 --> 00:16:39.700
Bau doch einfach

00:16:39.700 --> 00:16:40.520
die CPU aus.

00:16:40.520 --> 00:16:41.020
Ja.

00:16:41.020 --> 00:16:42.180
Kannst nicht

00:16:42.180 --> 00:16:42.780
Wanders einlöten.

00:16:42.780 --> 00:16:43.420
Nee.

00:16:43.420 --> 00:16:46.440
Genau, also ja,

00:16:46.440 --> 00:16:47.040
das ist so ein bisschen

00:16:47.040 --> 00:16:47.720
so,

00:16:47.720 --> 00:16:48.560
aber das Ding ist tatsächlich,

00:16:48.560 --> 00:16:49.440
also es gibt das,

00:16:49.440 --> 00:16:50.260
M4 gibt es auch noch

00:16:50.260 --> 00:16:51.200
in keinem anderen Gerät

00:16:51.200 --> 00:16:51.740
irgendwie von Apple,

00:16:51.740 --> 00:16:52.640
also nur im iPad.

00:16:53.940 --> 00:16:54.620
Ja, es ist schon

00:16:54.620 --> 00:16:55.420
so ein bisschen traurig.

00:16:55.420 --> 00:16:57.000
Es gab auch eine Tastatur

00:16:57.000 --> 00:16:58.600
diesmal mit einer

00:16:58.600 --> 00:16:59.200
Escape-Taste,

00:16:59.200 --> 00:17:00.100
sodass halt irgendwie

00:17:00.100 --> 00:17:00.960
mit der Escape-Taste

00:17:00.960 --> 00:17:01.400
kannst du eigentlich

00:17:01.400 --> 00:17:02.080
auf iOS überhaupt

00:17:02.080 --> 00:17:02.840
gar nichts anfangen,

00:17:02.840 --> 00:17:03.800
sodass halt viele Leute

00:17:03.800 --> 00:17:04.120
gedacht haben,

00:17:04.120 --> 00:17:05.060
es kommt irgendwann

00:17:05.060 --> 00:17:06.180
ein Mac OS für iPad,

00:17:06.180 --> 00:17:07.420
was auch voll cool wäre,

00:17:07.420 --> 00:17:07.940
aber nein,

00:17:07.940 --> 00:17:08.680
kam nicht.

00:17:08.680 --> 00:17:10.000
Und ja,

00:17:10.000 --> 00:17:11.300
jetzt habe ich ein iPad

00:17:11.300 --> 00:17:13.040
und kann es nicht benutzen.

00:17:13.040 --> 00:17:14.340
Ein bisschen doof,

00:17:14.340 --> 00:17:15.320
aber ja,

00:17:15.320 --> 00:17:16.600
ansonsten wirklich

00:17:16.600 --> 00:17:16.900
sehr schnell.

00:17:16.900 --> 00:17:17.400
Du darfst ja schnell

00:17:17.400 --> 00:17:17.980
YouTube gucken.

00:17:17.980 --> 00:17:19.080
Ja, genau.

00:17:19.080 --> 00:17:20.380
Und gut, genau.

00:17:20.380 --> 00:17:21.160
Ich habe noch so eine

00:17:21.160 --> 00:17:21.840
Platine mitgebracht,

00:17:21.840 --> 00:17:22.300
die kann man sich

00:17:22.300 --> 00:17:23.020
ankleben und

00:17:23.020 --> 00:17:24.140
mit so einem Magneten

00:17:24.140 --> 00:17:24.680
und da kann man

00:17:24.680 --> 00:17:25.460
so einen Text hin und her

00:17:25.460 --> 00:17:25.960
laufen lassen.

00:17:25.960 --> 00:17:27.380
Und da gibt es

00:17:27.380 --> 00:17:27.940
so ein Python-Modul,

00:17:27.940 --> 00:17:28.620
da kann man dann

00:17:28.620 --> 00:17:29.520
den Text auswählen.

00:17:29.520 --> 00:17:30.220
Und das ist

00:17:30.220 --> 00:17:31.080
dein schnellster Computer?

00:17:31.080 --> 00:17:37.520
Ja, genau.

00:17:37.520 --> 00:17:39.040
Und ja,

00:17:39.040 --> 00:17:40.640
ansonsten gab es

00:17:40.640 --> 00:17:41.120
noch so ein bisschen

00:17:41.120 --> 00:17:41.860
irgendwie,

00:17:41.860 --> 00:17:42.980
ja,

00:17:42.980 --> 00:17:43.980
LLM-Krams.

00:17:43.980 --> 00:17:46.520
Ja, da gibt es

00:17:46.520 --> 00:17:47.100
doch immer was,

00:17:47.100 --> 00:17:47.440
oder?

00:17:47.440 --> 00:17:48.660
Ja, also

00:17:48.660 --> 00:17:50.040
SAPIC hat tolle neue Modelle

00:17:50.040 --> 00:17:50.480
rausgebracht,

00:17:50.480 --> 00:17:51.460
die ziemlich beeindruckend sind.

00:17:53.000 --> 00:17:54.160
Ja, und Mistral

00:17:54.160 --> 00:17:55.180
hat jetzt,

00:17:55.180 --> 00:17:55.640
ich glaube,

00:17:55.640 --> 00:17:56.960
heute ein neues Modell

00:17:56.960 --> 00:17:57.500
rausgebracht.

00:17:57.500 --> 00:17:58.420
Nemo heißt das,

00:17:58.420 --> 00:17:59.400
mit einem neuen Embedding.

00:17:59.400 --> 00:18:01.920
Die haben einen neuen

00:18:01.920 --> 00:18:03.540
Embedder trainiert,

00:18:03.540 --> 00:18:04.620
der wohl deutlich besser ist.

00:18:04.620 --> 00:18:06.020
Das müsste man sich

00:18:06.020 --> 00:18:06.520
mal anschauen.

00:18:06.520 --> 00:18:07.600
Und dieses Nemo-Modell

00:18:07.600 --> 00:18:08.460
hört sich auch interessant an.

00:18:08.460 --> 00:18:09.200
Da ist Zusammenarbeit

00:18:09.200 --> 00:18:10.280
mit Nvidia entstanden.

00:18:10.280 --> 00:18:13.940
Das ist ein 12B-Modell.

00:18:13.940 --> 00:18:16.200
Das ist also etwas größer

00:18:16.200 --> 00:18:17.280
als diese 7B-Modelle

00:18:17.280 --> 00:18:18.060
und das ist wohl

00:18:18.060 --> 00:18:19.560
genau so trainiert,

00:18:19.560 --> 00:18:20.540
dass du es auf einer

00:18:20.540 --> 00:18:21.700
normalen Grafikkarte

00:18:21.700 --> 00:18:22.460
laufen lassen kannst.

00:18:22.460 --> 00:18:22.980
Also auf einer

00:18:22.980 --> 00:18:24.520
40, 90...

00:18:24.520 --> 00:18:25.280
Ja, die haben ja alle

00:18:25.280 --> 00:18:27.280
11, 12 Gigabyte

00:18:27.280 --> 00:18:29.020
Hauptspeicher, ja.

00:18:29.020 --> 00:18:29.260
Genau.

00:18:29.260 --> 00:18:30.760
Und das ist wohl auch

00:18:30.760 --> 00:18:31.400
schon so trainiert,

00:18:31.400 --> 00:18:33.420
dass es mit FP8 geht,

00:18:33.420 --> 00:18:33.980
ohne Leistungsabfall.

00:18:33.980 --> 00:18:35.460
Und das ist natürlich

00:18:35.460 --> 00:18:37.260
direkt sehr praktisch.

00:18:37.260 --> 00:18:38.620
Ja, ich habe auch

00:18:38.620 --> 00:18:39.160
letztens gesehen,

00:18:39.160 --> 00:18:39.980
dass irgendjemand quasi,

00:18:39.980 --> 00:18:42.120
also war das

00:18:42.120 --> 00:18:42.980
Microsoft Research?

00:18:42.980 --> 00:18:44.820
Ich weiß es nicht.

00:18:44.820 --> 00:18:45.160
Ich hatte ein Paper

00:18:45.160 --> 00:18:46.360
veröffentlicht zu einem

00:18:46.360 --> 00:18:46.840
Modell,

00:18:46.840 --> 00:18:51.740
dass die gleiche

00:18:51.740 --> 00:18:52.500
Performance irgendwie

00:18:52.500 --> 00:18:52.960
überführt wird.

00:18:52.960 --> 00:18:53.800
Viele unterschiedliche,

00:18:53.800 --> 00:18:54.600
oder sogar deutlich

00:18:54.600 --> 00:18:55.220
bessere Performance

00:18:55.220 --> 00:18:56.100
über viele unterschiedliche

00:18:56.100 --> 00:18:57.780
Benchmarks hingekriegt hat

00:18:57.780 --> 00:19:00.140
als GPT-3.5,

00:19:00.140 --> 00:19:01.420
aber auf einer

00:19:01.420 --> 00:19:02.240
einzelnen GPU läuft.

00:19:02.240 --> 00:19:03.080
Also auf so einer

00:19:03.080 --> 00:19:03.920
Consumer-GPU.

00:19:03.920 --> 00:19:04.800
Und das war auch

00:19:04.800 --> 00:19:05.600
zum ersten Mal,

00:19:05.600 --> 00:19:06.800
dass das jemand

00:19:06.800 --> 00:19:07.320
geschafft hat,

00:19:07.320 --> 00:19:08.680
quasi GPT-3.5

00:19:08.680 --> 00:19:09.820
auf irgendwie

00:19:09.820 --> 00:19:10.520
so Consumer-Hardware

00:19:10.520 --> 00:19:10.940
zu schlagen.

00:19:10.940 --> 00:19:12.320
Und das auch

00:19:12.320 --> 00:19:12.720
selber ein...

00:19:12.720 --> 00:19:13.960
Also das geht jetzt,

00:19:13.960 --> 00:19:14.660
du kannst da wirklich

00:19:14.660 --> 00:19:16.120
auf deinem Rechner zu Hause

00:19:16.120 --> 00:19:16.660
irgendwie Sachen

00:19:16.660 --> 00:19:17.180
laufen lassen,

00:19:17.180 --> 00:19:17.660
lokal,

00:19:17.660 --> 00:19:19.460
auf deiner

00:19:19.460 --> 00:19:20.880
Spielegrafikkarte,

00:19:20.880 --> 00:19:21.980
die halt irgendwie

00:19:21.980 --> 00:19:22.880
das,

00:19:22.960 --> 00:19:23.880
das Chat-GPT

00:19:23.880 --> 00:19:24.220
von,

00:19:24.220 --> 00:19:26.040
vom Anfang halt

00:19:26.040 --> 00:19:26.740
deutlich schlagen.

00:19:26.740 --> 00:19:28.040
Und das ist interessant.

00:19:28.040 --> 00:19:28.300
Also,

00:19:28.300 --> 00:19:28.980
ja,

00:19:28.980 --> 00:19:29.580
es geht dran.

00:19:29.580 --> 00:19:30.720
Ja,

00:19:30.720 --> 00:19:31.380
da tun sich doch

00:19:31.380 --> 00:19:32.020
viele Dinge.

00:19:32.020 --> 00:19:33.220
Das ist schön,

00:19:33.220 --> 00:19:33.800
dass da so,

00:19:33.800 --> 00:19:34.900
auch so,

00:19:34.900 --> 00:19:35.700
auch so völlig,

00:19:35.700 --> 00:19:37.300
sag ich mal,

00:19:37.300 --> 00:19:38.860
normale Sachen,

00:19:38.860 --> 00:19:39.100
ja,

00:19:39.100 --> 00:19:40.420
dass sich jetzt hier

00:19:40.420 --> 00:19:42.540
GPT-4 und 4.0

00:19:42.540 --> 00:19:42.880
und so,

00:19:42.880 --> 00:19:43.340
dass die sich

00:19:43.340 --> 00:19:43.860
weiterentwickeln

00:19:43.860 --> 00:19:44.600
und Cloud Sonnet

00:19:44.600 --> 00:19:45.020
und so weiter.

00:19:45.020 --> 00:19:46.520
Ach so,

00:19:46.520 --> 00:19:47.260
und das

00:19:47.260 --> 00:19:48.220
Mistral-Nemo-Modell

00:19:48.220 --> 00:19:49.860
hat ein 128K

00:19:49.860 --> 00:19:51.200
Contacts-Window.

00:19:51.200 --> 00:19:51.820
Das ist eine

00:19:51.820 --> 00:19:52.400
Besonderheit.

00:19:52.960 --> 00:19:53.520
Das ist auch

00:19:53.520 --> 00:19:54.220
was Interessantes,

00:19:54.220 --> 00:19:54.840
weil die anderen

00:19:54.840 --> 00:19:55.500
lokalen Modelle

00:19:55.500 --> 00:19:56.160
hatten ja immer nur

00:19:56.160 --> 00:19:56.840
irgendwie 4K

00:19:56.840 --> 00:19:57.360
oder 8K.

00:19:57.360 --> 00:19:57.920
Ja.

00:19:57.920 --> 00:19:58.520
Und das,

00:19:58.520 --> 00:19:59.300
das macht doch

00:19:59.300 --> 00:19:59.800
nochmal deutlich

00:19:59.800 --> 00:20:00.160
eine Schicht aus.

00:20:00.160 --> 00:20:01.020
Dass sich so,

00:20:01.020 --> 00:20:01.960
so ganz normale

00:20:01.960 --> 00:20:02.780
Sachen,

00:20:02.780 --> 00:20:03.240
sag ich mal,

00:20:03.240 --> 00:20:03.800
weiterentwickeln,

00:20:03.800 --> 00:20:04.360
dass man eben,

00:20:04.360 --> 00:20:04.960
genau wie du sagst,

00:20:04.960 --> 00:20:05.160
Jochen,

00:20:05.160 --> 00:20:06.300
das jetzt auf

00:20:06.300 --> 00:20:07.160
normalen GPUs

00:20:07.160 --> 00:20:07.880
laufen lassen kann

00:20:07.880 --> 00:20:08.580
und dass die Modelle

00:20:08.580 --> 00:20:09.840
größer und schneller

00:20:09.840 --> 00:20:10.800
und trotzdem

00:20:10.800 --> 00:20:11.780
skalierbar werden

00:20:11.780 --> 00:20:12.240
und dass,

00:20:12.240 --> 00:20:13.620
dass es auch

00:20:13.620 --> 00:20:14.080
in der Richtung

00:20:14.080 --> 00:20:14.560
Entwicklung gibt,

00:20:14.560 --> 00:20:14.920
das finde ich

00:20:14.920 --> 00:20:15.580
eigentlich ziemlich cool.

00:20:15.580 --> 00:20:16.180
Ja.

00:20:16.180 --> 00:20:16.980
Dass es nicht nur so

00:20:16.980 --> 00:20:17.720
eben in diesen,

00:20:17.720 --> 00:20:19.080
in diesen Hochburgen

00:20:19.080 --> 00:20:19.820
und in den

00:20:19.820 --> 00:20:20.760
Diensteanbietern

00:20:20.760 --> 00:20:21.280
festhängt,

00:20:21.280 --> 00:20:23.640
sondern die Szene

00:20:23.640 --> 00:20:24.600
ist auch sehr lokal.

00:20:24.600 --> 00:20:25.060
Und wenn man sich

00:20:25.060 --> 00:20:25.740
da mal so dieses,

00:20:25.740 --> 00:20:26.180
wenn man sich

00:20:26.180 --> 00:20:27.060
Hugging Face anguckt,

00:20:27.060 --> 00:20:27.240
ja,

00:20:27.240 --> 00:20:27.680
und wie viele

00:20:27.680 --> 00:20:29.120
Pflege von Lama es gibt

00:20:29.120 --> 00:20:29.700
und dann gibt es

00:20:29.700 --> 00:20:29.960
manche,

00:20:29.960 --> 00:20:30.340
wo die,

00:20:30.340 --> 00:20:31.180
wo das

00:20:31.180 --> 00:20:31.920
Sicherheitstraining

00:20:31.920 --> 00:20:32.280
weg ist

00:20:32.280 --> 00:20:32.780
und der Einzel

00:20:32.780 --> 00:20:33.260
spricht nur

00:20:33.260 --> 00:20:34.040
keine Art und Sprache

00:20:34.040 --> 00:20:34.540
und der Einzel

00:20:34.540 --> 00:20:34.800
ist nur

00:20:34.800 --> 00:20:35.120
mit diesem,

00:20:35.120 --> 00:20:35.600
das und jenes

00:20:35.600 --> 00:20:35.820
kann.

00:20:35.820 --> 00:20:39.040
Ja.

00:20:39.040 --> 00:20:40.580
Es ist schon schön,

00:20:40.580 --> 00:20:41.220
dass da was passiert.

00:20:41.220 --> 00:20:42.520
Ja, genau.

00:20:42.520 --> 00:20:43.760
Ja, und die,

00:20:43.760 --> 00:20:44.420
die andere Seite,

00:20:44.420 --> 00:20:45.560
also OpenAI und so,

00:20:45.560 --> 00:20:46.060
das ist auch interessant.

00:20:46.060 --> 00:20:46.540
Also überhaupt,

00:20:46.540 --> 00:20:47.240
da, da,

00:20:47.240 --> 00:20:48.080
da wollte ich auch noch

00:20:48.080 --> 00:20:49.180
wegen Apple irgendwie

00:20:49.180 --> 00:20:50.900
drauf zu sprechen kommen, die

00:20:50.900 --> 00:20:53.140
bauen ja jetzt dann irgendwie die Dinger ein

00:20:53.140 --> 00:20:54.980
in

00:20:54.980 --> 00:20:56.420
iOS und

00:20:56.420 --> 00:20:58.780
was eingebaut wird, ist auch

00:20:58.780 --> 00:20:59.880
GPT-4.0.

00:20:59.880 --> 00:21:02.940
Also du kriegst halt jetzt, wenn du ein iPhone

00:21:02.940 --> 00:21:04.740
oder sonst irgendwas kaufst, wahrscheinlich dann ab jetzt,

00:21:04.740 --> 00:21:07.000
wenn die neuen Geräte kommen, kriegst du halt

00:21:07.000 --> 00:21:08.960
oder eine neue iOS-Version, kriegst du

00:21:08.960 --> 00:21:11.140
halt quasi die Bezahl-Version

00:21:11.140 --> 00:21:12.060
von OpenAI

00:21:12.060 --> 00:21:14.200
irgendwie in deinem Gerät

00:21:14.200 --> 00:21:15.520
und

00:21:15.520 --> 00:21:18.800
das ist halt ein relativ dicker

00:21:18.800 --> 00:21:21.060
Deal wohl und dafür

00:21:21.060 --> 00:21:22.960
kriegst, also das ist glaube ich nur ein Gerücht, das ist

00:21:22.960 --> 00:21:24.620
noch nicht bescheidigt, aber. Er hat noch sogar einen

00:21:24.620 --> 00:21:26.260
Board-Seed. Ja genau, die haben jetzt

00:21:26.260 --> 00:21:28.880
Microsoft hat doch die Daten von allen

00:21:28.880 --> 00:21:30.960
iOS-Muttern. Haben sie wieder aufgegeben, sind nicht

00:21:30.960 --> 00:21:31.140
mehr.

00:21:31.140 --> 00:21:34.860
Sowohl Microsoft als auch Apple

00:21:34.860 --> 00:21:37.020
haben ihren Board-Seed aufgegeben. Es waren eh nur Beobachtende,

00:21:37.020 --> 00:21:38.960
aber haben sie beide, es haben sich beide zurückgezogen.

00:21:38.960 --> 00:21:40.900
Achso, okay, ich dachte

00:21:40.900 --> 00:21:43.000
eigentlich, dass jetzt

00:21:43.000 --> 00:21:44.840
sozusagen das Gerücht war, dass das Phil Schiller

00:21:44.840 --> 00:21:46.980
irgendwie ins Board von OpenAI geht, aber

00:21:46.980 --> 00:21:48.640
Ja, haben sie aber wieder

00:21:48.640 --> 00:21:50.480
zurückgezogen. Ah, okay, dann, naja,

00:21:50.480 --> 00:21:51.940
dann war ich halt schon nicht mehr so aktuell,

00:21:51.940 --> 00:21:54.740
aber ich meine. Ja, es bewegt sich so

00:21:54.740 --> 00:21:56.200
schnell, dass du nicht

00:21:56.200 --> 00:21:58.740
Wahnsinn. Wenn man hinguckt, ist schon alles ganz

00:21:58.740 --> 00:22:00.840
anders. Aber, naja,

00:22:00.840 --> 00:22:02.420
gut, also ich, in gewisser Weise verstehe ich es ja auch, also

00:22:02.420 --> 00:22:04.640
das große Problem von OpenAI ist ja irgendwie,

00:22:04.640 --> 00:22:06.640
dass sie halt zwar irgendwie ganz

00:22:06.640 --> 00:22:08.760
gute Modelle haben, aber sie haben halt

00:22:08.760 --> 00:22:10.320
die Geräte nicht da draußen. Also sie haben halt

00:22:10.320 --> 00:22:12.520
einen strukturellen Nachteil gegenüber sowas wie Google

00:22:12.520 --> 00:22:14.560
oder so. Google braucht das alles nicht. Die können

00:22:14.560 --> 00:22:15.920
einfach irgendwie über Android

00:22:15.920 --> 00:22:18.260
haben sie da halt einen riesen Hebel.

00:22:18.480 --> 00:22:20.200
Und, aber OpenAI,

00:22:20.200 --> 00:22:22.340
wenn sie halt nicht Partnerschaften

00:22:22.340 --> 00:22:24.140
mit Microsoft oder mit Apple

00:22:24.140 --> 00:22:25.780
haben, dann haben sie halt ein Problem, weil

00:22:25.780 --> 00:22:28.240
ja, wenn die, sonst

00:22:28.240 --> 00:22:30.260
passiert ihnen das, was halt irgendwie, keine Ahnung,

00:22:30.260 --> 00:22:32.180
Slack passiert ist mit Teams oder so

00:22:32.180 --> 00:22:34.080
und dann sind sie halt weg. Ja,

00:22:34.080 --> 00:22:36.460
insofern, ja, ist auf jeden Fall

00:22:36.460 --> 00:22:37.860
interessante Zeiten. Bin mal gespannt.

00:22:37.860 --> 00:22:40.180
Aber 4.0 ist auch so gut, also

00:22:40.180 --> 00:22:41.540
ich finde das hier auch dauernd, also

00:22:41.540 --> 00:22:43.760
dass das wahrscheinlich irgendwie

00:22:43.760 --> 00:22:46.460
Was machst du denn damit? Ja, programmieren.

00:22:46.460 --> 00:22:48.280
Ach so, ja, gut,

00:22:48.320 --> 00:22:50.280
okay, das, ich weiß nicht, das geht nicht in den

00:22:50.280 --> 00:22:52.040
Flow rein. Ja,

00:22:52.040 --> 00:22:53.880
aber auch Opus, das ist schon

00:22:53.880 --> 00:22:56.280
Ja, Opus ist auch super, also ja, absolut.

00:22:56.280 --> 00:22:58.420
Oder so nicht. Ja, du gibst

00:22:58.420 --> 00:23:00.120
halt einfach so Fragen und das stimmt

00:23:00.120 --> 00:23:02.100
dann auf einmal doch eher mehr

00:23:02.100 --> 00:23:04.020
als früher. Noch mehr

00:23:04.020 --> 00:23:06.220
als früher. Und dann, man kann es

00:23:06.220 --> 00:23:07.920
halt so steuern, ne? Habt ihr das irgendwo

00:23:07.920 --> 00:23:09.400
integriert oder? Ja, ja, ID.

00:23:09.400 --> 00:23:12.300
Also auch Konsole halt,

00:23:12.300 --> 00:23:14.000
ne? Und wenn man halt,

00:23:14.000 --> 00:23:16.100
dann kannst du halt auch pipen, mit Cut reinpipen

00:23:16.100 --> 00:23:17.960
irgendwas oder sag dann halt,

00:23:18.160 --> 00:23:20.040
äh, Template, äh,

00:23:20.040 --> 00:23:21.600
mach einen PyTest drauf oder so.

00:23:21.600 --> 00:23:24.180
Und das ist gut. Gute Vorschläge.

00:23:24.180 --> 00:23:26.120
Also die sind nicht immer ganz rein, aber man

00:23:26.120 --> 00:23:28.160
kann das ja auch modifizieren, kann sagen, so, ja, ein bisschen mehr

00:23:28.160 --> 00:23:30.140
in, ne, ein bisschen mehr Fixtures, ein bisschen weniger

00:23:30.140 --> 00:23:31.960
dies, ein bisschen weniger das, wenn man das nicht schon im System

00:23:31.960 --> 00:23:34.060
prompt eh schon drin stehen hat. Und dann ist das

00:23:34.060 --> 00:23:35.900
ziemlich das, was man will. Man kann ja auch so ein Beispiel

00:23:35.900 --> 00:23:37.960
geben, wie, hey, und so wie ich das hier gemacht hab,

00:23:37.960 --> 00:23:39.960
so, dass es ungefähr so sollte, könnte es

00:23:39.960 --> 00:23:41.740
aussehen. Und dann

00:23:41.740 --> 00:23:42.660
fertig.

00:23:42.660 --> 00:23:45.860
Ich bin ja mal neidisch, wenn da Leute

00:23:45.860 --> 00:23:48.120
das so erzählen, weil ich komm mit,

00:23:48.120 --> 00:23:49.980
mit solchen Systemen einfach irgendwie nicht in den,

00:23:49.980 --> 00:23:51.000
ich komm nicht in den Flow.

00:23:51.000 --> 00:23:52.920
Vielleicht muss man sich da mal zusammensetzen.

00:23:52.920 --> 00:23:53.580
An E-Mails, Johannes.

00:23:53.580 --> 00:23:57.700
Ich hab doch Peitscham, bin doch

00:23:57.700 --> 00:23:58.940
Peitscham-Unterstützer.

00:23:58.940 --> 00:24:02.100
Ja, aber

00:24:02.100 --> 00:24:03.980
hast du da den, den Copilot zum Beispiel an

00:24:03.980 --> 00:24:05.920
oder so? Weil das ist auch schon ganz okay. Also

00:24:05.920 --> 00:24:07.880
ich find, ehrlich gesagt, das ist nicht so gut, wie wenn man

00:24:07.880 --> 00:24:09.720
jetzt quasi direkt mit, ähm.

00:24:09.720 --> 00:24:11.880
Wann hast du das letzte Mal probiert, Johan?

00:24:11.880 --> 00:24:14.160
Keins, keins dieser Systeme

00:24:14.160 --> 00:24:15.860
hat mich je überzeugt.

00:24:15.860 --> 00:24:18.040
Okay. Hab's, hab's ein paar Mal probiert und das war,

00:24:18.080 --> 00:24:19.000
jedes Mal so, ne.

00:24:19.000 --> 00:24:20.920
Johannes hätte es besser gewusst.

00:24:20.920 --> 00:24:23.640
Das, vielleicht ist das Problem, vielleicht

00:24:23.640 --> 00:24:25.820
weiß ich es einfach besser. Ja, ich würd's auch sagen.

00:24:25.820 --> 00:24:27.760
Ja gut, kann man. Da würd ich aber sagen, dass das

00:24:27.760 --> 00:24:29.840
genau das. Ne, wenn der Jochen sagt,

00:24:29.840 --> 00:24:31.860
dass das bei ihm hilft, dann kann das

00:24:31.860 --> 00:24:33.140
bei mir nicht sein, dass ich es besser weiß.

00:24:33.140 --> 00:24:36.020
Also hier ist eine wundervolle, wundervolle

00:24:36.020 --> 00:24:37.660
Überleitung jetzt übrigens, weil Tim Peters, der

00:24:37.660 --> 00:24:39.760
äh, Co-Entwickler und

00:24:39.760 --> 00:24:41.700
Autor von Zen auf Python, das ihr bestimmt alle kennt, ne,

00:24:41.700 --> 00:24:43.920
im Prozess, äh, dann meinte

00:24:43.920 --> 00:24:45.820
der Plan wäre, wenn jemand ein Feature entwickelt,

00:24:45.820 --> 00:24:48.040
das du nicht verstehst, dann knall ihn einfach ab.

00:24:48.040 --> 00:24:49.780
Ja. Und das ist der Einstieg

00:24:49.780 --> 00:24:51.480
in das wunderschöne Buch von

00:24:51.480 --> 00:24:53.640
Python. Ja, muss man direkt mal klar machen, wie

00:24:53.640 --> 00:24:55.400
die Sachen dann so laufen und, äh, genau.

00:24:55.400 --> 00:24:57.480
Das ist auf jeden Fall einfacher, als etwas Neues zu lernen.

00:24:57.480 --> 00:24:59.600
Ja, und dann am Schluss hat man nur noch Leute, die

00:24:59.600 --> 00:25:01.600
irgendwie kein Problem mehr haben, das zu verstehen, was man sagt.

00:25:01.600 --> 00:25:03.880
Und, ja, und bevor, äh, die einzelnen

00:25:03.880 --> 00:25:05.640
lebenden, überlebenden Entwickler, dann

00:25:05.640 --> 00:25:07.820
ja, kann man ein

00:25:07.820 --> 00:25:09.800
kleines Stück von dem, was man schon tun kann,

00:25:09.800 --> 00:25:11.400
dann verwenden und kommt damit irgendwie weiter.

00:25:11.400 --> 00:25:14.980
Also sind wir jetzt bei Flut und Python?

00:25:14.980 --> 00:25:15.840
Sind wir jetzt bei Flut und Python?

00:25:15.840 --> 00:25:18.000
Sind die News, äh, ja, ich würde tatsächlich,

00:25:18.000 --> 00:25:19.400
tatsächlich jetzt so ein bisschen unser

00:25:19.400 --> 00:25:21.760
Quatsch versuchen, in eine Struktur

00:25:21.760 --> 00:25:23.840
zu überführen, die uns ein bisschen zurückführt auf

00:25:23.840 --> 00:25:25.200
dieses wundervolle

00:25:25.200 --> 00:25:27.740
Python-Data. Also ich, Flut und,

00:25:27.740 --> 00:25:29.640
was heißt denn Flut und Flüssig? Also ich habe, wollte nicht

00:25:29.640 --> 00:25:31.000
über das Buch sprechen eigentlich. Fließend, fließend.

00:25:31.000 --> 00:25:33.440
Ich wollte eigentlich, eigentlich wollte ich gar nicht erwähnen,

00:25:33.440 --> 00:25:35.520
dass das Buch, äh, das, das, das jetzt

00:25:35.520 --> 00:25:37.680
aus dem Buch klaut, aber gut. Ach so, du, du, ach so,

00:25:37.680 --> 00:25:39.320
du wolltest einfach so tun, als ist das deine, deine,

00:25:39.320 --> 00:25:40.500
Entschuldigung.

00:25:40.500 --> 00:25:43.200
Ach so, so gründlich versaut.

00:25:43.200 --> 00:25:45.700
Okay. Ja.

00:25:45.700 --> 00:25:47.800
Ja, nee, wir können das auch sagen.

00:25:47.960 --> 00:25:49.540
Ist ja kein Problem, aber, äh, genau, was wir,

00:25:49.540 --> 00:25:51.520
dann können wir es schon abgeben, finde ich, ja. Was es, was es

00:25:51.520 --> 00:25:53.520
heute, äh, im Grunde geht, ist halt, wie,

00:25:53.520 --> 00:25:55.640
sie nennen das Python-Data-Model, oder

00:25:55.640 --> 00:25:57.560
im Buch wird es auch so genannt, es wird auch in der Referenz

00:25:57.560 --> 00:25:59.720
so genannt. Es gibt andere Leute, die nennen das

00:25:59.720 --> 00:26:01.480
irgendwie anders, Python-Object-Model oder so.

00:26:01.480 --> 00:26:03.120
Und im Grunde geht es darum,

00:26:03.120 --> 00:26:05.740
was ist denn das jetzt überhaupt wieder alles?

00:26:05.740 --> 00:26:07.220
Genau. Also ich tue jetzt mal einmal so, ne.

00:26:07.220 --> 00:26:07.640
Ja, ja.

00:26:07.640 --> 00:26:11.560
Tu mal so, als ob du das nicht wüsstest, damit ich. Ja, genau, das sag ich doch.

00:26:11.560 --> 00:26:13.480
Ja. Wie immer.

00:26:13.480 --> 00:26:14.880
Ähm.

00:26:14.880 --> 00:26:16.820
Also zum Beispiel,

00:26:17.920 --> 00:26:19.640
ist halt die, die, die, die,

00:26:19.640 --> 00:26:21.820
ein super Beispiel ist halt, um da

00:26:21.820 --> 00:26:23.840
vielleicht einen Einstieg zu finden, warum sagt man

00:26:23.840 --> 00:26:25.420
in Python eigentlich irgendwie len

00:26:25.420 --> 00:26:27.740
von irgendwas, irgendeiner Collection oder so

00:26:27.740 --> 00:26:30.180
und nicht collection.len

00:26:30.180 --> 00:26:31.760
Klammer auf, Klammer zu, wie man das jetzt vielleicht

00:26:31.760 --> 00:26:33.860
in Ruby machen würde oder so. Ich weiß ehrlich gesagt

00:26:33.860 --> 00:26:35.040
gar nicht, wie man es in Ruby macht, aber

00:26:35.040 --> 00:26:37.060
In Java, sehr gerne. In Java, in Java.

00:26:37.060 --> 00:26:39.380
Die machen das komisch. Genau.

00:26:39.380 --> 00:26:42.300
Warum macht man das eigentlich so? Und, ähm,

00:26:42.300 --> 00:26:43.900
ja, also der,

00:26:43.900 --> 00:26:45.840
das, was halt, äh,

00:26:45.840 --> 00:26:47.880
Python an der Stelle

00:26:47.880 --> 00:26:49.700
halt anders macht, ist halt,

00:26:49.700 --> 00:26:51.120
dass es irgendwie ein bisschen

00:26:51.120 --> 00:26:53.560
objektorientierte Purity sozusagen

00:26:53.560 --> 00:26:55.880
irgendwie opfert, um halt eine Menge

00:26:55.880 --> 00:26:56.960
andere Vorteile zu kriegen.

00:26:56.960 --> 00:26:59.760
Und, ähm, ja, das macht es, also das ist

00:26:59.760 --> 00:27:01.600
überhaupt so eine charakteristische Geschichte von, von

00:27:01.600 --> 00:27:03.820
Python, dass man halt, ähm,

00:27:03.820 --> 00:27:05.660
oft irgendwie, ja, halt nicht

00:27:05.660 --> 00:27:07.640
die, die reine Lehre irgendwie macht, sondern

00:27:07.640 --> 00:27:09.640
halt irgendwie etwas, was nicht ganz so rein ist,

00:27:09.640 --> 00:27:10.880
aber was halt praktisch viel besser funktioniert.

00:27:10.880 --> 00:27:13.460
Okay, ich verstehe jetzt meine Sache nicht. Also warum ist erstens irgendwas mit

00:27:13.460 --> 00:27:15.580
Klasse und Attribut und Methode

00:27:15.580 --> 00:27:17.680
called die reine Lehre und zweitens, was ist das

00:27:17.680 --> 00:27:19.480
Problem, wenn man irgendeine Funktion hat oder eine

00:27:19.480 --> 00:27:21.600
äh, äh, call it whatever you like

00:27:21.600 --> 00:27:23.560
oder eine Closure und kippst da, äh,

00:27:23.560 --> 00:27:25.400
ein Objekt rein und dann

00:27:25.400 --> 00:27:27.480
passieren Dinge damit? Naja, also

00:27:27.480 --> 00:27:29.660
sozusagen, wenn du jetzt reine Objektorientierung

00:27:29.660 --> 00:27:31.440
machen wollen würdest, dann würde man ja

00:27:31.440 --> 00:27:33.460
sagen, naja gut, du schickst halt irgendwie Nachrichten an

00:27:33.460 --> 00:27:35.500
ein Objekt oder du rufst halt Methoden auf oder was auch immer,

00:27:35.500 --> 00:27:37.520
wie man das nennt. Und das

00:27:37.520 --> 00:27:38.540
ist dann die Sache des Objekts.

00:27:38.540 --> 00:27:41.580
Warum? Ja, so ist es halt gedacht.

00:27:41.580 --> 00:27:43.600
Also, ja. Das ist zum Beispiel in Java so.

00:27:43.600 --> 00:27:45.380
Ja, aber warum ist das so? Java heißt

00:27:45.380 --> 00:27:47.520
Kingdom of Nouns und, äh,

00:27:47.520 --> 00:27:49.240
äh, es gibt quasi keine

00:27:49.240 --> 00:27:51.300
Funktionen in Java, sondern es gibt nur Objekte und

00:27:51.300 --> 00:27:53.360
denen kannst du Nachrichten schicken und die machen

00:27:53.360 --> 00:27:55.220
dann irgendwas. Und das ist der einzige

00:27:55.220 --> 00:27:57.420
Mechanismus, den es im Wesentlichen gibt. Und selbst

00:27:57.420 --> 00:27:58.940
wenn du sowas hast wie eine Main-Funktion,

00:27:58.940 --> 00:28:01.420
dann hast du da irgendwo eine Klasse und dann ist es halt

00:28:01.420 --> 00:28:03.700
eine Static-Methode

00:28:03.700 --> 00:28:05.720
auf dieser Klasse drauf. Und

00:28:05.720 --> 00:28:07.280
anstatt, dass du sagst, äh,

00:28:07.280 --> 00:28:09.460
wenn unser Programm läuft, dann rufen wir die Main-Funktion

00:28:09.460 --> 00:28:11.420
auf, sagst du, wir schicken eine

00:28:11.420 --> 00:28:13.520
Main-Nachricht an unsere Main-Klasse.

00:28:13.520 --> 00:28:14.980
Aber warum

00:28:14.980 --> 00:28:17.360
würde man auf die Idee kommen, dass das eine gute

00:28:17.360 --> 00:28:19.140
Idee sein könnte?

00:28:19.140 --> 00:28:21.480
Naja. Also, was ist

00:28:21.480 --> 00:28:23.180
das? Also, ich muss mal kurz über die Trade-Offs reden,

00:28:23.180 --> 00:28:25.200
um das mal so zu rütteln. Warum wollte man

00:28:25.200 --> 00:28:27.340
denken, dass das eine gute Idee sein könnte, sowas

00:28:27.340 --> 00:28:29.340
zu tun? Naja,

00:28:29.340 --> 00:28:31.380
es reduziert natürlich schon die Anzahl von

00:28:31.380 --> 00:28:32.260
Dingen, die es so gibt.

00:28:32.260 --> 00:28:35.160
Es sind halt nur Objekte und Methodenaufrufe und mehr nicht.

00:28:35.160 --> 00:28:37.000
Und das ist warum gut?

00:28:37.000 --> 00:28:39.380
Also, Simplicity...

00:28:39.380 --> 00:28:40.080
Einfach eine Sache lernen.

00:28:40.080 --> 00:28:43.380
Weil Einfachheit ein Wegweiser zur Wahrheit ist.

00:28:43.380 --> 00:28:44.680
Oder zur Schönheit oder so.

00:28:44.680 --> 00:28:46.740
Okay.

00:28:47.200 --> 00:28:49.060
Point 1 für den Java-Entwickler.

00:28:49.060 --> 00:28:49.980
Für den dir.

00:28:49.980 --> 00:28:52.180
Ja. Okay, und

00:28:52.180 --> 00:28:54.720
warum ist es denn nicht auch einfach,

00:28:54.720 --> 00:28:55.860
einfach sowas wie

00:28:55.860 --> 00:28:58.720
funktionale Programmierung zu machen und da

00:28:58.720 --> 00:29:00.360
Zeug hintereinander hin und her zu reichen?

00:29:00.360 --> 00:29:02.360
Was fehlt einem denn da in diesem Vergleich?

00:29:02.360 --> 00:29:04.440
Funktionale Programmierung ist ja auch was anderes.

00:29:04.440 --> 00:29:06.220
Das gibt's auch, aber das ist was ganz anderes.

00:29:06.220 --> 00:29:09.040
Also, das ist ja...

00:29:09.040 --> 00:29:13.360
Also, kann man auch machen. Aber dann...

00:29:13.360 --> 00:29:14.800
Also, das wäre... Kannst du auch

00:29:14.800 --> 00:29:16.800
Pure haben, sowas wie Haskell oder so,

00:29:17.040 --> 00:29:18.800
oder Erlang oder weiß ich nicht.

00:29:18.800 --> 00:29:20.440
Ah, Standard-ML.

00:29:20.440 --> 00:29:23.040
Ja. Haskell, ja, diese modernen...

00:29:23.040 --> 00:29:24.940
Ja.

00:29:24.940 --> 00:29:27.220
Aber das ist halt

00:29:27.220 --> 00:29:29.260
ein anderes Konzept als jetzt Objektorientierung.

00:29:29.260 --> 00:29:30.780
Naja, aber wir sprechen gerade...

00:29:30.780 --> 00:29:33.280
Von ästhetischer Einfachheit

00:29:33.280 --> 00:29:34.580
oder so. Jaja, ist es auch.

00:29:34.580 --> 00:29:36.820
Aber es ist halt anders. Da gibt's halt dann nur

00:29:36.820 --> 00:29:39.040
Funktionen, sozusagen. Okay, aber ich wollte

00:29:39.040 --> 00:29:40.620
kurz auf die Trade-Offs hinaus, weil...

00:29:40.620 --> 00:29:43.040
Warum ist das jetzt...

00:29:43.040 --> 00:29:44.100
Naja, also

00:29:44.100 --> 00:29:46.880
der Grund, warum man jetzt denken könnte, dass es halt im Halten

00:29:46.880 --> 00:29:48.600
nicht so schön ist halt, dass man sagt,

00:29:48.600 --> 00:29:50.800
jetzt muss man halt auch noch so... Jetzt haben wir so Build-ins wie

00:29:50.800 --> 00:29:53.060
Len oder so, die so ein bisschen komisch sind.

00:29:53.060 --> 00:29:54.720
Aber tatsächlich hat es halt

00:29:54.720 --> 00:29:56.860
praktisch sehr viele Vorteile, wie

00:29:56.860 --> 00:29:59.040
ähm... Naja, ähm...

00:29:59.040 --> 00:30:00.940
Also, einmal

00:30:00.940 --> 00:30:02.920
du musst dir nicht für jedes Objekt merken,

00:30:02.920 --> 00:30:04.760
wie das denn jetzt nun heißt

00:30:04.760 --> 00:30:06.820
mit dieser Methode, weil das kann ja jeder dann anders

00:30:06.820 --> 00:30:07.780
machen. Das wäre ja irgendwie schlecht.

00:30:07.780 --> 00:30:10.800
Sondern... Das ist zum Beispiel ein Problem, was

00:30:10.800 --> 00:30:12.640
PHP hat. Ja. Oder JavaScript.

00:30:12.640 --> 00:30:14.680
Da heißt es manchmal Size und manchmal Length

00:30:14.680 --> 00:30:16.580
und manchmal Count. Ja.

00:30:16.720 --> 00:30:18.420
Ja. Und, ähm...

00:30:18.420 --> 00:30:20.560
Eine andere Geschichte ist halt, es ermöglicht

00:30:20.560 --> 00:30:22.300
dir halt, äh, irgendwie

00:30:22.300 --> 00:30:24.620
so ein paar dreckige Optimierungen

00:30:24.620 --> 00:30:26.460
zu machen, die halt irgendwie

00:30:26.460 --> 00:30:28.440
die Dinge, die wirklich, äh, Zeit

00:30:28.440 --> 00:30:30.260
kosten, irgendwie deutlich schneller zu machen. Wie zum Beispiel

00:30:30.260 --> 00:30:32.060
äh, du kannst halt

00:30:32.060 --> 00:30:34.280
da diese Sachen...

00:30:34.280 --> 00:30:35.900
Tatsächlich, was Len halt macht, ist ja

00:30:35.900 --> 00:30:37.860
schon dann quasi, wenn das

00:30:37.860 --> 00:30:40.140
ein Objekt ist, einer Klasse, die du erstellt hast,

00:30:40.140 --> 00:30:42.220
dann wird halt, äh, dann da

00:30:42.220 --> 00:30:44.620
Len aufgerufen. Schon doch die Methode,

00:30:44.620 --> 00:30:46.400
die geheime... Die Methode aufgerufen.

00:30:46.560 --> 00:30:48.580
Mhm. Äh, aber die ist halt

00:30:48.580 --> 00:30:50.460
nicht dafür da, dass, ähm, irgendwie

00:30:50.460 --> 00:30:52.160
andere die aufrufen, sondern, äh,

00:30:52.160 --> 00:30:54.260
oder dass man die von Hand aufruft, ähm,

00:30:54.260 --> 00:30:56.500
zu Fuß, äh, oder wie auch immer, sondern die ist

00:30:56.500 --> 00:30:58.680
halt dafür da, dass der Interpreter die aufruft.

00:30:58.680 --> 00:31:00.400
Wenn man halt Len von

00:31:00.400 --> 00:31:02.480
irgendwas sagt. Und dann ruft

00:31:02.480 --> 00:31:04.480
der Interpreter die auf, aber der Interpreter kann halt auch andere Dinge tun.

00:31:04.480 --> 00:31:06.440
Der kann zum Beispiel jetzt, wenn das ein, ähm,

00:31:06.440 --> 00:31:07.700
irgendwie so ein

00:31:07.700 --> 00:31:10.420
native, also ein Ding im Interpreter selber ist,

00:31:10.420 --> 00:31:12.340
also oder irgendwie ein C

00:31:12.340 --> 00:31:14.440
geschriebenes Ding, wie ein Dikt oder eine Liste

00:31:14.440 --> 00:31:16.220
oder sowas ist, dann kann es halt direkt,

00:31:16.400 --> 00:31:18.340
äh, irgendwie in diesem PyObject irgendwie

00:31:18.340 --> 00:31:20.100
drauf gucken, wie lang ist denn dieser, dieses Ding

00:31:20.100 --> 00:31:22.260
und gibt es dann halt zurück. Und muss halt keine

00:31:22.260 --> 00:31:24.340
Methode aufrufen. Also Methodenaufrufe sind halt

00:31:24.340 --> 00:31:26.320
etwas, was halt in Python super langsam ist.

00:31:26.320 --> 00:31:28.140
Oder in allen interpretierten

00:31:28.140 --> 00:31:30.380
Programmiersprachen, die so ähnlich sind wie Python,

00:31:30.380 --> 00:31:32.300
sind halt Funktionsaufrufe, Methodenaufrufe immer

00:31:32.300 --> 00:31:34.300
total langsam. Ist halt, da ist

00:31:34.300 --> 00:31:36.140
wirklich so ein Faktor tausend dazwischen, zwischen

00:31:36.140 --> 00:31:37.920
irgendwie reinem C und

00:31:37.920 --> 00:31:40.240
Funktionsaufruf und, äh, und Python

00:31:40.240 --> 00:31:42.180
oder so. Und, äh, ja,

00:31:42.180 --> 00:31:44.400
für die ganzen

00:31:44.400 --> 00:31:46.240
Standardfälle, wo man das halt benutzt,

00:31:46.240 --> 00:31:48.220
kann der Interpreter das halt alles

00:31:48.220 --> 00:31:50.100
wegoptimieren. Und dann macht er das halt einfach nicht.

00:31:50.100 --> 00:31:51.440
Sondern da wird gar nichts aufgerufen.

00:31:51.440 --> 00:31:54.320
Ähm, ja. Also das sind halt

00:31:54.320 --> 00:31:56.340
zwei große Vorteile, die man halt kriegt,

00:31:56.340 --> 00:31:58.220
wenn man halt ein bisschen Reinheit

00:31:58.220 --> 00:32:00.440
opfert, sozusagen. Und, ähm,

00:32:00.440 --> 00:32:02.420
genau. Das ist halt irgendwie diese Balance zwischen

00:32:02.420 --> 00:32:04.080
irgendwie, äh,

00:32:04.080 --> 00:32:06.160
Reinheit und, und funktioniert

00:32:06.160 --> 00:32:08.200
super. Und Magie. Genau.

00:32:08.200 --> 00:32:10.340
Ist halt so eine Spezial... Ja, Magie

00:32:10.340 --> 00:32:12.200
mag der, mag jetzt zum Beispiel der Autor

00:32:12.200 --> 00:32:13.980
von Flunepython an der Stelle gar nicht so

00:32:13.980 --> 00:32:16.080
gerne. Äh, so der, der

00:32:16.080 --> 00:32:18.080
also, man, man nennt die Dinger ja irgendwie

00:32:18.080 --> 00:32:20.160
äh, äh, Magic Methods auch.

00:32:20.160 --> 00:32:22.280
Also dieser, äh, Magic Methods

00:32:22.280 --> 00:32:23.800
ähm, äh, die...

00:32:23.800 --> 00:32:26.100
Das finde ich eine sehr schöne Diskussion. Ja. Über diese

00:32:26.100 --> 00:32:28.080
Namen, über die Magic Methods und über die

00:32:28.080 --> 00:32:30.020
Nicht-Magic Methods. Ja, ja.

00:32:30.020 --> 00:32:32.100
Fand ich, fand ich auch so. Das kommt halt so aus der

00:32:32.100 --> 00:32:34.040
Ruby, Ruby Community. Das wusste ich gar nicht.

00:32:34.040 --> 00:32:35.820
Ich dachte eigentlich, das gibt halt ein paar

00:32:35.820 --> 00:32:37.840
Python-Entwickler, die nennen das halt Magic Methods.

00:32:37.840 --> 00:32:41.880
Die dann sagen halt Dunder Methods oder sowas. Oder...

00:32:41.880 --> 00:32:42.360
Ja, aber

00:32:42.360 --> 00:32:43.900
in, in der Ruby-Welt ist das wohl

00:32:43.900 --> 00:32:45.920
üblich. Und, ähm,

00:32:45.920 --> 00:32:47.940
ja, aber der... Das ist der offizielle Name,

00:32:47.940 --> 00:32:49.880
oder, in Ruby? Ja, ja. Das, das, die heißen

00:32:49.880 --> 00:32:50.740
Magic Methods. Genau.

00:32:50.740 --> 00:32:54.060
Ja, oder auch in iPython oder so

00:32:54.060 --> 00:32:55.920
heißen die auch irgendwie Magic und dann gibt's diverse...

00:32:55.920 --> 00:32:57.900
Aber, aber... Aber das ist ja auch

00:32:57.900 --> 00:32:59.300
wirklich Magic. Das ist wirklich Magic? Okay.

00:32:59.300 --> 00:33:01.840
Aber eigentlich sind halt eben

00:33:01.840 --> 00:33:03.640
die, die Python-Dinger gar nicht Magic, sondern

00:33:03.640 --> 00:33:05.860
das ist halt eigentlich völlig klar, das dokumentiert, was das ist

00:33:05.860 --> 00:33:07.860
und was das tut. Und, ähm,

00:33:07.860 --> 00:33:09.560
insofern, der, der Autor sagt selber, okay,

00:33:09.560 --> 00:33:11.780
er findet das nicht gut. Die sollten lieber Muggel,

00:33:11.780 --> 00:33:13.860
Muggel-Methoden heißen oder so, weil sie halt

00:33:13.860 --> 00:33:15.760
so unmagisch sind. Aber

00:33:15.760 --> 00:33:17.780
ja. Ja, er nennt's ja dann auch

00:33:17.780 --> 00:33:19.760
auf Special Methods einfach. Special Methods

00:33:19.760 --> 00:33:21.260
ist auch ein guter Name. Ich glaube, das, was da,

00:33:21.260 --> 00:33:23.440
was da magisch ist, ist, dass man die

00:33:23.440 --> 00:33:25.820
implementiert und dann, äh, werden sie

00:33:25.820 --> 00:33:27.400
irgendwo her aufgerufen und... Ja.

00:33:27.400 --> 00:33:29.980
Wenn er das nicht weiß, dann ist das schon magisch.

00:33:29.980 --> 00:33:31.600
Ja, ich glaube auch. Dann gibt's Lenden von irgendwas ein

00:33:31.600 --> 00:33:33.560
und es wird aber was ganz anderes. Dass du für Anfänger

00:33:33.560 --> 00:33:35.740
es nicht ersichtlich, dass wenn du irgendwie so eine Methode dazu fügst,

00:33:35.740 --> 00:33:37.400
die Dinge macht, wo du nicht weißt, warum.

00:33:37.400 --> 00:33:39.800
Weil das unter der Haube passiert. Genau.

00:33:39.800 --> 00:33:41.580
Und, aber das Spiel war ja auch nicht, also magisch

00:33:41.580 --> 00:33:43.760
schon gut. Das macht ja Magie. Ah, es

00:33:43.760 --> 00:33:45.600
passiert irgendwas, ne, dann machst du einen String auf

00:33:45.600 --> 00:33:47.680
irgendein Objekt und dann kommt da irgendwas raus, weil du eine

00:33:47.680 --> 00:33:49.800
Repre-Methode beschriebst und dann, ah, Magie.

00:33:49.800 --> 00:33:50.780
Ne, so.

00:33:50.780 --> 00:33:53.420
Ja, ja. Wobei das natürlich eine sehr,

00:33:53.420 --> 00:33:55.200
eine sehr dünne Schicht Magie ist.

00:33:55.200 --> 00:33:57.420
Ja, das, äh, wie der Jochen schon gesagt hat, das, da gibt's

00:33:57.420 --> 00:33:59.400
eine Liste, so viel Magie gibt's

00:33:59.400 --> 00:34:01.240
und die sieht auch so und so aus und

00:34:01.240 --> 00:34:03.340
im Wesentlichen ist das ja nur eine syntaktische

00:34:03.340 --> 00:34:05.280
Umformung. Syntaktische Magie.

00:34:05.280 --> 00:34:07.640
Damit, syntaktische Magie, genau.

00:34:07.640 --> 00:34:09.440
Ja, aber das ist doch quasi echte Magie.

00:34:09.440 --> 00:34:11.200
Ich meine, echte Magie, da fummelt jemand

00:34:11.200 --> 00:34:12.920
vor den Augen mit deinem

00:34:12.920 --> 00:34:15.440
Fingerschnipsen rum und auf einmal zieht der hinterher

00:34:15.440 --> 00:34:17.540
seinem Ohr eine große, goldene, glänzende Münze.

00:34:17.540 --> 00:34:19.120
Ja, das sind Illusions.

00:34:19.120 --> 00:34:21.160
Das ist, das ist keine Magie. Das ist so ein bisschen

00:34:21.160 --> 00:34:22.480
aber so eine taktische Magie.

00:34:22.480 --> 00:34:27.280
Ja, aber echte Magie ist doch das, was man aus Harry Potter kennt.

00:34:27.280 --> 00:34:29.160
Dann schwingst du deinen Zauberstab und dann passiert

00:34:29.160 --> 00:34:31.080
irgendwas. Die richtigen Worte, der richtige

00:34:31.080 --> 00:34:33.000
Händler. In der richtigen Reihenfolge sagen, genau.

00:34:33.000 --> 00:34:35.060
Der macht irgendwas, was thermodynamisch nicht

00:34:35.060 --> 00:34:36.980
möglich ist. Ja, genau, aber sind wir uns eigentlich alle

00:34:36.980 --> 00:34:39.020
relativ einig, das gibt's halt auch nur in Harry Potter

00:34:39.020 --> 00:34:41.040
oder in. Ich weiß nicht, also ich finde

00:34:41.040 --> 00:34:43.100
tatsächlich. Und in Ruby. Die Analogie auch gar

00:34:43.100 --> 00:34:45.000
nicht so schlecht für Programmieren insgesamt. Also ich meine,

00:34:45.280 --> 00:34:47.080
halt, also ich meine, was ist, also man

00:34:47.080 --> 00:34:49.240
sagt irgendwie. Du sagst die richtigen Wörter

00:34:49.240 --> 00:34:51.780
in der richtigen Reihenfolge und dann passieren

00:34:51.780 --> 00:34:52.700
Dinge, genau.

00:34:52.700 --> 00:34:54.880
Ja, ich finde, das ist gar nicht so

00:34:54.880 --> 00:34:57.180
weit hergeholt, dass man dann das vergleicht. Deshalb sind wir

00:34:57.180 --> 00:34:59.140
alle Wizards. Ich hab auch den Wizard-Pullover.

00:34:59.140 --> 00:35:01.080
Es gibt auch tatsächlich Leute, die

00:35:01.080 --> 00:35:03.060
Nicht-Programmierer als Muggel bezeichnen.

00:35:03.060 --> 00:35:05.200
Also ich weiß, so weit würde ich jetzt nicht gehen vielleicht, aber.

00:35:05.200 --> 00:35:08.680
Echt, ich bezeichne die mal als NPCs.

00:35:08.680 --> 00:35:13.000
Ja. Nein.

00:35:13.000 --> 00:35:15.080
Tatsächlich, das

00:35:15.120 --> 00:35:16.980
erste Beispiel in einem

00:35:16.980 --> 00:35:19.140
nicht näher benannten Buch, was ich kürzlich gelesen

00:35:19.140 --> 00:35:19.400
habe,

00:35:19.400 --> 00:35:22.880
das hat mich tatsächlich etwas überrascht. Da war

00:35:22.880 --> 00:35:24.600
tatsächlich ein bisschen Magie drin. Und zwar,

00:35:24.600 --> 00:35:26.880
da wird ein

00:35:26.880 --> 00:35:28.740
Card-Deck implementiert.

00:35:28.740 --> 00:35:30.900
Ja. Und er implementiert nur

00:35:30.900 --> 00:35:32.720
zwei von diesen Methoden. Ja,

00:35:32.720 --> 00:35:34.280
für Kartentricks dann.

00:35:34.280 --> 00:35:36.900
Und er implementiert nur zwei

00:35:36.900 --> 00:35:39.020
Methoden, nämlich dann der Len und dann der Get-Item.

00:35:39.020 --> 00:35:40.840
Ja. Und

00:35:40.840 --> 00:35:42.740
das reicht aus für Slicing

00:35:42.740 --> 00:35:44.860
und Ranges und Wurst und Iteration.

00:35:44.960 --> 00:35:47.060
Das hat mich etwas überrascht,

00:35:47.060 --> 00:35:48.880
dass der Python-Interpreter sich aus einem

00:35:48.880 --> 00:35:49.960
Get-Item, aus einem Len,

00:35:49.960 --> 00:35:52.660
kann er sich alles zusammenbasteln. Ich meine, es ist nicht,

00:35:52.660 --> 00:35:54.540
wenn man so ein bisschen drüber nachdenkt, ist es

00:35:54.540 --> 00:35:55.720
einfach nur smart,

00:35:55.720 --> 00:35:58.740
dass das geht. Und es ist auch klar, dass das geht.

00:35:58.740 --> 00:36:00.900
Wenn ich weiß, wie viele es sind und ich ein einzelnes

00:36:00.900 --> 00:36:02.880
holen kann, dann kann ich

00:36:02.880 --> 00:36:04.380
auch mehrere holen. Okay, gut.

00:36:04.380 --> 00:36:06.920
Und ich kann auch

00:36:06.920 --> 00:36:08.880
Reverse machen drauf. Okay, auch das

00:36:08.880 --> 00:36:10.500
ist nicht arg überraschend.

00:36:10.500 --> 00:36:12.800
Und ich kann auch Iteration machen drauf. Okay, auch das

00:36:12.800 --> 00:36:13.980
ist nicht arg überraschend mehr.

00:36:14.800 --> 00:36:16.700
Aber dass es implementiert ist,

00:36:16.700 --> 00:36:17.440
das fand ich

00:36:17.440 --> 00:36:20.100
sehr cool.

00:36:20.100 --> 00:36:21.920
Ja, man delegiert im Grunde

00:36:21.920 --> 00:36:24.140
die ganze schlaue

00:36:24.140 --> 00:36:26.200
oder die ganze schwierige Funktionalität von

00:36:26.200 --> 00:36:28.560
wie das halt so funktioniert an die

00:36:28.560 --> 00:36:30.740
interne Liste in der Datenlage. Genau, wie das schnell auch funktionieren kann,

00:36:30.740 --> 00:36:32.620
indem man einfach so eine Len und ein Get-Item definiert.

00:36:32.620 --> 00:36:34.460
Ja, aber man ist nicht

00:36:34.460 --> 00:36:36.300
delegiert, sondern

00:36:36.300 --> 00:36:38.300
der ruft Len und Get-Item an.

00:36:38.300 --> 00:36:40.540
Ja, aber das macht dann die interne Repräsentation von Längen

00:36:40.540 --> 00:36:42.580
wird ja aufgerufen. Also das heißt, die Magie,

00:36:42.580 --> 00:36:44.640
die wirklich dann in C-Python-

00:36:44.640 --> 00:36:46.060
passiert, die ja damit schnell ist und so.

00:36:46.060 --> 00:36:47.360
Okay, also er implementiert.

00:36:47.360 --> 00:36:50.440
Gut, in dem Beispiel wird nicht implementiert,

00:36:50.440 --> 00:36:52.340
wie du tatsächlich

00:36:52.340 --> 00:36:53.660
Objekte speicherst, sondern benutzt eine Liste.

00:36:53.660 --> 00:36:56.580
Genau, es wird halt sozusagen, das wird weitergereicht,

00:36:56.580 --> 00:36:58.560
die Position wird weitergereicht an die Liste.

00:36:58.560 --> 00:37:00.180
Genau. Und die kann halt auch

00:37:00.180 --> 00:37:02.680
sein. Also die Implementierung

00:37:02.680 --> 00:37:04.360
dieser beiden Attribute ist

00:37:04.360 --> 00:37:05.640
tatsächlich,

00:37:05.640 --> 00:37:08.320
ist einfach durchdelegiert. Aber

00:37:08.320 --> 00:37:09.280
dass du dann daraus

00:37:09.280 --> 00:37:11.860
eine Slicing-Syntax kriegst mit Render.

00:37:11.860 --> 00:37:14.480
Ja, das ist ja, das macht ja der Interpreter

00:37:14.480 --> 00:37:15.480
für dich. Ja.

00:37:15.480 --> 00:37:18.440
Also der macht sich diese Ranges und ruft

00:37:18.440 --> 00:37:19.960
dann die einzelnen Get-Items auf.

00:37:19.960 --> 00:37:22.200
Ja. Also hat mich auch gewundert.

00:37:22.200 --> 00:37:23.800
Hätte jetzt auch nicht gedacht, dass

00:37:23.800 --> 00:37:25.880
man dann schon iterieren kann.

00:37:25.880 --> 00:37:28.460
Genau, das war

00:37:28.460 --> 00:37:30.420
mir gar nicht klar, dass das reicht, Get-Items

00:37:30.420 --> 00:37:32.080
zu implementieren. Also ich muss meine naive

00:37:32.080 --> 00:37:34.300
Karteninterpretation von meinem Kartenspiel, von meinem

00:37:34.300 --> 00:37:36.300
Pokerspiel auch nochmal anpassen, wenn ich das so sehe, weil

00:37:36.300 --> 00:37:38.200
tatsächlich ich da auch immer dann

00:37:38.200 --> 00:37:40.160
ein Objekt gemacht habe, an dem Karten dran waren, was natürlich

00:37:40.160 --> 00:37:42.300
dann eine Liste war, was aber nicht

00:37:42.300 --> 00:37:44.380
hieß, dass man einfach das Ding mischt,

00:37:44.420 --> 00:37:46.280
sondern man musste halt diese Mischmethode aufrufen. Ich glaube, das ist einfach

00:37:46.280 --> 00:37:47.420
totaler Quatsch.

00:37:47.420 --> 00:37:50.340
Ja, da gibt es aber auch verschiedene Ansätze.

00:37:50.340 --> 00:37:52.140
Da kannst du auch auf verschiedene Arten und Weisen

00:37:52.140 --> 00:37:54.240
drangehen. Du kannst drangehen und sagen, ich

00:37:54.240 --> 00:37:56.320
mache jetzt eine neue

00:37:56.320 --> 00:37:57.940
Klasse, die eine Liste

00:37:57.940 --> 00:38:00.640
einpackt und dann halt so ein paar magische Methoden,

00:38:00.640 --> 00:38:01.860
ich sage jetzt ja magische Methoden,

00:38:01.860 --> 00:38:04.360
exportiert. Oder du kannst sagen,

00:38:04.360 --> 00:38:06.180
ich behandle jetzt eine Liste wie

00:38:06.180 --> 00:38:07.240
ein XYZ.

00:38:07.240 --> 00:38:10.460
Und dann implementierst

00:38:10.460 --> 00:38:12.200
du erstmal selber gar nichts, sondern

00:38:12.200 --> 00:38:14.360
benutzt halt die Werkzeuge,

00:38:14.360 --> 00:38:15.800
die es gibt, auf eine bestimmte Art und Weise.

00:38:15.800 --> 00:38:18.060
Das sind ja schon zwei unterschiedliche, aber gleich

00:38:18.060 --> 00:38:20.020
herangehensweise. Aber dieser letzte Ansatz,

00:38:20.020 --> 00:38:22.260
das irgendwie wirkt, also smart,

00:38:22.260 --> 00:38:24.160
weil man halt tatsächlich nicht das Rad

00:38:24.160 --> 00:38:25.520
neu machen muss.

00:38:25.520 --> 00:38:27.660
Und ich glaube, das ist eigentlich sehr PySonic.

00:38:27.660 --> 00:38:29.800
Aber trotzdem sehr PySonic, sehr

00:38:29.800 --> 00:38:32.240
Implizites. Und in der Kombination,

00:38:32.240 --> 00:38:34.100
indem man das halt irgendwie schön

00:38:34.100 --> 00:38:35.960
modularisiert, kann man tolle Sachen machen.

00:38:35.960 --> 00:38:37.680
Also man muss so ein bisschen

00:38:37.680 --> 00:38:40.060
Boilerplate schreiben vielleicht, aber wie man es dann hinterher

00:38:40.060 --> 00:38:41.600
wirklich benutzt, wenn man diese Objekte in der Hand hat,

00:38:41.600 --> 00:38:43.420
wirkt einfach wie PurePython.

00:38:44.300 --> 00:38:46.200
Also, wenn man halt dann direkt auf dem Deck,

00:38:46.200 --> 00:38:48.120
was man in der Hand hat, Indizes

00:38:48.120 --> 00:38:50.000
machen kann, Ranges machen kann und so.

00:38:50.000 --> 00:38:51.980
Ja gut, hier geht es ja vor allen Dingen

00:38:51.980 --> 00:38:53.940
darum, diese Methoden zu erklären. Insofern

00:38:53.940 --> 00:38:55.860
überhaupt, ob man das jetzt so implementieren würde, weiß ich nicht.

00:38:55.860 --> 00:38:58.140
Also, keine Ahnung. Kommt drauf an, was man damit machen möchte.

00:38:58.140 --> 00:38:59.620
Aber, ja.

00:38:59.620 --> 00:39:01.820
Ja, ja, also ich finde es auch, ich finde es auch, also

00:39:01.820 --> 00:39:04.080
es sieht gut aus. Kann jetzt keiner sehen,

00:39:04.080 --> 00:39:05.040
weil es ein Podcast leider.

00:39:05.040 --> 00:39:07.800
Aber, ja, ja.

00:39:07.800 --> 00:39:09.660
Kannst du das teilen? Ist das public?

00:39:09.660 --> 00:39:11.500
Äh, nee.

00:39:11.500 --> 00:39:12.600
Oh.

00:39:14.240 --> 00:39:16.100
Na gut. Also, ich glaube, es gibt irgendwo

00:39:16.100 --> 00:39:18.040
bestimmt auf irgendwelchen Kanälen

00:39:18.040 --> 00:39:18.840
oder sowas. Ja.

00:39:18.840 --> 00:39:21.980
Das nächste Beispiel,

00:39:21.980 --> 00:39:24.060
was er bringt, fand ich auch interessant, aber das ist natürlich

00:39:24.060 --> 00:39:26.420
so ein bisschen dieses Vektorbeispiel.

00:39:26.420 --> 00:39:27.720
Das ist natürlich mehr so ein bisschen

00:39:27.720 --> 00:39:29.400
ja.

00:39:29.400 --> 00:39:31.860
Du musst das einfach unterleuchtern, bitte.

00:39:31.860 --> 00:39:34.200
Für alle unsere HörerInnen, was denn das Vektorbeispiel

00:39:34.200 --> 00:39:35.880
ist. Ja, er

00:39:35.880 --> 00:39:38.060
macht sich eine Klasse, eine

00:39:38.060 --> 00:39:39.720
zweidimensionale Vektorklasse.

00:39:39.720 --> 00:39:41.980
Also mit Richtung XY.

00:39:41.980 --> 00:39:44.180
Genau, also genau.

00:39:44.180 --> 00:39:46.120
Ein Koordinatenmodell, ein zweidimensionales

00:39:46.120 --> 00:39:47.720
Koordinatenmodell. Er sagt auch gleich im

00:39:47.720 --> 00:39:50.200
Vorhinein, könntest du auch die

00:39:50.200 --> 00:39:52.020
Bild-In-Klasse komplex verwenden.

00:39:52.020 --> 00:39:54.020
Die kann alles, was

00:39:54.020 --> 00:39:55.880
wir gleich hier machen und noch viel mehr.

00:39:55.880 --> 00:39:58.200
Aber zum Zeigen ist es ja ganz

00:39:58.200 --> 00:40:00.200
schön. Und da implementiert

00:40:00.200 --> 00:40:02.300
er drei Special Methods,

00:40:02.300 --> 00:40:04.120
nämlich add, abs und mul.

00:40:04.120 --> 00:40:05.700
Und

00:40:05.700 --> 00:40:07.280
kriegt daraus dann

00:40:07.280 --> 00:40:10.000
die Möglichkeit, zwei Vektoren zu addieren.

00:40:10.000 --> 00:40:12.320
Abs

00:40:12.320 --> 00:40:14.120
wird hier als die

00:40:14.120 --> 00:40:16.000
Metrik implementiert. Das heißt, es ist die Länge

00:40:16.000 --> 00:40:18.140
eines Vektors und mul ist

00:40:18.140 --> 00:40:19.960
eine Skalarmultiplikation. Das heißt, kannst du einen

00:40:19.960 --> 00:40:22.120
Vektor mit einem Integer oder mit einem

00:40:22.120 --> 00:40:24.000
Float multiplizieren, kannst du die Länge

00:40:24.000 --> 00:40:25.520
verändern.

00:40:25.520 --> 00:40:28.000
Auch das mit wenigen Methoden

00:40:28.000 --> 00:40:29.980
schon relativ viel erreicht

00:40:29.980 --> 00:40:31.440
und auch relativ viel Syntax erreicht.

00:40:31.440 --> 00:40:34.200
Das fehlt aber noch Vektor mit Vektor multiplizieren.

00:40:34.200 --> 00:40:36.140
Ja, das ist nicht so

00:40:36.140 --> 00:40:38.140
einfach. Das ist nicht so einfach, dummerweise, weil

00:40:38.140 --> 00:40:39.500
mathematisch nicht so einfach.

00:40:39.500 --> 00:40:42.160
Genau, da steht

00:40:42.160 --> 00:40:44.060
glaube ich im Buch irgendwas drin. Ja, also wie man sagt,

00:40:44.060 --> 00:40:45.780
das dann macht mit Magic Method, das ist dann

00:40:45.780 --> 00:40:48.000
Kapitel 16 oder so viel weiter hinten,

00:40:48.000 --> 00:40:49.520
weil das ist nicht so einfach.

00:40:49.520 --> 00:40:52.040
Und er sagt auch, er verschiebt

00:40:52.040 --> 00:40:54.020
auch, das tatsächlich in diesen ersten Kapiteln

00:40:54.020 --> 00:40:55.220
verschiebt er relativ viel auch später.

00:40:55.220 --> 00:40:57.840
Ja, hier, das kommt in Kapitel 17 nochmal oder

00:40:57.840 --> 00:40:59.360
in Kapitel 38 oder Kapitel

00:40:59.360 --> 00:41:01.900
12. Tatsächlich

00:41:01.900 --> 00:41:03.880
auch Skalar mit

00:41:03.880 --> 00:41:05.200
Vektor multiplizieren, also

00:41:05.200 --> 00:41:07.420
eine Zahl mal Vektor

00:41:07.420 --> 00:41:09.880
verschiebt er auch auf später, weil da brauchst du

00:41:09.880 --> 00:41:11.860
nochmal einen anderen, eine andere Special

00:41:11.860 --> 00:41:13.740
Method, weil eben mul nur

00:41:13.740 --> 00:41:15.820
Vektor mit Skalar kann.

00:41:15.820 --> 00:41:17.980
Und das ist dann so ein kleines

00:41:17.980 --> 00:41:19.840
bisschen unbefriedigend. Was ich aber

00:41:19.840 --> 00:41:21.640
eigentlich, worauf ich eigentlich raus wollte, ist,

00:41:21.640 --> 00:41:24.080
er hat halt dann die Möglichkeit,

00:41:24.080 --> 00:41:25.860
seine Klasse mit Plus, hat er zwei

00:41:25.860 --> 00:41:27.880
Vektoren, zwei Instanzen von seiner Klasse

00:41:27.880 --> 00:41:29.620
kann er mit Plus addieren. Und

00:41:29.620 --> 00:41:32.040
das fand ich nicht so beeindruckend,

00:41:32.040 --> 00:41:33.360
weil

00:41:33.360 --> 00:41:35.300
das gab es in C++ auch schon.

00:41:35.300 --> 00:41:37.680
Das musste ich auch schon mal lernen.

00:41:37.680 --> 00:41:39.900
Und da heißen die Methoden

00:41:39.900 --> 00:41:41.800
halt anders, da heißen sie Operator Plus und Operator

00:41:41.800 --> 00:41:43.240
der Minus und Operator noch irgendwas

00:41:43.240 --> 00:41:44.900
und dann kriegst du es aber auch.

00:41:44.900 --> 00:41:47.680
Da kannst du auch Vektoren addieren und so weiter.

00:41:47.680 --> 00:41:49.940
Deshalb, da war ich

00:41:49.940 --> 00:41:50.920
jetzt nicht so beeindruckt davon.

00:41:50.920 --> 00:41:55.520
Ich habe das mit dem Multiplizieren nicht verstanden,

00:41:55.520 --> 00:41:57.820
was du meinst mit Skalar mal Vektor und Vektor mal Skalar.

00:41:57.820 --> 00:41:59.240
Wo ist der Unterschied? Ist das nicht komputativ?

00:41:59.240 --> 00:42:00.600
Das ist die Reihenfolge.

00:42:00.600 --> 00:42:03.700
Eigentlich mathematisch gesehen

00:42:03.700 --> 00:42:05.280
ist diese Operation komputativ,

00:42:05.280 --> 00:42:07.540
aber in Python an dieser Stelle ist sie noch nicht

00:42:07.540 --> 00:42:09.320
komputativ, weil wenn du

00:42:09.320 --> 00:42:11.600
die Mull-Methode

00:42:11.600 --> 00:42:12.460
implementierst

00:42:12.460 --> 00:42:15.120
auf deiner Klasse,

00:42:15.120 --> 00:42:17.180
dann musst

00:42:17.180 --> 00:42:19.240
wenn du x mal y machst,

00:42:19.240 --> 00:42:21.380
dann wird x.mull

00:42:21.380 --> 00:42:23.560
aufgerufen. Weil ansonsten wird dann tatsächlich

00:42:23.560 --> 00:42:25.320
ja, genau, sonst von dem

00:42:25.320 --> 00:42:27.360
Skalar die Mull-Methode aufgerufen, da gibt es

00:42:27.360 --> 00:42:29.480
den Vektor nicht. Genau, und die kann natürlich nicht mit Vektoren

00:42:29.480 --> 00:42:31.400
umgehen. Und damit es in die andere Richtung geht, brauchst

00:42:31.400 --> 00:42:32.940
du eine zweite Special Method, da heißt

00:42:32.940 --> 00:42:35.040
r.mull, also Reverse Multiplication.

00:42:35.040 --> 00:42:37.120
Und die hat aber auch später verschoben,

00:42:37.120 --> 00:42:38.800
weil die später nochmal kommt.

00:42:38.800 --> 00:42:41.340
Ach, man kann auch r.mull? Interessant.

00:42:41.400 --> 00:42:42.820
Das wusste ich auch nicht. Genau, damit

00:42:42.820 --> 00:42:44.540
eben diese Kommutativität.

00:42:44.540 --> 00:42:47.180
Aber es wird zuerst mull aufgerufen.

00:42:47.180 --> 00:42:49.180
Das heißt, da geht es dann

00:42:49.180 --> 00:42:51.160
auch noch um Präzedenz und deshalb verschiebt

00:42:51.160 --> 00:42:52.020
du das, glaube ich, auch später.

00:42:52.020 --> 00:42:54.320
Wie kriegt man denn die Präzedenz hin?

00:42:54.320 --> 00:42:56.440
Also ich möchte das gerne spoilern.

00:42:56.440 --> 00:42:59.340
Die kriegst du hin,

00:42:59.340 --> 00:43:01.160
also ist in dem Fall jetzt hier

00:43:01.160 --> 00:43:03.080
tatsächlich unproblematisch, aber du musst dann natürlich

00:43:03.080 --> 00:43:05.080
Type-Checks machen, dass du sagst, okay, was ist denn,

00:43:05.080 --> 00:43:06.140
wenn ich ein r.mull mache mit

00:43:06.140 --> 00:43:08.520
dieser oder jener Sorte von

00:43:08.520 --> 00:43:11.200
Objekt? Weil da kann ja dann prinzipiell alles rein.

00:43:11.200 --> 00:43:11.500
Ja, ich denke so.

00:43:11.500 --> 00:43:14.740
Match-Case.

00:43:14.740 --> 00:43:16.920
Ja, so

00:43:16.920 --> 00:43:18.960
mit einem Match-Case oder mit einem

00:43:18.960 --> 00:43:20.920
Alles, was du nicht implementiert hast,

00:43:20.920 --> 00:43:23.060
wird einfach im Normalkreis abgehandelt und ansonsten

00:43:23.060 --> 00:43:24.940
schreibst du für alle Cases, die

00:43:24.940 --> 00:43:27.200
einmal auftauchen, was rein.

00:43:27.200 --> 00:43:28.340
Finde ich gut.

00:43:28.340 --> 00:43:31.100
Ja, im Endeffekt macht der Interpreter

00:43:31.100 --> 00:43:33.080
das ja auch so. Also wenn eine von diesen

00:43:33.080 --> 00:43:35.000
Methoden halt einen Fehler wirft oder

00:43:35.000 --> 00:43:37.080
kein Ergebnis zurückgibt, dann wird

00:43:37.080 --> 00:43:39.520
halt so lange weitere Methoden durchprobiert,

00:43:39.520 --> 00:43:41.080
bis es eins gibt und wenn es keinen

00:43:41.080 --> 00:43:42.960
gibt, dann sagt der Herr halt, ja, das ist nicht definiert für diese

00:43:42.960 --> 00:43:43.240
Typen.

00:43:43.240 --> 00:43:46.420
Das haben wir ja auch alle schon mal gesehen, oder?

00:43:46.420 --> 00:43:49.000
Dass man versätlich einen String zu einer Zahl addiert hat

00:43:49.000 --> 00:43:50.860
und dann gesagt bekommen hat, das kannst du nicht.

00:43:50.860 --> 00:43:52.380
Es sei denn, man war in JavaScript.

00:43:52.380 --> 00:43:55.480
Ja, ja, das ist halt so

00:43:55.480 --> 00:43:56.860
ein fundamentaler Unterschied

00:43:56.860 --> 00:43:58.860
zwischen JavaScript und Python.

00:43:58.860 --> 00:44:04.900
Ja, also ich, genau, ich finde das ja auch sehr,

00:44:04.900 --> 00:44:06.860
ich weiß nicht, haben wir überhaupt schon definiert,

00:44:06.860 --> 00:44:08.940
mir fällt das gerade so heiß ein, jetzt reden wir schon die ganze Zeit drüber,

00:44:08.940 --> 00:44:10.260
aber ich weiß nicht, haben wir überhaupt gesagt, was,

00:44:10.880 --> 00:44:11.860
wie diese

00:44:11.860 --> 00:44:14.720
Danda-Methods denn aussehen?

00:44:14.720 --> 00:44:17.080
Also die sind immer, haben immer irgendwie

00:44:17.080 --> 00:44:19.100
zwei Underscores, damit fangen sie mal an

00:44:19.100 --> 00:44:20.480
und hören immer mit zwei Underscores auf

00:44:20.480 --> 00:44:22.740
und Danda... Genau, Danda, für alle, die es nicht kennen,

00:44:22.740 --> 00:44:24.540
ist Unterstrich, Unterstrich.

00:44:24.540 --> 00:44:26.580
Danda ist halt quasi die Abkürzung für

00:44:26.580 --> 00:44:28.760
Double Underscore Before and

00:44:28.760 --> 00:44:30.820
Double Underscore After. Warum machen

00:44:30.820 --> 00:44:32.560
Underscores damit? Man denkt, die gibt es gar nicht,

00:44:32.560 --> 00:44:34.780
damit man die nicht sieht, damit die nicht auffallen.

00:44:34.780 --> 00:44:38.200
Nö, Konvention.

00:44:38.200 --> 00:44:40.840
Keine Ahnung. Wie du sie unterscheiden kannst von allen anderen.

00:44:40.840 --> 00:44:42.840
Das ist eine Konvention

00:44:42.840 --> 00:44:44.680
im Python-Interpreter, wenn du eine Methode hast,

00:44:44.680 --> 00:44:46.660
die zwei Unterstriche vorne und

00:44:46.660 --> 00:44:48.580
zwei Unterstriche hinten hat, dann

00:44:48.580 --> 00:44:50.760
verspricht der Interpreter gar nichts

00:44:50.760 --> 00:44:52.820
darüber. Das kann sich jederzeit ändern und es kann jederzeit

00:44:52.820 --> 00:44:54.040
passieren, dass die nicht mehr funktioniert.

00:44:54.040 --> 00:44:56.620
Es ist einfach nur eine visuelle Abtrennung,

00:44:56.620 --> 00:44:58.260
dass du siehst, dass das was Spezielles ist.

00:44:58.260 --> 00:45:00.720
Aber wenn ich das richtig verstehe, ruft man solche Methoden

00:45:00.720 --> 00:45:02.620
niemals selber einfach so an?

00:45:02.620 --> 00:45:04.760
Niemals, stimmt nicht so ganz, also ab und zu

00:45:04.760 --> 00:45:06.500
schon, also eine ganz populäre ist, achso,

00:45:06.500 --> 00:45:07.500
das wolltest du auch gerade sagen, weil

00:45:07.500 --> 00:45:10.000
es halt dann erinnert.

00:45:10.800 --> 00:45:12.780
Ja, also

00:45:12.780 --> 00:45:14.920
wann ruft man denn Inet explizit auf? Von außen?

00:45:14.920 --> 00:45:16.560
Ständig. Nur mit super?

00:45:16.560 --> 00:45:17.940
Ständig, ne, ständig.

00:45:17.940 --> 00:45:21.260
Wenn du halt Klasse, Klammer auf, Klammer zu,

00:45:21.260 --> 00:45:22.320
dann hast du schon aufgerufen.

00:45:22.320 --> 00:45:24.860
Nein, aber das ist ja die implizite.

00:45:24.860 --> 00:45:26.840
Ich meine, dass du explizit

00:45:26.840 --> 00:45:28.140
jetzt dran schreibst Inet.

00:45:28.140 --> 00:45:31.020
Ja, okay, das passiert tatsächlich nicht so häufig.

00:45:31.020 --> 00:45:33.260
Ja, bei super Aufrufen schon.

00:45:33.260 --> 00:45:35.200
Ja gut, aber super machst du Inet.

00:45:35.200 --> 00:45:36.280
Absolut im anderen Inet.

00:45:36.280 --> 00:45:37.800
Und das offensichtlich, aber

00:45:37.800 --> 00:45:40.600
außer dem Fall kenne ich jetzt

00:45:40.760 --> 00:45:42.880
eigentlich keinen. Also es sei denn, man will irgendwas

00:45:42.880 --> 00:45:44.380
debuggen oder sowas, dann war alles anders, aber

00:45:44.380 --> 00:45:47.200
ja. Es ist halt auch nicht notwendig.

00:45:47.200 --> 00:45:48.800
Das ist ja der Trick da dran.

00:45:48.800 --> 00:45:50.920
Du brauchst die nicht direkt aufrufen, weil

00:45:50.920 --> 00:45:52.840
es gibt da Syntax. Wenn ich jetzt ein App definiere, dann mache ich einfach

00:45:52.840 --> 00:45:54.760
ein String, dann kriege ich das Ergebnis. Und wenn ich ein Apps definiere,

00:45:54.760 --> 00:45:56.080
dann möchte ich halt irgendwie

00:45:56.080 --> 00:45:58.720
mit Dingen rechnen und gucken, was passiert.

00:45:58.720 --> 00:46:00.780
Oder beim Bool vergleiche ich mit irgendwas

00:46:00.780 --> 00:46:02.780
oder so, oder ich mache ein If vor. Aber ich würde

00:46:02.780 --> 00:46:04.680
niemals selber das vormachen. Und das ist ja

00:46:04.680 --> 00:46:06.340
vielleicht das Interessante an den Dunder-Messages,

00:46:06.340 --> 00:46:08.800
dass sie halt quasi die Reimplementierung

00:46:08.800 --> 00:46:10.720
sind, um mit normaler Python

00:46:10.720 --> 00:46:12.780
Syntax und den Objekten zu interagieren.

00:46:12.780 --> 00:46:14.720
Also zum Beispiel Equals oder so, oder

00:46:14.720 --> 00:46:16.740
Lesser-Send oder ein komparatives

00:46:16.740 --> 00:46:18.420
Verhalten zwischen einzelnen Objekten von

00:46:18.420 --> 00:46:20.560
Klassen oder von Instanzen.

00:46:20.560 --> 00:46:22.760
Ja, du kannst halt sozusagen

00:46:22.760 --> 00:46:24.560
mit dem Interpreter so interagieren, wie

00:46:24.560 --> 00:46:26.800
die anderen Teile in Python halt

00:46:26.800 --> 00:46:28.700
auch. Und das ist halt eine Besonderheit von Python,

00:46:28.700 --> 00:46:30.500
das geht in vielen anderen Sprachen nicht.

00:46:30.500 --> 00:46:32.880
Das macht es halt toll. Das ist halt

00:46:32.880 --> 00:46:34.320
genau das Schöne an diesen

00:46:34.320 --> 00:46:36.660
Magic-Messages ist, dass wenn man das ordentlich

00:46:36.660 --> 00:46:38.940
implementiert, man hinterher in seinem Code

00:46:38.940 --> 00:46:40.680
Sachen machen kann, die sehr

00:46:40.680 --> 00:46:42.260
natürlich aussehen. Und die

00:46:42.260 --> 00:46:44.400
auch in der logischen Sprache dann

00:46:44.400 --> 00:46:46.820
natürlich Sinn machen, wenn man Dinge miteinander vergleichen möchte,

00:46:46.820 --> 00:46:48.580
die man dann vielleicht auch vergleichen kann,

00:46:48.580 --> 00:46:50.700
weil man denen ordentliche Namen gegeben hat und das aber einfach

00:46:50.700 --> 00:46:52.740
mit den instanzierten Objekten geht. Und man

00:46:52.740 --> 00:46:54.900
halt nicht irgendwie komische Dunder-Methoden

00:46:54.900 --> 00:46:56.840
oder irgendwelche kryptischen

00:46:56.840 --> 00:46:58.680
Namen an Objekten

00:46:58.680 --> 00:47:00.640
aufrufen muss, wie das in anderen Sprachen der Fall ist. Und das

00:47:00.640 --> 00:47:02.900
ist toll, weil diese Syntax sogar Magie

00:47:02.900 --> 00:47:04.560
macht. Und deswegen finde ich den Namen

00:47:04.560 --> 00:47:05.740
Magic-Message auch sehr schön.

00:47:05.740 --> 00:47:08.720
Ja, du kriegst also Zugriff auf

00:47:08.720 --> 00:47:09.500
die Innereien.

00:47:10.640 --> 00:47:12.620
Dass Python integriert das

00:47:12.620 --> 00:47:14.420
und du kannst dich da genauso rein

00:47:14.420 --> 00:47:16.380
integrieren wie alle, als ob du

00:47:16.380 --> 00:47:18.020
dazugehörst. Und das ist schon was sehr Schönes.

00:47:18.020 --> 00:47:20.680
Aber du hast eben noch was anderes gesagt, Dominik,

00:47:20.680 --> 00:47:22.640
was auch hier vorkommt, was ich auch in meinen Notizen

00:47:22.640 --> 00:47:24.340
habe. Du hast gesagt, du möchtest hier

00:47:24.340 --> 00:47:26.320
die String-Methode implementieren und dann kriegst du

00:47:26.320 --> 00:47:27.960
eine schöne String-Repräsentation raus.

00:47:27.960 --> 00:47:29.180
Ich habe die Rep-Methode gesagt.

00:47:29.180 --> 00:47:32.620
Oh, dann muss ich noch mal

00:47:32.620 --> 00:47:33.640
zurückscrollen und mir das anhören.

00:47:33.640 --> 00:47:36.620
Aber das ist tatsächlich was, ich tendiere

00:47:36.620 --> 00:47:38.800
auch dazu, immer die String-Methode zu implementieren,

00:47:38.800 --> 00:47:40.600
weil man

00:47:40.600 --> 00:47:42.600
es halt so gewöhnt ist. Bei Java machst du

00:47:42.600 --> 00:47:44.660
Two-String, bei irgendwelchen anderen

00:47:44.660 --> 00:47:46.760
machst du irgendeine Two-String-

00:47:46.760 --> 00:47:47.820
Transformation oder was auch immer.

00:47:47.820 --> 00:47:50.720
Und in Python gibt es da ja zwei

00:47:50.720 --> 00:47:52.060
davon. Es gibt Repre und Stre.

00:47:52.060 --> 00:47:53.760
Genau.

00:47:53.760 --> 00:47:56.560
Und der Unterschied ist

00:47:56.560 --> 00:47:58.620
schwer zu

00:47:58.620 --> 00:47:59.020
erklären,

00:47:59.020 --> 00:48:02.420
weil es nicht so

00:48:02.420 --> 00:48:03.720
was Formales ist.

00:48:03.720 --> 00:48:06.480
Die Repräsentation ist das, was in der

00:48:06.480 --> 00:48:08.340
Kommandozeile auftaucht oder einem String, wenn du ihn

00:48:08.340 --> 00:48:10.560
da reingeschrieben hast und Stre ist das,

00:48:10.560 --> 00:48:11.940
was rauskommt, wenn du die String

00:48:11.940 --> 00:48:14.060
Conversion versuchst.

00:48:14.060 --> 00:48:16.920
Ja, aber warum

00:48:16.920 --> 00:48:18.500
macht man dann da überhaupt einen Unterschied?

00:48:18.500 --> 00:48:20.580
Könntest du da genau mit einer machen dann?

00:48:20.580 --> 00:48:22.500
Das Identifiziert das Objekt?

00:48:22.500 --> 00:48:24.780
Okay, erklär du, Johannes.

00:48:24.780 --> 00:48:25.080
Ja.

00:48:25.080 --> 00:48:28.440
Ne, also das

00:48:28.440 --> 00:48:30.600
geht schon so ein bisschen runter auf die Krux des

00:48:30.600 --> 00:48:32.560
Problems, weil diese zwei Methoden doch

00:48:32.560 --> 00:48:33.660
relativ ähnlich sind.

00:48:33.660 --> 00:48:36.640
Aber interessanterweise, wenn du Stre

00:48:36.640 --> 00:48:38.600
nicht implementiert hast, fällt der zurück auf Repre.

00:48:38.600 --> 00:48:40.240
Also auf die Repräsentation.

00:48:40.560 --> 00:48:42.700
Und die Repräsentation

00:48:42.700 --> 00:48:44.560
ist in dem Sinne ein bisschen formaler, weil

00:48:44.560 --> 00:48:46.500
das heißt, du sollst

00:48:46.500 --> 00:48:49.060
eine Repräsentation wählen, die du idealerweise

00:48:49.060 --> 00:48:50.420
direkt in den Interpreter rein

00:48:50.420 --> 00:48:51.720
kopieren kannst.

00:48:51.720 --> 00:48:56.240
Und das schränkt dich natürlich relativ ein.

00:48:56.240 --> 00:48:58.360
Das heißt, da hast du üblicherweise dann sowas wie

00:48:58.360 --> 00:49:00.620
eben einen Konstruktor da drinstehen.

00:49:00.620 --> 00:49:02.760
Oder eine String-Repräsentation

00:49:02.760 --> 00:49:04.680
des Konstruktors. Die Stre-Methode

00:49:04.680 --> 00:49:06.920
soll einfach nur eine menschenlesbare

00:49:06.920 --> 00:49:08.520
Beschreibung dieses Objektes sein.

00:49:08.520 --> 00:49:10.020
Und die kann dann natürlich auch was anderes sein.

00:49:10.560 --> 00:49:11.440
Also zum Beispiel für

00:49:11.440 --> 00:49:14.600
diese Vektorklasse, da hat er

00:49:14.600 --> 00:49:16.660
als Repräsentation halt den Namen

00:49:16.660 --> 00:49:18.340
der Klasse, Vektor 2, Klammer auf,

00:49:18.340 --> 00:49:20.580
dann die beiden Koordinaten

00:49:20.580 --> 00:49:21.300
und dann Klammer zu.

00:49:21.300 --> 00:49:24.560
Und das ist gut, weil das

00:49:24.560 --> 00:49:26.820
kannst du direkt reinkopieren, das identifiziert

00:49:26.820 --> 00:49:27.720
genau diese Sache.

00:49:27.720 --> 00:49:30.560
Als Stre-Methode, hat er jetzt hier

00:49:30.560 --> 00:49:31.980
kein Beispiel im Buch drin,

00:49:31.980 --> 00:49:34.660
würde ich aber tatsächlich was anderes

00:49:34.660 --> 00:49:35.720
wählen. Ich würde entweder

00:49:35.720 --> 00:49:38.160
je nach Kontext

00:49:38.160 --> 00:49:40.480
vielleicht eckige Klammern wählen.

00:49:40.560 --> 00:49:42.780
Oder in einem mathematischen Kontext

00:49:42.780 --> 00:49:44.040
vielleicht sogar runde Klammern.

00:49:44.040 --> 00:49:46.360
Genau, spitze Klammern, Entschuldigung.

00:49:46.360 --> 00:49:48.440
Oder vielleicht sogar runde, je nachdem,

00:49:48.440 --> 00:49:50.440
welchen Kontext es hat. Und da hat man natürlich einfach

00:49:50.440 --> 00:49:52.660
mehr Freiheit, weil das einfach eine

00:49:52.660 --> 00:49:53.800
menschenlesbare

00:49:53.800 --> 00:49:56.640
Darstellung dieses Objektes sein soll.

00:49:56.640 --> 00:50:00.380
Und ich

00:50:00.380 --> 00:50:02.500
tendiere eher dazu, die Stre-Methode zu

00:50:02.500 --> 00:50:04.620
implementieren und die Argumente,

00:50:04.620 --> 00:50:06.620
die hier der

00:50:06.620 --> 00:50:08.100
Luciano uns gibt,

00:50:08.100 --> 00:50:08.740
ähm,

00:50:10.560 --> 00:50:12.520
die lassen mich jetzt doch auch tendieren

00:50:12.520 --> 00:50:14.240
dazu eher Rapper zu sein.

00:50:14.240 --> 00:50:16.060
Also das ist sozusagen die Regel, die man da mit

00:50:16.060 --> 00:50:18.360
mitnehmen kann, ist halt, wenn man die,

00:50:18.360 --> 00:50:20.020
wenn man sozusagen

00:50:20.020 --> 00:50:22.320
sich entscheiden muss, dann lieber eher nur die

00:50:22.320 --> 00:50:24.480
Rapper-Methode implementieren, nicht unbedingt Stre.

00:50:24.480 --> 00:50:26.260
Ja.

00:50:26.260 --> 00:50:28.180
Und das war mir auch nicht so

00:50:28.180 --> 00:50:30.280
in der Feinheit klar,

00:50:30.280 --> 00:50:32.380
was jetzt da der genaue Unterschied oder der Sinn dahinter

00:50:32.380 --> 00:50:34.120
ist. Und das weiß ich jetzt voll gut.

00:50:34.120 --> 00:50:35.400
Weiß ich schon wieder mehr.

00:50:35.400 --> 00:50:38.000
Ja. Ja, das war gut, oder? Ja.

00:50:38.000 --> 00:50:39.840
Ja, ja, ja.

00:50:40.560 --> 00:50:42.940
Das, äh, ich, ich war etwas

00:50:42.940 --> 00:50:44.880
überrascht, als ich das Buch angefangen hab, weil das erste

00:50:44.880 --> 00:50:46.340
Kapitel schon ordentlich

00:50:46.340 --> 00:50:49.060
rangeht. Ein länger Buch, hat Jocken gesagt.

00:50:49.060 --> 00:50:50.080
Ja.

00:50:50.080 --> 00:50:52.900
Nein, das ist auf jeden Fall ein

00:50:52.900 --> 00:50:54.820
fortgeschrittenes Buch und der, also der macht

00:50:54.820 --> 00:50:56.660
auch keine, keine Pausen, ja.

00:50:56.660 --> 00:50:57.860
Der geht direkt weiter hier.

00:50:57.860 --> 00:51:00.660
Zwei, zwei Klassen mit Operatoren,

00:51:00.660 --> 00:51:02.720
also das ist diese Deck-Klasse und die

00:51:02.720 --> 00:51:04.880
Vector-Klasse und dann macht er noch

00:51:04.880 --> 00:51:06.880
Bool-Implementierung und dann geht

00:51:06.880 --> 00:51:08.580
es gleich mit der Collection-API weiter.

00:51:08.580 --> 00:51:09.960
Auch das,

00:51:10.560 --> 00:51:12.600
sehr interessant, äh, sehr

00:51:12.600 --> 00:51:14.700
interessanter Abschnitt über die Collection-API,

00:51:14.700 --> 00:51:16.700
wo natürlich jetzt mehr an Details drin ist, die,

00:51:16.700 --> 00:51:18.820
die ich weder präsent

00:51:18.820 --> 00:51:20.560
hatte, noch jetzt so präsent habe.

00:51:20.560 --> 00:51:23.040
Ja, also jetzt musst du aber trotzdem

00:51:23.040 --> 00:51:24.620
mal kurz, äh, einmal

00:51:24.620 --> 00:51:26.860
aufräumen, bitte. Ja, dafür

00:51:26.860 --> 00:51:28.720
ist das Buch halt, also das Buch ist schon dicht, okay,

00:51:28.720 --> 00:51:30.700
ich geb's zu, aber dafür ist es halt auch nicht so lang.

00:51:30.700 --> 00:51:32.700
Ähm. Ja, das steht

00:51:32.700 --> 00:51:34.520
nur, die nächste Lüge

00:51:34.520 --> 00:51:36.540
von Jocken. 975

00:51:36.540 --> 00:51:38.400
Seiten. Ja, ich würde sagen. Aber es ist,

00:51:38.400 --> 00:51:40.540
es ist ein Taschenbuch-Format, also kann man,

00:51:40.560 --> 00:51:42.380
wenn man es mal locker in, auch in die Tasche stecken,

00:51:42.380 --> 00:51:43.340
ist es auch relativ klein.

00:51:43.340 --> 00:51:46.540
961. Also so vielleicht

00:51:46.540 --> 00:51:48.440
18 mal 20 Zentimeter.

00:51:48.440 --> 00:51:50.500
Ja, also das ist auf jeden Fall doch die Größe,

00:51:50.500 --> 00:51:52.260
die man sich locker unter das Kopfkissen legen kann.

00:51:52.260 --> 00:51:54.160
Damit sich man automatisch lernt, ja.

00:51:54.160 --> 00:51:56.520
Du kannst ja dein Kopfkissen ersetzen, kannst du

00:51:56.520 --> 00:51:57.200
das mit dem Buch.

00:51:57.200 --> 00:51:58.780
Ja.

00:51:58.780 --> 00:52:02.440
Ja, aber tatsächlich, also diese,

00:52:02.440 --> 00:52:03.960
diese, ähm,

00:52:03.960 --> 00:52:06.380
da ist sogar ein UML-Diagramm, das, also

00:52:06.380 --> 00:52:08.240
muss ich sagen, da war ich so fast ein bisschen abgeschreckt.

00:52:08.240 --> 00:52:09.020
Jetzt kauf ich's auch.

00:52:09.020 --> 00:52:10.520
UML-Diagramm, oh Gott, oh Gott.

00:52:10.560 --> 00:52:12.380
Oh Gott, aber, äh, ja, in der Stelle

00:52:12.380 --> 00:52:13.140
macht's tatsächlich Sinn.

00:52:13.140 --> 00:52:16.660
Ja, ähm, genau.

00:52:16.660 --> 00:52:18.480
Das ist ja hier der Dominik und ich, wir blättern jetzt gerade

00:52:18.480 --> 00:52:19.680
für die, für die Zuhörer.

00:52:19.680 --> 00:52:22.520
Ja, ich, genau, da gibt's, gibt's halt

00:52:22.520 --> 00:52:24.360
ein, ein, äh, ein UML-Diagramm

00:52:24.360 --> 00:52:25.780
von der Collection-API.

00:52:25.780 --> 00:52:28.260
Was ist jetzt die Collection-API? Ich hab's immer noch

00:52:28.260 --> 00:52:30.460
nicht genau verstanden. Bitte, äh, wiederhol das doch noch mal.

00:52:30.460 --> 00:52:32.780
Ja, also, die ist, äh,

00:52:32.780 --> 00:52:34.540
Was ist, was ist überhaupt eine Collection?

00:52:34.540 --> 00:52:36.320
Ist da, geht's, um, um was geht's da?

00:52:36.320 --> 00:52:38.040
Etatools oder?

00:52:38.040 --> 00:52:40.420
Nee, äh, da geht's darum,

00:52:40.560 --> 00:52:41.680
wie grundsätzlich

00:52:41.680 --> 00:52:43.660
quasi Objekte

00:52:43.660 --> 00:52:46.260
in Python, äh,

00:52:46.260 --> 00:52:48.400
irgendwie so funktionieren, die eine Collection

00:52:48.400 --> 00:52:50.220
von irgendwas sind. Und das sind,

00:52:50.220 --> 00:52:52.440
das sind halt die allermeisten, ja. Das sieht jetzt hier nicht so aus,

00:52:52.440 --> 00:52:54.120
sieht nach irgendwas Speziellem aus, aber das sind halt

00:52:54.120 --> 00:52:55.640
die allerallermeisten sind da, sowas.

00:52:55.640 --> 00:52:58.440
Und, ähm, da gibt's

00:52:58.440 --> 00:52:59.860
also Collection selber,

00:52:59.860 --> 00:53:01.660
äh, damit's eine ist.

00:53:01.660 --> 00:53:03.560
Man soll nicht verklicken, äh, Jochen, aber, ähm.

00:53:03.560 --> 00:53:06.180
Also, damit's, damit's eine ist,

00:53:06.180 --> 00:53:08.100
äh, äh, quasi müssen drei

00:53:08.100 --> 00:53:10.480
Sachen irgendwie, äh,

00:53:10.560 --> 00:53:12.500
ja, implementiert sein. Also, es gibt halt drei

00:53:12.500 --> 00:53:13.980
Methoden, die, äh,

00:53:13.980 --> 00:53:16.480
sozusagen dann ein Ding zu einer Collection

00:53:16.480 --> 00:53:17.700
machen und das ist halt.

00:53:17.700 --> 00:53:20.140
Iter? Iter, ja. Du kannst halt irgendwie

00:53:20.140 --> 00:53:22.280
drüber iterieren. Äh, das heißt.

00:53:22.280 --> 00:53:24.140
Also, einen Iterator bauen, einen Generator,

00:53:24.140 --> 00:53:25.940
der irgendwas yieldet. Nee.

00:53:25.940 --> 00:53:28.480
Nein. Äh, du kannst halt, es muss halt

00:53:28.480 --> 00:53:30.420
irgendwie. Aber jetzt, fast. Ja.

00:53:30.420 --> 00:53:32.600
Mal ganz generell, so eine Collection

00:53:32.600 --> 00:53:34.480
ist einfach eine Sammlung

00:53:34.480 --> 00:53:35.960
von anderen Sachen. Ja.

00:53:35.960 --> 00:53:37.820
Eine Sammlung von anderen Dingen.

00:53:37.820 --> 00:53:40.260
Und um das zu ermöglichen, gibt's jetzt hier

00:53:40.260 --> 00:53:41.900
diese verschiedenen Interfaces, die der Jochen

00:53:41.900 --> 00:53:44.100
jetzt gerade. Okay, erst mal, es muss ein Iterable

00:53:44.100 --> 00:53:45.920
sein, ja, und dann? Ja. Es muss irgendwie.

00:53:45.920 --> 00:53:46.700
Muss nicht, aber kann.

00:53:46.700 --> 00:53:50.140
Doch, muss eigentlich. Also, eine Collection,

00:53:50.140 --> 00:53:52.160
okay, eine Collection, äh, muss das schon

00:53:52.160 --> 00:53:53.980
sein. Ja. Aber es kann ja, es kann etwas

00:53:53.980 --> 00:53:55.760
geben, was Iterable ist, aber keine Collection ist.

00:53:55.760 --> 00:53:57.920
Ja, klar, genau. Das gibt's natürlich. Ja, ja, okay. Aber eine Collection

00:53:57.920 --> 00:54:00.000
muss Iterable sein und das ist irgendwas, was

00:54:00.000 --> 00:54:01.720
gilt. Sie muss halt Iterable sein, also. Oder nicht? Ja.

00:54:01.720 --> 00:54:03.780
Sie muss halt, äh, irgendwie eine Größe haben,

00:54:03.780 --> 00:54:06.020
sie muss halt Size sein und sie muss

00:54:06.020 --> 00:54:07.800
halt, äh, irgendwie ein Container

00:54:07.800 --> 00:54:09.620
sein, den man halt fragen kann,

00:54:09.960 --> 00:54:11.900
ja, ist das denn in dir

00:54:11.900 --> 00:54:13.940
drin oder nicht? Und das

00:54:13.940 --> 00:54:15.960
sind die drei Dinge, die man halt, äh, quasi

00:54:15.960 --> 00:54:17.880
implementiert haben muss, damit man irgendwie eine Collection

00:54:17.880 --> 00:54:19.880
ist. Also, ist, ist this a part of your collection?

00:54:19.880 --> 00:54:21.900
Ähm, wie viel bist du

00:54:21.900 --> 00:54:23.620
denn? Und, äh, gib mal

00:54:23.620 --> 00:54:25.940
mehr von dir. Von allem, was

00:54:25.940 --> 00:54:27.880
in dir drin ist. Ja, gibt's immer mehr. Das heißt, wenn ich über

00:54:27.880 --> 00:54:29.680
alles iteriere, dann hab ich alles drin, was drin war.

00:54:29.680 --> 00:54:30.640
Alle, alles Toys.

00:54:30.640 --> 00:54:33.140
For everything in collection

00:54:33.140 --> 00:54:35.560
iter. Ist das, ist das so, Jochen?

00:54:35.560 --> 00:54:37.560
Müssen, müssen Iterate über alle

00:54:37.560 --> 00:54:39.200
Elemente drüber? Nee, ich denk nicht, ich denk nicht.

00:54:39.660 --> 00:54:41.420
Also, du kannst ja dann in der, wenn du das

00:54:41.420 --> 00:54:43.040
implementierst, da drin ja machen, was du willst.

00:54:43.040 --> 00:54:45.520
Das, äh, das kann jetzt auch

00:54:45.520 --> 00:54:47.380
von irgendwas anderem abhängig sein, was das

00:54:47.380 --> 00:54:49.440
so gibt. Du musst nur das Iter-Protokoll erfüllen. Ja, genau.

00:54:49.440 --> 00:54:51.300
Du musst nur das Protokoll erfüllen. Ja. Ein, ein

00:54:51.300 --> 00:54:53.140
nächstes rausgeben. Ja, ja. Also immer dasselbe.

00:54:53.140 --> 00:54:55.380
Also, diese pathologischen Edge-Cases.

00:54:55.380 --> 00:54:57.440
Gib mir mal alle in deinem Ding. Ich will das erste. Nee, du kriegst das erste.

00:54:57.440 --> 00:54:59.340
Du kriegst doch das erste. Nein, das und das erste.

00:54:59.340 --> 00:55:01.420
Immer noch das erste. Nee, nee, das ist, nee, nee, du rufst

00:55:01.420 --> 00:55:03.360
ja, das Iter, Iter-Protokoll ist ja, du rufst immer

00:55:03.360 --> 00:55:05.400
Next auf, auf dem Iter-Protokoll. Ach, das ist doch kein

00:55:05.400 --> 00:55:07.080
Erwartung. Das heißt, du kriegst immer ein nächstes Element.

00:55:07.080 --> 00:55:09.180
Aber das bedeutet nicht, dass du alle kriegst und

00:55:09.180 --> 00:55:10.740
das bedeutet auch nicht, dass du alle kriegen kannst.

00:55:10.740 --> 00:55:13.140
Es gibt da diese pathologischen Edge-Cases,

00:55:13.140 --> 00:55:15.340
die man immer in Einführungsveranstaltungen

00:55:15.340 --> 00:55:17.160
macht, dass man sagt, hier, wir machen jetzt jetzt mal was

00:55:17.160 --> 00:55:19.140
Iter-Protokoll und das berechnet einfach

00:55:19.140 --> 00:55:21.080
die nächste Primzahl. Es gibt ja alle Primzahlen.

00:55:21.080 --> 00:55:23.200
Aber das ist natürlich keine Sammlung,

00:55:23.200 --> 00:55:25.340
die je aufhört. Und was, was ist denn da unter

00:55:25.340 --> 00:55:26.940
Primzahlen, Iterin? Unterschied,

00:55:26.940 --> 00:55:29.180
äh, Joachim, mit dem

00:55:29.180 --> 00:55:31.320
Generator und dem, dem Next und dem Yield und dem

00:55:31.320 --> 00:55:33.060
Naja, also, weil, also Iter

00:55:33.060 --> 00:55:34.780
ist halt die grundsätzliche Geschichte. Das

00:55:34.780 --> 00:55:36.860
ist halt das, was du brauchst, wenn du vor

00:55:36.860 --> 00:55:38.520
irgendwas in irgendwas sagst.

00:55:38.520 --> 00:55:41.020
Ja, ein Generator ist eine spezifische,

00:55:41.020 --> 00:55:43.000
ist halt nicht so allgemein. So ein Generator heißt

00:55:43.000 --> 00:55:45.180
halt dann, äh, äh, sozusagen

00:55:45.180 --> 00:55:46.160
da, äh,

00:55:46.160 --> 00:55:48.900
ja, kriegst du halt eins nach dem anderen drin.

00:55:48.900 --> 00:55:50.680
Aber, halt im Moment, also wenn ich jetzt irgendwas

00:55:50.680 --> 00:55:52.620
iteriere, ist was anderes als ein eins nach dem anderen?

00:55:52.620 --> 00:55:55.720
Äh,

00:55:55.720 --> 00:55:57.160
also, sagen wir mal so,

00:55:57.160 --> 00:55:58.800
Generator ist nochmal eine ganz, ist nochmal eine

00:55:58.800 --> 00:56:00.620
speziellere Geschichte. Das hat halt irgendwie,

00:56:00.620 --> 00:56:02.760
das ist jetzt nicht das Gleiche wie, wie

00:56:02.760 --> 00:56:04.420
irgendwie was, was du iterieren kannst.

00:56:04.420 --> 00:56:07.020
Das ist was anderes. Ein Generator implementiert

00:56:07.020 --> 00:56:08.780
ja, ein Generator implementiert

00:56:08.780 --> 00:56:10.640
das Iterable-Protokoll. Also, Generator ist, ja, genau,

00:56:10.640 --> 00:56:12.920
klar, also ist schon Iterable ein Generator,

00:56:12.920 --> 00:56:14.740
aber es ist ja eine sehr spezielle Art von was

00:56:14.740 --> 00:56:16.800
Iterable. Aha, also, aha,

00:56:16.800 --> 00:56:18.900
okay, weil. Aber eine Liste

00:56:18.900 --> 00:56:20.620
ist auch irgendwie was Iterable ist,

00:56:20.620 --> 00:56:22.840
aber das ist kein Generator, gar nicht.

00:56:22.840 --> 00:56:24.720
Nein? Nein. Als Comprehension schon.

00:56:24.720 --> 00:56:26.920
Also, wenn du eine List Comprehension schreibst,

00:56:26.920 --> 00:56:27.620
kriegst du eine Liste zurück.

00:56:27.620 --> 00:56:30.800
Du kannst den Generator Expression hinschreiben, dann kriegst du

00:56:30.800 --> 00:56:32.360
einen Generator, aber das ist wieder was anderes. Also,

00:56:32.460 --> 00:56:34.440
mhm, ja.

00:56:34.440 --> 00:56:36.680
Aber interessant

00:56:36.680 --> 00:56:38.460
finde ich halt, dass das halt reicht.

00:56:38.460 --> 00:56:40.480
Ja, also, diese drei Dinge, also, wenn du

00:56:40.480 --> 00:56:42.640
halt die, wenn du die Dunner-Methods

00:56:42.640 --> 00:56:44.900
Iter, Len und Contains implementierst,

00:56:44.900 --> 00:56:46.300
dann hast du halt ein Collection,

00:56:46.300 --> 00:56:48.240
quasi, und

00:56:48.240 --> 00:56:50.480
dann gibt's halt noch die eine zusätzliche Geschichte,

00:56:50.480 --> 00:56:52.440
die halt sozusagen

00:56:52.440 --> 00:56:54.120
dann daraus etwas,

00:56:54.120 --> 00:56:56.140
nochmal was Besonderes macht, das ist halt

00:56:56.140 --> 00:56:56.760
Reversible.

00:56:56.760 --> 00:57:00.800
Wenn das irgendeine Reihenfolge

00:57:00.800 --> 00:57:02.160
hat, dann ist es halt eine Sequence

00:57:02.160 --> 00:57:04.340
Ja, aber das ist halt das, was

00:57:04.340 --> 00:57:06.340
das unterscheidet. Also, eine Sequence

00:57:06.340 --> 00:57:07.720
kann halt irgendwie beliebig sortiert werden,

00:57:07.720 --> 00:57:10.320
so, das macht es halt besonders, und

00:57:10.320 --> 00:57:12.400
dann, ja. Und das klassische Beispiel ist eine Liste.

00:57:12.400 --> 00:57:14.320
Liste ist eine Sequence. Wenn man Sequence

00:57:14.320 --> 00:57:15.940
sagt, kann man immer an Liste denken. Ja.

00:57:15.940 --> 00:57:18.460
Und, äh, genau,

00:57:18.460 --> 00:57:19.860
ansonsten ist halt

00:57:19.860 --> 00:57:22.100
ein Dict ist halt auch ein Collection,

00:57:22.100 --> 00:57:23.980
ist halt ein Mapping,

00:57:23.980 --> 00:57:26.380
sozusagen. Und ein Set

00:57:26.380 --> 00:57:28.280
ist keine Liste, aber ein Set ist schon

00:57:28.280 --> 00:57:29.480
eine Collection. Genau, das ist schon eine Collection.

00:57:29.480 --> 00:57:31.900
Das ist der Basistyp. Aber keine Sequence. Genau. Also, das sind ja

00:57:31.900 --> 00:57:33.920
die Basistypen, die sie da ableiten. Sequence, Mapping

00:57:33.920 --> 00:57:35.160
und Set. Und, äh,

00:57:35.160 --> 00:57:37.860
die drei verhalten sich unterschiedlich

00:57:37.860 --> 00:57:39.900
und daraus, das sind aber die Dinge, die man dann einsetzt.

00:57:39.900 --> 00:57:41.680
Also, diese Bausteine, also

00:57:41.680 --> 00:57:43.560
ein pures Iterable, ich meine,

00:57:43.560 --> 00:57:45.600
geht prinzipiell schon, oder ein

00:57:45.600 --> 00:57:46.680
pures Sized,

00:57:46.680 --> 00:57:49.760
ja, ist nicht nett, dass ich das schon mal gesehen

00:57:49.760 --> 00:57:51.640
habe. Aber natürlich Sequence und Mapping

00:57:51.640 --> 00:57:53.480
und Set, das sind die Sachen, die man dann tatsächlich benutzt.

00:57:53.480 --> 00:57:55.560
Weil da hast du dann die Bausteine zusammengesetzt zu dem,

00:57:55.560 --> 00:57:57.940
was man tatsächlich einfach braucht.

00:57:57.940 --> 00:57:59.760
Das, was dann sinnvoll ist.

00:57:59.760 --> 00:58:01.880
Ja. Und da kann man

00:58:01.880 --> 00:58:03.520
dann auch Beispiele sagen, ja. Also, ein Beispiel

00:58:03.520 --> 00:58:05.320
von einem Iterable könnte ich jetzt nicht unbedingt sagen.

00:58:05.320 --> 00:58:07.020
Also, von einem puren.

00:58:07.020 --> 00:58:10.540
Ein Huhn. Ein Huhn ist ein Iterable.

00:58:10.540 --> 00:58:11.660
Legt ein Ei, legt noch ein Ei,

00:58:11.660 --> 00:58:12.820
legt noch ein Ei, legt noch ein Ei.

00:58:12.820 --> 00:58:15.740
Ja, das wisst ihr jetzt nicht,

00:58:15.740 --> 00:58:17.580
wenn man es in Python implementiert,

00:58:17.580 --> 00:58:18.040
aber ja.

00:58:18.040 --> 00:58:21.820
Es gibt auch Hühner

00:58:21.820 --> 00:58:23.820
in Pythons. Dann ist halt die Frage,

00:58:23.820 --> 00:58:25.700
was war zuerst da? Das Ei oder das Huhn?

00:58:25.700 --> 00:58:27.000
Ja, weiß auch nicht.

00:58:27.000 --> 00:58:29.640
Wenn du eine große Schlange hast, kannst du ja mal einen Huhn

00:58:29.640 --> 00:58:31.300
reintun und dann schauen, ob es iteriert.

00:58:31.860 --> 00:58:33.740
Ich habe letztens irgendwo so ein Schaubild

00:58:33.740 --> 00:58:35.540
gesehen, wo ein Biologe meinte, so war es

00:58:35.540 --> 00:58:37.760
eine Quatschfrage. Also, wir malen

00:58:37.760 --> 00:58:39.660
hier einfach mal so diesen evolutionären Schlangenbogen

00:58:39.660 --> 00:58:41.660
auf und da haben wir überall Eier, aber nur

00:58:41.660 --> 00:58:43.080
da ganz unten ein Huhn.

00:58:43.080 --> 00:58:45.340
Natürlich war das Ei zuerst da.

00:58:45.340 --> 00:58:47.520
Völlig

00:58:47.520 --> 00:58:48.680
triviale Frage.

00:58:48.680 --> 00:58:51.440
Ja. Okay.

00:58:51.440 --> 00:58:53.720
Genau. Und Mapping, ich meine,

00:58:53.720 --> 00:58:55.600
das kennt man auch, das ist ein Dictionary und Set kennt man auch,

00:58:55.600 --> 00:58:57.680
das ist ein Set. Und das sind dann die Sachen, die man tatsächlich

00:58:57.680 --> 00:58:59.580
benutzt. Aber diese Protokolle,

00:58:59.580 --> 00:59:01.840
also das, was die tatsächlich an Funktionalität

00:59:01.840 --> 00:59:03.480
anbieten, das ist hier

00:59:03.480 --> 00:59:05.560
zusammengesetzt aus diesen ABCs, aus den

00:59:05.560 --> 00:59:07.200
Abstract Base Classes.

00:59:07.200 --> 00:59:08.460
Benutzt die tatsächlich immer?

00:59:08.460 --> 00:59:11.660
Der Trick ist, dass

00:59:11.660 --> 00:59:13.700
wenn du diese ABCs implementierst,

00:59:13.700 --> 00:59:15.560
dann, genau wie vorhin bei den

00:59:15.560 --> 00:59:17.480
Special Methods oder bei den Magic Methods,

00:59:17.480 --> 00:59:19.440
dann kannst du dich in den Python Interpreter so rein

00:59:19.440 --> 00:59:21.560
integrieren, wie wenn du ein Dict wärst

00:59:21.560 --> 00:59:22.800
oder eine Liste oder was auch immer.

00:59:22.800 --> 00:59:25.400
Also dann habe ich ein Interface

00:59:25.400 --> 00:59:27.820
implementiert. Kann man das so

00:59:27.820 --> 00:59:29.820
sagen? Ja, es heißt hier nicht Interface, sondern Protokoll.

00:59:29.820 --> 00:59:31.780
Aha. Das heißt,

00:59:31.820 --> 00:59:33.480
beim Typing Protokoll kann ich das dann benutzen.

00:59:33.480 --> 00:59:35.560
Das ist nochmal eine andere

00:59:35.560 --> 00:59:37.420
Geschichte, aber ja, das funktioniert dann, das ist

00:59:37.420 --> 00:59:39.500
eine andere Art, das zu machen. Aber das macht

00:59:39.500 --> 00:59:41.300
quasi genau, deswegen, also Abstract Base Classes,

00:59:41.300 --> 00:59:43.320
ja, braucht man das? Nein. Also du kannst,

00:59:43.320 --> 00:59:45.300
das Problem bei den Abstract Base Classes,

00:59:45.300 --> 00:59:47.220
das ist halt, es funktioniert halt anders.

00:59:47.220 --> 00:59:49.360
Es ist halt sozusagen, das hatten wir in der

00:59:49.360 --> 00:59:51.380
Typing Episode auch, es ist halt

00:59:51.380 --> 00:59:53.620
sozusagen nominatives,

00:59:53.620 --> 00:59:55.460
nominative Typisierung

00:59:55.460 --> 00:59:57.460
sozusagen in dem Sinne, dass du jetzt bei

00:59:57.460 --> 00:59:59.840
jedem Ding, das du erzeugst,

00:59:59.840 --> 01:00:01.800
dadurch, dass du von so einer Abstract Base Class erbst,

01:00:01.800 --> 01:00:03.720
sagst du halt genau, was es ist.

01:00:03.720 --> 01:00:06.040
Und es ist das, weil

01:00:06.040 --> 01:00:07.780
du es davon erbst. Genau, bei Protokoll nicht,

01:00:07.780 --> 01:00:09.900
weil es kann nicht das sein, weil das ist im Protokoll

01:00:09.900 --> 01:00:11.120
eigentlich viel flexibler für sowas

01:00:11.120 --> 01:00:12.900
und auch viel besser geeignet.

01:00:12.900 --> 01:00:14.040
Ja,

01:00:14.040 --> 01:00:17.540
ja, aber es hat dann natürlich auch wieder

01:00:17.540 --> 01:00:19.780
Nachteile. Naja, wenn du sagst, es muss

01:00:19.780 --> 01:00:21.720
eine Collection sein, die da reingeht, dann ist doch scheißegal, was

01:00:21.720 --> 01:00:22.600
für eine Collection das ist.

01:00:22.600 --> 01:00:25.960
Wenn das das Protokoll der Collection erfüllt

01:00:25.960 --> 01:00:27.640
und die dann, das Mapping

01:00:27.640 --> 01:00:29.800
oder das Set oder sowas, und da ist irgendein Set, das da

01:00:29.800 --> 01:00:31.520
rein muss, aber du sagst halt, es muss halt diese Sachen,

01:00:31.780 --> 01:00:33.840
die da drin haben, die im Protokoll

01:00:33.840 --> 01:00:36.080
definiert sind, also in den Methoden,

01:00:36.080 --> 01:00:37.280
die man für ein Set halt braucht.

01:00:37.280 --> 01:00:39.860
Genau, aber was sagst du ja damit? Ja, aber dann

01:00:39.860 --> 01:00:41.840
ist das doch okay, aber da muss ich doch keine Abstract Base

01:00:41.840 --> 01:00:43.940
Klasse verwenden, das ist irgendwie komisch.

01:00:43.940 --> 01:00:45.680
Doch, klar. Das ist ja genau

01:00:45.680 --> 01:00:47.480
die Formalisierung davon.

01:00:47.480 --> 01:00:49.600
Du erbst von dieser Abstract Base Class,

01:00:49.600 --> 01:00:51.900
dann hast du erstmal nichts umgesetzt, dann implementierst du die ganzen

01:00:51.900 --> 01:00:53.880
Sachen. Nein, Protokoll. Dann wirst

01:00:53.880 --> 01:00:55.940
du zu einer Collection. Deine Klasse ist

01:00:55.940 --> 01:00:57.980
eine Collection. Dann kannst du es auch überprüfen.

01:00:57.980 --> 01:00:59.820
Wenn du nur im Typing sagst,

01:00:59.820 --> 01:01:01.520
das entspricht dem, dann hast du es nicht überprüft.

01:01:01.760 --> 01:01:03.840
Wenn du nur im Protokoll Dings machst, dann würdest du sagen,

01:01:03.840 --> 01:01:05.640
ist Collection, also ist Instance

01:01:05.640 --> 01:01:07.520
auf Collection, sagt dir halt, ne,

01:01:07.520 --> 01:01:08.200
eher nicht.

01:01:08.200 --> 01:01:11.780
Was du dann machen kannst,

01:01:11.780 --> 01:01:13.940
ist halt, dann dein

01:01:13.940 --> 01:01:15.840
statischer Type Checker kann immer noch Fehler

01:01:15.840 --> 01:01:16.380
finden. Ja, genau.

01:01:16.380 --> 01:01:19.740
Mein Linter sagt mir halt, ja, nee, aber der

01:01:19.740 --> 01:01:21.820
will jetzt ein Collection haben und nichts anderes.

01:01:21.820 --> 01:01:23.460
Ja, aber wenn da jemand anders

01:01:23.460 --> 01:01:25.840
ein ist Instance auf deinem, was auch

01:01:25.840 --> 01:01:27.600
immer das Ding ist, irgendwie aufruft,

01:01:27.600 --> 01:01:29.400
dann kriegt der nicht und sagt, ist das eine Collection?

01:01:29.400 --> 01:01:31.380
Dann kommt er zurück, nö, ist nicht.

01:01:31.740 --> 01:01:33.560
Ja, okay, weil das kein hartes

01:01:33.560 --> 01:01:35.260
Geerbe ist. Weil es ist nicht wirklich eine Collection

01:01:35.260 --> 01:01:37.520
in dem Sinne. Ja, aber es interpretiert nur das Protokoll

01:01:37.520 --> 01:01:38.980
als wäre es eine Collection.

01:01:38.980 --> 01:01:41.320
Genau, also das ist quasi die

01:01:41.320 --> 01:01:43.520
Formalisierung davon. Du gibst

01:01:43.520 --> 01:01:45.440
es technisch rein und sagst, das ist eine

01:01:45.440 --> 01:01:47.620
Collection. Glaubst du der Sprache,

01:01:47.620 --> 01:01:49.320
die das mit Instance überprüft,

01:01:49.320 --> 01:01:51.200
oder glaubst du deinem Linter, der dir sagt,

01:01:51.200 --> 01:01:52.240
das könnte passen oder nicht?

01:01:52.240 --> 01:01:54.960
Naja, es hat halt alle so Vor- und Nachfälle.

01:01:54.960 --> 01:01:57.160
Den Linter glaube ich überhaupt gar nicht. Ja, aber warum will ich denn

01:01:57.160 --> 01:01:59.100
jemals testen, ob es ist Instance auf Collection ist?

01:01:59.100 --> 01:02:01.040
Ich will nur wissen, ob dann das lintet, weil es die

01:02:01.040 --> 01:02:01.720
Methoden implementiert.

01:02:01.720 --> 01:02:03.640
Und ich will, ob es Instance

01:02:03.640 --> 01:02:06.080
auf, keine Ahnung, meine Superliste

01:02:06.080 --> 01:02:06.820
dann gibt.

01:02:06.820 --> 01:02:09.660
Da gibt es ja schon Use Cases

01:02:09.660 --> 01:02:10.860
dafür, dass du sagst, okay,

01:02:10.860 --> 01:02:13.720
ich habe eine Funktion, die alles mögliche

01:02:13.720 --> 01:02:16.120
verarbeiten kann,

01:02:16.120 --> 01:02:17.820
muss ja schon eventuell auf unterschiedliche

01:02:17.820 --> 01:02:19.640
Arten drücken. Nein, aber ich will wissen, ist Instance

01:02:19.640 --> 01:02:21.660
Buch? Weil wenn ich nach der Bücher-Collection

01:02:21.660 --> 01:02:23.820
gucke und ich will niemals wissen,

01:02:23.820 --> 01:02:25.640
ob es eine Collection von irgendwelchen

01:02:25.640 --> 01:02:27.580
abstrakten Dingen ist. Deswegen ist es Bullshit, das mit

01:02:27.580 --> 01:02:29.460
abstrakten Base-Classungen. Meiner Meinung nach ist das super,

01:02:29.460 --> 01:02:31.460
wenn es ein Protokoll gibt. Damit, dass du noch nie eine Bibliothek-Implementierung

01:02:31.700 --> 01:02:32.700
die so eine Funktion hat.

01:02:32.710 --> 01:02:34.210
Funktionalität anbietet, ist jetzt

01:02:34.210 --> 01:02:36.730
schade, aber so ist es.

01:02:36.730 --> 01:02:38.690
Ich meine zum Beispiel,

01:02:38.690 --> 01:02:40.670
wo das halt häufig

01:02:40.670 --> 01:02:42.770
auftritt, also wo ich das kenne mit

01:02:42.770 --> 01:02:44.590
denen, dass man halt irgendwie, es gibt halt viele

01:02:44.590 --> 01:02:46.230
Methoden, zum Beispiel nehmen wir jetzt bei Data Science

01:02:46.230 --> 01:02:48.490
Geschichten, irgendwie sowas wie

01:02:48.490 --> 01:02:50.550
irgendwie Data Pipelines oder irgendwelche

01:02:50.550 --> 01:02:51.350
Modelle oder so

01:02:51.350 --> 01:02:54.490
und da kommen halt

01:02:54.490 --> 01:02:56.350
manchmal so wirklich komische Sachen rein

01:02:56.350 --> 01:02:57.930
und ich

01:02:57.930 --> 01:03:00.430
habe auch schon viel

01:03:00.430 --> 01:03:02.190
Scikit-Learn-Code zum Beispiel gelesen und so

01:03:02.190 --> 01:03:04.450
viele Methoden oder

01:03:04.450 --> 01:03:06.190
viele Funktionen, die fangen an mit

01:03:06.190 --> 01:03:08.210
also, sag mal,

01:03:08.210 --> 01:03:10.470
bist du eigentlich ein sowas? Oder bist du

01:03:10.470 --> 01:03:12.270
vielleicht sowas? Und dann machen sie halt unterschiedliche Dinge,

01:03:12.270 --> 01:03:13.850
je nachdem, was das dann ist und

01:03:13.850 --> 01:03:16.310
das ist halt teilweise, das ist wirklich

01:03:16.310 --> 01:03:18.090
lang am Anfang und

01:03:18.090 --> 01:03:20.330
ja, ich wüsste jetzt nicht,

01:03:20.330 --> 01:03:22.210
wie man das anders machen könnte, außer so, also

01:03:22.210 --> 01:03:23.990
hmm

01:03:23.990 --> 01:03:26.110
also, ja

01:03:26.110 --> 01:03:28.270
Eine Sorte Funktion,

01:03:28.270 --> 01:03:30.270
die man auch häufig sieht in Bibliotheken

01:03:30.270 --> 01:03:31.670
ist, wo du entweder

01:03:31.670 --> 01:03:33.630
einzelne Elemente reingeben kannst oder gleich

01:03:33.630 --> 01:03:35.890
eine ganze Sammlung. Und dann musst du halt auch

01:03:35.890 --> 01:03:37.650
am Anfang dieser Funktion in der

01:03:37.650 --> 01:03:39.570
Implementierung unterscheiden können, ob du jetzt gerade ein

01:03:39.570 --> 01:03:41.650
einzelnes Element in der Hand hast oder ganz viele

01:03:41.650 --> 01:03:43.850
einzelne Elemente. Und da

01:03:43.850 --> 01:03:46.070
musst du schon irgendwie eine formalisierte

01:03:46.070 --> 01:03:47.570
Unterscheidung machen, da hilft dir auch der

01:03:47.570 --> 01:03:49.250
Linternix, weil der geht ja zur Laufzeit nicht.

01:03:49.250 --> 01:03:51.870
Also

01:03:51.870 --> 01:03:53.490
es macht schon seinen Sinn,

01:03:53.490 --> 01:03:55.710
diese Sachen so zu deklarieren,

01:03:55.710 --> 01:03:57.310
insbesondere, wenn du eben hier solche,

01:03:57.310 --> 01:03:59.670
sag ich mal, grundlegenden Funktionen

01:03:59.670 --> 01:04:01.070
implementierst.

01:04:01.150 --> 01:04:02.610
Man kann das auch zu weit treiben,

01:04:02.610 --> 01:04:04.670
wenn man das zu weit treibt, dann kriegt man Java.

01:04:04.670 --> 01:04:05.930
Ja.

01:04:05.930 --> 01:04:07.530
Und

01:04:07.530 --> 01:04:10.590
man muss da eine Balance finden.

01:04:10.590 --> 01:04:12.050
Ja.

01:04:12.050 --> 01:04:14.610
Aber es ist,

01:04:14.610 --> 01:04:16.510
um wieder darauf zurückzukommen,

01:04:16.510 --> 01:04:18.410
es ist schon interessant, dass das eigentlich so relativ

01:04:18.410 --> 01:04:20.390
simple Sachen sind. Also hier dieses

01:04:20.390 --> 01:04:22.050
UML-Diagramm ist eine Viertelseite

01:04:22.050 --> 01:04:24.590
und es stehen ja wirklich nicht viele

01:04:24.590 --> 01:04:25.990
Sachen da drin. Ja.

01:04:25.990 --> 01:04:28.650
Es sind nicht viele Methoden, die man umsetzen muss.

01:04:28.650 --> 01:04:30.570
Ja, und das ist halt irgendwie

01:04:30.570 --> 01:04:31.110
quasi,

01:04:31.150 --> 01:04:33.250
also die meisten oder viele

01:04:33.250 --> 01:04:35.290
Leute werden sich niemals aus diesem Universum

01:04:35.290 --> 01:04:37.050
von dem, was da definiert ist, rausbewegen,

01:04:37.050 --> 01:04:39.110
weil damit quasi fast

01:04:39.110 --> 01:04:40.930
alles erschlagen ist, was man so normalerweise so tut.

01:04:40.930 --> 01:04:42.670
Das ist schon faszinierend, dass das geht, ja.

01:04:42.670 --> 01:04:45.070
Ja, außer Skalare.

01:04:45.070 --> 01:04:46.390
Okay, die stehen da jetzt auch nicht so normal.

01:04:46.390 --> 01:04:50.010
Ja.

01:04:50.010 --> 01:04:52.990
Ja, und dann ist das erste

01:04:52.990 --> 01:04:54.870
Kapitel ja schon fast vorbei. Dann haben wir noch hier die Übersicht

01:04:54.870 --> 01:04:56.350
der Dunder-Methods. Da wird einmal nochmal

01:04:56.350 --> 01:04:58.710
komplett alle aufgeführt auch.

01:04:58.710 --> 01:05:00.910
Ja. Schön, so völlig ohne

01:05:00.910 --> 01:05:02.970
Zusammenhang hier mit Metaprogramming

01:05:02.970 --> 01:05:04.310
und Abstract-Base-Glasses und

01:05:04.310 --> 01:05:06.410
Attribute-Descriptors und Attribute-Management.

01:05:06.410 --> 01:05:07.610
Also da

01:05:07.610 --> 01:05:10.910
ist es interessanter reinzuschauen,

01:05:10.910 --> 01:05:12.710
was es alles gibt, aber ich wüsste jetzt nicht

01:05:12.710 --> 01:05:14.490
bei allen, was die tun. Was ist der Unterschied

01:05:14.490 --> 01:05:15.750
zwischen Get-Attribute und Get-Attribute?

01:05:15.750 --> 01:05:18.770
Ja, es kommt in Kapitel.

01:05:18.770 --> 01:05:22.210
Ja.

01:05:22.210 --> 01:05:24.650
Also das eine ist

01:05:24.650 --> 01:05:26.910
irgendwie nochmal ein Stückchen

01:05:26.910 --> 01:05:28.770
allgemeiner, glaube ich, als das andere.

01:05:28.770 --> 01:05:30.250
Ich glaube, Get-Attribute ist halt das,

01:05:30.350 --> 01:05:31.970
das wirklich ganz allgemeine Ding.

01:05:31.970 --> 01:05:33.490
Und Get-Attribute ist halt, guckt halt wirklich

01:05:33.490 --> 01:05:34.850
ganz tief runter.

01:05:34.850 --> 01:05:37.810
Das eine ist näher dran, oder?

01:05:37.810 --> 01:05:40.210
Ja. Also Get-Attribute kannst du

01:05:40.210 --> 01:05:41.670
auch Methoden überschreiten.

01:05:41.670 --> 01:05:44.210
Genau, die Frage ist halt, wann, welches Dick das reinguckt,

01:05:44.210 --> 01:05:44.990
wenn du guckst.

01:05:44.990 --> 01:05:48.330
Aber so ganz genau weiß ich das jetzt auch

01:05:48.330 --> 01:05:50.550
alles nicht. Oder In-It-Sub-Class.

01:05:50.550 --> 01:05:52.110
Wüsstest du, was In-It-Sub-Class macht,

01:05:52.110 --> 01:05:54.130
Johann, oder Prepare? Ich weiß es aus

01:05:54.130 --> 01:05:54.470
einem,

01:05:54.470 --> 01:05:57.470
wir haben ja auch schon die Wechsel-Saison wieder.

01:05:57.470 --> 01:05:59.670
In-It-Sub-Class, das ist halt,

01:06:00.110 --> 01:06:01.930
der Grund, warum Leute

01:06:01.930 --> 01:06:03.830
Meta-Klassen verwenden, ist eigentlich der,

01:06:03.830 --> 01:06:05.970
dass sie halt irgendwie die Klasse-Instanzierung

01:06:05.970 --> 01:06:07.570
ab und zu mal so ein bisschen modifizieren wollen.

01:06:07.570 --> 01:06:09.910
Und fast alle Use-Cases lassen sich,

01:06:09.910 --> 01:06:11.750
also Meta-Klassen selber zum Benutzen ist

01:06:11.750 --> 01:06:13.590
super viertelig. Man muss

01:06:13.590 --> 01:06:15.030
extrem aufpassen, was man da tut.

01:06:15.030 --> 01:06:17.110
Und

01:06:17.110 --> 01:06:19.850
daher ist das halt so ein bisschen auch in Verruf

01:06:19.850 --> 01:06:21.670
geraten. Und Leute raten einem davon immer ab,

01:06:21.670 --> 01:06:22.110
das zu machen.

01:06:22.110 --> 01:06:25.670
Aber genau, man

01:06:25.670 --> 01:06:26.010
kann,

01:06:26.010 --> 01:06:29.630
wenn man jetzt In-It-Sub-Class

01:06:29.630 --> 01:06:30.070
verwendet,

01:06:30.110 --> 01:06:31.770
dann kann man fast alle Anwendungsfälle, für den

01:06:31.770 --> 01:06:33.550
Leute normalerweise so Meta-Klassen verwenden,

01:06:33.550 --> 01:06:35.810
halt damit hinkriegen und

01:06:35.810 --> 01:06:37.890
hat all diese Probleme nicht, die man halt sonst

01:06:37.890 --> 01:06:39.230
so kriegt, wenn man Meta-Klassen verwendet.

01:06:39.230 --> 01:06:40.870
Und das ist

01:06:40.870 --> 01:06:43.850
eingeführt worden mit Python 3.6. Und ich weiß das

01:06:43.850 --> 01:06:45.790
halt nicht deswegen, weil ich sowieso immer alles

01:06:45.790 --> 01:06:47.770
weiß, sondern in dem speziellen Fall,

01:06:47.770 --> 01:06:49.710
in dem speziellen Fall weiß ich es,

01:06:49.710 --> 01:06:54.130
in diesem Fall weiß ich es,

01:06:54.130 --> 01:06:55.670
weil den Pep dafür hat

01:06:55.670 --> 01:06:57.790
irgendwie, wir hatten ja Martin hier

01:06:57.790 --> 01:06:59.870
auch mal zu Gast, der irgendwie dann in diesen

01:06:59.870 --> 01:07:01.430
XFile-Rond-Laser geschrieben hat.

01:07:01.430 --> 01:07:03.930
Und den Pep zur Einführung von In-It-Sub-Class,

01:07:03.930 --> 01:07:05.690
den hat er geschrieben und ist

01:07:05.690 --> 01:07:06.910
damals in Python 3.6 reingekommen.

01:07:06.910 --> 01:07:09.670
Ja. Und deswegen hast du natürlich ganz

01:07:09.670 --> 01:07:11.470
besonders. Okay, dann habe ich jetzt das Falsche gefragt. Dann

01:07:11.470 --> 01:07:13.750
sag mal, was Sub-Class-Check macht der Hund? Weißt du mal alles?

01:07:13.750 --> 01:07:15.670
Ja, siehst du. Weiß ich nicht. Keine Ahnung.

01:07:15.670 --> 01:07:17.770
Ja, okay, gut. Also das kommt dann in einem

01:07:17.770 --> 01:07:19.570
späteren Kapitel und da sind auch

01:07:19.570 --> 01:07:21.670
MRO-Entries. Also ich meine, dass man

01:07:21.670 --> 01:07:23.610
da sein MRO bearbeiten kann, das ist ja

01:07:23.610 --> 01:07:24.070
schon hart.

01:07:24.070 --> 01:07:27.630
Kann man sich einfach sagen, ich bin jetzt

01:07:27.630 --> 01:07:29.730
ein bisschen tiefer implementiert und ich bin

01:07:29.730 --> 01:07:30.570
jetzt einfach type.

01:07:30.570 --> 01:07:33.450
Ja, keine Ahnung. Ich weiß es nicht.

01:07:33.450 --> 01:07:35.610
Wir werden

01:07:35.610 --> 01:07:37.970
es im Laufe dieser Vortragsreihe

01:07:37.970 --> 01:07:39.010
eine Type

01:07:39.010 --> 01:07:40.610
vielleicht lernen.

01:07:40.610 --> 01:07:43.750
Genau, aber was mich also auch

01:07:43.750 --> 01:07:45.590
überrascht hat, ist, dass wie viele... Oder machen wir jetzt das ganze Buch

01:07:45.590 --> 01:07:45.850
heute.

01:07:45.850 --> 01:07:49.170
Genau, ja. Das wird jetzt ein bisschen dauern.

01:07:49.170 --> 01:07:50.930
Einmal ansteigen.

01:07:50.930 --> 01:07:52.570
Türen schließen.

01:07:52.570 --> 01:07:55.230
Was ich auch

01:07:55.230 --> 01:07:56.710
irgendwie nicht erwartet hätte,

01:07:56.710 --> 01:07:59.450
also ist das halt so viel

01:07:59.590 --> 01:08:01.030
Volkssicht um arithmetische

01:08:01.030 --> 01:08:03.150
Geschichten und Operator

01:08:03.150 --> 01:08:05.550
Overloading. Also mehr als

01:08:05.550 --> 01:08:07.330
die Hälfte. Und das

01:08:07.330 --> 01:08:08.810
hätte ich jetzt nicht gedacht.

01:08:08.810 --> 01:08:11.130
Wenn man mich jetzt nachts geweckt hätte und gefragt hätte,

01:08:11.130 --> 01:08:13.370
was machen die Menschen, welche Magic Methods gibt's

01:08:13.370 --> 01:08:15.330
und was machen die so, dann wäre ich jetzt bei

01:08:15.330 --> 01:08:16.570
sowas wie Repre oder

01:08:16.570 --> 01:08:19.230
irgendwie, genau, Bool oder

01:08:19.230 --> 01:08:20.210
weiß ich nicht, sowas gewesen.

01:08:20.210 --> 01:08:25.190
Ja, es ist auch, es geht in

01:08:25.190 --> 01:08:27.190
beide Richtungen und dann geht's mit Integer und dann

01:08:27.190 --> 01:08:29.350
gibt's mit Reversed und dann gibt's mit Augmented und dann

01:08:29.350 --> 01:08:30.910
gibt's mit Bitwise und mit Reversed und

01:08:30.910 --> 01:08:33.150
Augmented. Also das gibt's alles

01:08:33.150 --> 01:08:34.450
in drei verschiedenen Varianten.

01:08:34.450 --> 01:08:37.070
Jeweils. Ja. Sonst sind's

01:08:37.070 --> 01:08:38.910
ja nicht so viele, aber es...

01:08:38.910 --> 01:08:41.530
Ja.

01:08:41.530 --> 01:08:44.850
Ja, ja, ja. Ja gut, Mathematik

01:08:44.850 --> 01:08:46.270
regiert die Welt. Ja.

01:08:46.270 --> 01:08:49.070
Das, das, ja.

01:08:49.070 --> 01:08:51.070
So ist es.

01:08:51.070 --> 01:08:51.950
Ja.

01:08:51.950 --> 01:08:54.910
Ja, dann, das ist doch interessant

01:08:54.910 --> 01:08:56.950
hier. Und am Ende seines Kapitels

01:08:56.950 --> 01:08:58.510
hat er immer noch einen Soapbox

01:08:58.510 --> 01:08:59.210
...

01:08:59.210 --> 01:09:01.130
Abschnitt. Eine Seifenkiste. Den finde ich auch

01:09:01.130 --> 01:09:02.930
sehr schön. Ja, ja, genau, wo er sich

01:09:02.930 --> 01:09:04.850
hinstellt und mal ein bisschen predigt. Und das, das

01:09:04.850 --> 01:09:05.890
fand ich ja tatsächlich auch sehr schön.

01:09:05.890 --> 01:09:08.970
The Art of the

01:09:08.970 --> 01:09:10.210
Meta-Object Protocol.

01:09:10.210 --> 01:09:12.910
Großartiger Buchtitel

01:09:12.910 --> 01:09:14.430
und hab ich mir jetzt auch mal auf meine Liste

01:09:14.430 --> 01:09:16.930
... Das musst du noch mal genau

01:09:16.930 --> 01:09:17.310
erklären, bitte.

01:09:17.310 --> 01:09:20.890
Ja, ich weiß es auch nicht. Ich hab's auch noch nicht gelesen, aber ich fand den Titel

01:09:20.890 --> 01:09:22.710
gut genug, dass ich es mir direkt auf meine Leseliste

01:09:22.710 --> 01:09:23.250
gesetzt hab.

01:09:23.250 --> 01:09:26.750
Was ich viel

01:09:26.750 --> 01:09:28.610
interessanter fand noch, war ganz am Ende was,

01:09:28.890 --> 01:09:30.750
wo er sagt hier, der Autor,

01:09:30.750 --> 01:09:32.930
der dieses AMOB-Buch geschrieben hat,

01:09:32.930 --> 01:09:33.990
Art of the Meta-Object Protocol,

01:09:33.990 --> 01:09:37.010
der hat Aspect-Oriented Programming

01:09:37.010 --> 01:09:39.110
entwickelt oder getrieben.

01:09:39.110 --> 01:09:39.910
Und

01:09:39.910 --> 01:09:42.490
ich hab's dann mal auf Wikipedia

01:09:42.490 --> 01:09:45.030
nachgelesen, was Aspect-Oriented Programming

01:09:45.030 --> 01:09:46.630
ist, aber nicht so richtig

01:09:46.630 --> 01:09:47.110
verstanden.

01:09:47.110 --> 01:09:50.850
Also Aspekte sind auch irgendwas mit Magie, oder?

01:09:50.850 --> 01:09:52.610
Da geht's entweder Wasser oder Feuer

01:09:52.610 --> 01:09:54.130
oder ...

01:09:54.130 --> 01:09:56.410
Irgendwas mit gegen die Muggel.

01:09:56.410 --> 01:09:58.850
Ja, vielleicht. Ich weiß es.

01:09:58.850 --> 01:10:00.650
Ich weiß es nicht. Da muss uns mal jemand erklären.

01:10:00.650 --> 01:10:01.590
Da würde ich gerne mehr wissen, wie es geht.

01:10:01.590 --> 01:10:04.710
Aber da sind auf jeden Fall

01:10:04.710 --> 01:10:06.750
in dieser Soapbox sind schöne Pointer drin, wo man

01:10:06.750 --> 01:10:08.610
dann dem

01:10:08.610 --> 01:10:10.590
geneigten Leser als Übungsaufgabe

01:10:10.590 --> 01:10:12.370
überlassen werden.

01:10:12.370 --> 01:10:14.610
Vielleicht werden die Designer von Go irgendwann

01:10:14.610 --> 01:10:17.030
das Meta-Objekt-Protokoll erweitern.

01:10:17.030 --> 01:10:18.770
Aber das ist im Moment nicht das,

01:10:18.770 --> 01:10:19.110
was man

01:10:19.110 --> 01:10:22.490
auf dem Niveau, mit dem man in Python arbeiten kann.

01:10:22.490 --> 01:10:24.750
Genau, das ist halt das, was er hier

01:10:24.750 --> 01:10:26.550
dann sagt. In anderen Sprachen hast du diese

01:10:26.550 --> 01:10:28.810
Möglichkeiten nicht. In Go gibt's halt nicht.

01:10:28.810 --> 01:10:30.730
Magic-Sachen, weil die halt im

01:10:30.730 --> 01:10:32.670
Interpreter drin sind, kommst du auch nicht dran, kannst nichts machen.

01:10:32.670 --> 01:10:34.450
Und

01:10:34.450 --> 01:10:36.790
Pech gehabt. Und das ist

01:10:36.790 --> 01:10:38.490
in Python eben nicht so. Deshalb hier

01:10:38.490 --> 01:10:39.490
Muggel-Methods.

01:10:39.490 --> 01:10:42.950
Jeder kann da hingehen und die Finger drauflegen

01:10:42.950 --> 01:10:44.770
und dann so tun, als ob er zu Python

01:10:44.770 --> 01:10:45.050
gehört.

01:10:45.050 --> 01:10:48.930
Du wolltest damit einen exklusiven

01:10:48.930 --> 01:10:50.050
Kreis aufmachen, lieber Johannes.

01:10:50.050 --> 01:10:52.690
Du musst nur die magischen Worte

01:10:52.690 --> 01:10:54.650
wissen und in der richtigen Reihenfolge sagen und

01:10:54.650 --> 01:10:56.610
dann deinen Zauberstab in der richtigen Bewegung schwingen.

01:10:56.610 --> 01:10:58.690
Ja, du musst aber schon noch in jede Ecke vom Raum schon eine Kerze

01:10:58.690 --> 01:10:59.390
reinstellen und so.

01:10:59.390 --> 01:11:02.610
Das ist dann,

01:11:02.610 --> 01:11:04.510
das ist Meta-Programming, was du da meinst.

01:11:04.510 --> 01:11:08.970
Und Meta-Klasse.

01:11:08.970 --> 01:11:12.430
Da muss man immer ein bisschen aufpassen, was man damit

01:11:12.430 --> 01:11:14.650
sich heraufbeschwört, wenn man zu viel

01:11:14.650 --> 01:11:16.190
Meta macht, dann das kann auch.

01:11:16.190 --> 01:11:17.010
Zu viel Magie.

01:11:17.010 --> 01:11:21.170
Wie sagt man?

01:11:21.170 --> 01:11:23.050
Merry meet, merry greet.

01:11:23.050 --> 01:11:24.750
And merry meet again.

01:11:24.750 --> 01:11:28.430
Also,

01:11:28.570 --> 01:11:29.390
wegen des Heraufbestands.

01:11:29.390 --> 01:11:32.450
Das erste Kapitel war nicht so lang.

01:11:32.450 --> 01:11:33.530
Nö, ich war überrascht.

01:11:33.530 --> 01:11:34.430
Es fängt

01:11:34.430 --> 01:11:38.730
ordentlich an und ist dann aber nach

01:11:38.730 --> 01:11:40.250
also hier 19 Seiten schon vorbei.

01:11:40.250 --> 01:11:42.730
Also, das fand ich

01:11:42.730 --> 01:11:44.410
überraschend. Der legt ordentlich los

01:11:44.410 --> 01:11:46.530
und macht dann aber gleich direkt eine Pause.

01:11:46.530 --> 01:11:50.550
Ja, ja, und danach kommen dann jetzt

01:11:50.550 --> 01:11:52.650
irgendwie Sequences und, und, und, und.

01:11:52.650 --> 01:11:53.830
Ja, das ist ja deutlich länger.

01:11:53.830 --> 01:11:54.670
Und ja.

01:11:54.670 --> 01:11:57.250
Da hatten wir schon mal drüber gesprochen.

01:11:58.450 --> 01:12:00.650
Aber, genau. Ja, Pattern Matching ist ja auch

01:12:00.650 --> 01:12:02.330
sowas, das haben wir auch noch nie wirklich ausführlich

01:12:02.330 --> 01:12:04.670
besprochen. Das sollten wir vielleicht auch mal

01:12:04.670 --> 01:12:06.210
tun. Jetzt gibt es dann Kapitel 2.

01:12:06.210 --> 01:12:07.250
Ja.

01:12:07.250 --> 01:12:10.610
Das ist dann, das ist tatsächlich etwas über 60 Seiten

01:12:10.610 --> 01:12:11.910
lang. Das ist dann gleich deutlich länger.

01:12:11.910 --> 01:12:14.830
Tja. Aber ich meine, wenn man auf 980

01:12:14.830 --> 01:12:16.370
Seiten kommen will, muss man auch mal

01:12:16.370 --> 01:12:17.950
ab und zu mal eine füllen.

01:12:17.950 --> 01:12:19.850
Kapitel machen. Ja.

01:12:19.850 --> 01:12:22.810
Wie viele Kapitel

01:12:22.810 --> 01:12:24.930
gibt es denn? Gar nicht nachgeguckt.

01:12:24.930 --> 01:12:26.710
Ich habe einfach losgelesen, ohne zu lesen,

01:12:26.710 --> 01:12:27.570
wie viele Kapitel es gibt.

01:12:28.330 --> 01:12:30.330
Ja, du hast doch viele. 900 Seiten. Hast du ein bisschen Platz.

01:12:30.330 --> 01:12:32.630
24 Kapitel gibt es.

01:12:32.630 --> 01:12:34.730
Ah ja. Hätten es 25 sein sollen.

01:12:34.730 --> 01:12:36.630
Oder wie ist da eine andere von den magischen Zahlen,

01:12:36.630 --> 01:12:37.850
damit man auch in die richtige Stelle kommt?

01:12:37.850 --> 01:12:39.390
Nee, 24 ist doch gut.

01:12:39.390 --> 01:12:41.030
Das ist eine

01:12:41.030 --> 01:12:44.010
Abandoned Number, oder?

01:12:44.010 --> 01:12:46.430
Das ist doch eine, wo die Summe der Teile

01:12:46.430 --> 01:12:47.750
größer ist als die Zahl selbst.

01:12:47.750 --> 01:12:49.590
Okay.

01:12:49.590 --> 01:12:51.430
Ist doch immer gut.

01:12:51.430 --> 01:12:53.250
Aha.

01:12:53.250 --> 01:12:56.810
Ja, jetzt kommen die Mathe-Nerds

01:12:56.810 --> 01:12:57.090
raus.

01:12:58.330 --> 01:13:00.790
Okay, kannte ich auch noch nicht.

01:13:00.790 --> 01:13:02.630
Ja.

01:13:02.630 --> 01:13:04.890
Da habe ich eine Buchempfehlung

01:13:04.890 --> 01:13:06.130
dazu, wenn dich das interessiert.

01:13:06.130 --> 01:13:07.830
These Wonderful Numbers.

01:13:07.830 --> 01:13:11.090
Da ist quasi

01:13:11.090 --> 01:13:12.790
zu jeder Zahl sind die Eigenschaften beschrieben.

01:13:12.790 --> 01:13:14.570
Hm.

01:13:14.570 --> 01:13:18.130
Das ist ein sehr

01:13:18.130 --> 01:13:20.750
nerdiges Buch für nerdige Mathematiker.

01:13:20.750 --> 01:13:23.010
Einfach keine Angst haben,

01:13:23.010 --> 01:13:24.510
die Dunkelheit länger ins Auge zu schauen.

01:13:24.510 --> 01:13:26.430
Je älter man wird, desto mehr

01:13:26.430 --> 01:13:27.310
versteht man davon auch.

01:13:28.210 --> 01:13:29.670
Als Mathematiker hat man da keine Angst davor.

01:13:29.670 --> 01:13:32.170
Hat auch wieder was mit Magie zu tun.

01:13:32.170 --> 01:13:34.750
Worte der Weisheit.

01:13:34.750 --> 01:13:36.830
Genau. Spezielle Art von Magie.

01:13:36.830 --> 01:13:37.350
Genau.

01:13:37.350 --> 01:13:40.310
Da wir die ganze Zeit von Magie reden,

01:13:40.310 --> 01:13:41.770
würde ich gerne meinen Pick tatsächlich nehmen.

01:13:41.770 --> 01:13:42.190
Ja.

01:13:42.190 --> 01:13:46.530
Ich nehme doch tatsächlich

01:13:46.530 --> 01:13:48.110
noch einen Euro-Python-Talk, weil

01:13:48.110 --> 01:13:52.210
der liebe Rodrigo

01:13:52.210 --> 01:13:54.330
einen sehr schönen Talk

01:13:54.330 --> 01:13:55.570
gemacht hat über so

01:13:55.570 --> 01:13:57.730
Turtle. Kennt ihr vielleicht?

01:13:58.210 --> 01:13:59.670
Auch ganz magische Sachen macht das. Das kann

01:13:59.670 --> 01:14:00.950
Dinge auf die

01:14:00.950 --> 01:14:03.710
Leinwand malen, die sich drehen,

01:14:03.710 --> 01:14:06.170
spiralen. Und dann kann man das erweitern,

01:14:06.170 --> 01:14:08.010
auch zu Fraktalen. Und damit kann man animierte

01:14:08.010 --> 01:14:10.130
Fraktale für

01:14:10.130 --> 01:14:11.730
Live-Performances zum Beispiel

01:14:11.730 --> 01:14:12.970
schreiben.

01:14:12.970 --> 01:14:15.930
Und zwar relativ einfach, indem man so einfache

01:14:15.930 --> 01:14:18.170
mathematische Prinzipien verwendet. Und da war ein toller Talk zu.

01:14:18.170 --> 01:14:19.730
Und er hat auch einen schönen Blog-Post dazu geschrieben.

01:14:19.730 --> 01:14:21.650
Deswegen würde ich den gerne mal in die Show umzlinken.

01:14:21.650 --> 01:14:23.390
Okay, okay.

01:14:23.390 --> 01:14:25.090
Okay, gut. Cool. Spannend.

01:14:25.090 --> 01:14:26.370
Mhm.

01:14:28.210 --> 01:14:30.710
Ich habe heute zwei Picks dabei.

01:14:30.710 --> 01:14:33.090
Der erste Pick

01:14:33.090 --> 01:14:34.730
ist ein Buch

01:14:34.730 --> 01:14:35.990
ähnlichen Ausmaßes

01:14:35.990 --> 01:14:37.590
wie Fluent Python.

01:14:37.590 --> 01:14:40.110
Ich halte mal hier die Kamera für die anderen beiden.

01:14:40.110 --> 01:14:41.670
Oh, okay. Noch ein Schläger.

01:14:41.670 --> 01:14:44.650
Als es kam, ist es, es hat ein tatsächlich

01:14:44.650 --> 01:14:45.790
ähnliches Format. Es heißt

01:14:45.790 --> 01:14:48.110
Django 5 by Example

01:14:48.110 --> 01:14:50.290
von Antonio Mele.

01:14:50.290 --> 01:14:52.810
Und

01:14:52.810 --> 01:14:54.090
ich glaube, dass das

01:14:54.090 --> 01:14:56.490
ähnlich ist wie Fluent Python,

01:14:56.490 --> 01:14:57.730
nur halt für Django.

01:14:58.210 --> 01:15:00.110
Ach, sehr cool. Ganz, ganz frisch mit

01:15:00.110 --> 01:15:00.730
Django 5.

01:15:00.730 --> 01:15:04.350
Weil, also hier, ich habe es leider noch nicht durchgelesen.

01:15:04.350 --> 01:15:05.890
Es ist, wie gesagt,

01:15:05.890 --> 01:15:08.130
auch das, auch dieses Buch hat

01:15:08.130 --> 01:15:10.130
ja, 750 Seiten,

01:15:10.130 --> 01:15:12.230
ein bisschen weniger, aber trotzdem ein ähnliches

01:15:12.230 --> 01:15:12.570
Format.

01:15:12.570 --> 01:15:16.290
Was ist das mit diesen Autoren von

01:15:16.290 --> 01:15:18.070
Programmierhandmüchern? Warum müssen die immer

01:15:18.070 --> 01:15:18.790
so viel schreiben?

01:15:18.790 --> 01:15:22.210
Es dauert irgendwas nicht richtig mit drin.

01:15:22.210 --> 01:15:22.750
Es gibt viel zu sagen.

01:15:22.750 --> 01:15:23.410
Ah ja, gut.

01:15:23.410 --> 01:15:26.250
Und

01:15:26.250 --> 01:15:28.190
ich glaube, der Trick da drin ist,

01:15:28.210 --> 01:15:30.290
halt, dass es bei Example ist und

01:15:30.290 --> 01:15:31.970
eben sehr viele

01:15:31.970 --> 01:15:34.170
einfach handfeste Projekte

01:15:34.170 --> 01:15:36.190
enthält, wo er sagt, hier, wir machen

01:15:36.190 --> 01:15:38.170
jetzt mal, hier, wir machen

01:15:38.170 --> 01:15:40.170
mal einen Blog und jetzt machen wir mal noch mehr Blog und

01:15:40.170 --> 01:15:42.130
jetzt machen wir mal noch mehr Blog und jetzt machen wir mal noch Social

01:15:42.130 --> 01:15:44.630
Website und Social Authentication

01:15:44.630 --> 01:15:46.310
und Content Sharing und Online

01:15:46.310 --> 01:15:48.330
Shop und Tracking User Actions und

01:15:48.330 --> 01:15:50.290
Managing Payments and

01:15:50.290 --> 01:15:52.210
Orders and Extending Your Shop und

01:15:52.210 --> 01:15:54.010
Internationalization und

01:15:54.010 --> 01:15:56.090
Caching und E-Learning und

01:15:56.090 --> 01:15:57.670
Content Management und API und

01:15:57.670 --> 01:15:57.930
Okay.

01:15:58.210 --> 01:16:00.790
Das ist, glaube ich, geht so ein bisschen

01:16:00.790 --> 01:16:01.590
in die Richtung, wo

01:16:01.590 --> 01:16:04.790
auf Lohnpeisen hingeht, dass es

01:16:04.790 --> 01:16:06.650
halt über die Basics hinausgeht

01:16:06.650 --> 01:16:07.990
und ich glaube, dass das

01:16:07.990 --> 01:16:10.610
eine Lücke in meinem Bücherschrank

01:16:10.610 --> 01:16:12.570
füllt, von der ich bisher nicht wusste, dass

01:16:12.570 --> 01:16:14.590
ich sie hatte und das freut mich sehr.

01:16:14.590 --> 01:16:15.590
Ah ja.

01:16:15.590 --> 01:16:18.070
Also hast du jetzt endlich Zeit, deinen

01:16:18.070 --> 01:16:20.510
Dango-Webshop zu implementieren, von dem du schon die ganze Zeit räumst?

01:16:20.510 --> 01:16:22.270
Mein Blog, ich werde jetzt endlich mal

01:16:22.270 --> 01:16:22.750
meinen Blog

01:16:22.750 --> 01:16:26.930
modernisieren.

01:16:28.210 --> 01:16:29.270
Das war gestern, jetzt ist es wieder.

01:16:29.270 --> 01:16:31.410
Ja, nee, das ist doch langweilig.

01:16:31.410 --> 01:16:33.570
Ich muss dynamisch sein und mit User Tracking und mit

01:16:33.570 --> 01:16:34.430
Payments and Orders.

01:16:34.430 --> 01:16:37.870
Ja, das wird ja auch mal Zeit.

01:16:37.870 --> 01:16:39.490
Ja, ja, klar.

01:16:39.490 --> 01:16:41.290
Roy, Roy, Roy.

01:16:41.290 --> 01:16:42.130
Wieder Magie.

01:16:42.130 --> 01:16:44.270
Ja.

01:16:44.270 --> 01:16:47.470
Der zweite Pick, den ich mitgebracht habe, ist eine

01:16:47.470 --> 01:16:49.590
Bibliothek, die heißt Dramatic oder

01:16:49.590 --> 01:16:51.150
vielleicht heißt sie auch Dramatic Q.

01:16:51.150 --> 01:16:53.770
Und

01:16:53.770 --> 01:16:55.690
das kam auf in einer

01:16:55.690 --> 01:16:57.450
Diskussion über, was kann man denn statt

01:16:57.450 --> 01:16:58.450
Celery verwenden?

01:16:58.450 --> 01:17:01.030
Da gibt es jetzt zwar in Django was.

01:17:01.030 --> 01:17:03.450
Die Background-Tasks

01:17:03.450 --> 01:17:05.370
hatten wir ja vorhin auch schon kurz gelernt.

01:17:05.370 --> 01:17:07.730
Du hast denselben Mastodon-Social-

01:17:07.730 --> 01:17:08.230
Thread gelesen.

01:17:08.230 --> 01:17:11.450
Ja, offenbar, ja. Und ich habe mir aber die Links

01:17:11.450 --> 01:17:13.350
rausgeklickt. Und einer, der mir

01:17:13.350 --> 01:17:15.030
ins Auge gestochen ist, war eben Dramatic.

01:17:15.030 --> 01:17:17.490
Was auch so ein Queuing-System

01:17:17.490 --> 01:17:19.250
ist, was aber ein bisschen

01:17:19.250 --> 01:17:21.250
eine pythonischere Syntax hat

01:17:21.250 --> 01:17:22.550
als Celery jetzt zum Beispiel.

01:17:22.550 --> 01:17:25.230
Und das sah auf den ersten Blick

01:17:25.230 --> 01:17:27.110
sehr gut aus und ich freue mich da drauf,

01:17:27.110 --> 01:17:28.850
das irgendwann mal

01:17:28.850 --> 01:17:29.930
einsetzen zu können.

01:17:29.930 --> 01:17:32.830
Ja, stimmt. Habe ich mir auch angeguckt. Das

01:17:32.830 --> 01:17:34.950
fand ich tatsächlich nett. Ich hatte noch keine

01:17:34.950 --> 01:17:37.110
Zeit und habe mir gedacht, wenn ich jetzt eh noch bis April

01:17:37.110 --> 01:17:38.970
warten darf, bis Django Background-Tasks

01:17:38.970 --> 01:17:40.830
rauskommt, dann spare ich mir einfach.

01:17:40.830 --> 01:17:42.550
Du kannst es auch jetzt schon verwenden.

01:17:42.550 --> 01:17:44.970
Ich meine, es ist noch nicht wirklich dafür gedacht, dass man

01:17:44.970 --> 01:17:46.950
es jetzt verwendet, aber

01:17:46.950 --> 01:17:48.830
Django-Tasks ist ja sozusagen,

01:17:48.830 --> 01:17:50.830
kannst du einfach installieren und dann verwenden.

01:17:50.830 --> 01:17:51.250
Geht.

01:17:51.250 --> 01:17:52.710
Ja.

01:17:52.710 --> 01:17:52.810
Ja.

01:17:52.810 --> 01:17:55.530
Warum eigentlich nicht?

01:17:57.110 --> 01:17:58.930
Kann vielleicht noch zu wenig, aber

01:17:58.930 --> 01:18:01.550
ja. Also, ja.

01:18:01.550 --> 01:18:04.950
Also ist auf jeden Fall eine gute Idee, dass

01:18:04.950 --> 01:18:07.450
wenn man das noch nicht gemacht hat, einfach mal das

01:18:07.450 --> 01:18:09.070
auszuprobieren, weil

01:18:09.070 --> 01:18:10.730
dann muss man

01:18:10.730 --> 01:18:12.750
nichts mehr umstellen, wenn es dann irgendwann

01:18:12.750 --> 01:18:15.330
dazu kommt. Ja, also es gibt so ein paar Module. Wie heißt das?

01:18:15.330 --> 01:18:16.590
Django Background-Tasks tatsächlich?

01:18:16.590 --> 01:18:18.970
Django-Tasks heißt das Paket.

01:18:18.970 --> 01:18:20.770
Genau, weil das habe ich gerade Background-Tasks gesagt, weil das ist

01:18:20.770 --> 01:18:22.530
ein fürchterliches Modul.

01:18:22.530 --> 01:18:24.790
Und Django-Tasks ist tatsächlich

01:18:24.790 --> 01:18:26.370
gut im Vergleich dazu.

01:18:26.770 --> 01:18:28.950
Weil Django Background-Tasks gibt es auch und das wird man schwer

01:18:28.950 --> 01:18:30.770
wieder loslegen. Ja, ich verlinke das dann, aber

01:18:30.770 --> 01:18:32.350
es ist genau, es ist...

01:18:32.350 --> 01:18:34.810
Es gibt mehrere Module, die ähnlich benannt sind, die

01:18:34.810 --> 01:18:36.790
alle versuchen, was ähnliches zu tun oder

01:18:36.790 --> 01:18:38.770
mal so oder so naiv

01:18:38.770 --> 01:18:40.590
implementiert sind und dann relativ anstrengend wieder

01:18:40.590 --> 01:18:42.890
zu enden. Ja, wie auch immer. Also Django-Tasks

01:18:42.890 --> 01:18:44.270
ist, glaube ich, das, was wir

01:18:44.270 --> 01:18:46.130
nehmen wollen. Genau.

01:18:46.130 --> 01:18:47.630
Ja, was...

01:18:47.630 --> 01:18:50.810
Dann packe ich auch noch mal was. Was ich jetzt...

01:18:50.810 --> 01:18:51.870
Ich habe ein... Ich weiß nicht.

01:18:51.870 --> 01:18:54.430
Ist auch etwas

01:18:54.430 --> 01:18:56.350
Spezielleres, was jetzt gar nicht so viel mit Python...

01:18:56.770 --> 01:18:58.250
Du warst einfach nur auf Shopping-Tour.

01:18:58.250 --> 01:19:01.170
Ja, aber ich finde

01:19:01.170 --> 01:19:02.130
es ganz interessant, weil

01:19:02.130 --> 01:19:04.550
ich habe ganz lange jetzt

01:19:04.550 --> 01:19:09.450
so Dinge verwendet, wie... Also ich habe auch schon mal...

01:19:09.450 --> 01:19:11.050
Also ich mache mal so...

01:19:11.050 --> 01:19:12.490
Du hast doch erst Geburtstag, Jochen.

01:19:12.490 --> 01:19:14.910
Ja, ja, aber ich brauche es ja

01:19:14.910 --> 01:19:15.630
für was anderes.

01:19:15.630 --> 01:19:18.910
Ich habe auch tatsächlich irgendwie

01:19:18.910 --> 01:19:20.650
mal vor, mal wieder... Also ich weiß nicht, ich schaffe

01:19:20.650 --> 01:19:22.210
irgendwie... Ich wollte mal Videos machen.

01:19:22.210 --> 01:19:24.510
Mehr wieder. Und dann

01:19:24.510 --> 01:19:26.630
da brauche ich dann natürlich auch entsprechendes Equipment,

01:19:26.630 --> 01:19:28.570
dafür. Und... Soll ich jetzt demnächst

01:19:28.570 --> 01:19:29.850
mal meine Euro-Recksammlung picken?

01:19:29.850 --> 01:19:32.330
Ja, ja, mach das. Finde es gut.

01:19:32.330 --> 01:19:34.730
Ja, also

01:19:34.730 --> 01:19:36.450
wie kriegt man eigentlich quasi Bilder

01:19:36.450 --> 01:19:38.310
von der Kamera irgendwie auf den Rechner?

01:19:38.310 --> 01:19:40.730
Und ich habe auch schon sowas wie Lightroom verwendet

01:19:40.730 --> 01:19:42.450
oder so früher mal. Und dann irgendwann

01:19:42.450 --> 01:19:44.430
dachte ich mir, ach, das brauche ich alles nicht mehr. Und dann

01:19:44.430 --> 01:19:46.290
habe ich irgendwie teilweise

01:19:46.290 --> 01:19:48.450
auch eine Zeit lang sogar Apple Fotos

01:19:48.450 --> 01:19:50.510
verwendet und fand das ganz okay, weil ich muss

01:19:50.510 --> 01:19:51.590
ja nicht viel machen. Und das hat geklappt.

01:19:51.590 --> 01:19:54.110
Und jetzt geht das aber nicht mehr, weil

01:19:54.110 --> 01:19:55.950
die

01:19:55.950 --> 01:19:58.010
RAW-Files, die aus der Kamera rausfallen,

01:19:58.010 --> 01:19:59.930
die mag Apple Fotos nicht mehr.

01:19:59.930 --> 01:20:02.530
Und... Ich habe meine Kamera gekauft.

01:20:02.530 --> 01:20:04.430
Ja. Und

01:20:04.430 --> 01:20:06.210
da gibt es aber

01:20:06.210 --> 01:20:08.610
dann vom Hersteller, von Nikon

01:20:08.610 --> 01:20:10.190
gibt es halt Nikon NX Studio.

01:20:10.190 --> 01:20:12.150
Und die kann das... Die Software

01:20:12.150 --> 01:20:14.010
kann dann halt tatsächlich das RAW-Format lesen.

01:20:14.010 --> 01:20:16.210
Und das Coole ist, und das wusste ich gar nicht, dass das geht,

01:20:16.210 --> 01:20:17.090
das

01:20:17.090 --> 01:20:20.150
versteht das so gut, dass es

01:20:20.150 --> 01:20:21.690
halt irgendwie auch die

01:20:21.690 --> 01:20:23.090
die

01:20:23.090 --> 01:20:25.810
also quasi Profile für

01:20:25.810 --> 01:20:28.030
alle möglichen Dinge aus der Kamera damit drin hat.

01:20:28.030 --> 01:20:29.910
Das heißt, wenn du das halt jetzt in der Kamera schon so

01:20:29.910 --> 01:20:31.990
eingestellt hast, dann kriegst du das halt automatisch

01:20:31.990 --> 01:20:33.910
mit rein oder sowas, was bei anderen, bei

01:20:33.910 --> 01:20:35.410
Lightroom oder so eben nicht kriegst. Und

01:20:35.410 --> 01:20:37.950
du kannst auch dann dir deine eigenen Profile

01:20:37.950 --> 01:20:39.070
zusammenstellen und wieder auf die Kamera

01:20:39.070 --> 01:20:42.010
speichern. Und dann kannst

01:20:42.010 --> 01:20:44.010
du halt Bilder machen, die genauso sind, wie du

01:20:44.010 --> 01:20:45.210
das halt

01:20:45.210 --> 01:20:47.630
wie dein Look halt aussehen soll und so.

01:20:47.630 --> 01:20:49.730
Das heißt, du kannst den vorher vorprogrammieren.

01:20:49.730 --> 01:20:51.470
Ja, ja. Also das ist wirklich...

01:20:51.470 --> 01:20:53.670
Man kann damit halt Dinge machen, die sonst nicht so richtig gehen.

01:20:53.670 --> 01:20:55.390
Das fand ich ganz nett. Und also,

01:20:55.750 --> 01:20:57.690
viele Leute schwärmen da auch von, dass

01:20:57.690 --> 01:20:59.730
das halt irgendwie mit den Farben richtig umgeht und solche

01:20:59.730 --> 01:21:01.490
Sachen, was halt immer so ein Problem ist bei Fotos.

01:21:01.490 --> 01:21:03.630
Und das ist alles richtig und das ist

01:21:03.630 --> 01:21:05.470
wirklich faszinierend. Das kann mehr, als man so erwartet. Auf der

01:21:05.470 --> 01:21:07.810
anderen Seite ist es halt unfassbar schlecht programmiert.

01:21:07.810 --> 01:21:09.550
Das ist unglaublich.

01:21:09.550 --> 01:21:11.590
Also einmal ist es ultra langsam und dann

01:21:11.590 --> 01:21:13.670
ist... Also man kann es

01:21:13.670 --> 01:21:15.410
halt nur so ein paar Minuten lang verwenden und dann

01:21:15.410 --> 01:21:17.590
verbraucht... Das klingt als hättest du noch ein neues Hobby. Du hast ja

01:21:17.590 --> 01:21:19.790
gerade schon Computerspiele in Rust programmiert.

01:21:19.790 --> 01:21:21.710
Ja, ja. Vielleicht zu viel Zeit.

01:21:21.710 --> 01:21:23.450
Ich weiß nicht genau. Aber

01:21:23.450 --> 01:21:25.490
also das leckt halt

01:21:25.690 --> 01:21:27.530
unglaublich, was Speicher angeht.

01:21:27.530 --> 01:21:29.450
Und das verbraucht halt irgendwie innerhalb von...

01:21:29.450 --> 01:21:31.290
So nach einer halben Stunde sind die 32 GB weg.

01:21:31.290 --> 01:21:33.330
Und dann muss man es neu starten. Was natürlich irgendwie

01:21:33.330 --> 01:21:34.970
echt totaler Quatsch ist. Aber...

01:21:34.970 --> 01:21:36.990
Hast du nicht genug Speicher, oder musst du neu starten?

01:21:36.990 --> 01:21:39.190
Nee, das ist halt alles...

01:21:39.190 --> 01:21:40.590
Wieso hast du nur so wenig Speicher, Jochen?

01:21:40.590 --> 01:21:43.410
Ich bin nicht nur

01:21:43.410 --> 01:21:45.570
GPU-Pur, ich bin auch RAM-Pur.

01:21:45.570 --> 01:21:48.070
Ja, nur 32 GB.

01:21:48.070 --> 01:21:49.790
Ja, ja, ja. Schon ziemlich lächerlich.

01:21:49.790 --> 01:21:51.350
Ja, muss ich auch sagen. Stimmt.

01:21:51.350 --> 01:21:53.390
Ja. Aber, ja, genau.

01:21:53.390 --> 01:21:55.630
Also da kann man nicht genug... Kann man irgendwie

01:21:55.630 --> 01:21:57.250
mit dem RAM-Kaufen nicht hinterherkommen, wenn man halt

01:21:57.250 --> 01:21:58.870
Software hat, die einfach irgendwie das

01:21:58.870 --> 01:22:01.650
alles wegchrisst. Einfach so.

01:22:01.650 --> 01:22:02.630
Ohne Grund. Ja.

01:22:02.630 --> 01:22:05.530
Jedenfalls, genau. Also aber wenn man das sich lange

01:22:05.530 --> 01:22:07.430
nicht angeguckt hat, weil man immer dachte, ah, das ist alles

01:22:07.430 --> 01:22:09.570
furchtbar. Vielleicht nochmal hingucken. Ist ganz interessant,

01:22:09.570 --> 01:22:11.330
was da so passiert. Also ich meine,

01:22:11.330 --> 01:22:13.270
ist auch so ein bisschen ärgerlich, aber auf der anderen Seite auch

01:22:13.270 --> 01:22:15.070
faszinierend, was da alles so geht.

01:22:15.070 --> 01:22:16.890
Ja. Genau.

01:22:16.890 --> 01:22:17.610
Tja.

01:22:17.610 --> 01:22:21.430
Ja, vielleicht muss ich doch... Das war jetzt aber schon

01:22:21.430 --> 01:22:23.790
ein sehr spezieller Pick, Jochen. Ja, war sehr speziell.

01:22:23.790 --> 01:22:25.570
Nochmal, was du bei Fox hat oder so

01:22:25.570 --> 01:22:27.310
was machen, wenn wir hier die ganze Zeit nur so

01:22:27.310 --> 01:22:29.370
Mediensachen tun,

01:22:29.370 --> 01:22:30.250
wie mit den Bildern.

01:22:30.250 --> 01:22:33.450
Wir sind ja in so einem Medium

01:22:33.450 --> 01:22:34.970
Dings hier auch, ne? Ja.

01:22:34.970 --> 01:22:37.550
So Musik,

01:22:37.550 --> 01:22:39.250
ja, die Musik, die ich mache, die finde ich meistens

01:22:39.250 --> 01:22:40.130
sowieso abartig.

01:22:40.130 --> 01:22:43.310
Ja, ich glaube, dann sind wir

01:22:43.310 --> 01:22:45.130
für diese Episode tatsächlich

01:22:45.130 --> 01:22:47.030
ausnahmsweise mal früh fertig.

01:22:47.030 --> 01:22:49.390
Ich habe übrigens zwischendurch Kritik bekommen

01:22:49.390 --> 01:22:50.930
auf die Peißen von Leuten, die den Podcast hören.

01:22:50.930 --> 01:22:53.610
Es wäre viel zu lang. Es wäre total nervig.

01:22:53.610 --> 01:22:55.510
Man könnte es gar nicht mal zwischendurch

01:22:55.510 --> 01:22:57.170
durchhören, sondern müsste sich immer so viel Zeit vernehmen.

01:22:57.170 --> 01:22:59.210
Man kommt da gar nicht durch. Man hört sich nie zu Ende.

01:22:59.210 --> 01:23:01.410
Ja, da müssen wir mal ein bisschen... Also alles, was

01:23:01.410 --> 01:23:03.050
wir an weitere Kritikanregungen fragen

01:23:03.050 --> 01:23:05.410
und so weiter, hallo at peißenpodcast.de

01:23:05.410 --> 01:23:09.250
Bleibt uns gewogen, hört uns weiter. Danke, Johannes,

01:23:09.250 --> 01:23:11.290
dass du wieder da warst. Das nächste Mal gerne

01:23:11.290 --> 01:23:13.410
wieder vor Ort. Du weißt, das war eine...

01:23:13.410 --> 01:23:15.510
Ich komme jedes Mal gerne vorbei,

01:23:15.510 --> 01:23:17.430
wenn ich da bin. Ja, wir freuen

01:23:17.430 --> 01:23:19.430
uns wieder drauf. Ja, danke, Jochen

01:23:19.430 --> 01:23:20.970
und hört uns bald wieder.

01:23:20.970 --> 01:23:23.030
Bis dann. Bis dann. Tschüss.

01:23:23.030 --> 01:23:23.370
Ciao, ciao.
