WEBVTT

00:00:00.000 --> 00:00:22.300
Ja, hallo liebe Hörerinnen und Hörer, herzlich willkommen beim Python-Podcast, heute ist die 31. Episode, wir machen heute Visual Effects und Python, also ein bisschen aus der Filmindustrie und wir haben natürlich neben dem Jochen, hallo Jochen, und mir den Dominik, einen wunderbaren Gast dabei, den Fabian, und ich finde, er kann sich selber vorstellen, er macht nämlich tolle Sachen, du musst erstmal erklären, was ist dein Job und wer bist du und was machst du denn?

00:00:22.800 --> 00:00:46.740
Ja, hallo, also ich bin Fabian, ich arbeite als Pipeline-Developer oder Pipeline-TD in der Visual-Effects-Branche und genau, ich programmiere quasi Arbeitsabläufe im Hintergrund, weil die Datenmengen und das, was da passiert auf dem Bildschirm, da muss halt eine ganze Menge im Hintergrund auch geregelt werden.

00:00:47.140 --> 00:00:47.860
Also alles in Python?

00:00:49.920 --> 00:00:50.760
Größtenteils schon.

00:00:50.760 --> 00:00:58.180
Und das, was du da machst, das ist irgendwie, man guckt einen Film und dann explodiert irgendwas und die Art und Weise, wie das explodiert, das baust du, oder?

00:00:59.460 --> 00:01:24.360
Das macht quasi der Artist, der hat ein spezielles Programm, dass das kann. Ich bin aber quasi noch eine Stufe davor. Ich regele quasi, dass dieser Artist sich nicht mehr darum kümmern muss, wo er Sachen abspeichern muss, sondern quasi einfach nur sagen muss, okay, ich möchte an Haus XY arbeiten und das in die Luft jagen.

00:01:25.080 --> 00:01:26.580
mach mir mal eine Datei auf.

00:01:27.660 --> 00:01:31.140
Und das ist quasi mein Job, den ich da im Hintergrund mache,

00:01:31.320 --> 00:01:35.160
dass die das alles nicht mehr nachdenken müssen,

00:01:35.220 --> 00:01:38.420
wo sie Sachen abspeichern, wo sie Dateien hinkommen.

00:01:40.700 --> 00:01:43.120
Also diese ganze Geschichte in der Filmindustrie,

00:01:43.240 --> 00:01:45.120
die kann man tatsächlich also auch mit Python machen.

00:01:45.560 --> 00:01:47.140
Und darüber werden wir heute euch ein bisschen erzählen.

00:01:48.060 --> 00:01:49.360
Schön, dass du da bist, Fabian.

00:01:50.200 --> 00:01:51.100
Ja, danke.

00:01:51.100 --> 00:01:52.900
Vielleicht fangen wir doch mal mit ein bisschen Struktur an.

00:01:52.900 --> 00:01:54.740
Ihr wisst, wir vermissen das immer ein bisschen selber.

00:01:55.080 --> 00:01:56.960
Es gibt ein bisschen News, glaube ich.

00:01:57.560 --> 00:01:58.420
Ja, was haben wir denn da so?

00:01:58.580 --> 00:02:00.900
Wir haben wirklich viele

00:02:00.900 --> 00:02:02.840
Neuigkeiten, aber

00:02:02.840 --> 00:02:05.060
also ein Ding, was mich so ein bisschen

00:02:05.060 --> 00:02:06.820
freut, oder ach nee, das hebe ich mir auf.

00:02:06.920 --> 00:02:08.800
Das hebe ich mir auf für was anderes. Für die

00:02:08.800 --> 00:02:09.920
Pigs später. Genau.

00:02:10.860 --> 00:02:12.840
Komm, jetzt musst du spoilern, weil es gibt Leute, die hören

00:02:12.840 --> 00:02:14.940
halt lustig. Das hat was mit der Fischshelle zu tun.

00:02:15.160 --> 00:02:16.780
Das reicht. Mit was hat das zu tun?

00:02:17.040 --> 00:02:18.700
Mit der Fischshelle, die kennst du auch. Oh ja,

00:02:18.760 --> 00:02:20.740
natürlich kenne ich die lustigste gerne. Ja, und

00:02:20.740 --> 00:02:22.880
ansonsten ist halt

00:02:22.880 --> 00:02:24.000
noch irgendwie

00:02:24.000 --> 00:02:26.280
Django 3.2 ist released worden.

00:02:26.400 --> 00:02:26.680
Oh ja.

00:02:28.400 --> 00:02:29.600
Habt ihr schon alle in Produktion?

00:02:30.540 --> 00:02:32.200
Relativ einfach ging der Umstieg

00:02:32.200 --> 00:02:33.840
ohne Probleme. Ja, also bei mir war das

00:02:33.840 --> 00:02:35.660
mittler, ich glaube, das war echt das

00:02:35.660 --> 00:02:38.320
problemloseste Django-Upgrade,

00:02:38.400 --> 00:02:40.080
das ich bisher so hatte. Man kann sich jetzt

00:02:40.080 --> 00:02:41.360
ein neues Setting gewöhnen, die da

00:02:41.360 --> 00:02:44.540
die Standard-Key

00:02:44.540 --> 00:02:46.460
oder Primary-Key-Variante

00:02:46.460 --> 00:02:47.880
ist, die man gerne für seine ganzen Projekte hätte.

00:02:47.880 --> 00:02:49.360
Ja, das muss man jetzt halt

00:02:49.360 --> 00:02:51.360
konfigurieren, sozusagen.

00:02:52.000 --> 00:02:53.080
Sonst kriegt man Warnungen.

00:02:53.760 --> 00:02:55.520
Genau, das war alles und dann

00:02:55.520 --> 00:02:57.660
funktioniert alles wie vorher auch und er nimmt sogar die alten

00:02:57.660 --> 00:02:59.640
Keys und behält die, macht sie also nicht weg

00:02:59.640 --> 00:03:01.540
und nimmt also nur die neuen Tabellen, die man einbaut.

00:03:02.320 --> 00:03:03.720
Also es passiert nichts Schlimmes, wenn man

00:03:03.720 --> 00:03:05.640
jetzt irgendwie upgradet, nicht, dass

00:03:05.640 --> 00:03:07.760
dann plötzlich alle Primary Keys

00:03:07.760 --> 00:03:09.100
doppelt so groß sind. Wir sind mittlerweile bei 3.9,

00:03:09.400 --> 00:03:11.540
4 oder so und ich warte immer noch auf 3.10.

00:03:12.100 --> 00:03:13.520
Ihr wisst warum. Hier kommt ja jetzt

00:03:13.520 --> 00:03:14.860
demnächst auch bald. Ja, genau.

00:03:15.240 --> 00:03:17.680
Ich hätte auch noch ein paar News. Einfach mal

00:03:17.680 --> 00:03:19.860
aus meiner Branche. Autodesk

00:03:19.860 --> 00:03:21.120
Maya ist jetzt auf

00:03:21.120 --> 00:03:22.500
Version 2022

00:03:22.500 --> 00:03:24.180
hochgestuft worden.

00:03:24.180 --> 00:03:26.580
Das Besondere daran ist,

00:03:27.080 --> 00:03:28.880
wir sind endlich auf Python 3.

00:03:29.540 --> 00:03:30.420
Oh, wow.

00:03:32.160 --> 00:03:32.440
Ja.

00:03:33.800 --> 00:03:35.240
Blast from the past.

00:03:36.060 --> 00:03:36.860
Ihr hört,

00:03:37.200 --> 00:03:38.980
die Visual Effects-Industrie ist anscheinend

00:03:38.980 --> 00:03:40.780
sehr weit vorne, was Software

00:03:40.780 --> 00:03:42.560
angeht. Woran das wohl liegt,

00:03:42.680 --> 00:03:44.740
ich habe gehört, viele arbeiten dort tatsächlich mit

00:03:44.740 --> 00:03:46.540
Windows und die Interpreter sind alle

00:03:46.540 --> 00:03:48.040
eingebaut in die Programme.

00:03:48.860 --> 00:03:49.640
Ja, die sind

00:03:49.640 --> 00:03:52.880
fast durchgängig allen Programmen

00:03:52.880 --> 00:03:54.860
eingebaut, was natürlich

00:03:54.860 --> 00:03:56.540
das Upgraden zwischen den Python-Versionen

00:03:56.540 --> 00:03:58.360
relativ schwierig macht, weil

00:03:58.360 --> 00:04:00.820
naja, die Programme sind eher

00:04:00.820 --> 00:04:02.600
konservativ eingestellt und sagen, okay,

00:04:02.780 --> 00:04:04.780
bevor wir den Artists da ihre

00:04:04.780 --> 00:04:06.880
Skripte kaputt machen, fassen

00:04:06.880 --> 00:04:07.860
wir das mal lieber nicht an.

00:04:09.060 --> 00:04:10.800
Und naja, zwölf Jahre

00:04:10.800 --> 00:04:11.280
später

00:04:11.280 --> 00:04:15.340
wird es jetzt so langsam auch security-technisch

00:04:15.340 --> 00:04:17.220
und so kritisch,

00:04:17.280 --> 00:04:19.260
dass man Python 2 eigentlich nicht mehr so richtig

00:04:19.260 --> 00:04:20.680
benutzen sollte.

00:04:22.980 --> 00:04:23.620
Und ja,

00:04:23.740 --> 00:04:25.080
jetzt ziehen wir langsam nach.

00:04:26.840 --> 00:04:27.640
Ich würde sagen,

00:04:27.740 --> 00:04:29.260
gut drei Viertel aller

00:04:29.260 --> 00:04:31.820
Programme, die so gängig sind in der Industrie,

00:04:31.940 --> 00:04:32.680
haben es inzwischen

00:04:32.680 --> 00:04:35.860
einigermaßen geschafft auf den Sprung.

00:04:36.080 --> 00:04:37.420
Aber es gibt immer noch so ein paar

00:04:37.420 --> 00:04:39.360
Nachzügler. Vielleicht für alle ganz

00:04:39.360 --> 00:04:40.880
unbedeckt. Und was ist denn Maya?

00:04:42.080 --> 00:04:43.680
Maya ist ein

00:04:43.680 --> 00:04:45.500
sehr geläufiges

00:04:45.500 --> 00:04:47.540
3D-Programm aus

00:04:47.540 --> 00:04:49.540
der Branche. Also man heißt, man kann

00:04:49.540 --> 00:04:50.920
Modelle, Objekte

00:04:50.920 --> 00:04:53.260
rendern, generieren, darstellen,

00:04:53.420 --> 00:04:54.660
bauen. Genau.

00:04:55.920 --> 00:04:57.540
All das im Grunde genommen.

00:04:57.900 --> 00:04:58.460
Sprich, du willst

00:04:58.460 --> 00:05:00.980
einen Charakter oder ein Haus

00:05:00.980 --> 00:05:03.500
irgendwo in eine Szene stellen,

00:05:03.580 --> 00:05:05.360
dann kannst du es da bauen, hübsch

00:05:05.360 --> 00:05:06.560
ausrendern und

00:05:06.560 --> 00:05:08.480
ja,

00:05:09.460 --> 00:05:11.380
auch durchprogrammieren mit Python,

00:05:11.380 --> 00:05:13.420
wenn du möchtest. Das heißt, ich kann

00:05:13.420 --> 00:05:15.400
dann Achsen skalieren, drehen und

00:05:15.400 --> 00:05:17.380
Bewegungsabläufe skripten

00:05:17.380 --> 00:05:19.460
oder was macht man da mit Python?

00:05:20.440 --> 00:05:25.620
Genau, die Python-API in Maya ist eigentlich sehr, sehr mächtig.

00:05:25.760 --> 00:05:28.940
Du kannst im Grunde genommen wirklich alles durchskripten,

00:05:29.000 --> 00:05:29.520
wenn du möchtest.

00:05:29.600 --> 00:05:33.160
Alles, was du per Keyboard und Maus eingeben kannst,

00:05:33.240 --> 00:05:35.060
kannst du genauso gut in Python einskripten.

00:05:35.940 --> 00:05:37.780
Also wenn du wild genug bist,

00:05:37.900 --> 00:05:40.720
kannst du wirklich ein Python-Programm schreiben von A bis Z

00:05:40.720 --> 00:05:41.820
und am Ende hast du einen Baum.

00:05:42.620 --> 00:05:43.300
Kein Problem.

00:05:44.420 --> 00:05:44.960
Das wäre nett.

00:05:44.960 --> 00:05:46.100
also da hätte man verschiedene Objekte

00:05:46.100 --> 00:05:48.840
und könnte dann eine kleine Bibliothek bauen mit

00:05:48.840 --> 00:05:50.840
verschiedenen Bäumen, hat man einen ganzen Wald und dann

00:05:50.840 --> 00:05:52.520
in dem Wald, da muss natürlich noch ein Schloss und dann noch

00:05:52.520 --> 00:05:53.500
ein Schloss mit einem Drachen.

00:05:54.940 --> 00:05:57.060
Ja, aber

00:05:57.060 --> 00:05:57.940
schick, weißt du, warum,

00:05:58.580 --> 00:06:00.940
eigentlich sind wir da schon fast im Thema, wir können eigentlich

00:06:00.940 --> 00:06:02.920
auch, können wir auch

00:06:02.920 --> 00:06:04.880
ein paar, weißt du

00:06:04.880 --> 00:06:06.640
oder das kannst du wahrscheinlich

00:06:06.640 --> 00:06:08.860
ja sagen,

00:06:08.980 --> 00:06:10.840
woran das liegt, warum hat man sich denn da

00:06:10.840 --> 00:06:11.780
so auf Python

00:06:11.780 --> 00:06:13.260
quasi

00:06:13.260 --> 00:06:15.500
standardisiert, weil

00:06:15.500 --> 00:06:17.800
ich kenne das jetzt aus anderen Bereichen,

00:06:17.940 --> 00:06:19.760
da es wird häufig zum, damit man halt

00:06:19.760 --> 00:06:20.180
irgendwie

00:06:20.180 --> 00:06:23.660
so Applikationen skripten kann, also ich kenne das

00:06:23.660 --> 00:06:25.940
zum Beispiel hier von der digitalen

00:06:25.940 --> 00:06:27.740
Digital Audio Workstation,

00:06:27.800 --> 00:06:28.820
die ich hier verwende, das ist Reaper,

00:06:30.160 --> 00:06:31.700
da ist das Lua oder halt auch von

00:06:31.700 --> 00:06:32.960
diversen anderen, so Money Money,

00:06:33.400 --> 00:06:35.860
Online Banking ist auch Lua, also ganz oft ist es Lua,

00:06:35.860 --> 00:06:37.600
wenn man das halt super einfach integrieren kann in C,

00:06:39.540 --> 00:06:41.660
aber Python ist eigentlich gar nicht so super

00:06:41.660 --> 00:06:42.560
einfach zu integrieren.

00:06:43.700 --> 00:06:45.380
Warum wird da Python genommen?

00:06:47.280 --> 00:06:47.900
Ich glaube,

00:06:47.960 --> 00:06:49.720
das ist auch so ein bisschen historisch bedingt.

00:06:50.080 --> 00:06:51.500
Die ersten Programme und

00:06:51.500 --> 00:06:53.500
Anbindungen haben einfach mit Python

00:06:53.500 --> 00:06:55.540
angefangen und nach und nach hat sich das quasi

00:06:55.540 --> 00:06:57.520
etabliert. Es gibt auch genug

00:06:57.520 --> 00:06:59.440
Beispiele von, also Lua gibt es

00:06:59.440 --> 00:07:01.340
zum Teil, habe ich auch schon gesehen.

00:07:03.180 --> 00:07:03.500
Aber

00:07:03.500 --> 00:07:05.460
viele Programme, unter anderem Maya, haben

00:07:05.460 --> 00:07:07.700
zum Beispiel auch einfach ihre Skriptsprache

00:07:07.700 --> 00:07:09.600
selbst erfunden. In Maya

00:07:09.600 --> 00:07:11.800
gibt es Mail, die Maya Embedded

00:07:11.800 --> 00:07:12.300
Language.

00:07:14.160 --> 00:07:15.560
Erinnert sehr

00:07:15.560 --> 00:07:17.440
stark an Bash.

00:07:18.440 --> 00:07:18.660
Oh.

00:07:21.340 --> 00:07:21.980
Okay.

00:07:23.360 --> 00:07:25.540
Also wer Bash mag, hat da

00:07:25.540 --> 00:07:27.100
wahrscheinlich seine helle Freude dran.

00:07:28.740 --> 00:07:29.280
Und

00:07:29.280 --> 00:07:31.600
das Schöne an Python ist aber, dass

00:07:31.600 --> 00:07:33.500
man sehr

00:07:33.500 --> 00:07:35.540
gut eigentlich dynamisch Sachen

00:07:35.540 --> 00:07:36.880
rappen kann mit Python.

00:07:38.260 --> 00:07:40.400
Im Grunde genommen in Maya ist Python

00:07:40.400 --> 00:07:42.020
nichts anderes als ein großer Wrapper

00:07:42.020 --> 00:07:43.720
um Mel.

00:07:45.240 --> 00:07:45.720
Sprich.

00:07:46.320 --> 00:07:48.460
Okay, das heißt, du sprichst eigentlich direkt

00:07:48.460 --> 00:07:49.980
per Kommandoteile mit

00:07:49.980 --> 00:07:52.400
den verschiedenen Endpunkten dieses Programms

00:07:52.400 --> 00:07:52.680
und

00:07:52.680 --> 00:07:56.900
Kommandoteile ist hier übertrieben.

00:07:57.040 --> 00:07:58.700
Also du befindest dich im Programm selbst,

00:07:58.900 --> 00:08:00.440
aber Mel

00:08:00.440 --> 00:08:02.660
ist Bash ähnlich, ja. Also du

00:08:02.660 --> 00:08:04.420
arbeitest aber jetzt nicht auf der Kommandoteile.

00:08:04.580 --> 00:08:06.500
Das heißt, die API, das Interface des Programms, ist das irgendwie

00:08:06.500 --> 00:08:08.620
so, dass es halt Befehle entgegennimmt.

00:08:09.340 --> 00:08:10.560
Genau. Die man dann aber

00:08:10.560 --> 00:08:12.400
nicht eingeben möchte, sondern

00:08:12.400 --> 00:08:14.300
die man automatisiert über Python-Skripte.

00:08:15.600 --> 00:08:16.760
Also ich stelle mir das so vor,

00:08:17.020 --> 00:08:18.480
Menschen, die ganz viel so 3D-Sachen machen,

00:08:18.580 --> 00:08:20.080
die programmieren ellenlange

00:08:20.080 --> 00:08:22.500
Skripte, ganz viel Code untereinander,

00:08:22.640 --> 00:08:24.280
um Dinge zu automatisieren und

00:08:24.280 --> 00:08:26.440
schöne Figuren zu rendern

00:08:26.440 --> 00:08:27.960
oder Bäume, wo wir diese Welt

00:08:27.960 --> 00:08:30.380
eben drüber gesprochen hatten. Entspricht das

00:08:30.380 --> 00:08:32.240
der Realität oder wie sieht denn dein Arbeitstag

00:08:32.240 --> 00:08:32.980
dann damit aus?

00:08:34.140 --> 00:08:34.500
Das

00:08:34.500 --> 00:08:38.040
die Artists an sich

00:08:38.040 --> 00:08:39.700
die machen da eigentlich

00:08:39.700 --> 00:08:41.980
alle Arbeit

00:08:41.980 --> 00:08:43.540
nur über das User Interface

00:08:43.540 --> 00:08:45.760
relativ wenige Skripten, es gibt ein paar

00:08:45.760 --> 00:08:47.640
spezielle Jobs, da muss man ein bisschen

00:08:47.640 --> 00:08:49.580
mehr skripten, weil es dann schon aufwendiger wird

00:08:49.580 --> 00:08:51.640
aber mein

00:08:51.640 --> 00:08:52.960
Arbeitsablauf ist eigentlich

00:08:52.960 --> 00:08:55.520
eher im Hintergrund, sprich

00:08:55.520 --> 00:08:57.220
ich überlege mir, okay

00:08:57.220 --> 00:08:59.880
an meinem Projekt arbeiten 40 Leute

00:08:59.880 --> 00:09:01.460
die alle auf den gleichen

00:09:01.460 --> 00:09:03.420
Folder zugreifen

00:09:03.420 --> 00:09:04.600
auf meinem Server.

00:09:06.160 --> 00:09:07.680
Wie kriege ich es denn gebacken,

00:09:08.100 --> 00:09:09.840
dass die sich nicht gegenseitig

00:09:09.840 --> 00:09:11.420
in die Quere kommen oder sich

00:09:11.420 --> 00:09:13.360
Files überschreiben oder

00:09:13.360 --> 00:09:14.900
Sachen verloren gehen?

00:09:15.360 --> 00:09:17.100
Auf so einem Videoprojekt müssen ja ganz schön viele Daten

00:09:17.100 --> 00:09:17.960
aus dem Server liegen, oder?

00:09:18.600 --> 00:09:21.480
Genau, um so ein paar

00:09:21.480 --> 00:09:23.420
Eckdaten zu haben. Also für ein Projekt,

00:09:23.500 --> 00:09:25.500
was wir neulich erst abgeschlossen haben,

00:09:25.820 --> 00:09:27.520
was ihr auch auf Netflix gucken könnt übrigens,

00:09:28.240 --> 00:09:29.140
nennt sich

00:09:29.140 --> 00:09:30.020
Outside the Wire.

00:09:33.220 --> 00:09:34.580
Ist wirklich, also

00:09:34.580 --> 00:09:36.160
Visual Effects top,

00:09:36.640 --> 00:09:37.880
Story, naja.

00:09:41.480 --> 00:09:42.760
Aber da

00:09:42.760 --> 00:09:43.800
hatten wir im Endeffekt

00:09:43.800 --> 00:09:46.740
12 Millionen Dateien auf dem Server

00:09:46.740 --> 00:09:47.620
und

00:09:47.620 --> 00:09:49.720
das waren insgesamt

00:09:49.720 --> 00:09:53.040
220 Terabyte, glaube ich.

00:09:55.360 --> 00:09:56.540
Und naja,

00:09:56.660 --> 00:09:58.140
es ist halt eine Menge Holz.

00:09:58.140 --> 00:09:59.960
Ein bisschen größer als mein Heimcomputer.

00:10:01.660 --> 00:10:22.980
Das will man erstmal durchs Netzwerk schleifen und dann natürlich auch noch die Übersicht behalten, dass du weißt, okay, ja, diese Version fand ich schön, die nächste ist vielleicht nicht so toll oder, ja, dann muss man auch noch bedenken, okay, diese Artists, die arbeiten natürlich auch noch miteinander.

00:10:23.200 --> 00:10:41.840
Also der eine baut das Haus, der andere malt es an, der nächste lässt es explodieren. Dann musst du natürlich auch noch zusehen, okay, wie bekommst du denn die Daten von A nach B, dass jetzt nicht jeder erstmal Windows Explorer aufmacht, einen tippt, okay, wo ist denn mein Haus und wo finde ich denn das?

00:10:41.840 --> 00:10:44.000
sondern auch das ist alles durchgeskriptet

00:10:44.000 --> 00:10:45.860
und gestreamlined, dass du einfach

00:10:45.860 --> 00:10:47.840
nur sagst, okay, ich möchte von

00:10:47.840 --> 00:10:50.120
Haus, von meinem Haus

00:10:50.120 --> 00:10:52.260
ja, diese Außenwand

00:10:52.260 --> 00:10:53.980
in Version 6

00:10:53.980 --> 00:10:56.140
zack, reingeladen

00:10:56.140 --> 00:10:56.860
fertig

00:10:56.860 --> 00:10:59.820
Guckt man da irgendwie über so

00:10:59.820 --> 00:11:01.640
ein Editor drauf oder sowas oder ist da dann

00:11:01.640 --> 00:11:03.760
Maya-Interface oder habe ich so

00:11:03.760 --> 00:11:05.780
eine Sicht wie so ein CAD-Programm

00:11:05.780 --> 00:11:07.160
auf das ich dann schauen kann oder ist das so

00:11:07.160 --> 00:11:09.640
ein Studio-Umgebungsding

00:11:09.640 --> 00:11:11.140
oder? Das ist

00:11:11.140 --> 00:11:12.840
alles integriert.

00:11:13.920 --> 00:11:15.380
Neben Python hat sich noch ein anderer

00:11:15.380 --> 00:11:17.540
Standard relativ gut in der Branche etabliert

00:11:17.540 --> 00:11:19.240
und das ist PySite, beziehungsweise

00:11:19.240 --> 00:11:19.960
PyQt.

00:11:21.220 --> 00:11:23.280
Sprich, viele

00:11:23.280 --> 00:11:25.320
Programme unterstützen das, dass man

00:11:25.320 --> 00:11:27.560
mit dieser Bildbibliothek

00:11:27.560 --> 00:11:28.520
quasi arbeiten kann.

00:11:29.820 --> 00:11:31.500
Und das Schöne an der

00:11:31.500 --> 00:11:33.160
Sache ist, man kann somit auch

00:11:33.160 --> 00:11:35.040
User-Interfaces komplett durchskripten.

00:11:36.180 --> 00:11:37.100
Sprich, du kannst

00:11:37.100 --> 00:11:39.200
direkt sagen,

00:11:39.360 --> 00:11:40.380
okay, ich habe jetzt hier meinen

00:11:40.380 --> 00:11:43.700
Datei lauter, wie auch

00:11:43.700 --> 00:11:45.960
immer, programmiere das User-Interface

00:11:45.960 --> 00:11:47.520
dafür einmal durch und wenn ich den

00:11:47.520 --> 00:11:49.080
aufrufe in Maya

00:11:49.080 --> 00:11:51.280
oder in

00:11:51.280 --> 00:11:54.000
The Foundry Nuke,

00:11:54.380 --> 00:11:55.500
sieht er halt gleich aus.

00:11:55.700 --> 00:11:57.480
Füllt die gleichen Zwecke und da

00:11:57.480 --> 00:11:59.620
nur im Hintergrund arbeitet

00:11:59.620 --> 00:12:01.760
man halt vielleicht an verschiedenen Codestücken,

00:12:01.960 --> 00:12:03.760
weil eine Datei

00:12:03.760 --> 00:12:05.520
zu laden in Maya ist was anderes

00:12:05.520 --> 00:12:06.300
als in Nuke.

00:12:10.260 --> 00:12:14.940
Also auch wir benutzen quasi relativ gängige Bibliotheken.

00:12:15.080 --> 00:12:36.420
Vielleicht musst du uns da noch so ein bisschen einführen und so ein bisschen diese ganze Infrastruktur und das ganze Ökosystem so näher bringen, dass wir so ein bisschen diese Bausteine, die es da gibt, zusammensetzen können, weil wenn ich jetzt so zugehören, ich habe keine Ahnung von diesem Videothema, dann verstehe ich jetzt noch nicht genau, wie du diese einzelnen Belästigungen liest und wie das funktioniert.

00:12:38.040 --> 00:13:07.420
Okay, ähm, fangen, wie fangen wir da am besten an? Ähm, vielleicht so ein paar allgemeine Sachen. Sprich, dadurch, dass ja die Interpreter in den einzelnen Programmen eingebettet sind, ähm, muss man oder sollte man zumindest danach streben, dass man alles relativ gut gestreamlined hat mit verschiedenen Bibliotheken, die man auch in verschiedenen Sachen laden kann.

00:13:07.420 --> 00:13:13.720
Das heißt, du kannst in jeder einzelnen Interpreterschicht dieselbe Interface nutzen? Oder was meinst du mit Streamline?

00:13:14.240 --> 00:13:31.780
Genau. Man will ja quasi nicht fünfmal das gleiche Skripten, obwohl du das gleiche willst, sondern sagst, okay, ich baue mir ein User-Interface in PySite, baue das aber so, dass ich es wiederverwenden kann in anderen Programmen auch.

00:13:35.100 --> 00:13:44.840
Hier geht es quasi nur noch darum, dass du die Business-Logic im Hintergrund austauschst, dass die Funktionalität für den Anwender aber überall gleich ist.

00:13:45.220 --> 00:13:51.360
Das hat auch den Vorteil für jemanden, der die Programme benutzt, der hat immer das gleiche User-Erlebnis.

00:13:51.980 --> 00:14:02.500
Sprich, ob du ein File lädst oder ein File öffnest, ist eigentlich ganz egal, ob du jetzt ein 3D- oder ein 2D-Programm aufmachst.

00:14:02.500 --> 00:14:09.560
ja, also diese ganze

00:14:09.560 --> 00:14:12.060
Hierarchie, wie das alles aufgebaut

00:14:12.060 --> 00:14:13.940
ist mit den Bibliotheken, ist natürlich

00:14:13.940 --> 00:14:15.180
wahnsinnig komplex.

00:14:17.320 --> 00:14:17.760
Aber

00:14:17.760 --> 00:14:19.980
Was für Jobs gibt es denn

00:14:19.980 --> 00:14:21.440
in dem Bereich? Also wenn ich mich da

00:14:21.440 --> 00:14:23.760
in der Industrie wiederfinden möchte,

00:14:23.860 --> 00:14:25.840
welche Jobs gibt es denn, die Python machen?

00:14:32.080 --> 00:14:49.900
Da es so offen ist, kann es im Grunde genommen jeder benutzen, der möchte, weshalb auch eine Menge Code quasi am Markt ist, der weniger gut ist, hätte ich mal so gesagt. Aber es gibt zum Beispiel den Job des Riggers.

00:14:50.740 --> 00:14:58.680
Oh, ein Rigger, das ist ein Shadow-Punk, das ist ein Mensch, der seine Drohnen nach oben schickt und sie steigen lässt.

00:15:00.180 --> 00:15:07.380
Genau, das ist jemand, der quasi virtuelle Marionetten in Charaktere baut.

00:15:09.440 --> 00:15:14.360
Ah, okay. Also von innen werden quasi diese Dinge bewegt.

00:15:15.280 --> 00:15:21.580
Genau, weil wenn du einen Charakter modulierst, dann steht er zwar erstmal schön im Raum,

00:15:22.360 --> 00:15:26.280
aber dass er zum Beispiel seine Knie beugen kann oder seine Arme beugen kann,

00:15:26.280 --> 00:15:49.080
Das muss man dem Rechner ja erstmal verklickern, weil für den ist das nur ein Datenhaufen. Da muss man ja erstmal sagen, okay, das ist die Hand, das sind die Finger, die lasst sich so und so bewegen und damit am Ende auch eine schöne Animation, also ein Animator dann das animieren kann, muss das natürlich erstmal gebaut werden.

00:15:49.420 --> 00:16:03.720
Da das ein relativ technischer Job ist, ist da sehr viel mit Skripting eigentlich nur zu machen, weil so eine Marionette aufzubauen dauert einfach ewig, ewig lange.

00:16:03.720 --> 00:16:06.680
Ja, du musst ja die ganzen einzelnen Gelenke wahrscheinlich...

00:16:06.680 --> 00:16:16.020
Marionette bedeutet, dass halt so die Dinge miteinander verbunden werden. Das heißt, wenn man jetzt irgendwo den Arm hochzieht, dass dann andere Dinge mit hochgezogen werden oder so, sozusagen.

00:16:17.320 --> 00:16:25.480
Genau. Oder zum Beispiel, dass du Muskeln hast. Du beugst den Arm, dann geht dein Bizeps eben hoch raus.

00:16:26.760 --> 00:16:30.620
Jeder Körperstruktur kann man sich nicht richtig bücken, weil dann muss der ganze Körper, ja, verstehe.

00:16:31.660 --> 00:16:40.480
Genau. Da hängt eine Menge dran. Kleidung ist auch nochmal ein eigenes Thema für sich. Haare ist auch nochmal ein eigenes Thema für sich.

00:16:40.960 --> 00:16:50.200
Also sehr große Studios wie Pixar zum Beispiel haben wirklich nur Leute, die beschäftigen sich 24-7 nur mit Haaren.

00:16:51.900 --> 00:16:53.940
Oder nur mit Kleidung.

00:16:54.940 --> 00:16:57.460
Das klingt aber relativ spannend, das kann man für coole Sachen benutzen.

00:16:58.020 --> 00:17:02.600
Das klingt so, als wenn man einmal diese Logik und als Modell und als Skript irgendwie kompletieren würde,

00:17:02.940 --> 00:17:08.640
könnte man auch die ganzen externen Effekte, also sowas wie Wind und Licht und was sich da noch alles gibt,

00:17:08.640 --> 00:17:10.620
als Umwelteinflüsse dann auf dieses Rig

00:17:10.620 --> 00:17:12.680
oder so übertragen, dass man

00:17:12.680 --> 00:17:14.640
halt so ein bisschen, ja, also

00:17:14.640 --> 00:17:16.560
nicht so statisch im Raum rumsteht und

00:17:16.560 --> 00:17:18.540
vielleicht ein oder zwei geskriptete Bewegungen

00:17:18.540 --> 00:17:20.420
macht, sondern tatsächlich mit der Bewegung

00:17:20.420 --> 00:17:22.560
interagiert oder in die Bewegung so eingebettet

00:17:22.560 --> 00:17:24.420
wird. Also sozusagen, ja,

00:17:24.740 --> 00:17:26.820
das heißt, der Job von dem ist sozusagen

00:17:26.820 --> 00:17:28.640
vorzubestimmen,

00:17:29.300 --> 00:17:29.940
was sich alles

00:17:29.940 --> 00:17:32.440
noch mitändert, wenn sich irgendwas, wenn

00:17:32.440 --> 00:17:34.540
irgendwas bewegt wird und der Animator, der

00:17:34.540 --> 00:17:36.120
gibt dann quasi vor,

00:17:36.920 --> 00:17:38.260
wie die Bewegung aussehen

00:17:38.260 --> 00:17:40.020
Genau, wie weich das wird, die Bewegung

00:17:40.020 --> 00:17:40.820
innerhalb der Umgebung.

00:17:41.480 --> 00:17:43.240
Aber der kümmert sich dann nicht mehr darum, dass

00:17:43.240 --> 00:17:46.140
sich quasi, keine Ahnung,

00:17:47.440 --> 00:17:47.600
der

00:17:47.600 --> 00:17:49.880
die Kleidung mitbewegt, wenn sich der Arm

00:17:49.880 --> 00:17:52.000
bewegt oder so. Genau, der fängt nur die eigentliche Bewegung ein

00:17:52.000 --> 00:17:53.920
und das, was dann da rum passiert in der

00:17:53.920 --> 00:17:55.940
Umgebung, das müsste dann mit durch die Skripte passieren,

00:17:56.020 --> 00:17:57.900
oder? Weil das ist ja fast Physik. Also das ist ja

00:17:57.900 --> 00:17:59.540
das, was man durch Algorithmen irgendwie vielleicht

00:17:59.540 --> 00:18:01.880
Also das ist eigentlich noch

00:18:01.880 --> 00:18:03.900
mehrstufig. Im Grunde genommen hast du erst

00:18:03.900 --> 00:18:05.860
das Rig, dann hast du den Animator, der

00:18:05.860 --> 00:18:07.940
da eine Animation drauf macht. Da ist

00:18:07.940 --> 00:18:10.040
aber meistens noch relativ wenig

00:18:10.040 --> 00:18:11.900
Physik dabei. Und erst

00:18:11.900 --> 00:18:14.360
im nächsten Schritt gibt es dann quasi Simulationsschritte,

00:18:14.520 --> 00:18:15.540
wo du dann sagen kannst, okay,

00:18:16.300 --> 00:18:17.880
über meine Animationen

00:18:17.880 --> 00:18:19.540
habe ich dann nochmal ein bisschen Wind,

00:18:19.540 --> 00:18:21.780
die dann die Klamotten noch wehen lässt

00:18:21.780 --> 00:18:23.040
oder die Haare

00:18:23.040 --> 00:18:24.340
oder

00:18:24.340 --> 00:18:26.980
keine Ahnung,

00:18:27.460 --> 00:18:29.640
Feuerexplosionen, was immer du willst, dass der Arm

00:18:29.640 --> 00:18:30.960
abfällt, geht alles.

00:18:33.880 --> 00:18:35.160
Genau, weil gerade

00:18:35.160 --> 00:18:37.540
Physik-Simulationen sind

00:18:37.540 --> 00:18:39.080
wahnsinnig ressourcenfressend.

00:18:39.960 --> 00:18:41.120
Das heißt, du kannst

00:18:41.120 --> 00:18:43.800
wenig interaktiv arbeiten

00:18:43.800 --> 00:18:45.460
als Animator, wenn du die ganze Zeit

00:18:45.460 --> 00:18:47.220
dann auf Physik-Simulationen arbeiten

00:18:47.220 --> 00:18:48.860
im Hintergrund laufen hast.

00:18:49.020 --> 00:18:51.520
Also das tatsächlich aus technischer Restriktion noch?

00:18:52.520 --> 00:18:53.120
Ja,

00:18:53.600 --> 00:18:55.120
durchaus, ja. Es ist

00:18:55.120 --> 00:18:57.480
immer noch eine hohe Kunst,

00:18:58.100 --> 00:18:59.480
performante Rigs zu bauen.

00:19:00.260 --> 00:19:00.600
Weil

00:19:00.600 --> 00:19:03.380
die Animatoren, die wollen natürlich immer

00:19:03.380 --> 00:19:04.260
Echtzeit haben.

00:19:05.080 --> 00:19:07.520
Also 24 Frames die Sekunde,

00:19:07.540 --> 00:19:08.860
sollte schon sein, aber

00:19:08.860 --> 00:19:11.600
dadurch, dass die Programme halt

00:19:11.600 --> 00:19:13.440
so komplex sind, ist es unheimlich

00:19:13.440 --> 00:19:15.680
einfach, sehr langsame Rigs

00:19:15.680 --> 00:19:17.380
zu bauen. Und wenn du dann,

00:19:18.020 --> 00:19:19.500
ich meine, du musst ja, weiß man ja

00:19:19.500 --> 00:19:21.380
selbst, man sitzt vor einem Rechner

00:19:21.380 --> 00:19:23.120
und wenn irgendwas so im

00:19:23.120 --> 00:19:24.940
Sekundentakt vor sich hin ruckelt,

00:19:25.700 --> 00:19:27.180
ist das irgendwie kein schönes Arbeiten.

00:19:27.740 --> 00:19:29.360
Aber wenn es flüssig ist und man sich das

00:19:29.360 --> 00:19:31.020
angucken kann im Ganzen, dann

00:19:31.020 --> 00:19:33.600
hat man halt

00:19:33.600 --> 00:19:35.380
am Ende auch mehr Spaß. Ich meine,

00:19:36.000 --> 00:19:36.260
ja.

00:19:37.540 --> 00:19:39.140
Ja, klar

00:19:39.140 --> 00:19:42.740
Also es gibt

00:19:42.740 --> 00:19:45.320
hundert tolle Wege, wie man das

00:19:45.320 --> 00:19:47.080
verschnellern kann und verbessern kann

00:19:47.080 --> 00:19:49.620
und die Industrie ist natürlich auch immer vorne mit dabei

00:19:49.620 --> 00:19:51.160
da die neuesten Technologien

00:19:51.160 --> 00:19:52.460
einzubauen

00:19:52.460 --> 00:19:55.560
Ja, aber wir

00:19:55.560 --> 00:19:57.360
schleppen halt auch eine Menge Legacy-Stuff

00:19:57.360 --> 00:19:59.480
mit uns rum, wo viele Leute

00:19:59.480 --> 00:20:01.320
sich sehr lange dran gewöhnt haben

00:20:01.320 --> 00:20:03.520
und es ist auch

00:20:03.520 --> 00:20:05.060
schwierig, das loszuwerden

00:20:05.060 --> 00:20:07.500
Aber ich kann mir auch vorstellen, dass es einfach

00:20:07.500 --> 00:20:09.800
an den Release-Zyklen hängt.

00:20:09.900 --> 00:20:11.080
Ich habe jetzt keine Ahnung, wie oft

00:20:11.080 --> 00:20:13.620
Maya oder

00:20:13.620 --> 00:20:15.880
Houdini oder was auch immer da released wird

00:20:15.880 --> 00:20:17.280
oder ein neuer Release hat, aber wenn die

00:20:17.280 --> 00:20:19.540
relativ lang sind,

00:20:19.760 --> 00:20:21.740
dann ist ja klar, dass die nicht so aktuell sein

00:20:21.740 --> 00:20:23.720
können wie andere

00:20:23.720 --> 00:20:25.320
Software, die man jetzt, weiß ich nicht,

00:20:25.460 --> 00:20:27.560
irgendwelche Web-Applikationen, die man ständig deployt.

00:20:30.180 --> 00:20:31.640
Wobei man sagen muss, Houdini

00:20:31.640 --> 00:20:33.120
ist eine sehr

00:20:33.120 --> 00:20:35.280
tolle Ausnahme, die bieten

00:20:35.280 --> 00:20:37.220
Knightly Builds an. Was ist denn

00:20:37.220 --> 00:20:39.200
Houdini? Houdini

00:20:39.200 --> 00:20:41.680
ist eine der größten

00:20:41.680 --> 00:20:43.280
Effektsoftwaren,

00:20:44.200 --> 00:20:45.360
die man im Moment so haben kann.

00:20:45.500 --> 00:20:47.020
Sprich, damit machst du

00:20:47.020 --> 00:20:47.520
Feuer,

00:20:49.340 --> 00:20:50.980
lässt Häuser zusammenfallen.

00:20:52.520 --> 00:20:53.460
Es ist

00:20:53.460 --> 00:20:54.500
unheimlich

00:20:54.500 --> 00:20:55.500
modular

00:20:55.500 --> 00:20:59.220
und dadurch auch

00:20:59.220 --> 00:21:00.860
wahnsinnig komplex zu bedienen.

00:21:02.820 --> 00:21:02.940
Also

00:21:02.940 --> 00:21:05.020
ich kenne einige Leute,

00:21:05.280 --> 00:21:07.420
an der Einstiegshürde einfach

00:21:07.420 --> 00:21:08.180
gescheitert sind.

00:21:10.560 --> 00:21:11.000
Also

00:21:11.000 --> 00:21:13.180
gefühlt musst du dich erstmal ein Jahr einarbeiten.

00:21:13.500 --> 00:21:15.100
Aber wenn das Ganze ein bisschen magiert, also

00:21:15.100 --> 00:21:16.740
ein Houdini, der dann tatsächlich

00:21:16.740 --> 00:21:19.020
die höhere Effektschiene hat, okay.

00:21:20.120 --> 00:21:20.440
Aber

00:21:20.440 --> 00:21:23.120
auch da ist Skripten wieder total

00:21:23.120 --> 00:21:25.460
angesagt. Die haben sogar interne

00:21:25.460 --> 00:21:26.820
Skripte, die sich glaube ich sogar

00:21:26.820 --> 00:21:29.360
zu C kompilieren, so halb.

00:21:30.140 --> 00:21:31.420
Damit das dann richtig fix wird.

00:21:33.340 --> 00:21:33.620
Genau.

00:21:34.180 --> 00:21:35.280
Haben aber auch wieder ihre eigene

00:21:35.280 --> 00:21:37.460
Skript-Sprache

00:21:37.460 --> 00:21:38.360
da wieder erfunden.

00:21:39.820 --> 00:21:41.840
Also es gibt ja quasi ein Level-Interface,

00:21:41.960 --> 00:21:42.640
was da drüber liegt.

00:21:44.480 --> 00:21:46.000
Also eine API, mit der man

00:21:46.000 --> 00:21:47.580
Houdini-Methoden

00:21:47.580 --> 00:21:48.540
ausführen kann.

00:21:51.680 --> 00:21:53.300
Ist auch recht interessant,

00:21:53.740 --> 00:21:55.640
weil gerade das Python, dadurch das Python

00:21:55.640 --> 00:21:57.140
so modular ist und auch so

00:21:57.140 --> 00:21:59.900
sich so in verschiedensten

00:21:59.900 --> 00:22:01.640
Arten umformen lässt, benutzt

00:22:01.640 --> 00:22:02.220
jeder Interface.

00:22:02.220 --> 00:22:04.710
jedes Programm Python auch

00:22:04.710 --> 00:22:06.290
in verschiedenen Arten und Weisen.

00:22:07.090 --> 00:22:07.290
Also

00:22:07.290 --> 00:22:10.690
Pythonic, würde ich sagen, ist da

00:22:10.690 --> 00:22:11.710
eigentlich nichts.

00:22:14.050 --> 00:22:14.950
Das ist

00:22:14.950 --> 00:22:16.790
alles

00:22:16.790 --> 00:22:18.790
schon sehr gewagtes Zeug, was man

00:22:18.790 --> 00:22:19.770
da macht zum Teil.

00:22:21.410 --> 00:22:22.670
Deswegen gibt es sogar schon

00:22:22.670 --> 00:22:24.770
Wrapper-Libraries, die das alles mehr

00:22:24.770 --> 00:22:27.170
in die Pythonic-Richtung

00:22:27.170 --> 00:22:28.610
drücken,

00:22:28.930 --> 00:22:30.510
weil irgendwann die Skripte

00:22:30.510 --> 00:22:32.190
sich halt auch gesagt haben, so, ey,

00:22:32.210 --> 00:22:33.850
so funktioniert das nicht.

00:22:34.490 --> 00:22:36.010
Ja, aber das ist ja auch das, was man so

00:22:36.010 --> 00:22:38.670
in der generellen Python-Welt hat, oder?

00:22:39.070 --> 00:22:40.610
Dass halt die mehr Leute sich das

00:22:40.610 --> 00:22:42.290
zur Brust nehmen und

00:22:42.290 --> 00:22:44.530
damit arbeiten, umso

00:22:44.530 --> 00:22:46.710
schneller entdeckt irgendjemand das

00:22:46.710 --> 00:22:48.630
wirklich tolle Higher-Level-Interface

00:22:48.630 --> 00:22:50.790
und man kann halt irgendwie mit der einfacheren

00:22:50.790 --> 00:22:52.710
API die gleichen oder schönere Dinge

00:22:52.710 --> 00:22:52.970
machen.

00:22:54.210 --> 00:22:56.990
Ich hatte neulich so ein schönes Beispiel.

00:22:58.070 --> 00:22:58.530
Ich hatte

00:22:58.530 --> 00:23:01.170
eine Funktion namens

00:23:01.170 --> 00:23:04.410
GetStringParameter

00:23:04.410 --> 00:23:06.170
oder irgendwas und

00:23:06.170 --> 00:23:08.050
der hat mir eine Liste zurückgegeben.

00:23:08.910 --> 00:23:09.110
Super.

00:23:10.570 --> 00:23:10.910
Tja.

00:23:12.050 --> 00:23:14.130
Vielleicht hätte ich mir eine TypeAnnotation geschrieben und dann war es mir klar,

00:23:14.170 --> 00:23:14.990
dass er es in der Liste zurückgibt.

00:23:16.630 --> 00:23:18.250
Er hat immer eine Liste zurück und

00:23:18.250 --> 00:23:20.170
das macht dann halt irgendwie keinen Spaß.

00:23:20.170 --> 00:23:20.630
Ja, okay.

00:23:21.650 --> 00:23:25.030
Ja, ne, witzig.

00:23:30.930 --> 00:23:32.590
Ja, also Datentypen und so, was das reinigt.

00:23:32.590 --> 00:23:56.850
Ja, was wollte ich eigentlich? Ich wollte irgendwas fragen, jetzt habe ich vergessen, was ich fragen wollte. Ist das denn nur für jetzt, also ich meine diese ganzen, also Maya und, also nee, Houdini ist doch eher so auch Realfilm-Geschichte, also quasi, wenn man irgendwie tatsächlich gefilmtes Material hat und da einen Effekt machen möchte. Oder, ich habe ehrlich gesagt keine Ahnung, wie das alles zusammenhängt.

00:23:57.210 --> 00:24:00.830
Also für mich klingt das doch alles so, als könnte man total die tollen Computerspiele damit machen.

00:24:00.930 --> 00:24:19.030
Äh, es geht eigentlich in alle Richtungen, die du möchtest. Du kannst damit abstrakt bleiben, du kannst es in Realfilm einbetten, du kannst auch Full-CG-Sachen machen à la Toy Story. Ist, ähm, kein Problem, du musst halt nur wissen, wie du es anfasst.

00:24:19.030 --> 00:24:29.810
Eine große Rolle dabei spielt auch immer der Renderer, sprich das Programm, was dir am Ende die schönen Bilder auf die Leinwand zaubert.

00:24:30.930 --> 00:24:48.790
Wir benutzen zum Beispiel in der Produktion Arnold. Der ist schon sehr auf Realismus ausgelegt, was auch für unsere Firma Sinn macht, weil wir benutzen halt sehr viel Echtzeit-Footage, also Real-Footage, wo wir Sachen einbauen möchten.

00:24:49.030 --> 00:24:52.370
Aber man kann auch sehr viel offener gehen.

00:24:52.550 --> 00:24:56.910
Ich glaube, RenderMan zum Beispiel kann man noch sehr viel mehr mit einstellen.

00:24:58.310 --> 00:25:00.330
Hat natürlich auch alles immer seinen Preis.

00:25:00.330 --> 00:25:04.950
Also je offener du bist, desto langsamer wirst du im Endeffekt.

00:25:05.750 --> 00:25:06.230
Meistens.

00:25:07.770 --> 00:25:10.250
Dadurch, dass man, wenn man sich quasi vorschreibt,

00:25:10.370 --> 00:25:14.490
okay, ich möchte so realistisch und physisch akkurat bleiben,

00:25:14.610 --> 00:25:15.810
wie es nur irgendwie geht,

00:25:16.830 --> 00:25:22.230
dann heißt das auch, okay, ich kann halt Performance an gewissen Stellen halt einfach einbauen,

00:25:22.230 --> 00:25:27.910
weil ich weiß, okay, ich werde niemals so einen Cartoon-Character-Look brauchen.

00:25:28.250 --> 00:25:29.150
Kann man weglassen.

00:25:35.290 --> 00:25:38.770
Also kannst du vielleicht nochmal kurz erläutern, was du mit Performance meinst?

00:25:39.190 --> 00:25:41.890
Also jetzt die Geschwindigkeit, die das Ganze zum Rendern braucht.

00:25:42.610 --> 00:25:45.470
Aber ich denke mir jetzt gerade, du hast ja eh vorgefertigte Szenen,

00:25:45.570 --> 00:25:46.870
Also du willst das ja jetzt nicht live

00:25:46.870 --> 00:25:49.170
irgendwie augmentieren,

00:25:49.510 --> 00:25:50.790
sondern du möchtest ja quasi

00:25:50.790 --> 00:25:53.230
einen Videoschnipsel, den du irgendwo liegen hast,

00:25:53.750 --> 00:25:55.210
ergänzen

00:25:55.210 --> 00:25:57.150
und da filtern oder Sachen

00:25:57.150 --> 00:25:57.510
drauf

00:25:57.510 --> 00:26:01.030
spiegeln oder

00:26:01.030 --> 00:26:03.130
also neue Dinge erschaffen mit einem Schnipsel,

00:26:03.230 --> 00:26:04.850
den du schon hast. Und da ist auch quasi die

00:26:04.850 --> 00:26:07.090
Zeit, die das braucht, um zu

00:26:07.090 --> 00:26:08.450
rendern und Dinge dazu zu erfinden,

00:26:09.090 --> 00:26:09.810
relativ

00:26:09.810 --> 00:26:11.330
dehnbar.

00:26:15.110 --> 00:26:18.350
Ja, aber die Ressourcen sind ja nicht endlos dehnbar.

00:26:18.930 --> 00:26:24.030
Sprich, wir haben zum Beispiel so eine Faustregel,

00:26:24.250 --> 00:26:27.310
dass für uns ein Frame nicht länger als eine Stunde rendern sollte.

00:26:28.030 --> 00:26:30.270
Also ein Frame ist sowas wie ...

00:26:30.270 --> 00:26:33.930
Wie viele Frames hat man sowas beim normalen Fernsehfilm?

00:26:34.050 --> 00:26:35.770
Irgendwie 30 oder 60 oder sowas?

00:26:37.390 --> 00:26:39.250
Normalerweise so 24, 25.

00:26:40.510 --> 00:26:43.750
Natürlich gibt es da ganz tolle neue Technologien

00:26:43.750 --> 00:26:45.510
mit 48 Frames die Sekunde.

00:26:45.790 --> 00:26:47.410
Ich glaube, Herr der Ringe hat das

00:26:47.410 --> 00:26:49.390
eigentlich. Aber für jede Sekunde

00:26:49.390 --> 00:26:51.350
von diesem Film musst du halt zwei Tage

00:26:51.350 --> 00:26:52.530
einplanen.

00:26:54.270 --> 00:26:55.510
Ja, beziehungsweise

00:26:55.510 --> 00:26:57.330
wir haben eine Renderfarm. Das heißt, drei Minuten

00:26:57.330 --> 00:26:58.250
pro Jahr schaffst du dann.

00:27:01.350 --> 00:27:03.610
Ja, es gibt da so tolle Statistiken.

00:27:03.890 --> 00:27:04.410
Ich glaube,

00:27:05.450 --> 00:27:07.650
ich habe mal gehört, bei den Transformer-Filmen,

00:27:07.650 --> 00:27:09.690
da hatten sie Frames, die haben

00:27:09.690 --> 00:27:11.370
72 Stunden gerendert.

00:27:11.730 --> 00:27:13.270
Wow. Also

00:27:13.270 --> 00:27:15.950
Und dann stellst du fest, ja, nee, ist kaputt.

00:27:17.490 --> 00:27:19.470
Ja, da muss man halt dann tatsächlich an anderen Stellen skalieren.

00:27:19.550 --> 00:27:21.350
Da muss man mehrere Parallel-Render-Inzansen haben,

00:27:21.430 --> 00:27:22.970
weil ansonsten wirst du tatsächlich...

00:27:22.970 --> 00:27:24.270
Du hast ja schon eine Render-Farm.

00:27:24.790 --> 00:27:27.590
Musst du deine Render-Farm paralysieren.

00:27:28.930 --> 00:27:31.330
Irgendwann wird es ein bisschen schwierig, klar.

00:27:31.930 --> 00:27:34.690
Und wahrscheinlich ist es ja auch so, dass je...

00:27:34.690 --> 00:27:36.890
Also ich meine, gut, das ist ein völlig anderer Bereich,

00:27:37.010 --> 00:27:38.270
aber das ist halt auch beim...

00:27:38.270 --> 00:27:40.490
Wenn man jetzt so Data-Science-Maschinen-Learning-Geschichten macht,

00:27:40.910 --> 00:27:44.170
Da hat man auch so rechenintensive Jobs.

00:27:44.350 --> 00:27:45.590
Also wenn man jetzt Modelle trainiert,

00:27:46.970 --> 00:27:48.110
und zwar auch Tricks, das zu beschleunigen,

00:27:48.230 --> 00:27:49.530
aber dann muss man halt abwarten.

00:27:49.630 --> 00:27:50.710
Und abwarten ist auch mal ganz schlecht.

00:27:51.130 --> 00:27:53.370
Also wenn man auf irgendwas ein paar Stunden warten muss,

00:27:54.050 --> 00:27:56.510
dann reduziert das die Gesamtperformance enorm,

00:27:56.730 --> 00:27:59.770
weil oft nach ein paar Stunden man sieht, das war alles Unsinn.

00:27:59.970 --> 00:28:00.750
Man muss es halt nochmal machen.

00:28:01.070 --> 00:28:02.350
Und die paar Stunden sind dann einfach weg.

00:28:02.750 --> 00:28:04.450
Und wenn man lange braucht, um irgendwas zu rendern,

00:28:04.450 --> 00:28:09.870
dann sieht man, oh Mist, meine Figur hatte die ganze Zeit die Augen zu

00:28:09.870 --> 00:28:11.690
oder das Grinsen ist einfach schief,

00:28:11.810 --> 00:28:13.630
dann muss man nochmal von vorn anfangen.

00:28:13.970 --> 00:28:15.190
Ich habe keine Ahnung, ich stelle mir das so vor,

00:28:15.470 --> 00:28:17.890
dann ist das blöd, wenn die Iterationen

00:28:17.890 --> 00:28:18.450
zu lange sind.

00:28:19.570 --> 00:28:21.570
Genau, also natürlich gibt es da auch wieder

00:28:21.570 --> 00:28:23.070
Tricks und Kniffe, dass man sich so,

00:28:23.830 --> 00:28:25.490
es gibt zum Beispiel progressives Rendering,

00:28:26.310 --> 00:28:26.650
da

00:28:26.650 --> 00:28:29.710
fängt der Renderer an sich schon

00:28:29.710 --> 00:28:31.690
sehr, sehr grob an und wird dann einfach mit der Zeit

00:28:31.690 --> 00:28:33.470
immer feiner, aber

00:28:33.470 --> 00:28:35.810
dem Menschen ist das quasi

00:28:35.810 --> 00:28:37.610
schon gegeben, dass du siehst, okay, ja,

00:28:38.130 --> 00:28:39.750
wird, wird, wird, okay,

00:28:39.870 --> 00:28:41.910
einigermaßen okay und danach, nee, hier ist das Licht

00:28:41.910 --> 00:28:44.030
aus, alles klar, ich mach dir mal die Lampe wieder an.

00:28:46.390 --> 00:28:47.950
Und dadurch

00:28:47.950 --> 00:28:49.910
lassen sich Fehler auch von vornherein relativ

00:28:49.910 --> 00:28:50.970
schnell beheben.

00:28:52.010 --> 00:28:53.410
Das Problem ist halt nur, wenn du,

00:28:53.610 --> 00:28:55.850
keine Ahnung, du hast deine drei, vier Sekunden,

00:28:55.890 --> 00:28:57.910
die du da füllen musst, dann, du kannst

00:28:57.910 --> 00:28:59.890
ja nicht jeden Frame jetzt einzeln abwarten und gucken,

00:28:59.990 --> 00:29:01.270
ob das überall okay ist. Also

00:29:01.270 --> 00:29:04.230
schickst es auf die Renderfarm und

00:29:04.230 --> 00:29:05.950
musst dann halt warten

00:29:05.950 --> 00:29:07.750
und gucken danach, ob da alles okay ist.

00:29:08.630 --> 00:29:10.970
Das Qualitätsmanagement

00:29:10.970 --> 00:29:11.850
ist da

00:29:11.850 --> 00:29:13.930
auch jedem selbst überlassen.

00:29:14.150 --> 00:29:16.110
Die Renderfarm, vielleicht kannst du noch kurz

00:29:16.110 --> 00:29:17.010
was sagen, was eine Renderfarm ist?

00:29:20.170 --> 00:29:20.730
Wir

00:29:20.730 --> 00:29:22.490
haben quasi

00:29:22.490 --> 00:29:24.330
einen Satz Rechner in unserem

00:29:24.330 --> 00:29:26.190
Serverraum, ich glaube

00:29:26.190 --> 00:29:27.730
sind wahrscheinlich jetzt um die 60,

00:29:28.690 --> 00:29:30.390
die für nichts

00:29:30.390 --> 00:29:31.970
anderes da sind, als

00:29:31.970 --> 00:29:33.990
die schönen Bilder zu berechnen.

00:29:34.150 --> 00:29:36.290
Sprich, wir senden denen Jobs hin

00:29:36.290 --> 00:29:38.110
und sagen, okay, hier guck mal, hast

00:29:38.110 --> 00:29:38.770
meine Szene.

00:29:40.050 --> 00:29:41.210
Rechne einfach mal aus.

00:29:43.490 --> 00:29:44.230
Und dann

00:29:44.230 --> 00:29:45.990
gibt es so eine Renderfarm-Manager, die im

00:29:45.990 --> 00:29:48.270
Übrigen auch alle wunderbar in Python geschrieben sind.

00:29:48.470 --> 00:29:50.350
Gibt ein Thinkbox-Deadline.

00:29:51.710 --> 00:29:52.190
Komplett

00:29:52.190 --> 00:29:53.790
in Python geschrieben. Ich glaube,

00:29:53.990 --> 00:29:56.250
nur unten an der Basis so ein paar

00:29:56.250 --> 00:29:58.470
C-Sachen und einzelne

00:29:58.470 --> 00:29:59.410
Programme.

00:30:00.790 --> 00:30:01.830
Aber damit

00:30:01.830 --> 00:30:03.990
lassen sich dann auch die Sachen komplett steuern.

00:30:04.610 --> 00:30:05.630
Dass du sagen kannst, okay,

00:30:06.730 --> 00:30:07.710
ich habe hier meinen Job

00:30:07.710 --> 00:30:09.730
von 100

00:30:09.730 --> 00:30:11.710
Frames. Bitte verteile mir

00:30:11.710 --> 00:30:13.570
die auf meine 30 Blades

00:30:13.570 --> 00:30:15.370
und jeder Blade bekommt

00:30:15.370 --> 00:30:16.370
5 Frames.

00:30:18.150 --> 00:30:18.870
Also die

00:30:18.870 --> 00:30:21.190
einzelnen Rechner heißen Blades bei uns.

00:30:21.350 --> 00:30:22.150
Okay, ich wollte gerade fragen, ja.

00:30:24.230 --> 00:30:25.570
Genau. Und dann

00:30:25.570 --> 00:30:27.630
siehst du halt dann im kleinen User-Interface

00:30:27.630 --> 00:30:29.450
okay, mein Job muss

00:30:29.450 --> 00:30:31.370
leider noch ein bisschen warten. Da sind noch 5 andere,

00:30:31.670 --> 00:30:33.510
die erstmal hier meine Sachen zurecht

00:30:33.510 --> 00:30:34.130
drücken müssen.

00:30:35.490 --> 00:30:37.410
Und danach bin ich aber dran und dann wird das

00:30:37.410 --> 00:30:38.010
durchgerechnet.

00:30:39.510 --> 00:30:41.450
Das bekommt

00:30:41.450 --> 00:30:42.530
dann nochmal so ein extra

00:30:42.530 --> 00:30:45.370
Layer von Komplexität drauf,

00:30:45.430 --> 00:30:47.290
wenn es dann Richtung Software-Light-Sensing geht,

00:30:47.290 --> 00:30:47.650
weil

00:30:47.650 --> 00:30:51.370
natürlich werden noch

00:30:51.370 --> 00:30:53.090
Lizenzen verkauft für

00:30:53.090 --> 00:30:55.510
die Headless-Programme,

00:30:55.550 --> 00:30:56.830
sprich, wenn du Maya,

00:30:57.390 --> 00:30:59.170
nee, Maya nicht, aber Houdini

00:30:59.170 --> 00:31:01.330
im Headless-Modus rendern lassen

00:31:01.330 --> 00:31:03.050
möchtest, dann musst du dafür aber eine

00:31:03.050 --> 00:31:04.630
bestimmte Lizenz haben.

00:31:05.290 --> 00:31:07.390
Davon musst du deine Render-Farm wissen und

00:31:07.390 --> 00:31:09.430
das Rendering am Ende auch.

00:31:14.750 --> 00:31:17.950
Es gehört aber quasi auch

00:31:17.950 --> 00:31:19.750
zu meinem Job, das alles zu organisieren,

00:31:19.810 --> 00:31:20.730
dass das am Ende passt.

00:31:21.430 --> 00:31:23.810
Die IT, die kümmert sich dann im Grunde

00:31:23.810 --> 00:31:26.050
nur noch darum, dass die Lizenzserver

00:31:26.050 --> 00:31:27.810
aufgesetzt werden und ich bastel

00:31:27.810 --> 00:31:29.650
dann die Programme so zusammen, dass dann am Ende

00:31:29.650 --> 00:31:32.050
die Lizenzen auch da landen, wo sie sein sollen.

00:31:35.350 --> 00:31:41.070
Ja, ist quasi auch Teil meines Arbeitsberufs oder Alltagslebens.

00:31:42.810 --> 00:31:44.610
Ja, ja, ja, ne, interessant.

00:31:45.050 --> 00:31:48.930
Und wo, also die Daten, wie werden die Daten eigentlich gespeichert?

00:31:49.010 --> 00:31:54.470
Die landen auf einem zentralen File-Server oder habt ihr da so eine Art verteiltes Dateisystem?

00:31:54.690 --> 00:31:57.630
Irgendwie sowas wie bei Hadoop, HDFS oder keine Ahnung?

00:31:58.770 --> 00:32:03.630
Ne, es gibt einen zentralen Server, auf dem landen alle Daten, auf den haben eben auch alle Zugriff.

00:32:03.630 --> 00:32:08.750
Und genau, von dem wird alles gezogen und alles hingespeichert.

00:32:10.310 --> 00:32:13.610
Genau, ist eigentlich mit der einfachste Weg

00:32:13.610 --> 00:32:16.490
vielleicht nicht unbedingt der sicherste,

00:32:17.070 --> 00:32:22.210
wenn man mal Sachen verschiebt oder aus Versehen löscht oder so.

00:32:25.050 --> 00:32:29.810
Aber das hat sich eigentlich schon sehr lange bewährt in der Industrie.

00:32:30.750 --> 00:32:32.210
Jochen hat gerade kurz mit den Schultern gezuckt.

00:32:32.210 --> 00:32:33.710
Also nach dem Motto, ja, passiert halt.

00:32:34.030 --> 00:32:35.450
Nö, man kann es ja auch back-up,

00:32:35.550 --> 00:32:38.130
wenn man es wirklich nicht verlieren will.

00:32:38.550 --> 00:32:40.730
Es gibt auch Methoden, wie man das irgendwie sicherstellen kann.

00:32:41.990 --> 00:32:42.670
Nee, ich überlege nur gerade,

00:32:42.790 --> 00:32:44.790
weil ich hier zu Hause auch mal überlege,

00:32:44.830 --> 00:32:45.830
was ich für ein Netz verlege.

00:32:46.230 --> 00:32:49.210
Und ich bin jetzt so bei 10 Gigabit-Kabeln.

00:32:49.990 --> 00:32:52.070
Aber tatsächlich kann ich das noch nicht wirklich nutzen,

00:32:52.550 --> 00:32:55.050
weil die Switches sind halt irgendwie,

00:32:55.190 --> 00:32:56.950
die haben halt Lüfter drin, die das können.

00:32:57.090 --> 00:32:58.890
Und das ist einfach zu laut und da habe ich keine Lust drauf.

00:32:59.610 --> 00:33:01.650
Aber das muss ja dann wirklich schnelles Netz sein.

00:33:02.210 --> 00:33:04.390
Weißt du, womit ihr das hinbekommt?

00:33:04.490 --> 00:33:06.810
Weil man muss ja dann, wenn man so große Datenmengen

00:33:06.810 --> 00:33:07.910
übers Netz immer schiebt.

00:33:08.990 --> 00:33:15.410
Das Netz ist weitestgehend mit Glasfaser überall ausgestattet.

00:33:17.650 --> 00:33:20.670
Ich kann dir keine genauen Details nennen,

00:33:20.670 --> 00:33:25.350
weil ich bin quasi nicht unbedingt für IT zuständig.

00:33:25.350 --> 00:33:26.730
Ach so, nee, aber ich meine jetzt anders.

00:33:27.290 --> 00:33:28.670
Wenn man an einem Rechner arbeitet,

00:33:28.830 --> 00:33:30.590
dann muss da ja auch irgendwie Netz reinkommen.

00:33:30.810 --> 00:33:32.770
das ist aber wahrscheinlich kein, also wenn man

00:33:32.770 --> 00:33:34.650
jetzt irgendwo an einem Rechner dran sitzt, oder ist das auch,

00:33:34.790 --> 00:33:36.790
haben die Karten mit Glasfaser hinten dran?

00:33:37.550 --> 00:33:38.570
Ja. Achso, okay.

00:33:38.850 --> 00:33:40.390
Gut. Ja, das geht natürlich auch.

00:33:41.370 --> 00:33:42.550
Ich hätte jetzt eher gedacht, dass das irgendwie

00:33:42.550 --> 00:33:44.490
Thunderbolt ist oder weiß ich nicht, irgendwie

00:33:44.490 --> 00:33:46.810
10 Gigabit Ethernet

00:33:46.810 --> 00:33:48.790
oder sowas, aber ja, okay. Genau, also

00:33:48.790 --> 00:33:50.750
es ist ein Mix. Wir haben

00:33:50.750 --> 00:33:52.970
glaube ich auch noch ein paar 10 Gigabit-Leitungen.

00:33:53.810 --> 00:33:54.710
Das geht auch,

00:33:54.710 --> 00:33:56.650
wenn man jetzt nicht total

00:33:56.650 --> 00:33:58.610
alles hochfährt, aber wir hatten

00:33:58.610 --> 00:34:00.810
schon Zeiten, wo wirklich die Renderfarm

00:34:00.810 --> 00:34:01.690
randvoll war,

00:34:02.790 --> 00:34:04.530
keine Ahnung, 20, 30 Leute

00:34:04.530 --> 00:34:06.130
gleichzeitig aufs Netzwerk zu greifen

00:34:06.130 --> 00:34:08.650
und dann beschweren sich natürlich

00:34:08.650 --> 00:34:10.070
alle, warum ist denn alles so langsam?

00:34:12.650 --> 00:34:14.690
Kann man im Endeffekt auch nicht so viel

00:34:14.690 --> 00:34:16.570
machen? Es gibt natürlich noch ein paar Tricks und

00:34:16.570 --> 00:34:18.310
Kniffe, dass die Programme zum Beispiel

00:34:18.310 --> 00:34:20.910
die cachen sich die Dateien

00:34:20.910 --> 00:34:21.950
einfach runter lokal

00:34:21.950 --> 00:34:24.650
und wenn du es einmal lokal

00:34:24.650 --> 00:34:26.650
hast, dann belastest

00:34:26.650 --> 00:34:28.570
du natürlich das Netzwerk nicht und hast auch wesentlich

00:34:28.570 --> 00:34:30.530
mehr Speed. So ein bisschen Peer-to-Peer

00:34:30.530 --> 00:34:31.730
denke ich, ne?

00:34:32.530 --> 00:34:32.890
Genau.

00:34:34.970 --> 00:34:35.330
Das

00:34:35.330 --> 00:34:38.650
ist eine gängige Methode. Meistens hat man

00:34:38.650 --> 00:34:40.650
dann einfach so eine Scratch-Disk noch, die man

00:34:40.650 --> 00:34:41.850
mit einer schnellen SSD,

00:34:42.510 --> 00:34:44.710
die musst du natürlich alle jedes Jahr wahrscheinlich

00:34:44.710 --> 00:34:45.590
einmal austauschen.

00:34:46.650 --> 00:34:48.670
Aber dafür hast du eben ordentlich

00:34:48.670 --> 00:34:50.170
Performance hintendran.

00:34:51.690 --> 00:34:52.090
Das

00:34:52.090 --> 00:34:54.810
ist schon sehr sinnvoll, im Endeffekt.

00:34:56.330 --> 00:34:59.290
Ah ja, okay.

00:35:00.390 --> 00:35:01.730
Aber dann sozusagen immer einen

00:35:01.730 --> 00:35:03.490
File-Server, zentralen File-Server als so

00:35:03.490 --> 00:35:05.450
Quelle der Wahrheit, was da liegt, ist dann eigentlich

00:35:05.450 --> 00:35:05.850
das, was

00:35:05.850 --> 00:35:08.110
sozusagen

00:35:08.110 --> 00:35:11.170
rausgekommen ist.

00:35:12.450 --> 00:35:13.330
Das ist schon interessant,

00:35:13.510 --> 00:35:15.550
wie man so mit Merch-Konflikten umgeht dann an der

00:35:15.550 --> 00:35:17.550
Stelle. Ich überlege auch

00:35:17.550 --> 00:35:19.250
gerade, ob es da irgendwie sowas wie Git oder so

00:35:19.250 --> 00:35:20.690
geben könnte, keine Ahnung.

00:35:23.330 --> 00:35:25.050
Hatte ich auch alles schon mal angedacht.

00:35:25.330 --> 00:35:27.030
Git und Git LFS

00:35:27.030 --> 00:35:28.790
hört sich ja

00:35:28.790 --> 00:35:30.490
das gut an, ist aber relativ

00:35:30.490 --> 00:35:32.330
schwierig und die

00:35:32.330 --> 00:35:34.510
Lernkurve dafür finde ich auch ziemlich hart

00:35:34.510 --> 00:35:35.390
für jedermann.

00:35:37.770 --> 00:35:38.450
Es gibt

00:35:38.450 --> 00:35:38.970
aber

00:35:38.970 --> 00:35:41.910
Unreal Engine.

00:35:43.150 --> 00:35:44.710
Das ist auch aus der Gaming-Szene

00:35:44.710 --> 00:35:46.690
tatsächlich. Das ist aus der Gaming-Szene,

00:35:46.870 --> 00:35:48.310
genau. Die haben zum Beispiel eine

00:35:48.310 --> 00:35:50.370
Git LFS-Anbindung, dass man rein theoretisch

00:35:50.370 --> 00:35:52.550
sein Projekt komplett über Git LFS machen kann.

00:35:53.370 --> 00:35:54.270
Macht, glaube ich, keiner.

00:35:54.870 --> 00:35:56.110
aus genannten Gründen.

00:35:58.450 --> 00:35:58.930
Beziehungsweise

00:35:58.930 --> 00:36:00.970
ich kenne niemanden. Was ist denn das Problem

00:36:00.970 --> 00:36:02.510
in dieser Learning-Kurve bei GitLFS?

00:36:05.050 --> 00:36:05.530
Na,

00:36:06.990 --> 00:36:09.110
man kann relativ viel

00:36:09.110 --> 00:36:10.890
immer noch kaputt machen,

00:36:11.050 --> 00:36:12.870
bis man quasi so in diese Arbeitsweise

00:36:12.870 --> 00:36:14.630
reingekommen ist von, okay,

00:36:14.850 --> 00:36:17.050
ich stage meine Sachen, dann committe ich sie,

00:36:17.190 --> 00:36:18.970
dann pushe ich sie, okay, ich muss die aber

00:36:18.970 --> 00:36:20.910
auch wieder runterpullen und dabei dann

00:36:20.910 --> 00:36:22.070
eben auch aufpassen, dass

00:36:22.070 --> 00:36:26.210
ja, meine Pre- und Post-Commit-Hooks

00:36:26.210 --> 00:36:27.950
da alle mit Git-LFS

00:36:27.950 --> 00:36:29.490
alles das machen, was sie sollen.

00:36:29.670 --> 00:36:32.030
Ich glaube, schwierig wird es halt tatsächlich bei so Merch-Konflikten, weil du halt nicht

00:36:32.030 --> 00:36:33.670
einfach den Code

00:36:33.670 --> 00:36:36.030
nicht zusammenfügen, einfach

00:36:36.030 --> 00:36:37.970
so und sagen, hey, die Stelle ist jetzt okay, die nicht,

00:36:38.390 --> 00:36:40.150
sondern du kannst dich halt wahrscheinlich nur für sein Entweder-

00:36:40.150 --> 00:36:41.930
oder unterscheiden, also entweder das Bild

00:36:41.930 --> 00:36:43.930
vom Server oder halt mein Bild

00:36:43.930 --> 00:36:45.730
irgendwie und das ist halt bestimmt schwierig.

00:36:47.030 --> 00:36:48.010
Ja, ganz

00:36:48.010 --> 00:36:48.950
genau, das

00:36:48.950 --> 00:36:51.290
ist zusätzlich noch so.

00:36:51.830 --> 00:36:55.510
Auch da haben aber die 3D-Programme zum Teil noch ganz gute Kniffe,

00:36:55.930 --> 00:37:03.070
weil deren File-Formate sind meistens auf ASCII ausgelegt.

00:37:05.190 --> 00:37:08.850
Sprich, wenn man ein bisschen findig ist, kann man die einfach selbst aufmachen

00:37:08.850 --> 00:37:14.090
und da ein bisschen drin rumfuhrwerken und am Ende sogar seine Szene retten.

00:37:14.430 --> 00:37:16.930
Also funktioniert manchmal, manchmal funktioniert es nicht.

00:37:18.850 --> 00:37:21.550
Aber auch da sehr clever.

00:37:21.830 --> 00:37:25.850
Ich überlege gerade, was halt passiert.

00:37:26.170 --> 00:37:28.110
Also, ob

00:37:28.110 --> 00:37:29.950
so eine Videoproduktion aus

00:37:29.950 --> 00:37:31.970
mehreren Schichten besteht, wo es halt quasi

00:37:31.970 --> 00:37:34.010
ein Urbild gibt, also quasi das, was eine normale

00:37:34.010 --> 00:37:36.090
Kamera aufgenommen hat und dann die einzelnen

00:37:36.090 --> 00:37:37.870
Effekte drübergelegt werden, einer

00:37:37.870 --> 00:37:39.910
nach dem anderen oder ob die alle

00:37:39.910 --> 00:37:41.870
irgendwie gemirsch werden und dann alle gleichzeitig irgendwie

00:37:41.870 --> 00:37:43.950
ablaufen und welcher halt

00:37:43.950 --> 00:37:45.890
dann der Layer ist,

00:37:45.970 --> 00:37:47.910
der am nächsten an diesem Realbild dann dran ist

00:37:47.910 --> 00:37:48.250
oder so.

00:37:51.830 --> 00:38:10.570
Okay, gehen wir von einer normalen Produktion aus, wie wir sie gerade haben, mit echtem Footage. Sprich, du hast, keine Ahnung, Superman und hast ihn vor einem Greenscreen gedreht. Sprich, schöne grüne Leinwand und der soll jetzt erstmal schön durch den Himmel fliegen.

00:38:13.310 --> 00:38:17.930
dann wird es wahrscheinlich der Job von dem 3D-Artist sein, dass der dir erstmal einen schönen 3D-Himmel baut.

00:38:19.010 --> 00:38:22.710
Kann er. Noch ein paar Wolken mit rein, dass er alles schön mitmacht.

00:38:23.730 --> 00:38:33.130
Und dann gibt es, wenn diese Layer quasi fertig sind, noch den Job des Compositors, der diese Layer zusammenfügt.

00:38:34.130 --> 00:38:38.050
Sprich, der sieht dann zu, okay, den grünen Hintergrund, den machen wir mal weg.

00:38:39.310 --> 00:38:55.990
Dann sehen wir noch zu, dass wir hier noch, keine Ahnung, das Cape flattert noch ein bisschen, da war noch ein Kabel dran, das geht auch noch mit da weg und ja, damit jetzt die Wolken hier auch noch so schön aussehen, muss ja eine Wolke davor und eine Wolke dahinter, dass der da schön durchfliegt.

00:38:57.190 --> 00:38:59.770
Das ist dann eher eben dessen Job.

00:39:00.950 --> 00:39:03.790
Und zusätzlich kommt noch dazu,

00:39:03.890 --> 00:39:06.890
dass man dann meistens auch so farblich ein paar Sachen anpasst,

00:39:07.010 --> 00:39:08.910
weil das, was du in 3D renderst,

00:39:09.030 --> 00:39:13.530
ist dadurch, dass es artifiziell ist,

00:39:13.690 --> 00:39:17.490
eigentlich sehr schwer mit Echtzeit abzugleichen.

00:39:17.490 --> 00:39:20.490
Also was in der echten Kamera gefilmt wurde.

00:39:21.970 --> 00:39:23.810
Ich meine, man muss sich ja nur vorstellen,

00:39:23.930 --> 00:39:27.050
okay, ich filme das echte Leben draußen,

00:39:27.190 --> 00:39:52.990
Und da sind ja wahnsinnig viele physikalische Sachen am Werk. Lichtbrechung, Reflektionen, Licht schimmert durch Bäume und wird absorbiert und wieder zurückgeworfen hundertmal. Und wenn wir das alles wirklich physikalisch durchrechnen würden, ja, dann würden wir auch in einem 3D-Programm auf das exakt gleiche Bild kommen, würden aber auch Ewigkeiten warten.

00:39:53.990 --> 00:39:55.690
Sprich, man nimmt

00:39:55.690 --> 00:39:56.190
eine Menge ab.

00:39:58.570 --> 00:39:59.210
Absolut.

00:40:00.110 --> 00:40:01.870
Jeder Simulationsartist,

00:40:01.870 --> 00:40:03.610
der in den Himmel guckt und ein paar Wolken sieht,

00:40:03.690 --> 00:40:04.750
denkt sich so, ach, ja.

00:40:07.750 --> 00:40:09.230
Kleine Cumulus Cloud, ach,

00:40:09.550 --> 00:40:10.030
Nächtszeit.

00:40:13.590 --> 00:40:15.850
Genau, deswegen nimmt man eine Menge Abkürzungen

00:40:15.850 --> 00:40:17.770
und der Compositor zieht das

00:40:17.770 --> 00:40:19.250
dann quasi wieder zusammen und

00:40:19.250 --> 00:40:21.610
blendet quasi die Tricks,

00:40:21.790 --> 00:40:23.150
die da so sind, wieder zusammen.

00:40:23.990 --> 00:40:25.670
Aber wenn ich das richtig verstehe, ist halt quasi das Einzige,

00:40:25.730 --> 00:40:27.570
was uns daran hindert, so wirklich

00:40:27.570 --> 00:40:29.490
so live richtig tolle Echtbilder

00:40:29.490 --> 00:40:31.430
zu machen, so die Rechenpower, die dahinter

00:40:31.430 --> 00:40:31.690
steckt.

00:40:33.110 --> 00:40:35.490
Ja, im Grunde genommen schon, ja.

00:40:36.110 --> 00:40:37.570
Ich meine, gute Software

00:40:37.570 --> 00:40:39.170
wäre auch ganz nett dazu,

00:40:39.170 --> 00:40:41.130
aber ja, es

00:40:41.130 --> 00:40:43.210
ist einfach die absolute

00:40:43.210 --> 00:40:45.010
Rechenpower, die dahinter steckt,

00:40:45.750 --> 00:40:47.290
die man da eben braucht.

00:40:48.090 --> 00:40:49.230
Ich meine, es gibt ja bestimmte

00:40:49.230 --> 00:40:51.030
Programme, Unreal Engine schreibt sich

00:40:51.030 --> 00:40:53.310
ja auch auf die Fahne, dass die da wunderbar realistisch

00:40:53.310 --> 00:40:55.170
sind und du die tollsten Games mitmachen

00:40:55.170 --> 00:40:57.310
kannst. Aber auch die benutzen halt

00:40:57.310 --> 00:40:58.810
ihre eigenen Tricks und Kniffe,

00:40:59.110 --> 00:41:01.070
dass sie halt sehr viel vorberechnen und dann

00:41:01.070 --> 00:41:03.050
wieder benutzen. Auch die haben sich natürlich im Laufe

00:41:03.050 --> 00:41:04.610
der Jahrzehnte jetzt schon entwickelt.

00:41:05.670 --> 00:41:07.070
Früher war das natürlich bestimmt noch viel

00:41:07.070 --> 00:41:09.090
aufwendiger. Gibt es da irgendwie so einen Faktor,

00:41:09.130 --> 00:41:10.530
den man sagen kann, so ja, wenn es jetzt noch so

00:41:10.530 --> 00:41:12.970
zehnmal schneller wäre, dann wäre es halt

00:41:12.970 --> 00:41:14.650
irgendwie total cool oder so.

00:41:15.370 --> 00:41:16.930
Oder wenn es jetzt noch hundertmal schneller wäre,

00:41:17.010 --> 00:41:18.890
dann wäre es so wie in echt. Oder würdest du sagen,

00:41:18.890 --> 00:41:20.990
ja, okay, da ist noch wirklich richtig viel zu tun?

00:41:23.310 --> 00:41:29.430
Es entwickelt sich in sehr vielen Enden, in sehr viele verschiedene Richtungen.

00:41:29.710 --> 00:41:34.090
Also ja, es gibt schon Möglichkeiten, wie du Sachen in Echtzeit dir anzeigen lassen kannst und so.

00:41:35.610 --> 00:41:38.810
Es ist quasi mehr eine Art und Weise, wie du selbst arbeitest.

00:41:39.830 --> 00:41:42.850
Kannst du damit leben, dass du gerade nur eine graue Kugel siehst?

00:41:42.850 --> 00:41:50.670
Oder möchtest du den Fußball wirklich voll ausgeleuchtet mit allen Lichtern an und schön austexturiert?

00:41:51.690 --> 00:41:57.270
Und genau, im Endeffekt ist es da so ein bisschen,

00:41:57.630 --> 00:41:59.750
auf was es einen selbst darauf ankommt.

00:42:00.250 --> 00:42:03.850
Das, was am Ende auf der Leinwand passiert,

00:42:04.070 --> 00:42:05.910
ich meine, das ist ja dann eh fertig berechnet,

00:42:06.030 --> 00:42:08.150
das ist ja dann eh immer flüssig und schick.

00:42:09.010 --> 00:42:12.090
Bei Game Engines müssen natürlich noch entsprechende Leute ran,

00:42:12.090 --> 00:42:13.750
dass das alles flüssig läuft.

00:42:14.930 --> 00:42:18.690
Aber für die Film- und Fernsehbranche ist es ja fast irrelevant,

00:42:19.790 --> 00:42:25.030
weil das Endprodukt wird immer gut aussehen oder sollte immer gut aussehen.

00:42:25.170 --> 00:42:27.850
Das heißt, es geht tatsächlich darum, wie du in deinem Zwischenschritt

00:42:27.850 --> 00:42:30.970
was für eine Visualisierung du von deiner akuten Arbeit hast,

00:42:31.070 --> 00:42:32.670
also wie du quasi direkt eingreifen kannst

00:42:32.670 --> 00:42:34.490
und wie gut das visualisiert ist, was du da machen willst.

00:42:35.230 --> 00:42:35.490
Genau.

00:42:36.710 --> 00:42:38.430
Theoretisch könntest du also immer die Pauseknopf drücken

00:42:38.430 --> 00:42:40.530
und dann 72 Stunden rennen lassen

00:42:40.530 --> 00:42:43.170
und dann hättest du das quasi jetzt Bild in super toll

00:42:43.170 --> 00:42:44.690
und dann machst du halt dann da weiter.

00:42:44.990 --> 00:42:47.110
Und dann ist es natürlich für den Zwischenschritt wieder nur,

00:42:47.190 --> 00:42:49.090
wie du sagtest, in grauen Kugeln oder so.

00:42:49.790 --> 00:42:51.890
Genau. Das könnte

00:42:51.890 --> 00:42:53.930
man so machen, wie man denn willte.

00:42:56.550 --> 00:42:57.910
Genau, und deswegen gibt es auch immer

00:42:57.910 --> 00:42:59.910
wieder so Zwischenschritte, wo man das

00:42:59.910 --> 00:43:01.890
macht. Animatoren zum Beispiel

00:43:01.890 --> 00:43:03.770
machen gerne Playblasts.

00:43:04.430 --> 00:43:05.490
Das sind wirklich nur

00:43:05.490 --> 00:43:07.910
sehr simpel gerenderte Szenen,

00:43:08.710 --> 00:43:10.190
wo sie quasi ihre Animationen

00:43:10.190 --> 00:43:11.710
einmal flüssig abspielen können.

00:43:12.390 --> 00:43:13.910
Oder einmal flüssig sehen. Nur als

00:43:13.910 --> 00:43:15.990
Bildmaterial. Das ist dann

00:43:15.990 --> 00:43:17.910
als, okay, du hast deinen Charakter vielleicht

00:43:17.910 --> 00:43:19.790
als grauen Menschen,

00:43:20.130 --> 00:43:21.370
aber es ist ja eigentlich egal,

00:43:21.810 --> 00:43:23.050
wenn er sich an die,

00:43:23.830 --> 00:43:25.530
keine Ahnung, ans Kinn greift,

00:43:25.970 --> 00:43:27.930
dann, ob er nun blau oder

00:43:27.930 --> 00:43:29.930
grün ist, ist ja nun wirklich wurscht eigentlich.

00:43:32.010 --> 00:43:33.490
Ähm, genau.

00:43:33.790 --> 00:43:35.910
Weil es dann die Bewegung an sich ankommt dann, ja, und die kann man

00:43:35.910 --> 00:43:37.450
halt dann anders darstellen, da braucht man halt

00:43:37.450 --> 00:43:38.870
den Rest nicht dazu.

00:43:39.650 --> 00:43:42.270
Das heißt, man reduziert quasi verschiedene Dimensionen,

00:43:42.270 --> 00:43:44.530
um sich auf das zu konzentrieren,

00:43:44.610 --> 00:43:45.790
was man gerade modellieren möchte.

00:43:46.710 --> 00:43:47.030
Genau.

00:43:47.910 --> 00:43:49.450
Im Grunde genommen ist es das.

00:43:51.530 --> 00:43:52.050
Ich meine, vielleicht

00:43:52.050 --> 00:43:54.370
landen wir irgendwann mal in einer Welt,

00:43:54.370 --> 00:43:56.490
wo alles sofort immer

00:43:56.490 --> 00:43:58.250
echtzeitphysikalisch machbar ist

00:43:58.250 --> 00:44:00.270
in allen Programmen, aber noch

00:44:00.270 --> 00:44:02.170
sind wir nicht da. Aber ich meine,

00:44:02.250 --> 00:44:04.430
die Rechenpower und so, die wird

00:44:04.430 --> 00:44:06.430
doch immer besser.

00:44:06.910 --> 00:44:08.410
Ja, klar. Ich meine, kann man sich da

00:44:08.410 --> 00:44:10.330
nicht vielleicht auch einem der

00:44:10.330 --> 00:44:11.910
Tricks bedienen, den

00:44:11.910 --> 00:44:14.390
die Spiele besser aussehen lassen? Ich meine, da wird

00:44:14.390 --> 00:44:16.250
ja jetzt inzwischen fast alles in

00:44:16.250 --> 00:44:18.470
GPUs gerechnet. Gibt's

00:44:18.470 --> 00:44:19.730
da eigentlich irgendwie

00:44:19.730 --> 00:44:22.310
wird das jetzt auch beim

00:44:22.310 --> 00:44:24.310
Rendern gemacht oder ist das alles

00:44:24.310 --> 00:44:25.530
noch CPU oder

00:44:25.530 --> 00:44:28.410
Es gibt schon

00:44:28.410 --> 00:44:30.350
Hybrid-Render, die sogar beides

00:44:30.350 --> 00:44:32.110
benutzen können, GPU und CPU.

00:44:33.290 --> 00:44:33.810
Das

00:44:33.810 --> 00:44:35.750
großer Ding

00:44:35.750 --> 00:44:36.710
als immer

00:44:36.710 --> 00:44:39.890
der Speicherplatz auf deiner Grafikkarte.

00:44:40.670 --> 00:44:41.530
Ah, ja, ja.

00:44:42.510 --> 00:44:43.790
Also wir haben zum Teil

00:44:43.790 --> 00:44:45.310
Texturen, sprich,

00:44:45.810 --> 00:44:47.610
das so wie,

00:44:48.270 --> 00:44:49.910
keine Ahnung, wenn du eine Jacke an hast,

00:44:50.090 --> 00:44:51.690
dann ist da eben der Jeansstoff

00:44:51.690 --> 00:44:53.490
drauf, so wie er eben aussehen soll.

00:44:54.130 --> 00:44:55.310
Und das sind halt auch nur Bilder.

00:44:55.310 --> 00:44:57.310
Und die sind im Durchschnitt bei uns

00:44:57.310 --> 00:44:59.330
4K groß, sprich

00:44:59.330 --> 00:45:01.170
4096

00:45:01.170 --> 00:45:02.490
mal 4096.

00:45:03.710 --> 00:45:05.130
das

00:45:05.130 --> 00:45:08.410
frisst dann gerne mal so

00:45:08.410 --> 00:45:11.070
300-400 Megabyte auf deiner Grafikkarte

00:45:11.070 --> 00:45:12.910
dann hast du von den Dingern

00:45:12.910 --> 00:45:14.550
10 und dann ist die voll

00:45:14.550 --> 00:45:16.210
und dann war's das

00:45:16.210 --> 00:45:18.710
dann war's das auch wieder mit

00:45:18.710 --> 00:45:19.250
Echtzeit

00:45:19.250 --> 00:45:22.490
Ja, also

00:45:22.490 --> 00:45:24.810
Neukarten, die können relativ viel von sowas machen

00:45:24.810 --> 00:45:25.910
glaube ich

00:45:25.910 --> 00:45:28.750
Wird auch immer besser, also ist auch wirklich

00:45:28.750 --> 00:45:30.430
toll, was sie inzwischen damit können, aber

00:45:30.430 --> 00:45:32.810
ja, wir haben auch massenhaft

00:45:32.810 --> 00:45:34.430
Daten, die wir da versuchen

00:45:34.430 --> 00:45:36.630
raufzupressen und irgendwann gibt es halt

00:45:36.630 --> 00:45:38.730
den Cut. Okay, Grafikkarte voll.

00:45:39.630 --> 00:45:40.350
Ich benutze wieder

00:45:40.350 --> 00:45:41.670
die Festplatte und

00:45:41.670 --> 00:45:44.590
trittst da erstmal

00:45:44.590 --> 00:45:45.570
wieder schön auf die Bremse.

00:45:47.130 --> 00:45:47.230
Ja.

00:45:48.810 --> 00:45:50.290
Das Interessante ist auch,

00:45:51.710 --> 00:45:52.790
irgendwer hat das mal gesagt,

00:45:53.090 --> 00:45:55.010
die 3D-Branche

00:45:55.010 --> 00:45:56.190
ist schon

00:45:56.190 --> 00:45:58.190
peinlich

00:45:58.190 --> 00:45:59.490
parallelisierbar.

00:46:00.530 --> 00:46:02.530
Sprich, wenn man so eine 3D-Szene

00:46:02.530 --> 00:46:04.290
hat, die ist so in sich abgeschlossen,

00:46:05.050 --> 00:46:06.510
dass man die unheimlich gut

00:46:06.510 --> 00:46:08.510
multithreaten und parallelisieren kann.

00:46:09.930 --> 00:46:10.370
Weil

00:46:10.370 --> 00:46:12.450
es ist ja quasi alles bekannt, es ist

00:46:12.450 --> 00:46:14.550
alles da, es ist alles eingestellt, also

00:46:14.550 --> 00:46:16.630
du kannst

00:46:16.630 --> 00:46:18.510
jedem Core quasi sagen, okay, du fängst

00:46:18.510 --> 00:46:19.750
da an, du fängst da an.

00:46:21.530 --> 00:46:22.570
Ja, von der Zeit her

00:46:22.570 --> 00:46:24.170
kann ich mir vorstellen, dass das sehr gut möglich ist.

00:46:24.650 --> 00:46:26.510
In ein Bild zerlegen stelle ich mir

00:46:26.510 --> 00:46:28.490
schwer vor, wenn irgendwo eine Lampe über das ganze

00:46:28.490 --> 00:46:29.350
Bild leuchtet, dann

00:46:29.350 --> 00:46:32.410
muss, dann hängen

00:46:32.410 --> 00:46:33.990
die ja die Sachen voneinander ab, ne? Aber

00:46:33.990 --> 00:46:36.670
ja, man kann

00:46:36.670 --> 00:46:38.430
natürlich in der Zeit super, kann man

00:46:38.430 --> 00:46:39.110
splitten, ja.

00:46:40.690 --> 00:46:42.490
Sprich, die Renderer gehen natürlich auch

00:46:42.490 --> 00:46:43.910
voll auf Chors ab, also

00:46:43.910 --> 00:46:46.590
wenn du da einen Threadripper drin hast,

00:46:46.590 --> 00:46:48.150
das merkst du definitiv.

00:46:48.590 --> 00:46:48.630
Ah.

00:46:50.850 --> 00:46:51.250
Ja.

00:46:52.710 --> 00:46:53.790
Auch sehr spannend, ja.

00:46:54.610 --> 00:46:56.490
Ja, ja, und wenn man dann halt eben beliebig viele

00:46:56.490 --> 00:46:58.530
Rechner hat, dann ist das auch im Grunde

00:46:58.530 --> 00:47:00.290
ja nicht so schlimm, wenn das

00:47:00.290 --> 00:47:02.330
TPU, muss man halt einfach nur mehr Rechner nehmen.

00:47:02.410 --> 00:47:06.190
Das ist horizontal skaliert.

00:47:07.650 --> 00:47:09.710
Ich finde es auch spannend an der Stelle, dass

00:47:09.710 --> 00:47:14.390
Python da auch wieder reinkommt, weil Python an sich ist ja

00:47:14.390 --> 00:47:17.610
verschrien langsam als Skriptsprache.

00:47:18.610 --> 00:47:21.850
Aber das ist unheimlich egal an dieser Stelle.

00:47:23.070 --> 00:47:26.350
Weil was ich an der Sache mache, ist quasi

00:47:26.350 --> 00:47:30.430
einfach, okay, die Leute kriegen ihre Daten an der richtigen Stelle und ob das jetzt

00:47:30.430 --> 00:47:33.110
hundertmal schneller oder tausendmal

00:47:33.110 --> 00:47:35.170
schneller funktioniert, ist vollkommen

00:47:35.170 --> 00:47:35.510
egal.

00:47:36.730 --> 00:47:37.310
Das ist

00:47:37.310 --> 00:47:41.230
so ein wunderbarer Use Case

00:47:41.230 --> 00:47:43.110
von, okay,

00:47:43.610 --> 00:47:45.050
du musst die richtige Sprache benutzen

00:47:45.050 --> 00:47:46.210
für den richtigen

00:47:46.210 --> 00:47:47.770
Anwendungsfall.

00:47:48.670 --> 00:47:50.890
Ich kann das alle, ich kann nicht, aber

00:47:50.890 --> 00:47:53.410
man könnte das alles in C ausprogrammieren,

00:47:53.410 --> 00:47:54.670
wer so wahnsinnig ist,

00:47:55.530 --> 00:47:57.350
dann wäre es auch wahnsinnig schnell, aber es macht keinen

00:47:57.350 --> 00:47:57.810
Unterschied.

00:47:58.290 --> 00:48:01.510
Ne, klar. Also manchmal ist die

00:48:01.510 --> 00:48:03.590
Geschwindigkeit, mit der man irgendetwas hinschreiben kann,

00:48:03.710 --> 00:48:05.170
halt die viel wichtigere.

00:48:06.030 --> 00:48:07.630
Ja, wenn Dinge halt nicht so oft

00:48:07.630 --> 00:48:08.690
ausgeführt werden.

00:48:09.570 --> 00:48:11.130
Ja, aber ich meine,

00:48:11.550 --> 00:48:13.190
spielt das eigentlich bei euch irgendeine Rolle?

00:48:13.270 --> 00:48:15.050
Man könnte ja auch Dinge dann in Python schnell machen.

00:48:15.050 --> 00:48:16.910
Also eben im Bereich

00:48:16.910 --> 00:48:18.290
Machine Learning und so, da wird ja auch

00:48:18.290 --> 00:48:20.610
tatsächlich viel selbst in Python gemacht.

00:48:21.230 --> 00:48:23.130
Und ich weiß jetzt nicht, wie es mit Bilddaten aussieht

00:48:23.130 --> 00:48:24.470
und so, aber man könnte da ja auch,

00:48:24.810 --> 00:48:26.090
indem man das Ganze zum Beispiel

00:48:26.090 --> 00:48:28.510
die Bilder irgendwie in NumPy Arrays

00:48:28.510 --> 00:48:30.250
hat oder so und dann darauf

00:48:30.250 --> 00:48:32.330
irgendwelche Transformationen machen oder so, es müsste

00:48:32.330 --> 00:48:34.290
dann eigentlich auch schnell sein. Oder

00:48:34.290 --> 00:48:36.170
dass man halt irgendwie, keine Ahnung,

00:48:37.630 --> 00:48:38.270
per

00:48:38.270 --> 00:48:40.070
Seiten halt irgendwie

00:48:40.070 --> 00:48:41.250
Python-Code in

00:48:41.250 --> 00:48:44.550
oder zumindest die heißen inneren

00:48:44.550 --> 00:48:46.630
Schleifen

00:48:46.630 --> 00:48:48.270
und Funktionen halt sozusagen in

00:48:48.270 --> 00:48:50.270
C zuerst übersetzt

00:48:50.270 --> 00:48:52.190
und dann wieder als C-Modul wieder einbindet.

00:48:52.510 --> 00:48:53.990
Denn damit könnte man es ja auch sehr schnell machen.

00:48:54.630 --> 00:48:56.230
Wird das irgendwie verwendet oder ist das

00:48:56.230 --> 00:48:58.390
da, wenn, ich meine, solange Python halt

00:48:58.390 --> 00:49:00.550
zum Steuern verwendet wird, ist es ja egal

00:49:00.550 --> 00:49:01.990
im Grunde, da brauchst du das alles nicht.

00:49:03.150 --> 00:49:04.650
Es wird jetzt immer interessanter

00:49:04.650 --> 00:49:05.930
mit dem Machine Learning, weil

00:49:05.930 --> 00:49:08.030
es gibt so gewisse Schritte

00:49:08.030 --> 00:49:10.370
in der 2D und 3D Bearbeitung,

00:49:10.490 --> 00:49:12.570
die halt unheimlich nervig und

00:49:12.570 --> 00:49:14.610
langweilig sind. So das beste

00:49:14.610 --> 00:49:15.850
Beispiel ist Sachen ausschneiden.

00:49:16.570 --> 00:49:18.530
Sprich, okay, Mann geht von A nach B,

00:49:18.650 --> 00:49:19.450
schneid den mal aus.

00:49:20.430 --> 00:49:22.530
Und das lässt

00:49:22.530 --> 00:49:24.310
sich unheimlich, was halt,

00:49:24.410 --> 00:49:29.350
Also unheimlich gut noch nicht, aber es lässt sich langsam machen mit Machine Learning.

00:49:30.230 --> 00:49:38.190
Wir hatten da auch schon erste Ansätze, allerdings muss man da auch schon noch durch ganz schön viele Hoops springen,

00:49:38.190 --> 00:49:40.210
bis man da ankommt, wo man hin will.

00:49:41.350 --> 00:49:48.530
Aber so automatisiert Sachen ausschneiden, das wird echt unsere Branche nochmal ganz gut aufmischen.

00:49:50.650 --> 00:49:57.390
Genau, im Moment hapert es noch an so der Größe der Bilder zum Beispiel.

00:49:58.350 --> 00:50:04.510
Die meisten gehen da so auf 512x512 Pixel, verständlicherweise.

00:50:05.330 --> 00:50:13.030
Ja gut, wenn du jetzt so ein 4K-Bild hast, dann musst du das erstmal zerlegen in, keine Ahnung, 8-12 Bilder oder so,

00:50:13.950 --> 00:50:17.730
die du dann einzeln da durchjagst, dann hast du im Endeffekt auch nicht mehr so viel gewonnen,

00:50:18.290 --> 00:50:20.430
weil das, was am Ende rauskommt, ist auch

00:50:20.430 --> 00:50:22.270
naja, sagen wir mal

00:50:22.270 --> 00:50:24.550
80% da, wo es eigentlich sein sollte.

00:50:28.230 --> 00:50:30.550
Und man kommt dann noch an so andere Probleme,

00:50:30.770 --> 00:50:31.350
wie zum Beispiel

00:50:31.350 --> 00:50:33.450
ein Mann geht durchs Bild.

00:50:34.270 --> 00:50:35.790
Ja, okay, den Mann kannst du ausschneiden.

00:50:35.990 --> 00:50:37.650
Okay, jetzt hat der Mann aber auf einmal einen Hut auf.

00:50:38.530 --> 00:50:40.430
Dafür ist jetzt das Machine Learning

00:50:40.430 --> 00:50:42.130
Modell aber nicht trainiert.

00:50:42.130 --> 00:50:44.450
Das ist nur auf Menschen ohne Hüte.

00:50:45.250 --> 00:50:46.450
Gibt es nur in den Trainingsarten,

00:50:46.490 --> 00:50:47.670
in den Trainingsarten waren keine Hüte drin.

00:50:47.750 --> 00:50:48.690
Tja, das ist doof.

00:50:50.290 --> 00:50:51.850
Okay, jetzt darfst du es erst noch

00:50:51.850 --> 00:50:52.610
trainieren auf Hüte.

00:50:53.350 --> 00:50:55.550
Das ist ja jetzt auch irgendwie schwierig.

00:50:56.690 --> 00:50:56.810
Ja.

00:50:58.190 --> 00:50:59.890
Aber ja, da gibt's auch

00:50:59.890 --> 00:51:02.110
jetzt erste Fortschritte.

00:51:03.210 --> 00:51:03.450
Es wird

00:51:03.450 --> 00:51:05.210
auch noch sehr interessant

00:51:05.210 --> 00:51:07.930
für zum Beispiel

00:51:07.930 --> 00:51:10.070
so, keine Ahnung,

00:51:10.250 --> 00:51:11.590
wenn du Sachen verschönern willst,

00:51:11.590 --> 00:51:12.470
keine Ahnung, der

00:51:12.470 --> 00:51:15.630
Tom Cruise hat einen Pickel auf der Stirn oder so

00:51:15.630 --> 00:51:16.890
und bewegt sich durchs Bild.

00:51:17.350 --> 00:51:19.150
Oh, und jetzt muss das aus jedem Bild raus

00:51:19.150 --> 00:51:20.010
retuschiert werden.

00:51:21.310 --> 00:51:21.790
Genau.

00:51:22.790 --> 00:51:25.170
Da ist Machine Learning aber auch schon

00:51:25.170 --> 00:51:27.230
ganz gut am Start und die

00:51:27.230 --> 00:51:29.290
Ergebnisse sind

00:51:29.290 --> 00:51:31.090
eigentlich sehr, sehr gut, muss man

00:51:31.090 --> 00:51:32.310
sagen. Da

00:51:32.310 --> 00:51:35.090
hätte vorher dann halt ein Artist

00:51:35.090 --> 00:51:36.310
irgendwie eine Woche dran gesessen

00:51:36.310 --> 00:51:39.190
und wenn das ein Rechner in einer Stunde

00:51:39.190 --> 00:51:41.110
kann, dann ist das definitiv

00:51:41.110 --> 00:51:41.490
cool.

00:51:42.130 --> 00:51:46.870
Ja, witzig. Ja, klar.

00:51:46.950 --> 00:51:48.630
da gibt es natürlich auch jede Menge Anwendungen dafür.

00:51:50.350 --> 00:51:50.370
Ja.

00:51:51.030 --> 00:51:52.570
Ja, oder da gibt es etwas, was ich

00:51:52.570 --> 00:51:54.650
ab und zu sehe ich mal so Demos,

00:51:54.750 --> 00:51:56.670
ich habe aber keine Ahnung, inwiefern das schon

00:51:56.670 --> 00:51:58.830
soweit ist, dass man das benutzen

00:51:58.830 --> 00:52:00.070
kann, dass man halt sagt, okay,

00:52:00.690 --> 00:52:02.470
also alles, was so in die Richtung Style

00:52:02.470 --> 00:52:03.670
kann, also diese

00:52:03.670 --> 00:52:06.470
Generative Adversarial Networks

00:52:06.470 --> 00:52:08.430
geht, dass man sagt, okay, man hat jetzt hier ein Bild

00:52:08.430 --> 00:52:10.370
von, weiß ich nicht, irgendeiner Kirche oder so und das hätte

00:52:10.370 --> 00:52:12.170
man jetzt gerne in einem anderen Stil und dann

00:52:12.170 --> 00:52:14.430
muddelt es das Ding halt irgendwie um oder man hätte

00:52:14.430 --> 00:52:16.270
jetzt gerne irgendwie da einen Baum

00:52:16.270 --> 00:52:18.230
davor oder solche Sachen.

00:52:18.410 --> 00:52:19.650
Ja, das wird dann auch sehr spannend.

00:52:19.790 --> 00:52:21.790
Aber ist wahrscheinlich jetzt noch nicht wirklich verwendbar.

00:52:21.790 --> 00:52:23.930
Ich stelle mir solche Dinge vor, du beschreibst eine Szene in

00:52:23.930 --> 00:52:25.690
Worten. Ja, das gibt es auch.

00:52:25.990 --> 00:52:28.370
Und es generiert dir dann tatsächlich

00:52:28.370 --> 00:52:30.610
daraus dein Gedankenuniversum

00:52:30.610 --> 00:52:32.050
oder sowas. Du könntest zum Beispiel

00:52:32.050 --> 00:52:34.130
schreiben, ich hätte gerne eine Kirche mit so und so

00:52:34.130 --> 00:52:35.950
vielen Fenstern und einem langen Gang und 15

00:52:35.950 --> 00:52:37.590
reinen Bänken. Ja?

00:52:37.930 --> 00:52:40.010
Ja, genau, das gab es schon.

00:52:40.710 --> 00:52:41.790
So à la Holodeck,

00:52:42.110 --> 00:52:43.290
dass du eben dann wirklich nur,

00:52:43.990 --> 00:52:45.670
ich weiß ja nicht mehr, wie das Programm hieß,

00:52:45.790 --> 00:52:53.550
Aber es war wirklich so, okay, ich habe einen Tisch, da sind vier Stühle dran, da sind noch eine Serialenschlüssel obendrauf.

00:52:54.250 --> 00:52:56.730
Das wird dir dann mega, mega, mega krass interessant.

00:52:56.890 --> 00:53:05.290
Also wenn du das dann hinbekommst mit sowas wie der Unreal Engine und dann halt das augmentiert, eine virtuelle Realität auf irgendeine Brille projizieren kannst,

00:53:05.410 --> 00:53:12.790
die das in, weiß ich nicht, pro Auge 8K darstellt und in, bitte nicht 24, sondern in 60 FPS oder sowas dann in live.

00:53:12.890 --> 00:53:14.490
Und dann kannst du dir deine eigene Realität

00:53:14.490 --> 00:53:16.590
zusammenreden, weil die KI, mit der du

00:53:16.590 --> 00:53:18.530
redest, das in mehr oder weniger

00:53:18.530 --> 00:53:20.750
Echtzeit dann als Darstellung

00:53:20.750 --> 00:53:21.990
bauen kann. Wow.

00:53:21.990 --> 00:53:23.910
Ja gut, die baut das dann halt so, wie sie das

00:53:23.910 --> 00:53:25.910
von ihren Trainingssorten her kennen, so wie du dir das

00:53:25.910 --> 00:53:27.910
vorstellst. Ja, aber das kann man ja

00:53:27.910 --> 00:53:29.730
dann anklären. Das ist ja dann der Trick,

00:53:29.830 --> 00:53:31.210
dass man halt dann irgendwie selber

00:53:31.210 --> 00:53:34.050
ein bisschen modifiziert und dann Streams baut.

00:53:34.390 --> 00:53:35.710
Ich habe gerade noch mal geguckt, wo das herkommt.

00:53:36.130 --> 00:53:37.190
Es gibt es von OpenAI,

00:53:37.350 --> 00:53:39.230
gibt es so ein Ding, das nennt sich

00:53:39.230 --> 00:53:40.650
Dolly

00:53:40.650 --> 00:53:42.490
oder Doll-E.

00:53:43.130 --> 00:53:44.310
Das ist auch von dem Namen her

00:53:44.310 --> 00:53:46.290
angelehnt an Wall-E.

00:53:47.090 --> 00:53:47.750
An diesen

00:53:47.750 --> 00:53:50.010
Pixar-Film.

00:53:50.590 --> 00:53:52.750
Und das macht halt eben Text zu Bildern

00:53:52.750 --> 00:53:54.490
und so. Und das ist auch sehr, also

00:53:54.490 --> 00:53:56.510
die Demos hier sehen super aus, aber das Problem

00:53:56.510 --> 00:53:58.330
ist natürlich, die sind auch dann so ausgewählt,

00:53:58.430 --> 00:54:00.410
dass das halt natürlich nicht gut funktioniert.

00:54:00.410 --> 00:54:02.310
Genau, das Ding halt dann zu bauen, diese Komplexität

00:54:02.310 --> 00:54:04.430
in diesen 3D-Modellen, die halt mehr sind

00:54:04.430 --> 00:54:06.210
als irgendwie nur zwei Bilder, sondern die halt dann

00:54:06.210 --> 00:54:08.330
tatsächlich eine ganze Szenerie mit den ganzen physikalischen

00:54:08.330 --> 00:54:10.350
Eigenheiten dieser Rigs und

00:54:10.350 --> 00:54:12.410
die da drin stecken und ich weiß nicht,

00:54:12.450 --> 00:54:14.310
was da noch, also du hast jetzt gesagt, also okay, ich habe

00:54:14.310 --> 00:54:16.170
jetzt ein 3D-Modell, das ist ja so das erste,

00:54:16.430 --> 00:54:18.270
dann ist das mit einem Rig gefüllt und dann

00:54:18.270 --> 00:54:20.670
wird das irgendwie texturiert

00:54:20.670 --> 00:54:22.110
und beleuchtet irgendwie,

00:54:22.290 --> 00:54:24.330
ja, und dann

00:54:24.330 --> 00:54:26.190
irgendwie platziert in anderen,

00:54:26.470 --> 00:54:28.190
mit anderen Objekten in Interaktion gesetzt

00:54:28.190 --> 00:54:30.210
und sowas, also das sind ja schon irgendwie so

00:54:30.210 --> 00:54:30.590
mehrere

00:54:30.590 --> 00:54:33.990
Komplexitätsschichten übereinander, die alle für sich

00:54:33.990 --> 00:54:36.170
schon schwierig

00:54:36.170 --> 00:54:38.290
genug sind, ja, also um darüber nachzudenken

00:54:38.290 --> 00:54:40.190
und also in der Realität zu platzieren, wenn ich jetzt

00:54:40.190 --> 00:54:42.130
irgendwie die Realität mir anschaue und isolieren

00:54:42.130 --> 00:54:43.990
möchte, dann bin ich da ja alleine

00:54:43.990 --> 00:54:45.510
schon sehr gut beschäftigt, glaube ich.

00:54:46.610 --> 00:54:47.590
Ja, genau.

00:54:49.250 --> 00:54:50.170
Es nimmt halt

00:54:50.170 --> 00:54:51.910
sehr stark, starke

00:54:51.910 --> 00:54:54.090
Komplexität an. Je mehr du

00:54:54.090 --> 00:54:55.730
dahin zufügst, desto

00:54:55.730 --> 00:54:58.090
ja, mehr muss man

00:54:58.090 --> 00:55:00.190
halt hinterher sein, das alles ordentlich aufzusplitten

00:55:00.190 --> 00:55:02.070
und... Aber wenn das halt geht und das alles mit

00:55:02.070 --> 00:55:03.050
Python ist, finde ich natürlich sehr cool.

00:55:04.490 --> 00:55:05.870
Dass das wirklich möglich ist,

00:55:05.950 --> 00:55:07.570
also sowas mit... Also es

00:55:07.570 --> 00:55:09.450
weiß ich gar nicht, ist diese

00:55:10.190 --> 00:55:12.470
Renderer, den es da gibt, von der

00:55:12.470 --> 00:55:14.610
Engine ist der auch, also

00:55:14.610 --> 00:55:16.350
von der Unreal Engine auch Python

00:55:16.350 --> 00:55:17.090
getrieben?

00:55:18.570 --> 00:55:20.730
Ne, also dieser Renderer

00:55:20.730 --> 00:55:22.570
von Unreal Engine, das ist wirklich

00:55:22.570 --> 00:55:24.190
interner C-Code, der

00:55:24.190 --> 00:55:26.290
das da betreibt.

00:55:26.910 --> 00:55:28.730
Unreal Engine lässt sich aber auch inzwischen

00:55:28.730 --> 00:55:30.610
mit Python auch steuern. Also es gibt

00:55:30.610 --> 00:55:32.670
halt tatsächlich so einen Rapper oder sowas, der halt sagt,

00:55:32.790 --> 00:55:34.810
okay. Genau. Ich glaube auch mit Lua übrigens.

00:55:34.810 --> 00:55:36.490
Also falls

00:55:36.490 --> 00:55:38.930
da Ambitionen sind.

00:55:40.190 --> 00:55:43.030
Aber Game-Engines

00:55:43.030 --> 00:55:44.930
müssen einfach auf C-Code eigentlich

00:55:44.930 --> 00:55:46.170
gehen, weil

00:55:46.170 --> 00:55:48.810
das ist einfach viel zu langsam,

00:55:48.950 --> 00:55:50.750
was du mit Python da erreichen könntest.

00:55:51.270 --> 00:55:53.330
Das würde niemals

00:55:53.330 --> 00:55:55.290
60 FPS

00:55:55.290 --> 00:55:55.830
erreichen.

00:55:56.950 --> 00:55:58.210
Also kann ich mir nicht vorstellen.

00:55:58.210 --> 00:56:00.010
Ich meine, es gibt natürlich so Sachen wie

00:56:00.010 --> 00:56:01.570
PyGame zum Beispiel,

00:56:02.110 --> 00:56:04.230
mit dem man sich so sein eigenes kleines Python-Game

00:56:04.230 --> 00:56:05.070
zusammenschreiben kann.

00:56:06.370 --> 00:56:08.070
Ich weiß aber nicht, wie

00:56:08.070 --> 00:56:10.430
Finder-3D-Grafik

00:56:10.430 --> 00:56:11.210
mit drin ist.

00:56:12.290 --> 00:56:13.410
Na, nee, das ist...

00:56:13.410 --> 00:56:15.350
Da müsste man jetzt den Herrn Spielmann fragen, der

00:56:15.350 --> 00:56:17.990
da ein bisschen tiefer drin ist mit seinem Steam.

00:56:18.830 --> 00:56:20.050
Aber, ja,

00:56:20.110 --> 00:56:22.090
es ist aber trotzdem sehr spannend, also was man damit

00:56:22.090 --> 00:56:24.250
halt machen kann, wenn du sagst, halt, das Unreal Engine

00:56:24.250 --> 00:56:25.590
dafür, dass man C braucht.

00:56:25.970 --> 00:56:27.650
Was ist denn das, was die Geschwindigkeit dann

00:56:27.650 --> 00:56:30.030
gibt? Ist das das Rechnen mit irrationalen Zahlen?

00:56:30.090 --> 00:56:31.190
Nee, nee, nee, also

00:56:31.190 --> 00:56:33.870
das, was Python... Also ich kann zum Beispiel

00:56:33.870 --> 00:56:35.770
sagen, was Python langsam macht. Also Dinge, die

00:56:35.770 --> 00:56:37.690
in Python sehr langsam sind, im Vergleich zum Beispiel

00:56:37.690 --> 00:56:40.150
Also C ist halt sowas wie ein Funktionsaufruf

00:56:40.150 --> 00:56:42.150
oder halt ein Methodenaufruf.

00:56:42.150 --> 00:56:43.870
Weil ich einfach Reference-Counting machen muss, oder warum?

00:56:44.070 --> 00:56:46.050
Nee, deswegen, weil das halt, das ist

00:56:46.050 --> 00:56:47.970
halt richtig langsam, weil das ist halt nicht

00:56:47.970 --> 00:56:50.090
einfach nur, irgendwie in

00:56:50.090 --> 00:56:51.890
C, wenn das dann halt kopiert ist, das ist halt

00:56:51.890 --> 00:56:54.170
irgendwie... Ein SM der Anweisung, springe nach.

00:56:54.310 --> 00:56:55.710
Ja, so, genau, und dann,

00:56:55.930 --> 00:56:57.910
ja, das ist halt in Python nicht so, da ist halt,

00:56:58.090 --> 00:56:59.890
da passiert halt ganz, ganz viel. Der ganze Overhead,

00:57:00.050 --> 00:57:01.730
der halt nicht steckt, also den ganzen Name spät mit

00:57:01.730 --> 00:57:03.890
fressen muss. Ungefähr halt tausendmal so langsam.

00:57:04.170 --> 00:57:06.090
Ja, also wenn du in C einen Funktionsaufruf

00:57:06.090 --> 00:57:08.030
machst und machst in Python ein, dann ist ja in Python

00:57:08.030 --> 00:57:10.110
halt so, als würdest du das in C tausendmal machen.

00:57:10.290 --> 00:57:11.730
Also weil ich tatsächlich irgendwie diesen ganzen

00:57:11.730 --> 00:57:14.050
Wraparound machen muss, weil ich die ganzen

00:57:14.050 --> 00:57:16.030
Namespaces mitfressen muss, weil ich die ganzen

00:57:16.030 --> 00:57:18.130
Variablen mitessen muss, weil ich die ganze Syntaktik

00:57:18.130 --> 00:57:19.190
Schoko mitessen muss, oder warum?

00:57:19.890 --> 00:57:22.510
Deswegen, weil das nicht ein Funktionsaufruf

00:57:22.510 --> 00:57:24.030
wie in C ist, sondern das ist halt

00:57:24.030 --> 00:57:25.490
was viel, viel komplizierteres in Python.

00:57:25.990 --> 00:57:27.810
Weil das halt auch was viel dynamischeres ist.

00:57:29.270 --> 00:57:30.010
Weil das halt

00:57:30.010 --> 00:57:31.930
eine interpretierte Sprache ist. Das ist halt

00:57:31.930 --> 00:57:33.410
nicht einfach nur das.

00:57:34.430 --> 00:57:35.930
Also das ist halt einfach was anderes.

00:57:36.090 --> 00:57:39.310
Und das wirst du auch nicht los.

00:57:39.550 --> 00:57:41.990
Aber die Frage ist halt, ob du das machen musst unbedingt.

00:57:42.430 --> 00:57:44.770
Du kannst natürlich auch einfach...

00:57:44.770 --> 00:57:47.090
Wenn ich tausendmal schnell einen Rechner hätte, wäre das zum Beispiel schon mal zu mich egal.

00:57:47.650 --> 00:57:48.170
Ja, gut.

00:57:49.310 --> 00:57:51.330
Aber den Unterschied wirst du immer merken.

00:57:53.210 --> 00:57:57.770
Aber wenn du jetzt irgendwas ausrechnest oder so,

00:57:57.770 --> 00:58:01.670
da ist es eigentlich im Grunde nicht mehr...

00:58:01.670 --> 00:58:03.210
Da hast du diesen Unterschied halt nicht.

00:58:04.430 --> 00:58:05.790
Also wenn ich in NumPy, weiß ich nicht,

00:58:05.850 --> 00:58:07.650
zum Beispiel eben zwei Matrizen multipliziere oder so,

00:58:08.650 --> 00:58:11.090
das wird schwer, das in C genauso schnell hinzukriegen.

00:58:11.230 --> 00:58:13.830
Und das ist in Python ja auch einfach hingeschrieben.

00:58:13.990 --> 00:58:16.070
Da schreibst du halt dann A at B oder sowas,

00:58:16.130 --> 00:58:17.430
wenn du A mit B multiplizierst.

00:58:18.210 --> 00:58:20.150
Es ist halt sehr schön, einfach das hinzuschreiben

00:58:20.150 --> 00:58:22.390
und es ist halt trotzdem schneller, als wenn du es in C machen würdest.

00:58:23.290 --> 00:58:26.510
Außer du machst es halt wirklich, ja, aber dann,

00:58:27.430 --> 00:58:30.190
also in C ist es halt deutlich schwerer hinzuschreiben,

00:58:31.050 --> 00:58:33.150
weil da musst du halt dann gucken,

00:58:33.290 --> 00:58:34.930
dass das halt...

00:58:34.930 --> 00:58:37.150
Ja, du musst die ganze Implementierung selber bauen, muss dann auch so gut sein,

00:58:37.230 --> 00:58:39.030
dass du halt die Implementierung so super

00:58:39.030 --> 00:58:40.050
selbst baust, wie das halt...

00:58:40.050 --> 00:58:42.730
Du musst halt dann auch dem Compiler sagen, jetzt hier bitte

00:58:42.730 --> 00:58:45.090
ich weiß, was ich tue, benutze

00:58:45.090 --> 00:58:47.190
die SIMD-Instructions und

00:58:47.190 --> 00:58:49.110
ja,

00:58:49.330 --> 00:58:51.170
wenn ich jetzt hier

00:58:51.170 --> 00:58:52.990
eine Vorschleife hinschreibe, dann meine ich nicht

00:58:52.990 --> 00:58:54.410
wirklich eine Vorschleife, das darf auch,

00:58:55.070 --> 00:58:56.910
die Reihenfolge darf sich auch ändern und

00:58:56.910 --> 00:58:58.870
keine Ahnung und wenn du das alles machst, dann

00:58:58.870 --> 00:58:59.770
ist es vielleicht genauso schnell.

00:59:00.610 --> 00:59:00.790
Aber

00:59:00.790 --> 00:59:04.230
insofern, also für manche Sachen

00:59:04.230 --> 00:59:06.170
ist es in Python überhaupt nicht schwer, genauso schnell

00:59:06.170 --> 00:59:08.130
zu sein. Für andere Sachen ist es

00:59:08.130 --> 00:59:10.090
halt, ja, ist es halt schwer.

00:59:11.590 --> 00:59:12.170
Wobei man

00:59:12.170 --> 00:59:13.670
da eigentlich dann auch mal

00:59:13.670 --> 00:59:16.190
insofern drum rumkommt, als man

00:59:16.190 --> 00:59:18.130
dann sagen kann, okay, entweder man nimmt halt so was

00:59:18.130 --> 00:59:19.930
wie so ein Just-in-Time-Compiler, so

00:59:19.930 --> 00:59:21.670
ein Number oder man nimmt halt

00:59:21.670 --> 00:59:23.310
ähm

00:59:23.310 --> 00:59:26.590
man nimmt halt

00:59:26.590 --> 00:59:28.130
ein Subset von Python, halt

00:59:28.130 --> 00:59:30.030
zum Beispiel so was wie Cytan, kompiliert das

00:59:30.030 --> 00:59:31.930
nach C und dann

00:59:31.930 --> 00:59:33.930
in ein C-Modul

00:59:33.930 --> 00:59:35.950
und dann kopiert man das C-Modul und importiert es

00:59:35.950 --> 00:59:38.030
wieder zurück. Und dann ist es halt

00:59:38.030 --> 00:59:39.850
auch schnell. Also es gibt da schon

00:59:39.850 --> 00:59:41.730
Möglichkeiten, das hinzukriegen. Die Frage ist,

00:59:41.950 --> 00:59:43.690
naja gut, wenn man jetzt so eine Engine hat,

00:59:43.790 --> 00:59:45.610
die irgendwie... Ja, du würdest eigentlich

00:59:45.610 --> 00:59:46.790
das machen wie Game Engine.

00:59:47.890 --> 00:59:49.750
Also ich glaube schon, dass man eine

00:59:49.750 --> 00:59:52.030
Game Engine in Python schracken könnte. Das geht schon.

00:59:52.750 --> 00:59:54.030
Die Frage ist...

00:59:55.970 --> 00:59:58.030
Ja...

00:59:59.210 --> 01:00:00.890
Hm, ich weiß nicht, ob das jemand schon mal

01:00:00.890 --> 01:00:02.910
gemacht hat. Ja, wahrscheinlich nicht. Also das ist

01:00:02.910 --> 01:00:04.950
halt immer auch der größte

01:00:04.950 --> 01:00:06.930
Flaw, den Python

01:00:06.930 --> 01:00:09.270
immer so hat, wenn man die Leute unterhält, dass das halt für 3D-Sachen

01:00:09.270 --> 01:00:11.290
bis jetzt nicht so gut geeignet

01:00:11.290 --> 01:00:12.890
gewesen ist. Weiß ich gar nicht.

01:00:13.250 --> 01:00:15.090
Oder was meinst du mit 3D-Sachen? Ja, weil es

01:00:15.090 --> 01:00:16.970
halt diese Bibliotheken dafür einfach nicht gibt.

01:00:17.170 --> 01:00:18.930
Also wenn ich jetzt in C oder C++ irgendwelche

01:00:18.930 --> 01:00:20.910
Frameworks habe, die ja vorher schon

01:00:20.910 --> 01:00:22.910
prädestiniert sind

01:00:22.910 --> 01:00:25.030
und dass es in Python einfach nicht den einfachen

01:00:25.030 --> 01:00:26.990
Rapper gibt, den man so gewohnt ist, wenn man das in der

01:00:26.990 --> 01:00:28.890
Hand hat, sondern dass es einfach viel, viel länger dauert,

01:00:28.950 --> 01:00:30.310
wenn man das anders macht.

01:00:30.490 --> 01:00:32.830
Also für mich wäre die Frage halt, was du genau meinst mit

01:00:32.830 --> 01:00:34.590
was da gemacht werden soll.

01:00:35.230 --> 01:00:36.650
Weil, wie gesagt...

01:00:36.650 --> 01:00:38.850
Vielleicht möchte ich tatsächlich sowas haben wie eine Figur, die animiert

01:00:38.850 --> 01:00:40.870
wird. Ja, wenn die jetzt im Raum drehen soll

01:00:40.870 --> 01:00:42.270
oder so. Live Bilder sehen.

01:00:43.050 --> 01:00:44.790
Genau. Ja, denke ich, kannst

01:00:44.790 --> 01:00:46.770
du in Python wahrscheinlich ganz genau so schnell

01:00:46.770 --> 01:00:48.490
machen wie... Oder ich würde sagen, wenn

01:00:48.490 --> 01:00:50.850
die Zeit, die du brauchst, um das

01:00:50.850 --> 01:00:52.630
hinzuschreiben, da bist du in Python wahrscheinlich

01:00:52.630 --> 01:00:53.250
deutlich schneller

01:00:53.250 --> 01:00:56.710
und bist halt wahrscheinlich auch

01:00:56.710 --> 01:00:58.630
vom Code her schneller. Ja, aber das ist doch eine

01:00:58.630 --> 01:01:02.490
Ne, ich glaube, ich weiß es nicht.

01:01:04.370 --> 01:01:06.330
Mein Eindruck ist immer, es ist irgendwie

01:01:06.330 --> 01:01:08.070
relativ schwierig, mit Python

01:01:08.070 --> 01:01:10.270
irgendwie zur Grafikkarte zu kommen.

01:01:11.250 --> 01:01:12.150
Das ist irgendwie so.

01:01:12.910 --> 01:01:14.430
Also, ja, es gibt

01:01:14.430 --> 01:01:16.570
Anbindungen so für PyOpenGL

01:01:16.570 --> 01:01:17.310
oder sowas.

01:01:17.690 --> 01:01:19.250
Geht bestimmt, aber

01:01:19.250 --> 01:01:21.350
ich weiß nicht, so direkt

01:01:21.350 --> 01:01:24.330
die Grafikkarte anzusprechen, fällt mir

01:01:24.330 --> 01:01:26.210
jetzt persönlich nichts ein, wo man

01:01:26.210 --> 01:01:27.670
sagen könnte, okay, das ist

01:01:27.670 --> 01:01:29.890
dass man

01:01:29.890 --> 01:01:31.990
sich da eine Bibliothek reinholt, wo man

01:01:31.990 --> 01:01:33.950
denkt, okay. Ja, ich kenne es halt nur aus dem

01:01:33.950 --> 01:01:35.870
Machine Learning Bereich, da gibt es halt

01:01:35.870 --> 01:01:38.430
CUDA, das ist halt diese Bibliothek

01:01:38.430 --> 01:01:39.210
oder die

01:01:39.210 --> 01:01:40.870
von Nvidia

01:01:40.870 --> 01:01:43.290
und damit geht das, aber ich meine,

01:01:43.890 --> 01:01:45.830
normalerweise gibt man damit halt keine Bilder aus, sondern man

01:01:45.830 --> 01:01:46.630
berechnet halt irgendwie

01:01:46.630 --> 01:01:49.850
keine Ahnung, eben sowas wie Matrizenmultiplikation

01:01:49.850 --> 01:01:50.230
oder so.

01:01:52.710 --> 01:01:53.710
Ja, aber da geht das,

01:01:53.710 --> 01:01:55.730
aber ja, es stimmt schon, es ist ätzend.

01:01:55.810 --> 01:01:57.730
Man muss halt diese ganzen Bibliotheken

01:01:57.730 --> 01:01:59.810
installieren. Vielleicht muss das jemand mal neu bauen.

01:02:00.490 --> 01:02:02.030
Das kannst du leider.

01:02:02.110 --> 01:02:03.110
Das ist leider nicht so einfach.

01:02:04.530 --> 01:02:05.430
Ja, das ist auch das Problem.

01:02:05.590 --> 01:02:07.890
Zum Beispiel auch für diese ganzen Machine Learning-Geschichten

01:02:07.890 --> 01:02:09.550
kann man nur NVIDIA-Chips verwenden,

01:02:09.670 --> 01:02:11.950
weil es gibt nur für NVIDIA diese Bibliotheken.

01:02:12.850 --> 01:02:13.810
Und ich glaube,

01:02:13.870 --> 01:02:15.690
die AMD-Chips sind halt auch ähnlich

01:02:15.690 --> 01:02:16.950
leistungsfähig im Grunde,

01:02:17.750 --> 01:02:19.970
aber kann man einfach nicht verwenden, weil es gibt diese Bibliotheken

01:02:19.970 --> 01:02:20.490
nicht dafür.

01:02:22.490 --> 01:02:23.750
Und das ist ja jetzt auch schon

01:02:23.750 --> 01:02:25.970
Jahre sind Leute dabei, das zu versuchen

01:02:25.970 --> 01:02:27.890
und es klappt halt nicht. Daher, ich

01:02:27.890 --> 01:02:29.110
fürchte, das ist nicht so ganz einfach.

01:02:30.330 --> 01:02:31.230
Es gibt dann so ein bisschen

01:02:31.230 --> 01:02:33.930
äh, es gibt

01:02:33.930 --> 01:02:35.950
von Intel, gibt es das irgendwie

01:02:35.950 --> 01:02:37.910
äh,

01:02:38.350 --> 01:02:39.410
PlateML

01:02:39.410 --> 01:02:41.730
oder so, womit man dann auch irgendwie

01:02:41.730 --> 01:02:43.770
das auf anderen, also

01:02:43.770 --> 01:02:45.790
ich weiß nicht genau, also es funktioniert aber eigentlich alles

01:02:45.790 --> 01:02:47.850
letztlich nicht wirklich. Da braucht man halt

01:02:47.850 --> 01:02:49.670
diese Unterstützung dafür

01:02:49.670 --> 01:02:51.730
und das gibt es halt nur für Nvidia eigentlich

01:02:51.730 --> 01:02:53.690
in richtig gut. Und es ist

01:02:53.690 --> 01:02:55.270
total hakelig, das zu installieren immer.

01:02:55.950 --> 01:02:57.790
Und wenn man halt nicht aufpasst, ist es halt langsam

01:02:57.790 --> 01:03:00.170
hinterher. Also es ist

01:03:00.170 --> 01:03:01.970
ziemlich fies.

01:03:02.050 --> 01:03:03.790
Also man hat da nicht wirklich Lust drauf?

01:03:04.990 --> 01:03:05.850
Aufgrund, warum man

01:03:05.850 --> 01:03:06.710
dann Sprachen wechselt?

01:03:08.550 --> 01:03:08.990
Naja,

01:03:09.070 --> 01:03:10.690
für Machine Learning gibt es ja auch keine Alternative.

01:03:10.990 --> 01:03:12.230
Welche Sprache willst du da wechseln?

01:03:12.270 --> 01:03:13.190
Da gibt es ja auch nichts anderes.

01:03:16.970 --> 01:03:17.410
Nee.

01:03:19.110 --> 01:03:20.290
Es gibt wirklich nichts anderes.

01:03:21.730 --> 01:03:22.970
Ja, du kannst halt

01:03:22.970 --> 01:03:24.850
C++ verwenden, aber

01:03:24.850 --> 01:03:26.550
Yay!

01:03:28.190 --> 01:03:29.070
Wie ist denn das?

01:03:32.490 --> 01:03:33.690
Ja, aber wenn es um die

01:03:33.690 --> 01:03:35.630
Ausgabe geht, ja, nee, keine Ahnung. Also ich habe

01:03:35.630 --> 01:03:37.790
ehrlich gesagt auch, also Pygame

01:03:37.790 --> 01:03:38.510
gibt es, ja.

01:03:39.510 --> 01:03:41.630
Nee, ich weiß nicht, ob es da irgendwas gibt.

01:03:42.770 --> 01:03:43.710
Aber ich denke mal,

01:03:43.750 --> 01:03:45.830
im Grunde müsste man das machen können. Kann man eine Grafikkarte

01:03:45.830 --> 01:03:47.470
nicht einfach irgendwas in den Hauptspeicher legen,

01:03:47.550 --> 01:03:49.370
in den Grafikkartenspeicher legen und dann sagen,

01:03:49.770 --> 01:03:51.470
zeig das mal an oder so, das müsste doch eigentlich gehen.

01:03:51.730 --> 01:03:53.430
Das müssen wir ausprobieren.

01:03:54.230 --> 01:03:54.550
Aha.

01:03:55.930 --> 01:03:56.610
Keine Ahnung.

01:03:57.530 --> 01:03:58.170
Viel Spaß.

01:03:59.150 --> 01:04:01.990
Mach mal deine Grafikkarte kaputt und erzähl uns davon.

01:04:02.810 --> 01:04:02.950
Ja.

01:04:03.990 --> 01:04:06.190
Kann man die Grafikkarte mit sowas kaputt kriegen?

01:04:06.270 --> 01:04:07.610
Also wenn man sie zu heiß kriegt oder sowas?

01:04:10.090 --> 01:04:10.570
Ja.

01:04:11.370 --> 01:04:11.610
Ja.

01:04:13.050 --> 01:04:13.790
Mach es probieren.

01:04:14.290 --> 01:04:14.770
Ja.

01:04:16.210 --> 01:04:18.050
Ja, ja, ja, ja. Interessant.

01:04:21.730 --> 01:04:24.790
Ja, aber was wäre das denn,

01:04:24.950 --> 01:04:26.490
wenn du dir was wünschen könntest,

01:04:26.950 --> 01:04:28.450
weiß ich nicht, was dein Leben irgendwie

01:04:28.450 --> 01:04:29.370
einfacher machen würde,

01:04:29.950 --> 01:04:32.470
jetzt sozusagen in

01:04:32.470 --> 01:04:33.090
diesem

01:04:33.090 --> 01:04:37.010
Anwendungsfall

01:04:37.010 --> 01:04:38.650
für Python. Was ist

01:04:38.650 --> 01:04:40.370
das, was dir da am meisten Schmerzen macht,

01:04:40.550 --> 01:04:42.450
oder wo man am einfachsten

01:04:42.450 --> 01:04:43.310
irgendwas verbessern könnte?

01:04:45.610 --> 01:04:46.170
Grundsätzlich

01:04:46.170 --> 01:04:47.330
Python 3.

01:04:48.130 --> 01:04:49.830
Okay, das ist ja fast schon traurig.

01:04:50.430 --> 01:04:50.950
Ja.

01:04:51.730 --> 01:04:53.110
Ja, also

01:04:53.110 --> 01:04:55.530
ich freue mich schon auf Pfeifen 3.10 und denke mir so,

01:04:55.570 --> 01:04:57.410
ey, alles, was danach oder davor war,

01:04:57.450 --> 01:04:59.190
das will ich nicht mehr benutzen. Und das ist halt erst

01:04:59.190 --> 01:05:00.230
irgendwann, dann kommt das raus im August.

01:05:01.170 --> 01:05:03.330
Ja, ihr glaubt gar nicht, wie sehr ich mich auf

01:05:03.330 --> 01:05:04.230
F-Strings freue.

01:05:06.350 --> 01:05:09.370
Ich glaube, mein Code hat immer noch nicht ein.

01:05:09.630 --> 01:05:10.410
Also das

01:05:10.410 --> 01:05:12.530
ist schon echt langsam haarig.

01:05:14.910 --> 01:05:15.790
Was noch?

01:05:17.830 --> 01:05:19.210
Was würde mich noch freuen?

01:05:21.730 --> 01:05:41.170
Es gibt schon Ansätze, dass die ganze Industrie sich quasi standardisiert auf gewisse Bibliotheken, die dann auch nach und nach geupdatet werden, sprich, dass man sich alle einigen auf eine bestimmte Compiler-Version, bestimmte Python-Version, bestimmte andere Bibliotheken.

01:05:41.570 --> 01:05:51.170
Und wenn sich da alle dran halten würden, das wäre super, dass man nicht so die ganze Zeit zwischen diesen Inkompatibilitäten hin und her joggen würde.

01:05:51.170 --> 01:05:53.210
Ja, du hast gesagt, man kann nicht einfach irgendwie ein Pie-Inf installieren

01:05:53.210 --> 01:05:55.250
und dann irgendwie seine Version pinnen,

01:05:55.350 --> 01:05:57.290
sondern muss halt irgendwie mit den Restriktionen

01:05:57.290 --> 01:05:59.090
jedes einzelnen Programms,

01:05:59.190 --> 01:06:01.070
der Compiler des jeden einzelnen Programms

01:06:01.070 --> 01:06:01.810
da arbeiten und

01:06:01.810 --> 01:06:04.810
dann seine Skripte quasi immer

01:06:04.810 --> 01:06:06.650
da

01:06:06.650 --> 01:06:08.770
downgraden oder sowas, wenn man dann irgendwie auf so ein

01:06:08.770 --> 01:06:10.790
altes Python stößt. Das hätte ich mir furchtbar vor.

01:06:10.830 --> 01:06:12.950
Ich weiß nicht, ob ich Lust hätte, in Python 2 irgendwas zu machen.

01:06:13.830 --> 01:06:15.190
Ja, also

01:06:15.190 --> 01:06:17.250
nur um noch mal

01:06:17.250 --> 01:06:18.450
so einen kleinen Ausflug zu machen.

01:06:18.590 --> 01:06:20.750
Es war eigentlich bis jetzt immer in Maya so,

01:06:21.290 --> 01:06:21.490
dass

01:06:21.490 --> 01:06:24.250
dadurch, dass Python eingebettet war,

01:06:24.490 --> 01:06:26.930
musste Python den Kompilierer benutzen,

01:06:26.930 --> 01:06:28.190
den Maya benutzt.

01:06:28.470 --> 01:06:30.530
Das ist aber nicht der Standard-C-Kompilierer,

01:06:30.790 --> 01:06:32.590
den Python normalerweise benutzt, sondern

01:06:32.590 --> 01:06:33.910
eine ältere Version.

01:06:34.950 --> 01:06:41.310
Sprich, alle PIP-Module, die eine DLL in sich hatten, wie NumPy oder so,

01:06:42.490 --> 01:06:44.750
haben erst mal auf Anhieb nicht funktioniert in Maya,

01:06:45.790 --> 01:06:48.990
weil die Compiler einfach nicht miteinander kompatibel waren.

01:06:49.670 --> 01:06:56.310
Das heißt, wenn du NumPy benutzen willst, musst du es dir erst mal mit dem anderen Compiler durchkompilieren,

01:06:56.650 --> 01:06:59.870
bevor du es dann in Maya benutzen kannst.

01:07:00.130 --> 01:07:01.550
Ja, okay, anstrengend.

01:07:03.690 --> 01:07:04.590
Absolut, ja.

01:07:04.950 --> 01:07:16.390
Und ich würde mir auch wünschen, dass die Branche mal so ein bisschen auf Python-Standards umsteigen würde, wie Pip und PyEnv und alles andere.

01:07:16.390 --> 01:07:23.850
Weil wir sind quasi noch sehr, dadurch, dass die Python-Interpreter eingebettet sind, sehr angewiesen auf die Programme selbst.

01:07:24.750 --> 01:07:28.810
Also wir machen sehr viel mit Environment-Variablen zum Beispiel.

01:07:29.910 --> 01:07:31.930
typischerweise so Python-Path.

01:07:32.350 --> 01:07:33.230
Habt ihr vielleicht schon mal gehört.

01:07:33.230 --> 01:07:35.170
Wenn man das vorher setzt, dann

01:07:35.170 --> 01:07:37.510
findet halt der Interpreter in den entsprechenden

01:07:37.510 --> 01:07:38.830
Pfaden dann die Module.

01:07:40.550 --> 01:07:40.910
Aber

01:07:40.910 --> 01:07:43.290
ja, wir müssen uns die halt selbst

01:07:43.290 --> 01:07:45.110
zusammenklauben und selbst dann so ein bisschen

01:07:45.110 --> 01:07:45.830
unsere

01:07:45.830 --> 01:07:49.330
Hard reinhacken, alles injecten und dann

01:07:49.330 --> 01:07:51.390
läuft es. Genau. Aber habt ihr das mal

01:07:51.390 --> 01:07:52.750
probiert? Ich meine,

01:07:53.150 --> 01:07:55.290
ich stelle mir dann vor, genau, das Problem ist sozusagen,

01:07:55.550 --> 01:07:56.290
dass

01:07:56.290 --> 01:07:59.270
deine, eben sowas

01:07:59.270 --> 01:08:01.170
wie NumPy oder so ein Paket installiert hast,

01:08:01.170 --> 01:08:03.390
das muss halt kompatibel sein zu dem

01:08:03.390 --> 01:08:05.330
Python-Interpreter,

01:08:05.710 --> 01:08:07.170
der in der Software drinsteckt,

01:08:07.870 --> 01:08:08.830
mit der du das verwenden willst.

01:08:08.910 --> 01:08:10.410
Du brauchst halt sozusagen

01:08:10.410 --> 01:08:13.610
dein Maya-NumPy

01:08:13.610 --> 01:08:15.270
für Maya und du brauchst

01:08:15.270 --> 01:08:17.110
dein, weiß ich nicht, Houdini-NumPy

01:08:17.110 --> 01:08:19.270
und musst das dann halt

01:08:19.270 --> 01:08:21.150
umbiegen. Habt ihr mal probiert, das mit

01:08:21.150 --> 01:08:23.610
Conda-Paketen zu machen, weil in Conda-Paketen

01:08:23.610 --> 01:08:25.050
kann man solche Sachen ja auch

01:08:25.050 --> 01:08:25.990
mit reinbauen.

01:08:27.070 --> 01:08:28.810
Das geht in PIP nicht, aber mit

01:08:28.810 --> 01:08:30.370
Conda müsste das eigentlich funktionieren.

01:08:31.850 --> 01:08:32.870
Ich hatte bis jetzt noch

01:08:32.870 --> 01:08:34.950
nicht viel Zeit, mich in Conda einzuarbeiten.

01:08:35.190 --> 01:08:36.490
Also ich habe es hier und da schon gehört,

01:08:36.630 --> 01:08:38.490
viel Gutes auch schon von gehört,

01:08:39.410 --> 01:08:40.970
aber vielleicht ist das mal ein guter Tipp.

01:08:40.970 --> 01:08:42.730
Also in Conda kann man sagen, welchen C-Compiler

01:08:42.730 --> 01:08:44.150
dahinter verwendet werden soll?

01:08:44.330 --> 01:08:45.750
Nee, du kannst Binärpakete installieren.

01:08:47.130 --> 01:08:48.670
Und du kannst vor allen Dingen auch

01:08:48.670 --> 01:08:50.310
Nicht-Python-Pakete installieren auch.

01:08:50.870 --> 01:08:52.650
Was auch sehr praktisch ist. Also PPX.

01:08:53.470 --> 01:08:54.810
Ja, du kannst sogar so weit

01:08:54.810 --> 01:08:55.790
gehen, deine eigene libc mit

01:08:55.790 --> 01:08:58.670
mitzubringen. Also du kannst halt quasi

01:08:58.670 --> 01:09:00.630
viel mehr mitbringen, als

01:09:00.630 --> 01:09:02.030
in einem PIP-Paket ginge.

01:09:03.230 --> 01:09:04.630
Und natürlich hast du dann

01:09:04.630 --> 01:09:06.550
immer noch das Problem, dass Conda auch überhaupt gar nicht

01:09:06.550 --> 01:09:07.870
dafür gedacht ist, sozusagen,

01:09:08.430 --> 01:09:10.050
dass man halt

01:09:10.050 --> 01:09:12.850
Ja, gab es

01:09:12.850 --> 01:09:13.670
oberflächlich eine Mithaltenwelt.

01:09:14.050 --> 01:09:16.510
Also dieser Use Case,

01:09:16.590 --> 01:09:18.550
dass du unterschiedliche

01:09:18.550 --> 01:09:20.250
Versionen von einem Paket hast

01:09:20.250 --> 01:09:21.910
für unterschiedliche

01:09:21.910 --> 01:09:25.710
Interpreter

01:09:25.710 --> 01:09:27.370
in, die eingebettet sind.

01:09:27.870 --> 01:09:29.450
Dafür ist es auch nicht so wirklich gedacht.

01:09:31.490 --> 01:09:33.610
Das ist schon ziemlich bizarr.

01:09:33.650 --> 01:09:35.390
Ich glaube, du kommst daran nicht vorbei, dass du halt einen

01:09:35.390 --> 01:09:37.190
Python nimmst pro Programm, das du da verwendest.

01:09:37.350 --> 01:09:39.390
Und die Frage ist halt nur, wie du quasi

01:09:39.390 --> 01:09:41.390
die geringste gemeinsame Basis findest.

01:09:41.490 --> 01:09:43.390
Irgendwie das, was halt dann auf allen

01:09:43.390 --> 01:09:44.970
diesen Programmen dann irgendwie läuft.

01:09:45.150 --> 01:09:47.270
Das ist halt so das Nervige, wenn dann halt irgendwelche

01:09:47.270 --> 01:09:48.610
Python 2 Sachen drunter stecken.

01:09:48.770 --> 01:09:51.330
Ich weiß nicht, kann das sein,

01:09:51.390 --> 01:09:53.030
dass ihr das dann tatsächlich neu kompilieren

01:09:53.030 --> 01:09:54.970
müsst, wenn ihr das

01:09:54.970 --> 01:09:56.990
verwenden wollt und dann halt

01:09:56.990 --> 01:09:59.030
wartet, wenn das...

01:10:00.690 --> 01:10:02.830
Also gerade von NumPy

01:10:02.830 --> 01:10:05.010
wäre das so, genau. Man müsste es

01:10:05.010 --> 01:10:05.830
neu kompilieren, ja.

01:10:06.850 --> 01:10:08.310
Genau, weil man könnte ja das auch irgendwie so

01:10:08.310 --> 01:10:10.750
in allen für die entsprechenden

01:10:10.750 --> 01:10:12.910
Interpreter kompilierten Versionen irgendwo hinlegen und dann

01:10:12.910 --> 01:10:15.030
Tricks machen mit den Umgebungsvariablen

01:10:15.730 --> 01:10:16.870
oder so, dass dann halt das richtige Ding

01:10:16.870 --> 01:10:18.650
genommen wird, wenn man das...

01:10:18.650 --> 01:10:21.090
Also wir würden es vorkompilieren

01:10:21.090 --> 01:10:22.730
und dann umliegen, ja. Genau.

01:10:23.310 --> 01:10:23.670
Also

01:10:23.670 --> 01:10:27.250
ein sehr großer Teil unserer Bibliothek

01:10:27.250 --> 01:10:28.510
liegt auch mit auf dem Server

01:10:28.510 --> 01:10:31.070
und wird auch quasi die ganze Zeit

01:10:31.070 --> 01:10:33.050
dynamisch einfach nur hinverlinkt, damit auch

01:10:33.050 --> 01:10:34.930
absolut sichergestellt ist, dass

01:10:34.930 --> 01:10:36.730
jeder den gleichen Code ausführt.

01:10:37.050 --> 01:10:38.690
Ah, ja, ja. Also

01:10:38.690 --> 01:10:40.390
es gibt

01:10:40.390 --> 01:10:42.830
also teilweise

01:10:42.830 --> 01:10:44.470
gibt es schon so Sachen, dass so

01:10:44.470 --> 01:10:47.170
ja, Code quasi runtergezogen

01:10:47.170 --> 01:10:48.970
wird auf die lokalen Maschinen und von

01:10:48.970 --> 01:10:51.030
da aus dann executed wird, aber

01:10:51.030 --> 01:10:53.550
ein sehr großer Teil unserer Pipeline

01:10:53.550 --> 01:10:55.450
liegt halt immer noch auf dem Server zentral,

01:10:57.070 --> 01:10:57.170
was

01:10:57.170 --> 01:10:59.650
gut und

01:10:59.650 --> 01:11:01.670
schlecht zugleich ist, weil

01:11:01.670 --> 01:11:03.390
einerseits kannst du

01:11:03.390 --> 01:11:05.570
wahnsinnig schnell Sachen verändern,

01:11:05.830 --> 01:11:07.650
was manchmal einfach notwendig ist,

01:11:08.150 --> 01:11:09.590
andererseits ist es irgendwie

01:11:09.590 --> 01:11:11.410
immer die Operation am offenen Herzen.

01:11:11.630 --> 01:11:13.670
Und es geht dann vor allem gleichzeitig kaputt, wenn es kaputt geht, ne?

01:11:14.070 --> 01:11:14.430
Ja.

01:11:16.430 --> 01:11:16.790
Ja.

01:11:17.730 --> 01:11:19.350
Also, ähm...

01:11:19.350 --> 01:11:20.690
Also patchst ihr dann wirklich auch die Module

01:11:20.690 --> 01:11:22.010
dann selber quasi?

01:11:22.910 --> 01:11:24.670
Genau. Also wir haben ja

01:11:24.670 --> 01:11:25.570
unsere eigenen Module,

01:11:26.350 --> 01:11:28.730
die quasi mit unserer Logik

01:11:28.730 --> 01:11:30.670
da funktionieren und die patchen wir natürlich

01:11:30.670 --> 01:11:32.390
komplett selbst.

01:11:32.890 --> 01:11:34.210
Für Third-Party-Sachen,

01:11:34.390 --> 01:11:36.790
die versuchen wir weitestgehend

01:11:36.790 --> 01:11:38.730
so gut es geht unangetastet zu lassen,

01:11:38.930 --> 01:11:40.690
nur manchmal hier und da vielleicht so ein bisschen

01:11:40.690 --> 01:11:41.370
zu biegen.

01:11:42.130 --> 01:11:44.110
So in der Art.

01:11:46.230 --> 01:11:46.630
Aber

01:11:46.630 --> 01:11:48.810
ja, wir wollen uns

01:11:48.810 --> 01:11:50.930
jetzt auch nicht ans Bein binden, da unsere

01:11:50.930 --> 01:11:52.770
keine Ahnung, eigene Version

01:11:52.770 --> 01:11:54.530
jedes Mal hochzuziehen,

01:11:54.750 --> 01:11:55.770
nur wenn ein Update kam.

01:11:57.210 --> 01:11:57.530
Aber

01:11:57.530 --> 01:12:00.910
ja, eigentlich

01:12:00.910 --> 01:12:02.890
ist mir das auch immer so ein kleiner Dorn

01:12:02.890 --> 01:12:04.870
im Auge, dass das da alles immer so live ist

01:12:04.870 --> 01:12:06.850
auf dem Server und wir

01:12:06.850 --> 01:12:08.710
immer so ein Git-Repository updaten

01:12:08.710 --> 01:12:10.490
und irgendwie

01:12:10.490 --> 01:12:14.650
naja, ich habe noch keinen

01:12:14.650 --> 01:12:16.290
wirklich guten Weg drum herum gefunden.

01:12:16.590 --> 01:12:18.910
Vielleicht gibt es ja ein paar größere Experten,

01:12:19.110 --> 01:12:20.690
die hier auch mal hinkommen möchten

01:12:20.690 --> 01:12:22.590
und sich erklären möchten, wie das funktioniert.

01:12:25.870 --> 01:12:29.590
Aber genau, also ja, diese Software-Installations-Story

01:12:29.590 --> 01:12:31.010
bei Python ist halt echt so ein Problem.

01:12:31.530 --> 01:12:32.890
Das ist irgendwie nicht gut gelöst.

01:12:33.150 --> 01:12:33.850
Das ist immer furchtbar.

01:12:33.990 --> 01:12:36.250
Also habt ihr mal versucht, jemandem, der kein Python kann,

01:12:36.730 --> 01:12:38.630
eine vernünftige, lauffähige Python-Version,

01:12:38.730 --> 01:12:40.170
die auch irgendwie selber ein bisschen was kann,

01:12:40.170 --> 01:12:42.710
ohne jetzt irgendwie per Web-Installer

01:12:42.710 --> 01:12:45.910
irgendwie auf der Software was zu installieren?

01:12:46.210 --> 01:12:46.950
also integriert gut.

01:12:48.110 --> 01:12:50.170
Also, dass er selbst programmieren kann

01:12:50.170 --> 01:12:51.890
oder dass er selbst ein kleines Programm bekommt?

01:12:51.990 --> 01:12:53.530
Nein, dass er selber programmieren kann, also dass er

01:12:53.530 --> 01:12:55.650
eine vernünftige Umgebung hat, dass er einen Interpreter hat,

01:12:56.030 --> 01:12:58.190
am besten noch mit einer vernünftigen Shell und integriert

01:12:58.190 --> 01:13:00.110
und mit vernünftigen Paketen und nicht jetzt

01:13:00.110 --> 01:13:01.750
irgendwie installiert in alle Pfade

01:13:01.750 --> 01:13:03.990
dieser jeweiligen Systeme, sondern

01:13:03.990 --> 01:13:06.110
nur die gute Version

01:13:06.110 --> 01:13:07.990
oder sowas. Also eigentlich sowas wie

01:13:07.990 --> 01:13:10.090
du hast ein PyInf installiert und

01:13:10.090 --> 01:13:11.810
du hast dann die Pfade

01:13:11.810 --> 01:13:13.670
vernünftig gesetzt und

01:13:13.670 --> 01:13:15.570
du hast dann ein PIP aktualisiert

01:13:15.570 --> 01:13:17.410
vielleicht noch die Shell dazu,

01:13:17.670 --> 01:13:19.530
aktualisiert mit einem Paketmanager, irgendwie so.

01:13:21.090 --> 01:13:22.390
Also ich habe mal angefangen,

01:13:22.630 --> 01:13:26.110
so ein Developer-Environment-Skript zusammenzubauen,

01:13:26.250 --> 01:13:29.750
einfach für Leute, wenn ein neuer Developer kommt,

01:13:29.870 --> 01:13:31.290
zum Onboarden.

01:13:33.110 --> 01:13:35.910
Ich habe irgendwann, das ist so 50% fertig,

01:13:35.910 --> 01:13:39.510
also 50% musst du immer noch selber machen an der Stelle.

01:13:42.250 --> 01:13:45.250
Aber grundsätzlich finde ich das eine interessante Idee,

01:13:45.570 --> 01:13:48.050
so Leute relativ schnell

01:13:48.050 --> 01:13:49.630
auch reinzubekommen, aber

01:13:49.630 --> 01:13:52.150
ja, wie du schon sagst, es ist halt

01:13:52.150 --> 01:13:53.910
nicht so ganz einfach. Du musst halt alles

01:13:53.910 --> 01:13:56.210
selbst zusammenziehen, alles an die richtigen Stellen

01:13:56.210 --> 01:13:58.210
tun und... Unheimlich aufwendig

01:13:58.210 --> 01:14:00.110
und das ändert sich halt alles so schnell. Das heißt, du musst halt

01:14:00.110 --> 01:14:01.850
fliegen, weil du kommst halt irgendwie nicht hinterher

01:14:01.850 --> 01:14:03.470
und dass

01:14:03.470 --> 01:14:06.210
das nicht gut funktioniert und auf unterschiedlichen

01:14:06.210 --> 01:14:08.210
Systemen mit unterschiedlichen Rechteverwaltungssystemen

01:14:08.750 --> 01:14:10.290
die dann irgendwie installiert sind, das ist alles

01:14:10.290 --> 01:14:11.710
furchtbar anstrengend

01:14:11.710 --> 01:14:13.570
und das ist nie so, dass es irgendwie

01:14:13.570 --> 01:14:15.970
also jetzt auf verschiedenen Systemen

01:14:15.970 --> 01:14:17.930
Python nicht so integriert, dass man einfach sagen kann,

01:14:17.990 --> 01:14:19.350
hey cool, es ist da und

01:14:19.350 --> 01:14:22.030
renn mal los. Das ist wahrscheinlich auch

01:14:22.030 --> 01:14:23.790
der Grund, weil ich glaube, die ganzen Programme, die du da

01:14:23.790 --> 01:14:25.290
verwendest, sind hauptsächlich auf Windows, ne?

01:14:26.250 --> 01:14:27.610
Ne, hauptsächlich auf Linux.

01:14:27.730 --> 01:14:29.330
Auf Linux, tatsächlich. Es gibt

01:14:29.330 --> 01:14:32.230
ein paar Ausnahmen,

01:14:33.390 --> 01:14:34.350
Photoshop

01:14:34.350 --> 01:14:35.790
zum Beispiel, aber

01:14:35.790 --> 01:14:38.010
Aber warum verwenden die denn alle einen

01:14:38.010 --> 01:14:40.210
so veralteten Python-Elektriker? Das verstehe ich dann wieder nicht.

01:14:42.810 --> 01:14:44.130
Also wir arbeiten

01:14:44.130 --> 01:14:46.170
firmenintern auch noch mit CentOS

01:14:46.170 --> 01:14:48.510
7. Auch da ist noch

01:14:48.510 --> 01:14:50.910
Python 2 Default installiert.

01:14:53.630 --> 01:14:54.630
Und wie gesagt,

01:14:54.730 --> 01:14:56.510
die Branche ist unheimlich konservativ,

01:14:56.650 --> 01:14:58.490
was ihre eigenen Applikationen

01:14:58.490 --> 01:15:00.370
angeht. Also mach um Gottes

01:15:00.370 --> 01:15:01.270
Willen nichts kaputt.

01:15:02.210 --> 01:15:04.410
Die meisten User sind sowieso

01:15:04.410 --> 01:15:06.570
schon angepisst

01:15:06.570 --> 01:15:08.710
genug von den ganzen Bugs, die sie immer mit reinbekommen

01:15:08.710 --> 01:15:09.530
in die neuen Versionen.

01:15:11.610 --> 01:15:12.590
Aber ja, jetzt sind

01:15:12.590 --> 01:15:14.410
die meisten halt mal ins kalte Wasser gesprungen.

01:15:15.810 --> 01:15:16.150
Oh ja,

01:15:16.290 --> 01:15:17.430
davon haben wir einige.

01:15:19.430 --> 01:15:20.650
Ja, es gibt ja

01:15:20.650 --> 01:15:21.950
diesen schönen Trend von

01:15:21.950 --> 01:15:23.810
jetzt einfach schon die nächste

01:15:23.810 --> 01:15:26.450
Jahreszahl immer an die Software-Version mit

01:15:26.450 --> 01:15:28.210
ranpacken. Also Maya

01:15:28.210 --> 01:15:30.510
2022 und so. Und naja,

01:15:30.910 --> 01:15:32.470
böse Zungen aus der Branche sagen dann

01:15:32.470 --> 01:15:34.770
immer, ja, das ist die Jahreszahl, wo du es verwenden kannst.

01:15:39.170 --> 01:15:39.610
Ja.

01:15:41.450 --> 01:15:42.570
Ja, also

01:15:42.570 --> 01:15:51.610
Also es gibt durchaus Hotfix-Patches, die sind 1,5 Gigabyte groß.

01:15:53.030 --> 01:15:55.730
Also mit sowas schlagen wir uns auch gerne mal rum.

01:15:57.410 --> 01:15:57.850
Re-Nerd.

01:16:00.890 --> 01:16:01.570
Tja.

01:16:02.750 --> 01:16:03.970
Ja, ja, ja.

01:16:05.290 --> 01:16:09.670
Ansonsten, um so kleine Programme an User oder Leute rauszubekommen,

01:16:09.770 --> 01:16:12.090
kann ich echt Pi-Installer

01:16:12.090 --> 01:16:13.350
nur empfehlen.

01:16:13.490 --> 01:16:15.250
Das ist wirklich, wirklich cool.

01:16:16.330 --> 01:16:17.390
Machst du aus einer

01:16:17.390 --> 01:16:19.690
kleinen Applikation einen einzigen

01:16:19.690 --> 01:16:21.110
Pfeil im Endeffekt

01:16:21.110 --> 01:16:23.670
und packst

01:16:23.670 --> 01:16:25.750
den irgendwo hin. Funktioniert.

01:16:26.610 --> 01:16:27.710
Derjenige braucht keinen Python

01:16:27.710 --> 01:16:28.570
installiert haben.

01:16:30.010 --> 01:16:31.750
Der packt alles zusammen, was er so

01:16:31.750 --> 01:16:33.650
braucht. Ich meine, klar gibt es da hier und da

01:16:33.650 --> 01:16:34.670
noch so ein paar kleine Kniffe.

01:16:34.670 --> 01:16:35.930
Der macht ein ganzes Boulder, oder?

01:16:36.070 --> 01:16:38.830
Der macht halt nicht so eine Excel mit external dependencies.

01:16:39.050 --> 01:16:40.970
da muss man so ein bisschen noch fummeln und

01:16:40.970 --> 01:16:42.790
so Specification-Dateien irgendwie

01:16:42.790 --> 01:16:44.450
konfigurieren und sowas, damit er es macht.

01:16:45.110 --> 01:16:46.010
Genau, aber

01:16:46.010 --> 01:16:48.970
was er so Default macht, ist eigentlich schon relativ

01:16:48.970 --> 01:16:50.790
easy peasy.

01:16:51.230 --> 01:16:52.950
Klar, je komplexer die

01:16:52.950 --> 01:16:54.810
Bibliotheken sind, die du benutzt,

01:16:54.890 --> 01:16:56.330
desto schwieriger wird das Ganze

01:16:56.330 --> 01:16:58.430
da zurecht zu fummeln.

01:17:00.130 --> 01:17:01.290
Aber im Endeffekt,

01:17:02.630 --> 01:17:03.290
ich habe

01:17:03.290 --> 01:17:04.830
sehr gute Erfahrungen damit gemacht.

01:17:05.130 --> 01:17:07.070
Wir haben auch so drei, vier, fünf

01:17:07.070 --> 01:17:08.690
kleine Applikationen in der

01:17:08.690 --> 01:17:10.270
in der Firma.

01:17:11.290 --> 01:17:13.110
Die funktionieren damit tadellos.

01:17:13.670 --> 01:17:16.490
je kleiner es ist, desto besser natürlich.

01:17:16.710 --> 01:17:18.570
Ich meine, du kannst natürlich da auch

01:17:18.570 --> 01:17:19.830
sonst was reinknallen.

01:17:21.390 --> 01:17:24.370
Dann dauert das natürlich auch

01:17:24.370 --> 01:17:26.310
fünf Minuten, bis das Programm offen ist, aber

01:17:26.310 --> 01:17:27.910
braucht ja keiner.

01:17:29.070 --> 01:17:29.990
Oh, das erinnere ich mich, denn ich habe

01:17:29.990 --> 01:17:31.890
ein kleines Programm, das ich auch mit

01:17:31.890 --> 01:17:33.710
Pineseller gepackt habe, als Binary geschrieben,

01:17:34.390 --> 01:17:35.930
das nichts anderes macht, als

01:17:35.930 --> 01:17:37.990
YouTube zu fragen, hey, gib mir mal diesen

01:17:37.990 --> 01:17:39.570
Link zu diesem Suchbegriff.

01:17:41.190 --> 01:17:41.950
Dafür muss man

01:17:41.950 --> 01:17:43.870
YouTube-API-Key bestellen und

01:17:43.870 --> 01:17:45.850
ich muss jetzt ein Video einreichen,

01:17:46.770 --> 01:17:47.890
der meinen Workflow

01:17:47.890 --> 01:17:49.890
beschreibt, damit ich diesen API-Key ein Kontingent

01:17:49.890 --> 01:17:50.190
bekomme.

01:17:52.050 --> 01:17:53.430
Ja, traurig.

01:17:53.930 --> 01:17:55.370
Ja, ein Screencast soll ich machen.

01:17:57.250 --> 01:17:57.390
Ja.

01:17:58.190 --> 01:17:59.690
Aber das nur so als Beispiel für Sachen, die

01:17:59.690 --> 01:18:01.750
mein Pineseller tun. Das war eine ziemliche

01:18:01.750 --> 01:18:02.370
Querverknüpfung.

01:18:04.370 --> 01:18:04.990
Tja, ja.

01:18:05.530 --> 01:18:06.650
Ja, ja, ich bin

01:18:06.650 --> 01:18:09.910
da habe ich

01:18:09.910 --> 01:18:11.590
dann auch nichts mehr von gehört. Es gab da noch andere

01:18:11.590 --> 01:18:13.370
Ansätze. Es gab zum Beispiel irgendwie den Ansatz

01:18:13.370 --> 01:18:14.870
Nuitka gibt es noch.

01:18:15.470 --> 01:18:17.670
Genau, das gibt es noch. Aber das war auch

01:18:17.670 --> 01:18:19.770
nicht das Hippe. Es gab irgendwie noch das Hippe.

01:18:19.910 --> 01:18:20.690
Wie hieß das denn noch?

01:18:21.970 --> 01:18:23.650
Das hat irgendwie das in Rust

01:18:23.650 --> 01:18:24.830
geschriebene...

01:18:24.830 --> 01:18:27.710
Ja, ich habe es auch

01:18:27.710 --> 01:18:29.290
gehört, aber ja.

01:18:29.590 --> 01:18:31.110
Rust installieren und so weiter.

01:18:31.110 --> 01:18:32.070
Ja, ich weiß nicht.

01:18:32.790 --> 01:18:33.670
Ich habe die vergessen.

01:18:35.550 --> 01:18:36.590
Und dann gab es auch noch das

01:18:36.590 --> 01:18:38.230
von... PyOxidizer?

01:18:38.350 --> 01:18:40.110
Ja, genau, das ist richtig, genau.

01:18:40.930 --> 01:18:42.310
Ja, ja, aber da habe ich

01:18:42.310 --> 01:18:44.470
auch lange nichts mehr von gehört.

01:18:44.950 --> 01:18:46.150
Es funktioniert alles immer so mittel,

01:18:46.430 --> 01:18:46.870
ehrlich gesagt.

01:18:48.130 --> 01:18:50.510
Dass irgendwie eins von den Dingen so unkompliziert mit jedem Paket

01:18:50.510 --> 01:18:52.070
funktionieren würde in jeder Größe und

01:18:52.070 --> 01:18:54.490
mir so eine Single-Binary-File

01:18:54.490 --> 01:18:56.210
baut, die auf einem System läuft, das kein Python

01:18:56.210 --> 01:18:58.330
konzentriert hätte, mit allem drin und

01:18:58.330 --> 01:19:00.410
ohne Probleme und alles direkt mit

01:19:00.410 --> 01:19:01.990
einpackt, was dazugehört mit den Dependencies,

01:19:02.650 --> 01:19:04.470
weil ich irgendwie nur auf, weiß ich nicht, eine PyProject

01:19:04.470 --> 01:19:05.410
oder eine Requirement zeige.

01:19:06.590 --> 01:19:07.410
Gibt es noch nicht.

01:19:08.230 --> 01:19:10.970
Ja, das ist wahrscheinlich einfach nicht so einfach.

01:19:10.970 --> 01:19:11.630
Ja, warum denn nicht?

01:19:15.510 --> 01:19:17.010
Sollen wir darüber noch eine Folge aufnehmen,

01:19:17.150 --> 01:19:18.090
warum das so einfach ist?

01:19:19.110 --> 01:19:19.770
Hört sich was an.

01:19:21.970 --> 01:19:22.630
Ja, ja, ja.

01:19:23.090 --> 01:19:23.930
Ich weiß gar nicht, wie das

01:19:23.930 --> 01:19:25.350
hier

01:19:25.350 --> 01:19:28.750
Marc-André Limburg hatte ja auch so

01:19:28.750 --> 01:19:29.950
ein Ding geschrieben.

01:19:30.590 --> 01:19:31.970
Das packt auch so Pakete.

01:19:32.110 --> 01:19:34.110
Ja, und der macht da ganz schön viele Tricks.

01:19:34.230 --> 01:19:36.690
der packt das Ganze dann in so ein ZIP-Archiv,

01:19:37.510 --> 01:19:38.270
benutzt dann die

01:19:38.270 --> 01:19:40.530
Import, dass man daraus halt

01:19:40.530 --> 01:19:41.810
Dinge importieren kann in Python.

01:19:42.390 --> 01:19:44.450
Dann strippt er dann auch irgendwie die ganzen Kramen raus,

01:19:44.550 --> 01:19:46.110
damit das halt deutlich kleiner wird.

01:19:46.290 --> 01:19:48.390
Dann wird das halt irgendwie, ist das nur noch ein paar Megabyte groß.

01:19:49.270 --> 01:19:50.510
Aber das ist, das sah auch

01:19:50.510 --> 01:19:52.190
schon, das sah auch schon nach

01:19:52.190 --> 01:19:53.870
fortgeschrittener Magie aus.

01:19:53.870 --> 01:19:56.050
Ja, das ist schon auch trotzdem, immerhin 20 MB

01:19:56.050 --> 01:19:57.810
oder so? Nee, nee, weniger.

01:19:58.090 --> 01:19:59.810
16? Nee, 4, 5.

01:20:00.270 --> 01:20:01.950
Und zwar komplette Standard-

01:20:01.950 --> 01:20:02.850
Bibliothek mit drin. Ja, okay.

01:20:04.230 --> 01:20:05.550
Also das ist schon

01:20:05.550 --> 01:20:07.370
sehr klein. Aber funktioniert, glaube ich,

01:20:07.370 --> 01:20:09.030
auch nur auf Linux.

01:20:12.090 --> 01:20:12.690
Tja, tja.

01:20:13.290 --> 01:20:14.910
Ich glaube, wir sind beim Pick der Woche angelangt.

01:20:15.290 --> 01:20:16.830
Ja, wollen wir. Können wir gerne.

01:20:17.470 --> 01:20:19.050
Ich habe mir was Grafisches überlegt.

01:20:19.590 --> 01:20:21.210
Ja. Da habe ich ja

01:20:21.210 --> 01:20:22.950
letzte Woche ein bisschen reingeschaut. Und zwar die Konsole grafisch.

01:20:23.090 --> 01:20:25.330
Rich. Fand ich sehr cool.

01:20:25.430 --> 01:20:27.130
Das habe ich mit euch tatsächlich aufgestanden,

01:20:27.210 --> 01:20:29.230
ein bisschen ausprobiert. Und das

01:20:29.230 --> 01:20:31.290
macht wunderbar die Konsole farbig

01:20:31.290 --> 01:20:32.970
und tolle Sachen.

01:20:33.190 --> 01:20:34.670
Inspection. Ich weiß nicht, ob ihr

01:20:34.670 --> 01:20:35.730
Ice Cream mitbekommen hattet.

01:20:38.090 --> 01:20:38.770
Man konnte

01:20:38.770 --> 01:20:40.370
irgendwie Ice Cream importieren.

01:20:41.030 --> 01:20:42.630
Und dann hast du ein...

01:20:42.630 --> 01:20:43.930
Ach, die Debugger-Geschichte.

01:20:44.490 --> 01:20:46.510
Ein Mini-Debugger, der quasi nichts anderes macht,

01:20:46.630 --> 01:20:48.650
als ein DeepExterne. Aber da habe ich mir gedacht,

01:20:48.710 --> 01:20:49.690
nee, also Don Dock Rich,

01:20:50.750 --> 01:20:52.910
das macht genau dasselbe. Auch so ein Inspect quasi,

01:20:53.030 --> 01:20:54.650
der einem in einer Tabellenform

01:20:54.650 --> 01:20:56.590
ausgibt, alle nutzbaren,

01:20:56.750 --> 01:20:58.230
coolen Methoden einer

01:20:58.230 --> 01:21:00.410
Klasse zum Beispiel oder einer Methode,

01:21:00.410 --> 01:21:01.970
alles aufrufbar.

01:21:02.590 --> 01:21:03.150
Das ist echt cool.

01:21:03.190 --> 01:21:05.270
und alles farbige Output in der Konsole

01:21:05.270 --> 01:21:07.050
einfach importieren und man kann quasi

01:21:07.050 --> 01:21:07.870
seinen eigenen Python

01:21:07.870 --> 01:21:10.710
Interpreter damit

01:21:10.710 --> 01:21:13.430
pimpen, indem man das einfach lädt und installiert

01:21:13.430 --> 01:21:15.190
quasi live und schon ist alles

01:21:15.190 --> 01:21:16.610
farbig und cool und sieht schön aus.

01:21:16.690 --> 01:21:17.530
Geht doch rein, dango rein.

01:21:19.550 --> 01:21:20.850
Ja, nice.

01:21:22.330 --> 01:21:23.250
Ja, ist wirklich

01:21:23.250 --> 01:21:23.990
ziemlich cool.

01:21:26.630 --> 01:21:27.110
Ich

01:21:27.110 --> 01:21:29.210
würde eins nehmen, das natürlich

01:21:29.210 --> 01:21:30.850
so ein bisschen in meine Branche fällt,

01:21:30.850 --> 01:21:31.770
nennt sich

01:21:31.770 --> 01:21:35.550
Invisible Watermark.

01:21:36.730 --> 01:21:38.250
Da kann man

01:21:38.250 --> 01:21:40.130
also Watermarken

01:21:40.130 --> 01:21:41.330
kann man ja Bilder eigentlich

01:21:41.330 --> 01:21:44.010
relativ easy, sprich du kannst einfach so

01:21:44.010 --> 01:21:46.270
ein großes, fettes Firmenlogo

01:21:46.270 --> 01:21:47.970
quasi so halbtransparent

01:21:47.970 --> 01:21:50.050
über Bilder legen und dann weiß jeder, okay

01:21:50.050 --> 01:21:51.490
nee, gehört dem oder dem.

01:21:53.450 --> 01:21:53.950
Was aber

01:21:53.950 --> 01:21:56.210
interessant ist, dass du quasi unsichtbar

01:21:56.210 --> 01:21:57.490
Bilder zu Watermarken

01:21:57.490 --> 01:22:00.070
dass du quasi einfach

01:22:00.070 --> 01:22:02.130
nur verschiedene Pixel, so die ganz leichten

01:22:02.130 --> 01:22:04.130
Nuancen hier anders machst, dass du am Ende

01:22:04.130 --> 01:22:06.050
da quasi deine

01:22:06.050 --> 01:22:07.910
Daten reinpackst.

01:22:08.830 --> 01:22:10.070
Das hat aber den Nachteil

01:22:10.070 --> 01:22:11.510
meistens, dass wenn du

01:22:11.510 --> 01:22:13.390
das Bild verkleinerst oder

01:22:13.390 --> 01:22:16.030
keine Ahnung, spiegelst oder sonst irgendwas,

01:22:16.170 --> 01:22:17.550
dass dann diese Daten verloren gehen.

01:22:17.550 --> 01:22:19.690
Aber diese eine Python-Bibliothek

01:22:19.690 --> 01:22:20.670
kann das

01:22:20.670 --> 01:22:22.710
so machen,

01:22:23.490 --> 01:22:24.890
dass du das Bild komplett noch

01:22:24.890 --> 01:22:27.490
vermuscheln kannst, Bilder, Sachen rausziehen

01:22:27.490 --> 01:22:27.910
kannst,

01:22:28.090 --> 01:22:30.250
wie auch immer

01:22:30.250 --> 01:22:32.390
und dein Watermark bleibt erhalten.

01:22:32.730 --> 01:22:34.750
Also man muss aktiv diese Peißmöglichkeit benutzen,

01:22:34.850 --> 01:22:36.690
damit das Watermark erhalten bleibt oder ist das

01:22:36.690 --> 01:22:38.790
auch für Dritte, die dann quasi

01:22:38.790 --> 01:22:40.630
das Bild bearbeiten, das Watermark noch drin?

01:22:44.790 --> 01:22:46.710
Ich bin mir noch nicht sicher. Ich habe es

01:22:46.710 --> 01:22:48.710
leider noch nicht ausprobiert. Ich fand es nur mega

01:22:48.710 --> 01:22:50.350
cool. Es ist glaube ich auch

01:22:50.350 --> 01:22:52.330
wieder

01:22:52.330 --> 01:22:54.570
Artificial Intelligence

01:22:54.570 --> 01:22:55.850
hier basierend.

01:22:57.070 --> 01:22:58.830
Okay, das hört sich aber so an, als müsste man das

01:22:58.830 --> 01:22:59.610
selber aktiv

01:22:59.610 --> 01:23:02.870
anschauen. Es gab sehr coole Bilder

01:23:02.870 --> 01:23:03.330
dazu.

01:23:05.190 --> 01:23:06.690
Das linken wir in den Shownotes.

01:23:08.910 --> 01:23:09.990
Kann man mal reingucken.

01:23:11.710 --> 01:23:12.810
Ja, ich habe immer das Problem

01:23:12.810 --> 01:23:14.630
mit diesen ganzen, also ich meine,

01:23:14.730 --> 01:23:16.790
Steganografie funktioniert ja auch in gewisser Weise so.

01:23:18.830 --> 01:23:20.470
Ich habe das aber auch lange nicht mehr verfolgt.

01:23:20.470 --> 01:23:22.070
Also das letzte Mal, dass ich da irgendwie drauf geguckt habe,

01:23:22.130 --> 01:23:24.250
was da so passiert, ist halt schon lange her

01:23:24.250 --> 01:23:26.150
und das, was der zentrale Punkt, der mich immer

01:23:26.150 --> 01:23:27.530
dabei gestört hat,

01:23:28.290 --> 01:23:29.810
ist, dass man,

01:23:30.350 --> 01:23:31.690
sagen wir mal so, wenn man jetzt Verschlüsselung hat,

01:23:32.130 --> 01:23:34.090
dann brauchst du halt einen Schlüssel, um rauszukriegen, was

01:23:34.090 --> 01:23:36.090
da drin steht. Und bei diesen

01:23:36.090 --> 01:23:37.970
Geschichten kriegst du es halt auch ohne,

01:23:38.110 --> 01:23:40.210
also was mich interessieren

01:23:40.210 --> 01:23:41.270
würde, ist, ob es sowas gibt.

01:23:42.290 --> 01:23:44.170
Du kannst erst sehen, ob eine Information

01:23:44.170 --> 01:23:45.070
oder ein Watermark

01:23:45.070 --> 01:23:48.550
in dem Bild oder in irgendeinem

01:23:48.550 --> 01:23:50.130
Audio oder Video oder sonst was

01:23:50.130 --> 01:23:52.170
drin ist, wenn du den Schlüssel kennst.

01:23:52.170 --> 01:23:53.990
Und sonst kannst du gar nicht rauskriegen,

01:23:54.130 --> 01:23:54.910
dass da irgendwas drin ist.

01:23:55.750 --> 01:23:57.550
Und das Problem ist halt

01:23:57.550 --> 01:23:59.610
immer, das ist halt

01:23:59.610 --> 01:24:01.530
normalerweise nicht so, vielleicht hat sich das auch

01:24:01.530 --> 01:24:03.650
geändert, und du kannst halt immer zumindest

01:24:03.650 --> 01:24:05.350
sehen, was da drin ist. Das heißt, du kannst da nicht

01:24:05.350 --> 01:24:06.790
irgendwelche Informationen drin verstecken.

01:24:08.530 --> 01:24:08.930
Steganografie.

01:24:09.070 --> 01:24:09.210
Ja.

01:24:11.150 --> 01:24:12.930
Und wenn du es halt sozusagen,

01:24:13.250 --> 01:24:15.550
aber immer wenn du halt tatsächlich einfach rauskriegen

01:24:15.550 --> 01:24:16.910
kannst, was da drin ist, ohne

01:24:16.910 --> 01:24:19.350
zuerst einen Schlüssel haben

01:24:19.350 --> 01:24:21.210
zu müssen, kannst du es auch eigentlich

01:24:21.210 --> 01:24:22.410
ja dann wieder entfernen.

01:24:23.770 --> 01:24:25.410
Einmal das, oder du kannst es halt

01:24:25.410 --> 01:24:27.250
auch irgendwie verändern oder du kannst halt auch

01:24:27.250 --> 01:24:29.250
sozusagen Dinge

01:24:29.250 --> 01:24:31.370
daraus lesen, die vielleicht eigentlich gar nicht

01:24:31.370 --> 01:24:33.330
also insofern, ja

01:24:33.330 --> 01:24:35.290
ich meine, um Sachen zu

01:24:35.290 --> 01:24:37.250
markieren, dass sie einem

01:24:37.250 --> 01:24:38.650
gehören oder so, ist wahrscheinlich alles

01:24:38.650 --> 01:24:42.030
ausreichend.

01:24:43.650 --> 01:24:44.090
Ja.

01:24:46.290 --> 01:24:46.970
Ja, ja.

01:24:47.770 --> 01:24:49.170
Ja, ist halt die Frage, wovon man es benutzen möchte.

01:24:52.930 --> 01:24:54.850
Und ich hatte noch eine andere kleine

01:24:54.850 --> 01:24:56.970
Entdeckung. Die ist zwar kein

01:24:56.970 --> 01:24:58.890
Python-Modul, aber ich finde sie

01:24:58.890 --> 01:25:01.010
trotzdem ziemlich cool. Nennt sich

01:25:01.010 --> 01:25:02.690
devdocs.io

01:25:02.690 --> 01:25:03.790
Oh.

01:25:05.470 --> 01:25:05.990
Und

01:25:05.990 --> 01:25:07.710
da...

01:25:07.710 --> 01:25:10.730
Das ist im Grunde genommen

01:25:10.730 --> 01:25:12.930
eine Sammlung

01:25:12.930 --> 01:25:14.930
von Dokumentationen,

01:25:14.930 --> 01:25:16.610
auch ganz verschiedenster Art.

01:25:17.410 --> 01:25:18.810
Also ist nicht nur Python

01:25:18.810 --> 01:25:20.330
drin, ist auch C, C++,

01:25:20.670 --> 01:25:22.930
Angular, you name it.

01:25:24.850 --> 01:25:26.870
Das ist sehr schön aufbereitet,

01:25:27.010 --> 01:25:28.630
ziemlich fix und es macht Spaß,

01:25:28.770 --> 01:25:30.630
da die Dokumentation drin zu lesen.

01:25:33.630 --> 01:25:34.110
Da...

01:25:34.110 --> 01:25:40.510
Hat mir meinen Arbeitsalltag

01:25:40.510 --> 01:25:41.710
ein bisschen versüßt.

01:25:42.170 --> 01:25:43.550
Kann ich empfehlen.

01:25:43.750 --> 01:25:44.210
Sehr schick.

01:25:47.090 --> 01:25:48.130
Mal kurz reingucken.

01:25:48.830 --> 01:25:50.690
Ja, wunderbar. Ne, das sieht gut aus, tatsächlich.

01:25:51.330 --> 01:25:52.630
Und da ist ja echt viel Zeug drin.

01:25:53.470 --> 01:25:54.010
Oh ja.

01:25:54.850 --> 01:25:56.850
Interessant

01:25:56.850 --> 01:25:58.250
Da kann man sich jetzt so ein bisschen

01:25:58.250 --> 01:25:59.910
Favorites machen

01:25:59.910 --> 01:26:02.930
und dann kann man da ratzbatz

01:26:02.930 --> 01:26:04.210
die Suche anschmeißen

01:26:04.210 --> 01:26:06.410
Funktioniert ziemlich cool

01:26:06.410 --> 01:26:07.730
Ja

01:26:07.730 --> 01:26:09.990
Ja, vielen Dank

01:26:09.990 --> 01:26:11.790
Moment, ich hätte hier auch noch einen

01:26:11.790 --> 01:26:12.670
Du hast auch noch einen?

01:26:13.890 --> 01:26:15.710
Ich hätte mich drauf schon mal bedanken

01:26:15.710 --> 01:26:19.190
Und zwar

01:26:19.190 --> 01:26:21.350
hatte ich immer so das Problem

01:26:21.350 --> 01:26:23.410
ich fand ja auch die Fischshell

01:26:23.410 --> 01:26:25.430
so nachdem ZSH

01:26:25.430 --> 01:26:27.650
ja jetzt auf macOS

01:26:27.650 --> 01:26:29.570
irgendwie vorinstalliert ist, ist mir das

01:26:29.570 --> 01:26:31.350
zu mainstreamig geworden. Da muss ich mal was

01:26:31.350 --> 01:26:32.850
Neues probieren. Oh, cool, das ist Fisch.

01:26:33.850 --> 01:26:35.130
Bin mir an der Fischschale gelandet.

01:26:35.210 --> 01:26:37.510
Oh, mein Fisch. Genau, aber da ist

01:26:37.510 --> 01:26:39.250
immer das Problem, dass wenn man jetzt

01:26:39.250 --> 01:26:41.070
die

01:26:41.070 --> 01:26:43.290
PyEnv-VirtualInfs verwendet, weil ich verwende

01:26:43.290 --> 01:26:45.330
normalerweise PyEnv, um halt unterschiedliche

01:26:45.330 --> 01:26:46.390
Python-Interpreter zu installieren,

01:26:47.110 --> 01:26:49.650
oder

01:26:49.650 --> 01:26:51.370
halt die von Poetry, dann funktioniert das

01:26:51.370 --> 01:26:53.230
mit dem Setzen des Prompts

01:26:53.230 --> 01:26:55.230
nicht immer richtig und das ist auch sonst

01:26:55.230 --> 01:26:56.690
irgendwie nicht so schön integriert mit FISH.

01:26:57.230 --> 01:26:59.310
Und man muss da irgendwie fiese Funktionen

01:26:59.310 --> 01:27:01.130
aufrufen und manchmal geht es kaputt und dann

01:27:01.130 --> 01:27:02.430
ist man auf einem anderen Rechner, da geht es auch nicht mehr.

01:27:03.050 --> 01:27:03.870
Alles nicht so schön.

01:27:04.930 --> 01:27:07.110
Da gibt es ein kleines Tool, was

01:27:07.110 --> 01:27:07.490
dem

01:27:07.490 --> 01:27:11.130
Abhilfe schafft und das ist

01:27:11.130 --> 01:27:13.050
Virtual FISH und das ist

01:27:13.050 --> 01:27:14.530
sozusagen genau

01:27:14.530 --> 01:27:17.850
Virtual Env

01:27:17.850 --> 01:27:18.970
Tool

01:27:18.970 --> 01:27:20.970
für FISH und das funktioniert ganz hervorragend.

01:27:21.030 --> 01:27:22.510
Das benutze ich jetzt immer und das ist echt toll.

01:27:22.510 --> 01:27:24.810
Ja, Whichifish mit quasi Search, das ist schon...

01:27:24.810 --> 01:27:26.350
Ja. Und ja,

01:27:26.590 --> 01:27:27.990
muss man benutzen eigentlich.

01:27:29.450 --> 01:27:29.770
Genau.

01:27:31.830 --> 01:27:32.770
Das nutze ich

01:27:32.770 --> 01:27:34.290
sogar auf den Windows-Rechnern.

01:27:37.950 --> 01:27:38.470
Ja.

01:27:40.470 --> 01:27:42.350
Ja, keine Ahnung.

01:27:43.610 --> 01:27:44.130
Doch.

01:27:45.610 --> 01:27:46.390
Also Whichifish ist

01:27:46.390 --> 01:27:47.110
hoch im Kurs.

01:27:49.650 --> 01:27:50.450
Fish hat einige

01:27:50.450 --> 01:27:51.730
coole Plugins, müsst ihr mal reingucken.

01:27:52.510 --> 01:27:56.270
Ja, nee, dann sind wir mit den Picks auch durch.

01:27:56.730 --> 01:27:57.310
Vielen Dank, Jochen.

01:27:57.610 --> 01:27:58.370
Ja, danke, danke.

01:27:58.970 --> 01:28:00.890
Schreibt uns alles, was ihr für uns haltet,

01:28:00.910 --> 01:28:02.310
was ihr doof fandet, was ihr gut fandet,

01:28:02.650 --> 01:28:04.730
an halloatpaisenpodcast.de

01:28:04.730 --> 01:28:07.150
Bis zum nächsten Mal.

01:28:07.510 --> 01:28:08.710
Gute Nacht, bleibt uns gewogen. Tschüss.
