WEBVTT

00:00:00.000 --> 00:00:02.960
<v Dominik>Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast.

00:00:02.960 --> 00:00:04.800
<v Dominik>Heute Jubiläums-Episode 50.

00:00:04.800 --> 00:00:06.080
<v Dominik>Herzlichen Glückwunsch, Jochen.

00:00:06.560 --> 00:00:08.640
<v Jochen>Ja, herzlichen Glückwunsch zurück.

00:00:08.640 --> 00:00:10.400
<v Jochen>50 sind wir schon.

00:00:10.400 --> 00:00:11.120
<v Jochen>Wow.

00:00:11.120 --> 00:00:12.400
<v Dominik>Ja, ganz gut, oder?

00:00:13.040 --> 00:00:18.880
<v Dominik>Wir sprechen heute über Qt und andere grafische Anwendungen in Python und über Mia Plan, das dahin gebaut ist.

00:00:18.880 --> 00:00:20.080
<v Dominik>Und haben den Martin zu Gast.

00:00:20.080 --> 00:00:20.720
<v Dominik>Hi Martin.

00:00:20.720 --> 00:00:21.280
<v Martin>Hallo, hierallo.

00:00:23.200 --> 00:00:23.680
Ja.

00:00:23.920 --> 00:00:24.960
<v Dominik>Wollen wir ein bisschen News machen?

00:00:25.360 --> 00:00:27.680
<v Jochen>Ja, diesmal vielleicht schon, hatten wir das letztes Mal ja nicht.

00:00:27.680 --> 00:00:33.200
<v Jochen>Genau, und dann mache ich das hier gerade mal auf, was wir da so.

00:00:33.200 --> 00:00:38.640
<v Jochen>Ja, also es gibt halt so ein paar langweilige Software-Geschichten, wo es vielleicht nicht schlecht wäre zu wissen, dass das passiert.

00:00:38.640 --> 00:00:46.400
<v Jochen>Es gibt, äh, es gab jetzt, das ist aber auch schon was länger her, ich habe jetzt ja dummerweise die News von zwei Episoden und dazwischen ist auch mal was ausgefallen.

00:00:46.400 --> 00:00:48.000
<v Jochen>Kann sein, dass es jetzt doch ein bisschen veraltet ist.

00:00:48.000 --> 00:00:53.200
<v Jochen>Also zum Beispiel, was ich hier drauf habe, ist, dass die Einzelversion von MyPy rausgekommen ist.

00:00:53.200 --> 00:00:54.560
<v Jochen>Was vielleicht ganz interessant ist.

00:00:54.560 --> 00:00:56.720
<v Jochen>Also ist auch nochmal das.

00:00:56.880 --> 00:00:58.800
<v Dominik>Was rausgekommen gewesen war, wolltest du halt sagen.

00:00:59.920 --> 00:01:02.320
<v Jochen>Ja, ist schon länger her.

00:01:02.320 --> 00:01:06.720
<v Jochen>Und das Einzige, was mir jetzt noch so in Erinnerung ist, ist halt deutlich schneller geworden damit auch.

00:01:08.560 --> 00:01:14.400
<v Jochen>Ja, ansonsten SQL Alchemy 2 ist raus.

00:01:14.400 --> 00:01:19.440
<v Jochen>Da war auch das, was man quasi an coolen Dingen verwenden konnte, war schon in 1.4 irgendwie drin.

00:01:19.440 --> 00:01:26.240
<v Jochen>Und der 2-0er-Schritt ist, glaube ich, nur, dass jetzt Sachen deprecated sind, die halt vorher noch gingen und jetzt gehen sie halt nicht mehr.

00:01:26.240 --> 00:01:29.440
<v Jochen>Deswegen halt der Major-Versionssprung.

00:01:29.440 --> 00:01:36.400
<v Jochen>Aber eigentlich auch ganz interessant, weil so gerade so Async-Geschichten ist halt das ist auch da noch relativ neu.

00:01:36.880 --> 00:01:40.960
<v Jochen>Also dass man da halt so mit, na, wie heißt das?

00:01:41.280 --> 00:01:43.760
<v Jochen>PG Async PG.

00:01:43.920 --> 00:01:45.120
<v Jochen>Async PG, genau.

00:01:45.120 --> 00:01:47.520
<v Jochen>Das auf Postgres zum Beispiel zugreifen kann.

00:01:47.520 --> 00:01:50.800
<v Jochen>Und das halt alles so ordentlich funktioniert.

00:01:50.800 --> 00:01:53.120
<v Jochen>Ja, da hatte ich auch schon viel Spaß mit.

00:01:56.800 --> 00:01:59.440
<v Jochen>Dann Wagtail hat sich eine ganze Menge getan.

00:01:59.440 --> 00:02:03.360
<v Jochen>Da habe ich hier noch die Release-Notes drin von Wagtail 4.2.

00:02:03.360 --> 00:02:03.840
Ui.

00:02:05.360 --> 00:02:08.480
<v Jochen>Und jetzt ist aber schon 5-0 gestern erschienen.

00:02:09.520 --> 00:02:12.480
<v Jochen>Das ist tatsächlich ja, also.

00:02:12.640 --> 00:02:14.800
<v Dominik>Wie viele Baking-Chases gab es diesmal?

00:02:15.040 --> 00:02:17.840
<v Jochen>Doch, gab es ein paar und ich hatte auch da so ein bisschen Probleme mit.

00:02:17.840 --> 00:02:28.240
<v Jochen>Also das war nicht so, das war schon ein etwas holprigeres Update, weil, also dazu, die Software, mit der wir hier den Podcast irgendwie publishen, basiert halt auch auf Wagtail.

00:02:28.240 --> 00:02:29.040
Django Cars.

00:02:29.280 --> 00:02:29.760
<v Jochen>Genau.

00:02:29.760 --> 00:02:31.760
<v Jochen>Und auf Django natürlich.

00:02:32.640 --> 00:02:36.080
<v Jochen>Und ja, deswegen kriege ich das immer mit.

00:02:36.080 --> 00:02:38.400
<v Jochen>Wenn es da irgendwas bricht, dann bricht es halt ja auch.

00:02:38.640 --> 00:02:41.600
<v Dominik>Der Grund, warum ich es nicht mehr mitkriege, ich habe es aus diesem Grund rausgeschmissen.

00:02:41.600 --> 00:02:42.480
<v Jochen>Ja.

00:02:43.440 --> 00:02:45.600
<v Jochen>Aber also, ja gut, sie machen da was dran.

00:02:45.600 --> 00:02:48.000
<v Jochen>Sie machen das jetzt auch über Major-Versionen.

00:02:48.000 --> 00:02:59.040
<v Jochen>Also man kriegt zumindest so ein bisschen irgendwie einen Eindruck davon, dass irgendwas kaputt gehen könnte, wenn sie dann die Major-Version erhöhen und sie koppeln sich jetzt auch quasi an den Django-Release-Prozess dran.

00:02:59.040 --> 00:03:02.320
<v Jochen>Und das war jetzt auch nur ein Monat nach dem Release von Django 4.2.

00:03:02.320 --> 00:03:08.400
<v Jochen>Also Wagtail 5 ist die erste Wagtail-Version, die offiziell Django 4.2 unterstützt.

00:03:08.400 --> 00:03:10.880
<v Jochen>Und das ist, früher war das immer noch ein bisschen länger.

00:03:10.880 --> 00:03:14.240
<v Jochen>Und jetzt inzwischen ist es halt so einen Monat später oder so.

00:03:14.240 --> 00:03:16.400
<v Jochen>Und das ist jetzt, ja gut, ist nicht super aktuell, aber.

00:03:16.720 --> 00:03:18.000
<v Dominik>Ein Monat ist ein Monat.

00:03:18.080 --> 00:03:19.440
<v Jochen>Ja, ist schon ganz okay.

00:03:19.600 --> 00:03:22.320
<v Jochen>Die müssen halt auch relativ viel fixen und ändern und so.

00:03:22.320 --> 00:03:25.920
<v Jochen>Daher ist es schon verständlich, dass es nicht immer sofort geht.

00:03:25.920 --> 00:03:30.320
<v Dominik>Aber Jochen, du bist doch eigentlich immer dagegen, dass man sich so dicke Klötze ans Bein bindet.

00:03:30.720 --> 00:03:38.240
<v Jochen>Ja, ich hätte das auch am liebsten vermieden, wenn das irgendwie möglich gewesen wäre, aber ich möchte, also ich hätte jetzt auch ein eigenes CMS schreiben können, ja.

00:03:38.240 --> 00:03:39.840
<v Jochen>Das wäre auch gegangen.

00:03:39.840 --> 00:03:41.600
<v Jochen>Aber das wollen wir nicht.

00:03:43.120 --> 00:03:47.120
<v Dominik>Wir hatten letztens jemanden getroffen, der hat ein eigenes CMS in PHP geschrieben, kann das sein?

00:03:47.600 --> 00:03:50.960
<v Jochen>Ja, ne, oder hat er mitgebracht, meinst du, wir waren auf dem Meetup.

00:03:51.120 --> 00:03:54.160
<v Jochen>Auf dem UJS Meetup, auf UJS Meetup Cologne.

00:03:54.160 --> 00:03:55.680
<v Jochen>Das war ganz interessant, ja.

00:03:55.920 --> 00:04:01.840
<v Jochen>Der hat, der hat ein Statamic mitentwickelt, beziehungsweise einer der Leute, die da halt bezahlt werden für das sie dann entwickeln.

00:04:01.840 --> 00:04:06.560
<v Jochen>Das ist tatsächlich so ähnlich wie Wagtail bloß halt für PHP und Laravelle.

00:04:06.560 --> 00:04:11.200
<v Jochen>Und ja, nee, das ist also CMS ist schon eine große Geschichte.

00:04:11.200 --> 00:04:15.680
<v Jochen>Wagtail ist auch relativ groß, viel Code drin und das weiß ich nicht, ob man das wirklich selber machen möchte.

00:04:15.680 --> 00:04:29.600
<v Jochen>Es gibt da ein schönes Projekt von, jetzt habe ich den Namen vergessen, auch sehr bekannt eigentlich in der Kerstin, in der in der Djungo-Community, genau, der hat FeinCMS geschrieben.

00:04:30.320 --> 00:04:37.440
<v Jochen>Und das gefällt mir, also wenn man sich den Source anguckt, das gefällt mir tatsächlich auch ein bisschen besser als Wagtail, aber es kann halt nicht so viel.

00:04:37.440 --> 00:04:40.960
<v Jochen>Und ja, an der Stelle ist halt Wagtail kann halt schon sehr, sehr viel.

00:04:40.960 --> 00:04:46.080
<v Jochen>Also das ist halt irgendwie, also damit kann man so ziemlich alles machen, was man irgendwie gerne machen möchte.

00:04:46.080 --> 00:04:50.640
<v Dominik>Fein CMS, also tatsächlich ein deutsches Fein und kein englisches Fein.

00:04:50.640 --> 00:04:52.800
<v Jochen>Ja, ich glaube, der kommt aus der Schweiz oder so.

00:04:53.200 --> 00:05:00.480
<v Jochen>Und ja, also ich meine, sowas hätte ich natürlich auch schreiben können oder das nehmen können, aber dann hätte ich auch viel schreiben müssen, weil viele Sachen, die ich gerne hätte, sind da halt auch nicht drin.

00:05:01.600 --> 00:05:03.520
<v Dominik>Alter sein, Copyright 2009.

00:05:03.840 --> 00:05:04.720
<v Jochen>Der macht das schon lange, ja.

00:05:06.000 --> 00:05:07.040
<v Jochen>Ja, ja.

00:05:07.200 --> 00:05:15.360
<v Jochen>Und ja, deswegen nehme ich halt Wegteil, obwohl ich auch manchmal denke, so, oh, so ja, es knircht halt ab und zu.

00:05:16.080 --> 00:05:19.600
<v Dominik>Das letzte Release war die Kompatibilität mit Django 1.10.

00:05:19.600 --> 00:05:21.760
<v Jochen>Nee, das dann bist du wahrscheinlich auf einer falschen Seite.

00:05:21.760 --> 00:05:25.760
<v Jochen>Der ist schon noch, da ist auch in letzter Zeit nochmal was dazugekommen, meine ich, ja.

00:05:26.240 --> 00:05:30.480
<v Jochen>Es gibt da möglicherweise auch unter, vielleicht ist dann auch Fein CMS 3 oder so.

00:05:30.480 --> 00:05:33.920
<v Jochen>Das hat auch mehrere Major-Versionen inzwischen.

00:05:35.280 --> 00:05:42.880
<v Jochen>Ja, also Wacked, also für CMS, also ich früher immer gedacht hast, ja gut, was ist das schon groß, aber es ist halt, da hängt schon eine ganze Menge Zeugs dran.

00:05:42.880 --> 00:05:54.880
<v Jochen>Und was jetzt zum Beispiel mir Probleme gemacht hat bei dem Update, ist halt, dass sie intern irgendwie einen, weil ich habe halt eine Extension, also ein Ding über Ort, was das halt so ein bisschen erweitert, weil ich habe halt viele Bilder für andere Zwecke.

00:05:54.880 --> 00:05:58.640
<v Jochen>Jetzt bei dem Podcast kommen nicht so viele Bilder vor, aber waren noch andere Interesse Sachen.

00:05:58.960 --> 00:06:02.320
<v Dominik>Man möchte gerne Bilder in der absolut maximal bestmöglichen Qualität.

00:06:02.560 --> 00:06:04.480
<v Jochen>Ich möchte, dass sie nicht total unscharf sind.

00:06:05.760 --> 00:06:07.040
So oder so sehen.

00:06:07.280 --> 00:06:08.640
<v Jochen>Ja, aber ich sehe das schon.

00:06:08.640 --> 00:06:20.880
<v Jochen>Ich denke mir immer, immer wenn ich auf so Seiten, also gerade auch Wegtail-Seiten, es gibt ja viele andere, die auch Wactail verwenden, so unter anderem NASA, Google, irgendwie der National Health Service in den UK und so.

00:06:20.880 --> 00:06:24.160
<v Jochen>Es gibt schon viele große Nummer, wenn ich da drauf gucke, ich denke mir so, äh, die Bilder sind doch unscharf.

00:06:24.960 --> 00:06:26.880
<v Dominik>Tausend Leute haben auch dieses Problem.

00:06:26.880 --> 00:06:27.920
<v Jochen>Ja, also ich weiß nicht.

00:06:28.000 --> 00:06:29.120
<v Dominik>Also ich finde super, ist das cool.

00:06:29.200 --> 00:06:33.280
<v Dominik>Mir ist es tatsächlich auch aufgefallen, wenn ich mal so ein paar Sachen von dir angeguckt habe, dass das sehr viel schöner ist.

00:06:33.280 --> 00:06:37.040
<v Dominik>Wahrscheinlich hat man sich einfach nur daran gewohnt, dass die Sachen gar nicht so cool aussehen.

00:06:37.120 --> 00:06:39.120
<v Dominik>Dass das gar nicht so schön sein kann, weiß man gar nicht

00:06:39.120 --> 00:06:39.760
<v Jochen>so genau.

00:06:39.760 --> 00:06:44.720
<v Jochen>Ja, also sagen wir so, ich meine, selbst WordPress macht das besser, ja.

00:06:44.720 --> 00:06:49.840
<v Jochen>Also das hat da zwar auch nur so drei oder fünf statische Größen für Bilder drin.

00:06:50.000 --> 00:07:02.800
<v Jochen>Also das Problem ist grundsätzlich, dass wenn du, du hast halt zwei unterschiedliche Arten von Pixel, du hast halt sozusagen die Pixel für deine, wie groß dein, wie breit quasi dein Bildschirm ist oder so und dann kannst du auch in Pixeln rechnen.

00:07:02.800 --> 00:07:05.760
<v Jochen>Aber das, was angezeigt ist, was wird, ist halt was anderes.

00:07:05.760 --> 00:07:19.040
<v Jochen>Weil es halt mittlerweile halt Devices gibt, Telefone, irgendwie Bildschirme, 4K-Bildschirme oder noch mehr, die halt dann mehrere physikalische Pixel für einen virtuellen Pixel quasi benutzen.

00:07:19.040 --> 00:07:32.480
<v Jochen>Und wenn du halt nicht sozusagen dann die Bildgrößen entsprechend mitlieferst, sondern sagst, mein Bild ist halt genauso breit wie so, so viele virtuelle Pixel, dann hast du halt ein implizites Upscaling von Faktor 4 oder so drin und dann wird es halt unscharf.

00:07:32.480 --> 00:07:36.080
<v Jochen>Und ja, das ist halt irgendwie, da gibt es noch, sie arbeiten da auch dran.

00:07:36.080 --> 00:07:36.880
Also so ist es nicht.

00:07:36.880 --> 00:07:46.640
<v Jochen>Da gibt es jetzt inzwischen auch eine sehr vielversprechende, da gibt es so eine Roadmap, wo drin steht, was sie da machen wollen und sie wollen das mit Picture-Element machen und irgendwie so modern oder so.

00:07:46.640 --> 00:07:57.280
<v Jochen>Ihre Hauptmotivation dabei ist aber eher irgendwie Bandbreite sparen, weil man dann halt so modernere Formate wie WP oder solche Sachen verwenden kann.

00:07:58.560 --> 00:08:01.840
<v Jochen>Aber damit kriegt man das auch hin, dass man dann halt scharfe Bilder hat.

00:08:02.160 --> 00:08:06.080
<v Jochen>Mein Ding ist aber eher, ich will scharfe Bilder haben und JPEG reicht mir eigentlich.

00:08:06.800 --> 00:08:10.240
<v Jochen>Und deshalb habe ich da so ein Ding geschrieben und da haben sie jetzt irgendwas umbenannt.

00:08:10.240 --> 00:08:25.040
<v Jochen>Irgendwie ein Attribut auf dem Image-Node heißt jetzt irgendwie anders, weil ich muss jetzt halt, also meine Erweiterung für Wagtail, die Render, die erzeugt halt dann Bilder in unterschiedlichen Größen und macht da so ein Sorcet-Attribut für.

00:08:25.200 --> 00:08:36.800
<v Jochen>Und dann, äh, genau, und da greife ich halt auf irgendwie so die Filter von dem Ding irgendwie zu, weil du kannst ja auch noch andere Sachen reinschreiben, wie JPEG-Qualität und weiß der Teufel und die Breite.

00:08:37.440 --> 00:08:39.920
<v Jochen>Und das muss ich ja irgendwie auslesen und das hat sich irgendwie umgenannt.

00:08:40.000 --> 00:08:46.560
<v Jochen>Vorher war es ein String, der irgendwie so durch so Pipes getrennt war und den habe ich dann gesplittet und jetzt ist es halt irgendwie die Liste schon gesplittet.

00:08:46.560 --> 00:08:50.880
<v Jochen>Und jetzt muss ich halt eine Fallunterscheidung machen zwischen, also wenn es eine neue Version ist so.

00:08:52.320 --> 00:08:53.600
<v Jochen>Es war nicht mal irgendwie so ein.

00:08:54.720 --> 00:08:58.320
<v Jochen>Es war eigentlich ein, ja, und solche Sachen machen halt schon eine Arbeit, ja.

00:08:58.400 --> 00:08:59.920
<v Jochen>Da habe ich so ein bisschen was jetzt machen müssen.

00:08:59.920 --> 00:09:01.360
<v Jochen>Aber insgesamt ging es eigentlich.

00:09:01.360 --> 00:09:02.320
So schlimm war es nicht.

00:09:02.320 --> 00:09:08.160
<v Jochen>Und jetzt laufen halt auch, läuft alles irgendwie auf Django 4.2 und Wagtail 5.

00:09:08.160 --> 00:09:08.960
Und das ist eigentlich schon nett.

00:09:08.960 --> 00:09:15.760
<v Jochen>Also Wegtail, wenn man sich das vor einiger Zeit angeguckt hat und nicht zufrieden war, kann man das eigentlich nochmal machen, weil.

00:09:16.000 --> 00:09:18.320
<v Dominik>Also einige Zeit heißt bei mir nach

00:09:18.320 --> 00:09:19.040
<v Jochen>drei Jahre her, würde ich sagen.

00:09:19.200 --> 00:09:20.400
<v Jochen>Zwei Jahre reicht es auf jeden Fall.

00:09:20.400 --> 00:09:22.400
<v Jochen>Also inzwischen hat sich da sehr viel getan.

00:09:22.400 --> 00:09:26.640
<v Jochen>Also die Changelogs sind halt auch mal sehr lang.

00:09:26.640 --> 00:09:30.080
<v Jochen>Also würde ich sagen, was ist an dem modernen Wackteil eigentlich cooler?

00:09:30.080 --> 00:09:34.160
<v Jochen>Was sie verbessert haben, ist, also es gibt ja schon seit einiger Zeit so ein Stream-Field.

00:09:34.160 --> 00:09:36.800
<v Jochen>Das ist auch, das machen alle CMS-S irgendwie gleich, ja.

00:09:38.400 --> 00:09:39.680
<v Dominik>Video, Audio und der Genäg.

00:09:40.080 --> 00:09:48.640
<v Jochen>Dass du halt nicht, ja, du hast halt einen JSON-Field irgendwie in der Datenbank oder so und dann hast du halt so Blöcke drin, wo halt in dem Block steht halt sozusagen drin, was das jetzt ist.

00:09:48.640 --> 00:09:57.120
<v Jochen>Ist das jetzt ein Text oder ist das jetzt ein Bild oder ist jetzt und dann kannst du die sozusagen, hast du ja eigene Widgets dafür bauen, um solche Sachen einzutragen.

00:09:57.120 --> 00:10:12.160
<v Jochen>Und ja, Obercell macht das halt auch, aber das war, wenn das sehr groß wurde, früher dann halt schon auch eher langsam und so und ein bisschen komisch, weil das halt alles, weil die HTML-Formulare so unfassbar riesig groß geworden sind, wenn du halt viele Dinger drin hattest.

00:10:12.240 --> 00:10:18.320
<v Jochen>Und du musst es ja, du musst ja dann Formulare für jeden Eintrag quasi generieren.

00:10:18.320 --> 00:10:26.720
<v Jochen>Und das ist jetzt, jetzt ist das Editieren von Wagtail ist jetzt auch eine React-App, kann man auch sagen, so Igit.

00:10:27.200 --> 00:10:43.920
<v Jochen>Aber, also das ist halt einer der Vorteile, ist halt, wenn man jetzt riesige Seiten hat mit ganz, ganz vielen Formularen oder so, dann ist das halt nicht mehr langsam beim Rendern oder wenn man irgendwas ändert, dann muss nicht alles neu gerendert werden, weil es halt nicht mehr klassisch ist, sondern dann passiert das alles im Client nur noch und das geht jetzt schneller.

00:10:43.920 --> 00:10:45.760
<v Jochen>Also überhaupt das ganze Ding ist deutlich schneller geworden.

00:10:45.760 --> 00:11:02.720
<v Jochen>Also ich meine, so sehr React irgendwie doof ist für so die Sachen, für die es oft verwendet wird, für sowas wie eine komplizierte Content-Editiergeschichte, wo halt irre viele Formulare sind und es Interaktionen dazwischen gibt und dafür ist es jetzt vielleicht auch nicht so schlecht, das ist eigentlich ganz schlecht.

00:11:02.720 --> 00:11:05.040
<v Dominik>Sieht das denn gut aus und kann man das denn theme?

00:11:05.520 --> 00:11:08.400
<v Jochen>Theme kann sein, das weiß ich dir, kann man.

00:11:08.480 --> 00:11:09.760
<v Jochen>Man kann auf jeden Fall Dinge ändern.

00:11:09.760 --> 00:11:11.280
<v Dominik>Also ohne dass man jetzt halt massiv wieder rein.

00:11:11.840 --> 00:11:15.440
<v Jochen>Eines der neuen Features bei 5, Vektor 5, es gibt jetzt eine Dark-Theme.

00:11:15.440 --> 00:11:16.240
<v Jochen>Oh ja.

00:11:19.200 --> 00:11:20.560
Wer braucht das nicht?

00:11:20.720 --> 00:11:26.800
<v Jochen>Genau, ist mir direkt aufgefallen, weil ich das dann auch direkt hatte, weil ich hier auf dem Dark-Mode bin.

00:11:27.040 --> 00:11:28.960
<v Dominik>Ja, es sind einfach für die Augen viel angenehmer.

00:11:29.200 --> 00:11:31.040
<v Jochen>Naja, also ich finde, es sieht ganz okay aus.

00:11:31.040 --> 00:11:33.680
<v Jochen>Also so wirklich hübsch ist es nicht, aber ich meine, das ist ja nur das Editierding.

00:11:33.840 --> 00:11:37.120
<v Jochen>Es ist ja nicht so, also wie es dann hinterher aussieht, was auf der Webseite zu sehen ist.

00:11:37.120 --> 00:11:38.880
<v Jochen>Das kannst du ja machen, wie du willst.

00:11:38.880 --> 00:11:40.960
<v Jochen>Das hat ja nichts mit Ractiles zu tun.

00:11:40.960 --> 00:11:41.760
<v Jochen>Ja, insofern.

00:11:41.920 --> 00:11:44.480
<v Dominik>Jetzt hat mir fast eine schöne Übergleitung aus dem Thema, aber ich glaube, wir sind noch nicht ganz fertig.

00:11:45.120 --> 00:11:51.520
<v Jochen>Nee, da kommt noch, o je, genau, nächstes wäre halt Django 4.2, ja, auch nächste LTS-Tech.

00:11:51.840 --> 00:11:52.800
<v Dominik>42?

00:11:53.040 --> 00:11:53.920
<v Jochen>Ja.

00:11:54.800 --> 00:11:57.840
<v Jochen>War auch jetzt, da war auch wenig drin, was irgendwie kaputt gegangen ist.

00:11:57.840 --> 00:12:04.400
<v Jochen>Die große Neuerung da ist halt, dass man jetzt auch Async mit der Datenbank sprechen kann.

00:12:04.400 --> 00:12:20.400
<v Jochen>Und zum Beispiel Psycho PG3 wird jetzt unterstützt und dann, also sozusagen, man hat jetzt die Voraussetzung dafür, dass man komplett Async von vorne bis hinten, sozusagen von Frontend, von View bis zur Datenbank, kann man halt jetzt durchgängig Async-Dinge machen.

00:12:20.400 --> 00:12:29.280
<v Jochen>Und man könnte jetzt so Sachen bauen wie man verwendet diesen Listen-Notify-Mechanismus von Postgres, um halt wirklich so richtig reaktiv Dinge zu machen.

00:12:31.120 --> 00:12:38.560
<v Jochen>Also ging auch vorher schon, aber da war es immer so ein bisschen, hm, jetzt geht es halt, also da muss man Jungle Channels verwenden und weiß nicht.

00:12:38.560 --> 00:12:42.400
<v Jochen>Aber jetzt ging es halt richtig sauber eigentlich.

00:12:42.400 --> 00:12:44.720
<v Jochen>Also da gibt es noch keine wirkliche Unterstützung für.

00:12:44.720 --> 00:12:48.080
<v Jochen>Das müsste man dann alles selber schreiben, aber es geht jetzt theoretisch zumindest schon mal.

00:12:48.080 --> 00:12:49.120
<v Jochen>Und das ist eigentlich schon schön.

00:12:49.120 --> 00:12:54.480
<v Jochen>Auch der ORM könnte jetzt dann halt irgendwie Async werden, der hat ja auch schon Async-Interfaces.

00:12:55.040 --> 00:13:02.720
<v Jochen>Aber die sind ja, also sagen wir mal die kann man auch schon verwenden und kriegt dann halt irgendwie den Gewinn, dass es wirklich Async ist, irgendwann, wenn das dann halt mal im Prinzip ist.

00:13:02.720 --> 00:13:11.360
<v Jochen>Momentan ist es dann halt nicht Async wirklich, sondern es ist halt dann irgendwie, es wird über ein Threadpool und in Sync gemacht.

00:13:11.360 --> 00:13:17.360
<v Jochen>Aber ja, so das wird noch ein bisschen dauern, bis die ORM-Geschichten halt auch wirklich Async sind.

00:13:17.360 --> 00:13:25.360
<v Jochen>Aber ja, geht auf jeden Fall in die Richtung und irgendwann dann wird da auch alles auf Async dann quasi umgestellt sein.

00:13:25.360 --> 00:13:26.880
<v Jochen>Und man kann es dann verwenden, wenn man möchte.

00:13:26.880 --> 00:13:27.440
<v Jochen>Muss man ja nicht.

00:13:27.520 --> 00:13:28.640
<v Jochen>Man kann auch einfach Sync verwenden.

00:13:29.200 --> 00:13:38.160
<v Jochen>Wenn man nicht so viele Quaries hat und wenn es, wenn man es, es ist ja async, ist auch mal ein bisschen schneller als Async, weil man da halt schon noch so ein bisschen Abstraktionsschichten mehr dazwischen hat, dann.

00:13:38.160 --> 00:13:41.520
<v Jochen>Aber es gibt halt ein Fälle, in denen es wäre es total praktisch, das zu haben.

00:13:41.520 --> 00:13:42.960
<v Jochen>Und dafür ist es natürlich gut.

00:13:43.200 --> 00:13:45.360
<v Dominik>Kannst du nochmal einen Anwendungsfall dafür nennen?

00:13:45.680 --> 00:13:53.760
<v Jochen>Ne, wenn du zum Beispiel viele Queries machst und du willst halt nicht, dass sich die Latenzen und deine Datenbank steht jetzt zum Beispiel woanders, sagen wir mal so.

00:13:53.760 --> 00:14:06.720
<v Jochen>Das wäre jetzt nochmal, also nehme an, deine Datenbank steht irgendwie in Amerika und du hast hier deinen Applikationsserver oder wie auch immer, das Ding, was halt jedenfalls das HTML rendert, ist halt irgendwo so.

00:14:06.720 --> 00:14:15.040
<v Jochen>Und jetzt hast du halt große Latenz zwischen Datenbank und Frontend, dann momentan ist es halt so, leider addieren sich die Latenzen auf.

00:14:15.040 --> 00:14:22.800
<v Jochen>Und wenn du halt 100 Queries machst, um eine Seite anzuzeigen, dann hast du 100 Mal die Latenz dazwischen und das ist halt dann schon ätzend.

00:14:22.800 --> 00:14:26.960
<v Jochen>Also wenn das halt nur ein paar Millisekunden sind, dann sind es halt insgesamt ein paar hundert Millisekunden vielleicht.

00:14:26.960 --> 00:14:32.080
<v Jochen>Das ist nicht so tragisch, aber wenn du jetzt 50 Millisekunden Latenz dazwischen hast, dann bist du halt schon bei 5 Sekunden oder sowas.

00:14:32.240 --> 00:14:33.520
<v Jochen>Und dann ist es halt doof.

00:14:33.760 --> 00:14:49.200
<v Jochen>Und genau, und wenn du das ISIN machen würdest und könntest die Request, die Datenbankrequest gleichzeitig an die Datenbank schicken, dann wäre die Gesamtlatenz halt nur die Latenz der langsamsten Query und nicht irgendwie, die würden sich nicht alle aufhaddieren.

00:14:49.200 --> 00:14:53.840
<v Jochen>Also in solchen Fällen wäre es halt irgendwie durchaus so praktisch.

00:14:56.480 --> 00:14:58.720
<v Jochen>Ja, also genau, Django Fear 2.

00:14:58.720 --> 00:15:02.960
<v Jochen>Ich weiß jetzt gar nicht genau, was sonst noch da an wirklich, da waren auch noch jede Menge coole Sachen dabei.

00:15:03.040 --> 00:15:06.800
<v Jochen>Ah, das habe ich jetzt gar nicht mehr so in Erinnerung.

00:15:06.800 --> 00:15:13.120
<v Jochen>Es ist auch schon wieder ein Monat her, dass das veröffentlicht wurde.

00:15:13.120 --> 00:15:16.000
<v Jochen>Und bei Formularen hat es sich auch noch eine Menge getan.

00:15:16.000 --> 00:15:19.520
<v Jochen>Also ja.

00:15:21.040 --> 00:15:24.000
<v Jochen>Und es sind einige Sachen noch deprecated worden.

00:15:24.000 --> 00:15:26.480
<v Jochen>Ja, also, keine Ahnung, kann man sich mal angucken.

00:15:27.360 --> 00:15:29.920
<v Dominik>Der kam bestimmt auch dann die Roadmap für Django 5, oder?

00:15:31.840 --> 00:15:33.920
<v Jochen>Ja, bestimmt irgendwie.

00:15:33.920 --> 00:15:34.320
<v Jochen>Keine Ahnung.

00:15:34.480 --> 00:15:37.680
<v Jochen>Es gibt auf jeden Fall schon Leute, die sich darüber Gedanken machen.

00:15:38.320 --> 00:15:44.880
<v Jochen>Ich habe auch schon so ein bisschen gehört, was bei Django, also bei Django 5, die nächste Geschichte, die jetzt angegangen wird.

00:15:44.880 --> 00:15:49.120
<v Jochen>Es ist halt jetzt so, ich habe das jetzt nicht irgendwo gelesen, offiziell, sondern ich habe das jetzt so, was ich so mitkriege.

00:15:49.120 --> 00:15:53.040
<v Jochen>Und ich dachte ab und zu irgendwie so mitlese, was da so passiert.

00:15:54.960 --> 00:15:59.600
<v Jochen>Sie wollen das Request-Objekt, das halt uralt ist und das sehr schwer zu ändern ist, so ein bisschen anpassen.

00:15:59.600 --> 00:16:04.800
<v Jochen>Also da gibt es ja immer noch momentan so Request.get und Request.post und Post und Get sind groß geschrieben.

00:16:04.800 --> 00:16:14.000
<v Jochen>Und das ist quasi genauso, wie das damals halt so in CGI oder PHP war, wo man das dann halt sozusagen diese Inspiration für diese Geschichten her hatte.

00:16:14.000 --> 00:16:16.240
<v Jochen>Aber das ist natürlich jetzt heutzutage eigentlich blöd.

00:16:16.240 --> 00:16:30.880
<v Jochen>Und man hat es aber nie geändert in den letzten 15 Jahren, weil klar ist, dass wenn man das ändert, dann brechen halt überall Deployments, in denen halt irgendwie, keine Ahnung, Leute darauf halt zugreifen und deswegen kann man das nicht so einfach jetzt irgendwie umbenennen.

00:16:30.880 --> 00:16:32.800
<v Jochen>Ja, aber da soll jetzt was passieren.

00:16:32.800 --> 00:16:36.320
<v Jochen>Und zwar hat man jetzt einen Grund, um diese großen Änderungen anzugehen.

00:16:36.320 --> 00:16:41.840
<v Jochen>Und zwar soll halt so ein bisschen Fähigkeit zu JSON generieren und so.

00:16:41.840 --> 00:16:49.680
<v Jochen>Also ich glaube, die harten Sachen, die man dafür braucht, also der Umgang mit unterschiedlichen, ach, ich weiß es gar nicht mehr gesagt.

00:16:49.760 --> 00:16:52.320
<v Jochen>Also jedenfalls die Basisarbeit dafür ist schon drin.

00:16:55.200 --> 00:17:02.560
<v Jochen>Diese ganzen, ja, da geht es irgendwie um Header und weißer Teufel irgendwie Support.

00:17:02.640 --> 00:17:07.680
<v Jochen>Aber was man eigentlich gerne hätte, ist ja, dass man JSON rausrennen kann und das halt auch ordentlich funktioniert.

00:17:07.680 --> 00:17:14.480
<v Jochen>Also sozusagen, eigentlich wird jetzt quasi die Basis dafür gelegt, dass sowas wie Django Rest Framework eigentlich in Django Core mit reinwandert.

00:17:14.800 --> 00:17:17.920
<v Jochen>Oder man das halt sowas wie Django Rest Framework eigentlich gar nicht mehr braucht.

00:17:17.920 --> 00:17:22.720
<v Jochen>Weil die schwierigen Teile in Django Rest Framework, die sind jetzt eigentlich schon in Django Core drin.

00:17:22.720 --> 00:17:31.280
<v Jochen>Und jetzt geht es halt auch darum, das alles so ein bisschen aufzuhübschen, das Request-Objekt zu modernisieren, dass man halt jetzt sehr vielleicht da JSON da auch rausrennen kann oder irgendwas anderes halt XML.

00:17:31.600 --> 00:17:34.400
<v Jochen>Gut, mittlerweile benutzen alle nur noch JSON.

00:17:34.720 --> 00:17:36.800
<v Jochen>Ja, das ist auf jeden Fall das, was man.

00:17:37.520 --> 00:17:40.800
<v Dominik>Und eine von den Sachen in Django 5 ist Formulare.

00:17:40.800 --> 00:17:42.320
<v Jochen>Django 5 ist auch Formulare?

00:17:42.320 --> 00:17:43.120
<v Dominik>Ja, ein bisschen besser davon.

00:17:43.280 --> 00:17:46.000
<v Jochen>Also Formulare sind auch jetzt schon, da wird auch schon viel dran gemacht.

00:17:46.000 --> 00:17:53.840
<v Jochen>Ja, ich meine, also der Anwendungsfall an der Stelle ist halt einfach, dass man lieber, also das war früher etwas schwierig.

00:17:54.320 --> 00:17:57.600
<v Jochen>Man möchte halt Teile von Formularen und so rendern können, besser.

00:17:57.920 --> 00:18:08.720
<v Jochen>Also gerade so interaktiv möchte man gern das Verhalten so haben, wie man das in der SPA halt auch hat, nur halt mit ordentlicher Server-Seite, Validierung von irgendwelchen Eingabedaten und so.

00:18:08.720 --> 00:18:09.920
<v Jochen>Und das geht natürlich auch.

00:18:09.920 --> 00:18:22.160
<v Jochen>Also habe ich auch schon häufiger gemacht, dass man dann halt, sobald sich irgendwie ein Feld von einem Formular ändert, dass man dann halt das an den Server schickt und dann kriegt man halt sozusagen nur das gerenderte Feld zurück und ersetzt das dann.

00:18:22.160 --> 00:18:25.600
<v Jochen>Und dann, wenn da eine Fehlermeldung drin steht, dann steht die halt auch da drin und so, das geht alles.

00:18:25.600 --> 00:18:32.160
<v Jochen>Aber irgendwie zum Beispiel mit Crispy Forms irgendwie einzelne Felder rendern, ist halt, ist es möglich.

00:18:32.160 --> 00:18:34.240
<v Jochen>Es ist halt irgendwie nicht, es macht keinen Spaß.

00:18:34.240 --> 00:18:37.280
<v Jochen>Und das zu testen macht auch nicht so richtig Spaß und das ist alles so ein bisschen.

00:18:37.280 --> 00:18:41.040
<v Jochen>Und ja, da wird auch viel daran gearbeitet, damit das halt einfacher wird und besser geht alles.

00:18:42.960 --> 00:18:44.080
<v Jochen>Ja.

00:18:45.200 --> 00:18:47.520
<v Jochen>Ja, genau, Django 4.2, ja.

00:18:47.680 --> 00:18:49.840
<v Dominik>Ich hab die Twitter-Appis kaputt.

00:18:50.160 --> 00:18:53.280
<v Jochen>Ja, äh, das ist auch schon lange her.

00:18:53.680 --> 00:18:55.920
<v Jochen>Bei Twitter ist noch alles möglich kaputt gegangen.

00:18:55.920 --> 00:18:58.640
<v Jochen>Ja, es ist.

00:18:59.840 --> 00:19:02.880
<v Dominik>Du machst ja immer gerne so einen Pann, deswegen dachte ich, es ist absolut.

00:19:04.080 --> 00:19:05.840
<v Jochen>Ich glaube, das ist echt total veraltet, was da drin steht.

00:19:05.840 --> 00:19:11.040
<v Jochen>Also das ist irgendwie von vor zwei Monaten oder so, dass das halt, ähm, dass jetzt die APIs zugemacht haben.

00:19:11.040 --> 00:19:20.720
<v Jochen>Ja, und das halt für viele Leute war das halt echt nochmal so ein Grund, dann auch zu Masterun zu wechseln, weil für Mastodon gibt es jetzt noch irgendwie ordentliche Apps und Twitch wird halt nicht mehr.

00:19:20.960 --> 00:19:27.360
<v Jochen>Gibt's nur die, äh, die, die, äh, die Standard-App und die ist halt Mist.

00:19:27.360 --> 00:19:28.560
<v Jochen>Ja.

00:19:28.800 --> 00:19:30.000
<v Jochen>Genau.

00:19:30.480 --> 00:19:37.280
<v Jochen>Ah, was auch noch ganz interessant ist vielleicht, ist, es gibt das Paydentic.

00:19:38.880 --> 00:19:41.760
<v Jochen>Paydentic hat irgendwie Venture Capital eingesammelt.

00:19:41.760 --> 00:19:42.240
Oh.

00:19:43.120 --> 00:19:43.600
<v Jochen>Ja, ja.

00:19:43.760 --> 00:19:46.320
<v Jochen>Fünf Millionen von Sequoia oder so.

00:19:46.320 --> 00:19:46.800
Okay.

00:19:47.040 --> 00:19:50.640
<v Jochen>Was ich jetzt weiß ich nicht, ob man sich darüber freuen soll oder ob man besorgt sein soll.

00:19:50.800 --> 00:19:51.520
Gut oder schlecht.

00:19:51.920 --> 00:19:53.760
<v Jochen>Das kann beides sein, das ist so klar.

00:19:53.760 --> 00:20:00.320
<v Jochen>Ich weiß nicht genauso, wie sie sich vorgestellt haben, dass sie das Investment wieder reinholen, aber weil das ist natürlich das Problem.

00:20:00.480 --> 00:20:12.400
<v Jochen>Wenn man jetzt irgendwie ganz viel Infrastruktur, also Bydentik als Infrastruktur verwendet und darauf aufbaut, dann ist es so, okay, haben die jetzt ein großes Incentives, mich irgendwie dafür bezahlen zu lassen.

00:20:12.400 --> 00:20:24.080
<v Jochen>Das will man vielleicht nicht unbedingt, aber ja, auf der anderen Seite, was natürlich vielleicht schon schön wäre, ist, wenn da halt so ein bisschen mehr, also ich glaube, der hat dann noch, also hier, wie heißt er noch?

00:20:25.680 --> 00:20:27.680
<v Jochen>Nee, das ist der von FastAPI.

00:20:27.760 --> 00:20:31.680
<v Jochen>Aber der ist Samuel Colvin, glaube ich, heißt der, von Payentic.

00:20:31.840 --> 00:20:34.400
<v Dominik>Macht Jan schon natürlich auch mit Paydantic?

00:20:34.400 --> 00:20:36.880
<v Jochen>Ja, kann sein, weiß ich nicht so genau.

00:20:36.960 --> 00:20:45.200
<v Jochen>Aber der hat jetzt dann auch irgendwie Leute angeheuert und jetzt gibt es da noch ein bisschen mehr Druck irgendwie beim Entwickeln an der Stelle.

00:20:45.200 --> 00:20:48.640
<v Jochen>Und das ist natürlich vielleicht schon nicht so schlecht, weil, also Piedentic ist ja eigentlich schon eine sehr coole Idee.

00:20:48.640 --> 00:20:56.480
<v Jochen>Ich fände da das auch mal gerne, wenn man mal halt irgendwie so wirklich validieren will, dass die Daten, die man irgendwo reinbekommt, halt so richtig

00:20:56.480 --> 00:20:57.840
<v Dominik>tatsächlich dementsprechend,

00:20:57.840 --> 00:20:58.480
<v Jochen>was man erwartet.

00:20:58.480 --> 00:21:00.160
<v Jochen>Ja, hat eine so schöne Syntax.

00:21:00.160 --> 00:21:05.360
<v Jochen>Man schreibt eigentlich nur die Type-Annotations hin und dann, genau, hat man hinterher validierte Daten.

00:21:05.360 --> 00:21:06.960
<v Jochen>Das ist ja alles.

00:21:09.760 --> 00:21:11.200
<v Jochen>Ja, genau.

00:21:11.520 --> 00:21:18.560
<v Jochen>Aber was halt so ein bisschen problematisch ist, ist halt, es ist sehr langsam im Vergleich zu Standard-Python-Objekte irgendwie einfach nur erstellen.

00:21:18.640 --> 00:21:20.960
<v Dominik>Da kannst du ja Python Decor nehmen, damit das dann auch in Rust läuft.

00:21:21.040 --> 00:21:21.360
<v Jochen>Ja, genau.

00:21:21.360 --> 00:21:25.760
<v Jochen>Und wenn das dann in Rust, ist es natürlich, aber es ist natürlich auch klar, dass es mit mehr Arbeit, das in Rust zu schreiben und so.

00:21:25.920 --> 00:21:27.040
<v Jochen>Ja, also mal gucken.

00:21:27.040 --> 00:21:30.880
<v Jochen>Aber es ist auf jeden Fall eine interessante Entwicklung und gut, ja.

00:21:30.880 --> 00:21:32.720
<v Jochen>Wie es ausgeht, wissen wir nicht.

00:21:32.800 --> 00:21:34.880
<v Jochen>Dann haben wir noch, was haben wir noch?

00:21:37.040 --> 00:21:40.480
<v Jochen>Node.js 20, naja ich weiß nicht, ob es da irgendwas interessant ist.

00:21:40.480 --> 00:21:41.280
<v Jochen>Nö, eigentlich nicht.

00:21:44.800 --> 00:21:48.800
<v Jochen>Ja, Pythonista ist eine neue Version veröffentlicht worden.

00:21:49.360 --> 00:22:01.360
<v Jochen>Das freut mich ja total, aber ich glaube, vielen Leuten wird das nichts sagen, aber es gibt für iOS eine App namens Pythonista und da kann man tatsächlich Python-Code ausführen.

00:22:01.360 --> 00:22:05.680
<v Jochen>Also man kriegt dann halt so eine richtige interaktive Shell und da ist auch NumPy mit drin und der ganze Kram.

00:22:05.680 --> 00:22:07.920
<v Jochen>Aber auf dem Telefon.

00:22:07.920 --> 00:22:08.480
Achso, ey.

00:22:08.560 --> 00:22:10.000
<v Jochen>Und man kann sogar dann Python-Code.

00:22:12.080 --> 00:22:25.760
<v Jochen>Ja, ja, man kann da auch Programme dann ausführen und so, man kann die auch, kann auch so sich, das habe ich schon mal gemacht, dann, dass man im Share-Sheet sagen kann, ich share das jetzt mit irgendwie einem Python-Skript und dann kriegt das Python-Skript das und kann damit irgendwas machen.

00:22:25.760 --> 00:22:31.120
<v Jochen>Also man kann da tatsächlich irgendwie Python-Code auf Telefonen und iPads und so ausführen.

00:22:31.120 --> 00:22:36.880
<v Jochen>Und das ist jetzt halt in einer Version erschienen, dass Python 3.10 unterstützt wird und ja, das ist schon sehr nett.

00:22:36.880 --> 00:22:47.280
<v Jochen>Also das ist wirklich, wie das mit dieser Policy, App Store-Policy vereinbar ist, dass eigentlich nur Objective-C, Swift und irgendwie C und C&lt;unk&gt; irgendwie ausgeführt werden können sollen.

00:22:48.480 --> 00:22:50.080
<v Jochen>Ist mir nicht so ganz klar.

00:22:50.080 --> 00:22:54.560
<v Jochen>Eigentlich war es wahrscheinlich zu unbekannt, dass da jemand wirklich mal drauf geguckt hätte.

00:22:56.880 --> 00:22:58.880
<v Jochen>Jetzt rausgekickelt.

00:22:59.040 --> 00:23:00.320
<v Jochen>Naja, aber es ist wirklich toll.

00:23:00.320 --> 00:23:02.720
<v Jochen>Also das ist auch mit sehr viel Liebe.

00:23:02.720 --> 00:23:03.920
<v Jochen>Handgedengelt.

00:23:03.920 --> 00:23:05.440
<v Jochen>Ja, sehr schön.

00:23:06.160 --> 00:23:06.480
<v Jochen>Ja.

00:23:06.880 --> 00:23:08.480
<v Dominik>Ich finde, wir können ja langsam mal übergehen, oder?

00:23:08.560 --> 00:23:09.680
<v Jochen>Wir könnten langsam mal übergehen, ne?

00:23:10.160 --> 00:23:11.120
Interessanten Dingen.

00:23:12.320 --> 00:23:14.240
<v Jochen>Genau, machen wir doch einfach mal so allmählich das Thema.

00:23:14.240 --> 00:23:16.160
<v Jochen>Ja, ansonsten habe ich ja auch noch so ein Metagram und so.

00:23:16.880 --> 00:23:19.840
<v Dominik>Ja, also wir wollten heute so ein bisschen über grafische Interfaces reden, die jetzt in Python.

00:23:20.000 --> 00:23:20.960
Haben wir noch nie gemacht, ja.

00:23:20.960 --> 00:23:22.240
<v Dominik>Genau, und was man da machen kann.

00:23:22.240 --> 00:23:29.120
<v Dominik>Also ich höre ja immer oder ich weiß das aus eigener Erfahrung, dass man grafische Interfaces Python vielleicht gar nicht so wirklich machen will.

00:23:30.400 --> 00:23:32.560
<v Dominik>Man kann vielleicht Turtle benutzen oder so.

00:23:32.720 --> 00:23:35.680
<v Jochen>Ja, es ist die Frage, was ich überhaupt noch machen will, aber gut.

00:23:35.920 --> 00:23:36.720
<v Dominik>Aus meiner Sicht.

00:23:36.880 --> 00:23:39.840
<v Dominik>Ja, aber genau, es gibt verschiedene Sachen in Python dazu.

00:23:39.840 --> 00:23:42.800
<v Dominik>Und vielleicht mal den Martin fragen, warum benutzt du denn cute?

00:23:43.520 --> 00:23:44.720
<v Jochen>Oder wer bist du eigentlich überhaupt nicht?

00:23:44.800 --> 00:23:45.600
<v Dominik>Ja, vielleicht fängst du ja.

00:23:45.680 --> 00:23:47.040
Genau, einfach erstmal auch nett.

00:23:47.680 --> 00:23:48.560
Ja.

00:23:48.560 --> 00:23:53.280
<v Martin>Also ich bin Martin von miaplan.de und soll ich mich kurz vorstellen?

00:23:53.280 --> 00:23:55.120
Oder wie habt ihr euch das gedacht?

00:23:55.520 --> 00:23:57.120
<v Martin>Also vielleicht kurz zu mir.

00:23:57.120 --> 00:24:06.400
<v Martin>Ich habe Bioinformatik studiert, war dann fünf Jahre in der Softwareentwicklung, erst im SAP-Umfeld, dann im Bereich Automobil.

00:24:07.040 --> 00:24:14.000
<v Martin>Dann habe ich das Angebot bekommen, in den Familienbetrieb meiner Eltern mit einzusteigen.

00:24:14.000 --> 00:24:19.120
<v Martin>Die machen Märkte im Einzelhandel, also Fressnapf.

00:24:19.360 --> 00:24:28.400
<v Martin>Und das habe ich angenommen und habe dann gesehen, wie meine Mutter dort die Dienstpläne erstellt.

00:24:28.400 --> 00:24:31.760
<v Martin>Also sie hatte Personalverantwortung sozusagen, hat Dienstpläne erstellt.

00:24:31.760 --> 00:24:42.480
<v Martin>Und sie hat dort Excel-Listen erstellt und hat ein Kreuz für jede halbe Stunde gemacht, die ein Mitarbeiter sozusagen eingeplant ist.

00:24:42.480 --> 00:24:50.960
<v Martin>Das Ganze für damals zehn Mitarbeiter, acht Stunden pro Tag, 26 Tage im Monat kann man sich vorstellen, wie viele Kreuze sie da unterhalten.

00:24:52.480 --> 00:25:00.320
<v Martin>Sie hatte dann irgendwann eine größere Sammlung an Bleistiften zugelegt, weil die halt der Reihe nach abgenutzt waren.

00:25:00.320 --> 00:25:05.040
<v Martin>Und ja, das habe ich mir eine Weile angeschaut und habe mir dann gedacht, also das muss besser gehen.

00:25:05.040 --> 00:25:08.960
<v Martin>Und ja, da war dann Mia-Plan geboren.

00:25:09.600 --> 00:25:14.560
<v Martin>Ja, vielleicht dazu, was ist MIA-Plan?

00:25:14.960 --> 00:25:21.280
<v Martin>Also, das ist ein SAS, also Software as a Service zur Dienstplanung.

00:25:21.760 --> 00:25:37.920
<v Martin>Man kann damit machen Schichtplanung, Planung in der Produktion, also wenn man Maschinen hat, automatische Planung, Bereitschaftsdienste, Nachtarbeit, ja, also alles, was man sich da so wünscht oder fast alles, was man sich da so wünschen kann in dem Bereich.

00:25:38.160 --> 00:25:39.280
<v Martin>Genau.

00:25:40.480 --> 00:25:42.240
<v Jochen>Ja, klingt interessant.

00:25:42.240 --> 00:25:47.200
<v Jochen>Also ich glaube, die Menge der Unternehmen, die das halt irgendwie mit Excelisten machen, das wird nicht so klein sein, das habe ich auch schon häufig gesehen.

00:25:47.200 --> 00:25:50.320
<v Dominik>Also ich habe ganz auch da schon die Anforderungen an sowas gehört.

00:25:50.320 --> 00:25:54.720
<v Dominik>Aber mich würde jetzt interessieren, warum denn mit Qt und nicht als Web-Anwendung?

00:25:54.720 --> 00:25:56.560
<v Martin>Ja, ganz kurz zu Excel.

00:25:56.560 --> 00:25:58.320
<v Martin>Also Excel machen, glaube ich, alle.

00:25:58.320 --> 00:26:06.400
<v Martin>Also man fängt halt mit Excel an, probiert es quasi umzusetzen, was man sich halt so wünscht und irgendwann stößt man an Grenzen.

00:26:06.400 --> 00:26:09.280
<v Martin>Ich glaube, das haben halt alle.

00:26:09.280 --> 00:26:12.480
<v Martin>Und dann fängt man halt an, sich umzuschauen.

00:26:13.680 --> 00:26:16.560
<v Martin>Ja, warum QT?

00:26:16.560 --> 00:26:21.520
<v Martin>Also ich habe mir angeguckt, wie komme ich quasi zum Ziel.

00:26:21.760 --> 00:26:26.400
<v Martin>Also am Anfang des Projektes war klar, ich brauche eine grafische Oberfläche.

00:26:26.880 --> 00:26:30.000
<v Martin>Die soll im Web stattfinden.

00:26:30.240 --> 00:26:35.840
<v Martin>Also das sollte quasi nicht auf einem Computer installiert werden.

00:26:35.840 --> 00:26:39.840
<v Martin>Denn ja, also wir wollen eigentlich von überall planen.

00:26:39.840 --> 00:26:50.720
<v Martin>Also nicht nur, man hat nicht immer einen Rechner zur Verfügung und meine Mutti war nicht immer am Rechner zu Hause, sondern die wollte halt auch vom Markt aus planen und was weiß ich.

00:26:50.720 --> 00:26:54.080
<v Martin>Also es war klar, das muss irgendwie auch ins Web, das Ganze.

00:26:54.080 --> 00:26:55.840
<v Martin>Habt mir verschiedene Sachen angeschaut.

00:26:55.840 --> 00:26:57.360
<v Martin>Ihr habt es ja auch schon so ein bisschen angesprochen.

00:26:57.360 --> 00:27:01.440
<v Martin>Also es gibt zig Frameworks, die man nutzen kann.

00:27:01.440 --> 00:27:04.800
<v Martin>Euer Liebling ist Django, wie man unschwer raushört,

00:27:04.800 --> 00:27:05.440
<v Jochen>wenn man euch kennt.

00:27:07.120 --> 00:27:10.640
<v Martin>Das habe ich mir auch angeschaut, kann ich ja da noch ein bisschen was zu erzählen.

00:27:11.520 --> 00:27:17.360
<v Martin>Ansonsten, wenn man jetzt nicht die Bedingung Web hat, gibt es verschiedene Frameworks.

00:27:17.360 --> 00:27:20.800
<v Martin>Also Kiwi ist eins davon, QT ist eins davon.

00:27:20.800 --> 00:27:26.640
<v Martin>Ansonsten gibt es auch noch GTK zum Beispiel, ja, das GIMP-Tool-Kit.

00:27:26.640 --> 00:27:34.320
<v Martin>Und ja, habe ich mir sozusagen alle der Reihe nochmal angeguckt und geschaut, was können die für mich leisten sozusagen.

00:27:34.880 --> 00:27:48.160
<v Martin>Und wenn man die so vergleicht, also die Frameworks für den Desktop, dann kommt man eigentlich darauf, dass es zwei Frameworks gibt, die da nur in Frage kommen.

00:27:48.160 --> 00:27:50.080
<v Martin>Das ist einmal QT und einmal GTK.

00:27:50.080 --> 00:27:55.760
<v Martin>Das sind die einzigen, die, ich sag mal, weit fortgeschrittene Widgets bieten.

00:27:56.160 --> 00:28:05.760
<v Martin>Also wenn man quasi sehr spezielle Sachen machen will und das will ich, dann kommt man eigentlich um QT bzw.

00:28:06.480 --> 00:28:08.000
<v Martin>GTK nicht drumherum.

00:28:08.000 --> 00:28:13.520
<v Jochen>Was wäre so ein Widget beispielsweise, wo du sagen würdest, gut, das ist halt sowas, was man da bekommt.

00:28:13.520 --> 00:28:18.080
<v Martin>Ja, also zum Beispiel Tabellen.

00:28:19.200 --> 00:28:22.800
<v Martin>Aber nicht einfach nur Tabellen, sondern halt spezielle Tabellen.

00:28:22.800 --> 00:28:39.040
<v Martin>Zum Beispiel brauchte ich Tabellen, die ein Kontextmenü können, die sollten Farben können, ich wollte Frames, farbige Frames um die Zellen zeichnen, ich brauche Callbacks, wenn ich einen Klick auf so eine Tabellenzelle mache.

00:28:39.040 --> 00:28:40.160
<v Martin>Und so weiter.

00:28:40.160 --> 00:28:44.560
<v Martin>Und ich habe mir das Ganze auch im Web angeschaut, also die Web-Frameworks.

00:28:44.560 --> 00:28:47.040
<v Martin>Angenommen, ich hätte jetzt Django genommen.

00:28:47.040 --> 00:28:52.560
<v Martin>Dann hätte ich wahrscheinlich irgendeine Art JavaScript-Tabellen-Framework genommen.

00:28:52.880 --> 00:28:55.200
<v Martin>Und ich habe dort sehr, sehr lange gesucht.

00:28:55.200 --> 00:28:58.480
<v Martin>Ich habe keins gefunden, was alles kann, was ich brauche.

00:28:58.720 --> 00:29:05.680
<v Martin>Und dann habe ich überlegt, naja, jetzt könnte ich das vielleicht anders umsetzen, als ich mir das eigentlich vorstelle.

00:29:05.920 --> 00:29:13.920
<v Martin>Also ich könnte, weiß ich nicht, die Bedienung müsste ich dann halt so umstricken, dass das irgendwie dann die jeweilige Bibliothek kann.

00:29:13.920 --> 00:29:15.280
<v Martin>Und das wollte ich aber nicht.

00:29:15.280 --> 00:29:19.600
<v Martin>Also ich wollte das eigentlich so machen, wie ich mir das vorstelle.

00:29:20.720 --> 00:29:25.520
<v Martin>Und ja, da kam ich eigentlich nur bei QT raus.

00:29:25.520 --> 00:29:35.840
<v Martin>Also QT hat sehr weit entwickelte Widgets und damit kann man, also sagen wir so, ich habe noch nichts gefunden, was man damit nicht umsetzen könnte.

00:29:36.720 --> 00:29:38.560
<v Martin>Und das ist alles schon da.

00:29:38.960 --> 00:29:52.560
<v Martin>Also ich brauche da nichts mehr, braucht da nichts mehr selber entwickeln, sozusagen, also was die, was die Oberfläche angeht, sondern QT bietet eigentlich von Haus aus schon alles, was man sich vorstellen kann.

00:29:53.440 --> 00:29:58.480
<v Martin>Und das war quasi eine Grundvoraussetzung.

00:29:58.480 --> 00:30:00.720
<v Martin>Denn ich bin ein Ein-Mann SAS.

00:30:01.280 --> 00:30:07.120
<v Martin>Das heißt, ich brauche eine hohe Entwicklungsgeschwindigkeit, sonst komme ich nicht zum Ziel.

00:30:07.440 --> 00:30:10.720
<v Martin>Und genau, ja, da war quasi die Bedingung.

00:30:10.800 --> 00:30:16.000
<v Martin>Hätte ich angefangen, da mir ein Web-Framework rauszusuchen.

00:30:16.080 --> 00:30:20.640
<v Martin>Django, ich habe ein Testprojekt aufgesetzt, schon gehabt, und habe mal geguckt, wie weit ich komme.

00:30:20.960 --> 00:30:27.600
<v Martin>Aber da hat sich ziemlich schnell rausgestellt, da hätte ich sehr, sehr viel selber entwickeln müssen an Funktionalität.

00:30:27.920 --> 00:30:30.400
<v Martin>Und das kam nicht in Frage.

00:30:30.720 --> 00:30:32.880
<v Dominik>Und wie machst du es hübsch?

00:30:36.880 --> 00:30:38.160
<v Martin>Werd mal spezieller?

00:30:38.160 --> 00:30:40.080
<v Martin>Was genau stellst du dir heute hübsch vor?

00:30:40.080 --> 00:30:41.200
<v Dominik>Also wie kannst du das ja stylen?

00:30:41.200 --> 00:30:46.960
<v Dominik>Also oder Sieben oder musst du da alle Widgets einzeln überschreiben?

00:30:46.960 --> 00:30:51.840
<v Dominik>Ist das responsive oder musst du jeweils eine eigene Applikation für verschiedene Geräte schreiben?

00:30:51.840 --> 00:30:53.840
<v Dominik>Oder wie lösecute das?

00:30:53.840 --> 00:30:54.560
<v Martin>Ja.

00:30:55.360 --> 00:30:59.360
<v Martin>Da müsste ich vielleicht erstmal sagen, wie ich das überhaupt gebaut habe.

00:31:00.560 --> 00:31:01.760
<v Dominik>Fangen von vorne an vielleicht, ja.

00:31:01.920 --> 00:31:03.360
<v Martin>Fangen wir mal von vorne an.

00:31:03.920 --> 00:31:12.720
<v Martin>Also es stand sozusagen fest, oder ihr könnt ja auch vielleicht nochmal was zu den Widgets sagen und wie man die in Django einbindet.

00:31:13.040 --> 00:31:19.120
<v Martin>Aber für mich stand fest, okay, mit QT kann ich sozusagen das sehr schnell umsetzen, was ich brauche.

00:31:19.440 --> 00:31:25.840
<v Martin>Jetzt hat QT aber ein Problem, das ist eigentlich ein Desktop-Framework.

00:31:26.160 --> 00:31:35.040
<v Martin>Also üblicherweise würde ich also eine Software schreiben, würde die dann bundeln, also mit Pi-Installer, was weiß ich.

00:31:35.040 --> 00:31:44.000
<v Martin>Und würde die dann sozusagen eine Software mir erstellen und die dann zum Kunden liefern oder würde die zum Download anbieten oder so.

00:31:44.960 --> 00:31:48.480
<v Martin>Ging in dem Fall, also in meinem Fall sozusagen nicht.

00:31:48.480 --> 00:31:56.080
<v Martin>Jetzt ist die Frage, wie kriegen wir quasi die Desktop-Anwendung ins Web.

00:31:56.080 --> 00:32:01.920
<v Martin>Und die Lösung dafür lautet Apache Jack-Amolly.

00:32:02.400 --> 00:32:04.720
<v Martin>Das ist quasi, ich weiß nicht, habt ihr das schon mal gehört?

00:32:04.720 --> 00:32:04.880
<v Martin>Nein.

00:32:07.200 --> 00:32:12.320
<v Martin>Das ist im Prinzip wie Remote Desktop, aber ohne Client.

00:32:13.280 --> 00:32:38.400
<v Martin>Das heißt, jeder Nutzer bekommt quasi einen Account und lockt sich damit sozusagen auf meinen Servern ein und läuft damit unter einem Nutzer-Account und kann sich quasi, also ich starte dann sozusagen auf meinem Server eine Anwendung, zum Beispiel ein QT, und die kriegt dann der Anwender zu sehen.

00:32:38.880 --> 00:32:46.320
<v Martin>Also die Software läuft sozusagen auf meinen Servern und der Anwender guckt sich das quasi von außen an und kann die Software auch bedienen.

00:32:46.320 --> 00:32:48.720
<v Martin>Und installiert aber selber nichts.

00:32:48.720 --> 00:32:52.080
<v Martin>Das heißt, es läuft rein über den Browser.

00:32:52.160 --> 00:33:02.320
<v Martin>Oder anders gesagt, Apache stellt quasi einen HTML5-Client schon zur Verfügung, der einfach im Browser läuft.

00:33:03.760 --> 00:33:06.480
<v Jochen>Ja, ich glaube, ich habe das mal irgendwie gesehen.

00:33:06.720 --> 00:33:07.280
Wie heißt das?

00:33:09.200 --> 00:33:10.080
Guacamole.

00:33:11.840 --> 00:33:26.480
<v Jochen>Auf der DjangoCon 2021 gab es einen Talk darüber, wo auch jemand eine Shell quasi damit, also konnte man halt quasi eine Shell zugreifen, auch über einen Browser.

00:33:26.480 --> 00:33:26.880
<v Jochen>Richtig.

00:33:27.120 --> 00:33:28.800
<v Jochen>Und das war ziemlich cool.

00:33:28.800 --> 00:33:31.760
<v Jochen>Und das ist jetzt quasi das gleiche System, wie das funktioniert.

00:33:31.760 --> 00:33:32.800
<v Jochen>Ja, sehr schick.

00:33:33.200 --> 00:33:34.160
<v Jochen>Coole Idee.

00:33:34.160 --> 00:33:39.760
<v Martin>Also theoretisch kann man damit einen ganzen Desktop in den Browser reinzeichnen.

00:33:40.080 --> 00:33:45.840
<v Martin>Das ist auch die Standard-Arts der Standardanwendungsfall, aber es geht eben auch für eine einzelne Software.

00:33:46.160 --> 00:33:46.720
<v Jochen>Ja.

00:33:46.960 --> 00:33:47.840
Genau.

00:33:47.840 --> 00:33:52.720
<v Martin>Ja, das hat den Vorteil, dass ich QT nutzen kann.

00:33:53.280 --> 00:33:55.520
<v Martin>Mittlerweile macht mir QT auch Spaß.

00:33:55.520 --> 00:33:58.640
<v Martin>Also mittlerweile im Sinne von, jetzt weiß ich, wie es funktioniert.

00:33:58.960 --> 00:34:01.680
<v Dominik>Das heißt, das hat ein bisschen gedauert, hört sich woanders, wer die Lernkurve machen.

00:34:01.840 --> 00:34:02.640
Ja, ja, also

00:34:02.640 --> 00:34:06.560
<v Martin>die Lernkurve ist schon steil, würde ich behaupten.

00:34:07.120 --> 00:34:11.680
<v Martin>Aber ich habe festgestellt, das kann eigentlich alles, was man braucht.

00:34:11.680 --> 00:34:14.480
<v Martin>Also ich habe noch nichts gefunden, was das Ding nicht kann.

00:34:14.880 --> 00:34:23.040
<v Martin>Und was außerdem Spaß macht, ist, also ich arbeite seit ungefähr drei Jahren damit und ich habe insgesamt fünf Bugs gefunden.

00:34:23.920 --> 00:34:26.480
<v Martin>Und das ist echt wenig.

00:34:26.480 --> 00:34:27.120
<v Jochen>Genau.

00:34:27.680 --> 00:34:31.120
<v Martin>Also da habe ich schon ganz, ganz andere Sachen erlebt.

00:34:32.560 --> 00:34:36.960
<v Martin>Genau, also das ist, also macht echt Spaß, muss ich sagen.

00:34:37.920 --> 00:34:43.920
<v Martin>Ja, ansonsten kann ich fast nur synchronen Code schreiben.

00:34:43.920 --> 00:34:45.840
<v Martin>Ihr habt ja schon so ein bisschen gesprochen.

00:34:45.840 --> 00:34:52.880
<v Martin>Die Frameworks stellen jetzt alle auf Async um, damit die mehrere, also mehr Requests quasi handeln können.

00:34:52.880 --> 00:34:57.680
<v Martin>Und ich habe eigentlich den Vorteil, ich kann synchron Code schreiben.

00:34:57.680 --> 00:35:01.360
<v Jochen>Ja, ja, das ist natürlich, wenn man aus Entwicklersicht angenehmer schafft.

00:35:01.440 --> 00:35:05.360
<v Martin>Ja, es ist deutlich angenehmer und es ist einfach.

00:35:05.360 --> 00:35:06.160
Ja.

00:35:06.160 --> 00:35:07.040
Ja.

00:35:07.360 --> 00:35:08.960
<v Martin>Es ist sehr einfach.

00:35:09.920 --> 00:35:11.120
<v Jochen>Ja, schick ja.

00:35:11.120 --> 00:35:23.040
<v Jochen>Ich meine, ich glaube auch, dass, also ja, Qt hat halt irgendwie, das ist halt schon, das ist halt eigentlich ein sehr, sehr altes Projekt tatsächlich, aus heutiger Sicht nicht, weil ich weiß gar nicht, wann das genau gestartet ist und wann es die Firma dazu gab.

00:35:23.040 --> 00:35:25.840
<v Jochen>KDE ist ja da irgendwie, das war schon so in den 90ern irgendwie.

00:35:28.720 --> 00:35:32.560
<v Jochen>Ich weiß gar nicht, wann Qt gestartet ist, aber es muss irgendwann in den 90ern wahrscheinlich gewesen sein.

00:35:32.560 --> 00:35:37.040
<v Dominik>Und das ist jetzt in Version 5 oder 6 oder wie benutzt ihr das?

00:35:38.320 --> 00:35:42.080
<v Martin>Ich mache gerade die Transition von 5 nach 6.

00:35:42.720 --> 00:35:46.400
<v Dominik>Und das ist keine komplett Open Source Lizenz, wenn ich das richtig

00:35:46.400 --> 00:35:47.760
in Erinnerung habe.

00:35:48.000 --> 00:35:55.440
<v Martin>Genau, also die haben, also das ist dual lizenziert, also es hängt ein bisschen davon ab, welche Version du nutzt.

00:35:56.320 --> 00:36:02.480
<v Martin>Die aktuellste Version meine ich, ist ausschließlich kommerziell.

00:36:02.480 --> 00:36:13.280
<v Martin>Und die Lizenz, also da bin ich jetzt nicht hundertprozentig drin, aber die Lizenz sagt so in etwa, wenn der Code ein Jahr alt ist, dann müssen sie es zusätzlich unter die LGPL stellen.

00:36:13.920 --> 00:36:21.680
<v Martin>Also wenn man quasi die LGPL-Lizenz nutzen will, dann ist der Code recht gut abgehangen, sozusagen.

00:36:21.840 --> 00:36:26.560
<v Dominik>Also LGPS-Partner ist Strong Copyleft, wenn ich das richtig verstehe.

00:36:27.840 --> 00:36:30.480
<v Martin>Da müsste ich jetzt meinen Anwalt fragen.

00:36:31.680 --> 00:36:46.240
<v Martin>Aber ja, es ist eine relativ restriktive Lizenz und man muss schauen, dass man das, also wenn man das verwenden will und es ist, man möchte es kommerziell einsetzen, dann muss man schon ganz genau hingucken, sage ich mal.

00:36:47.040 --> 00:36:48.000
<v Jochen>Ja.

00:36:49.440 --> 00:36:51.040
<v Jochen>Ja, ja, ja, ja.

00:36:52.160 --> 00:37:02.720
<v Jochen>Ja, interessant, ja, ja, genau, das war MySQL hatte doch so eine ähnliche Lizenz, aber ich bin mir nicht sicher, ob sie LGPL war, wahrscheinlich eher nicht.

00:37:06.880 --> 00:37:16.880
<v Jochen>Ja, nee, QT irgendwie, äh, aber ich meine, dann, das ist ja ja das QT selber ist ja irgendwie in C&lt;unk&gt; geschrieben, glaube ich.

00:37:18.400 --> 00:37:20.720
<v Jochen>Wie greift man denn dann von Python?

00:37:20.720 --> 00:37:24.400
<v Jochen>Weil ich meine, die Anwendung ist ja dann in Python irgendwie geschrieben, hauptsächlich.

00:37:24.400 --> 00:37:25.200
<v Martin>Richtig, genau.

00:37:25.200 --> 00:37:26.560
<v Martin>Das ist 100% Python.

00:37:26.560 --> 00:37:28.400
<v Jochen>Wie kommt man denn dann an C&lt;unk&gt; dran?

00:37:28.400 --> 00:37:30.080
<v Jochen>Da braucht man ja da wahrscheinlich irgendeinen Wrapper um.

00:37:30.240 --> 00:37:31.360
PyQt oder sowas?

00:37:31.360 --> 00:37:31.920
<v Jochen>Ja.

00:37:31.920 --> 00:37:32.720
<v Jochen>Irgendwie sowas.

00:37:32.880 --> 00:37:37.200
<v Martin>Das ist, die haben eine Python-API.

00:37:37.200 --> 00:37:38.800
<v Dominik>Python Bindings quasi.

00:37:38.800 --> 00:37:40.640
<v Martin>Python Bindings, richtig.

00:37:40.880 --> 00:37:43.200
<v Dominik>Und wie wird jetzt die du was?

00:37:43.200 --> 00:37:47.440
<v Dominik>Die kannst du auch einfach quasi in jedem Betriebssystem jetzt wieder verwenden, wenn du das möchtest.

00:37:47.680 --> 00:37:48.960
<v Martin>Könnte ich, ja.

00:37:48.960 --> 00:37:54.880
<v Martin>Also QT ist plattformunabhängig, also die laufen eigentlich fast überall.

00:37:55.520 --> 00:37:57.840
<v Martin>Ich setze es aber unter Linux einfach ein.

00:38:01.360 --> 00:38:03.600
<v Dominik>Und wie machst du sowas wie Stylings und sowas?

00:38:03.600 --> 00:38:06.800
<v Dominik>Also wie das, was ich eben gesagt habe, mit hübsch oder sowas.

00:38:06.800 --> 00:38:10.160
<v Dominik>Wie gehst du davor, dass das irgendwie so ein bisschen dynamisch ist und so?

00:38:10.160 --> 00:38:12.560
<v Dominik>Bietet das Qt einfach alles von Hause aus?

00:38:13.840 --> 00:38:17.600
<v Martin>Ja, Theming lässt sich machen mit Qt.

00:38:18.240 --> 00:38:22.400
<v Martin>Es bringt aber von Hause aus schon quasi das Styling mit.

00:38:22.720 --> 00:38:26.800
<v Martin>Das sieht einigermaßen nativ aus, unter jeder Plattform.

00:38:27.760 --> 00:38:31.040
<v Martin>Unter Linux hat es eben den Style, den es unter Linux hat.

00:38:31.360 --> 00:38:37.200
<v Martin>Lässt sich aber einfach, also man kann quasi jedes Element nochmal separat stylen, wenn man das möchte.

00:38:37.200 --> 00:38:39.280
<v Martin>Das geht einfach mit CSS dann.

00:38:40.160 --> 00:38:41.040
Wenn man das möchte.

00:38:41.200 --> 00:38:45.040
<v Martin>Also die haben quasi so eine abgespeckte Art von CSS.

00:38:45.040 --> 00:38:46.640
<v Martin>Unterstützen sie.

00:38:46.640 --> 00:38:55.040
<v Martin>Und ja, da kann man quasi seine Elemente dann färben oder einen anderen Rahmen geben oder was weiß ich.

00:38:57.280 --> 00:38:58.160
Ja.

00:38:58.160 --> 00:38:59.280
<v Martin>Genau.

00:39:00.320 --> 00:39:01.200
<v Jochen>Ja, ja, ja.

00:39:01.200 --> 00:39:02.000
Nee, interessant.

00:39:02.000 --> 00:39:03.840
<v Jochen>Ich glaube, ich verwende ich das letzte Mal mit Qt.

00:39:04.080 --> 00:39:15.120
<v Jochen>Ich erinnere mich noch dran, das ist aber schon auch wieder ein bisschen her, glaube ich, 2016 oder so, habe ich das letzte Mal irgendwie für einen Headless-Browser, den ich brauchte, weil irgendwie JavaScript ausgeführt werden sollte.

00:39:15.120 --> 00:39:33.200
<v Jochen>Irgendwie, das war auch damals irgendwie das Ding, was ich da verwendet hatte, auch das war auch noch diese, die, ich glaube mit WebKit, die Engine war WebKit und dann brauchte aber irgendwie braucht man noch so ein bisschen cute außenrum und dann musste ich da irgendwie Qt 5 selber kompilieren und ich erinnere mich noch, dass das ganz schön schmerzhaft war, aber.

00:39:33.440 --> 00:39:36.560
<v Dominik>Also ich erinnere mich auch dran, dass ich bin damals, glaube ich, über die Lizenz gestolpert.

00:39:36.800 --> 00:39:44.320
<v Dominik>In meinen ersten G-Versuchen, so in Python, da wollte ich unbedingt, wie man das am Anfang macht, irgendwas mit GUI bauen, dass da irgendjemand was anzeigen kann auf seinem Bildschirm.

00:39:44.320 --> 00:39:49.520
<v Dominik>Und dann habe ich so ein bisschen rumprobiert, auch mit Qt, aber das hat irgendwie nicht so funktioniert, wie ich das wollte.

00:39:49.520 --> 00:39:54.240
<v Dominik>Und ich bin ja so ein bisschen über diese C&lt;unk&gt;-Implementierung gestolpert und ich fand auch diese Pi-Cute nicht so super.

00:39:54.240 --> 00:39:56.160
<v Dominik>Und bin dann bei Kiwi gelandet tatsächlich.

00:39:56.160 --> 00:40:01.600
<v Dominik>Wo ich auch sagen muss, da gingen ein paar ein paar Sachen, aber das war auch alles eher so, ich weiß nicht genau.

00:40:02.080 --> 00:40:04.640
<v Dominik>Nicht so, wie ich das eigentlich angenehm finde.

00:40:04.640 --> 00:40:08.560
<v Dominik>Und dann habe ich es dann mit den Quiz wieder gelassen, beziehungsweise mit Web angefangen irgendwann.

00:40:08.880 --> 00:40:09.280
Ja.

00:40:10.320 --> 00:40:11.120
<v Martin>Ja, Kiwi.

00:40:11.360 --> 00:40:14.960
<v Martin>Also Kiwi, die Widgets sind halt, also die haben nicht genug Widgets, ne?

00:40:14.960 --> 00:40:20.640
<v Martin>Also da kommt man nicht weit, wenn man wirklich intensiv was damit machen will, finde ich.

00:40:20.640 --> 00:40:21.600
Ja.

00:40:23.680 --> 00:40:31.040
<v Jochen>Ja, ich meine, aus meiner Perspektive wäre jetzt eher so die Frage, warum nicht, ich meine, warum macht man heutzutage überhaupt noch GUI?

00:40:31.040 --> 00:40:33.760
<v Jochen>Ich meine, das macht man ja, eigentlich ist doch heute alles Web.

00:40:34.000 --> 00:40:52.320
<v Jochen>Und sag mal so, es ist ja ein etwas anderes Modell und eigentlich vielleicht ein bisschen einfacher zu maintain, gerade wenn man jetzt eben nicht so eine größere Organisation ist, sondern eher kleiner, dann ist das ja mit irgendwie, wie macht man das, wenn Clients inkompatibel werden oder so oder unterschiedliche Versionen hat, oder das ist ja alles ganz schrecklich.

00:40:52.320 --> 00:41:02.000
<v Jochen>Und das ist ja so ein Problem, das man halt hat, wenn man irgendwie klassisch kleinen Server machen würde oder so oder diese alten Desktop-UI-Geschichten machen würde.

00:41:02.000 --> 00:41:10.880
<v Jochen>Aber ich meine, klar, wenn du das zentral laufen lässt und greifst dann nur sozusagen auf das Ding, wo das dann läuft, zu, dann hast du diese ganzen Probleme eigentlich nicht mehr.

00:41:11.360 --> 00:41:15.280
<v Martin>Richtig, also ich habe ja eine ganze Menge Probleme von Hals geschafft, sozusagen.

00:41:15.760 --> 00:41:23.040
<v Martin>Wo ich mir am Anfang sehr, sehr viele Gedanken drüber gemacht habe, ist, wie ist das ressourcentechnisch?

00:41:23.040 --> 00:41:43.120
<v Martin>Ja, also man hat ja quasi das, oder wenn man eine Web-Anwendung hat, dann habe ich ja quasi einen ganzen Schwung von Usern und die teilen sich in der Regel keinen, also die teilen sich einen State in der Web-Anwendung, in der Regel, würde ich jetzt mal behaupten.

00:41:43.760 --> 00:41:52.240
<v Martin>Und dadurch kann ich quasi die Ressourcen, sag mal, gleichmäßig auf meine Datenbank und so weiter verteilen.

00:41:53.200 --> 00:41:55.360
<v Martin>Ich weiß nicht, also da kennt ihr euch eigentlich besser aus.

00:41:55.360 --> 00:42:01.680
<v Jochen>Ja, also ich würde sagen, der State einer Web-Anwendung liegt normalerweise in der Datenbank, aus meiner Perspektive.

00:42:01.680 --> 00:42:08.400
<v Jochen>Und genau, dann gibt es halt irgendwie diverse Prozesse, die halt, an die man Requests hinschickt und dann senden sie halt Responses zurück.

00:42:08.800 --> 00:42:10.720
<v Jochen>Und genau, ja.

00:42:11.840 --> 00:42:19.280
<v Martin>So, und da hatte ich das Problem, also ich dachte es gäbe das Problem, dass ich das nicht machen kann sozusagen.

00:42:19.920 --> 00:42:25.600
<v Martin>Also meine Anwendung, die ich habe, also Mia-Plan ist, hat ein State für jeden Nutzer.

00:42:27.200 --> 00:42:38.080
<v Martin>Und hier hatte ich in meinem Django-Prototypen auch probiert, also diesen Zustand quasi umzusetzen und bin da aber so schon irgendwie auf eine Hürde gestoßen.

00:42:38.080 --> 00:42:44.800
<v Martin>Also das scheint es jedenfalls nicht nativ so zu gehen in Django, wenn ich das richtig gesehen habe.

00:42:44.800 --> 00:42:48.160
<v Martin>Allerdings habe ich auch nur vielleicht eine Woche oder so das ausgetestet.

00:42:48.480 --> 00:42:48.880
<v Jochen>Das geht schon.

00:42:48.880 --> 00:42:54.240
<v Jochen>Also du kannst halt musst ja dann Daten irgendwie modellieren und die kannst du dann in der Datenschannung speichern und dann kommst du da auch wieder dran.

00:42:54.240 --> 00:42:58.560
<v Jochen>Also es ist die Frage, was genau du da halten wolltest an State, aber.

00:42:58.800 --> 00:43:03.360
<v Martin>Naja, also ich habe zum Beispiel relativ große NumPy-Matrizen.

00:43:03.680 --> 00:43:15.120
<v Martin>Und da, und das muss auch NumPy sein, also das kann ich mir jetzt nicht irgendwie in die Datenbank reinschieben, sondern, also das könnte ich schon tun, aber das ist mir für jede Operation müsste ich mir das dann wieder rausziehen.

00:43:15.120 --> 00:43:16.640
<v Martin>Das macht also eigentlich keinen Sinn.

00:43:16.640 --> 00:43:23.440
<v Martin>Und da hatte ich jetzt, also von meinem drauf gucken, keine gute Idee, wie ich das mit Django überhaupt umsetzen kann.

00:43:23.600 --> 00:43:25.280
<v Jochen>Okay, das ist natürlich auch eine interessante Anforderung.

00:43:25.280 --> 00:43:30.640
<v Jochen>Also das wäre, dann wäre die Frage, okay, warum warum hast du denn Number-Matrizen?

00:43:30.720 --> 00:43:38.000
<v Jochen>Also ich meine, so klassischerweise hast du ja eine relationale Datenbank und dann hast du die Daten halt in einer Daten, in einer Tabelle irgendwie oder mehreren Tabellen.

00:43:38.160 --> 00:43:39.600
<v Dominik>Ja, vielleicht nochmal ein Planungsding.

00:43:39.680 --> 00:43:40.800
<v Dominik>Also was ist überhaupt das Problem?

00:43:40.800 --> 00:43:47.120
<v Dominik>Also du hast jetzt Menschen, die arbeiten zu Zeiten und die sich koordinieren wollen.

00:43:47.120 --> 00:43:53.360
<v Martin>Ja, also Anforderungen ist im Prinzip die Folge.

00:43:53.360 --> 00:43:59.920
<v Martin>Ich habe einen Sprung von Mitarbeitern und die möchte ich quasi einplanen über meinetwegen im Monat.

00:43:59.920 --> 00:44:01.920
<v Martin>Also der Zeitraum ist variabel.

00:44:01.920 --> 00:44:12.960
<v Martin>Und ich möchte eigentlich zu jeder halben Stunde wissen, wie viele Mitarbeiter arbeiten in Summe gerade an diesem Tag, meinetwegen an diesem Arbeitsplatz.

00:44:14.080 --> 00:44:18.000
<v Martin>Das muss ich wissen und da muss ich effizient Berechnungen drauf machen können.

00:44:18.160 --> 00:44:28.560
<v Martin>Und auch auf der Länge, also auf der Länge der, also wie lange arbeitet ein Mitarbeiter an diesem Tag an dieser Maschine zum Beispiel.

00:44:28.720 --> 00:44:38.880
<v Martin>Und da muss ich in der Lage sein, effizient Berechnungen drauf zu machen, weil darauf basiert natürlich zum Beispiel die automatische Planung, die ich machen kann und so weiter.

00:44:38.880 --> 00:44:46.160
<v Martin>Also da mache ich eigentlich sämtliche Berechnungen drauf, auch die Anzahl der Stunden, wie lange ist ein Mitarbeiter eingeplant und so weiter.

00:44:46.160 --> 00:44:50.320
<v Martin>Und ja, das lässt sich am einfach, also meiner Ansicht nach am einfachsten mit Nopy machen.

00:44:50.320 --> 00:45:00.720
<v Martin>Weil da lege ich mir eine Matrix an, tue die Stunden rein und dann kann ich in NumPy, sage ich, oder habe ich aber da sämtliche Operationen, die ich brauche.

00:45:02.960 --> 00:45:17.120
<v Jochen>Ja, also ja klar, also wenn man jetzt NumPy-Arrays hat, dann ist das natürlich so ein bisschen inkompatibel jetzt mit diesem Standardmodell, wo man in Django halt eine relationale Datenbank hat.

00:45:17.120 --> 00:45:24.000
<v Jochen>Ich meine, man kann das natürlich auch machen, dann ist halt die Frage, ob einem Django noch so viel nützt, weil dann kann man den ORM halt nicht benutzen.

00:45:25.920 --> 00:45:34.960
<v Martin>Ich bin schon mal erfreut, dass ihr nicht sagt, ach, Mensch, da gibt es doch hier dieses Plugin, da lädst du dir einfach folgendes und dann geht es nicht aus.

00:45:35.360 --> 00:45:38.160
<v Jochen>Das geht tatsächlich eher nicht, denke ich.

00:45:38.160 --> 00:45:52.000
<v Jochen>Also was man, also ich meine, wahrscheinlich wäre dann eine Art, dass man das halt irgendwie, die Daten, die man hat, die lässt, hat man halt irgendwo einem Object so liegen oder so, in Paketformat oder sonst wie.

00:45:52.000 --> 00:45:56.640
<v Jochen>Und dann geht das natürlich auch, aber dann nützt einem halt der ganze ORM-Kram nichts mehr.

00:45:56.640 --> 00:46:00.640
<v Jochen>Die Frage wäre halt, kann man das nicht vielleicht doch irgendwie auf SQL abbilden oder geht das halt gar nicht?

00:46:00.640 --> 00:46:02.320
<v Jochen>Wenn es nicht geht, ja, dann kann man halt nichts machen.

00:46:02.320 --> 00:46:03.600
<v Jochen>Dann nützt einem.

00:46:03.760 --> 00:46:06.400
<v Dominik>Also klingt für mich, als wären da viele Relationen irgendwie, ne?

00:46:06.400 --> 00:46:09.520
<v Martin>Also das kann man mit Sicherheit abbilden.

00:46:09.520 --> 00:46:11.360
<v Martin>Die Frage ist, wie viele Schmerzen hat man dabei?

00:46:11.520 --> 00:46:12.400
<v Jochen>Ja, gut, genau.

00:46:12.400 --> 00:46:21.680
<v Jochen>Und wenn man es schon so hat und das gut funktioniert, dann ist halt die Frage, ist das, lohnt sich das oder macht man es nicht dann lieber so, dass man das einfach verwenden kann, was man schon hat, was funktioniert, ja.

00:46:25.040 --> 00:46:27.440
<v Martin>Ja, da kommt es her.

00:46:27.440 --> 00:46:29.600
<v Jochen>Aha, interessant.

00:46:29.600 --> 00:46:34.240
<v Jochen>Aber also es ist auch wirklich rein Nummer, kein Pandas oder sowas, sondern einfach auch.

00:46:34.800 --> 00:46:36.800
<v Martin>Auch, aber das versuche ich zu vermeiden.

00:46:37.280 --> 00:46:46.720
<v Martin>Also jetzt rein Pandas ist meiner Ansicht nach nicht praktikabel, weil ganz einfach die Importzeit beträgt drei Sekunden.

00:46:46.720 --> 00:46:47.840
<v Jochen>Ja, ja, ja.

00:46:47.840 --> 00:46:50.160
<v Martin>Das ist völlig inakzeptabel.

00:46:50.320 --> 00:46:51.520
<v Jochen>Das soll ich nur einmal importieren.

00:46:52.240 --> 00:47:02.720
<v Martin>Aber ja, aber selbst wenn ich den Import an die Startzeit verschiebe, also ich kann, oder in die Laufzeit, ist ja egal.

00:47:02.720 --> 00:47:04.880
<v Martin>Drei Sekunden sind an keiner Stelle akzeptabel.

00:47:05.360 --> 00:47:06.240
Okay, ja gut.

00:47:06.560 --> 00:47:12.880
<v Martin>Und da bleibt höchstens die Variante, hier die Alternativen zu nehmen, die es inzwischen gibt.

00:47:12.880 --> 00:47:19.440
<v Martin>Jetzt müsste ich Polars, glaube ich, die aktuelle Entwicklung in Rust, wenn mich nicht alles täuscht.

00:47:20.000 --> 00:47:22.000
<v Martin>Das habe ich mir noch nicht in der Tiefe angeguckt.

00:47:23.280 --> 00:47:26.080
<v Martin>Ich nehme mal an, die Importzeiten sind da besser.

00:47:26.080 --> 00:47:30.160
<v Martin>Ich weiß aber nicht, ob Polars schon alles kann, was ich da brauche.

00:47:30.160 --> 00:47:33.680
<v Jochen>Ja, das ist ja jetzt erst am Anfang, genau.

00:47:33.680 --> 00:47:34.240
<v Jochen>Ja.

00:47:34.560 --> 00:47:36.240
<v Jochen>Ja, interessant.

00:47:37.280 --> 00:47:37.600
<v Jochen>Ja.

00:47:38.800 --> 00:47:47.760
<v Jochen>Ja, also das ist natürlich auch etwas, was man halt in Python gut machen kann und sonst wahrscheinlich auch eher nicht hat, dass man halt diese Numpai-Geschichte da direkt irgendwie verwenden kann.

00:47:48.800 --> 00:47:49.200
Ja.

00:47:49.760 --> 00:47:53.760
<v Martin>Also NumPy ist eine der besten Bibliotheken in Python, würde ich sagen.

00:47:53.760 --> 00:47:54.080
<v Martin>Ja, ja.

00:47:54.240 --> 00:47:59.520
<v Martin>Da kann man echt so viel rausziehen und da ist so viel schon da und es ist vor allem verdammt schnell.

00:47:59.520 --> 00:47:59.760
<v Jochen>Ja.

00:48:03.840 --> 00:48:13.680
<v Jochen>Aber wie ist denn dann das, also wenn wir jetzt zu dem Qt, da, also die Bindings, ist das dann halt, da muss man dann Camelcase verwenden?

00:48:14.720 --> 00:48:16.240
<v Jochen>Wahrscheinlich ja, ne?

00:48:16.560 --> 00:48:18.560
<v Martin>In QT6 nicht mehr.

00:48:19.360 --> 00:48:22.480
<v Martin>Da haben sie es quasi normal gemacht.

00:48:23.440 --> 00:48:26.080
<v Martin>Aber naja, man gewöhnt sich dran, sag ich.

00:48:26.320 --> 00:48:26.880
<v Jochen>Ja, gut, klar.

00:48:27.040 --> 00:48:33.680
<v Martin>Es ist jetzt auch nicht so, es ist auch kein Weltuntergang, wenn ich jetzt für die Calls dann eben Camelcase habe.

00:48:33.680 --> 00:48:35.760
<v Martin>Aber ja, schön ist es nicht, das stimmt.

00:48:36.480 --> 00:48:38.480
<v Dominik>Ja, so die Fußläge nach oben gekriegt.

00:48:38.560 --> 00:48:45.280
<v Jochen>Ja, gut, ich meine, ich mache ja auch andere Sachen aus TypeScript und so, da mache ich auch Camel Case, aber wenn man in Python ist, dann finde ich das mal, wenn die Kombination.

00:48:45.440 --> 00:48:48.000
<v Jochen>Manchmal Snack Case ist manchmal Camel Case, dann ist es ein bisschen.

00:48:48.000 --> 00:48:49.440
<v Jochen>Aber ja, gut.

00:48:51.120 --> 00:48:54.240
<v Jochen>Ja, ja, interessante Geschichte.

00:48:54.240 --> 00:49:00.400
<v Jochen>Aber wie ist das denn jetzt, wenn jetzt mehrere Leute auf die Applikation zugreifen?

00:49:01.200 --> 00:49:07.760
<v Martin>Genau, also ich war ja stehen geblieben, also ich habe mir Sorgen gemacht sozusagen, dass das nicht skaliert.

00:49:08.640 --> 00:49:12.960
<v Martin>Und das scheint aber nicht so schlimm zu sein.

00:49:12.960 --> 00:49:15.280
<v Martin>Also nein, scheint relativ gut zu sein.

00:49:15.280 --> 00:49:19.920
<v Martin>Also ich habe mir vor allem Sorgen gemacht um die Bandbreite.

00:49:19.920 --> 00:49:23.680
<v Martin>Und da muss ich sagen, das ist gar kein Problem.

00:49:23.680 --> 00:49:31.600
<v Martin>Also das kostet tatsächlich fast keine Bandbreite und würde sogar behaupten, das ist ähnlich einer Web-Applikation.

00:49:31.920 --> 00:49:39.680
<v Jochen>Hm, wie übertreibt denn dieses Gracamoli-Daten, ist das nicht ein Bild oder?

00:49:40.560 --> 00:49:41.120
<v Martin>Nein.

00:49:41.520 --> 00:49:43.600
<v Martin>Also das kommt darauf an.

00:49:45.120 --> 00:49:47.040
<v Martin>Das unterstützt mehrere Backends.

00:49:47.040 --> 00:49:50.320
<v Martin>Man kann zum Beispiel VNC nehmen.

00:49:50.320 --> 00:49:53.040
<v Martin>Man kann aber auch XRDP nehmen.

00:49:53.040 --> 00:49:58.480
<v Martin>Und je nachdem, wie effizient das implementiert ist, ist es gut.

00:49:59.280 --> 00:50:03.360
<v Martin>Und im Fall von XRDP ist es gut.

00:50:03.840 --> 00:50:06.080
<v Martin>Und da werden also keine Bilder mehr übertragen.

00:50:06.080 --> 00:50:10.320
<v Martin>Also da wird vielleicht ein Frame am Anfang übertragen und dann werden nur noch Deltas übertragen.

00:50:10.320 --> 00:50:11.280
<v Jochen>Okay, ja.

00:50:11.280 --> 00:50:14.160
<v Martin>Also da entsteht tatsächlich nicht viel Traffic.

00:50:15.440 --> 00:50:20.080
<v Martin>Und was den Speicherbedarf angeht, da bin ich ja selber für verantwortlich.

00:50:20.400 --> 00:50:21.840
<v Martin>Und habe das selber in der Hand.

00:50:21.840 --> 00:50:26.480
<v Jochen>Aber es ist denn ja schon so, dass du quasi eine Applikation pro Nutzer irgendwie starten musst, mehr oder weniger.

00:50:26.720 --> 00:50:27.280
<v Martin>Richtig.

00:50:27.280 --> 00:50:28.960
<v Martin>Genau, das ist schon so.

00:50:28.960 --> 00:50:32.080
<v Martin>Aber ich habe mir das durchgerechnet, also das funktioniert.

00:50:32.320 --> 00:50:39.280
<v Martin>Also ich kann ja auch selber mehr oder weniger bestimmen, sage ich mal, wie viel Speicher das Ganze frisst.

00:50:39.280 --> 00:50:47.360
<v Martin>Und wenn ich mir halt die Bibliothek reinziehe, die 500 Megabyte beim Import frisst, dann kann ich die halt nicht nehmen.

00:50:50.560 --> 00:51:01.040
<v Jochen>Ja, auch interessant, braucht man, und genau, was mich auch noch interessieren würde, um diese grafische Darstellung halt, die muss ja dann irgendwie schon irgendwo gerendert werden.

00:51:01.040 --> 00:51:06.080
<v Jochen>Das heißt, du brauchst auf dem Server hast du dann quasi auch einen X oder irgendwie sowas?

00:51:06.080 --> 00:51:06.640
Genau.

00:51:07.600 --> 00:51:11.120
<v Martin>Leider ist es noch ein, also es wird ein X-Server pro Anwender gestartet.

00:51:12.080 --> 00:51:17.920
<v Martin>Und es ist leider noch ein X-Server und jetzt komme ich gerade nicht auf den Namen.

00:51:17.920 --> 00:51:20.000
<v Martin>Was war die Weiterentwicklung davon?

00:51:20.000 --> 00:51:20.720
<v Martin>Oh, das war das.

00:51:21.600 --> 00:51:22.720
<v Martin>Was kam nach X?

00:51:23.360 --> 00:51:23.840
Wayland.

00:51:23.920 --> 00:51:24.720
<v Jochen>Wayland, genau.

00:51:24.960 --> 00:51:26.480
<v Martin>Wayland, richtig, genau.

00:51:27.040 --> 00:51:33.360
<v Martin>Also es wird daran gearbeitet, dass das Ganze Wayland-kompatibel wird, aber ist noch nicht so weit.

00:51:33.360 --> 00:51:38.160
<v Martin>Aber meine Hoffnung ist ja, dass X gibt es ja jetzt schon, ich weiß nicht, 20 Jahre, 30 Jahre.

00:51:39.120 --> 00:51:44.240
<v Martin>Also ich denke, es wird es auch noch eine Weile geben, dass da noch genug Zeit ist, das zu portieren.

00:51:44.560 --> 00:51:45.520
<v Jochen>Ja.

00:51:46.000 --> 00:51:54.000
<v Jochen>Und dann ist Map quasi ein User, der das von außen benutzt, eigentlich mehr oder weniger auf den User im Unix-System.

00:51:54.800 --> 00:51:56.000
<v Martin>Ja, nicht eigentlich, sondern tatsächlich.

00:51:56.160 --> 00:51:56.640
<v Jochen>Tatsächlich, ja.

00:52:00.240 --> 00:52:00.640
<v Jochen>Ja.

00:52:00.960 --> 00:52:02.320
<v Dominik>Schauen wir hier rum.

00:52:06.000 --> 00:52:16.720
<v Jochen>Ah, das ist, Dominik hat mir gerade irgendwie ein Plan auf dem Telefon aufgemacht und da flockerte das.

00:52:17.440 --> 00:52:19.680
<v Jochen>Das weiß ich allerdings aber nicht, ob das jetzt irgendwie.

00:52:20.240 --> 00:52:27.200
<v Martin>Ja, also das Ganze läuft auf Tablets und Telefonen, aber das ist nicht meine Zielgruppe eigentlich.

00:52:28.160 --> 00:52:29.840
<v Martin>Also es funktioniert.

00:52:29.840 --> 00:52:34.000
<v Martin>Man kann damit auch planen, man kann sogar Tastatureingaben und alles machen.

00:52:34.240 --> 00:52:36.960
<v Martin>Da gibt es eine Tassenkombination dafür, wie das geht.

00:52:36.960 --> 00:52:40.400
<v Martin>Wenn man in der FAC nachguckt, steht das da drin.

00:52:40.400 --> 00:52:43.440
<v Martin>Aber eigentlich ziele ich auf den Desktop-Anwender.

00:52:43.600 --> 00:52:46.640
<v Martin>Und eigentlich ist es nur schön, auf den Desktop zu planen.

00:52:46.640 --> 00:52:53.120
<v Martin>Ich glaube, keiner möchte wirklich auf dem Handy seine 32 Mitarbeiter planen.

00:52:53.120 --> 00:52:57.600
<v Martin>Also ich weiß nicht, ob es da irgendeine Software gibt, die das gut macht.

00:52:57.600 --> 00:52:59.200
<v Martin>Wenn, dann Chapeau.

00:52:59.840 --> 00:53:01.680
<v Martin>Aber ich ziele da nicht drauf.

00:53:01.680 --> 00:53:02.480
Also ich habe es nicht davon.

00:53:02.640 --> 00:53:08.320
<v Dominik>Also ich habe tatsächlich so ein paar Ideen an der Stelle auch schon durchgespielt, weil ich diese Anforderung wirklich auch so ein paar Mal gekriegt habe.

00:53:08.320 --> 00:53:12.000
Auch so Business ist es heraus, die es halt wirklich brauchten.

00:53:12.480 --> 00:53:14.400
<v Dominik>Die es ganz interessant fanden.

00:53:17.200 --> 00:53:18.880
Also nicht raus.

00:53:19.120 --> 00:53:20.880
<v Dominik>Muss ich eigentlich nochmal umsetzen.

00:53:20.880 --> 00:53:23.200
Irgendwann im nächsten Leben, wenn ich mehr Zeit finde.

00:53:25.840 --> 00:53:26.720
<v Jochen>Ja, ja, ja.

00:53:26.800 --> 00:53:34.240
<v Jochen>Aber ich meine, man kann sich schon, also so gerade im Büro-Feld haben, die sitzen die Leute ja schmeißen, schon vom Rechner, dann kann man dann schon von ausgehen, dass das so funktioniert.

00:53:34.880 --> 00:53:36.240
<v Jochen>Ja, ja, ja.

00:53:37.600 --> 00:53:46.000
<v Jochen>Ich meine, das ist halt ganz anders, als man das sozusagen so kennt, aber ich meine, wenn man so ein bisschen drüber nachdenkt, dann ist das eigentlich gar nicht so blöd.

00:53:46.400 --> 00:53:47.760
<v Jochen>Das ist schon interessant.

00:53:48.240 --> 00:53:53.040
<v Martin>Also der größte Vorteil, den ich sehe, ist wirklich die Entwicklungsgeschwindigkeit.

00:53:53.200 --> 00:54:02.080
<v Martin>Ich brauche, ich habe kein HTML, ich habe kein CSS, ich habe kein JavaScript, ich kann ein reines Python schreiben und kann mein Feature deployen.

00:54:02.400 --> 00:54:03.360
Ja.

00:54:04.960 --> 00:54:05.520
<v Jochen>Ja, ja.

00:54:06.000 --> 00:54:07.440
<v Martin>Und ich mag Python.

00:54:07.440 --> 00:54:11.360
<v Martin>Und ich mag weniger CSS und JavaScript, das mag ich nicht so gerne.

00:54:12.000 --> 00:54:17.200
<v Martin>Also ich kann es, ich komme nicht drum rum, also ich mache das auch, aber nur wo es wirklich nötig ist.

00:54:17.520 --> 00:54:18.160
<v Jochen>Ja.

00:54:19.760 --> 00:54:22.080
<v Dominik>Ja, ich überlege gerade, man hat sich so ein bisschen daran gewohnt.

00:54:23.040 --> 00:54:31.920
<v Dominik>Also ich finde zum Beispiel mittlerweile schwierig, das von den nicht mit CSS irgendwie vielleicht auch ein bisschen JavaScript zu stylen, weil mir so ein paar Sachen dann immer fehlen.

00:54:31.920 --> 00:54:36.800
<v Dominik>So diese dynamischen Sachen, an die man sich dann doch irgendwie dran gewöhnt, so Headless UI oder so.

00:54:38.080 --> 00:54:45.040
<v Dominik>Das geht mir schon auf die Nerven, wenn ich jetzt in Django das ohne Rest-API benutzen möchte, sondern die Templates einbaue.

00:54:45.040 --> 00:54:50.800
<v Dominik>Das ist manchmal schon immer so ein bisschen struggling, weil ich halt da schon relativ viel auf Vue.js klebe.

00:54:51.120 --> 00:54:54.560
<v Jochen>Ja, aber das ist ja kein Problem von.

00:54:54.720 --> 00:54:55.600
Das ist einfach das Ökosystem.

00:54:56.880 --> 00:55:06.000
<v Dominik>Die Frage ist halt, welche Leute haben sich schon wie viel auseinandergesetzt, mit Dingen zu entwickeln, die das schön, einfach und pretty zu benutzen machen.

00:55:06.560 --> 00:55:08.080
<v Jochen>Du meinst, achso, ja gut, okay.

00:55:08.080 --> 00:55:12.640
<v Jochen>Also wenn du aus der Entwicklersicht drauf guckst und dir dann überlegst, okay, wenn ich jetzt.

00:55:12.880 --> 00:55:15.280
<v Dominik>Schnell Produktivität maximal anpassen.

00:55:15.600 --> 00:55:24.480
<v Jochen>Und mit irgendwie UI-Sachen, wo ich mir meine, wenn ich quasi fürs Web eine Applikation so schreiben will, wie ich das sonst mit PyQt machen würde.

00:55:24.480 --> 00:55:28.400
<v Jochen>Oder mit Qt, welches, was nehme ich denn da?

00:55:28.400 --> 00:55:37.840
<v Jochen>Dann landest du wahrscheinlich bei den SPAs und dann landest du halt auch irgendwie bei irgendwas von den großen UI-Frameworks, die es halt für JavaScript gibt, weil genau, da ist halt schon am meisten Arbeit reingegangen.

00:55:37.920 --> 00:55:40.400
<v Dominik>Also ich bin mir natürlich dann so ein bisschen so ein Klotzansbein.

00:55:41.360 --> 00:55:44.080
<v Dominik>Naja, aber dafür habe ich natürlich auch das ganze Ökosystem mit damit.

00:55:44.640 --> 00:55:45.520
Ich bin halt nicht ganz alleine.

00:55:45.760 --> 00:55:49.600
<v Dominik>Also mein Problem wäre jetzt bei Qt in Python mit den Bindings.

00:55:49.600 --> 00:55:51.440
<v Dominik>Ich muss es halt alles selber bauen, ne?

00:55:51.440 --> 00:55:53.040
<v Dominik>Also vom Scratch irgendwie.

00:55:53.040 --> 00:55:55.840
<v Dominik>Ich muss mir selber komplett überlegen, wie das aussehen muss.

00:55:56.240 --> 00:55:59.680
<v Dominik>Ich frage mich gerade so ein bisschen wie, also wie überhaupt so ein.

00:55:59.920 --> 00:56:06.880
<v Dominik>Was ich auch noch gerne von Martin wissen würde, wäre, wie überhaupt so ein UI strukturiert ist so prinzipiell in Python.

00:56:06.880 --> 00:56:08.720
<v Dominik>Also von der Struktur her.

00:56:09.040 --> 00:56:16.480
<v Martin>Also ich glaube, das ist gar nicht so groß anders, als wenn man mit Django das machen würde.

00:56:16.800 --> 00:56:19.520
<v Martin>Also es gibt ein Event Loop.

00:56:20.160 --> 00:56:23.760
<v Martin>Und ja, eigentlich dreht sich alles um das Event Loop.

00:56:23.760 --> 00:56:29.920
<v Martin>Und wenn man was Asynchrones braucht, dann bietet QT da auch noch was Asynchrones.

00:56:30.000 --> 00:56:33.360
<v Martin>Das ist im Wesentlichen eine Python-Klasse.

00:56:33.360 --> 00:56:34.320
Ja.

00:56:34.960 --> 00:56:36.880
<v Martin>Was interessiert dich speziell?

00:56:36.880 --> 00:56:39.360
<v Dominik>Also mich interessiert vor allen Dingen das UI irgendwie.

00:56:39.360 --> 00:56:39.840
<v Dominik>Also, ne?

00:56:39.920 --> 00:56:49.520
<v Dominik>Also wie baue ich zuerst mir einen Rahmen und dann da verschiedene Container rein oder mache ich das irgendwie über so Floating-Geschichten oder mache ich das alles statisch?

00:56:49.680 --> 00:56:51.520
<v Martin>Achso, achso, jetzt habe ich dich falsch verstanden.

00:56:51.520 --> 00:56:58.080
Ich dachte, du meintest das Design der Python-Applikation, aber du meinst tatsächlich die Oberfläche an sich.

00:56:59.680 --> 00:57:04.480
<v Martin>Ja, also QT hat unterschiedliche Wege, wie man das machen kann.

00:57:04.480 --> 00:57:08.240
<v Martin>Ich habe da auch noch nicht alle bis ins Detail ergründet, tatsächlich.

00:57:08.240 --> 00:57:10.000
<v Martin>Auch nach drei Jahren noch nicht.

00:57:10.640 --> 00:57:15.360
<v Martin>Aber der Standardweg ist, man programmiert sich sozusagen seine Oberfläche.

00:57:15.360 --> 00:57:29.440
<v Martin>Also ich sage, ich möchte einen, also es gibt verschiedene Frame-Arten, zum Beispiel einen horizontalen Frame, einen vertikalen Frame oder was Tabellenartiges oder was Formularartiges.

00:57:29.440 --> 00:57:32.880
<v Martin>Und dort grupiere ich mir quasi meine Elemente rein.

00:57:32.880 --> 00:57:35.520
<v Martin>In diese Boxen, sag ich mal.

00:57:35.520 --> 00:57:40.880
<v Martin>Und das Ganze ist responsiv, wenn man das will.

00:57:42.160 --> 00:57:43.120
Auch animiert ist?

00:57:44.320 --> 00:57:44.880
<v Dominik>Wie bitte?

00:57:44.880 --> 00:57:46.080
<v Dominik>Auch animiert.

00:57:46.480 --> 00:57:48.160
<v Martin>Man kann alles.

00:57:48.160 --> 00:57:54.160
<v Martin>Du kannst animieren, du kannst also kannst ja mal die Widgets angucken, die es so gibt.

00:57:55.920 --> 00:58:04.560
<v Martin>Animiert, du kannst dir Schieberegler machen, du kannst dir Knöpfe machen in bunt oder in blinkend oder in Warband.

00:58:04.560 --> 00:58:06.640
<v Martin>Ja, das geht alles.

00:58:09.040 --> 00:58:26.000
<v Jochen>Woran ich eben denken musste, ist halt, ich glaube, es ist halt sehr stark davon abhängig, ob das jetzt eine gute Idee ist, sozusagen, dass man das einfach so nehmen kann, die Virtuals, oder wahrscheinlich kann man sie ein bisschen stylen oder ob das jetzt besser wäre, das über CSS und JavaScript zu machen, hängt halt wahrscheinlich sehr stark von einem Use Case an.

00:58:26.080 --> 00:58:30.640
<v Dominik>Ja, ja, also die Frage ist halt, wie die Arbeit muss ich jetzt da noch reinstecken, um ja so ein komplettes Konzept auszudrücken.

00:58:30.720 --> 00:58:48.800
<v Jochen>Aber wenn dein Use Case ist, du willst irgendwas Kompliziertes machen, aber letztlich ist es nicht so wahnsinnig wichtig, dass das jetzt zu deinen Brandfarben passt, weil das ist halt gar nichts, was jetzt Customer-Facing ist, sondern es ist halt irgendwie ein Ding, was Leute benutzen, um irgendwas zu erreichen, aber das ist nie nach außen hin sozusagen.

00:58:49.120 --> 00:58:50.560
<v Dominik>Wer ist denn ein Recorder?

00:58:51.520 --> 00:58:56.560
<v Jochen>Ja gut, natürlich schon die Leute, die das benutzen, aber das ist halt nur intern.

00:58:57.200 --> 00:59:01.360
<v Dominik>Das würde ich anders sehen, mit dem nur intern.

00:59:01.360 --> 00:59:16.480
<v Jochen>Ja gut, aber warum, ja, okay, aber da würde ich jetzt denken, an der Stelle macht es halt Sinn, vielleicht was zu verwenden, womit du komplizierte Sachen hinbekommst, die du vielleicht brauchst, weil das ein kompliziertes Problem ist.

00:59:16.480 --> 00:59:25.360
<v Jochen>Aber die Anforderung, dass du das jetzt irgendwie besonders hübsch oder so auf dich angepasst dargestellt hast, also dass es so aussieht, das ist halt nicht so wichtig.

00:59:25.760 --> 00:59:28.960
<v Dominik>Selbst wenn ich das so hübsch hinbekomme, ich frage mich, wie viel Aufwand ist, das so hübsch hinzubekommen, ja?

00:59:28.960 --> 00:59:32.720
<v Jochen>Ja, vielleicht wäre das ganz schrecklich viel Aufwand, aber wenn dir das egal ist, dann musst du es nicht machen.

00:59:33.120 --> 00:59:40.160
<v Martin>Naja, also du meintest gerade, entweder ich mache es mit CSS oder ich mache es mit QT, da stimmt nichts.

00:59:40.800 --> 00:59:45.600
<v Dominik>Was meinte es nicht mit CSS oder bei QT, sondern ich meinte sowas wie mit den ganzen Frameworks, die ich habe.

00:59:46.240 --> 00:59:54.000
<v Dominik>Die ich halt ja gerne muss, keine Ahnung, Tailwind oder sowas, damit ich halt schneller produktiv finde, Utility oder so, Utility Klassen einbauen.

00:59:54.320 --> 00:59:55.120
Aha.

00:59:56.400 --> 01:00:03.360
<v Dominik>Also weil wenn ich das ganze CS dann immer selber schreiben muss und dann muss ich mir erstmal überlegen und dann muss ich erstmal so ein paar Boxen bauen, dass das alles so passt, dann.

01:00:05.520 --> 01:00:09.680
<v Martin>Na, kommt drauf an, also QT hat auch noch einen Designer.

01:00:10.400 --> 01:00:13.920
<v Martin>Wenn du das Projekt nicht kommerziell nutzen willst, kannst du diesen Designer nutzen.

01:00:13.920 --> 01:00:15.120
<v Dominik>Aber wenn ich das nicht mache, dann kannst

01:00:15.120 --> 01:00:18.240
<v Martin>du es quasi nicht.

01:00:18.400 --> 01:00:23.520
<v Martin>Kannst du den Designer nutzen, dass es quasi mit Ziehen und Ablegen quasi.

01:00:23.760 --> 01:00:24.320
<v Dominik>Erinnere ich mich.

01:00:24.320 --> 01:00:24.960
<v Dominik>Das hatte ich genauso.

01:00:25.120 --> 01:00:25.440
Wie man

01:00:25.440 --> 01:00:32.080
<v Martin>das früher von, ich glaube, Visual Basic da war das so ähnlich schon.

01:00:32.240 --> 01:00:33.440
<v Martin>Kann man auch, wenn man will.

01:00:33.440 --> 01:00:34.800
<v Dominik>Der war auch sehr hübsch.

01:00:35.440 --> 01:00:42.960
<v Dominik>Nein, ich hatte tatsächlich, glaube ich, den angefangen auszuprobieren und dann bin ich darüber gestolpert, dass man das irgendwie mit der Lizenz eben nicht benutzen darf, wenn man das machen lasse.

01:00:44.560 --> 01:00:45.120
<v Dominik>Okay.

01:00:46.400 --> 01:01:07.840
<v Jochen>Ja, ja, ich meine, das machen ja auch die ganzen, oder ich meine, ich kenne jetzt die iOS-Seite besser, aber halt da X-Code und so, da gibt es ja auch solche Dinge, wo du dann halt dann grafisch dann die ganzen Elemente irgendwie sozusagen, selbst dann kannst du sogar Linien irgendwie dahin ziehen und dann werden dann halt irgendwie Event-Listener hinzugefügt oder keine Ahnung, oder dann wird halt ja genau, damit geht das wahrscheinlich auch irgendwie.

01:01:07.840 --> 01:01:17.760
<v Jochen>Aber naja, ich könnte mir schon vorstellen, dass, also du kannst jetzt zum Beispiel nehmen wir an eine iOS-App, da kann ich es halt, weil ich nehme mal an, dass es bei Qt genauso ist.

01:01:18.400 --> 01:01:26.880
<v Jochen>Sozusagen, damit kannst du im Grunde alles machen, aber wenn du jetzt eine iOS-App so hinkriegen willst, dass sie genauso aussieht, wie du das haben möchtest, ist das halt eine Menge Arbeit.

01:01:26.880 --> 01:01:27.280
<v Jochen>Ja, genau.

01:01:27.600 --> 01:01:32.720
<v Jochen>Also und zwar wahrscheinlich mehr Arbeit, als wenn du eine Webseite so aussehen lassen möchtest, wie du das aussehen lassen möchtest.

01:01:32.800 --> 01:01:40.080
<v Dominik>Das ist das so ein bisschen, also ohne dass ich jetzt angreifen möchte, aber das ist so ein bisschen mein Problem mit diesen UT-Sachen oder meine Kritik daran.

01:01:40.080 --> 01:01:44.240
<v Dominik>Also weil ich glaube, dass das wirklich schwieriger ist, das richtig schön hinzubekommen.

01:01:44.320 --> 01:01:52.400
<v Jochen>Ja, aber jetzt nochmal, jetzt versuch mal in HTML und CSS eine Tabelle so hinzukriegen mit all den Widgets und Features, die du vielleicht haben möchtest für deinen Use Case.

01:01:52.400 --> 01:01:54.240
<v Jochen>Dann hast du an der Stelle ein Riesenproblem.

01:01:54.240 --> 01:01:55.920
<v Jochen>Das geht ja auch nicht gut.

01:01:58.080 --> 01:02:03.040
<v Martin>Ja, also aus meiner Perspektive, mein Branding mache ja ich.

01:02:04.800 --> 01:02:06.880
<v Martin>Von daher hatte ich das Problem nicht.

01:02:08.080 --> 01:02:10.640
<v Martin>Dazu kann ich dann entsprechend auch nicht so viel sagen.

01:02:10.800 --> 01:02:16.160
<v Martin>Also was ich sagen kann ist, es lässt sich jedes Element mit CSS stylen, wenn man das will.

01:02:16.960 --> 01:02:24.320
<v Martin>Ja, ich glaube, so groß und unterscheiden tut sich das gar nicht versus Django.

01:02:24.320 --> 01:02:25.360
<v Jochen>Ah ja, okay.

01:02:25.360 --> 01:02:31.520
<v Martin>Mit dem Unterschied natürlich, wenn man sein geliebtes Framework nutzen will, Tailbind, was weiß ich.

01:02:31.520 --> 01:02:32.960
<v Martin>Das funktioniert natürlich anders.

01:02:33.280 --> 01:02:36.640
<v Martin>Aber gut, wenn man sich ein anderes Framework auswählt, dann sind halt Dinge anders, ja.

01:02:36.640 --> 01:02:45.120
<v Dominik>Ja, ja, also was ich halt meine, du kannst halt jetzt, wie wir das bei unserem Podcast gemacht haben, ich lasse ihm das erzählen habe, Bootstrap importiert und sonst nichts tun für das Design, weil das nicht wichtig ist.

01:02:45.120 --> 01:02:46.240
<v Jochen>Ja, ja, genau.

01:02:46.240 --> 01:02:49.120
<v Jochen>Also da habe ich das ja auch im Grunde genommen.

01:02:49.200 --> 01:02:54.560
<v Jochen>Ja, ich glaube auch, das ist der Grund, warum halt Bootstrap quasi so viel verwendet wird in internen Tools.

01:02:54.800 --> 01:02:56.560
<v Jochen>Weil da ist es halt oft egal.

01:02:56.560 --> 01:02:58.000
<v Jochen>Es ist halt wurscht, ja.

01:02:58.000 --> 01:03:01.680
<v Jochen>Also wie das jetzt aussieht, es muss halt bloß irgendwie halbwegs bedienbar sein.

01:03:01.680 --> 01:03:05.200
<v Jochen>Und das kriegt man mit Bootstrap ja schon hin.

01:03:05.200 --> 01:03:06.640
<v Jochen>Es sieht halt nicht so toll aus.

01:03:06.640 --> 01:03:08.160
<v Jochen>Aber ja.

01:03:08.640 --> 01:03:09.760
<v Jochen>Genau.

01:03:10.240 --> 01:03:10.880
<v Jochen>Ja, ja.

01:03:11.440 --> 01:03:12.720
<v Jochen>Ich weiß es nicht so genau.

01:03:13.120 --> 01:03:16.000
<v Jochen>Es ist immer, das ist alles eine, das ist so wirklich so ein bisschen.

01:03:16.160 --> 01:03:17.840
Also mich hat das schreiendeweise.

01:03:18.160 --> 01:03:19.680
<v Dominik>Was möchte man am Anfang immer machen?

01:03:19.680 --> 01:03:23.200
<v Dominik>Wenn man jung ist und Software entwickelt will, möchte man Spiele programmieren.

01:03:23.680 --> 01:03:26.960
<v Dominik>Das geht mit Cute wahrscheinlich schon ein bisschen besser als mit Web.

01:03:26.960 --> 01:03:31.680
<v Dominik>Aber auch da bin ich mir nicht sicher, ob das die richtige Idee ist, irgendwie das so zu betrachten.

01:03:32.160 --> 01:03:35.680
<v Jochen>Nee, ich glaube, da würde, da würde es eine Spiele.

01:03:35.920 --> 01:03:37.360
<v Dominik>Wir können auch noch was machen willst.

01:03:37.360 --> 01:03:39.680
<v Dominik>Also ob du eine 3D-Intel möchtest oder halt nicht.

01:03:39.680 --> 01:03:45.520
<v Dominik>Also ob der halt dann eine zweidimensionale, weiß nicht, kann man Fensteransicht sagen zu Cute, reicht.

01:03:45.840 --> 01:03:46.800
<v Jochen>Achso, ja cool.

01:03:46.960 --> 01:03:51.120
<v Martin>Also für Spiele wäre jetzt QT nicht mal eine erste Idee.

01:03:51.120 --> 01:03:53.440
<v Martin>Aber kommt sicherlich aufs Spiel an.

01:03:53.440 --> 01:03:54.640
Ja, klar auch.

01:03:54.640 --> 01:03:56.160
<v Dominik>Also nur weil man dann Python macht.

01:03:58.080 --> 01:03:59.520
Ja, genau.

01:04:02.080 --> 01:04:03.680
<v Martin>Das geht wahrscheinlich gut.

01:04:03.680 --> 01:04:04.080
<v Jochen>Ja.

01:04:06.160 --> 01:04:08.160
<v Dominik>Da kam ich mit Kiwi schon ein bisschen weiter tatsächlich.

01:04:08.160 --> 01:04:10.640
<v Dominik>Also es war auch so eine Art Bürosimulator, weißt du, ey.

01:04:10.880 --> 01:04:11.840
Ja.

01:04:14.000 --> 01:04:18.320
<v Dominik>Ich habe einen Fantasy-Manager für unsere Eishockey-Runde gebaut.

01:04:18.320 --> 01:04:19.520
<v Jochen>Ja, gut, sowas.

01:04:19.920 --> 01:04:21.920
<v Jochen>Das hat wundervoll funktioniert.

01:04:21.920 --> 01:04:22.880
Ja.

01:04:23.680 --> 01:04:26.480
War sogar hübsch in Kiwi.

01:04:26.800 --> 01:04:28.560
<v Dominik>Aber ja, ich glaube, man will das nicht.

01:04:28.560 --> 01:04:29.920
<v Jochen>Bloß fummelig.

01:04:30.080 --> 01:04:41.280
<v Jochen>Ja, aber was, ähm, was mich auch nochmal interessieren, würde so rein so ressourcenverbrauchmäßig, wenn ich jetzt für einen User so eine Applikation starte mit Qt, da habe ich schon das Gefühl, also wahrscheinlich so ein paar MB wird die dann schon einen Hauptsprecher brauchen oder so.

01:04:42.880 --> 01:04:48.560
<v Jochen>Die muss ja dann auch die ganze Zeit laufen, obwohl die muss eigentlich nur so lange laufen, wie ein Benutzer sie tatsächlich benutzt.

01:04:48.560 --> 01:04:56.720
<v Jochen>Dann kann man irgendwie den State irgendwie so aus serialisieren und erst beim nächsten Mal, wenn jeder Nutzer wiederkommt, dann muss man das halt irgendwie wieder sich irgendwo herholen.

01:04:56.720 --> 01:04:57.680
<v Martin>Genau so ist es.

01:04:57.680 --> 01:05:13.520
<v Jochen>Ja, aber tatsächlich, solange ein Nutzer irgendwie quasi da drauf guckt, also die Frage eingeloggt ist, oder ich weiß nicht, wie man das beschreiben kann, solange irgendwie eine Session aktiv ist, wie auch immer, brauchst du halt diesen Hauptspeicher.

01:05:13.520 --> 01:05:14.560
<v Martin>Ja, genau.

01:05:14.560 --> 01:05:15.680
<v Jochen>Ja, okay.

01:05:16.080 --> 01:05:20.240
<v Martin>Dann bist du, wobei da auch einiges im Shared Memory sich befindet.

01:05:20.880 --> 01:05:21.440
Ja, die ganzen

01:05:21.440 --> 01:05:22.720
<v Jochen>Bibliotheken wahrscheinlich, ja.

01:05:22.960 --> 01:05:24.320
<v Martin>Das macht Python von sich aus schon.

01:05:24.320 --> 01:05:31.600
<v Martin>Das heißt, man hat jetzt nicht komplett den Overhead von einem Nutzer auf alle Nutzer, sondern da wird noch einiges geteilt.

01:05:31.600 --> 01:05:33.600
<v Martin>Aber ja, prinzipiell schon.

01:05:34.560 --> 01:05:46.160
<v Jochen>Ja, weil da bist du natürlich dann wahrscheinlich ein bisschen ineffizienter als eine Webanwendung, die halt nur das, wo es dann halt einen Prozess gibt, der halt dann viele Requests von unterschiedlichen Benutzern.

01:05:46.400 --> 01:05:48.960
<v Martin>Genau, also speicherintensiver ist das schon.

01:05:48.960 --> 01:05:54.640
<v Martin>Wobei es nicht so wichtig ist, dass der Speicher schnell beschrieben werden kann.

01:05:54.640 --> 01:05:58.240
<v Martin>Also mit anderen Worten, es muss nicht zwingend RAM sein.

01:05:58.240 --> 01:05:58.720
Ah, okay.

01:05:59.200 --> 01:06:09.040
<v Martin>Was einem die Möglichkeit gibt, ein Swap-Laufwerk anzulegen, das irgendwo hinzutun, wo es einen relativ zügigen Zugriff hat.

01:06:09.040 --> 01:06:11.440
<v Martin>Und ja, da geht es auch.

01:06:11.440 --> 01:06:14.960
<v Jochen>Ja, und SSDs sind jetzt auch nicht so mehr so super langsam.

01:06:15.760 --> 01:06:21.520
<v Martin>Genau, also eigentlich sind wir mit der Swap-Variante unbegrenzt im Hauptspeicher.

01:06:21.520 --> 01:06:22.160
<v Martin>Ja.

01:06:22.160 --> 01:06:23.520
<v Martin>Fast.

01:06:23.520 --> 01:06:25.200
<v Jochen>Ja, ja, ja, ja.

01:06:25.200 --> 01:06:27.920
<v Jochen>Nee, durchaus interessantes Modell.

01:06:27.920 --> 01:06:28.640
<v Jochen>Ja.

01:06:28.880 --> 01:06:41.760
<v Jochen>Und ja, ich meine, was, äh, wenn man jetzt aber die, für die Benutzer ist es ja auch so ein bisschen, die kommen aber gut damit klar und nehmen das so an oder hörst du da häufiger das so höher, warum das ist irgendwie komisch?

01:06:42.720 --> 01:06:44.080
<v Jochen>Ich weiß nicht genau.

01:06:44.080 --> 01:06:46.720
<v Martin>Also bis jetzt habe ich tatsächlich dazu noch gar nichts gehört.

01:06:46.720 --> 01:06:47.760
<v Jochen>Ah, okay.

01:06:47.760 --> 01:06:48.480
<v Jochen>Interessant.

01:06:49.680 --> 01:06:52.320
<v Martin>Also es scheint einigermaßen intuitiv

01:06:52.320 --> 01:06:52.960
<v Jochen>zu sein.

01:06:53.600 --> 01:06:56.000
<v Martin>Vor allem, weil man es ja auch vom Desktop schon kennt.

01:06:56.000 --> 01:06:56.640
<v Jochen>Ja.

01:06:57.120 --> 01:06:58.640
<v Martin>Also die Art der Bedienung, sage ich mal.

01:06:58.880 --> 01:06:59.920
<v Jochen>Gehen denn da wirklich alle?

01:07:00.400 --> 01:07:06.880
<v Jochen>Also jetzt stelle ich mir natürlich so, stellt sich mir die Frage, wie ist das denn jetzt mit Tastaturkürzeln oder weiß ich nicht, rechter Mausklick oder so.

01:07:06.880 --> 01:07:08.640
<v Jochen>Das muss ja jetzt alles wie ein Browser durch.

01:07:08.640 --> 01:07:10.240
<v Jochen>Der Browser lässt ja jetzt nicht alles durch.

01:07:10.240 --> 01:07:19.760
<v Jochen>Manche Sachen sind ja auch, quasi fängt der Browser ja wahrscheinlich schon ab, um, wenn man ein anderes Hub auswählt oder das Fenster zumacht oder so, das geht dann ja gar nicht bis auf die andere Seite.

01:07:20.000 --> 01:07:22.800
<v Jochen>Aber ich weiß jetzt auch nicht genau, was da möglich ist und das nicht.

01:07:22.800 --> 01:07:30.880
<v Martin>Ja, also hätte man das selber entwickeln müssen, den Client in JavaScript, hätte man wahrscheinlich mehrere Jahre gebraucht.

01:07:32.560 --> 01:07:33.840
<v Martin>Muss ich aber nicht.

01:07:33.840 --> 01:07:35.600
<v Martin>Der ist schon fertig.

01:07:36.000 --> 01:07:40.320
<v Martin>Und der kann tatsächlich alles, was man sich unter Desktop so vorstellt.

01:07:40.320 --> 01:07:46.080
<v Martin>Also Rechtsklick ist kein Problem, Tastatureingaben sind kein Problem, Tastaturkürze sind kein Problem.

01:07:46.080 --> 01:07:56.400
<v Martin>Also das ist eigentlich alles da und wird von Firefox und von Chrome supportet und damit eigentlich von 90% von allem, was es sage so gibt.

01:07:56.640 --> 01:07:57.920
<v Jochen>Ja, ja, ja.

01:08:00.160 --> 01:08:06.160
<v Jochen>Ja, das heißt, man kriegt auch gar nichts, also aber es ist schon in einem Browserfenster, muss es halt sein.

01:08:07.200 --> 01:08:08.080
Richtig.

01:08:08.320 --> 01:08:14.320
<v Jochen>Aber ansonsten kriegt man eigentlich gar nicht mit, dass es wirklich, dass es ein Browser ist, sondern dass es eigentlich eher verhält sich wie eine native Applikation.

01:08:15.040 --> 01:08:18.000
<v Martin>Verhält sich so, als ob man die Anwendung lokal auf dem Rechner hätte.

01:08:18.160 --> 01:08:20.560
<v Jochen>Auch ja, Copy und Paste, wahrscheinlich bei Text kein Problem.

01:08:20.560 --> 01:08:24.000
<v Jochen>Wenn ich jetzt irgendwas da reinziehe oder so, okay, dann passiert wahrscheinlich komisch dabei.

01:08:24.400 --> 01:08:28.320
<v Martin>Genau, es gibt Dateitransfer, es gibt, wenn man will, sogar Audio.

01:08:32.320 --> 01:08:33.840
<v Jochen>Ja, schick.

01:08:34.560 --> 01:08:37.040
<v Jochen>Ich glaube, dieses Quacamoli muss ich mir auch mal angucken.

01:08:38.800 --> 01:08:41.200
<v Jochen>Scheint ja schon sehr interessant zu sein.

01:08:43.360 --> 01:08:44.320
Ja, ja.

01:08:44.560 --> 01:08:51.440
<v Jochen>Ja, lass mal überlegen, was könnte man sich denn noch so vorstellen, was interessant sein könnte bei diesem.

01:08:51.600 --> 01:09:02.160
<v Jochen>Also gibt es, ist das der Client selber, der Python, äh, der Python-Rapper um Qt kommt selber auch von wie hat, äh, ich weiß nicht, wie hieß denn diese Firma nochmal, die das, die Qt baut?

01:09:02.960 --> 01:09:04.800
<v Martin>QT Foundation meine ich.

01:09:04.960 --> 01:09:06.080
<v Jochen>Qt Foundation.

01:09:06.080 --> 01:09:10.320
<v Jochen>Ah ja, na gut, ich weiß nicht mehr, da war ja auch eine lange Zeit, vielleicht gibt es die Firma auch nicht mehr, keine Ahnung.

01:09:10.320 --> 01:09:13.120
<v Jochen>Foundation klingt jetzt irgendwie eher nicht mehr nach.

01:09:13.120 --> 01:09:21.280
<v Jochen>Aber genau, von denen kommt halt auch, die kommen die Python-Bindings, weil ich habe irgendwie gehört, PySite gibt's oder genau.

01:09:21.520 --> 01:09:23.280
<v Jochen>Ach, das sind die dann, ja.

01:09:23.440 --> 01:09:25.520
<v Martin>Wenn ich QT sage, dann meine ich PySide.

01:09:25.520 --> 01:09:26.000
<v Jochen>Ah, okay.

01:09:26.000 --> 01:09:26.720
<v Jochen>Tatsächlich.

01:09:26.720 --> 01:09:33.120
<v Martin>Also es gibt unterschiedliche Ausprägungen, wie man QT nutzen will kann.

01:09:33.120 --> 01:09:36.240
<v Martin>Und ja, ich habe mich für PySite entschieden.

01:09:38.160 --> 01:09:40.160
<v Martin>The QT Company.

01:09:40.560 --> 01:09:42.160
<v Jochen>Ah, okay.

01:09:42.560 --> 01:09:44.160
<v Dominik>Hier gibt es ja noch so ein paar andere Sachen, ne?

01:09:44.560 --> 01:09:45.840
<v Dominik>Vielleicht wollen wir die noch kurz erwähnen.

01:09:45.840 --> 01:09:47.440
<v Dominik>Also Kiwi haben wir jetzt schon, glaube ich, im Endeffekt.

01:09:47.440 --> 01:09:52.800
<v Dominik>Da gibt es noch WXPython und kennt jemanden GTK-Bindings für Python?

01:09:52.800 --> 01:09:58.720
<v Martin>Genau, also GTK würde ich sagen, ist so das zweite große Framework, was man da nutzen kann.

01:09:59.200 --> 01:10:03.040
<v Martin>Was nicht ganz, aber so ungefähr auf Augenhöhe.

01:10:03.040 --> 01:10:05.520
<v Martin>Naja, andere würden wahrscheinlich was anderes sagen.

01:10:05.520 --> 01:10:12.720
<v Martin>Also es ist auf Augenhöhe mit QT und ja, die Widgets sind ähnlich weit gediehen.

01:10:14.880 --> 01:10:16.320
<v Dominik>Kann man das ja quasi aussuchen.

01:10:16.320 --> 01:10:23.920
<v Dominik>Aber würdest du dein, du würdest ja wahrscheinlich alles, dein ganzes User-Interface und auch deinen Desktop komplett mit Qt bauen oder mit GTK.

01:10:25.440 --> 01:10:30.400
<v Martin>Dafür habe ich GTK noch nicht zu sehr in die Tiefe getestet, um das sagen zu können.

01:10:30.880 --> 01:10:34.000
<v Martin>Aber ja, also es scheint, es scheint ähnlich weit zu sein.

01:10:34.000 --> 01:10:39.040
<v Martin>Aber dafür habe ich es mir nicht genug angeguckt, um jetzt speziell sagen zu können, das geht damit und das geht damit nicht.

01:10:39.440 --> 01:10:46.960
<v Dominik>Dann gibt's noch einen Rapper da irgendwie drum, PiSampleGUI, der mit den einfachen Sachen irgendwie dann auch gehen, ein schneller oder sowas oder noch mehr High-Level-Iterface?

01:10:48.400 --> 01:10:50.560
<v Martin>Kenne ich auch nicht im Detail, PiSample GUI.

01:10:50.880 --> 01:10:55.600
<v Dominik>Das macht also einiges auch über, ich glaube, Q, da kann man dann die oder WX Pyisen.

01:10:56.160 --> 01:10:57.680
<v Dominik>WX Python wäre noch so ein Ding.

01:10:59.920 --> 01:11:03.440
<v Dominik>Habe ich jetzt auch mal irgendwie mal kurz ausprobiert, aber es war so mittelhübsch.

01:11:03.440 --> 01:11:05.680
<v Jochen>Ja, habe ich ja schon als Sache nichts davon gehört.

01:11:05.680 --> 01:11:08.400
<v Dominik>Ja, genau, aber gegen wohl ein paar Sachen.

01:11:09.520 --> 01:11:13.600
<v Dominik>Ja, ne, ich würde sagen, es ist immer noch so Python-GUI, ist immer noch so ein bisschen.

01:11:14.080 --> 01:11:30.800
<v Jochen>Ja, wobei ich tatsächlich, also ich würde schon die Ansicht vertreten, also ich meine, auch wenn das alles schon eine interessante Geschichte ist und aber ich habe schon so das Gefühl, dass so diese Desktop-UI-Geschichten so ein bisschen.

01:11:30.800 --> 01:11:32.880
<v Jochen>Also vielleicht riechen sie auch noch komisch.

01:11:33.920 --> 01:11:36.080
<v Jochen>Also ich bin bei der Ansicht, da könnte schon so ein bisschen tot sein, weil.

01:11:36.320 --> 01:11:37.840
Was ist mit BWare?

01:11:38.080 --> 01:11:38.880
Ja, ja, genau.

01:11:39.600 --> 01:11:51.040
<v Jochen>Aber da ist halt, also das, das ist, also das würde ich auch so sehen, also das ist Russell Keith McGee, der hat ja auf der auf irgendeiner PyCon eine Keynote drüber gehalten.

01:11:51.040 --> 01:11:53.520
<v Jochen>Irgendwie, was sind die größten Gefahren für Python?

01:11:54.560 --> 01:11:57.520
<v Jochen>Oder Black Swan, irgendwas war im Titel.

01:11:57.680 --> 01:11:59.120
<v Jochen>Dem würde ich mich durchaus anschließen.

01:11:59.120 --> 01:12:02.800
<v Jochen>Also was für Python richtig gefährlich ist, ist, dass halt auf mobile läuft.

01:12:02.880 --> 01:12:06.160
<v Jochen>Dass das nicht auf Mobile läuft, weil tatsächlich irgendwie Computer werden verdrängt.

01:12:06.160 --> 01:12:13.520
<v Jochen>Also die Telefone sind inzwischen, also ich würde mal sagen, ein durchschnittliches iPhone ist wahrscheinlich schneller und leistungsfähiger als ein durchschnittlicher Desktop-Rechner.

01:12:13.520 --> 01:12:17.600
<v Dominik>Ja, du stellst halt einfach irgendwo so ein Tablet hin und dann gibt es halt da ein paar Knöpfchen drauf und dann muss das halt dann funktionieren.

01:12:17.760 --> 01:12:24.080
<v Jochen>Ja, und Kinder wachsen damit auf, die kennen das gar nicht mehr, die denken sich so, was sind das so komische große Dinger da, seltsam, was ist das?

01:12:24.480 --> 01:12:25.680
<v Dominik>Kann man die swipen?

01:12:25.680 --> 01:12:29.120
<v Jochen>Ja, genau, tippen dann auf den Bildschirm, dann passiert nichts, das ist kaputt.

01:12:29.600 --> 01:12:36.160
<v Jochen>Also das ist ein Problem, weil in zehn Jahren oder 20 Jahren wird das wahrscheinlich keiner mehr benutzen.

01:12:36.960 --> 01:12:38.400
<v Dominik>Halte ich für eine steile These.

01:12:38.400 --> 01:12:41.280
<v Jochen>Ja, gut, aber ich meine, das ist nur so ein, das ist ein Risiko, ja.

01:12:41.280 --> 01:12:44.480
<v Jochen>Also ob das jetzt so eintritt oder nicht, ist natürlich klar, wie hoch ist das eigentlich?

01:12:45.760 --> 01:12:49.040
<v Dominik>Wenn man das benutzt, muss man wahrscheinlich schon relativ viel damit auskennen, irgendwie.

01:12:50.080 --> 01:12:58.880
<v Jochen>Ja, aber also wie auch immer, aber dass es da ein Risiko gibt, würde ich schon sagen, einfach deswegen, weil Python da halt nicht läuft.

01:12:58.880 --> 01:13:00.160
<v Jochen>Es läuft da nicht.

01:13:00.480 --> 01:13:02.480
<v Jochen>Und das ist ein Problem.

01:13:02.480 --> 01:13:11.440
<v Jochen>Und jetzt muss man entweder irgendeinen Weg finden, wie man Python da, wie man sozusagen es schaffen kann, dass man Python entwickelt und dann halt aber auch eine iOS oder Android-App hat.

01:13:11.440 --> 01:13:13.920
<v Jochen>Und das ist halt genau, Beware macht das halt genau.

01:13:14.080 --> 01:13:16.800
<v Jochen>Sondern diverse Komponenten, die dafür nötig sind.

01:13:16.800 --> 01:13:20.640
<v Jochen>Ja, letztlich macht es sowas ähnliches, was halt React Native oder so auch macht.

01:13:20.640 --> 01:13:25.920
<v Jochen>Das ruft schon die echten UI-Funktionen dann auf von den Frameworks der entsprechenden.

01:13:26.000 --> 01:13:29.440
Also kompiliert runter quasi auf Kotlin?

01:13:29.840 --> 01:13:42.640
<v Jochen>Nicht ganz, nee, es kompiliert, es kommt, ja, also es gibt unterschiedliche Komponenten und die machen unterschiedliche Sachen, aber letztlich, es gibt auch Wrapper um die echten Funktionen sozusagen drumrum und die werden dann aufgerufen.

01:13:43.120 --> 01:13:45.200
<v Jochen>Und ja, also.

01:13:45.520 --> 01:13:51.280
<v Dominik>Das ist interessant, wäre auch interessant zu wissen, wie React das eigentlich macht und dann gibt es ja noch irgendwas wie Jonos oder Capacitor oder so.

01:13:51.280 --> 01:14:00.480
<v Jochen>Ja, es gibt dann Teile, die sind halt komplett nativ und dann Teile kommen dann halt aus dem, kann man aus dem Web nachladen, man kann JavaScript ausführen und es ist, ja gut, oder Elektron macht das ja auch so.

01:14:00.480 --> 01:14:04.160
<v Jochen>Ja, also wie gesagt, ich glaube, da sind wir auch noch nicht, auch noch nicht durch.

01:14:04.160 --> 01:14:05.840
<v Jochen>Das war auch ganz interessant.

01:14:05.840 --> 01:14:15.280
<v Jochen>Ich habe mich jetzt, ich war letzte Woche Donnerstag, auf dem Treffen der Java-User Group, das, äh, Java Rhein-Juke, die Java-Java-User-Group.

01:14:15.840 --> 01:14:17.200
<v Dominik>Was hat sich denn dahin verschlagen?

01:14:17.600 --> 01:14:21.600
<v Jochen>Ja, ich dachte, ich muss mich mal weiterentwickeln und dann dieses Python entwickeln.

01:14:21.600 --> 01:14:24.560
<v Jochen>Das kann ja wohl nicht, das hat keine Zukunft, den muss man mir Java angucken.

01:14:24.560 --> 01:14:27.600
<v Jochen>Nee, ähm.

01:14:28.400 --> 01:14:58.400
<v Jochen>Ich bin da hingegangen, weil der Vortrag da hat mich irgendwie, ist mir aufgefallen, dass da Stefan Tilkoff und Ebert Wolf, die machen so Software, Software-Architektur, TV und die machen auch Podcast und die sind beide bei Induecue und die haben auch schon viele interessante Stefan Tilkoff ist oft zu Gast in anderen Podcasts, gerade letztens war bei der Programmierbar und hat da über Architektur gesprochen, die machen vieles Software-Architektur, die sind auch so, das ist so eine der Firmen, wo man hingeht, wenn man

01:14:58.400 --> 01:15:11.520
<v Jochen>jetzt ein großes Problem hat, ein großes Projekt und man möchte jetzt irgendwie so das einem mal wirklich erklärt, wie man das denn so angeht und wie man das besser machen kann, dann ist das so eine der Adressen, zu denen man gehen kann und wahrscheinlich eine der redoren Adressen.

01:15:11.520 --> 01:15:20.240
<v Jochen>Und ich höre dem immer gerne, ich höre zum Beispiel Stefan Tillkoff immer gerne zu, weil ich finde, der kann das immer schön erklären, was so die Probleme sind, die man da hat.

01:15:20.240 --> 01:15:23.600
<v Jochen>Und ja, deswegen bin ich dahingegangen.

01:15:23.600 --> 01:15:29.440
<v Jochen>Und da haben sie haben geredet über, wie sah das eigentlich vor zehn Jahren aus, wie sieht es heute aus, haben sich die Probleme irgendwie verändert in IT?

01:15:30.560 --> 01:15:34.160
<v Jochen>Welche Sachen sind besser geworden, welche Sachen sind immer genauso wie vorher?

01:15:34.160 --> 01:15:39.760
<v Jochen>Und genau, da, oi, jetzt bin ich ja schon wieder abgeschweift.

01:15:39.760 --> 01:15:48.000
<v Jochen>Da war auch einer, der machte so ein bisschen Elixir und auch kein Java.

01:15:48.320 --> 01:16:05.120
<v Jochen>Und der meinte, in letzter Zeit macht er immer mehr Dart, weil Dart für das ist diese Sprache von Google für so, das sollte, glaube ich, auch mal irgendwann Webgeschichte werden, aber jetzt hat sich so halt eine Nische gefunden.

01:16:05.120 --> 01:16:12.000
<v Jochen>Man kann damit halt Mobile-Apps irgendwie oder Apps für Android-Telefone oder iOS-Geräte entwickeln.

01:16:12.160 --> 01:16:13.280
<v Jochen>Das ist eine eigene Sprache.

01:16:13.280 --> 01:16:15.520
<v Jochen>Flutter ist halt das Ding, was dann ein UI macht.

01:16:15.520 --> 01:16:22.720
<v Jochen>Und das braucht im Grunde nur irgendwie einen Canvas, wo es halt irgendwie SVG reinrendern kann oder so, glaube ich.

01:16:22.720 --> 01:16:24.720
<v Jochen>Und macht dann eine UI komplett selber.

01:16:24.720 --> 01:16:37.440
<v Jochen>Also das ruft nicht irgendwelche Funktionen, nativen UI-Funktionen auf von dem entsprechenden irgendwie Gerätehersteller, also sondern das zeichnet alles selber.

01:16:37.440 --> 01:16:41.920
<v Jochen>Also alle Buttons und Dinge und so werden halt einfach irgendwie tatsächlich in den Canvas reingezeichnet.

01:16:41.920 --> 01:16:49.760
<v Jochen>Und da Canvas überall da ist und man da irgendwie beliebige Dinge reinzeichnen kann, kann man halt alle Sachen gleich aussehen lassen auf allen Geräten damit.

01:16:49.760 --> 01:17:14.320
<v Jochen>Und halt auch relativ, und es ist halt einfacher zu entwickeln, als wenn man jetzt irgendwie, das haben ja diese statischen Premiersprachen oder statistierten Premiersprachen, da ist halt immer so, ja, ich meine, gut, mit Kotlin ist es schon ein bisschen besser geworden, aber Java ist halt schon, also für Android, das ist halt schon sehr verbos und man muss halt sehr viel Boilerplate schreiben und auch Swift ist halt vielleicht ein bisschen besser, aber so wahnsinnig viel besser, auch nicht, ist auch relativ schrecklich.

01:17:14.320 --> 01:17:23.840
<v Jochen>Und ich meine, mein böser Schatz an der Stelle wäre ja immer so, naja, Software-Architektur hat mich auch lange nicht interessiert, weil man schreibt ja in Python oft nicht so große Sachen, weil man muss ja nicht so viel schreiben.

01:17:23.920 --> 01:17:35.600
<v Jochen>Und wenn man in Java für Hello World halt schon tausend Zeilen irgendwie Boilerplate schreiben muss, dann muss man sich Gedanken um Software-Architektur machen, einfach weil, um das Boilerplate-Zeugs was zu organisieren.

01:17:35.840 --> 01:17:44.320
<v Jochen>Und ja, das muss man mit Dart auch nicht so und dann hat man dann eine Alternative, die vielleicht ein bisschen einfacher zu verwenden ist.

01:17:44.320 --> 01:17:45.520
<v Jochen>Und das setzt sich gerade durch.

01:17:45.520 --> 01:18:01.600
<v Jochen>Also ich glaube, das, was der sagte, war, irgendwie inzwischen sind fünf, also der Marktanteil von Flutter ist halt inzwischen größer als der von allen anderen Sachen, die es da halt auch gibt, mit Elektronen und keine Ahnung, die ganzen, als von allen anderen zusammen.

01:18:01.600 --> 01:18:02.400
<v Jochen>Und das ist natürlich.

01:18:08.240 --> 01:18:15.520
<v Martin>Also wenn man zum Beispiel eine App machen will für Android und iOS, dann muss man es halt nur einmal schreiben, das ist der große Vorteil.

01:18:15.840 --> 01:18:27.040
<v Martin>Es bringt aber, wenn man es länger verwendet, doch auch so das eine oder andere Problemchen mit sich, wo man am Anfang nicht unbedingt von weiß.

01:18:27.360 --> 01:18:30.960
<v Jochen>Ja, also ich meine, das ist halt immer ein Beispiel, glaube ich.

01:18:32.720 --> 01:18:38.640
<v Martin>Also ich hatte zum Beispiel, also ich habe eine App oder mehrere in Flutter entwickelt.

01:18:38.640 --> 01:18:44.880
<v Martin>Und es gibt dort ein Paketsystem sozusagen.

01:18:45.120 --> 01:18:56.400
<v Martin>Also man kann sich dort Zusatzfunktionalitäten, ähnlich wie in Python mit Libraries, kann man sich oder Packages kann man sich dort auch reinladen sozusagen.

01:18:56.720 --> 01:19:05.600
<v Martin>Das Problem daran ist so ein bisschen, dass die oftmals halt von externen Entwicklern kommen, so von dir und mir.

01:19:05.600 --> 01:19:11.920
<v Martin>Und externe Entwickler dann nach anderthalb Jahren gerne mal die Lust an den Projekten verlieren.

01:19:11.920 --> 01:19:24.240
<v Martin>Und dann hat man so Unmaintained Dependencies in seinem Projekt drin und muss dann gucken, dass man eine neue Bibliothek halt findet, die das gleiche noch kann.

01:19:24.640 --> 01:19:38.960
<v Martin>Und das heißt, wenn man ein Projekt fertig entwickelt hat und man guckt ein halbes Jahr später und versucht es quasi wieder zu kompilieren, dann wird das auf jeden Fall nicht funktionieren.

01:19:38.960 --> 01:19:42.320
<v Martin>Nach einem halben Jahr ist es ausgeschlossen, dass es funktioniert.

01:19:42.640 --> 01:19:49.600
<v Martin>Zum einen führt Google selber regelmäßig Änderungen im Framework ein, und zwar Breaking Changes.

01:19:49.600 --> 01:20:00.160
<v Martin>Und zum anderen sind halt Pakete dann nicht mehr aktuell und müssen ersetzt werden, sodass quasi der Wartungsaufwand dafür nach meiner Einschätzung sehr, sehr groß ist.

01:20:02.160 --> 01:20:07.440
<v Jochen>Okay, das erinnert mich jetzt auch ein bisschen an die JavaScript-Developer Experience, ehrlich gesagt.

01:20:08.240 --> 01:20:11.760
<v Martin>Also vielleicht hat sich das inzwischen verbessert, das weiß ich nicht genau.

01:20:12.000 --> 01:20:15.680
<v Martin>Aber das waren auf jeden Fall die Probleme, mit denen ich so zu kämpfen hatte.

01:20:15.680 --> 01:20:15.840
Okay.

01:20:16.400 --> 01:20:21.680
<v Dominik>Also ich habe auch gekürzt, dass Flutter irgendwie so für große Projekte irgendwann nervig wird.

01:20:21.680 --> 01:20:24.240
<v Dominik>Und also Capacitor habe ich da empfohlen gekriegt.

01:20:24.240 --> 01:20:25.520
<v Dominik>Und das geht halt auch mit View.

01:20:26.720 --> 01:20:30.640
<v Jochen>Ja, ist quasi dann so ähnlich wie React Native, ist halt aber für View, ne?

01:20:30.720 --> 01:20:36.080
<v Dominik>Ja, genau, es gab irgendwie auch mal View Native, weil das ist auch irgendwie kaputt gegangen aus derselben Gründen, weil irgendwer keine Lust mehr hatte.

01:20:36.080 --> 01:20:40.480
<v Dominik>Und das klingt so ein bisschen, als wäre das so der neueste Ding.

01:20:40.800 --> 01:20:44.240
<v Dominik>Aber ob das gut funktioniert und wie lange das funktioniert, weiß man halt auch alles nicht.

01:20:44.560 --> 01:20:52.720
<v Jochen>Also was mir ja ehrlich gesagt am liebsten wäre, wenn es so ausgeht, wäre halt, dass er auf allen Plattformen Web gut genug funktioniert, dass man die anderen Sachen nicht machen muss.

01:20:53.440 --> 01:20:54.240
Aber gut.

01:20:54.240 --> 01:21:03.920
<v Jochen>Und mit Safari 16.4 ist er jetzt natürlich auch, also iOS hat jetzt im Hauf einen Großteil der Sachen, die gefehlt haben oder die bisher so richtig schmerzhaft waren, bekommen.

01:21:03.920 --> 01:21:10.000
<v Jochen>Und es sollte jetzt irgendwie dann auch quasi auf iOS halt eigentlich ganz gut funktionieren.

01:21:10.000 --> 01:21:10.800
Aber okay, ja.

01:21:11.040 --> 01:21:13.280
<v Dominik>Ja, aber diese PWAs ist halt auch immer so.

01:21:13.840 --> 01:21:19.360
<v Jochen>Ja, ja, es hat schon alles noch so seine Act mit kann, es ist nicht ganz das gleiche, als wenn man Native das macht, ja.

01:21:19.360 --> 01:21:20.080
<v Jochen>Das ist schon wahr.

01:21:20.240 --> 01:21:21.840
<v Martin>Kennt ihr Py-Skript?

01:21:22.000 --> 01:21:23.120
<v Jochen>Ja, klar.

01:21:25.360 --> 01:21:28.080
<v Martin>Das ist doch eigentlich die Lösung aller unserer Probleme.

01:21:31.600 --> 01:21:37.920
<v Jochen>Ja, also es geht quasi darum, dass man halt Python einfach im Browser, also per WebSM wie WebAssembly im Browser laufen hat.

01:21:39.440 --> 01:21:53.920
<v Jochen>Ja, das große Problem an der Stelle ist halt, dass das, oder was ist halt die Frage, ob das ein großes Problem ist oder nicht, dass das halt bedeutet, dass man halt irgendwie ein paar Megabyte Zeug irgendwie runterlädt, weil der Interpreter, Python-Interpreter, der ist halt nicht im Browser drin.

01:21:53.920 --> 01:21:56.080
<v Jochen>Der JavaScript-Interpreter halt schon.

01:21:56.080 --> 01:22:03.200
<v Jochen>Und das bedeutet, man muss halt erstmal ein paar Megabyte irgendwie runterladen und kann dann erst irgendwas machen.

01:22:03.600 --> 01:22:11.680
<v Martin>Wobei das ließe sich ja leicht lösen, wenn sich das so weit durchgesetzt hat, dass die Browser-Hersteller sagen, ja gut, dann wandeln wir das halt mit in den Browser rein.

01:22:11.680 --> 01:22:13.680
<v Jochen>Ja, das wäre natürlich eine Perspektive.

01:22:14.000 --> 01:22:15.040
<v Dominik>Das wäre natürlich schick.

01:22:15.040 --> 01:22:17.280
<v Dominik>Dann hätten wir gewonnen, aber naja.

01:22:17.280 --> 01:22:20.480
<v Jochen>Ja, aber dann kommen auch noch alle anderen Sauer an.

01:22:21.200 --> 01:22:22.320
<v Jochen>Ja, ich weiß es nicht.

01:22:22.320 --> 01:22:23.280
<v Jochen>Aber ja, natürlich.

01:22:23.280 --> 01:22:25.200
<v Jochen>Also das ist auf jeden Fall auch ein interessanter Weg, ja.

01:22:26.160 --> 01:22:29.520
<v Jochen>Das halt alles irgendwie dann nach WebAssembly kompiliert letztendlich.

01:22:29.520 --> 01:22:36.000
<v Jochen>Ich habe letztens gehört, das fand ich auch sehr interessant, dass tatsächlich, ich glaube, Figma war es.

01:22:36.000 --> 01:22:38.960
<v Jochen>Ich hoffe, ich erzähle jetzt nicht keinen allzu großen Ton.

01:22:38.960 --> 01:22:45.840
<v Jochen>Aber ich glaube, Figma ist tatsächlich eine Applikation, die ist geschrieben in C&lt;unk&gt; oder so.

01:22:45.840 --> 01:22:49.520
<v Jochen>Und dann kompiliert das aber zu WebAssembly und läuft im Browser.

01:22:49.520 --> 01:22:53.120
<v Jochen>Aber die Leute, die das entwickeln, entwickeln tatsächlich in C&lt;unk&gt;.

01:22:53.520 --> 01:22:53.920
Ja.

01:22:54.080 --> 01:22:55.040
Okay.

01:22:55.280 --> 01:23:03.280
<v Dominik>Also Figma ist das Design-Tool für alle, die es noch nicht können, mit dem man ohne Plan von Entwicklung so Screens zusammenklicken kann.

01:23:03.280 --> 01:23:06.720
<v Dominik>Ein bisschen mit Funktionalität versehen, um so Klickstrecken zu verwirklichen.

01:23:06.720 --> 01:23:13.840
<v Dominik>Wo es auch tolle Tools gibt, wo man das exportieren kann als Vue.js-Komponenten oder direkt mit CSS rausrennen kann und so weiter vom Figma.

01:23:13.840 --> 01:23:15.600
<v Dominik>Dann spart man sich so den Zwischenschritt.

01:23:15.600 --> 01:23:16.800
<v Dominik>Was sehr praktisch ist.

01:23:16.800 --> 01:23:28.160
<v Dominik>Was mein Problem wäre, sowas wie Qt zu verwenden, weil ich glaube, ich möchte jemanden, der von Design mehr Ahnung hat als ich, das bauen lassen, das dann exportieren und dann in meine Anwendungen importieren.

01:23:28.160 --> 01:23:30.720
<v Dominik>Da muss ich mich darum nämlich nicht mehr kümmern.

01:23:30.720 --> 01:23:36.000
<v Jochen>Ja, aber da würde ich eben denken, das ist genau diese Frage.

01:23:36.000 --> 01:23:47.360
<v Jochen>Du hast halt eine Bandbreite von das Design ist super wichtig und du musst hast eigentlich nicht so viel komplizierte Funktionalität, auf der einen Seite vielleicht und auf einer anderen Seite hast du halt, du hast viel komplizierte Funktionalität, aber Design ist nicht so wichtig.

01:23:47.360 --> 01:23:57.200
<v Jochen>Und je nachdem, wo dein Use Case ist, ist halt das ein oder andere halt interessanter, weil wenn du halt sehr viel komplizierte Funktionalität hast und dann versuch das mal einem Designer zu erklären.

01:23:57.280 --> 01:23:57.680
Also ich würde

01:23:57.680 --> 01:24:01.280
<v Dominik>auch Vertriebs und aus der Marketing-Team sagen, Design ist alles.

01:24:01.280 --> 01:24:06.720
<v Dominik>Also ich habe immer das Gefühl, die Sachen, die super toll aussehen, aber nichts können, verkaufen sich x-mal viel besser als Ziel.

01:24:06.880 --> 01:24:07.920
<v Jochen>Ich glaube, das kommt auf deine Zielgruppe.

01:24:08.720 --> 01:24:10.320
<v Jochen>Das kommt auf deine Zielgruppe an.

01:24:11.600 --> 01:24:18.000
<v Dominik>Ich würde, also ja, ich würde sagen, die Normalverteilung in der Mitte sagt leider was anderes.

01:24:18.000 --> 01:24:22.800
<v Dominik>Also ich wäre durchaus auch bei guter Funktionalität, würde ich eher bevorzugen.

01:24:22.800 --> 01:24:26.080
<v Dominik>Aber naja, ich glaube, dass es selten

01:24:26.080 --> 01:24:26.800
so ist.

01:24:26.800 --> 01:24:27.680
Ich weiß es nicht.

01:24:30.720 --> 01:24:31.840
<v Jochen>Ja, ja.

01:24:33.600 --> 01:24:37.840
<v Jochen>Ja, aber genau, vielleicht nochmal zu dem Mia-Plan.

01:24:38.000 --> 01:24:49.760
<v Jochen>Das ist aber quasi entstanden für einen konkreten Anwendungsfall, in dem es dann auch eingesetzt wird, aber es verwenden jetzt auch andere Leute schon und es funktioniert eigentlich ganz gut quasi.

01:24:50.080 --> 01:24:58.160
<v Jochen>Und man kann das, also wenn man irgendwie so ein Problem hat mit, man möchte irgendwie Personalplanung machen, im Grunde kann jeder das einfach so dann verwenden.

01:24:58.480 --> 01:25:00.160
<v Martin>Kann jeder das einfach so verwenden, genau.

01:25:01.920 --> 01:25:04.000
<v Jochen>Das, äh, ja, genau.

01:25:05.440 --> 01:25:07.120
<v Jochen>Klingt ja auf jeden Fall schon mal gut.

01:25:07.120 --> 01:25:09.040
<v Jochen>Ich weiß nicht, fällt dir noch was ein?

01:25:09.040 --> 01:25:13.040
<v Jochen>Ich überlege gerade, ob ich noch irgendwelche Fragen habe oder irgendwelche Dinge, über die man mal reden könnte, aber.

01:25:13.760 --> 01:25:14.880
<v Dominik>Wir haben jetzt alles so ein bisschen im Schwaben.

01:25:15.440 --> 01:25:16.480
<v Dominik>So wirklich tief gemacht.

01:25:17.920 --> 01:25:20.080
<v Martin>Also was mir, ich höre euch ja auch regelmäßig.

01:25:21.200 --> 01:25:26.080
<v Martin>Was mir aufgefallen ist, es gibt noch einen Unterschied.

01:25:27.200 --> 01:25:30.880
<v Martin>Was wir anders machen, was ich anders mache als ihr wahrscheinlich.

01:25:31.520 --> 01:25:33.520
<v Martin>Ihr nutzt gerne Datenbanken.

01:25:34.000 --> 01:25:34.960
Ich nicht.

01:25:34.960 --> 01:25:36.720
<v Jochen>Ja, das ist auch interessant, ja.

01:25:38.160 --> 01:25:41.360
Und Gründe, wie bitte?

01:25:41.360 --> 01:25:42.080
<v Dominik>Was nimmst du?

01:25:42.080 --> 01:25:42.560
<v Dominik>Files?

01:25:42.880 --> 01:25:44.480
<v Martin>Dateibasiert, genau.

01:25:45.200 --> 01:25:52.560
<v Martin>Die Gründe, warum ich, also es stimmt natürlich nicht, also ich habe auch Datenbanken, aber nur da, wo ich sie haben muss.

01:25:52.960 --> 01:25:58.880
<v Martin>Also zum Beispiel, dass Jack Gamoli hat halt eine Datenbank im Hintergrund.

01:25:58.880 --> 01:26:00.800
<v Martin>Da komme ich nicht drum rum.

01:26:01.120 --> 01:26:03.360
<v Martin>Aber ja, Datenbanken.

01:26:04.640 --> 01:26:07.040
<v Martin>Habe ich verschiedene Nachteile, die ich da sehe.

01:26:07.040 --> 01:26:11.920
<v Martin>Zum Beispiel brauche ich ein Tool, mit dem ich die angucken kann muss.

01:26:12.240 --> 01:26:16.480
<v Martin>Das heißt, wenn ich mal schnell was nachschauen will, dann geht das mal nicht so einfach.

01:26:16.640 --> 01:26:32.400
<v Martin>Ich kann mich nicht einfach per SSH auf den Server einloggen, kann mir eine Datei anschauen mit dem Datei Editor meiner Wahl, sondern ich muss da irgendwie dann mit einem SQ-Lite, was weiß ich, Viewer oder von außen gut und gar nicht einen Port aufmachen, aber den muss ich auch erstmal aufmachen.

01:26:32.960 --> 01:26:34.000
<v Martin>Dann da drauf.

01:26:35.040 --> 01:26:38.480
<v Martin>Also das ist deutlich einfacher mit einer Datei, würde ich mal, würde ich mal sagen.

01:26:39.040 --> 01:26:41.920
<v Martin>Dann habe ich die Wartung der Datenbank.

01:26:41.920 --> 01:26:48.240
<v Martin>Ich möchte ja regelmäßig, möchte ich da, möchte ich die reinigen, ich möchte die komprimieren vielleicht.

01:26:48.960 --> 01:26:50.560
<v Martin>Alte Sachen rausschmeißen.

01:26:50.560 --> 01:26:57.600
<v Martin>Das habe ich auf Dateiebene zwar auch so ein bisschen, aber ich würde sagen, es ist da wesentlich einfacher.

01:26:57.600 --> 01:27:06.800
<v Martin>Also wenn ich da Sachen habe, die ich nicht mehr brauche, dann kann ich die mir konkret angucken und kann dann zum Beispiel in Python dafür sorgen, dass die wieder rausfliegen.

01:27:06.800 --> 01:27:07.440
<v Dominik>Wie machst du das?

01:27:07.440 --> 01:27:10.080
<v Dominik>Also pickelst du die Sachen dann weg oder schreibst das JSON weg?

01:27:10.560 --> 01:27:14.960
<v Martin>Nee, ich mache alles, was geht, mache ich menschenlesbar.

01:27:14.960 --> 01:27:19.200
<v Martin>Also ja, JSON oder INI.

01:27:20.320 --> 01:27:24.480
<v Dominik>Also JSON mache ich auch in einigen Applikationen schreibe ich einfach tatsächlich so JSON-Files raus.

01:27:25.040 --> 01:27:28.800
<v Martin>Also JSON ist ganz nett, es ist vor allem schnell.

01:27:30.320 --> 01:27:32.720
<v Martin>Eigentlich würde ich gerne noch woanders hin.

01:27:32.720 --> 01:27:40.720
<v Martin>Es gab jetzt ein neues Settings-Format von Python, wird nativ jetzt aufgeschnitten in drei Tommel, genau, richtig?

01:27:40.960 --> 01:27:41.440
Message.

01:27:42.480 --> 01:27:45.600
<v Martin>Das ist eigentlich das, wo ich jetzt hinwollte.

01:27:45.920 --> 01:27:55.120
<v Martin>Aber ja, also sämtliche Operationen, die ich eigentlich, also ich brauche natürlich auch Operationen auf den Daten, die ich da lese, das ist klar.

01:27:55.120 --> 01:27:58.400
<v Martin>Aber die mache ich eigentlich alle in NumPy.

01:27:58.480 --> 01:28:04.480
<v Martin>Also ich lade die Datei in meinen Speicher rein und das geht relativ schnell.

01:28:04.480 --> 01:28:08.480
<v Martin>Ich brauche nur die, also das geht mit der Geschwindigkeit, mit der ich von der Platte lesen kann.

01:28:08.480 --> 01:28:16.000
<v Martin>Und kann dann halt die ganzen Aggregationsfunktionen, die ich brauche, was weiß ich, Summe, Maximum und so weiter, die habe ich in NumPy auch.

01:28:16.000 --> 01:28:17.920
<v Martin>Also mache ich das in NumPy.

01:28:19.200 --> 01:28:26.080
<v Martin>Ja, ansonsten Datenbank-Nachteile, ja, ich muss, ich muss natürlich, ich muss die stoppen, wenn ich ein Backup mache.

01:28:26.880 --> 01:28:27.920
<v Jochen>Ja, das weiß ich nicht.

01:28:28.560 --> 01:28:31.120
<v Martin>Ja, okay, gibt es vielleicht so eine Live-Varianten.

01:28:31.280 --> 01:28:32.960
<v Martin>Also ich kenne es noch, weiß ich nicht.

01:28:33.760 --> 01:28:37.760
<v Jochen>Also kommt doch an, was für eine Datenbank man verwendet, aber ich meine, jetzt bei Postgres, das geht schon.

01:28:37.760 --> 01:28:42.240
<v Jochen>Also da gibt es so, ja, also muss man, muss man nicht stoppen.

01:28:42.720 --> 01:28:44.320
<v Jochen>Aber ja, das ist natürlich ein Problem.

01:28:44.640 --> 01:28:47.760
<v Dominik>Ja, du musst halt irgendwie, du hast einen Fail halt, mit dem du irgendwie umgehen musst.

01:28:47.760 --> 01:28:58.800
<v Dominik>Von Zeugs, dass irgendwie in der Luft hängen kann, zwischen dem letzten Backup und dem, wo du gerade backuppen willst, was da an Transaktionen gerade quasi reinkommt, der relativ groß werden kann, wenn du viel Traffic drauf hast.

01:28:58.800 --> 01:29:01.680
<v Jochen>Ja, gut, aber also da gibt es schon Wege, damit umzugehen.

01:29:01.680 --> 01:29:08.960
<v Jochen>Ich meine, was da empfohlen wird, ist ja dann auch immer nicht, das selber zu machen, wenn man das nicht, weil das natürlich ein Riesenaufwand ist, sich da einzuarbeiten.

01:29:08.960 --> 01:29:12.640
<v Jochen>Das ist durchaus ein Nachteil, ganz klar.

01:29:13.120 --> 01:29:21.360
<v Jochen>Man kann ja auch da Dienstleister benutzen und sowas wie Quruntry Bridge, Crunchy Data verwenden oder so oder sonst irgendwen, der halt sowas Manage Postgres anbietet oder so.

01:29:21.360 --> 01:29:21.920
<v Dominik>Okay, interessant.

01:29:21.920 --> 01:29:24.080
Dann muss ich übernehmen, dass wir an die Shownotes packen.

01:29:24.080 --> 01:29:24.400
Bitte?

01:29:24.640 --> 01:29:26.240
<v Dominik>Packe ich bitte nochmal in die Shownotes.

01:29:26.240 --> 01:29:26.720
<v Jochen>Ja.

01:29:27.040 --> 01:29:29.280
<v Jochen>Aber man kann das auch selber machen, was sie tun.

01:29:29.280 --> 01:29:32.160
<v Martin>Hat aber den Nachteil, dass dann meine Daten woanders liegen.

01:29:32.320 --> 01:29:33.200
<v Jochen>Ja, ja, gut, okay.

01:29:33.680 --> 01:29:42.000
<v Martin>Und das will ich eigentlich nicht, sondern also was mein Ansatz ist, ich möchte eigentlich gar keine Kundendaten haben.

01:29:43.040 --> 01:29:46.720
<v Martin>Und wenn ich sie haben muss, dann möchte ich so wenig wie möglich davon haben.

01:29:47.680 --> 01:29:53.440
<v Martin>Also deswegen zum Beispiel bei der Anmeldung verlange ich auch nur Nutzername und Passwort mehr nicht.

01:29:53.440 --> 01:29:55.360
<v Martin>Noch nicht mal eine E-Mail.

01:29:55.360 --> 01:29:55.840
Ja.

01:29:56.000 --> 01:29:58.080
<v Martin>Das heißt,

01:29:58.080 --> 01:30:00.880
<v Jochen>wenn jemand sein Passwort vergisst, ist halt.

01:30:02.160 --> 01:30:03.360
Dann kann er mich anschreiben.

01:30:05.360 --> 01:30:13.040
<v Martin>Dann kann er mich anschreiben und falls das öfter passiert, es ist tatsächlich noch nie passiert, dann mache ich das in automatischen Verfahren draus.

01:30:13.040 --> 01:30:17.280
<v Martin>Aber solange das nicht häufig vorkommt, ich antworte auch schnell.

01:30:17.280 --> 01:30:17.680
Ja, ja,

01:30:17.680 --> 01:30:22.560
<v Jochen>nee, ich denke auch, dass es halt wieder eine Frage, wer die Kunden sind.

01:30:22.560 --> 01:30:31.920
<v Jochen>Also wenn du jetzt ganz viele Endkunden hast, an denen du nicht viel verdienst und alle Kunden automatisiert sein, ist es schlecht, wenn die Leute alle dich anschreiben, genau.

01:30:31.920 --> 01:30:32.720
Wenn du jetzt nur

01:30:32.720 --> 01:30:34.160
das Open hast,

01:30:34.160 --> 01:30:36.160
<v Jochen>die sich auskennen, dann ist das halt alles nicht so schlimm.

01:30:36.400 --> 01:30:38.880
<v Martin>Ich werde das auch automatisieren, solange das überhand nimmt.

01:30:38.880 --> 01:30:40.720
<v Martin>Wenn das überhand nimmt, aber das ist nicht der Fall.

01:30:42.960 --> 01:30:45.920
<v Dominik>Datenspartei, ich finde es interessant.

01:30:46.880 --> 01:30:48.080
<v Dominik>Ich weiß nicht.

01:30:48.080 --> 01:30:51.360
<v Dominik>Ich denke mir so, ah, irgendwas könnte man mit den Daten auch anfangen.

01:30:51.360 --> 01:30:52.000
<v Dominik>So ausher.

01:30:52.080 --> 01:30:53.040
<v Dominik>Also jetzt ohne der Sonne.

01:30:54.560 --> 01:30:56.240
<v Martin>Es gibt ja auch die Verantwortung an die Hand.

01:30:56.400 --> 01:31:10.000
<v Martin>Also wenn ich jetzt sage, ich habe hier einen Riesenhaufen von Nutzerdaten mit E-Mail-Adresse, Passwörtern, Bankdaten, was weiß ich, und dann kommt irgendjemand auf meinen Server und trägt das ganze Zeug raus, dann habe ich auf jeden Fall ein Problem.

01:31:10.000 --> 01:31:14.240
<v Martin>Und das kann ich schon mal insofern vermeiden, wenn ich das Zeug gar nicht erst habe.

01:31:14.320 --> 01:31:18.880
<v Dominik>Das würde zum Beispiel für, aber auch für Managed sprechen, weil dann hast du die Verantwortung quasi auch abgegeben.

01:31:18.880 --> 01:31:26.560
<v Martin>Naja, du schließt dann einen Service-Vertrag mit dem, der das halt managt.

01:31:26.560 --> 01:31:28.800
<v Martin>Aber in der Verantwortung stehe trotzdem ich.

01:31:29.120 --> 01:31:30.880
<v Martin>Also ganz so ist das für mich.

01:31:31.200 --> 01:31:42.240
<v Jochen>Ja, also wenn jemand dann, also nehmen wir an, du hast eine Managed-Datenbank irgendwo gekauft, zum Beispiel bei Quanchi Data und dann irgendwie Quanchi Data, da geht irgendjemand rein und trägt alle Daten raus, dann hast du natürlich trotzdem ein Problem.

01:31:42.400 --> 01:31:49.760
<v Jochen>Auch wenn du das vertraglich dann sagen kannst, das bin ich gar nicht jetzt, ich bin jetzt vielleicht aus der Haftung oder aber das ist ja trotzdem Kacke für deine Kunden und überhaupt nicht.

01:31:49.920 --> 01:31:54.640
<v Dominik>Ja, aber es kommt halt genau auf da, vielleicht auf die detaillierte Vertragsbeziehung mit deinen Kunden oder mit den Kunden deiner Kunden an und so.

01:31:54.880 --> 01:31:56.240
<v Jochen>Ja, aber vielleicht willst du das auch einfach gar nicht.

01:31:56.240 --> 01:31:57.040
Vielleicht sagst du, ich will das nicht mehr.

01:31:57.280 --> 01:32:09.120
<v Dominik>Aber die Frage ist halt tatsächlich, also was jetzt aus der auch jetzt aus so einer Datenraustrageperspektive sicherer oder besser ist, wenn man jetzt ein kleines Team hat, sich noch komplett um so ein Datenbank-Cluster-Management zu kümmern zu müssen.

01:32:09.120 --> 01:32:16.880
<v Dominik>Oder dass halt ein Service-Dienstleister auszusourcen, der da vielleicht mehr Zeit für hat oder mehr Ressourcen, weil er das nur macht und da sich auch besser damit auskennt, als man selber.

01:32:16.880 --> 01:32:18.480
<v Dominik>Und das geht ja für verschiedene andere Services

01:32:18.480 --> 01:32:18.800
<v Jochen>auch so.

01:32:18.880 --> 01:32:21.920
<v Jochen>Also es kann durchaus sein, dass das sogar die sichere Alternative ist.

01:32:21.920 --> 01:32:22.400
<v Jochen>Würde ich auch sagen.

01:32:22.560 --> 01:32:25.440
<v Jochen>Wenn du das outsourced, wenn du dich selber halt nicht damit auskennst.

01:32:25.520 --> 01:32:25.680
Genau.

01:32:25.840 --> 01:32:27.600
<v Dominik>Oder man hat halt nicht so relevante Sachen.

01:32:27.600 --> 01:32:33.520
<v Dominik>Und ich sag mal so, ja, okay, klar, gibt es so Punkte, wo man jetzt gucken muss, dass man jetzt nicht alles so sammelt wie jetzt die letzte Krake.

01:32:33.520 --> 01:32:36.080
<v Dominik>Da gibt es ja so ein paar Google-Kraken, die das so machen.

01:32:36.160 --> 01:32:40.320
<v Jochen>Ja, aber es gibt viele Unternehmen, die erstmal alles in ihrem Data-Lake irgendwo hin.

01:32:40.480 --> 01:32:41.680
<v Dominik>Ja, also ich würde jetzt auch nicht alles machen.

01:32:41.840 --> 01:32:46.480
<v Jochen>Vielleicht kann man damit irgendwann mal irgendwas anfangen, aber da bin ich auch kein Freund von solchen.

01:32:47.040 --> 01:32:49.280
<v Dominik>Also ich kann das so ein bisschen verstehen.

01:32:49.440 --> 01:32:53.840
<v Dominik>Also jetzt nicht von Kunden, aber wenn ich jetzt so eine Request habe oder so, warum soll ich die ganzen Informationen da wegschmeißen?

01:32:54.560 --> 01:33:00.560
<v Martin>Also der neueste Trend scheint zu sein, dass jeder Dienst, egal wie unwichtig der ist, meine Telefonnummer haben will.

01:33:00.560 --> 01:33:03.600
<v Martin>Und das finde ich ganz grausam.

01:33:03.600 --> 01:33:04.080
<v Jochen>Ja.

01:33:04.320 --> 01:33:09.600
<v Dominik>Also ich würde jetzt auch sagen, also ich will ja, mir geht es gar nicht so um Kundendaten, sondern eher so um so einen Meta-Quatsch.

01:33:10.800 --> 01:33:13.280
<v Dominik>Logzeitstempel oder sowas.

01:33:13.600 --> 01:33:14.320
<v Jochen>So Telemetrie.

01:33:14.640 --> 01:33:15.280
<v Dominik>Weil das in Sinn.

01:33:16.720 --> 01:33:25.120
<v Dominik>Und ohne, dass ich jetzt irgendwie so ein Nutzer daran identifizieren möchte, um irgendwie da noch ein Quäntchen Umsatz rauszuquetschen, sondern einfach nur so ein bisschen um den Flow so ein bisschen besser im Blick zu haben.

01:33:25.200 --> 01:33:26.880
<v Martin>Ja, technische Daten brauchst du natürlich.

01:33:26.880 --> 01:33:28.640
<v Martin>Das steht ja außer Frage.

01:33:28.640 --> 01:33:30.720
<v Martin>Sonst funktioniert die Software ja nicht.

01:33:30.960 --> 01:33:32.560
<v Dominik>Ja.

01:33:33.840 --> 01:33:38.880
<v Jochen>Ja, aber auch da, ich meine, man macht sich vielleicht nicht immer klar, welche Optionen man eigentlich hat.

01:33:38.880 --> 01:33:40.720
<v Jochen>Natürlich kann man irgendwie Sachen speichern und so.

01:33:40.720 --> 01:33:44.960
<v Jochen>Also die Frage ist halt, wiederum, wenn du nicht so viele Nutzer hast, du kannst ja auch einfach fragen.

01:33:45.360 --> 01:33:48.560
<v Dominik>Also wäre jetzt auch so ein GraphQuery-API, ne?

01:33:48.560 --> 01:33:54.080
<v Dominik>Wenn ich jetzt nicht ein Problem mit Latenz habe, ich ziehe mir dann ein Maximum und schmeiße alles weg, was ich nicht brauche.

01:33:54.320 --> 01:33:56.800
<v Dominik>Also man könnte natürlich auch direkt die Query so effektivieren.

01:33:56.880 --> 01:33:57.920
Es gibt auch Leute, die

01:33:57.920 --> 01:33:58.720
so an der Dominik.

01:33:58.800 --> 01:34:03.360
<v Jochen>Du kannst auch direkt die Datenbank quasi in deinen Browser reinpacken.

01:34:03.360 --> 01:34:04.480
<v Jochen>Das geht natürlich auch.

01:34:04.480 --> 01:34:07.360
<v Jochen>Es gibt auch bestimmte Anwendungsfälle, in denen das sinnvoll ist.

01:34:07.680 --> 01:34:11.200
<v Jochen>Aber ja, es gibt gute Gründe, warum Leute das anders machen.

01:34:11.200 --> 01:34:12.640
<v Dominik>Also Vorteil.

01:34:14.240 --> 01:34:19.360
<v Martin>Weitere Vorteil ist, wenn ich die Daten nicht sammle, dann habe ich auch Backup deutlich kleiner.

01:34:19.680 --> 01:34:26.560
<v Dominik>Also ich würde, einer der wichtigsten Argumente ist vielleicht auch, dass es weniger Strom verbraucht, so ein bisschen weniger Kosten, auch ökologisch oder so.

01:34:30.080 --> 01:34:38.560
<v Jochen>Aber ich finde das, also so das Ding als Grundsatz zu sagen, schaue mal, ob ich jetzt nicht vielleicht irgendwie, welche Daten ich wirklich brauche und welche halt nicht.

01:34:38.560 --> 01:34:42.000
<v Jochen>Und die, die ich nicht brauche, die speichere ich gar nicht erst.

01:34:42.000 --> 01:34:44.800
<v Jochen>Das finde ich eigentlich schon recht sinnvoll.

01:34:44.800 --> 01:34:52.000
Ja, tatsächlich als

01:34:52.000 --> 01:34:56.000
<v Dominik>eigentlich für so ein ORM-Ding sprich mal mit klaren definierten Modellen, mit einer klaren Validierung.

01:34:56.000 --> 01:35:05.280
<v Jochen>Na, ich weiß, also zu dieser grundsätzlichen Frage Datenbank ja oder nein, aus meiner Perspektive ist das jetzt eher, würde ich ja sagen, ja, gut, das Dateisystem ist ja auch eine Datenbank.

01:35:05.520 --> 01:35:07.840
<v Jochen>Es ist halt nur eine andere Art von Datenbank.

01:35:07.840 --> 01:35:10.800
<v Jochen>Es ist halt eine hierarchische Datenbank und keine relationale.

01:35:11.040 --> 01:35:13.120
<v Dominik>Busckt ja auch ein Fall irgendwo rum.

01:35:13.600 --> 01:35:15.120
<v Jochen>Ja, genau.

01:35:16.000 --> 01:35:35.840
<v Jochen>Insofern ist halt auch da die Frage, und es ist ja auch, wenn man eine Web-Anwendung hat, die sind die, die auch eine, jetzt wenn man ein Django hat oder so, oder was auch immer, für eine Standard-Web-Anwendung, dann üblicherweise hat man ja auch da nicht nur Daten in Tabellen, sondern da hat man ja auch noch was anderes.

01:35:35.840 --> 01:35:38.480
<v Jochen>Da hat inzwischen eigentlich nicht mehr wirklich Fallsystem.

01:35:38.480 --> 01:35:42.000
<v Jochen>Früher war es dann ein Fallsystem noch, aber inzwischen ist es halt ein Object-Store meistens.

01:35:42.080 --> 01:35:43.600
<v Dominik>Ja, irgendwas Cash-Redis oder.

01:35:43.920 --> 01:35:47.120
<v Jochen>Cash gut, aber das ist jetzt nicht unbedingt Teil der Datenhaltung.

01:35:47.120 --> 01:35:48.720
<v Jochen>Da liegt ja auch nur eine Kopie von dem, was man sagt.

01:35:49.440 --> 01:35:54.560
<v Dominik>Du musst ja zum Beispiel redest jetzt auch nicht nur aus Cache nehmen, du kannst halt auch da irgendwie bestimmte Sachen Vorbrechende ablegen, wenn das irgendwie.

01:35:54.960 --> 01:36:00.320
<v Jochen>Das ist nochmal eine andere, da würde ich sagen, Redis ist halt so ein Key-Value-Store irgendwie im weitesten Sinne.

01:36:01.280 --> 01:36:05.600
<v Jochen>Aber dafür gibt es natürlich auch wieder Annonsfälle, wo das gut ist.

01:36:05.680 --> 01:36:20.480
<v Jochen>Aber also diese Kombination relationale Datenbank auf der einen Seite, auf der anderen Seite Object-Storage für halt irgendwie Daten, die jetzt irgendwie eine interne Struktur vielleicht haben, aber die jetzt nicht irgendwie, das ist eigentlich schon eine super Kombination.

01:36:20.480 --> 01:36:22.880
<v Jochen>Aber ja, ich meine, gut, Fallsystem hat natürlich auch Vorteile.

01:36:22.960 --> 01:36:25.120
<v Dominik>Was würdest du damit mit den Object Store nehmen?

01:36:27.040 --> 01:36:36.560
<v Jochen>Ja, also das habe ich leider nochmal, was ich mir gerne angucken würde und wovon ich jetzt schon Gutes gehört habe, im Zuge von Mastodon hat ja dieses Problem auch.

01:36:36.560 --> 01:36:45.040
<v Jochen>Also Leute wollen ihren eigenen Instanzen hosten und haben dann jetzt auch das Problem, dass da ganz viele Bilder und Videos und so Zocks kommen, dass die sie irgendwo hinlegen müssen.

01:36:45.040 --> 01:36:51.040
<v Jochen>Und wenn man das halt nach, ich habe jetzt letztens irgendwie wann war das?

01:36:51.040 --> 01:36:56.400
<v Jochen>Es gestern Morgen oder so, keine Ahnung, war auch Python-Podcast war weg.

01:36:56.800 --> 01:36:57.440
<v Jochen>Hä, warum das denn?

01:36:57.520 --> 01:36:59.280
<v Jochen>Naja, gut, Platte vollgelaufen.

01:36:59.280 --> 01:36:59.920
<v Jochen>Und warum?

01:36:59.920 --> 01:37:05.440
<v Jochen>Ja, weil da eine Mastodon eine Instanz auf dem gleichen Rechner läuft, die halt irgendwie alles vollgemüllt hat.

01:37:05.440 --> 01:37:14.880
<v Jochen>Und genau, dann die Standardlösung oder das erste ist dann halt, Leute legen das dann nach S3 oder so und stellen dann fest, oh mein Gott, das ist ja voll teuer.

01:37:14.880 --> 01:37:16.160
<v Jochen>Ja, das ist.

01:37:16.720 --> 01:37:21.280
<v Jochen>Und ja, ich habe jetzt, ich weiß nicht, vor den letzten Monaten und ich habe ja eine super kleine Instanz.

01:37:21.440 --> 01:37:29.840
<v Jochen>Ich habe trotzdem die letzten drei, vier Monate hat das Ding irgendwie 60 Gigabyte Daten oder so angesammelt an Zeugs.

01:37:29.840 --> 01:37:36.720
<v Jochen>Und gut, bei größeren Instanzen wird das noch viel, viel mehr sein und dann wird das halt irgendwann teuer, wenn man das halt alles nach S3 legt.

01:37:36.720 --> 01:37:39.280
<v Jochen>Und dann ist die Frage, okay, kann man das irgendwie selber machen?

01:37:39.280 --> 01:37:40.080
Ja, kann man.

01:37:40.080 --> 01:37:44.000
<v Jochen>Was ich dafür schon verwendet habe, ist so Mini-IO.

01:37:44.080 --> 01:37:47.280
Ja, das aber so.

01:37:48.400 --> 01:37:51.760
<v Jochen>Das Problem dabei ist, ja, also einmal macht das.

01:37:51.760 --> 01:37:52.640
Das ist quasi.

01:37:52.880 --> 01:37:54.000
So ein Bugnet-Lokal.

01:37:55.120 --> 01:37:56.560
<v Dominik>Gleicher AP, gleiches Interface wie S3.

01:37:56.720 --> 01:38:01.040
<v Jochen>Gleicher API wie S3, aber du kannst halt selber husten.

01:38:01.840 --> 01:38:02.960
<v Jochen>Das ist eigentlich ganz nett, ja.

01:38:02.960 --> 01:38:03.920
<v Jochen>Also so prinzipiell die Idee.

01:38:04.080 --> 01:38:05.360
<v Dominik>Ich glaube auch GPL.

01:38:06.000 --> 01:38:09.280
<v Jochen>Ja, das kann, das kann man durchaus verwenden.

01:38:09.280 --> 01:38:12.080
<v Jochen>Auch im kommerziellen Kontext geht das.

01:38:12.080 --> 01:38:22.000
<v Jochen>Aber es gibt da eine Firma hinter, irgendwie, die sitzt auch im Silicon Valley, das ist alles irgendwie ein Go-geschrieben und da arbeiten viele Leute, die haben wirklich viel, viel Venture-Capital eingesammelt und so.

01:38:22.160 --> 01:38:23.760
<v Jochen>Das müssen sie halt irgendwie auch wieder rausholen.

01:38:23.760 --> 01:38:35.440
Das heißt, irgendwann werden sie irgendwie versuchen, Methoden zu finden, wie sie einem dafür irgendwie einen dafür bezahlen lassen können, was ja auch irgendwie legitim ist, aber das ist halt so ein bisschen.

01:38:35.440 --> 01:38:49.920
<v Jochen>Und was halt der große Nachteil von Minio ist, dass du da nicht dynamisch irgendwie Dinge hinzustellen und wegnehmen kannst, sondern das ist halt schon eher so auf den Betrieb ausgelegt, du weißt schon, wie viel Platz du hast und das ist alles fertig.

01:38:50.080 --> 01:38:51.440
<v Dominik>Wieso kannst du nicht dynamisch was.

01:38:51.600 --> 01:38:54.960
<v Jochen>Du kannst halt nicht einfach eine Maschine dazustellen und sagen, so hier eine Maschine mehr.

01:38:55.120 --> 01:38:58.240
<v Dominik>Du kannst auch so ein Cluster, dann kannst du irgendwie die in so eine Liste eintragen und dann.

01:38:58.560 --> 01:39:02.960
<v Jochen>Das ist dann etwas, wo dann die Leute draufgestoßen sind, die dann Vinio verwendet haben.

01:39:03.120 --> 01:39:10.080
<v Martin>Das ist ja der große Vorteil von AWS und Lambda-Geschichte, dass du das halt einfach hochskalieren kannst mit dem Klick.

01:39:10.080 --> 01:39:27.120
<v Jochen>Ja, genau, also wenn du, aber Vinio ist eher so für jemanden, der sowas wie S3 betreiben möchte und dann halt schon, ja, wo du dann halt schon einen Datasenter hast und wo das alles, aber wenn du jetzt dynamisch irgendwie so sagst, oh, ich brauche jetzt aber nochmal ein paar Terabyte mehr Daten, Speicher, dann ist ein Minü.

01:39:27.760 --> 01:39:30.080
<v Dominik>Das kannst du deinem Menü-Cluster kannst du Sachen auf jeden Fall hinzufügen.

01:39:30.080 --> 01:39:37.120
<v Dominik>Das heißt, wenn du dir irgendwie dynamisch Kisten spawnst, auf denen du Minü aufsetzt und die dann kannst du einfach deinem Cluster hinzufügen.

01:39:37.120 --> 01:39:38.800
<v Dominik>Also theoretisch geht das halt schon.

01:39:38.800 --> 01:39:51.680
<v Jochen>Ja, also jedenfalls, also ich habe, ich beziehe mich da jetzt auf die ganzen Performance-Tuning und so Dinge, Artikel, die Leuten dann aufgefallen sind, die große Master-Instanzen mit haben, die meinen so, ah shit, das geht nicht mit Minute geht nicht gut, weil du kannst es nicht dynamisch.

01:39:52.000 --> 01:39:54.640
<v Jochen>Kannst du Sachen hinzufügen oder wegnehmen, geht nicht gut.

01:39:54.800 --> 01:39:58.720
<v Jochen>Und die sind dann alle umgestiegen auf etwas, nennt sich CWEDFS.

01:39:58.720 --> 01:39:59.520
Okay.

01:39:59.520 --> 01:40:01.040
<v Jochen>Und da geht das wohl.

01:40:01.040 --> 01:40:03.680
<v Jochen>Das habe ich aber selber noch nicht ausprobiert, also keine Ahnung.

01:40:03.680 --> 01:40:04.480
Sea.

01:40:04.640 --> 01:40:05.280
<v Jochen>Ja.

01:40:06.800 --> 01:40:07.840
<v Jochen>Ja.

01:40:08.800 --> 01:40:10.400
<v Jochen>Genau, das sind halt so die Dinge, die man.

01:40:10.640 --> 01:40:12.480
<v Dominik>Wieder auf die Ansible-To-Do-Liste.

01:40:12.800 --> 01:40:13.280
<v Jochen>Ja.

01:40:14.400 --> 01:40:15.520
<v Jochen>Naja, genau.

01:40:15.520 --> 01:40:20.560
<v Jochen>Aber ja, also die Kombination ist eigentlich schon gut, aber ja klar, ich sehe auch, dass man, wenn man ein Fallsystem hat, ist auch nicht so schlecht, ja.

01:40:20.560 --> 01:40:23.680
<v Jochen>Also wenn man da tatsächlich reingucken kann und so.

01:40:23.680 --> 01:40:24.800
<v Jochen>Ja.

01:40:25.040 --> 01:40:30.800
<v Jochen>Ja, ist halt immer kommt auf einen Anwendungsfall an, was jetzt da mehr Sinn macht.

01:40:31.520 --> 01:40:44.160
<v Jochen>Ja, aber ich meine, sozusagen aus der Datenbankenperspektive, du musst dich ja jetzt dann auch tatsächlich um solche Sachen kümmern wie Backup und was passiert eigentlich, wenn irgendwas weg ist, wie kommt das wieder zurück?

01:40:44.160 --> 01:40:52.400
<v Jochen>Und diese ganzen Prozesse, wo du ja, ich meine, klar, bei Datenbanken ist es halt vielleicht komplizierter, aber da gibt es ja schon eine fertige Lösung für, das musst du dann ja selber bauen.

01:40:52.400 --> 01:40:53.280
Eigentlich.

01:40:53.280 --> 01:40:55.360
<v Martin>Naja, eigentlich nicht.

01:40:55.360 --> 01:40:57.680
<v Martin>Also wie kommt das zurück, war ja deine Frage.

01:40:57.680 --> 01:40:59.920
<v Martin>Naja, mit Einsible und dem Backup.

01:40:59.920 --> 01:41:00.480
<v Martin>Ja.

01:41:02.240 --> 01:41:05.840
<v Martin>Und ja, Backups mache ich mit Borg.

01:41:05.840 --> 01:41:07.600
<v Martin>Hab noch nichts Besseres gefunden.

01:41:08.000 --> 01:41:08.880
Restic ist gut.

01:41:09.040 --> 01:41:10.080
<v Dominik>Kennst du Resticke?

01:41:10.160 --> 01:41:10.960
Resticke.

01:41:11.360 --> 01:41:16.000
<v Martin>Habe ich gelesen, brauche ich da aber eigentlich nicht.

01:41:16.000 --> 01:41:22.560
<v Martin>Also hab noch keinen Anwendungsfall, wo ich jetzt oberhalb von Borg noch was brauchen würde.

01:41:24.000 --> 01:41:25.760
<v Martin>Was kann Restic noch zusätzlich?

01:41:26.240 --> 01:41:29.920
<v Dominik>Du kannst halt auch direkt auf einen Bucket Backup zum Beispiel oder so.

01:41:30.320 --> 01:41:31.280
<v Martin>Ach so.

01:41:32.320 --> 01:41:35.280
<v Dominik>Oder auch irgendwo, wo halt einer läuft, also relativ gut ist.

01:41:35.680 --> 01:41:36.640
Ja, das mache ich sowieso.

01:41:36.640 --> 01:41:39.120
<v Martin>Aber gut, das mache ich dann händisch.

01:41:40.240 --> 01:41:46.480
<v Martin>Also nicht händisch, sondern automatisch, also ich habe es programmiert, sodass es jetzt automatisch läuft, sozusagen.

01:41:47.360 --> 01:41:48.640
Ja.

01:41:49.760 --> 01:41:59.440
<v Jochen>Ja, aber ja, also die, ich meine, klar, das ist schon eine berechtigte, also muss man sich eigentlich schon überlegen, es ist ja meistens so, dass relationale Datenbanken immer so gesetzt sind.

01:41:59.440 --> 01:42:04.320
<v Jochen>Aber ob das für alle Anwendungsfälle immer so der Default sein sollte, weiß ich auch nicht.

01:42:04.320 --> 01:42:07.200
<v Jochen>Das ist schon, kann man auch nochmal drüber nachdenken.

01:42:07.680 --> 01:42:10.400
<v Jochen>Ob das für den eigenen Fall irgendwie Sinn macht.

01:42:10.400 --> 01:42:11.280
Ja.

01:42:11.280 --> 01:42:19.680
<v Jochen>Ich meine, aus so einer Software-Architekturperspektive kann man natürlich auch einfach sagen, das ist halt ein Implementationsdetail, das ich jetzt aus dem Kern meiner Software auch eigentlich raushalten kann.

01:42:19.680 --> 01:42:42.640
<v Jochen>Ich mache in dem halt irgendwie Repository-Puttern oder so und dann habe ich sowieso in meiner Applikation oder in meiner Kernlogik irgendwie nur mit Objekten zu tun und wie die jetzt letztlich gespeichert werden, ob die in einem Fallsystem landen, in JSON oder Toml oder der Datenbank, das da ist letztlich egal, da kümmert sich irgendwie ein anderer Teil drum und das ist gar nicht im Kern meiner Applikation drin.

01:42:43.040 --> 01:42:49.440
<v Martin>Naja, der Vorteil der Datenbank, das sehe ich in erster Linie in den Aggregationsfunktionen, die das halt mitbringt.

01:42:49.440 --> 01:42:50.000
<v Martin>Ja.

01:42:50.000 --> 01:42:53.200
<v Martin>Aber das mache ich halt woanders dann.

01:42:56.000 --> 01:43:03.760
<v Jochen>Ja, ja, du, also ich meine, du könntest halt, also ich meine, was du in NumPy halt nicht hast, wenn jetzt so große Datenmengen hast, dass die gar nicht so wirklich in deinen Hauptspeicher passen.

01:43:04.080 --> 01:43:05.360
<v Martin>Wenn die nicht in den Speicher passen, richtig.

01:43:05.360 --> 01:43:07.280
<v Martin>Aber auch da gibt es Lösungen tatsächlich.

01:43:07.840 --> 01:43:14.320
<v Martin>Da gibt es Abstraktionen von NumPy, die das quasi so chunk-mäßig dann bearbeiten.

01:43:14.320 --> 01:43:15.520
<v Martin>Also das geht tatsächlich auch.

01:43:15.680 --> 01:43:17.600
<v Martin>Ach, cool, wenn man das will.

01:43:19.360 --> 01:43:23.760
<v Jochen>Ja, oder überhaupt so Indizes und so hast du wahrscheinlich dann eher nicht.

01:43:23.760 --> 01:43:24.720
Nee, brauche ich nicht.

01:43:24.720 --> 01:43:25.200
<v Jochen>Außer nicht.

01:43:26.640 --> 01:43:30.960
<v Martin>Man können auch keine Indizes kollidieren, wenn ich zwei dicke Datensätze zusammenfüge.

01:43:33.680 --> 01:43:47.040
<v Jochen>Ja, insofern, also auf jeden Fall finde ich sehr interessant, weil viele irgendwie eher unkonventionelle Ansätze oder so, aber ja, auf jeden Fall sehr interessant.

01:43:47.040 --> 01:43:51.760
<v Jochen>Und für den Anwendungs, also für den Anwendungsfall macht das wahrscheinlich durchaus alles Sinn.

01:43:52.720 --> 01:43:58.400
<v Martin>Hat natürlich alles Vor- und Nachteile, aber gut, da muss man sich halt dann informieren vorher.

01:44:00.960 --> 01:44:10.800
<v Jochen>Ja, ich weiß nicht, hast du noch irgendein Thema Martin, was ist, was du, wo wir jetzt noch nicht drüber gesprochen hätten?

01:44:10.800 --> 01:44:13.520
<v Jochen>Oder sind wir quasi durch?

01:44:13.840 --> 01:44:18.400
<v Martin>Nö, aktuell, würde ich sagen, haben wir relativ breit alles erschlagen.

01:44:18.880 --> 01:44:19.920
<v Jochen>Da machen wir noch Picks.

01:44:19.920 --> 01:44:20.480
<v Jochen>Gut.

01:44:21.360 --> 01:44:22.720
<v Dominik>Wer möchte anfangen?

01:44:24.320 --> 01:44:25.840
<v Jochen>Okay, dann fange ich mal an.

01:44:26.160 --> 01:44:26.720
<v Jochen>Moment.

01:44:28.880 --> 01:44:29.920
<v Jochen>Picks.

01:44:31.760 --> 01:44:38.400
<v Jochen>Ich würde gerne eine auch eine kleine, feine Anwendung picken.

01:44:40.960 --> 01:44:48.320
<v Jochen>Die jetzt ist auch wieder natürlich nicht für so wahnsinnig viele Leute interessant ist, gibt es auf iOS und auf dem Mac.

01:44:48.320 --> 01:44:52.800
<v Jochen>Und zwar heißt die Paprika.

01:44:52.800 --> 01:44:54.800
<v Jochen>Und das ist so eine Rezeptverwaltung.

01:44:54.800 --> 01:45:04.240
<v Jochen>Ich weiß nicht, wenn man halt irgendwie gerne kocht und viele Rezepte hat und so, dann überlegt man sich ja häufig, wo man die dann irgendwie zentral lagert oder keine Ahnung, was man damit.

01:45:04.560 --> 01:45:05.120
<v Jochen>Obsidian.

01:45:05.440 --> 01:45:06.560
<v Jochen>Ja, Obsidian.

01:45:06.640 --> 01:45:12.880
<v Jochen>Ja, gut, aber das ist dann halt, das ist halt sehr puristisch irgendwie.

01:45:13.840 --> 01:45:19.040
<v Dominik>Du kannst ja auf direkt Static-Pages, das für Rezepte eigentlich sich dafür sehr gut erinnern lassen, deinen Bock.

01:45:19.040 --> 01:45:29.840
<v Jochen>Ja, aber klar, kann man machen, ist halt aber nicht unbedingt auf den Rezeptanwendungsfall irgendwie so wahnsinnig gut zugeschnitten.

01:45:30.480 --> 01:45:41.760
<v Jochen>Und das Ding kann halt so Sachen wie zum Beispiel man, das hat einen eingebauten Browser und dann, wenn man irgendwo im Web ist und sieht halt irgendwo ein Rezept oder so, dann kann man sagen, okay, speichere mir das mal.

01:45:41.760 --> 01:45:49.120
<v Jochen>Und dann kann man halt die unterschiedlichen Teile, also man hat sozusagen ein Schema, in dem die Rezepte irgendwie gespeichert werden.

01:45:49.120 --> 01:46:00.080
<v Jochen>Und dann kann man halt in dem eingebauten Browser kann man dann halt so Rechtecke ziehen und sagen, so, das hier sind die Zutaten und dann zieht man da einfach ein Rechteck drüber und sagt, so da waren die Zutaten und dann macht es halt flup und dann sind die Zutaten halt in einem ordentlichen Format drin.

01:46:00.080 --> 01:46:12.720
<v Jochen>Oder hier, das ist das Bild, wo man wirklich sehen kann, was da drauf, also will, weil woher soll, will man sonst wissen, oft auf Webseiten gibt es halt viele Bilder, wo ist denn, welches Bild ist denn hier zum Lass, auf dem das wirklich zu sehen ist, was da gekocht wurde?

01:46:12.720 --> 01:46:34.080
<v Jochen>Und dann klickt man halt auf das Richtige und dann hat man hinterher, also mit relativ wenig, also hat sich jemand wirklich Mühe gegeben, dass man mit relativ wenig Aufwand und irgendwie auf so eine Seite rumklicken quasi ein Rezept in eine sehr strukturierte Form bringen kann, wo man dann nachher so Abfragen machen kann wie, gib mir doch mal alles, wo irgendwie Zucchini vorkommt und irgendwie, keine Ahnung, weiß ich nicht, und ein Dessert ist oder so und das funktioniert dann.

01:46:34.160 --> 01:46:38.560
<v Jochen>Was mit dem Obsidianansatz natürlich ist dann halt schwieriger.

01:46:38.560 --> 01:46:39.280
<v Jochen>Ja, genau.

01:46:39.280 --> 01:46:49.680
<v Jochen>Und das synchronisiert halt auch, man kann auch direkt sagen, wenn man ein Rezept hat, okay, mach mir mal eine Einkaufsliste draus und so und ja, dann hat das dann halt auf dem Telefon bzw.

01:46:49.840 --> 01:46:55.840
<v Jochen>auf der Uhr, wenn man durch den Supermarkt läuft, dann kann er die Sachen wegklicken.

01:46:55.840 --> 01:46:58.080
<v Jochen>Also sehr, sehr angenehmes Ding.

01:46:58.080 --> 01:47:05.680
<v Jochen>Ich bin Ben Nesswing drauf gekommen, weil ich habe ja halt so eine so eine Webseite Captain Cook irgendwie.

01:47:05.760 --> 01:47:09.840
<v Jochen>Da gibt es immer ganz interessante Vorschläge, was Rezepte angeht, so drei pro Tag.

01:47:09.840 --> 01:47:16.240
<v Jochen>Und ich hatte früher auch eine Kombination aus Python Backend und Vue.js Melee verwendet.

01:47:17.360 --> 01:47:19.040
<v Dominik>Früher, also vor drei Wochen.

01:47:19.120 --> 01:47:21.680
<v Jochen>Vor einem Jahr ungefähr, habe ich damit mal angefangen.

01:47:21.680 --> 01:47:24.000
<v Jochen>Weil das auch ganz interessant aussah.

01:47:24.000 --> 01:47:27.120
<v Jochen>Aber ehrlich gesagt, also das zu deployen ist schon ganz schöner Horror.

01:47:27.200 --> 01:47:28.800
<v Dominik>Ja, ich habe Melee nicht so cool.

01:47:29.040 --> 01:47:29.840
Ja.

01:47:29.840 --> 01:47:48.160
<v Jochen>Aber und dann habe ich irgendwie ein Ding gebaut, was mir sozusagen die Rezeptgeschichten, die es da bei dieser App gibt, in dieser Captain Cook-App, halt rübersynkt in meinen Melee und ich dann halt nur noch Millie verwenden muss und nicht mehr die komische App, weil die App von Captain Cook ist halt, sieht zwar irgendwie nett aus, aber sie ist halt funktioniert nicht so richtig.

01:47:48.160 --> 01:47:58.240
<v Jochen>Und genau, und da hat jemand dann einen Pull-Request gegengestellt und hat gesagt, hier soll das nicht auch vielleicht mal nach Paprika sünken und so.

01:47:58.240 --> 01:47:59.600
<v Jochen>Ich dachte so, Paprika kann ich gar nicht.

01:47:59.600 --> 01:48:03.040
<v Jochen>Ja, bin ich auch aufmerksam geworden und ja, voll super, jetzt übt das halt auch dahin.

01:48:03.040 --> 01:48:04.240
<v Jochen>Und jetzt verwende ich Paprika.

01:48:04.240 --> 01:48:05.440
<v Jochen>Und es bin sehr zufrieden.

01:48:05.440 --> 01:48:11.200
<v Dominik>Also ja, also was echt cool klingt, ist halt mit den Bildern in den Zutaten, weil ja, ich mache das halt immer alles selber, aber gut, ja.

01:48:11.360 --> 01:48:13.040
<v Dominik>Koratierte Rezepte, ja.

01:48:13.520 --> 01:48:14.480
<v Dominik>Okay.

01:48:14.960 --> 01:48:15.760
Cool.

01:48:16.080 --> 01:48:19.200
<v Dominik>Ich würde Copilot Labs picken.

01:48:19.200 --> 01:48:19.680
<v Jochen>Ah.

01:48:21.040 --> 01:48:23.680
<v Dominik>Also Copilot haben wir ja schon ein paar Mal drüber gesprochen.

01:48:23.760 --> 01:48:28.160
<v Dominik>Wunderschöne Extension für den Editor deiner Wahl zum Bessermachen.

01:48:28.160 --> 01:48:40.560
<v Dominik>Copilot Labs ist, ich weiß nicht, ob es auch für andere IDs geht als VS Code, aber damit kannst du halt so Sachen machen wie, äh, marquiert irgendwie ein paar Funktionen, mach doch mal bitte Type ins dran oder ein paar Tests hätte ich hier gerne und so.

01:48:40.560 --> 01:48:42.160
<v Dominik>Und das funktioniert ganz gut.

01:48:42.160 --> 01:48:43.920
<v Dominik>Das ist ganz nett.

01:48:43.920 --> 01:48:45.920
<v Dominik>Oder übersetzt das mal in eine andere Sprache.

01:48:45.920 --> 01:48:50.240
<v Dominik>Also hier habe ich einen Python-Code, hier gern Go oder andersrum oder ja, das.

01:48:50.560 --> 01:48:51.680
<v Jochen>Okay, hab ich auch noch nicht.

01:48:51.680 --> 01:48:53.760
<v Jochen>Ich verwende immer nur eine Standard-Copilot, äh, ja.

01:48:53.760 --> 01:48:57.360
<v Dominik>Ja, und das würde ich sagen, das ist eine sehr, sehr geile Extension noch dazu.

01:48:57.920 --> 01:49:13.280
<v Martin>Was ich beim Copilot gelesen habe, ist das folgende, wenn da ein Fehler auftritt, also angenommen, man nutzt halt Copilot in VS Code oder so, dann schickt er einmal komplett alle geöffneten Files zu Microsoft rüber.

01:49:13.600 --> 01:49:18.560
<v Martin>Und da bin ich ein bisschen schützig geworden, ob das denn so geht.

01:49:18.880 --> 01:49:25.280
<v Dominik>Und Teams-Chat und so und alles, was so im Memory hängt, noch irgendwie an.

01:49:25.680 --> 01:49:32.720
<v Martin>Ja, das weiß ich nicht, aber also ich habe halt gelesen, alle geöffneten Files im VS-Code schickt er dann rüber.

01:49:32.720 --> 01:49:34.640
<v Martin>Und das geht ja dann nicht.

01:49:34.880 --> 01:49:42.640
<v Martin>Also wenn er zum Beispiel irgendeine Firma sitzt, glaube ich kaum, dass die Company-Richtlinien das dann erlauben.

01:49:42.640 --> 01:49:43.440
<v Jochen>Ja, ich meine.

01:49:43.680 --> 01:49:44.080
<v Jochen>Depends.

01:49:44.240 --> 01:49:44.960
<v Jochen>Ja, ja, genau.

01:49:44.960 --> 01:49:46.640
<v Jochen>Das ist natürlich schon ein Problem.

01:49:47.600 --> 01:49:52.880
<v Dominik>Es gibt ja so den berühmten Spruch, da würde ich jetzt sagen an der Stelle, better ask for forgiveness than for permission.

01:49:54.720 --> 01:49:55.520
Ja.

01:49:56.640 --> 01:50:00.720
<v Dominik>Es kommt ja vielleicht darauf an, ob du jetzt tatsächlich patentrelevante Dinge machst oder nicht.

01:50:01.200 --> 01:50:01.680
Sagen wir es

01:50:01.680 --> 01:50:02.000
mal so.

01:50:02.000 --> 01:50:12.320
<v Jochen>Na, also ich meine, auch da auch OpenAI hat da ja diverse Probleme, die sind ja irgendwie, wie heißt das, Italien, die Teilen ist komplett gesperrt worden.

01:50:12.320 --> 01:50:12.560
<v Jochen>Ja.

01:50:14.000 --> 01:50:14.880
Jetzt ist es wieder frei, ja.

01:50:14.960 --> 01:50:20.800
<v Jochen>Jetzt ist es wieder frei, aber weil sie da haben da, aber das fand ich schon auch ein bisschen dreist von OpenAI, dass sie da halt wirklich gar nichts zu sagen.

01:50:21.280 --> 01:50:27.520
<v Jochen>Ich meine, sie können ja da, man kann ja, wenn man das sagt, was man da tut mit den Daten, so kann man ja durchaus einiges machen, aber sie haben halt einfach gar nichts dazu gesagt.

01:50:27.520 --> 01:50:28.800
<v Jochen>Und das ist halt schon.

01:50:28.880 --> 01:50:30.480
<v Martin>Wobei das ist ein bisschen andersrum.

01:50:32.240 --> 01:50:34.080
<v Dominik>Man konnte die Story gar nicht verstehen, Entschuldigung.

01:50:34.080 --> 01:50:34.960
<v Jochen>Welche Story?

01:50:35.200 --> 01:50:36.880
<v Dominik>Du hast sie da einfach gesperrt haben, Italien.

01:50:36.960 --> 01:50:39.360
<v Dominik>Ich dachte, Italien hat sich überlegt, dass sie keinen Bock drauf haben.

01:50:39.440 --> 01:50:40.160
<v Jochen>Nee, nee, nee, nee.

01:50:40.160 --> 01:50:41.600
<v Jochen>Das hat eine europäische Geschichte.

01:50:41.600 --> 01:50:53.120
<v Jochen>Das hätte auch dann, das droht da auch dann in anderen europäischen Ländern passieren, weil du musst halt, wenn du irgendwie Daten von Leuten speicherst oder damit irgendwas machst, musst du halt zumindest sagen, was du da tust und warum.

01:50:53.120 --> 01:50:54.320
<v Jochen>Und das haben sie nicht gemacht.

01:50:54.320 --> 01:51:06.080
<v Jochen>Und daher kann man sagen, okay, darfst du deine Produkte in der EU nicht anbieten und Italien hat das so ausgelegt, das kann jedes Land dann so auslegen, wie sie das möchten, dass da jemand mehr drauf zugreifen kann.

01:51:06.400 --> 01:51:15.120
<v Dominik>Ja, gut, aber Artikel 61F DSGVO zum Beispiel sagt, dass ein Anbieter eines Dienstes alle für den Vertragserfüllung relevanten Daten durchaus erheben darf.

01:51:15.440 --> 01:51:21.120
<v Jochen>Ja, ja, ja, klar, aber du musst du musst trotzdem sagen, was du da irgendwie machst und warum.

01:51:21.120 --> 01:51:24.880
<v Jochen>Du darfst das schon, aber sie haben ja nicht mal was dazu gesagt.

01:51:24.880 --> 01:51:26.720
<v Jochen>Und das machen sie jetzt und dann geht's wieder.

01:51:26.720 --> 01:51:27.920
<v Jochen>Also insofern.

01:51:27.920 --> 01:51:30.400
<v Jochen>Aber ja, ich meine, na, so.

01:51:30.640 --> 01:51:31.360
Nee, ist hab ich.

01:51:32.640 --> 01:51:34.080
<v Martin>Wobei da ist so ein bisschen andersrum.

01:51:34.080 --> 01:51:40.320
<v Martin>Also da nimmt sich ja OpenII quasi den Datensatz Internet und lernt da drauf.

01:51:40.320 --> 01:51:44.160
<v Martin>Und falls sie damit was machen, was sie nicht dürfen, haben die ja das Problem.

01:51:44.160 --> 01:51:46.880
<v Martin>Bei Copelot ist es ja so ein bisschen andersrum.

01:51:46.880 --> 01:51:49.280
<v Martin>Da ist ja der Anwender quasi dafür verantwortlich.

01:51:49.280 --> 01:52:00.160
<v Martin>Also wenn der Anwender in der Firma sitzt und lädt jetzt Teile des Quellcodes der Firma irgendwo hoch, darf, glaube ich, der geneigte Mitarbeiter eigentlich auch nicht.

01:52:00.480 --> 01:52:03.680
<v Dominik>Nee, ist aber so, wenn du bei GitHub bist, ist es eh wurscht, ne?

01:52:04.320 --> 01:52:07.360
<v Jochen>Ja, wenn dein Code da E liegt, ja, klar.

01:52:07.760 --> 01:52:12.320
<v Jochen>Aber ich meine, das ist auch was, was Leute halt so bei ChatGPT oder so reinpessen.

01:52:12.320 --> 01:52:14.080
<v Jochen>Also ehrlich gesagt, ich pesse da ja auch viel Code rein.

01:52:14.240 --> 01:52:18.720
<v Jochen>Also daher das ist halt auch ein Anwendungsfall.

01:52:18.720 --> 01:52:24.480
<v Jochen>Und da ist wahrscheinlich auch viel Solx dabei, wo man als Firma ein Problem mit hatte, wenn Leute das halt machen.

01:52:24.480 --> 01:52:25.280
Aber ja.

01:52:25.520 --> 01:52:46.960
<v Dominik>Ja, aber als Firma, ey, ganz ehrlich, gerade als Firma ist doch wohl ein berechtigtes Interesse daran, Produktivität, Effektivität zu haben und die ganzen Secrets, die irgendjemand damit preisgeben könnte, die Maschine dahinter, die fängt jetzt ja nicht an, individuell nach dir zu suchen und deine Secrets rauszupaldovern, um da selber ein Profit zu machen.

01:52:46.960 --> 01:52:49.360
<v Dominik>Also gerade aus, also auch als Firma würde ich das machen.

01:52:49.680 --> 01:52:50.960
<v Jochen>Aber viele könnte Solte dabei.

01:52:50.960 --> 01:52:52.480
<v Jochen>Ja, aber

01:52:52.480 --> 01:53:13.040
<v Dominik>ich weiß jetzt nicht, ob ich meine wirklich jetzt meine patentierbaren Sachen da irgendwie zu mir lassen würde, aber ansonsten würde ich jetzt sagen, hm, und es gibt halt auch zum Beispiel, wenn man das nicht möchte, als Firma ja durchaus Auftragsdatenverarbeitungsdinge, wenn man jetzt mit dem Microsoft Professional Vertrieb spricht, wo man dann APIs bekommt, wo die Daten halt nicht zurückgeflossen werden sollen und so weiter.

01:53:13.040 --> 01:53:17.600
<v Dominik>Das heißt, dann meint man halt sowas, dann hat man halt einen anderen API-Endpunkt mit einem anderen Api-Key, basta.

01:53:18.000 --> 01:53:18.560
Ja, genau.

01:53:18.960 --> 01:53:23.680
<v Martin>Also ich weiß von einer Firma, da ist in den Firmenrichtlinien Copilot direkt verboten worden.

01:53:23.680 --> 01:53:26.000
<v Dominik>Ja, das stellen sich auch immer alle ziemlich viel an.

01:53:27.120 --> 01:53:30.960
<v Jochen>Also ich fand den Punkt auch von, ich weiß gar nicht, wer das gesagt hatte.

01:53:31.360 --> 01:53:37.840
<v Jochen>Ich glaube, Manwald hat das auch in der letzten Episode gesagt, bei Firmen ist ja sowieso ab einer gewissen Größe, so effizient kannst du da gar nicht mehr sein.

01:53:38.960 --> 01:53:47.040
<v Dominik>Jeder Angst hat dann, dass du jedes einzelnes Softwarepaket irgendwie verifizieren musst von irgendeinem Audit-Team, was meinst, kann es besser als die Open-Source-Community und so.

01:53:47.040 --> 01:53:51.760
<v Dominik>Und dann sitzen da zwei Männchen und machen dann ein Audit von 150.000 Davis-Paketen oder sowas.

01:53:51.760 --> 01:53:52.720
Entschuldigung.

01:53:53.840 --> 01:53:56.720
<v Jochen>Muss ja nicht alles sinnvoll sein, aber das

01:53:56.720 --> 01:53:57.600
worüber reden wir?

01:53:57.600 --> 01:53:58.720
<v Dominik>Ist das eine ABM oder was?

01:53:59.360 --> 01:54:09.200
<v Dominik>Also ganz ehrlich, die Kosten und den Nutzen vom Business würde ich jetzt sagen, auch von, tu jetzt mal so, von einem anderen Flight-Level würde ich sagen, ist das vernachlässigbar.

01:54:09.520 --> 01:54:11.440
<v Martin>Naja, muss halt die Firma dann am Ende entscheiden.

01:54:11.760 --> 01:54:12.640
Und das kommt

01:54:12.640 --> 01:54:14.240
<v Martin>halt dann eher nicht der Mitarbeiter.

01:54:14.240 --> 01:54:14.960
<v Jochen>Ja, genau.

01:54:15.200 --> 01:54:18.640
<v Dominik>Aber das ist die Frage, ob sich jemand in der Firma damit auskennt, um diese Entscheidungsgrundtage zu haben, das

01:54:18.640 --> 01:54:18.960
zu verstehen.

01:54:19.040 --> 01:54:20.640
<v Jochen>Oft genug wahrscheinlich nicht, aber

01:54:20.640 --> 01:54:22.400
<v Dominik>ja, das ist halt ein Trade-off.

01:54:22.400 --> 01:54:23.760
<v Jochen>Ja, genau.

01:54:25.040 --> 01:54:25.520
<v Jochen>Ja.

01:54:25.760 --> 01:54:28.560
<v Jochen>Ja, okay, aber Copilot Labs, okay, interessant.

01:54:30.000 --> 01:54:33.120
<v Dominik>Ja, jetzt haben wir, du hast noch einen Pick auch, Martin.

01:54:34.320 --> 01:54:37.840
<v Martin>Ja, ihr hattet ja eine Episode mal gemacht zu PyPy.

01:54:38.400 --> 01:54:40.000
<v Martin>Ziemlich cooles Tool übrigens.

01:54:41.840 --> 01:54:45.840
<v Martin>Und ich habe noch so eine Ergänzung dazu quasi.

01:54:45.840 --> 01:54:47.520
<v Martin>Das nennt sich Number.

01:54:47.520 --> 01:54:48.160
Ah ja, okay.

01:54:48.720 --> 01:54:51.760
<v Martin>Und das ist von den Entwicklern von Anaconda.

01:54:51.760 --> 01:54:55.600
<v Martin>Anaconda, das ist die quasi Python-Distribution.

01:54:55.600 --> 01:54:59.360
<v Martin>Und das finde ich auch richtig genial.

01:55:00.240 --> 01:55:04.880
<v Martin>Mein großer Wunsch war, ich schreibe oder mein großer Traum war, ich schreibe Python-Code.

01:55:04.880 --> 01:55:08.160
<v Martin>Dann drücke ich einen Knopf und der übersetzt mir das nach C.

01:55:08.640 --> 01:55:16.160
<v Martin>Und im Prinzip macht es das eigentlich fast ohne Code-Anpassung.

01:55:16.160 --> 01:55:32.480
<v Martin>Also alles, was ich da machen muss, ist, ich mache einen Decorator über meine Funktion drüber und muss ein bisschen aufpassen mit den Eingaben, also über die Funktion drüber, muss ein bisschen aufpassen mit den Eingabe und Ausgabedatentypen.

01:55:32.480 --> 01:55:34.240
<v Martin>Und dann ist es das.

01:55:34.560 --> 01:55:42.480
<v Martin>Aber erzeugt er mir quasi zur Laufzeit C-Code, cache die und führt die quasi mit C-Geschwindigkeit aus, die Funktion.

01:55:42.480 --> 01:55:45.520
<v Martin>Finde ich ab, habe ich probiert, funktioniert genial.

01:55:47.360 --> 01:55:51.040
<v Jochen>Ja, wo würdest du, hast du auch schon mal Seiten ausprobiert?

01:55:51.040 --> 01:55:55.680
<v Jochen>Weil das ist mal so, das, was so standardmäßig irgendwie auch bei CycitLearn oder so verwendet wird.

01:55:56.160 --> 01:56:09.120
<v Martin>Das Problem ist, wenn das Projekt hinreichend groß wird, dann habe ich, also ich habe ja bei Seiten und bei PyPy nicht so richtig die Wahl, dass ich jetzt nur einen bestimmten Teil meines Projektes damit habe.

01:56:09.200 --> 01:56:09.600
<v Martin>Doch, doch,

01:56:09.600 --> 01:56:10.800
<v Jochen>also Zeiten auf jeden Fall.

01:56:10.800 --> 01:56:11.360
<v Jochen>Also oder ich weiß nicht.

01:56:12.480 --> 01:56:21.280
<v Jochen>Zeiten ist einfach auch eine Art Python-Dialekt, wo man aber dann zum Beispiel, wenn man es schneller haben will, die Typen mit dazu schreibt, ist halt ein bisschen auch älter als C2-Annotation, deswegen.

01:56:21.360 --> 01:56:21.680
<v Jochen>Ja, ja,

01:56:21.680 --> 01:56:24.160
<v Martin>ich erinnere mich, aber da musst du einiges für tun.

01:56:24.160 --> 01:56:26.560
<v Martin>Also da musst du eigentlich den ganzen Code umstellen.

01:56:26.560 --> 01:56:27.440
<v Jochen>Nee, nee, nee, nee.

01:56:27.440 --> 01:56:29.200
<v Jochen>Das kannst du für einzelne Funktionen auch machen.

01:56:30.000 --> 01:56:33.120
<v Martin>Ja, ja, aber wenn die Funktion schon da ist, musst du sie umstellen.

01:56:33.280 --> 01:56:34.320
<v Jochen>Ja, das ist richtig.

01:56:34.320 --> 01:56:34.560
<v Jochen>Stimmt.

01:56:34.560 --> 01:56:36.000
<v Jochen>Und das musst du bei einer Nummer nicht unbedingt.

01:56:36.000 --> 01:56:36.320
Okay, ja.

01:56:36.400 --> 01:56:39.040
<v Martin>Und bei Nummer brauchst du das nicht, da kannst du das lassen.

01:56:39.040 --> 01:56:40.240
<v Martin>Eigentlich wie es ist.

01:56:40.240 --> 01:56:50.880
<v Martin>Klammer auf, abgesehen von den Eingabe- und Ausgabedatentypen, die müssen ein spezielles Format haben, aber da ist eigentlich, also wenn du eine NumPy-Matrix zum Beispiel hast, die kannst du mehr oder weniger so lassen.

01:56:50.880 --> 01:56:52.800
<v Martin>Und dann ist es das.

01:56:52.800 --> 01:56:55.280
<v Martin>Dekorator drüber, Funktionen sind C, fertig.

01:56:55.280 --> 01:56:57.440
<v Martin>Und ich kann sie von Python aus genauso rufen wie vorher.

01:56:57.440 --> 01:56:59.760
<v Martin>Und die ist halt einfach tausendmal schneller.

01:56:59.760 --> 01:57:00.320
<v Jochen>Ja.

01:57:00.880 --> 01:57:01.840
Ja, ja, ja, ja.

01:57:01.840 --> 01:57:04.160
<v Jochen>Nee, Nummer ist auch super, ja.

01:57:04.480 --> 01:57:05.040
<v Jochen>Ja.

01:57:05.360 --> 01:57:06.000
Cool.

01:57:06.480 --> 01:57:11.440
<v Dominik>Da wir jetzt halt bei den Speed waren, hat es eben auch noch erwähnt, das wollte ich jetzt nochmal an ins Ende packen, Polar IRS.

01:57:11.760 --> 01:57:13.200
<v Dominik>Ich glaube, das ist auch cool.

01:57:13.520 --> 01:57:15.840
<v Dominik>In dem Zusammenhang, wenn wir schon bei Speed wieder sind.

01:57:16.160 --> 01:57:21.120
<v Dominik>So als DataFrame-Tool für Rust und Python irgendwie noch kombiniert.

01:57:22.880 --> 01:57:23.760
Oh ja.

01:57:23.760 --> 01:57:24.240
Ja.

01:57:24.800 --> 01:57:25.440
<v Martin>Genau.

01:57:25.440 --> 01:57:29.600
<v Martin>Ja, vielleicht, ja, ich höre immer, Python ist langsam.

01:57:30.160 --> 01:57:30.720
Ja.

01:57:30.720 --> 01:57:34.480
<v Martin>Also bis jetzt lag es immer an mir und nicht an Python.

01:57:34.480 --> 01:57:34.960
<v Martin>Ja.

01:57:35.440 --> 01:57:40.080
<v Martin>Und wenn es an mir lag, dann hatte ich auch eine Chance, das zu beheben.

01:57:40.080 --> 01:57:45.760
<v Martin>Also da gibt es zum Beispiel den Line-Profiler für Python.

01:57:45.920 --> 01:57:47.840
<v Martin>Weiß nicht, ob ihr das kennt.

01:57:48.400 --> 01:57:50.560
<v Jochen>Ist das der Eingebaute, ne?

01:57:51.200 --> 01:57:52.880
<v Martin>Nee, ist nicht der Eingebaute.

01:57:52.880 --> 01:58:02.880
<v Martin>Also Line-Profiler macht im Prinzip folgendes: Du ist auch wieder ein Dekorator, den schreibst du über deine Funktion drüber und der annotiert dir an jede Quellcodezeile, wie schnell oder langsam die war.

01:58:02.880 --> 01:58:03.440
<v Martin>Ah, okay.

01:58:03.600 --> 01:58:10.080
<v Martin>Und dann kannst du quasi, also dann, also üblicherweise würde man das so verwenden, du findest erstmal die Funktion, die langsam ist.

01:58:10.080 --> 01:58:12.960
<v Martin>Das kannst du mit den klassischen Tools machen.

01:58:13.280 --> 01:58:20.400
<v Martin>Ja, also was man halt üblicherweise so nimmt, da springen ja hinten quasi die Funktionen raus, die langsam sind, wenn man es richtig bedient.

01:58:20.560 --> 01:58:27.200
<v Martin>Und dann gehst du quasi mit dem Line-Profiler in die Funktion rein und schaust dir an, was genau ist denn da langsam.

01:58:27.200 --> 01:58:32.800
<v Martin>Und so kommt man echt richtig schnell zu einer Performance-Analyse.

01:58:33.120 --> 01:58:37.200
<v Dominik>Kann das dann beheben oder dann irgendwie auch doch ein C oder miteinander Decorator versehen und so.

01:58:37.360 --> 01:58:40.320
<v Jochen>Hast du irgendeinen Lieblingsprofiler so für die globale Sicht?

01:58:40.320 --> 01:58:43.760
<v Jochen>Ich habe in letzter Zeit häufiger mal Skalinen verwendet, aber.

01:58:44.960 --> 01:58:46.560
<v Martin>Nö, da nehme ich den Python-Standard.

01:58:46.640 --> 01:58:47.360
<v Jochen>C-Profile, ja.

01:58:47.600 --> 01:58:48.880
<v Martin>C-Profile.

01:58:49.040 --> 01:58:49.600
<v Martin>Genau.

01:58:50.320 --> 01:58:52.960
<v Martin>Funktioniert, ist nicht schön, bedienbar, aber auch funktioniert.

01:58:53.120 --> 01:58:53.760
<v Jochen>Ja, funktioniert.

01:58:54.080 --> 01:58:56.560
<v Martin>So oft braucht man es ja auch zum Glück auch nicht.

01:58:56.560 --> 01:59:00.320
<v Martin>Also ich bin auch kein Freund von Pre-Major Optimization.

01:59:00.560 --> 01:59:04.320
<v Martin>Also ich optimiere dann, wenn ich wirklich feststelle, es ist langsam.

01:59:04.320 --> 01:59:07.520
<v Martin>Und für meinen Geschmack ist Python oft nicht langsam.

01:59:07.840 --> 01:59:12.720
<v Martin>Aber wenn es eben doch mal langsam ist, dann muss man mich an zu profilen und dann kriege ich das.

01:59:12.880 --> 01:59:15.520
<v Martin>Bis jetzt habe ich es immer weggekriegt, das Problem.

01:59:16.160 --> 01:59:17.280
<v Jochen>Ja, ne, klingt gut.

01:59:17.280 --> 01:59:20.160
<v Jochen>Ich habe das verlinke ich vielleicht auch nochmal.

01:59:20.320 --> 01:59:36.720
<v Jochen>Letztens einen ganz interessanten Artikel gelesen zum Thema Mythen, der von Performancem, und das ist halt ein, jetzt habe ich den Namen nicht parat, ein Spieleentwickler, der da halt auch schon langer, seit langer Zeit hat, der hat auch so einen YouTube-Channel, der irgendwie relativ beliebt ist.

01:59:38.080 --> 01:59:47.600
<v Jochen>Und der hat dann so einen Artikel geschrieben, wo er irgendwie so darüber rantet, was halt aus seiner Sicht die Leute immer sagen über Performance, was alles nicht stimmt.

01:59:47.600 --> 01:59:53.440
<v Jochen>Und da waren so, sind so ein paar interessante Sachen dabei, wo ich dachte, oh, das höre ich sehr oft, solche Sachen und das wahrscheinlich Quatsch.

01:59:53.440 --> 01:59:59.200
<v Jochen>Also wo er zum Beispiel sowas schreibt wie, naja, die Leute sagen immer, man muss eigentlich nur die Hotspots irgendwie optimieren.

01:59:59.200 --> 02:00:10.400
<v Jochen>Also du machst halt erstmal keine Performance-Geschichten, entwickelst ohne Performance im Hinterkopf zu haben, irgendwie eben keine Premature Optimization dein Code.

02:00:10.400 --> 02:00:17.200
<v Jochen>Und dann, wenn es langsam ist, dann guckst du halt, wo es langsam ist und dann optimierst du das weg und dann meint er so, ja, also das funktioniert ja auch manchmal, aber manchmal halt auch nicht.

02:00:17.200 --> 02:00:35.360
<v Jochen>Und gerade wenn du jetzt wirklich performance-kritische Sachen machst, dann kann es gut sein, dass dieser Ansatz überhaupt nicht funktioniert, weil du weil du halt sozusagen dann rauskriegst, wenn du anguckst, was ist denn die Teile deines Codes, die langsam sind, naja, dann ist er halt irgendwie Mem-Copy oder keine Ahnung, dann wird halt Hauptspeicher durch den Prozessor geschoben.

02:00:36.000 --> 02:00:36.880
Das willst du optimieren.

02:00:36.880 --> 02:00:38.640
<v Jochen>Das ist halt, da kannst du nichts mehr machen.

02:00:38.640 --> 02:00:41.760
<v Jochen>Und da musst du eigentlich wieder ans Design deiner Applikation strukturieren.

02:00:42.240 --> 02:00:47.600
<v Martin>Und wenn ich von vornherein weiß, dass das performance-kritisch ist, dann schreibe ich einen ganz anderen Code.

02:00:47.600 --> 02:00:54.880
<v Martin>Dann ist der Code komplett anders eigentlich, ja, also da kannst du vergessen, da musst du komplett das Design ändern.

02:00:55.040 --> 02:00:56.720
<v Jochen>Genau, und da meinte dann halt auch, dann kann es sein.

02:00:56.960 --> 02:00:58.080
<v Dominik>Du meinst so John Kamek?

02:00:58.400 --> 02:01:01.120
<v Jochen>Nee, nee, der hat irgendwie so einen italienisch klingenden Namen.

02:01:01.280 --> 02:01:03.200
<v Jochen>Ich hab jetzt, weil ich hab's nicht mehr ganz.

02:01:03.360 --> 02:01:04.320
Okay, I don't know.

02:01:05.200 --> 02:01:10.080
<v Jochen>Ja, der hängt halt davon, ob man performance-kritisch einen Kram macht oder nicht.

02:01:10.080 --> 02:01:11.520
<v Jochen>Und wenn man es nicht macht, dann muss man das nicht machen.

02:01:11.520 --> 02:01:20.960
<v Jochen>Aber wenn man, wenn man das hat und hat aber auf die falsche Art entwickelt und glaubt dann mit irgendwie Hotspots optimieren, da rauskommen zu können, dann meint er, so hat er schlechte Nachrichten.

02:01:20.960 --> 02:01:22.160
<v Jochen>Das kann gut sein, dass das nicht geht.

02:01:22.160 --> 02:01:27.760
<v Jochen>Und dass auch wenn man rausfinden möchte, jetzt, okay, was ist denn, wie muss ich denn die Architektur ändern?

02:01:27.760 --> 02:01:37.600
<v Jochen>Oder das Design, dann kann es sein, dass, wenn das ein Großgrußprojekt ist, das wird schlimmer als ein Rewrite, der dann, wo man im Hinterkopf hat, dass das besser auf eine Performance kritisch ist.

02:01:37.680 --> 02:01:41.200
<v Jochen>Und deswegen wird das in der Spielindustrie auch häufiger gemacht und es ist tatsächlich auch ab und zu erfolgreich.

02:01:41.200 --> 02:01:48.240
<v Jochen>In anderen Bereichen sollte man das vielleicht nicht machen, also aber da ist das halt wohl ab und zu irgendwie dann halt der beste Weg.

02:01:48.240 --> 02:01:51.840
<v Jochen>Und ja, tja, ja, das ist alles nicht so einfach.

02:01:52.560 --> 02:01:54.320
<v Dominik>Das ist gleich dein Schlusswort.

02:01:54.320 --> 02:01:55.520
<v Jochen>Ja, kann man immer sagen.

02:01:55.520 --> 02:01:59.040
<v Jochen>Hängt davon ab, kommt drauf an, das ist alles nicht so einfach.

02:02:00.960 --> 02:02:02.240
<v Dominik>Schönen Dank, dass wir dir zugehört haben.

02:02:02.240 --> 02:02:03.520
<v Dominik>Vielen Dank, Martin, dass du da warst.

02:02:03.520 --> 02:02:04.000
Ja, nee.

02:02:05.920 --> 02:02:06.960
Ja, was gemacht.

02:02:07.120 --> 02:02:08.240
<v Dominik>Schalt uns doch bald wieder rein.

02:02:08.240 --> 02:02:10.400
Hallo at pythonpodcast.de.

02:02:10.480 --> 02:02:11.360
Bis zum nächsten Mal.

02:02:11.360 --> 02:02:12.000
<v Dominik>Bis dann.

02:02:12.000 --> 02:02:12.240
Tschüss.

02:02:12.320 --> 02:02:13.280
Ciao, ciao.
