WEBVTT

00:00:00.000 --> 00:00:05.240
<v Dominik>Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 53 mit PyTest.

00:00:05.780 --> 00:00:06.200
<v Dominik>Hi Jochen.

00:00:06.560 --> 00:00:08.060
<v Jochen>Ja, hallo Dominik, willkommen.

00:00:08.740 --> 00:00:11.000
<v Dominik>Ja, mein Gast dabei, und zwar den Florian. Hey Florian.

00:00:11.260 --> 00:00:11.420
<v Dominik>Hallo.

00:00:11.840 --> 00:00:12.700
<v Dominik>Ja, hallo zusammen.

00:00:13.560 --> 00:00:16.280
<v Dominik>Ja, wir haben gehört, du machst ja öfter mal was mit PyTest und dann haben wir gedacht,

00:00:16.320 --> 00:00:18.960
<v Dominik>dann fragen wir dich doch einfach mal, ob du mich was darüber erzählen magst.

00:00:20.160 --> 00:00:22.920
<v Jochen>Genau. Ich weiß nicht, vielleicht magst du ja einfach mal so ein bisschen erzählen,

00:00:23.060 --> 00:00:28.520
<v Jochen>was du so tust oder irgendwie, warum PyTest da ein ganz gutes Thema wäre.

00:00:30.000 --> 00:00:31.700
<v Florian>Was ich so tue, ist schon eine Frage,

00:00:31.820 --> 00:00:33.580
<v Florian>da kann ich wahrscheinlich fünf Minuten dazu reden.

00:00:35.620 --> 00:00:40.840
<v Florian>Ich mache tatsächlich so fast Vollzeit Open Source.

00:00:42.300 --> 00:00:45.380
<v Florian>Und zwar kam das nicht vom PyTest ursprünglich,

00:00:45.380 --> 00:00:48.360
<v Florian>sondern von einem anderen Projekt von mir, von Qt Browser.

00:00:48.880 --> 00:00:51.520
<v Florian>Da kann ich vielleicht später noch mal mehr dazu sagen.

00:00:52.780 --> 00:00:54.940
<v Florian>Über das Projekt bin ich danach zu PyTest gekommen.

00:00:56.220 --> 00:00:58.340
<v Florian>Und was ich jetzt eigentlich mache,

00:00:59.160 --> 00:01:01.380
<v Florian>Zum einen, ich arbeite an QBrowser

00:01:01.380 --> 00:01:03.480
<v Florian>und PyTest, durch Spenden finanziert.

00:01:04.440 --> 00:01:05.200
<v Florian>Und zum anderen

00:01:05.200 --> 00:01:07.000
<v Florian>gebe ich im Herbst jeweils hier an der

00:01:07.000 --> 00:01:09.040
<v Florian>Fachhochschule Python-Unterricht

00:01:09.040 --> 00:01:10.500
<v Florian>für Erstsemester-Studierende.

00:01:11.300 --> 00:01:13.320
<v Florian>Also Bachelor-Informatik-Studierende.

00:01:14.100 --> 00:01:15.160
<v Florian>Also ja,

00:01:15.180 --> 00:01:16.340
<v Florian>ganz viel Open Source,

00:01:16.900 --> 00:01:18.840
<v Florian>ganz viel auch Freiheit,

00:01:19.140 --> 00:01:20.820
<v Florian>sag ich mal, wann ich was mache

00:01:20.820 --> 00:01:22.160
<v Florian>und eben auch viel PyTest.

00:01:23.140 --> 00:01:25.320
<v Jochen>Ja genau, du bist einer der PyTest-Maintainer

00:01:25.320 --> 00:01:25.700
<v Jochen>auch, ne?

00:01:27.480 --> 00:01:29.220
<v Florian>Genau. Das hat auch ganz lustig

00:01:29.220 --> 00:01:31.080
<v Florian>schon angefangen. Ich habe

00:01:31.080 --> 00:01:33.180
<v Florian>da halt eben durch Cube Browser

00:01:33.180 --> 00:01:34.880
<v Florian>durch dieses Projekt reingekommen,

00:01:35.120 --> 00:01:36.940
<v Florian>weil ich da Tests geschrieben hatte dafür.

00:01:37.520 --> 00:01:38.720
<v Florian>Damals noch mit

00:01:38.720 --> 00:01:41.020
<v Florian>Unitest Framework von Python, was mit

00:01:41.020 --> 00:01:41.740
<v Florian>Python mitkommt.

00:01:43.220 --> 00:01:45.160
<v Florian>Und da gab es dann

00:01:45.160 --> 00:01:47.140
<v Florian>so ein Adopt PyTest Month.

00:01:47.800 --> 00:01:49.320
<v Florian>April 15, glaube ich.

00:01:49.480 --> 00:01:49.800
<v Florian>So was.

00:01:51.840 --> 00:01:53.300
<v Florian>Also doch schon eine Weile her.

00:01:53.300 --> 00:01:54.140
<v Florian>Also ja.

00:01:55.040 --> 00:01:57.380
<v Florian>Wo dann Leute hinter PyTest

00:01:57.380 --> 00:01:59.440
<v Florian>anderen Open-Source-Maintainern,

00:01:59.580 --> 00:02:01.300
<v Florian>anderen Projekten geholfen haben,

00:02:01.400 --> 00:02:02.560
<v Florian>auf PyTest umzusteigen.

00:02:03.420 --> 00:02:05.320
<v Florian>Da habe ich eben mitgemacht mit Cube Browser

00:02:05.320 --> 00:02:07.760
<v Florian>und bin dann ziemlich schnell zu PyTest

00:02:07.760 --> 00:02:09.500
<v Florian>gekommen und habe angefangen, da

00:02:09.500 --> 00:02:11.560
<v Florian>Dinge zu verbessern, an Plugins

00:02:11.560 --> 00:02:12.820
<v Florian>Dinge zu implementieren,

00:02:13.720 --> 00:02:15.420
<v Florian>die ich halt haben wollte

00:02:15.420 --> 00:02:17.140
<v Florian>oder die mir aufgefallen sind.

00:02:18.120 --> 00:02:19.480
<v Florian>Und dann hieß es irgendwann, ja,

00:02:19.540 --> 00:02:21.280
<v Florian>willst du nicht das nächste Release machen?

00:02:21.280 --> 00:02:23.240
<v Florian>Und ich fand halt, ja, Moment mal,

00:02:23.320 --> 00:02:25.180
<v Florian>ich habe ja noch nicht mal irgendwie Commit-Rechte.

00:02:26.220 --> 00:02:28.280
<v Florian>Und wie es halt so läuft bei Open-Source-Seite,

00:02:28.440 --> 00:02:29.060
<v Florian>da habe ich sie eben.

00:02:30.820 --> 00:02:31.520
<v Florian>Ja, cool.

00:02:32.220 --> 00:02:32.720
<v Florian>Ja, das klingt gut.

00:02:33.360 --> 00:02:35.340
<v Dominik>Über die ganzen Sachen müssen wir gleich nochmal besonders reden,

00:02:35.440 --> 00:02:37.320
<v Dominik>auch über die Plugins und so, das klingt spannend.

00:02:38.200 --> 00:02:40.040
<v Dominik>Ich würde aber sagen, Jochen, wir fangen wie immer

00:02:40.040 --> 00:02:40.980
<v Dominik>einmal mit den News an.

00:02:41.140 --> 00:02:42.360
<v Dominik>News, okay, alles klar.

00:02:43.280 --> 00:02:45.220
<v Jochen>Ja, ist auch ein bisschen was wieder zusammengekommen,

00:02:45.340 --> 00:02:47.540
<v Jochen>weil jetzt die letzte Episode auch schon wieder ein bisschen was her ist.

00:02:48.760 --> 00:02:50.200
<v Jochen>Und genau, ja, was haben wir denn so?

00:02:51.460 --> 00:02:51.920
<v Jochen>Django 5.

00:02:52.140 --> 00:02:54.640
<v Jochen>Django 5 ist jetzt gerade letzte Woche rausgekommen.

00:02:54.800 --> 00:03:03.920
<v Jochen>Genau, das ist ja immer so, das kriege ich halt immer mit, weil ich muss dann immer alles umstellen, was mit Django im Einsatz und ja, war aber diesmal sehr entspanntes Update, hat alles gut funktioniert.

00:03:04.380 --> 00:03:05.120
<v Jochen>Ging gut, nicht wie Deprecated.

00:03:05.120 --> 00:03:33.400
<v Jochen>Ne, also was die Verbesserung angeht, es gibt ein tolles neues Ding, ein Bug, der seit 18 Jahren offen war, ein Issue, der seit 18 Jahren offen war, der jetzt geschlossen wurde, nämlich da ging es darum, dass er eigentlich blöd ist, wenn man bei einem Modelfield irgendwie Default angibt, dass das halt nur dann ausgefüllt wird, wenn man irgendwie eine Zeile über, also das Modell tatsächlich über Django baut und auch da ist es halt nicht immer so klar, dass das wirklich dann passiert,

00:03:33.400 --> 00:03:35.480
<v Jochen>weil es gibt ja auch noch Bulk Create und man kann

00:03:35.480 --> 00:03:37.440
<v Jochen>halt auf verschlungenen Wegen

00:03:37.440 --> 00:03:39.380
<v Jochen>irgendwie Dinge erzeugen in der Datenbank. Bulk Create

00:03:39.380 --> 00:03:40.620
<v Jochen>macht Defaults nicht rein?

00:03:41.240 --> 00:03:43.400
<v Jochen>Nicht unbedingt. Also es kann sein, dass wenn du das

00:03:43.400 --> 00:03:45.140
<v Jochen>jetzt einfach so verwendest, dass es dann klappt.

00:03:45.200 --> 00:03:47.400
<v Jochen>Das war mir tatsächlich neu. Aber wenn du das

00:03:47.400 --> 00:03:48.580
<v Jochen>halt irgendwie so ein bisschen

00:03:48.580 --> 00:03:51.280
<v Jochen>avancierter verwendest und

00:03:51.280 --> 00:03:53.360
<v Jochen>wirklich schnell sein willst und dann kann

00:03:53.360 --> 00:03:54.880
<v Jochen>es gut sein, dass das nicht passiert, weil

00:03:54.880 --> 00:03:57.260
<v Jochen>und das ist natürlich doof. Das hat

00:03:57.260 --> 00:03:59.340
<v Dominik>wahrscheinlich auch mit der Funktionalität zu tun, dass man jetzt

00:03:59.340 --> 00:04:01.400
<v Dominik>so Felder haben kann, die von anderen Feldern

00:04:01.400 --> 00:04:03.360
<v Dominik>abhängig sind und zwar direkt im Feld und ohne

00:04:03.360 --> 00:04:04.840
<v Dominik>das halt über die Save-Methode zu machen.

00:04:07.020 --> 00:04:07.340
<v Dominik>Ja,

00:04:07.480 --> 00:04:09.180
<v Jochen>nee, das weiß ich gar nicht, ob die direkt zusammenhängen,

00:04:09.220 --> 00:04:10.240
<v Jochen>das geht jetzt auch, genau.

00:04:11.060 --> 00:04:13.340
<v Dominik>Die Sarah hat einen tollen Blog-Antrag zugeschrieben, vielleicht kennst du den auch.

00:04:13.600 --> 00:04:15.140
<v Jochen>Ja, gibt's auch ein Video, hat sie dazu

00:04:15.140 --> 00:04:17.360
<v Jochen>gemacht, genau, die macht ja hier auch die

00:04:17.360 --> 00:04:19.160
<v Jochen>PyColon-Meetup-Gruppe,

00:04:19.580 --> 00:04:20.780
<v Jochen>organisiert sie mit.

00:04:21.880 --> 00:04:23.120
<v Jochen>Ja, genau,

00:04:23.280 --> 00:04:25.040
<v Jochen>also, was jetzt geht, ist halt, dass man

00:04:25.040 --> 00:04:27.240
<v Jochen>nicht sagt Default in einem Model-Field,

00:04:27.320 --> 00:04:28.220
<v Jochen>sondern db

00:04:28.220 --> 00:04:30.520
<v Jochen>underscore Default und dann

00:04:30.520 --> 00:04:33.100
<v Jochen>wird das halt nicht nur gesetzt, wenn man

00:04:33.100 --> 00:04:34.640
<v Jochen>halt irgendwie über Django das Ding

00:04:34.640 --> 00:04:37.200
<v Jochen>baut, sondern halt in die Datenbank

00:04:37.200 --> 00:04:38.940
<v Jochen>mit reingeschrieben, dass

00:04:38.940 --> 00:04:41.060
<v Jochen>das so ist. Und ja, das war

00:04:41.060 --> 00:04:42.980
<v Jochen>schon mal ziemlich großartig. Man kann es halt auch jetzt

00:04:42.980 --> 00:04:44.960
<v Jochen>sehen, welche Defaults es gibt, wenn man einfach

00:04:44.960 --> 00:04:46.940
<v Jochen>nur sich das Schema anguckt und nicht irgendwie

00:04:46.940 --> 00:04:49.100
<v Jochen>den Applikationscode dazu hat, was ja auch so ein Ding

00:04:49.100 --> 00:04:50.860
<v Jochen>ist, dass es halt blöd ist, wenn man

00:04:50.860 --> 00:04:52.680
<v Jochen>ein Datenbankschema hat, dass man nur verstehen kann, wenn man

00:04:52.680 --> 00:04:54.360
<v Jochen>einen Applikationscode auch dazu legt, weil

00:04:54.360 --> 00:04:56.740
<v Jochen>Applikationscode halt deutlich

00:04:56.740 --> 00:04:58.320
<v Jochen>volatiler ist oft als Datenbankschema.

00:04:59.220 --> 00:05:00.760
<v Jochen>Ja, aber also das ist jetzt

00:05:00.760 --> 00:05:02.640
<v Jochen>ziemlich cool und genau, so viele

00:05:02.640 --> 00:05:04.740
<v Jochen>haben, also ich habe immer verwendet sowas wie

00:05:04.740 --> 00:05:06.800
<v Jochen>Timestamp-Model aus den Django-Extensions

00:05:06.800 --> 00:05:09.320
<v Jochen>oder halt aus Django-Model-Utils,

00:05:09.560 --> 00:05:10.860
<v Jochen>um zum Beispiel sowas wie

00:05:10.860 --> 00:05:12.900
<v Jochen>Created-Zeitstempel oder

00:05:12.900 --> 00:05:14.860
<v Jochen>Modified-Updated dran zu bauen.

00:05:14.940 --> 00:05:16.960
<v Jochen>Das kann man ja jetzt halt auf eine deutlich elegantere Art machen.

00:05:17.860 --> 00:05:19.080
<v Jochen>Ja, dann genau

00:05:19.080 --> 00:05:20.700
<v Dominik>Generated-Field heißt das, glaube ich, ne? Einfach

00:05:20.700 --> 00:05:22.420
<v Dominik>Models, Generated-Field und dann...

00:05:22.420 --> 00:05:24.500
<v Jochen>Generated-Field ist jetzt diese andere Geschichte, genau.

00:05:25.100 --> 00:05:26.580
<v Jochen>Genau, da kann man dann halt auch so Dinge,

00:05:26.700 --> 00:05:28.560
<v Jochen>manchmal möchte man ja auch irgendwas

00:05:28.560 --> 00:05:30.640
<v Jochen>indizieren können, was halt irgendwie...

00:05:30.640 --> 00:05:32.540
<v Jochen>Ein Suchindex. Ja, was halt auf

00:05:32.540 --> 00:05:34.660
<v Jochen>irgendwas basiert, was halt berechnet wird aus

00:05:34.660 --> 00:05:36.860
<v Jochen>unterschiedlichen Spalten, die man halt in der Datenbank

00:05:36.860 --> 00:05:38.300
<v Jochen>hat und nicht direkt irgendwie

00:05:38.300 --> 00:05:40.800
<v Jochen>eine Spalte selber ist. Und das

00:05:40.800 --> 00:05:42.740
<v Jochen>geht jetzt halt auch relativ einfach.

00:05:43.780 --> 00:05:44.720
<v Jochen>Ja, dann gab es noch,

00:05:44.880 --> 00:05:46.820
<v Jochen>ich habe jetzt aber ganz ehrlich gesagt

00:05:46.820 --> 00:05:48.580
<v Jochen>vergessen, was es genau war. Es gab einige

00:05:48.580 --> 00:05:51.000
<v Jochen>Verbesserungen an den Formularen.

00:05:51.360 --> 00:05:52.720
<v Jochen>Also man kann jetzt

00:05:52.720 --> 00:05:54.740
<v Jochen>irgendwie Help-Text und

00:05:54.740 --> 00:05:56.920
<v Jochen>Label und Dinge irgendwie

00:05:56.920 --> 00:05:58.920
<v Jochen>einfacher benutzen. Wenn man

00:05:58.920 --> 00:06:00.880
<v Jochen>jetzt einzelne Felder als Fieldset einfach verwendet,

00:06:00.920 --> 00:06:02.260
<v Jochen>dann sind die automatisch, glaube ich, mit dabei.

00:06:02.540 --> 00:06:05.060
<v Dominik>Genau, das muss man vorher mal ganz umständlich auseinanderproben.

00:06:05.980 --> 00:06:09.360
<v Jochen>Und ja, ehrlich gesagt, mehr kann ich mich nicht erinnern.

00:06:10.580 --> 00:06:12.560
<v Jochen>Aber ja, es ist auf jeden Fall eine coole neue Release.

00:06:14.940 --> 00:06:17.960
<v Dominik>Du wolltest, wenn ich das richtig sehe, über diesen OpenAI...

00:06:17.960 --> 00:06:20.200
<v Jochen>Ich weiß nicht genau, ob euch das irgendwie tangiert

00:06:20.200 --> 00:06:24.040
<v Jochen>oder ob ihr das mitbekommen habt, ob ich das nur mitbekommen habe,

00:06:24.100 --> 00:06:26.160
<v Jochen>weil ich das halt zufällig irgendwie alle immer verfolge.

00:06:26.900 --> 00:06:29.460
<v Dominik>Erzähl doch erstmal, von was du da genau erzählen möchtest.

00:06:29.460 --> 00:06:34.300
<v Jochen>Naja, es gab ja so leichte irgendwie Schwankungen im Open-AI-Management.

00:06:34.380 --> 00:06:37.580
<v Dominik>Im Management, ja. Ich bin hier, ich bin doch nicht hier, ich bin wieder da, hurra.

00:06:38.340 --> 00:06:48.740
<v Jochen>Genau, und ja, was da so der Hintergrund ist, ich weiß es nicht, vielleicht ist es auch etwas, wo man eigentlich gar nichts zu sagen sollte, weil es ist halt ein bestimmter Unterhaltungswert und das kann man...

00:06:48.740 --> 00:06:53.720
<v Dominik>Ja, dann lass uns doch ein bisschen leichte Unterhaltung vorweg machen, weil man hört ja so ein paar Gerüchte.

00:06:54.160 --> 00:06:54.980
<v Dominik>Ja, was hast du denn gehört?

00:06:55.360 --> 00:06:57.580
<v Dominik>Ja, ich erzähl mal, ich bin erstmal gespannt, also man hört ja immer...

00:06:58.180 --> 00:07:00.680
<v Jochen>Ich habe ganz viel gehört, ich weiß es aber nicht.

00:07:00.680 --> 00:07:06.300
<v Jochen>Also ich würde denken, dass der Hauptgrund halt irgendwie darin besteht,

00:07:06.440 --> 00:07:08.560
<v Jochen>dass es halt diese komische Konstruktion gibt,

00:07:08.720 --> 00:07:12.760
<v Jochen>dass OpenAI ja eigentlich eine Non-Profit-Organisation ist

00:07:12.760 --> 00:07:16.240
<v Jochen>und die kontrolliert halt die kommerzielle Entität,

00:07:16.420 --> 00:07:18.140
<v Jochen>die halt nur deswegen gegründet worden ist,

00:07:18.280 --> 00:07:22.380
<v Jochen>weil man halt diese JetGPT-Geschichte auch als Produkt irgendwie rausbringen wollte

00:07:22.380 --> 00:07:25.780
<v Jochen>und dann gesagt hat, okay, das können wir nicht im Rahmen von diesem Non-Profit machen,

00:07:25.900 --> 00:07:27.620
<v Jochen>weil das wird einfach zu teuer.

00:07:28.180 --> 00:07:29.480
<v Jochen>Und wir müssen da irgendwie auch

00:07:29.480 --> 00:07:31.580
<v Jochen>Fremdkapital haben, um das halt irgendwie

00:07:31.580 --> 00:07:33.860
<v Jochen>alles brechen zu können

00:07:33.860 --> 00:07:35.600
<v Jochen>und so. Und ja,

00:07:35.700 --> 00:07:37.660
<v Jochen>im Vorfeld davon ist jetzt, der Name fällt mir

00:07:37.660 --> 00:07:38.560
<v Jochen>nicht mehr ein, der

00:07:38.560 --> 00:07:41.080
<v Jochen>Gründer von

00:07:41.080 --> 00:07:43.620
<v Jochen>Anthropic, also der Firma, die jetzt

00:07:43.620 --> 00:07:45.240
<v Jochen>auch Claude irgendwie gebaut hat.

00:07:45.680 --> 00:07:47.460
<v Jochen>Das ist also quasi ein ähnliches Ding wie JetGPG,

00:07:47.540 --> 00:07:49.540
<v Jochen>bloß halt sozusagen von einer

00:07:49.540 --> 00:07:51.440
<v Jochen>Firma. Der war vorher bei OpenAI

00:07:51.440 --> 00:07:53.260
<v Jochen>und der hat auch schon mal versucht,

00:07:53.460 --> 00:07:54.760
<v Jochen>Sam Oldman vom

00:07:54.760 --> 00:07:56.700
<v Jochen>Board feuern zu lassen.

00:07:57.460 --> 00:08:00.000
<v Jochen>Also der hat zuerst gesagt so, hey, das ist nicht okay, so geht das nicht.

00:08:00.280 --> 00:08:02.920
<v Jochen>Und wenn, das könnt ihr ja so nicht machen.

00:08:03.440 --> 00:08:04.580
<v Jochen>Und dann hieß es so, ach doch, geht doch.

00:08:04.680 --> 00:08:06.840
<v Jochen>Und dann hat er sich ans Board gewendet und gesagt,

00:08:06.940 --> 00:08:10.340
<v Jochen>feuert den CEO mal, das ist irgendwie nicht okay.

00:08:10.900 --> 00:08:13.800
<v Jochen>Und dann hat das Board drüber nachgedacht, dann haben sie gesagt, nee.

00:08:14.400 --> 00:08:15.540
<v Jochen>Und dann hat er gesagt, gut, dann gehe ich jetzt halt.

00:08:15.760 --> 00:08:17.900
<v Jochen>Und hat ein paar Leute mitgenommen und dann hat er eine neue Firma aufgemacht.

00:08:18.920 --> 00:08:20.780
<v Jochen>Und ja, aber das ist jetzt noch gar nicht so lange her.

00:08:20.780 --> 00:08:23.640
<v Jochen>Ich meine, da überschlagen sich natürlich so ein bisschen die Ereignisse irgendwie.

00:08:23.940 --> 00:08:25.740
<v Jochen>Aber das ist jetzt auch erst knapp über ein Jahr her.

00:08:26.680 --> 00:08:28.320
<v Jochen>Und ja, offenbar...

00:08:28.320 --> 00:08:30.900
<v Dominik>Ja, seitdem ist der Rest, die neuen Sachen sind alle ziemlich closed,

00:08:31.020 --> 00:08:32.460
<v Dominik>wenn man so ein bisschen genauer hinguckt.

00:08:32.980 --> 00:08:35.640
<v Jochen>Ja, das ist natürlich immer so ein bisschen, also OpenAI,

00:08:35.880 --> 00:08:37.620
<v Jochen>ich meine, der Name ist so ein bisschen...

00:08:37.620 --> 00:08:40.880
<v Dominik>Ja, die Proprietäre und so, genau.

00:08:41.360 --> 00:08:43.280
<v Jochen>Ja, und natürlich ist halt auch die Frage...

00:08:43.280 --> 00:08:45.280
<v Dominik>Die Papers sind geschlossen, da sind nur noch Zusammenfassungen drin

00:08:45.280 --> 00:08:47.500
<v Dominik>und keine richtig guten Erkenntnisse mehr und so.

00:08:47.640 --> 00:08:49.400
<v Jochen>Ja, ja, das sind nur noch so Technical Reports.

00:08:50.380 --> 00:08:54.300
<v Jochen>Und natürlich, also OpenAI macht keine Open-Source-Modelle oder sowas.

00:08:54.560 --> 00:08:55.800
<v Jochen>Die haben überhaupt nie irgendwas released.

00:08:56.680 --> 00:09:00.060
<v Jochen>Und eigentlich ist ja die Mission von dem Non-Profit sozusagen

00:09:00.060 --> 00:09:03.300
<v Jochen>der Allgemeinheit irgendwie zu nutzen.

00:09:04.140 --> 00:09:06.120
<v Dominik>Ja, wäre mal schön.

00:09:06.140 --> 00:09:08.420
<v Jochen>Und dann ist halt die Frage, wie lässt sich das vereinbaren?

00:09:08.540 --> 00:09:12.140
<v Jochen>Wenn man auf der einen Seite halt irgendwie jede Menge Risikokapital nimmt

00:09:12.140 --> 00:09:14.920
<v Jochen>und irgendwie dann Produkte baut und dann Geld dafür einnimmt

00:09:14.920 --> 00:09:19.760
<v Jochen>und sich im Grunde in Konkurrenz sieht mit den großen Tech-Giganten

00:09:19.760 --> 00:09:22.760
<v Jochen>und halt auch ja von einem von denen halt ja massiv finanziert wird.

00:09:23.040 --> 00:09:26.080
<v Jochen>Irgendwie, ich weiß nicht, Microsoft hat da irgendwie eine Milliarde reingesteckt oder so.

00:09:26.680 --> 00:09:31.940
<v Jochen>Und halt auch eine Bewertung hat inzwischen von, weiß ich nicht, 80 Milliarden oder irgendwie ganz unglaubliche Beträge.

00:09:33.020 --> 00:09:38.480
<v Jochen>Und dann halt auch nichts mehr in der Richtung tut, was halt die Mission eigentlich vorgibt.

00:09:38.600 --> 00:09:43.560
<v Jochen>Dann kann ich mir schon vorstellen, dass das Spannung macht und dass die Leute dann halt auch irgendwann sagen, so jetzt reicht es aber.

00:09:44.020 --> 00:09:47.920
<v Dominik>Also das, was ich so unter der Hand höre, ist natürlich Bullshit, wissen wir alle.

00:09:48.060 --> 00:09:50.880
<v Dominik>Aber Q-Star haben sie gefragt und hat gesagt, vorher, ihn schmeißen raus.

00:09:51.700 --> 00:09:52.060
<v Dominik>Bitte?

00:09:52.060 --> 00:09:56.340
<v Dominik>Sie haben Q-Star gefragt und Q-Star hat gesagt, schmeißen raus.

00:09:56.680 --> 00:09:58.020
<v Dominik>Das ist die nächste Witz.

00:09:58.020 --> 00:09:58.260
<v Dominik>Achso.

00:09:59.940 --> 00:10:01.440
<v Dominik>Ja, das kann natürlich, ja.

00:10:02.120 --> 00:10:03.300
<v Dominik>Ja, ich weiß auch nicht.

00:10:03.580 --> 00:10:04.200
<v Dominik>Also, ja.

00:10:05.100 --> 00:10:08.120
<v Jochen>Ja, dann gab es ja auch diese ganzen komischen Lobby-Aktivitäten.

00:10:08.340 --> 00:10:12.420
<v Jochen>Irgendwie jetzt auch was AI-Act, was sich nicht in Europa angeht und so.

00:10:12.540 --> 00:10:13.700
<v Jochen>Wo man ja auch sagen muss, mhm.

00:10:13.900 --> 00:10:17.340
<v Dominik>Wir sind für eine AI-Regulierung, sagte der Minister.

00:10:17.600 --> 00:10:19.420
<v Jochen>Nein, nein, ich meine, Regulierung ist ja vielleicht gar nicht so schlecht.

00:10:19.540 --> 00:10:22.200
<v Jochen>Aber sozusagen die Konkurrenz von OpenAI zu regulieren,

00:10:22.260 --> 00:10:24.240
<v Jochen>sodass man die Regulierung um Erlaubnis fragen muss,

00:10:24.240 --> 00:10:25.560
<v Jochen>bevor man da irgendwas machen darf, ist vielleicht.

00:10:26.560 --> 00:10:37.020
<v Jochen>Also ich bin, das ist schon wieder ein ganz neues Fass, das Fass will man vielleicht nicht aufmachen, aber dass man das regulieren will, dass Leute da nicht zu Schaden kommen, das kann ich durchaus nachvollziehen.

00:10:37.420 --> 00:10:38.160
<v Jochen>Ja und nein.

00:10:39.360 --> 00:10:42.220
<v Jochen>Ja, also ich finde das ist, aber das ist ja, da kann man wenig gegen sagen.

00:10:42.700 --> 00:10:44.220
<v Dominik>Nein, nein, der Wunsch ist richtig, würde ich sagen.

00:10:44.220 --> 00:10:53.320
<v Jochen>Ja, also, aber dass man jetzt die Technik selber reguliert, das finde ich halt komisch, weil das ist halt irgendwie, und ja, da gab es halt diverse Lobbybestrebungen.

00:10:53.320 --> 00:10:54.920
<v Dominik>Ja, die Frage ist halt, wie das halt überhaupt geht,

00:10:55.100 --> 00:10:56.720
<v Dominik>ohne dass man jetzt den Stecker zieht oder so.

00:10:58.240 --> 00:10:59.380
<v Dominik>Naja, jedenfalls ist es

00:10:59.380 --> 00:11:01.100
<v Jochen>ja jetzt auch nicht so gekommen. Es ist jetzt die

00:11:01.100 --> 00:11:03.240
<v Jochen>Richtlinie, das ist ja noch nicht

00:11:03.240 --> 00:11:05.220
<v Jochen>unter Dach und Fach,

00:11:05.360 --> 00:11:07.660
<v Jochen>es ist ja bloß irgendwie sozusagen, es gibt ein Verhaltensergebnis,

00:11:08.320 --> 00:11:09.380
<v Jochen>auch irgendwie seit letzter Woche

00:11:09.380 --> 00:11:11.020
<v Jochen>oder sowas, das sagt ja auch im Grunde, ja,

00:11:11.380 --> 00:11:13.280
<v Jochen>im Wesentlichen, wir regulieren

00:11:13.280 --> 00:11:15.320
<v Jochen>halt die Anwendung, aber nicht die Technik selber.

00:11:15.700 --> 00:11:17.160
<v Jochen>Ja, Transparenz regeln wir halt ganz gut,

00:11:17.160 --> 00:11:18.540
<v Jochen>nach dem Motto, du musst das Modell halt irgendwie

00:11:18.540 --> 00:11:20.860
<v Jochen>veröffentlichen. Ja, Open Source ist halt explizit ausgenommen.

00:11:21.020 --> 00:11:21.920
<v Jochen>Das ist halt schon mal großartig.

00:11:23.120 --> 00:11:25.060
<v Jochen>Was halt bedeutet, okay, wenn ich jetzt hingehen will

00:11:25.060 --> 00:11:26.860
<v Jochen>und sage, okay, ich mache hier meine eigene

00:11:26.860 --> 00:11:28.960
<v Jochen>Suchmaschine oder so auf

00:11:28.960 --> 00:11:30.880
<v Jochen>internen Dokumenten, die halt irgendwie besser

00:11:30.880 --> 00:11:33.140
<v Jochen>funktionieren soll, dann muss

00:11:33.140 --> 00:11:35.000
<v Jochen>ich nicht OpenAI fragen, sondern dann kann

00:11:35.000 --> 00:11:36.720
<v Jochen>ich das halt irgendwie selber machen, kann ich mir ein Lama

00:11:36.720 --> 00:11:37.700
<v Jochen>feintunen oder was auch immer,

00:11:38.960 --> 00:11:40.780
<v Jochen>und kann das halt einfach machen.

00:11:41.240 --> 00:11:43.180
<v Jochen>Und es ist nicht verboten, einfach so.

00:11:44.160 --> 00:11:44.960
<v Jochen>Ja, also

00:11:44.960 --> 00:11:46.860
<v Jochen>genau, also schon mal, also

00:11:46.860 --> 00:11:48.560
<v Jochen>im Grunde ist eigentlich alles halbwegs okay.

00:11:49.080 --> 00:11:50.860
<v Jochen>Und Sam Altman ist ja auch wieder zurück

00:11:50.860 --> 00:11:52.120
<v Jochen>zu OpenAI, heißt ja auch wieder alles okay.

00:11:53.120 --> 00:12:05.780
<v Jochen>Und ich glaube, das mit dem Nutzen für die Gesellschaft, das kriegen sie bestimmt auch noch hin. Ich glaube nicht, dass ihnen da das Geld zu Kopf steigt oder dass irgendwas dran machen kann, wenn da jemand eine Milliarde investiert.

00:12:05.780 --> 00:12:06.880
<v Jochen>Nein, nein, nein, das ist überhaupt gar keine Gefahr.

00:12:06.900 --> 00:12:08.960
<v Jochen>Das ist, glaube ich, kein Problem für die.

00:12:09.060 --> 00:12:12.840
<v Dominik>Nein, niemals. Warum sollte denn niemals sich jemand korrumpieren lassen?

00:12:13.180 --> 00:12:14.500
<v Dominik>Ja, also, nee, nee.

00:12:15.560 --> 00:12:15.740
<v Dominik>Ja.

00:12:16.860 --> 00:12:17.220
<v Dominik>Ja.

00:12:17.980 --> 00:12:19.280
<v Dominik>Und ich meine, das Board

00:12:19.280 --> 00:12:21.280
<v Jochen>hat ja schon gezeigt, dass sie da irgendwie absolut in der Lage

00:12:21.280 --> 00:12:23.140
<v Jochen>sind, auch das zu kontrollieren und durchzusetzen,

00:12:23.240 --> 00:12:24.840
<v Jochen>wenn sie finden, dass das nicht okay ist.

00:12:28.420 --> 00:12:29.180
<v Jochen>Daher, ich habe da

00:12:29.180 --> 00:12:30.040
<v Jochen>überhaupt gar keine Bedingungen.

00:12:31.020 --> 00:12:32.580
<v Jochen>Also das war sozusagen die

00:12:32.580 --> 00:12:34.960
<v Dominik>leichte Unterhaltung zum Thema.

00:12:35.280 --> 00:12:37.120
<v Dominik>Kurz vor Weihnachten noch mal ein bisschen Advent.

00:12:37.680 --> 00:12:37.940
<v Dominik>Ja.

00:12:39.600 --> 00:12:41.160
<v Dominik>Advent of God und was kann man auch wieder spielen?

00:12:43.080 --> 00:12:44.440
<v Dominik>Ja, genau. Was hatten wir noch?

00:12:45.700 --> 00:12:46.060
<v Dominik>News.

00:12:46.720 --> 00:12:47.940
<v Dominik>Du hast noch eine wichtige News.

00:12:47.980 --> 00:12:50.140
<v Jochen>für Python.

00:12:51.500 --> 00:12:53.480
<v Jochen>Gil Removal. Genau, Gil Removal

00:12:53.480 --> 00:12:54.380
<v Jochen>ist beschlossene Sache.

00:12:55.260 --> 00:12:57.180
<v Jochen>Wer sich dafür interessiert, es gibt da einen schönen, es gibt einen neuen

00:12:57.180 --> 00:12:59.380
<v Jochen>Podcast, weiß auch nicht, ob wir den schon erwähnt

00:12:59.380 --> 00:13:01.160
<v Jochen>hatten. CorpyY heißt der,

00:13:01.340 --> 00:13:03.340
<v Jochen>ist irgendwie von Lukas Langer

00:13:03.340 --> 00:13:03.780
<v Jochen>und

00:13:03.780 --> 00:13:07.280
<v Jochen>Pablo Galindo Salgado

00:13:07.280 --> 00:13:09.100
<v Jochen>irgendwie den

00:13:09.100 --> 00:13:10.820
<v Jochen>Release-Managern für die letzten

00:13:10.820 --> 00:13:12.060
<v Jochen>Python-Versionen.

00:13:13.120 --> 00:13:15.180
<v Jochen>Die machen

00:13:15.180 --> 00:13:16.840
<v Jochen>den und reden halt über so

00:13:16.840 --> 00:13:18.500
<v Jochen>C-Python-interner

00:13:18.500 --> 00:13:20.640
<v Jochen>Geschichten. Zum Beispiel war das

00:13:20.640 --> 00:13:21.860
<v Jochen>die erste Episode war über

00:13:21.860 --> 00:13:24.920
<v Jochen>den C-Python-Core-Dev-Sprint

00:13:24.920 --> 00:13:26.800
<v Jochen>oder halt andere Themen

00:13:26.800 --> 00:13:28.160
<v Jochen>wie zum Beispiel jetzt, dass es dann

00:13:28.160 --> 00:13:30.660
<v Jochen>einen Just-in-Time-Compiler irgendwie für

00:13:30.660 --> 00:13:32.640
<v Jochen>3.13 wohl geben soll und

00:13:32.640 --> 00:13:34.600
<v Jochen>solche Dinge. Und da gab es

00:13:34.600 --> 00:13:35.760
<v Jochen>jetzt auch eine Episode über

00:13:35.760 --> 00:13:38.440
<v Jochen>das Entfernen von Gil, was halt

00:13:38.440 --> 00:13:40.500
<v Jochen>eine komplizierte Geschichte ist und viel Arbeit wird.

00:13:40.620 --> 00:13:42.600
<v Jochen>Aber ja, jetzt wird das Ganze wohl angegangen

00:13:42.600 --> 00:13:44.900
<v Jochen>und bin gespannt.

00:13:45.820 --> 00:13:49.020
<v Florian>Ich fand die Tagline ganz lustig vom Podcast.

00:13:50.080 --> 00:13:53.000
<v Florian>One talks like a Mexican, the other like a Russian.

00:13:53.320 --> 00:13:54.500
<v Florian>Both hate the comparison.

00:13:55.600 --> 00:13:56.520
<v Florian>Das hat mir gar nicht aufgefallen.

00:13:56.620 --> 00:13:57.380
<v Florian>Aber ja, stimmt, das ist gut.

00:14:01.300 --> 00:14:03.200
<v Dominik>War das Cinder X, das ist die letzte Folge?

00:14:04.500 --> 00:14:06.380
<v Jochen>Die letzte habe ich, glaube ich, noch nicht gehört, ja.

00:14:06.920 --> 00:14:10.180
<v Jochen>Da haben sie, haben sie denn nicht mit Karl Mayer geredet?

00:14:10.640 --> 00:14:12.520
<v Jochen>Karl Mayer, ganz interessanter Typ.

00:14:12.540 --> 00:14:13.040
<v Jochen>Von Meta?

00:14:13.280 --> 00:14:15.080
<v Jochen>Ja, genau, der hat, ja, Meta, aber

00:14:15.080 --> 00:14:17.400
<v Jochen>der ist einer der Hauptentwickler

00:14:17.400 --> 00:14:20.640
<v Jochen>hinter dem Django-Python-

00:14:20.640 --> 00:14:21.220
<v Jochen>Kern von

00:14:21.220 --> 00:14:21.900
<v Jochen>Instagram.

00:14:23.080 --> 00:14:25.020
<v Jochen>Und da gab es mal eine sehr interessante

00:14:25.020 --> 00:14:27.400
<v Jochen>Episode, ich habe jetzt wieder vergessen, wo und wann,

00:14:27.540 --> 00:14:29.080
<v Jochen>aber wo er darüber geredet hat,

00:14:29.380 --> 00:14:31.260
<v Jochen>was man so für Probleme kriegt, wenn man halt

00:14:31.260 --> 00:14:33.300
<v Jochen>irgendwie mehr als, deutlich mehr

00:14:33.300 --> 00:14:34.980
<v Jochen>als eine Million Zeilen Python irgendwie hat,

00:14:35.520 --> 00:14:37.140
<v Jochen>und dann eine

00:14:37.140 --> 00:14:38.400
<v Jochen>Anwendung, die darauf basiert.

00:14:38.400 --> 00:14:40.520
<v Dominik>Ich glaube, den Artikel hatten wir auch schon das eine oder andere

00:14:40.520 --> 00:14:42.340
<v Dominik>Mal irgendwo in den Shownotes gelinkt, wenn ich mich recht erinnere.

00:14:42.720 --> 00:14:43.440
<v Dominik>Kann sein, ja.

00:14:44.320 --> 00:14:46.320
<v Jochen>Also genau, das kann man, also ja, ich habe es noch nicht gehört.

00:14:46.320 --> 00:14:47.680
<v Jochen>Das ist ein guter Podcast.

00:14:49.400 --> 00:14:51.000
<v Jochen>Ja, genau.

00:14:51.180 --> 00:14:55.320
<v Jochen>Und dann erinnere ich mich noch, letztes Jahr hatten wir darüber geredet,

00:14:56.060 --> 00:14:59.160
<v Jochen>dass es da so gewisse Sicherheitsschwankungen bei LastPass gab.

00:14:59.540 --> 00:14:59.780
<v Jochen>Ja.

00:15:00.080 --> 00:15:01.720
<v Jochen>Und da dachte ich, okay, muss ich diesmal auch.

00:15:01.920 --> 00:15:03.300
<v Jochen>Ich kann mich an den Januar und den Februar erinnern,

00:15:03.340 --> 00:15:04.780
<v Jochen>wo ich 1.000 Passwörter umstellen musste.

00:15:05.040 --> 00:15:05.280
<v Jochen>Das war super.

00:15:06.400 --> 00:15:09.320
<v Jochen>Wo ich dann gesagt habe, ja, okay, so prinzipiell ist OnePasswort

00:15:09.940 --> 00:15:11.240
<v Jochen>jetzt auch nicht so viel besser zum Beispiel.

00:15:11.240 --> 00:15:13.100
<v Jochen>also, aber

00:15:13.100 --> 00:15:15.080
<v Jochen>zum Glück sind sie noch nicht irgendwie

00:15:15.080 --> 00:15:16.700
<v Jochen>hops genommen worden. Ja, das hat sich jetzt geändert.

00:15:17.240 --> 00:15:18.920
<v Jochen>Jetzt ist auch OnePasswort hops genommen worden.

00:15:19.440 --> 00:15:20.540
<v Jochen>Und zwar über Okta.

00:15:20.900 --> 00:15:22.820
<v Jochen>Ich manchmal denke so, ok, Okta ist auch so ein,

00:15:23.100 --> 00:15:25.100
<v Jochen>ich verstehe nicht genau, warum Unternehmen sowas verwenden,

00:15:25.240 --> 00:15:26.880
<v Dominik>aber ok. Ja, ist ja total super.

00:15:27.080 --> 00:15:29.080
<v Dominik>SSO und so, muss man alles über so einen

00:15:29.080 --> 00:15:30.980
<v Dominik>Anbieter machen. Ist Okta nicht auch

00:15:30.980 --> 00:15:32.680
<v Dominik>hinter Zero aus? Ja,

00:15:33.100 --> 00:15:33.840
<v Dominik>aus Zero, ja.

00:15:35.340 --> 00:15:36.160
<v Dominik>Ja, da-dum.

00:15:37.460 --> 00:15:39.100
<v Jochen>Ja, also ich glaube, es war nicht

00:15:39.100 --> 00:15:40.660
<v Jochen>so ganz super schlimm, aber

00:15:40.660 --> 00:15:43.560
<v Jochen>dazu gab es auch ein Postmortem,

00:15:43.620 --> 00:15:45.380
<v Jochen>was wir veröffentlicht haben und das war einfach nur, wenn man sich das

00:15:45.380 --> 00:15:46.680
<v Jochen>anguckt, das war einfach nur total schrecklich.

00:15:47.820 --> 00:15:49.260
<v Jochen>Oh ja, wir versprechen euch,

00:15:49.300 --> 00:15:51.100
<v Dominik>es ist gar nichts geleakt worden und

00:15:51.100 --> 00:15:53.200
<v Dominik>es ist auch nichts kaputt gegangen. Es sind jetzt so ein paar

00:15:53.200 --> 00:15:54.280
<v Dominik>Dokumente verloren gegangen.

00:15:56.560 --> 00:15:57.580
<v Dominik>Zugriff auf die Datenbank

00:15:57.580 --> 00:15:58.040
<v Dominik>oder sowas.

00:16:00.020 --> 00:16:01.320
<v Dominik>Ja, ich habe auch keine gute Lösung

00:16:01.320 --> 00:16:02.860
<v Jochen>dafür. Ich weiß nicht, wenn es das, also das,

00:16:03.320 --> 00:16:04.860
<v Dominik>ja. Ich finde es schwierig tatsächlich.

00:16:04.860 --> 00:16:06.540
<v Dominik>Wir hatten ja letztes Jahr schon mal, ja, das Thema.

00:16:06.600 --> 00:16:08.620
<v Jochen>Ja, das Thema hatten wir schon mal. Es kommt irgendwie immer wieder.

00:16:09.020 --> 00:16:10.280
<v Jochen>Verrätst du, wie du das machst, Florian?

00:16:10.660 --> 00:16:11.500
<v Jochen>Passwörter?

00:16:12.440 --> 00:16:14.520
<v Florian>Ja, tatsächlich ganz langweilig

00:16:14.520 --> 00:16:15.320
<v Florian>lokal bisher.

00:16:15.800 --> 00:16:18.220
<v Florian>Mit KeyPassXC ist es

00:16:18.220 --> 00:16:19.760
<v Florian>glaube ich inzwischen.

00:16:19.960 --> 00:16:22.080
<v Florian>Ich bin da mal irgendwie gewechselt von einem

00:16:22.080 --> 00:16:22.800
<v Florian>Volk zum anderen.

00:16:23.980 --> 00:16:26.280
<v Florian>Das und dann so ein minimales

00:16:26.280 --> 00:16:27.920
<v Florian>Frontend darüber namens

00:16:27.920 --> 00:16:29.760
<v Florian>KeepMenu, was dann auf

00:16:29.760 --> 00:16:31.000
<v Florian>RoFi aufsetzt.

00:16:31.300 --> 00:16:33.480
<v Florian>Also so ein Keyboard-Menü.

00:16:35.580 --> 00:16:36.500
<v Florian>Und dann, ja,

00:16:36.620 --> 00:16:37.920
<v Florian>wenn ich mal irgendwie was

00:16:37.920 --> 00:16:40.140
<v Florian>brauche, was editieren muss

00:16:40.140 --> 00:16:42.220
<v Florian>oder so, mache ich halt dieses Keypass XC auf

00:16:42.220 --> 00:16:44.280
<v Florian>und sonst einfach alles mit Tastaturkürzel

00:16:44.280 --> 00:16:45.440
<v Florian>und Autotype.

00:16:45.840 --> 00:16:48.180
<v Dominik>Aber du kommst halt auch von dem Rechner nicht runter, ne? Und wenn der Rechner

00:16:48.180 --> 00:16:50.040
<v Dominik>irgendwie dein Backup ein Problem hat,

00:16:50.100 --> 00:16:51.440
<v Dominik>dann ist es blöd.

00:16:52.520 --> 00:16:54.020
<v Florian>Das ist so, ja. Ich habe

00:16:54.020 --> 00:16:56.020
<v Florian>tatsächlich dann teilweise das Problem, dass ich halt

00:16:56.020 --> 00:16:57.840
<v Florian>irgendwo am Handy mal irgendwo

00:16:57.840 --> 00:16:58.980
<v Florian>ein Passwort brauche oder so.

00:16:59.880 --> 00:17:01.980
<v Florian>Aber ich bin eh so der Mensch, der fast immer

00:17:01.980 --> 00:17:03.080
<v Florian>sein Laptop dabei hat.

00:17:04.060 --> 00:17:05.980
<v Florian>Zum einen, und was Backups angeht,

00:17:06.040 --> 00:17:08.020
<v Florian>habe ich das tatsächlich dann alles mal ausgedrückt

00:17:08.020 --> 00:17:10.320
<v Florian>in ein Bankschließfach

00:17:10.320 --> 00:17:11.480
<v Florian>gelegt.

00:17:11.500 --> 00:17:13.520
<v Florian>Das ist keine so schlechte Idee.

00:17:14.200 --> 00:17:15.500
<v Florian>Weil ich halt doch fand,

00:17:15.700 --> 00:17:18.240
<v Florian>wenn das weg ist, habe ich echt ein gröberes Problem.

00:17:20.240 --> 00:17:21.900
<v Jochen>Ja, also ich finde auch für mich

00:17:21.900 --> 00:17:23.480
<v Jochen>alleine oder so, da bin ich auch Keepers.

00:17:23.800 --> 00:17:25.860
<v Jochen>Das sah schon gut aus,

00:17:25.940 --> 00:17:27.620
<v Jochen>aber das Problem für mich ist halt auch

00:17:27.620 --> 00:17:29.500
<v Jochen>der Support von irgendwie so

00:17:29.500 --> 00:17:31.500
<v Jochen>Familie und Verwandten.

00:17:32.420 --> 00:17:33.760
<v Jochen>Das und Sharing und mal irgendwie

00:17:33.760 --> 00:17:34.980
<v Jochen>für jemanden was freischalten und so.

00:17:35.700 --> 00:17:37.640
<v Jochen>Und da habe ich bisher noch keine

00:17:37.640 --> 00:17:39.780
<v Jochen>gute Geschichte gefunden. Ja, ich finde also 2FA

00:17:39.780 --> 00:17:41.100
<v Jochen>tatsächlich gar nicht so schlecht.

00:17:41.520 --> 00:17:43.760
<v Dominik>Und dann halt immer irgendwie so ein Key mitnehmen,

00:17:44.080 --> 00:17:45.860
<v Dominik>wo ich halt auch, dann geht es halt nur zweimal oder so was

00:17:45.860 --> 00:17:47.000
<v Dominik>und einer ist dann halt im Bankschließfach

00:17:47.000 --> 00:17:49.400
<v Dominik>und den brauchst du halt dann und so.

00:17:49.540 --> 00:17:50.960
<v Dominik>Das ist auch gar nicht eine schlechte Idee, finde ich.

00:17:52.220 --> 00:17:53.780
<v Dominik>Ja, also. Was ich mir

00:17:53.780 --> 00:17:55.720
<v Florian>wahrscheinlich anschauen würde, wenn ich

00:17:55.720 --> 00:17:57.280
<v Florian>jetzt was will, was ein bisschen mehr

00:17:57.280 --> 00:17:58.920
<v Florian>Cloud dran hat, sag ich mal,

00:17:59.540 --> 00:18:00.660
<v Florian>Spitwarden.

00:18:01.820 --> 00:18:02.980
<v Florian>Weil das ist, glaube ich,

00:18:03.400 --> 00:18:05.520
<v Florian>größtenteils Open Source und es gibt, glaube ich,

00:18:05.520 --> 00:18:07.920
<v Florian>auch eine alternative Server-Implementation,

00:18:08.200 --> 00:18:09.700
<v Florian>die man dann irgendwie selber hosten kann.

00:18:09.960 --> 00:18:11.640
<v Dominik>Ja, also ich habe es mir angeguckt,

00:18:11.720 --> 00:18:13.600
<v Dominik>ich wollte auch erst als Umstände, ich habe damit angefangen

00:18:13.600 --> 00:18:15.540
<v Dominik>und ich weiß nicht, also ich

00:18:15.540 --> 00:18:17.600
<v Dominik>bin so ein Usability, ich möchte das immer

00:18:17.600 --> 00:18:19.540
<v Dominik>einfach und schnell und so haben und irgendwie nervt es

00:18:19.540 --> 00:18:21.640
<v Dominik>mich, kann sein, dass das technisch die sauberste

00:18:21.640 --> 00:18:23.640
<v Dominik>Lösung ist, aber ich fand es

00:18:23.640 --> 00:18:25.200
<v Dominik>irgendwie total anstrengend.

00:18:26.180 --> 00:18:27.200
<v Dominik>Ja. Naja.

00:18:27.360 --> 00:18:29.360
<v Jochen>Ja, okay, also vielleicht müssen wir einfach nächstes Jahr nochmal

00:18:29.360 --> 00:18:30.740
<v Jochen>drüber reden und gucken, was da passiert.

00:18:31.760 --> 00:18:33.560
<v Dominik>Also mir fällt aber auch nichts ein, was man irgendwie

00:18:33.560 --> 00:18:35.460
<v Dominik>so architektonisch hat, man muss, irgendeinen Tod muss man immer

00:18:35.460 --> 00:18:37.540
<v Dominik>sterben. Also zum Beispiel, wie teile ich

00:18:37.540 --> 00:18:39.480
<v Dominik>auch, jetzt hatten wir ja auch letztes Mal, glaube

00:18:39.480 --> 00:18:40.880
<v Dominik>ich, irgendwie Geheimnisse

00:18:40.880 --> 00:18:42.500
<v Dominik>durch Entwicklungsteams irgendwie.

00:18:43.500 --> 00:18:44.380
<v Dominik>Auch nicht so einfach.

00:18:46.500 --> 00:18:47.440
<v Dominik>Also ich benutze

00:18:47.440 --> 00:18:48.400
<v Dominik>jetzt tatsächlich so einen Service,

00:18:49.920 --> 00:18:51.360
<v Dominik>wo halt die Entwickler gar nicht mehr die

00:18:51.360 --> 00:18:52.360
<v Dominik>Geheimnisse kennen müssen,

00:18:53.240 --> 00:18:55.420
<v Dominik>die halt autogeneriert werden. Das heißt, ich kenne die selber nicht,

00:18:55.560 --> 00:18:57.300
<v Dominik>aber man muss sich halt mit der API dahin verbinden und dieser

00:18:57.300 --> 00:18:58.100
<v Dominik>Service kennt die halt alle.

00:19:00.220 --> 00:19:01.420
<v Dominik>Ist halt auch dann wieder irgendeine

00:19:01.420 --> 00:19:03.320
<v Dominik>Party, die dann halt Zugriff darauf hat, aber gut, dass

00:19:03.320 --> 00:19:05.360
<v Dominik>das jetzt nichts Kritisches und so und ja, gut.

00:19:06.060 --> 00:19:08.060
<v Dominik>Aber immerhin läuft der Rest dann so.

00:19:09.420 --> 00:19:09.680
<v Dominik>Naja.

00:19:09.880 --> 00:19:12.040
<v Jochen>Das ist schwierig. Okay, ja, ich weiß nicht, ansonsten

00:19:12.040 --> 00:19:13.600
<v Jochen>habe ich jetzt keine News mehr, glaube ich.

00:19:13.640 --> 00:19:15.540
<v Dominik>Vielleicht bräuchte man einfach ordentliche Tests für diese

00:19:15.540 --> 00:19:17.540
<v Dominik>wundervollen Passwort-Manager.

00:19:18.860 --> 00:19:19.100
<v Dominik>Tja.

00:19:21.360 --> 00:19:21.720
<v Dominik>Ja, also

00:19:21.720 --> 00:19:23.600
<v Dominik>die Überleitung war jetzt ein bisschen hakelig.

00:19:24.600 --> 00:19:25.660
<v Dominik>Vielleicht reden wir ja über das Thema,

00:19:25.780 --> 00:19:27.160
<v Dominik>dann haben wir heute nach News fertig.

00:19:27.160 --> 00:19:28.400
<v Dominik>Ja, genau. Und dann

00:19:28.400 --> 00:19:29.960
<v Jochen>können wir eigentlich mal hier

00:19:29.960 --> 00:19:32.940
<v Jochen>mit PyTest starten.

00:19:33.100 --> 00:19:35.220
<v Dominik>Ja, ich glaube, die meisten Menschen wissen, was PyTest

00:19:35.220 --> 00:19:36.880
<v Dominik>ist, also das Taste-Framework, was man

00:19:36.880 --> 00:19:39.040
<v Dominik>oft benutzt, wenn man Tests in Python

00:19:39.040 --> 00:19:41.060
<v Dominik>schreiben möchte. Würde ich auch empfehlen,

00:19:41.120 --> 00:19:43.040
<v Dominik>ehrlicherweise. Ihr wahrscheinlich

00:19:43.040 --> 00:19:43.480
<v Dominik>auch. Ich auch.

00:19:45.540 --> 00:19:46.020
<v Dominik>Alleinig.

00:19:46.840 --> 00:19:48.640
<v Dominik>Keine Überraschung soweit. Aber dann

00:19:48.640 --> 00:19:51.040
<v Dominik>überlasse ich einfach mal dem Florian vielleicht das Wort

00:19:51.040 --> 00:19:52.860
<v Dominik>und den Einstieg in das Thema

00:19:52.860 --> 00:19:53.500
<v Dominik>vielleicht auch.

00:19:54.580 --> 00:19:56.120
<v Dominik>Das erzählst du ja vielleicht auch öfter.

00:19:56.980 --> 00:19:58.640
<v Dominik>Also ich fand auf jeden Fall den Vortrag, den

00:19:58.640 --> 00:20:00.860
<v Dominik>auf der letzten EuroPython darüber gehalten hat, schon ziemlich gut.

00:20:01.820 --> 00:20:02.360
<v Dominik>Der war spannend.

00:20:04.460 --> 00:20:04.960
<v Dominik>Erzähl

00:20:04.960 --> 00:20:07.140
<v Florian>ich tatsächlich öfter, weil ich ja auch Firmenkurse

00:20:07.140 --> 00:20:08.040
<v Florian>mache zu PyTest.

00:20:08.660 --> 00:20:10.920
<v Florian>Das wären so die Einzelfirmaschinen, die ich

00:20:10.920 --> 00:20:12.840
<v Florian>eben neben den Open-Source-Dingen noch fahre.

00:20:14.200 --> 00:20:14.940
<v Florian>Und da

00:20:14.940 --> 00:20:16.880
<v Florian>mache ich halt auch erstmal ein bisschen Werbung für

00:20:16.880 --> 00:20:19.160
<v Florian>PyTest. Gerade früher

00:20:19.160 --> 00:20:20.880
<v Florian>war das vielleicht noch ein bisschen wichtiger, weil

00:20:20.880 --> 00:20:22.960
<v Florian>da gab es oft echt noch Firmen,

00:20:23.080 --> 00:20:24.980
<v Florian>die umgestiegen sind von Unitest

00:20:24.980 --> 00:20:26.880
<v Florian>oder von Nose, ein anderes

00:20:26.880 --> 00:20:27.700
<v Florian>Test-Framework.

00:20:28.940 --> 00:20:30.760
<v Florian>Inzwischen muss man sagen, dass

00:20:30.760 --> 00:20:33.020
<v Florian>wirklich so das Default eigentlich PyTest ist.

00:20:33.160 --> 00:20:34.720
<v Dominik>Also Nose-Test ist sogar deprecated, oder?

00:20:34.960 --> 00:20:36.240
<v Dominik>Nose, ja, ja.

00:20:36.240 --> 00:20:37.660
<v Dominik>Nose-Test gibt es auch noch.

00:20:37.660 --> 00:20:39.100
<v Dominik>Ah, Nose-Test, ja, Nose-Test.

00:20:39.800 --> 00:20:40.660
<v Dominik>Da habe ich falsch verstanden.

00:20:41.460 --> 00:20:44.180
<v Florian>Da stand schon seit Jahren, steht in der Dokumentation,

00:20:44.280 --> 00:20:45.540
<v Florian>man soll bitte kein Nose

00:20:45.540 --> 00:20:47.800
<v Florian>verwenden. Es gibt irgendwie

00:20:47.800 --> 00:20:49.640
<v Florian>ein Nose 2, aber ich habe noch kein

00:20:49.640 --> 00:20:51.720
<v Florian>Projekt gefunden, was das nutzt so effektiv.

00:20:53.100 --> 00:20:53.800
<v Florian>Und wenn man

00:20:53.800 --> 00:20:55.860
<v Florian>sich halt dann so anschaut,

00:20:56.000 --> 00:20:57.820
<v Florian>wie die Userzahlen so ausschauen,

00:20:58.120 --> 00:20:59.720
<v Florian>es gibt jeweils jährlich so eine

00:20:59.720 --> 00:21:01.640
<v Florian>Umfrage, die Python Developer

00:21:01.640 --> 00:21:03.260
<v Florian>Survey von

00:21:03.260 --> 00:21:05.340
<v Florian>der Python Software Foundation und

00:21:05.340 --> 00:21:06.020
<v Florian>JetBrains.

00:21:07.380 --> 00:21:09.200
<v Florian>Und da hat PyTest,

00:21:09.300 --> 00:21:11.300
<v Florian>ich glaube, vorletztes Jahr oder so,

00:21:11.480 --> 00:21:12.920
<v Florian>die 50%-Marke

00:21:12.920 --> 00:21:14.480
<v Florian>geknackt.

00:21:15.160 --> 00:21:16.820
<v Florian>Ich hätte sogar mehr geschätzt.

00:21:18.140 --> 00:21:19.000
<v Florian>Ja, wobei

00:21:19.000 --> 00:21:20.940
<v Florian>irgendwie 30% halt sagen, sie nutzen

00:21:20.940 --> 00:21:22.260
<v Florian>gar kein Test-Framework.

00:21:23.120 --> 00:21:23.360
<v Florian>Okay.

00:21:26.460 --> 00:21:26.980
<v Florian>Also

00:21:26.980 --> 00:21:29.020
<v Dominik>würdet ihr denn Tests benutzen oder wann würdet ihr denn

00:21:29.020 --> 00:21:30.860
<v Dominik>Tests benutzen? Das ist vielleicht auch eine spannende Frage.

00:21:31.040 --> 00:21:33.060
<v Dominik>Oder wofür? Alles 100%

00:21:33.060 --> 00:21:34.700
<v Dominik>Covered, jeder

00:21:34.700 --> 00:21:36.920
<v Dominik>Commit, der die Coverage reduziert, wird

00:21:36.920 --> 00:21:39.280
<v Dominik>automatisch nicht durch den Commit durchgelassen

00:21:39.280 --> 00:21:39.520
<v Dominik>oder

00:21:39.520 --> 00:21:42.280
<v Dominik>gibt es da unterschiedliche Ansichten?

00:21:43.420 --> 00:21:45.220
<v Florian>Ich habe tatsächlich ein Projekt

00:21:45.220 --> 00:21:46.320
<v Florian>jetzt, wo ich das versuche,

00:21:47.520 --> 00:21:49.100
<v Florian>für das Modul,

00:21:49.180 --> 00:21:51.000
<v Florian>was ich eben an der Fachhochschule unterrichte,

00:21:51.460 --> 00:21:53.180
<v Florian>da habe ich pro Jahr irgendwo

00:21:53.180 --> 00:21:55.120
<v Florian>100 Studierende und das

00:21:55.120 --> 00:21:57.040
<v Florian>Modul heißt Automatisierung mit Python

00:21:57.040 --> 00:21:59.180
<v Florian>und ich habe dann eben halt

00:21:59.180 --> 00:22:01.060
<v Florian>auch meine Arbeit hinter dem Modul

00:22:01.060 --> 00:22:02.980
<v Florian>so ein bisschen automatisiert, zumindest so

00:22:02.980 --> 00:22:05.220
<v Florian>der langweilige Teil, also irgendwie

00:22:05.220 --> 00:22:07.360
<v Florian>Noten dann ausrechnen

00:22:07.360 --> 00:22:09.280
<v Florian>und E-Mails verschicken mit der Noten

00:22:09.280 --> 00:22:10.480
<v Florian>Aufschlüsselung und sowas.

00:22:11.680 --> 00:22:13.020
<v Florian>Und da bin ich jetzt

00:22:13.020 --> 00:22:15.160
<v Florian>dran, das alles ein bisschen zu refacturen

00:22:15.160 --> 00:22:16.980
<v Florian>und für den neuen Teil quasi,

00:22:17.080 --> 00:22:18.560
<v Florian>was refactured ist, auch wirklich

00:22:18.560 --> 00:22:20.600
<v Florian>100% Test Coverage zu haben.

00:22:21.320 --> 00:22:22.980
<v Florian>Weil ich halt finde, ja, ich berechne

00:22:22.980 --> 00:22:24.920
<v Florian>da irgendwie Zeugnisnoten und so, das

00:22:24.920 --> 00:22:26.000
<v Florian>muss halt schon irgendwie

00:22:26.000 --> 00:22:28.820
<v Florian>keine Box haben, idealerweise.

00:22:29.040 --> 00:22:30.720
<v Dominik>Also ich finde auch, also so kritische Teile der

00:22:30.720 --> 00:22:32.740
<v Dominik>Infrastruktur sind ganz gut, wenn man die testet.

00:22:32.840 --> 00:22:34.940
<v Dominik>Also sowas wie Authentifizierung, Autorisierung

00:22:34.940 --> 00:22:36.920
<v Dominik>oder sowas, sollte man schon irgendwo mal gucken,

00:22:37.540 --> 00:22:38.180
<v Dominik>dass das stimmt.

00:22:39.100 --> 00:22:40.240
<v Dominik>So die kritische Business-Logik.

00:22:41.180 --> 00:22:42.200
<v Dominik>Also weiß ich nicht, also jede

00:22:42.200 --> 00:22:44.520
<v Dominik>Einzeiler-Funktion, weiß ich jetzt nicht.

00:22:45.280 --> 00:22:46.500
<v Dominik>Ja, es gibt ja Leute, die

00:22:46.500 --> 00:22:48.440
<v Jochen>diesen Standpunkt vertreten und sagen, naja gut,

00:22:48.520 --> 00:22:49.880
<v Jochen>wenn man anfängt, über solche

00:22:49.880 --> 00:22:52.840
<v Jochen>Zahlen zu diskutieren, dann macht das eigentlich nur 100% Sinn.

00:22:54.080 --> 00:22:54.440
<v Jochen>Aber

00:22:54.440 --> 00:22:56.660
<v Jochen>ich weiß auch nicht, ob das jetzt optimal ist für alle.

00:22:56.980 --> 00:22:58.760
<v Jochen>Also ich habe es für ein Projekt

00:22:58.760 --> 00:23:00.760
<v Jochen>habe ich das auch gemacht, weil einfach ich das mal

00:23:00.760 --> 00:23:01.320
<v Jochen>machen wollte.

00:23:02.660 --> 00:23:04.720
<v Jochen>Ob das jetzt nötig wäre,

00:23:04.780 --> 00:23:05.280
<v Jochen>weiß ich nicht.

00:23:06.360 --> 00:23:08.540
<v Florian>Ja, es wird schon anstrengend, also gerade wenn man dann

00:23:08.540 --> 00:23:10.360
<v Florian>externe Komponenten drin hat,

00:23:11.600 --> 00:23:12.880
<v Florian>irgendwie, oder eine

00:23:12.880 --> 00:23:14.360
<v Florian>GUI-Applikation schreibt oder so,

00:23:14.460 --> 00:23:15.880
<v Florian>dann wird es schon schwierig irgendwann.

00:23:16.200 --> 00:23:18.520
<v Dominik>Ja genau, also welche Enden muss man danach testen, ne?

00:23:18.800 --> 00:23:20.340
<v Dominik>Also ich finde ja da tatsächlich auch

00:23:20.340 --> 00:23:22.680
<v Dominik>vielleicht jetzt direkt an dem Zeitpunkt

00:23:22.680 --> 00:23:24.620
<v Dominik>TDD ganz interessant, also dass man mit den Tests

00:23:24.620 --> 00:23:26.600
<v Dominik>anfängt, die zu schreiben. Es ist nicht immer

00:23:26.600 --> 00:23:28.740
<v Dominik>ganz einfach, weil man muss dann schon relativ genau

00:23:28.740 --> 00:23:30.760
<v Dominik>wissen, was man machen will. Und wenn man das nicht

00:23:30.760 --> 00:23:32.640
<v Dominik>weiß, dann baut man halt Tests, die man hinterher wieder

00:23:32.640 --> 00:23:34.800
<v Dominik>wegschmeißen kann, was dann die doppelte und dreifache

00:23:34.800 --> 00:23:36.760
<v Dominik>Arbeit macht. Aber wenn man

00:23:36.760 --> 00:23:38.740
<v Dominik>halt irgendwie schon ein gutes Konzept hat, dann erst

00:23:38.740 --> 00:23:40.480
<v Dominik>Tests dafür zu schreiben, wie das aussehen sollte

00:23:40.480 --> 00:23:42.660
<v Dominik>und dann die Implementierung. Das führt halt dazu,

00:23:42.720 --> 00:23:44.160
<v Dominik>dass die dann auch tatsächlich funktioniert, ja?

00:23:45.280 --> 00:23:46.740
<v Dominik>Wenn man sich so Gedanken dazu gemacht hat, wo

00:23:46.740 --> 00:23:48.600
<v Dominik>so die Haken und Stellen sind, die

00:23:48.600 --> 00:23:49.540
<v Dominik>ineinandergreifen sollen.

00:23:51.060 --> 00:23:51.220
<v Dominik>Ja.

00:23:52.560 --> 00:23:54.140
<v Dominik>Macht ihr das auch mal, manchmal?

00:23:55.400 --> 00:23:56.620
<v Dominik>Ich mach's ganz gerne

00:23:56.620 --> 00:23:58.460
<v Florian>bei Bugs, wenn ich halt irgendwann

00:23:58.460 --> 00:24:00.480
<v Florian>ein Bug-Report kriege, dass ich erstmal einen Test dafür

00:24:00.480 --> 00:24:02.700
<v Florian>schreibe. Zumindest so ab dem

00:24:02.700 --> 00:24:04.900
<v Florian>Punkt, wo ich das einmal manuell reproduziert

00:24:04.900 --> 00:24:06.620
<v Florian>habe. Weil

00:24:06.620 --> 00:24:08.640
<v Florian>wenn ich den Bug fixe, werde ich das

00:24:08.640 --> 00:24:10.660
<v Florian>eh schon ein paar Mal reproduzieren müssen

00:24:10.660 --> 00:24:12.520
<v Florian>und dann mache ich mir halt effektiv das Leben

00:24:12.520 --> 00:24:13.020
<v Florian>leichter.

00:24:14.300 --> 00:24:16.420
<v Dominik>Genau, also ich würde auch sagen, fix ist immer

00:24:16.420 --> 00:24:16.820
<v Dominik>ein Test.

00:24:18.500 --> 00:24:20.560
<v Florian>Genau, so bei einer Library kann ich es mir

00:24:20.560 --> 00:24:22.560
<v Florian>auch noch vorstellen. Und wenn es

00:24:22.560 --> 00:24:24.620
<v Florian>dann eher Richtung Applikation geht, finde

00:24:24.620 --> 00:24:26.520
<v Florian>ich, wird es schon schwieriger. Also gerade jetzt

00:24:26.520 --> 00:24:27.940
<v Florian>wieder bei einer GUI-Applikation,

00:24:29.000 --> 00:24:30.300
<v Florian>da muss ich das Feature irgendwie

00:24:30.300 --> 00:24:32.120
<v Florian>erstmal implementieren und erstmal sehen,

00:24:32.220 --> 00:24:34.020
<v Florian>wie das aussieht aus User-Sicht, aus

00:24:34.020 --> 00:24:35.740
<v Florian>Code-Sicht auch, bevor ich

00:24:35.740 --> 00:24:37.530
<v Florian>ja irgendwie sinnvoll Tests dafür schreiben kann,

00:24:37.610 --> 00:24:37.930
<v Florian>finde ich.

00:24:39.510 --> 00:24:41.470
<v Florian>Klingt sehr vernünftig, würde ich

00:24:41.470 --> 00:24:43.470
<v Jochen>ganz genau so sehen. Also ich mache auch

00:24:43.470 --> 00:24:45.130
<v Jochen>TDD manchmal, aber

00:24:45.130 --> 00:24:47.470
<v Jochen>gerade eben auch so bei Web-Applikationen

00:24:49.170 --> 00:24:49.710
<v Jochen>entwickle ich

00:24:49.710 --> 00:24:51.430
<v Jochen>oft, also oft ist es ja so, man fängt mit irgendwas

00:24:51.430 --> 00:24:53.230
<v Jochen>an oder mir geht das halt so und dann

00:24:53.230 --> 00:24:55.510
<v Jochen>denkt man sich irgendwann, ah nee, das ist einfach keine gute Idee

00:24:55.510 --> 00:24:57.290
<v Jochen>und ich mache das auch oft

00:24:57.290 --> 00:24:58.510
<v Jochen>in Notebooks am Anfang.

00:24:59.830 --> 00:25:01.290
<v Jochen>Einfach nur, um zu sehen, ob irgendwas geht

00:25:01.290 --> 00:25:03.410
<v Jochen>oder elegant geht und wenn es dann nicht geht, dann sage ich so

00:25:03.410 --> 00:25:05.370
<v Jochen>okay, pff, ne, dann mache ich doch

00:25:05.370 --> 00:25:06.870
<v Jochen>lieber was anderes. Und

00:25:06.870 --> 00:25:09.290
<v Jochen>wenn man da zuerst die Tests schreibt,

00:25:09.430 --> 00:25:10.770
<v Jochen>dann schmeißt man die Tests ja mit weg.

00:25:11.690 --> 00:25:13.370
<v Jochen>Ich habe dann mal, es gab auf

00:25:13.370 --> 00:25:15.010
<v Jochen>Twitter irgendwie einen Thread, wo dann

00:25:15.010 --> 00:25:17.410
<v Jochen>weiß ich nicht, Harry Percival,

00:25:17.510 --> 00:25:18.370
<v Jochen>der auch dieses

00:25:18.370 --> 00:25:20.730
<v Jochen>Obey the Testing Go, der

00:25:20.730 --> 00:25:22.910
<v Jochen>ein Testbuch geschrieben hat für Python,

00:25:23.030 --> 00:25:25.090
<v Jochen>meinte, dass Leute doch bitte mal

00:25:25.090 --> 00:25:27.270
<v Jochen>TDD verwenden sollen und sich mal ein Brief reißen

00:25:27.270 --> 00:25:29.150
<v Jochen>wollen. Dann werde ich so, ich mache das mal so.

00:25:29.530 --> 00:25:31.210
<v Jochen>Ich weiß nicht, ich habe so das Gefühl, wenn ich

00:25:31.210 --> 00:25:33.130
<v Jochen>zuerst die Tests schreibe, dann ist das eine totale Verschwendung, weil

00:25:33.130 --> 00:25:34.910
<v Jochen>wenn ich schmeiße, dann oft Sachen wieder weg.

00:25:35.370 --> 00:25:37.110
<v Jochen>warum sollte ich da Test-Sachen schreiben, nicht wieder?

00:25:37.510 --> 00:25:39.270
<v Jochen>Nee, nee, das ist ein Spike, das ist auch TDD,

00:25:39.370 --> 00:25:40.010
<v Jochen>das ist schon okay.

00:25:41.010 --> 00:25:43.310
<v Jochen>Na gut, ja, aber ja, also oft

00:25:43.310 --> 00:25:45.290
<v Jochen>muss man erst mal sehen, ob irgendwas so funktioniert,

00:25:45.390 --> 00:25:46.650
<v Jochen>wie man denkt und dann...

00:25:46.650 --> 00:25:49.010
<v Dominik>Wenn man zum Beispiel die Modelle jetzt noch nicht hat von so einem Problem,

00:25:49.130 --> 00:25:51.090
<v Dominik>oder die einfach definieren muss, also manchmal muss man ja irgendwie

00:25:51.090 --> 00:25:52.990
<v Dominik>Fixes schreiben dann erst mal, um zu gucken,

00:25:53.210 --> 00:25:55.250
<v Dominik>was denn überhaupt an Datenmodellen, wie die aussehen

00:25:55.250 --> 00:25:56.930
<v Jochen>sollen und so. Oft lasse ich die Modelle weg

00:25:56.930 --> 00:25:58.950
<v Jochen>und schreibe gar keine Modelle, sondern

00:25:58.950 --> 00:26:01.330
<v Jochen>ich schreibe erst mal so, um zu sehen,

00:26:01.410 --> 00:26:02.690
<v Jochen>ob das in der UI funktioniert.

00:26:03.630 --> 00:26:04.890
<v Jochen>Das wäre dann Integration-Test?

00:26:05.370 --> 00:26:08.290
<v Jochen>Wie gesagt, an der Stelle kann man noch nicht

00:26:08.290 --> 00:26:10.390
<v Jochen>so gut Text schreiben. Wenn ich mit Tests anfangen

00:26:10.390 --> 00:26:12.430
<v Jochen>würde, würde ich ja mit den Tests vielleicht für das Modell anfangen

00:26:12.430 --> 00:26:14.490
<v Jochen>oder so, aber wenn ich kein Modell habe, ist es halt ein bisschen...

00:26:14.490 --> 00:26:14.790
<v Jochen>Ja, okay.

00:26:16.290 --> 00:26:18.270
<v Florian>Ich will noch kurz nochmal beim Testing

00:26:18.270 --> 00:26:19.490
<v Florian>Goat anknüpfen.

00:26:20.290 --> 00:26:22.430
<v Florian>Da hat jemand letztens ganz einen lustigen

00:26:22.430 --> 00:26:24.230
<v Florian>Thread aufgemacht, wo er fand, ja,

00:26:24.290 --> 00:26:26.230
<v Florian>er hat mal ChatGPT gefragt, wo

00:26:26.230 --> 00:26:27.890
<v Florian>das PyTest-Logo herkommt

00:26:27.890 --> 00:26:30.230
<v Florian>und ChatGPT meinte dann,

00:26:30.310 --> 00:26:31.530
<v Florian>ja, ich hätte das designt.

00:26:32.470 --> 00:26:33.630
<v Florian>Ist Quatsch.

00:26:34.230 --> 00:26:35.310
<v Florian>Ist billiger Quatsch.

00:26:35.950 --> 00:26:38.010
<v Florian>Das Logo gibt es nämlich schon irgendwie seit

00:26:38.010 --> 00:26:40.270
<v Florian>2014 und ich bin ja erst ein Jahr später

00:26:40.270 --> 00:26:41.450
<v Florian>zu PyTest dazugekommen.

00:26:42.390 --> 00:26:44.150
<v Dominik>Also, ja, dpt lügt

00:26:44.150 --> 00:26:46.110
<v Dominik>bei Python regelmäßig. Das denkt zum Beispiel auch,

00:26:46.210 --> 00:26:47.970
<v Dominik>dass irgendwelche anderen Menschen den Python-Podcast machen

00:26:47.970 --> 00:26:49.890
<v Dominik>würden, die es noch nicht gehört haben. Aber hey.

00:26:51.470 --> 00:26:52.170
<v Dominik>Ja, ich

00:26:52.170 --> 00:26:53.910
<v Florian>habe dann tatsächlich mal rumgegraben

00:26:53.910 --> 00:26:56.010
<v Florian>in den Mailing-List-Archiven und

00:26:56.010 --> 00:26:58.110
<v Florian>rausgefunden, warum das so eine Pornflöte

00:26:58.110 --> 00:26:59.690
<v Florian>ist. Ach okay, das ist was anderes.

00:26:59.690 --> 00:27:01.610
<v Florian>Soll nämlich tatsächlich an diesem

00:27:01.610 --> 00:27:03.730
<v Florian>Testing-Goat als Maskottchen

00:27:03.730 --> 00:27:05.590
<v Florian>nachher auf diesem Buch anknüpfen,

00:27:05.930 --> 00:27:07.950
<v Florian>weil Pornflöten eben genutzt

00:27:07.950 --> 00:27:09.450
<v Florian>wurden wohl, um

00:27:09.450 --> 00:27:11.710
<v Florian>um Ziegen zu

00:27:11.710 --> 00:27:13.330
<v Florian>herden, wie sagt man

00:27:13.330 --> 00:27:14.490
<v Florian>in Deutsch?

00:27:15.330 --> 00:27:16.950
<v Florian>Zu hüten, ja, ja.

00:27:18.430 --> 00:27:18.870
<v Florian>Hm.

00:27:19.890 --> 00:27:20.130
<v Florian>Ja.

00:27:20.450 --> 00:27:23.630
<v Florian>Ich fand das mit dem Chat-Video dann ganz witzig.

00:27:23.630 --> 00:27:25.390
<v Florian>Ich hab danach noch mal so ein bisschen nachgehakt

00:27:25.390 --> 00:27:26.870
<v Florian>und find so, nö, das war nicht ich.

00:27:27.490 --> 00:27:29.430
<v Florian>Und dann meinst du, ja, nee, es tut mir leid,

00:27:29.570 --> 00:27:30.750
<v Florian>es war Armin Ronacher.

00:27:31.390 --> 00:27:31.710
<v Florian>Ach so.

00:27:33.730 --> 00:27:36.110
<v Florian>Und da fand ich halt auch, äh, nö.

00:27:36.790 --> 00:27:39.610
<v Florian>Und da meinte er irgendwas von einem Daniel Urstöger,

00:27:39.750 --> 00:27:41.510
<v Florian>auch bekannt als Blue Logo.

00:27:41.590 --> 00:27:43.830
<v Florian>Habe ich gesucht, nichts gefunden zu der Person

00:27:43.830 --> 00:27:45.650
<v Florian>und fand immer noch, nee, kann nicht sein.

00:27:46.430 --> 00:27:48.930
<v Florian>Und dann fand er immer noch, ja, tut mir wirklich leid und so.

00:27:49.070 --> 00:27:52.450
<v Florian>Das war von Daniel Haller gemacht, was halt auch nicht stimmt.

00:27:54.390 --> 00:27:57.050
<v Dominik>Ich habe gerade auch noch mal gefragt und mir sagt es,

00:27:57.230 --> 00:27:58.010
<v Dominik>dass es nicht genau weiß,

00:27:58.050 --> 00:28:00.290
<v Dominik>weil es von einem Community-Wettbewerb stammen würde.

00:28:02.650 --> 00:28:05.310
<v Florian>Ja, dann hast du wahrscheinlich dieses GPT-4-Modell.

00:28:05.690 --> 00:28:06.410
<v Florian>Nee, das ist 3.5.

00:28:06.410 --> 00:28:08.950
<v Florian>Das ist 3.5, okay, interessant.

00:28:09.410 --> 00:28:11.110
<v Dominik>Ja, das ist halt, weil er sich

00:28:11.110 --> 00:28:12.530
<v Dominik>manchmal auch sehr fantasiert halt.

00:28:12.930 --> 00:28:13.530
<v Dominik>Ja, gut.

00:28:15.590 --> 00:28:17.290
<v Dominik>Sicheres Auftreten bei vollkommener Ahnung

00:28:17.290 --> 00:28:19.390
<v Dominik>zu Bescheid. Jochen, was fällt dir dazu ein?

00:28:20.830 --> 00:28:21.750
<v Dominik>Dass mir auf jeden Fall

00:28:21.750 --> 00:28:23.510
<v Jochen>die Panfurter besser gefällt als ein Schäferhund

00:28:23.510 --> 00:28:24.810
<v Jochen>als Logo für PyTest.

00:28:27.230 --> 00:28:28.730
<v Dominik>Ja, die Panfurter sind super.

00:28:29.910 --> 00:28:31.610
<v Dominik>Ja, was haben wir denn

00:28:31.610 --> 00:28:33.930
<v Jochen>was haben wir denn so an Dingen, die man da, über die man mal

00:28:33.930 --> 00:28:36.070
<v Jochen>ja, das würde mich auch mal interessieren, genau, du machst

00:28:36.070 --> 00:28:37.250
<v Jochen>viele PyTest-Schulungen

00:28:37.250 --> 00:28:40.170
<v Jochen>geht das überhaupt, also ich habe irgendwie so ein bisschen

00:28:40.170 --> 00:28:41.950
<v Jochen>ich mache auch manchmal Schulungen, auch so

00:28:41.950 --> 00:28:43.590
<v Jochen>Python-Einführungen oder halt auch mal zu

00:28:43.590 --> 00:28:46.050
<v Jochen>speziellen Themen und ich habe

00:28:46.050 --> 00:28:47.830
<v Jochen>immer so das Gefühl, ich weiß nicht so genau, ob ich

00:28:47.830 --> 00:28:49.790
<v Jochen>ob das, wie ich da

00:28:49.790 --> 00:28:50.590
<v Jochen>wie man da am besten

00:28:50.590 --> 00:28:53.970
<v Jochen>Wert irgendwie schafft für die Leute, die

00:28:53.970 --> 00:28:55.370
<v Jochen>darin teilnehmen, weil ich habe manchmal so

00:28:55.370 --> 00:28:57.950
<v Jochen>das Gefühl, die sind dann halt dann zwei Tage oder drei

00:28:57.950 --> 00:28:59.570
<v Jochen>Tage da und

00:28:59.570 --> 00:29:02.470
<v Jochen>dann machen sie das dann aber doch wieder so, wie sie das

00:29:02.470 --> 00:29:04.190
<v Jochen>kennen irgendwie, wenn sie wieder da weg sind

00:29:04.190 --> 00:29:06.530
<v Jochen>und gerade bei so Test Driven Development

00:29:06.530 --> 00:29:08.130
<v Jochen>ist es halt, habe ich das Gefühl

00:29:08.130 --> 00:29:10.410
<v Jochen>oder überhaupt beim Testen, so ein

00:29:10.410 --> 00:29:12.550
<v Jochen>Ding, wo sich das erst so über die Zeit

00:29:12.550 --> 00:29:14.150
<v Jochen>irgendwie einstellt,

00:29:14.670 --> 00:29:16.470
<v Jochen>wo man das schlecht irgendwie so einmal

00:29:16.470 --> 00:29:18.470
<v Jochen>in, so musst du das halt machen

00:29:18.470 --> 00:29:20.470
<v Jochen>und dann, sondern es ist mehr so ein Ding, so eine

00:29:20.470 --> 00:29:22.370
<v Dominik>Wegschmeißen nochmal machen, Wegschmeißen nochmal

00:29:22.370 --> 00:29:24.590
<v Jochen>machen, Wegschmeißen nochmal machen. Ja, oder man muss sich halt so ein bisschen dran gewöhnen

00:29:24.590 --> 00:29:26.230
<v Jochen>und das muss halt über eine längere Zeit

00:29:26.230 --> 00:29:28.270
<v Jochen>irgendwie passieren und ich habe da noch nicht so

00:29:28.270 --> 00:29:29.590
<v Jochen>und träge von, wie man das am besten vermitteln kann.

00:29:31.090 --> 00:29:31.830
<v Jochen>Ja, ich sag,

00:29:32.150 --> 00:29:33.890
<v Florian>an sich sage ich das den Leuten schon auch so,

00:29:34.790 --> 00:29:36.490
<v Florian>es ist auch irgendwie viel Erfahrung

00:29:36.490 --> 00:29:38.130
<v Florian>dahinter, die kann ich euch nicht abnehmen.

00:29:38.550 --> 00:29:40.490
<v Florian>Aber ich kann euch halt erstmal die Werkzeuge

00:29:40.490 --> 00:29:42.410
<v Florian>in die Hand geben und

00:29:42.410 --> 00:29:44.330
<v Florian>euch einfach mal zeigen, was kann man an sich

00:29:44.330 --> 00:29:46.110
<v Florian>vielleicht eher ein bisschen abstrakter

00:29:46.110 --> 00:29:48.230
<v Florian>mit PyTest überhaupt machen, was sind so die

00:29:48.230 --> 00:29:50.310
<v Florian>Möglichkeiten. Wie man

00:29:50.310 --> 00:29:52.450
<v Florian>die dann anwendet auf die konkrete Fälle,

00:29:52.670 --> 00:29:54.370
<v Florian>die die Leute da haben, steht dann teilweise

00:29:54.370 --> 00:29:56.050
<v Florian>schon nochmal ein bisschen auf einem anderen Blatt.

00:29:56.930 --> 00:29:58.950
<v Florian>Aber ich finde es schon ganz nützlich, dass die Leute

00:29:58.950 --> 00:30:00.290
<v Florian>halt sehen, was gibt es denn überhaupt.

00:30:01.830 --> 00:30:01.930
<v Florian>Ja.

00:30:02.850 --> 00:30:05.010
<v Florian>Da habe ich vielleicht noch eine kurze Geschichte

00:30:05.010 --> 00:30:06.990
<v Florian>auch, wie das mit diesen Trainings

00:30:06.990 --> 00:30:07.670
<v Florian>angefangen hat.

00:30:08.270 --> 00:30:10.970
<v Florian>Das war nämlich auch ganz witzig.

00:30:11.250 --> 00:30:12.890
<v Florian>Das war, als ich PyTest erst ein paar

00:30:12.890 --> 00:30:14.590
<v Florian>Monate gebraucht habe, auch noch irgendwie

00:30:14.590 --> 00:30:15.530
<v Florian>im 2015.

00:30:16.970 --> 00:30:18.950
<v Florian>Und zwar zu Europython da

00:30:18.950 --> 00:30:19.990
<v Florian>in Bilbao,

00:30:20.730 --> 00:30:21.390
<v Florian>also Spanien.

00:30:22.770 --> 00:30:24.850
<v Florian>Da wurde ich von Holger Kree,

00:30:24.930 --> 00:30:26.770
<v Florian>also nicht ich, aber Holger Kree

00:30:26.770 --> 00:30:28.630
<v Florian>also so der Vater

00:30:28.630 --> 00:30:30.750
<v Florian>von PyTest, der hat halt

00:30:30.750 --> 00:30:32.590
<v Florian>auf der Mailing-Liste gefragt, ob jemand

00:30:32.590 --> 00:30:34.410
<v Florian>dieses Training übernehmen kann an der

00:30:34.410 --> 00:30:36.790
<v Florian>Europython, weil er war irgendwie verhindert

00:30:36.790 --> 00:30:38.590
<v Florian>kurzfristig und

00:30:38.590 --> 00:30:40.470
<v Florian>hat sich dann niemand gemeldet und ich fand halt so,

00:30:40.530 --> 00:30:42.570
<v Florian>ja, hm, das ist irgendwie

00:30:42.570 --> 00:30:44.590
<v Florian>Material da, Spanien klingt auch

00:30:44.590 --> 00:30:46.510
<v Florian>irgendwie toll, ich war noch nie auf irgendwie

00:30:46.510 --> 00:30:48.610
<v Florian>einer Python-Konferenz. Ja,

00:30:48.850 --> 00:30:49.270
<v Florian>machen wir.

00:30:50.610 --> 00:30:52.670
<v Florian>Dann im gleichen Jahr noch auch das erste

00:30:52.670 --> 00:30:54.530
<v Florian>Firmentraining dann von ihm übernommen,

00:30:54.530 --> 00:30:56.490
<v Florian>weil er eh langsam aufgehört hat mit

00:30:56.490 --> 00:30:58.210
<v Florian>PyTests und zu anderen Projekten

00:30:58.210 --> 00:30:59.310
<v Florian>übergegangen ist

00:30:59.310 --> 00:31:02.370
<v Florian>und seit da dann basierend auf seinen

00:31:02.370 --> 00:31:04.430
<v Florian>Materialien das halt immer weiterentwickelt.

00:31:05.610 --> 00:31:06.370
<v Florian>Das klingt aber gut.

00:31:06.430 --> 00:31:08.090
<v Florian>Das klingt gut. Ja, also da sind da

00:31:08.090 --> 00:31:10.350
<v Dominik>viele interessante Sachen und ich würde auch die einzelnen

00:31:10.350 --> 00:31:12.470
<v Dominik>auch nochmal vielleicht kurz anschneiden, dass man so ein bisschen

00:31:12.470 --> 00:31:14.370
<v Dominik>drüber erklärt, für die Menschen, die das

00:31:14.370 --> 00:31:15.590
<v Dominik>noch nicht so kennen.

00:31:16.830 --> 00:31:18.210
<v Dominik>Wollen wir uns dann eine Struktur geben, wie wir

00:31:18.210 --> 00:31:20.110
<v Dominik>anfangen? Weiß ich nicht, nochmal reden, wie man vielleicht

00:31:20.110 --> 00:31:22.270
<v Dominik>Pictures am besten macht oder was das überhaupt ist oder

00:31:22.270 --> 00:31:24.410
<v Dominik>ob man die braucht oder wie man

00:31:24.410 --> 00:31:25.930
<v Dominik>die baut oder

00:31:25.930 --> 00:31:28.550
<v Dominik>und dann irgendwann vielleicht über diese ganzen

00:31:28.550 --> 00:31:29.950
<v Dominik>Plugins oder so

00:31:29.950 --> 00:31:32.930
<v Dominik>ein paar extra Sachen geht.

00:31:33.030 --> 00:31:34.110
<v Dominik>Es gibt ja wunderschöne Sachen,

00:31:34.450 --> 00:31:36.170
<v Dominik>die ich auch am Anfang nicht kannte.

00:31:36.750 --> 00:31:39.070
<v Dominik>Das letzte, wo ich mich erst so ein bisschen gesträubt hatte,

00:31:39.170 --> 00:31:40.770
<v Dominik>war irgendwie Hypothesis. Das habe ich dann

00:31:40.770 --> 00:31:42.890
<v Dominik>durch deine Veranstaltung, lieber Florian,

00:31:42.950 --> 00:31:44.770
<v Dominik>nochmal dann eingebaut und

00:31:44.770 --> 00:31:46.550
<v Dominik>war überrascht, dass ich, also was heißt überrascht,

00:31:46.630 --> 00:31:48.690
<v Dominik>aber ich habe noch so ein paar Bugs angefressen.

00:31:48.690 --> 00:31:51.030
<v Dominik>Und dann so, oh, die habe ich jetzt noch nicht gesehen.

00:31:51.710 --> 00:31:51.930
<v Dominik>Und ja,

00:31:53.190 --> 00:31:55.070
<v Dominik>da kommt man so ein bisschen auch an die Grenzen

00:31:55.070 --> 00:31:56.590
<v Dominik>dessen, was Python so kann.

00:31:57.470 --> 00:31:59.250
<v Dominik>Und ja, ich weiß nicht, wo würdest du

00:31:59.250 --> 00:32:00.950
<v Dominik>denn anfangen bei

00:32:00.950 --> 00:32:01.610
<v Dominik>PyTest?

00:32:02.670 --> 00:32:04.230
<v Florian>Ich würde, glaube ich, jetzt tatsächlich

00:32:04.230 --> 00:32:07.050
<v Florian>nicht generell bei PyTest, aber ich würde noch mal

00:32:07.050 --> 00:32:09.170
<v Florian>kurz gerne bei Coverage einhaken,

00:32:09.430 --> 00:32:11.150
<v Florian>weil das Thema schon gehabt

00:32:11.150 --> 00:32:13.090
<v Florian>haben und vielleicht nicht alle wissen, was das eigentlich

00:32:13.090 --> 00:32:13.410
<v Florian>ist.

00:32:14.950 --> 00:32:17.370
<v Florian>Da frage ich jeweils auch so rum bei den Firmenkursen

00:32:17.370 --> 00:32:18.730
<v Florian>und oft so

00:32:18.730 --> 00:32:20.730
<v Florian>viele Leute fanden, ja, nee, das

00:32:20.730 --> 00:32:22.710
<v Florian>machen sie eigentlich nicht, dass sie irgendwie Coverage

00:32:22.710 --> 00:32:23.490
<v Florian>messen.

00:32:25.070 --> 00:32:28.850
<v Florian>Da geht es darum, dass man sich ganz einfach anschaut,

00:32:29.050 --> 00:32:32.730
<v Florian>welche Zeilen von meinem Code wurden von meinen Tests ausgeführt.

00:32:33.910 --> 00:32:36.910
<v Florian>Was einem dann einen Eindruck zumindest geben kann,

00:32:37.250 --> 00:32:40.870
<v Florian>was ist getestet oder was wird zumindest ausgeführt von den Tests,

00:32:41.050 --> 00:32:43.870
<v Florian>muss nicht zwingend dann heißen, dass die Tests auch gut sind

00:32:43.870 --> 00:32:46.670
<v Florian>oder wirklich was testen, aber es wird zumindest mal ausgeführt.

00:32:47.050 --> 00:32:49.370
<v Dominik>Ja, das Blöde ist halt dann, wenn 100% coverage,

00:32:49.470 --> 00:32:50.770
<v Dominik>also der ganze Code ist durchgelaufen,

00:32:50.870 --> 00:32:51.870
<v Dominik>aber es ist trotzdem irgendwas kaputt.

00:32:53.270 --> 00:32:53.650
<v Dominik>Genau.

00:32:53.770 --> 00:32:54.810
<v Dominik>Kann einem halt auch passieren, ja.

00:32:55.070 --> 00:32:57.190
<v Florian>auch schwierig, da

00:32:57.190 --> 00:32:59.590
<v Florian>Prozent Coverage gerade in ein Team

00:32:59.590 --> 00:33:01.310
<v Florian>sich irgendwie als Ziel zu setzen, weil

00:33:01.310 --> 00:33:03.450
<v Florian>dann wird es bestimmt Leute geben,

00:33:03.550 --> 00:33:05.410
<v Florian>die dann einfach diese Zahl hochtreiben, ohne

00:33:05.410 --> 00:33:06.890
<v Florian>wirklich noch gute Tests zu schreiben.

00:33:07.090 --> 00:33:09.450
<v Dominik>Ja, genau, weil, ja, das würde ich auch sagen, wenn man es halt nur macht,

00:33:09.550 --> 00:33:11.230
<v Dominik>um irgendwie, ne, irgendeinen Ast nochmal

00:33:11.230 --> 00:33:13.810
<v Dominik>zu, durchzuwandern,

00:33:13.870 --> 00:33:15.290
<v Dominik>ohne dass es halt irgendwas bringt, das ist halt blöd.

00:33:16.710 --> 00:33:17.550
<v Dominik>Aber gibt es da sowas, wo

00:33:17.550 --> 00:33:19.390
<v Dominik>ihr sagen würdet, so aus euren Eigenprojekten

00:33:19.390 --> 00:33:21.450
<v Dominik>so Pi mal Daumen, so eine Coverage ist okay?

00:33:24.090 --> 00:33:24.410
<v Dominik>Hm.

00:33:24.890 --> 00:33:26.970
<v Jochen>Ich würde, also ich weiß nicht,

00:33:27.070 --> 00:33:28.730
<v Jochen>also meistens, wenn ich nicht drauf achte, lande ich

00:33:28.730 --> 00:33:30.630
<v Jochen>irgendwo so bei irgendwie ein bisschen über

00:33:30.630 --> 00:33:31.870
<v Jochen>80 Prozent oder sowas.

00:33:33.310 --> 00:33:34.830
<v Florian>Ja, 80 war jetzt auch so meine

00:33:34.830 --> 00:33:36.350
<v Florian>erste Reaktion gewesen.

00:33:36.910 --> 00:33:38.610
<v Dominik>Also ich würde sagen, wenn man schon zwei Tests schreibt oder so,

00:33:38.670 --> 00:33:39.870
<v Dominik>die so ein bisschen das machen, was man,

00:33:40.190 --> 00:33:42.750
<v Dominik>dann sind ja schon mal über 60, 70 meistens drüber.

00:33:43.990 --> 00:33:44.850
<v Dominik>Das weiß ich nicht, aber

00:33:44.850 --> 00:33:46.270
<v Dominik>Ja, je nachdem, wie groß das Projekt ist natürlich.

00:33:47.730 --> 00:33:48.770
<v Dominik>Also klar, am Anfang

00:33:48.770 --> 00:33:50.970
<v Jochen>hast du einfach viel mehr Gewinn, also so ein paar

00:33:50.970 --> 00:33:52.950
<v Jochen>Tests, die halt bei der Web-Applikation

00:33:52.950 --> 00:33:54.650
<v Jochen>jetzt die Views einfach nur durchgehen und gucken,

00:33:54.770 --> 00:33:57.050
<v Jochen>ein Okay zurückkommt, irgendwie in den Standardfällen.

00:33:57.150 --> 00:33:58.890
<v Jochen>Da hast du halt sehr wenig Tests geschrieben

00:33:58.890 --> 00:34:00.770
<v Jochen>und viel Gewinn quasi, weil wenn das

00:34:00.770 --> 00:34:02.750
<v Jochen>kaputt geht. Und das wird dann halt

00:34:02.750 --> 00:34:04.570
<v Jochen>immer weniger irgendwann. Und irgendwann ist man natürlich

00:34:04.570 --> 00:34:06.670
<v Jochen>am Punkt erreicht, wo es halt eigentlich keinen Sinn mehr

00:34:06.670 --> 00:34:08.110
<v Jochen>macht und man aufhören kann. Aber

00:34:08.110 --> 00:34:10.570
<v Jochen>wann der erreicht ist, keine Ahnung.

00:34:10.730 --> 00:34:12.790
<v Jochen>Schwer zu sagen. Also, ja.

00:34:14.170 --> 00:34:14.370
<v Jochen>Ja.

00:34:14.850 --> 00:34:16.450
<v Florian>Ja, am Schluss muss man sich danach

00:34:16.450 --> 00:34:18.510
<v Florian>einfach mal so die Daten

00:34:18.510 --> 00:34:20.450
<v Florian>dahinter anschauen und mal schauen, was

00:34:20.450 --> 00:34:21.810
<v Florian>habe ich denn noch nicht getestet?

00:34:22.450 --> 00:34:24.550
<v Florian>Da kann es eben sein, es wurde

00:34:24.550 --> 00:34:26.430
<v Florian>einfach vergessen. Das ist irgendwie eine

00:34:26.430 --> 00:34:28.450
<v Florian>Fehler-Condition, die es vielleicht ganz

00:34:28.450 --> 00:34:30.570
<v Florian>gut ist, die zu testen. Oder es

00:34:30.570 --> 00:34:32.410
<v Florian>kann halt sein, es ist eben ein Code, der nicht

00:34:32.410 --> 00:34:34.530
<v Florian>einfach testbar ist. Und da muss man sich überlegen,

00:34:34.850 --> 00:34:36.570
<v Florian>ist es davon wert? Es gibt halt so

00:34:36.570 --> 00:34:38.530
<v Dominik>zwei, ich würde sagen, Dinge, die es ein bisschen

00:34:38.530 --> 00:34:40.430
<v Dominik>schwierig machen. Und zwar, klar, man kann jetzt

00:34:40.430 --> 00:34:42.470
<v Dominik>natürlich sehr viel einfacher Tests schreiben, wenn

00:34:42.470 --> 00:34:44.250
<v Dominik>man ganz klar weiß, wie jetzt von einer

00:34:44.250 --> 00:34:46.230
<v Dominik>kleinen Funktion, von irgendeiner Klosche

00:34:46.230 --> 00:34:48.570
<v Dominik>irgendwie der Contract ist. Also wenn man weiß, was reingehen,

00:34:48.630 --> 00:34:50.530
<v Dominik>was rausgehen muss. Was halt auch

00:34:50.530 --> 00:34:52.210
<v Dominik>bedeutet, dass man dazu tendiert, die

00:34:52.210 --> 00:34:54.090
<v Dominik>relativ statisch zum Beispiel zu typisieren

00:34:54.090 --> 00:34:56.390
<v Dominik>oder zumindest die Type Annotations dann nochmal abzufangen

00:34:56.390 --> 00:34:58.310
<v Dominik>oder irgendwie sowas. Naja gut, das macht ja jetzt

00:34:58.310 --> 00:35:00.370
<v Jochen>wenig Sinn, würde ich sagen, wenn du die Type Annotations

00:35:00.370 --> 00:35:02.270
<v Jochen>nochmal testest. Ja, nein, aber du

00:35:02.270 --> 00:35:04.350
<v Dominik>wusstest halt, dass das, was reinkommt, dann auch

00:35:04.350 --> 00:35:06.290
<v Dominik>dem entspricht vielleicht, oder dass man halt

00:35:06.290 --> 00:35:08.390
<v Dominik>das eng zuckt. Das bedeutet aber halt, dass man

00:35:08.390 --> 00:35:10.510
<v Dominik>auch die Dynamik verliert oder die Flexibilität.

00:35:11.210 --> 00:35:12.210
<v Dominik>Auch jetzt irgendwie, wenn man jetzt

00:35:12.210 --> 00:35:14.210
<v Dominik>API schreibt und dann irgendwie die Daten validieren

00:35:14.210 --> 00:35:16.250
<v Dominik>möchte, klar kann man jetzt ganz streng sein und

00:35:16.250 --> 00:35:17.950
<v Dominik>jedes Mal dann, wenn es nicht passt, einfach

00:35:17.950 --> 00:35:20.150
<v Dominik>zurückgeben, okay, danke, du

00:35:20.150 --> 00:35:21.730
<v Dominik>darfst nicht oder so. Ich glaube,

00:35:22.210 --> 00:35:24.310
<v Jochen>ich glaube, das läuft jetzt quasi darauf hinaus,

00:35:24.530 --> 00:35:25.570
<v Jochen>wie sollte so eine Test,

00:35:26.210 --> 00:35:28.030
<v Jochen>es gibt ja diese Testpyramide,

00:35:28.130 --> 00:35:29.110
<v Jochen>wie sollte die aussehen?

00:35:30.090 --> 00:35:31.070
<v Jochen>Quasi, ja.

00:35:31.950 --> 00:35:33.710
<v Jochen>Weil sozusagen, also ja,

00:35:34.530 --> 00:35:36.170
<v Jochen>dass man halt viele Unit-Tests hat,

00:35:36.390 --> 00:35:37.790
<v Jochen>irgendwie dann weniger

00:35:37.790 --> 00:35:39.850
<v Jochen>irgendwie Tests, die halt irgendwie

00:35:39.850 --> 00:35:41.950
<v Jochen>größere Sachen testen und dann halt nur ganz wenige

00:35:41.950 --> 00:35:43.690
<v Jochen>irgendwie so

00:35:43.690 --> 00:35:45.030
<v Jochen>End-to-End-Tests oder so.

00:35:45.130 --> 00:35:47.830
<v Dominik>Man kann natürlich jetzt sicher auch mit sowas wie Playwright

00:35:47.830 --> 00:35:50.110
<v Dominik>oder sowas eine komplette Frontend-Integrationsstrecke

00:35:50.110 --> 00:35:52.090
<v Dominik>bauen, die jedes Mal dann testet, ob die Farbe

00:35:52.090 --> 00:35:54.270
<v Dominik>bei dem Button sich geändert hat. Genau, das willst du

00:35:54.270 --> 00:35:56.210
<v Dominik>natürlich nicht. Ob weiße, in den Meter links oder rechts sind, aber wenn halt

00:35:56.210 --> 00:35:58.090
<v Dominik>irgendeine Änderung von irgendeinem Designer kommt, dann deine ganze

00:35:58.090 --> 00:35:59.990
<v Dominik>Pipeline sieht jetzt mal auseinanderfliegen. Das ist wahrscheinlich

00:35:59.990 --> 00:36:01.530
<v Dominik>eher zu viel. Genau.

00:36:02.650 --> 00:36:03.270
<v Dominik>So, aber

00:36:03.270 --> 00:36:06.330
<v Dominik>also ich glaube, man muss halt irgendwie so sich überlegen,

00:36:06.410 --> 00:36:08.190
<v Dominik>was der Anwendungsfall, ob der sinnvoll ist halt

00:36:08.190 --> 00:36:10.350
<v Dominik>auch. Also ob es halt einen Sinn hat,

00:36:10.510 --> 00:36:12.270
<v Dominik>dass man eine breite Anwendungsfall

00:36:12.270 --> 00:36:14.130
<v Dominik>hat oder ob man das so enger scopen möchte.

00:36:14.730 --> 00:36:16.150
<v Dominik>Und das würdet ihr

00:36:16.150 --> 00:36:17.950
<v Dominik>wahrscheinlich am besten wissen, wenn ihr Anwendungen baut,

00:36:18.030 --> 00:36:19.950
<v Dominik>an welchen Stellen die nicht auseinanderfliegen sollte.

00:36:20.130 --> 00:36:22.150
<v Dominik>Also wenn ihr irgendwas macht, was wichtig ist,

00:36:22.390 --> 00:36:24.510
<v Dominik>irgendwie wo Leben dran hängt oder was teuer ist oder sowas,

00:36:24.550 --> 00:36:27.470
<v Dominik>dann sollte man da vielleicht ein bisschen mehr Hirnschmalz reinstecken,

00:36:27.570 --> 00:36:30.430
<v Dominik>das so ein bisschen sauberer zu programmieren.

00:36:30.530 --> 00:36:33.650
<v Dominik>Und ich habe immer das Gefühl, also Tests haben mir auch sehr geholfen,

00:36:33.730 --> 00:36:35.850
<v Dominik>so die Architektur, mit der ich irgendwie überhaupt Programme schreibe,

00:36:35.890 --> 00:36:38.430
<v Dominik>so ein bisschen zu überdenken, weil man halt merkt,

00:36:38.430 --> 00:36:41.990
<v Dominik>dass man halt so große Module oder sowas oder Dinge, die viel machen,

00:36:42.570 --> 00:36:44.450
<v Dominik>dass die schwierig halt werden, also A, zu testen,

00:36:44.510 --> 00:36:45.830
<v Dominik>aber es vielleicht auch eine doofe Idee ist,

00:36:45.890 --> 00:36:48.050
<v Dominik>wenn in einer Methode oder einer Funktion

00:36:48.050 --> 00:36:49.610
<v Dominik>nur super viele Sachen gleichzeitig passieren.

00:36:50.130 --> 00:36:50.910
<v Dominik>Und solche Dinge.

00:36:51.370 --> 00:36:55.450
<v Dominik>Und da kommen wir halt auch wieder zu Coverage.

00:36:55.610 --> 00:36:56.990
<v Dominik>Wenn man halt so viel Zeugs hat,

00:36:57.530 --> 00:36:58.910
<v Dominik>was passiert, auf einmal passiert,

00:36:59.030 --> 00:37:00.150
<v Dominik>also ein bisschen sich so von diesem

00:37:00.150 --> 00:37:02.530
<v Dominik>ein Ding für eine Sache Prinzip verabschiedet,

00:37:03.190 --> 00:37:05.430
<v Dominik>dann wird das halt auch relativ schwierig zu testen.

00:37:06.390 --> 00:37:07.870
<v Dominik>Oder überhaupt dann so hinzukommen,

00:37:07.970 --> 00:37:08.890
<v Dominik>dass die Sachen so passieren.

00:37:09.070 --> 00:37:10.130
<v Dominik>Oder dass man die Bugs dann findet.

00:37:12.230 --> 00:37:14.070
<v Dominik>Ja, aber ich fürchte,

00:37:14.170 --> 00:37:15.270
<v Dominik>man kann nicht einfach sagen,

00:37:15.650 --> 00:37:16.590
<v Dominik>man muss das halt so machen.

00:37:16.590 --> 00:37:19.910
<v Jochen>Weil das sind so widerstreitende Dinge.

00:37:20.130 --> 00:37:46.490
<v Jochen>Also ich würde ja auch zustimmen, genau, das ist halt, also das ist auch etwas, was beim Testen, was ich gut finde, dass man halt irgendwie so ein bisschen in die Richtung gedrängt wird, sich darüber Gedanken zu machen, wie man Sachen halt so hinschreibt, dass man sie gut testen kann und irgendwann hat man das dann halt auch so ein bisschen verinnerlicht, dass man, weiß man schon, wie man am besten Dinge so hinschreibt, dass hinterher die Tests sehr, sehr, sehr einfach hinzuschreiben sind und wenn das nicht geht, dann ist das halt auch einfach nichts, was man halt so schreiben sollte wahrscheinlich.

00:37:46.490 --> 00:37:48.050
<v Jochen>auf der anderen Seite, also

00:37:48.050 --> 00:37:49.790
<v Jochen>ist es halt auch so,

00:37:50.250 --> 00:37:52.690
<v Jochen>wäre es halt schön oder elegant

00:37:52.690 --> 00:37:54.550
<v Jochen>von der Architektur her, wenn man

00:37:54.550 --> 00:37:55.410
<v Jochen>jetzt halt eher

00:37:55.410 --> 00:37:58.130
<v Jochen>schmale und tiefe Funktionen hat.

00:38:00.190 --> 00:38:00.590
<v Jochen>Ja, also

00:38:00.590 --> 00:38:02.590
<v Jochen>sozusagen, aber die sind

00:38:02.590 --> 00:38:04.210
<v Jochen>halt schwer zu testen, auch unter Umständen.

00:38:04.530 --> 00:38:06.390
<v Jochen>Es ist nicht unbedingt, also du kannst natürlich

00:38:06.390 --> 00:38:08.590
<v Jochen>auch viele Funktionen,

00:38:09.290 --> 00:38:09.410
<v Jochen>also

00:38:09.410 --> 00:38:12.610
<v Jochen>dass es etwas super zu testen ist, muss jetzt nicht unbedingt

00:38:12.610 --> 00:38:14.450
<v Jochen>bedeuten, dass es halt auch total

00:38:14.450 --> 00:38:15.930
<v Jochen>elegant ist, zum Beispiel

00:38:15.930 --> 00:38:16.910
<v Jochen>zu verwenden.

00:38:18.190 --> 00:38:19.930
<v Jochen>Also es kann sein, dass zum Beispiel, nehmen wir mal an,

00:38:20.070 --> 00:38:21.930
<v Jochen>ein Beispiel für eine sehr schlechte API,

00:38:22.690 --> 00:38:24.210
<v Jochen>die ganze Java-File

00:38:24.210 --> 00:38:25.810
<v Jochen>irgendwie buffert,

00:38:25.890 --> 00:38:27.730
<v Jochen>reader, irgendwas sonst was API. Also

00:38:27.730 --> 00:38:30.070
<v Jochen>ich könnte mir vorstellen, dass das relativ einfach zu testen ist,

00:38:30.370 --> 00:38:31.950
<v Jochen>aber es ist halt ein Albtraum, das zu benutzen.

00:38:32.650 --> 00:38:34.070
<v Jochen>Und die, nehmen wir an,

00:38:34.210 --> 00:38:35.750
<v Jochen>ja, Unix-File-API oder halt auch

00:38:35.750 --> 00:38:37.930
<v Jochen>irgendwie, keine Ahnung, Requests-API in Python,

00:38:38.270 --> 00:38:39.870
<v Jochen>die ist halt schön, weil

00:38:39.870 --> 00:38:41.370
<v Jochen>die ist halt schmal und tief,

00:38:41.970 --> 00:38:43.870
<v Jochen>aber ich könnte mir vorstellen, dass Requests zu testen

00:38:43.870 --> 00:38:45.850
<v Jochen>eventuell ziemlicher Schmerz

00:38:45.850 --> 00:38:47.730
<v Jochen>ist. Es hängt

00:38:47.730 --> 00:38:48.710
<v Jochen>halt davon ab,

00:38:49.630 --> 00:38:51.550
<v Jochen>was dein Anwendungsfall ist, ob das jetzt,

00:38:51.870 --> 00:38:53.850
<v Jochen>also wenn du sagst jetzt irgendwie, das ist eine interne

00:38:53.850 --> 00:38:55.870
<v Jochen>Funktion und da ist es

00:38:55.870 --> 00:38:57.470
<v Jochen>schön, wenn man die einfach testen kann,

00:38:57.910 --> 00:38:59.690
<v Jochen>dann macht es halt Sinn, das vielleicht so zu machen, aber

00:38:59.690 --> 00:39:02.010
<v Jochen>wenn das jetzt was ist, was nach außen geht,

00:39:02.290 --> 00:39:03.830
<v Jochen>wo User dann halt

00:39:03.830 --> 00:39:05.730
<v Jochen>den Schmerz haben, dass du es einfach zu

00:39:05.730 --> 00:39:07.350
<v Jochen>testen hast, dann muss man sagen, naja, nee,

00:39:07.850 --> 00:39:09.670
<v Jochen>dann muss es halt für User einfach zu verwenden sein

00:39:09.670 --> 00:39:11.730
<v Jochen>und wenn das halt bedeutet, dass es schmerzhaft

00:39:11.730 --> 00:39:13.790
<v Jochen>ist, das zu testen, dann ist es halt so,

00:39:13.910 --> 00:39:15.750
<v Jochen>weil wichtiger ist an der Stelle die User Experience.

00:39:15.850 --> 00:39:17.990
<v Jochen>Also es kommt halt drauf an, denke ich.

00:39:19.550 --> 00:39:20.030
<v Jochen>Ja.

00:39:22.490 --> 00:39:24.230
<v Florian>Ja, um auch vielleicht nochmal

00:39:24.230 --> 00:39:26.030
<v Florian>bei dieser Testing Pyramid einzuhängen.

00:39:27.230 --> 00:39:28.250
<v Florian>Ich finde da immer

00:39:28.250 --> 00:39:30.270
<v Florian>so, ich finde das ein bisschen

00:39:30.270 --> 00:39:32.110
<v Florian>zu kurz gedacht. Es kommt halt immer

00:39:32.110 --> 00:39:34.090
<v Florian>sehr darauf an, was man testet

00:39:34.090 --> 00:39:36.190
<v Florian>und man soll sich halt zu den Vor-

00:39:36.190 --> 00:39:38.350
<v Florian>und Nachteilen von diesen Größen

00:39:38.350 --> 00:39:39.330
<v Florian>von Tests

00:39:39.330 --> 00:39:42.430
<v Florian>bewusst sein. Aber ich finde zunächst, man kann

00:39:42.430 --> 00:39:44.010
<v Florian>immer sagen,

00:39:44.270 --> 00:39:46.290
<v Florian>die eine Art ist besser wie die andere Art.

00:39:46.770 --> 00:39:46.870
<v Florian>Ja.

00:39:47.730 --> 00:39:50.310
<v Florian>Wenn ich jetzt ein Command-Line-Tool teste,

00:39:51.270 --> 00:39:52.570
<v Florian>bietet es sich vielleicht an,

00:39:52.630 --> 00:39:54.190
<v Florian>da eher End-to-End-Tests zu schreiben,

00:39:54.310 --> 00:39:56.630
<v Florian>weil ich dann wirklich auch den Output und so testen kann

00:39:56.630 --> 00:39:58.330
<v Florian>und

00:39:58.330 --> 00:39:59.790
<v Florian>eher sparsam

00:39:59.790 --> 00:40:01.910
<v Florian>für einzelne Funktionen

00:40:01.910 --> 00:40:02.930
<v Florian>Unit-Tests zu schreiben.

00:40:03.830 --> 00:40:04.650
<v Florian>Oder auch,

00:40:05.070 --> 00:40:07.750
<v Florian>ich bin viel auch jetzt bei Firmen

00:40:07.750 --> 00:40:09.590
<v Florian>für die Kurse, die eigentlich

00:40:09.590 --> 00:40:11.590
<v Florian>gar keinen Python-Code mit PyTest testen.

00:40:11.690 --> 00:40:12.650
<v Florian>Das fand ich auch ganz spannend.

00:40:12.670 --> 00:40:14.170
<v Jochen>Ja, das ist auch total interessant.

00:40:14.270 --> 00:40:16.690
<v Florian>sondern die beispielsweise

00:40:16.690 --> 00:40:19.090
<v Florian>Waschmaschinen mit PyTest testen.

00:40:20.170 --> 00:40:21.070
<v Florian>Also da halt

00:40:21.070 --> 00:40:22.790
<v Florian>eine Waschmaschine haben, wo dann

00:40:22.790 --> 00:40:25.090
<v Florian>ein Firmware drauf läuft und

00:40:25.090 --> 00:40:27.010
<v Florian>die wollen sie halt testen.

00:40:28.150 --> 00:40:28.670
<v Florian>Und

00:40:28.670 --> 00:40:30.830
<v Florian>wollen halt dazu PyTest nutzen,

00:40:31.090 --> 00:40:32.870
<v Florian>weil es eben zusammen mit Python

00:40:32.870 --> 00:40:35.150
<v Florian>ein relativ einfaches und flexibles Werkzeug

00:40:35.150 --> 00:40:36.050
<v Florian>darstellt.

00:40:36.950 --> 00:40:37.850
<v Florian>Gucken, ob noch alles geht.

00:40:38.710 --> 00:40:41.030
<v Dominik>Wenn man die richtigen Knöpfe drückt und das richtige

00:40:41.030 --> 00:40:42.870
<v Jochen>Programm läuft. Ja, und die Tests sind halt

00:40:42.870 --> 00:40:43.850
<v Jochen>einfach zu schreiben.

00:40:44.270 --> 00:40:45.950
<v Jochen>Ja, das ist eine gute Idee.

00:40:46.970 --> 00:40:48.150
<v Jochen>Oder bei einem Kunden von mir,

00:40:48.590 --> 00:40:50.830
<v Florian>um vielleicht dann gleich die Überleitung

00:40:50.830 --> 00:40:52.610
<v Florian>zu den Fixtures zu machen an der Stelle,

00:40:53.250 --> 00:40:55.390
<v Florian>die nutzen eine PyTest-Fixture,

00:40:55.390 --> 00:40:57.790
<v Florian>um eine Klimakammer anzusteuern.

00:40:58.450 --> 00:41:01.710
<v Florian>Die haben so eine Klimakammer mit Elektronik drin

00:41:01.710 --> 00:41:04.570
<v Florian>und sagen dann halt, über eine PyTest-Fixture

00:41:04.570 --> 00:41:07.210
<v Florian>heizt mir das jetzt auf auf 30 Grad

00:41:07.210 --> 00:41:09.750
<v Florian>und dann lasse ich da meine Systemtests

00:41:09.750 --> 00:41:11.030
<v Florian>für dieses Gerät laufen.

00:41:11.730 --> 00:41:13.990
<v Florian>Wo auch wieder alles andere

00:41:13.990 --> 00:41:15.490
<v Florian>als Python-Code getestet wird.

00:41:17.350 --> 00:41:19.890
<v Dominik>Ja, spannend, wenn man halt

00:41:19.890 --> 00:41:21.670
<v Dominik>wirklich das mit in die Realität überträgt

00:41:21.670 --> 00:41:23.030
<v Dominik>und quasi auch seine Hardware damit

00:41:23.030 --> 00:41:25.790
<v Dominik>steuert, um die Testumgebung

00:41:25.790 --> 00:41:27.570
<v Dominik>außerhalb des Rechners

00:41:27.570 --> 00:41:29.190
<v Dominik>aufzubauen oder halt aufzuheizen.

00:41:30.170 --> 00:41:31.590
<v Dominik>Bestimmen die Parameter, machen die das,

00:41:31.690 --> 00:41:32.030
<v Dominik>was sie sollen.

00:41:33.270 --> 00:41:35.730
<v Dominik>Und jetzt habe ich das

00:41:35.730 --> 00:41:37.110
<v Dominik>vergessen, was ich eigentlich sagen wollte.

00:41:37.610 --> 00:41:38.050
<v Dominik>Ja, Fixchance.

00:41:39.870 --> 00:41:41.490
<v Florian>Das auch, aber vorher noch.

00:41:41.730 --> 00:42:00.690
<v Florian>Was eigentlich mein Punkt war, da hat man ja dann gar keine Wahl, welche Größen von Tests man schreiben will. Also da schreibt man fast gezwungenermaßen dann eben Systemtests oder so, End-to-End-Tests und kann ja nicht mehr wirklich einzelne Funktionen dieses Geräts, also im Sinne eines Unitests, testen.

00:42:02.210 --> 00:42:03.710
<v Jochen>Ja, im Grunde ist das ja auch schon so,

00:42:03.830 --> 00:42:05.770
<v Jochen>wenn man Pytest zum Schreiben

00:42:05.770 --> 00:42:07.610
<v Jochen>von End-to-End-Tests, was man ja auch machen kann, verwendet,

00:42:07.690 --> 00:42:09.870
<v Jochen>wie zum Beispiel mit Pytest Playwright

00:42:09.870 --> 00:42:11.710
<v Jochen>oder so, dann da ist ja auch eigentlich

00:42:11.710 --> 00:42:13.550
<v Jochen>jeder Test im Grunde verwendiger.

00:42:13.930 --> 00:42:15.450
<v Jochen>Man muss halt den Browser aufmachen,

00:42:15.530 --> 00:42:16.850
<v Jochen>dann da überhin und dann...

00:42:16.850 --> 00:42:21.470
<v Jochen>Ja, von da

00:42:21.470 --> 00:42:23.230
<v Florian>finde ich so dieses Testing-Pyramid, ich meine,

00:42:23.390 --> 00:42:25.570
<v Florian>die Idee ist ja auch steinalt, muss man dazu sagen.

00:42:27.230 --> 00:42:27.730
<v Florian>Bin ich

00:42:27.730 --> 00:42:28.990
<v Florian>mit Vorsicht zu genießen.

00:42:30.810 --> 00:42:31.450
<v Florian>Dann aber

00:42:31.450 --> 00:42:33.630
<v Dominik>vielleicht tatsächlich dazu Fiction und was

00:42:33.630 --> 00:42:35.350
<v Dominik>Fiction sind und wie man die baut oder

00:42:35.350 --> 00:42:37.750
<v Dominik>macht ihr das mit Factories

00:42:37.750 --> 00:42:39.510
<v Dominik>oder macht ihr das ohne Factories oder

00:42:39.510 --> 00:42:41.550
<v Dominik>sind Factories doof oder

00:42:41.550 --> 00:42:43.610
<v Dominik>du hast ja so verschiedene Sachen und also was

00:42:43.610 --> 00:42:45.010
<v Dominik>sind überhaupt Fiction und

00:42:45.010 --> 00:42:47.550
<v Dominik>ja also vielleicht so fertige

00:42:47.550 --> 00:42:49.190
<v Dominik>Dinge, die

00:42:49.190 --> 00:42:51.550
<v Dominik>so tun, als wären sie etwas, was das Programm

00:42:51.550 --> 00:42:53.450
<v Dominik>normalerweise kann. Das war jetzt ein bisschen

00:42:53.450 --> 00:42:55.210
<v Dominik>abstrakt, ich weiß nicht, gibt es da ein einfaches Beispiel?

00:42:57.170 --> 00:42:57.550
<v Dominik>Also wenn wir

00:42:57.550 --> 00:42:59.510
<v Dominik>mit einem normalen Webclient zum Beispiel arbeiten

00:42:59.510 --> 00:43:01.370
<v Dominik>wird, dann wird halt eine Fixture der User und einer

00:43:01.370 --> 00:43:03.490
<v Dominik>ein Client und dann guckt man, wie das interagiert

00:43:03.490 --> 00:43:03.730
<v Dominik>oder

00:43:03.730 --> 00:43:07.350
<v Dominik>wie baut man das? Ja, am Schluss ist eine

00:43:07.350 --> 00:43:09.690
<v Dominik>Fixture im Prinzip

00:43:09.690 --> 00:43:11.310
<v Florian>einfach eine Funktion, die also als

00:43:11.310 --> 00:43:12.210
<v Florian>PyTest-Fixture

00:43:12.210 --> 00:43:15.490
<v Florian>markiert ist oder dekoriert

00:43:15.490 --> 00:43:17.370
<v Florian>ist und

00:43:17.370 --> 00:43:19.310
<v Florian>diese Fixture kann entweder

00:43:19.310 --> 00:43:21.810
<v Florian>irgendwelche Setup-Schritte

00:43:21.810 --> 00:43:23.090
<v Florian>vornehmen für den Test

00:43:23.090 --> 00:43:25.710
<v Florian>und oder irgendwelche Objekte

00:43:25.710 --> 00:43:27.070
<v Florian>für den Test bereitstellen.

00:43:28.290 --> 00:43:29.230
<v Florian>Das heißt,

00:43:29.390 --> 00:43:31.390
<v Florian>das kann jetzt sein, wenn ich irgendwo

00:43:31.390 --> 00:43:33.310
<v Florian>eine Config-Klasse habe, vielleicht

00:43:33.310 --> 00:43:35.130
<v Florian>in meinem Code,

00:43:35.270 --> 00:43:36.990
<v Florian>dann habe ich vielleicht in meinen Tests eben eine

00:43:36.990 --> 00:43:39.270
<v Florian>Config-Fixture, was

00:43:39.270 --> 00:43:40.430
<v Florian>mir eine sinnvoll

00:43:40.430 --> 00:43:43.150
<v Florian>konfigurierte Instanz gibt

00:43:43.150 --> 00:43:44.330
<v Florian>von dieser Config-Klasse.

00:43:45.570 --> 00:43:47.190
<v Florian>Oder in den Trainings habe ich

00:43:47.190 --> 00:43:48.970
<v Florian>das Beispiel von so einem R-Pan

00:43:48.970 --> 00:43:51.050
<v Florian>Calculator, den ich testen will, der

00:43:51.050 --> 00:43:53.290
<v Florian>nimmt dann auch eine Config als Argument und so was

00:43:53.290 --> 00:43:54.750
<v Florian>und damit ich

00:43:54.750 --> 00:43:57.030
<v Florian>einfach nur die Instanzierung von diesem

00:43:57.030 --> 00:43:58.730
<v Florian>R-Pan Calculator,

00:43:59.210 --> 00:44:02.010
<v Florian>Also einfach ein Taschenrechner im Prinzip, in Python geschrieben.

00:44:02.870 --> 00:44:05.390
<v Florian>Damit ich das nicht copy-pasten muss in jedem Test,

00:44:05.570 --> 00:44:07.310
<v Florian>mache ich mir eben so eine Fixture-Funktion,

00:44:08.070 --> 00:44:10.390
<v Florian>wo ich das alles aufsetze, zurückgebe

00:44:10.390 --> 00:44:13.550
<v Florian>und Tests können dann diese Fixture eben nutzen.

00:44:14.250 --> 00:44:16.630
<v Florian>Mit dem Ziel eben so diese Setup-Schritte

00:44:16.630 --> 00:44:19.670
<v Florian>schön zu isolieren aus den Testfunktionen.

00:44:19.690 --> 00:44:22.210
<v Dominik>Also man baut sich quasi das Objekt, das die API bereitstellt,

00:44:22.310 --> 00:44:23.990
<v Dominik>einmal irgendwie mit den Parametern nach,

00:44:24.030 --> 00:44:25.190
<v Dominik>wie man sie in echt auch gerne hätte,

00:44:25.830 --> 00:44:27.430
<v Dominik>um die dann in dem Test benutzen zu können,

00:44:27.510 --> 00:44:29.110
<v Dominik>zu gucken, ob die Ergebnisse, die man erwartet,

00:44:29.210 --> 00:44:30.870
<v Dominik>dem entsprechen, was man möchte.

00:44:31.830 --> 00:44:32.070
<v Dominik>Genau.

00:44:33.570 --> 00:44:35.290
<v Florian>Ja, schwierig, das jetzt so in paar

00:44:35.290 --> 00:44:37.030
<v Florian>Sätze zu fassen. Ja, ich finde das auch

00:44:37.030 --> 00:44:38.930
<v Dominik>sehr abstrakt halt. Also wenn man das nicht gut sieht,

00:44:39.010 --> 00:44:41.030
<v Dominik>dann wird das relativ klar. Die Spezialität

00:44:41.030 --> 00:44:42.870
<v Jochen>bei PyTest-Fixers ist halt, dass die so

00:44:42.870 --> 00:44:44.530
<v Jochen>diese magische

00:44:44.530 --> 00:44:46.870
<v Jochen>Dependency-Injection gibt, sodass man halt

00:44:46.870 --> 00:44:49.210
<v Jochen>einfach nur den Namen der Fixer

00:44:49.210 --> 00:44:51.050
<v Jochen>in die Parameter

00:44:51.050 --> 00:44:53.010
<v Jochen>vom Test schreibt und dann das

00:44:53.010 --> 00:44:54.970
<v Jochen>automatisch ausgeführt wird. Genau, dafür schreibt man die Funktion

00:44:54.970 --> 00:44:56.650
<v Dominik>ja quasi in den Conv-Test einfach rein.

00:44:57.010 --> 00:44:59.110
<v Dominik>Ja, nö, musst du nicht. Ja, aber auch das ist schon

00:44:59.110 --> 00:45:01.130
<v Dominik>ja, genau, aber auch gute Frage, ist das eine gute Idee

00:45:01.130 --> 00:45:03.090
<v Jochen>und so? Hängt davon ab.

00:45:04.370 --> 00:45:04.690
<v Jochen>Aber

00:45:04.690 --> 00:45:07.190
<v Jochen>es ist halt, also ich

00:45:07.190 --> 00:45:09.190
<v Jochen>weiß auch nicht, ob man das heute nochmal machen würde, wenn man

00:45:09.190 --> 00:45:11.170
<v Jochen>das nochmal designt, weil das ist schon sehr magisch

00:45:11.170 --> 00:45:12.630
<v Jochen>und ich meine,

00:45:13.050 --> 00:45:15.230
<v Jochen>ansonsten hat man ja, wenn man jetzt eine Funktion einfach aufrufen

00:45:15.230 --> 00:45:17.070
<v Jochen>würde oder so, haben ja auch Support in der IDE, dass man

00:45:17.070 --> 00:45:19.210
<v Jochen>draufklicken kann und landet dann da. Das ist ja jetzt,

00:45:19.290 --> 00:45:21.130
<v Jochen>also bei PyCharm geht das zum Beispiel, dass man halt auf

00:45:21.130 --> 00:45:23.050
<v Jochen>einfach eine, auf eine Fixture

00:45:23.050 --> 00:45:24.770
<v Jochen>in PyTest klickt und dann halt bei dem

00:45:24.770 --> 00:45:26.970
<v Jochen>richtigen Code landet, aber

00:45:26.970 --> 00:45:28.950
<v Jochen>das ist halt natürlich irgendwie nur

00:45:28.950 --> 00:45:30.930
<v Jochen>dadurch, dass da jemand die Arbeit investiert

00:45:30.930 --> 00:45:32.690
<v Jochen>hat, irgendwie das

00:45:32.690 --> 00:45:34.790
<v Jochen>parsen zu können und so. Also

00:45:34.790 --> 00:45:36.350
<v Jochen>das wird wahrscheinlich nicht überall funktionieren.

00:45:36.810 --> 00:45:38.690
<v Dominik>Es gibt auch eine Extension für andere Editoren

00:45:38.690 --> 00:45:39.450
<v Dominik>von deiner Wahl.

00:45:39.790 --> 00:45:42.570
<v Florian>Es ist schon eigenartig, ja.

00:45:42.750 --> 00:45:43.570
<v Florian>Also ich sag so, dass

00:45:43.570 --> 00:45:46.750
<v Florian>inzwischen habe ich es glaube ich raus, wie ich das den Leuten

00:45:46.750 --> 00:45:48.470
<v Florian>erkläre, dass das passt.

00:45:49.270 --> 00:45:50.690
<v Florian>Aber gerade am Anfang mit den

00:45:50.690 --> 00:45:52.670
<v Florian>Trainings war das so der Punkt, wo ich sagen

00:45:52.670 --> 00:45:54.630
<v Florian>musste, ja, ich werde auch jetzt erstmal

00:45:54.630 --> 00:45:56.810
<v Florian>verwirren und irgendwann werde ich es verstehen,

00:45:56.970 --> 00:45:58.670
<v Florian>aber nicht gerade vom ersten Satz.

00:45:58.950 --> 00:46:05.370
<v Dominik>Ja, ich fand das auch sehr, sehr schwierig, also vor allem diesen Unterschied zwischen Modul-Scope, Class-Based-Scope und Function-Based-Scope-Fixtures und sowas.

00:46:06.010 --> 00:46:13.590
<v Dominik>Und erstmal zu verstehen, dass halt eine Fixture irgendwie eigentlich ein Generator ist, der irgendwie halt dieses Setup und Teardown vorher und nachher macht und eigentlich nicht First Returns, sondern eher was Yielded.

00:46:13.590 --> 00:46:25.290
<v Dominik>Und dann, was da so passiert, das war schwer zu verstehen. Also auch diese, dass die Fixtures alle immer neu gebaut werden, dann für jeden Test, Atomar und so, das war alles so ein bisschen, ja, das hat ein bisschen gebraucht, würde ich sagen.

00:46:26.350 --> 00:46:28.990
<v Florian>Gut, das sind jetzt ja alles Dinge mit diesem Caching-Scope

00:46:28.990 --> 00:46:30.730
<v Florian>und Yield und Teardown und so,

00:46:30.850 --> 00:46:32.830
<v Florian>das kommt ja dann erstmal obendrauf auf das

00:46:32.830 --> 00:46:34.090
<v Florian>Grundkonzept. Ja, ja.

00:46:34.650 --> 00:46:36.890
<v Florian>Also um Fixtures an sich erstmal zu verstehen,

00:46:37.010 --> 00:46:38.910
<v Florian>kann man das, glaube ich, das meiste davon weglassen.

00:46:38.950 --> 00:46:40.710
<v Dominik>Ja, ich glaube, meistens fällt man halt irgendwie direkt rüber

00:46:40.710 --> 00:46:42.930
<v Dominik>und die machen halt dann irgendwelche Dinge, die man nicht erwartet

00:46:42.930 --> 00:46:44.710
<v Dominik>und da kann man sich also schon ein bisschen

00:46:44.710 --> 00:46:46.810
<v Dominik>mit in den Fuß schießen. Also ich würde auch empfehlen,

00:46:46.890 --> 00:46:48.870
<v Dominik>also nicht am Anfang zu viel komplexe

00:46:48.870 --> 00:46:50.570
<v Dominik>Tests darzuschreiben, nur vielleicht erstmal ein

00:46:50.570 --> 00:46:52.710
<v Dominik>klein oder ein, zwei kleine und halt

00:46:52.710 --> 00:46:54.870
<v Dominik>einfache Objekte einzugeben, wo man halt guckt,

00:46:55.070 --> 00:46:56.950
<v Dominik>wie die zusammenhängen zum Beispiel

00:46:56.950 --> 00:46:57.610
<v Dominik>oder was die tun.

00:47:01.770 --> 00:47:02.970
<v Dominik>Was ich halt hinterher wirklich

00:47:02.970 --> 00:47:04.970
<v Dominik>schwierig finde, ist dann Objekte zu erzeugen

00:47:04.970 --> 00:47:06.670
<v Dominik>oder viele Objekte oder halt dann, man kann,

00:47:07.350 --> 00:47:08.930
<v Dominik>was halt auch sehr schön ist, was Florian auch

00:47:08.930 --> 00:47:11.250
<v Dominik>gut gezeigt hat, ist irgendwie die Parametrisierung

00:47:11.250 --> 00:47:12.890
<v Dominik>mit beispielsweise Data Classes oder

00:47:12.890 --> 00:47:14.830
<v Dominik>sowas, dass man halt tatsächlich

00:47:14.830 --> 00:47:16.290
<v Dominik>eine Plethora

00:47:16.290 --> 00:47:18.810
<v Dominik>hundert verschiedene Dinge erstellt

00:47:18.810 --> 00:47:20.770
<v Dominik>und automatisiert erzeugt an Tests,

00:47:21.250 --> 00:47:23.010
<v Dominik>die die verschiedenen Edge Cases seiner Fälle

00:47:23.010 --> 00:47:24.350
<v Dominik>dann halt auch beinhalten

00:47:24.350 --> 00:47:26.570
<v Dominik>und man halt dann die Logik testen kann, ob sie da halt

00:47:26.570 --> 00:47:28.630
<v Dominik>noch reißt. Ohne jetzt direkt

00:47:28.630 --> 00:47:30.610
<v Dominik>auf Hypothesis zu gehen, halt Hypothesis

00:47:30.610 --> 00:47:32.550
<v Dominik>testet nochmal, also mit zufälligen

00:47:32.550 --> 00:47:34.510
<v Dominik>Figures, wenn ich das richtig verstehe, ja, oder

00:47:34.510 --> 00:47:36.510
<v Dominik>Zufallswerten für Dinge

00:47:36.510 --> 00:47:37.190
<v Dominik>in den Figures.

00:47:38.250 --> 00:47:40.230
<v Florian>Ja, vielleicht noch kurz zur Parametrisierung.

00:47:40.970 --> 00:47:42.590
<v Florian>Wenn ich mir jetzt PyTest anschauen würde

00:47:42.590 --> 00:47:44.650
<v Florian>und mal so die erste Testfunktion geschrieben habe,

00:47:45.710 --> 00:47:46.530
<v Florian>wäre das sicherlich

00:47:46.530 --> 00:47:48.630
<v Florian>so eines der ersten Dinge, das ich anschauen

00:47:48.630 --> 00:47:50.570
<v Florian>würde, ist auch eines der ersten Dinge

00:47:50.570 --> 00:47:51.750
<v Florian>dann in meinem Training,

00:47:53.290 --> 00:47:55.570
<v Florian>weil das, finde ich, es halt echt einfach

00:47:55.570 --> 00:47:57.590
<v Florian>macht, ziemlich viel abzudecken.

00:47:58.310 --> 00:47:59.490
<v Florian>Wenn man jetzt irgendeine Funktion

00:47:59.490 --> 00:48:01.530
<v Florian>testet, um halt eben nicht einen Input

00:48:01.530 --> 00:48:03.230
<v Florian>und einen Output nur zu testen,

00:48:03.930 --> 00:48:05.590
<v Florian>jetzt mal bei irgendeiner

00:48:05.590 --> 00:48:07.910
<v Florian>langweiligen Utility-Funktion,

00:48:08.070 --> 00:48:09.430
<v Florian>ich habe bei mir zum Beispiel so

00:48:09.430 --> 00:48:11.210
<v Florian>ein Format Seconds, wo ich einfach

00:48:11.210 --> 00:48:13.510
<v Florian>Sekunden übergebe und das dann

00:48:13.510 --> 00:48:15.470
<v Florian>schön formatiere in halt Stunden, Minuten,

00:48:15.590 --> 00:48:16.750
<v Florian>Sekunden beispielsweise.

00:48:17.930 --> 00:48:19.490
<v Dominik>Oder hast du auch eine Seite

00:48:19.490 --> 00:48:21.370
<v Dominik>übrigens, kurzer Exkurs, F-String

00:48:21.370 --> 00:48:22.390
<v Dominik>irgendwie, Docs, kann das sein?

00:48:23.190 --> 00:48:24.370
<v Dominik>fstring.help, genau.

00:48:24.370 --> 00:48:26.390
<v Jochen>Oh ja, die habe ich auch schon oft

00:48:26.390 --> 00:48:27.930
<v Jochen>angeguckt.

00:48:28.210 --> 00:48:29.350
<v Jochen>Eine Webseite von mir,

00:48:31.010 --> 00:48:32.410
<v Jochen>habe ich mal irgendwo an der PyCon

00:48:32.410 --> 00:48:34.270
<v Florian>Germany, ich wollte es schon seit Jahren

00:48:34.270 --> 00:48:36.550
<v Florian>machen und dann kamen da die Lightning Talks

00:48:36.550 --> 00:48:37.930
<v Florian>an der PyCon Germany und dann

00:48:37.930 --> 00:48:40.210
<v Florian>abends vor den Lightning Talks habe ich die noch kurz

00:48:40.210 --> 00:48:42.270
<v Florian>gemacht, um sie dann

00:48:42.270 --> 00:48:43.890
<v Florian>eben da vorstellen zu können.

00:48:44.150 --> 00:48:46.390
<v Dominik>Ja, aber die ist echt super, weil sowas hat echt gefehlt, wenn ich zwischendurch da reingucke.

00:48:46.650 --> 00:48:47.130
<v Dominik>Das ist echt gut.

00:48:48.350 --> 00:48:48.930
<v Dominik>Habe ich gerne.

00:48:49.930 --> 00:48:51.050
<v Dominik>Ja, Parameterization.

00:48:52.430 --> 00:49:06.630
<v Florian>Macht es einem eben einfach, um dann aus einer Testfunktion, die nur einen Wert testet, den so zu erweitern, um zum Beispiel 10 oder 20 Werte zu testen, ohne 10 oder 20 separate Funktionen dafür schreiben zu müssen.

00:49:07.530 --> 00:49:11.470
<v Florian>Und das ist sowas, das vermisse ich dann sehr schnell in anderen Testframes.

00:49:11.470 --> 00:49:13.210
<v Florian>Merks. Meistens geht das schon irgendwie,

00:49:13.890 --> 00:49:15.650
<v Florian>aber halt mit einer aufwendigeren Syntax

00:49:15.650 --> 00:49:17.690
<v Florian>als in Python oder als mit PyTest.

00:49:19.110 --> 00:49:21.310
<v Florian>Ja, genau.

00:49:21.550 --> 00:49:23.590
<v Jochen>Also PyTest Parameterize ist halt

00:49:23.590 --> 00:49:25.410
<v Jochen>irgendwie dann der Dekorator, den man da

00:49:25.410 --> 00:49:27.290
<v Jochen>verwendet. Den benutze ich auch ständig.

00:49:27.810 --> 00:49:29.550
<v Jochen>Aber es gibt auch noch eine andere Möglichkeit.

00:49:29.710 --> 00:49:31.010
<v Jochen>Man kann auch irgendwie Fixtures,

00:49:32.350 --> 00:49:33.330
<v Jochen>die können irgendwie mehrere

00:49:33.330 --> 00:49:35.550
<v Jochen>Dinge zurückgeben und dann werden auch

00:49:35.550 --> 00:49:37.430
<v Jochen>quasi

00:49:37.430 --> 00:49:39.090
<v Jochen>sozusagen wie unterschiedliche Parameter,

00:49:39.550 --> 00:49:41.370
<v Jochen>also wird der Test auch mehrfach ausgeführt mit den

00:49:41.370 --> 00:49:43.250
<v Dominik>Du meinst, wenn du mehrfach hintereinander yieldest,

00:49:43.450 --> 00:49:45.170
<v Dominik>weil das beim ersten Aufbruch, beim zweiten Aufbruch

00:49:45.170 --> 00:49:46.210
<v Dominik>und beim dritten Aufbruch passiert?

00:49:46.210 --> 00:49:48.750
<v Jochen>Nee, ich weiß es gar nicht mehr genau.

00:49:49.990 --> 00:49:50.650
<v Jochen>Nee, du kannst

00:49:50.650 --> 00:49:52.250
<v Florian>im Fixture Decorator

00:49:52.250 --> 00:49:54.290
<v Florian>kannst du dann nochmal eine Liste von Params

00:49:54.290 --> 00:49:54.830
<v Florian>angeben.

00:49:56.390 --> 00:49:58.490
<v Florian>Und dann wird jeder Test, der die Fixture nutzt,

00:49:58.570 --> 00:49:59.690
<v Florian>wird halt mehrmals ausgeführt.

00:50:00.710 --> 00:50:02.330
<v Florian>Mit der Idee, wenn du irgendwie

00:50:02.330 --> 00:50:04.310
<v Florian>mehrere Backends hast oder

00:50:04.310 --> 00:50:06.390
<v Florian>mehrere Implementationen, die sich aber eigentlich

00:50:06.390 --> 00:50:07.450
<v Florian>gleich verhalten sollen,

00:50:08.070 --> 00:50:10.210
<v Florian>dass dann halt eine ganze Batterie von Tests

00:50:10.210 --> 00:50:12.470
<v Florian>über beide beispielsweise laufen lassen kannst.

00:50:12.910 --> 00:50:14.490
<v Florian>Ja, genau.

00:50:14.530 --> 00:50:16.370
<v Jochen>Mir war das nur in Erinnerung geblieben, als das auch

00:50:16.370 --> 00:50:18.350
<v Jochen>eine Art, wie man Parametrisierung machen

00:50:18.350 --> 00:50:20.310
<v Jochen>könnte, aber tatsächlich sehe ich

00:50:20.310 --> 00:50:22.210
<v Jochen>eigentlich auch immer eher nur PyTest, Parametrize

00:50:22.210 --> 00:50:24.150
<v Jochen>und den anderen Weg eigentlich. Genau, du kannst halt

00:50:24.150 --> 00:50:26.090
<v Dominik>beide Sachen gehen, entweder direkt an den Testrandschreiben

00:50:26.090 --> 00:50:28.150
<v Dominik>oder halt an die Fiction. Genau,

00:50:28.250 --> 00:50:29.770
<v Florian>aber jetzt sicherlich ein bisschen exotischer.

00:50:33.450 --> 00:50:34.270
<v Florian>Ja, das ist

00:50:34.270 --> 00:50:35.890
<v Dominik>halt ganz nützlich, gerade für das Teardown.

00:50:36.230 --> 00:50:38.130
<v Dominik>Die Frage ist halt, nutzt ihr irgendwie sowas wie

00:50:38.130 --> 00:50:40.250
<v Dominik>Factories oder sowas, also, dass man

00:50:40.250 --> 00:50:42.510
<v Dominik>dann Objekte zusammenbaut,

00:50:42.610 --> 00:50:44.370
<v Dominik>ja, man könnte ja eine Factory schreiben,

00:50:44.510 --> 00:50:46.330
<v Dominik>um einen User zu erzeugen, was da alles rein muss,

00:50:46.430 --> 00:50:48.330
<v Dominik>der dann zum Beispiel Defaults enthält,

00:50:48.430 --> 00:50:50.210
<v Dominik>da habe ich einen schönen Blog-Eintrag

00:50:50.210 --> 00:50:51.290
<v Dominik>zugesehen, wie man

00:50:51.290 --> 00:50:53.350
<v Dominik>das ordentlich machen soll,

00:50:54.170 --> 00:50:56.370
<v Dominik>irgendwie, ja, weil es gab zwischendurch mal so eine Bibliothek,

00:50:56.450 --> 00:50:58.310
<v Dominik>die hieß Factory Boy,

00:50:58.390 --> 00:51:00.210
<v Dominik>die habe ich dann irgendwann wieder rausgeschmissen, die dann solche

00:51:00.210 --> 00:51:02.310
<v Dominik>Sachen machte, aber nicht so

00:51:02.310 --> 00:51:04.150
<v Dominik>wie das, wie ich das

00:51:04.150 --> 00:51:05.610
<v Dominik>schön fand, also mittlerweile glaube ich,

00:51:05.830 --> 00:51:08.110
<v Dominik>man nimmt halt irgendwie dann einzelne Dinge

00:51:08.110 --> 00:51:09.950
<v Dominik>von Faker vielleicht, um sich

00:51:09.950 --> 00:51:11.450
<v Dominik>Zufallssachen auch erstellen zu lassen.

00:51:12.570 --> 00:51:14.190
<v Jochen>Ja, denke ich, ist aber ein anderes Problem.

00:51:14.470 --> 00:51:16.170
<v Jochen>Also ja. Und dann baut

00:51:16.170 --> 00:51:18.070
<v Dominik>halt dann diese Funktion halt dann zufällig

00:51:18.070 --> 00:51:19.870
<v Dominik>Objekte zusammen und dann könnte man zum Beispiel sagen,

00:51:20.090 --> 00:51:22.010
<v Dominik>parametrisiere das mal für keine Ahnung

00:51:22.010 --> 00:51:23.210
<v Dominik>10 oder 20 zufällige

00:51:23.210 --> 00:51:26.010
<v Dominik>Nutzer aus so einem

00:51:26.010 --> 00:51:28.010
<v Dominik>Factory heraus und benutze

00:51:28.010 --> 00:51:29.870
<v Dominik>halt einfach mal, was die Tests natürlich

00:51:29.870 --> 00:51:32.190
<v Dominik>nicht ganz so reproduzierbar

00:51:32.190 --> 00:51:33.850
<v Dominik>macht vielleicht, aber vielleicht dann halt auch doch.

00:51:34.470 --> 00:51:36.110
<v Dominik>Je nachdem, wie man das halt festgelegt hat.

00:51:36.270 --> 00:51:37.690
<v Dominik>Das wäre halt dann interessant.

00:51:38.110 --> 00:51:40.350
<v Dominik>wie oft man das laufen lässt, um zu gucken,

00:51:40.850 --> 00:51:41.930
<v Dominik>ist das Ergebnis immer gleich?

00:51:42.550 --> 00:51:44.090
<v Dominik>Hat man einen Spitalfall, wo es nicht passt?

00:51:45.050 --> 00:51:46.270
<v Dominik>Hat man einen Fehler in der Factory gebaut?

00:51:47.010 --> 00:51:48.330
<v Dominik>Nimmt man vielleicht sogar die Factory

00:51:48.330 --> 00:51:50.530
<v Dominik>später auch für den eigentlichen Programmcode,

00:51:50.590 --> 00:51:52.410
<v Dominik>um dann wirklich was Neues zu erzeugen?

00:51:54.050 --> 00:51:54.550
<v Dominik>Ja, ich

00:51:54.550 --> 00:51:56.970
<v Florian>weiß jetzt nicht, wie sinnvoll ich das halte.

00:51:56.970 --> 00:51:59.110
<v Florian>Also, so gezielt

00:51:59.110 --> 00:52:01.230
<v Florian>sowas zu nutzen, wäre jetzt auch eine Hypothesis,

00:52:01.390 --> 00:52:03.030
<v Florian>was wir sicherlich noch

00:52:03.030 --> 00:52:03.850
<v Florian>darauf sprechen werden.

00:52:04.050 --> 00:52:06.110
<v Florian>Also, Jochen, uns wird auch kurz nicht stören.

00:52:07.070 --> 00:52:09.930
<v Jochen>Ja, ich hab sowas, Factory Boy und sowas

00:52:09.930 --> 00:52:11.870
<v Jochen>früher mal verwendet, aber ich mach das eigentlich

00:52:11.870 --> 00:52:12.610
<v Jochen>inzwischen nicht mehr.

00:52:13.750 --> 00:52:15.130
<v Jochen>Ich hab...

00:52:15.130 --> 00:52:17.310
<v Jochen>Mach doch kurz fertig.

00:52:17.510 --> 00:52:19.690
<v Jochen>Ja, also einfach deswegen, weil

00:52:19.690 --> 00:52:21.570
<v Jochen>ich finde, das macht einfach zu viel Magie

00:52:21.570 --> 00:52:24.010
<v Jochen>mit irgendwelchen... Da hast du dann auch wieder so Dekoratoren

00:52:24.010 --> 00:52:25.750
<v Jochen>für die...

00:52:25.750 --> 00:52:27.710
<v Jochen>Also, und

00:52:27.710 --> 00:52:29.450
<v Jochen>ich weiß gar nicht, ob diese Magie so viel bringt.

00:52:29.730 --> 00:52:31.850
<v Jochen>Also, das ist immer so. Das Verhältnis von wie viel Magie

00:52:31.850 --> 00:52:33.790
<v Jochen>ist da und wie schwer ist das zu verstehen im Verhältnis zu wie viel

00:52:33.790 --> 00:52:35.790
<v Jochen>Nutzen bringt, das ist für mich jetzt inzwischen

00:52:35.790 --> 00:52:37.850
<v Jochen>nicht mehr so, also diese

00:52:37.850 --> 00:52:39.630
<v Jochen>Relation ist nicht so, dass ich sagen würde,

00:52:39.750 --> 00:52:41.810
<v Jochen>das ist total sinnvoll, das zu verwenden, sondern ich denke mir eher so

00:52:41.810 --> 00:52:43.950
<v Jochen>inzwischen ist halt

00:52:43.950 --> 00:52:45.910
<v Jochen>auch irgendwie, wenn man halt

00:52:45.910 --> 00:52:47.770
<v Jochen>ordentliche Funktionen, die solche Daten generieren,

00:52:47.890 --> 00:52:49.270
<v Jochen>schreibt, halt auch mit entsprechend

00:52:49.270 --> 00:52:51.970
<v Jochen>benannten, weiß ich nicht, Keyword-Only-

00:52:51.970 --> 00:52:53.750
<v Jochen>Argumenten oder so, dann ist das eigentlich mal die

00:52:53.750 --> 00:52:55.750
<v Jochen>bessere Variante. Und ich habe

00:52:55.750 --> 00:52:57.630
<v Jochen>auch oft jetzt in Projekten inzwischen

00:52:57.630 --> 00:53:00.230
<v Jochen>sowas wie so ein Dev-Data-Modul

00:53:00.230 --> 00:53:01.750
<v Jochen>oder so, wo ich mir halt Daten für

00:53:01.750 --> 00:53:03.790
<v Jochen>bestimmte, und das brauche ich halt

00:53:03.790 --> 00:53:05.610
<v Jochen>nicht nur für Tests, sondern halt auch einfach, um

00:53:05.610 --> 00:53:07.770
<v Jochen>Applikation gezielt in bestimmte Zustände

00:53:07.770 --> 00:53:09.570
<v Jochen>versetzen zu können, um halt zum Beispiel

00:53:09.570 --> 00:53:11.810
<v Jochen>irgendwas zeigen zu können oder so, dass ich halt

00:53:11.810 --> 00:53:13.610
<v Jochen>mir für diese Fälle, die ich dann habe,

00:53:13.690 --> 00:53:15.650
<v Jochen>halt immer irgendwie sowas schreibe, wo ich

00:53:15.650 --> 00:53:17.170
<v Jochen>dann einfach nur eine Funktion aufrufe,

00:53:17.670 --> 00:53:19.930
<v Jochen>wo ich sagen kann, okay, versetz meinen Applikationszustand

00:53:19.930 --> 00:53:21.890
<v Jochen>mal in dieses, also meine Applikation

00:53:21.890 --> 00:53:23.770
<v Jochen>mal in diesen Zustand, wenn ich irgendwas demonstrieren

00:53:23.770 --> 00:53:25.630
<v Jochen>kann und das kann ich dann halt auch für Tests

00:53:25.630 --> 00:53:27.510
<v Jochen>verwenden. Das heißt, sozusagen

00:53:27.510 --> 00:53:29.510
<v Jochen>dieses Generieren von diesen Daten oder so ist schon

00:53:29.510 --> 00:53:31.410
<v Jochen>in meiner Applikation drin und das benutze ich dann

00:53:31.410 --> 00:53:33.570
<v Jochen>in den Tests halt auch und ich benutze

00:53:33.570 --> 00:53:35.510
<v Jochen>eigentlich sowas wie Factory Boy und sowas gar nicht mehr.

00:53:35.610 --> 00:53:37.710
<v Dominik>Ich habe gerade den Blogartikel gefunden, den ich

00:53:37.710 --> 00:53:39.510
<v Dominik>meinte. Hast du den von Luke Plant?

00:53:39.690 --> 00:53:41.390
<v Dominik>Luke Plant, genau. Ja, okay. Ja, der ist gut.

00:53:41.630 --> 00:53:43.710
<v Dominik>Ja, und so ähnlich habe ich das auch dann, glaube ich,

00:53:43.710 --> 00:53:44.470
<v Dominik>versucht umzubauen.

00:53:45.770 --> 00:53:47.890
<v Dominik>Ja, weil der macht dann quasi ja auch so ein...

00:53:47.890 --> 00:53:49.910
<v Dominik>Das ist halt quasi das, was ich meinte, ne? Default Keyword

00:53:49.910 --> 00:53:51.510
<v Dominik>Arguments mit vielleicht einem Faker dazu

00:53:51.510 --> 00:53:53.870
<v Dominik>und dann hast du halt eine parametrisierbare

00:53:53.870 --> 00:53:55.810
<v Jochen>Art und Weise. Ja, und Faker ist halt nochmal eine

00:53:55.810 --> 00:53:57.790
<v Jochen>andere Geschichte, wo es einfach darum geht, dass

00:53:57.790 --> 00:53:59.770
<v Jochen>man halt, wenn man jetzt, dass man sich

00:53:59.770 --> 00:54:01.270
<v Jochen>nicht als Faker selber ausdenken muss,

00:54:01.410 --> 00:54:03.530
<v Jochen>dass man plausible Daten hat. Okay, ja.

00:54:03.730 --> 00:54:06.150
<v Dominik>Du kannst FEC ja auch den Seed mitgeben zum Beispiel.

00:54:06.350 --> 00:54:07.630
<v Dominik>Ja, und dann ist es immer gleich.

00:54:10.330 --> 00:54:17.290
<v Florian>Ja, vielleicht wäre das jetzt gerade der Punkt, um noch was zur Hypothesis zu sagen.

00:54:17.670 --> 00:54:18.430
<v Florian>Ja, klingt gut.

00:54:19.310 --> 00:54:23.030
<v Florian>Das ist ein Projekt, das erstmal nicht viel mit PyTest zu tun hat,

00:54:23.030 --> 00:54:25.670
<v Florian>aber sich halt doch gut in PyTest integriert.

00:54:26.850 --> 00:54:29.910
<v Florian>Zu sogenannten Property-Based Testing.

00:54:30.830 --> 00:54:33.610
<v Florian>Man kann sich das so ein bisschen wie ein Fuzzer vorstellen.

00:54:33.730 --> 00:54:35.790
<v Florian>was also Zufallsdaten generiert.

00:54:36.910 --> 00:54:37.810
<v Florian>Ja, man kann mir zum Beispiel sagen,

00:54:37.870 --> 00:54:39.770
<v Dominik>gib mir irgendeinen Integer und dann nimmt der

00:54:39.770 --> 00:54:41.390
<v Dominik>alle, die er finden kann.

00:54:42.110 --> 00:54:43.690
<v Florian>Ja, jetzt nicht alle. Ich glaube, standardmäßig

00:54:43.690 --> 00:54:45.550
<v Florian>führt es dann halt 200 Mal oder so

00:54:45.550 --> 00:54:47.730
<v Florian>die Testfunktion aus. Also nicht

00:54:47.730 --> 00:54:49.630
<v Florian>so viel. Und

00:54:49.630 --> 00:54:51.690
<v Florian>alle Integer werden eh schwierig.

00:54:53.530 --> 00:54:53.970
<v Florian>Also

00:54:53.970 --> 00:54:55.590
<v Dominik>das kann auch sehr langsam werden.

00:54:59.370 --> 00:55:01.590
<v Florian>Aber halt mit der Idee, dass man sich eben

00:55:01.590 --> 00:55:03.390
<v Florian>so Strategien zusammenbauen kann,

00:55:03.530 --> 00:55:07.630
<v Florian>also auch sagen kann, ich will jetzt gerne irgendwie Dictionaries

00:55:07.630 --> 00:55:11.410
<v Florian>und die Keys sollen Strings sein, aber nur mit ASCII-Zeichen

00:55:11.410 --> 00:55:15.190
<v Florian>und die Values sollen dann irgendwie Listen sein

00:55:15.190 --> 00:55:19.030
<v Florian>und die Elemente darin sollen dann irgendwie das und das sein

00:55:19.030 --> 00:55:23.290
<v Florian>oder auch passend beispielsweise auch auf ein Django-Model

00:55:23.290 --> 00:55:27.290
<v Florian>und sowas. Und dann kann man sich mit diesen Strategien

00:55:27.290 --> 00:55:30.690
<v Florian>halt ein bisschen gezielter Daten generieren

00:55:30.690 --> 00:55:32.970
<v Florian>und dann halt eben auf seine Funktionen

00:55:32.970 --> 00:55:34.730
<v Florian>loslassen. Und

00:55:34.730 --> 00:55:36.710
<v Florian>gerade bei so bestimmten Arten von

00:55:36.710 --> 00:55:38.490
<v Florian>Code, gerade wenn es darum geht,

00:55:38.630 --> 00:55:40.730
<v Florian>Dinge aus einem String zu parsen

00:55:40.730 --> 00:55:42.770
<v Florian>oder so, ist das

00:55:42.770 --> 00:55:44.990
<v Florian>relativ einfach, sich da so eine Strategie

00:55:44.990 --> 00:55:46.910
<v Florian>auszudenken oder auch einfach zu sagen,

00:55:47.090 --> 00:55:48.890
<v Florian>schmeiß da bitte mal Zufallsdaten hin.

00:55:50.150 --> 00:55:50.790
<v Florian>Einfach zufällige

00:55:50.790 --> 00:55:52.750
<v Florian>Strings. Und dann, wenn es

00:55:52.750 --> 00:55:54.530
<v Florian>geht, noch irgendwelche

00:55:54.530 --> 00:55:56.630
<v Florian>Invariants zu testen. Also Dinge, die

00:55:56.630 --> 00:55:58.610
<v Florian>immer wahr sein sollen, egal was der

00:55:58.610 --> 00:56:00.330
<v Florian>Input ist. Also wenn man

00:56:00.330 --> 00:56:02.990
<v Florian>ein Compress und ein Decompress

00:56:02.990 --> 00:56:04.710
<v Florian>hat, dann kann man das einmal durchlassen,

00:56:04.830 --> 00:56:06.470
<v Florian>einmal sagen, Compress, einmal

00:56:06.470 --> 00:56:08.510
<v Florian>Decompress, dann soll das Gleiche wieder

00:56:08.510 --> 00:56:09.090
<v Florian>rauskommen.

00:56:10.830 --> 00:56:12.430
<v Florian>Decrypt, Encrypt, Encode,

00:56:12.530 --> 00:56:14.730
<v Florian>Decode, alles so diese Paare,

00:56:14.810 --> 00:56:16.230
<v Florian>die sich halt umkehren sollten.

00:56:17.070 --> 00:56:18.290
<v Florian>Ja, dann merkt man relativ schnell, ob man

00:56:18.290 --> 00:56:19.610
<v Florian>irgendeinen Case hat, wo, ups.

00:56:21.170 --> 00:56:22.730
<v Florian>Genau, dann lässt man das mal laufen

00:56:22.730 --> 00:56:24.750
<v Florian>und dann ist die Chance

00:56:24.750 --> 00:56:26.730
<v Florian>relativ groß, dass Hypothesis halt mit

00:56:26.730 --> 00:56:28.630
<v Florian>irgendeinem komischen Corner-Case kommt,

00:56:28.730 --> 00:56:30.050
<v Florian>den man echt nicht bedacht hatte.

00:56:31.330 --> 00:56:32.870
<v Dominik>Ja, das ist mir auch schon öfters

00:56:32.870 --> 00:56:33.910
<v Dominik>auf die Füße gefallen. Hat mir dann

00:56:33.910 --> 00:56:36.830
<v Dominik>die Augen geöffnet, warum mir zwischendurch irgendwas Komisches passierte,

00:56:36.890 --> 00:56:37.870
<v Dominik>was man irgendwie nicht erwartet hätte.

00:56:38.530 --> 00:56:40.630
<v Dominik>Muss man doch mal drüber nachdenken. Was mache ich denn da überhaupt eigentlich?

00:56:42.410 --> 00:56:43.210
<v Dominik>Irgendwann was kaputt ist,

00:56:43.230 --> 00:56:44.710
<v Dominik>was schon immer so ein bisschen...

00:56:44.710 --> 00:56:46.130
<v Dominik>Ja, ich glaube, das muss ich mir mal...

00:56:46.130 --> 00:56:48.850
<v Jochen>Ich habe das schon mal ausprobiert, aber ich habe es noch nicht wirklich

00:56:48.850 --> 00:56:50.670
<v Jochen>häufig irgendwie

00:56:50.670 --> 00:56:52.630
<v Jochen>in den Dingen so verwendet, die ich so mache.

00:56:53.610 --> 00:56:53.750
<v Jochen>Ja.

00:56:54.590 --> 00:56:56.890
<v Dominik>Also ich hatte das Gefühl tatsächlich, dass es so ein bisschen langsam ist,

00:56:57.010 --> 00:56:58.810
<v Dominik>aber dann kann man das ja auch, glaube ich,

00:56:58.870 --> 00:57:00.290
<v Dominik>aufzeichnen, glaube ich.

00:57:01.110 --> 00:57:02.790
<v Dominik>Ja, die Idee

00:57:02.790 --> 00:57:04.450
<v Florian>davon ist eigentlich, dass es eben nicht langsam

00:57:04.450 --> 00:57:06.810
<v Florian>ist, dass man es halt

00:57:06.810 --> 00:57:08.970
<v Florian>als Teil seinen normalen

00:57:08.970 --> 00:57:10.130
<v Florian>Tests laufen lassen kann.

00:57:10.130 --> 00:57:12.610
<v Dominik>Aber für mich war das immer so ein Punkt,

00:57:12.670 --> 00:57:14.010
<v Dominik>wo ich dann angefangen habe, tatsächlich die Sachen

00:57:14.010 --> 00:57:15.610
<v Dominik>einzuschränken. Also wenn ich halt gemerkt habe,

00:57:15.650 --> 00:57:17.850
<v Dominik>okay, Herr Passus, jetzt langsam halt eine Unit

00:57:17.850 --> 00:57:20.110
<v Dominik>laufen lassen mit maximal möglichen

00:57:20.110 --> 00:57:22.150
<v Dominik>Parametern und dann war es halt

00:57:22.150 --> 00:57:24.030
<v Dominik>natürlich langsam, hat der Test dann vielleicht auch mal fast eine Minute

00:57:24.030 --> 00:57:26.030
<v Dominik>gedauert oder so, aber dann habe ich halt tatsächlich

00:57:26.030 --> 00:57:28.110
<v Dominik>Xcades gefunden, die ich rausschmeißen konnte und konnte

00:57:28.110 --> 00:57:29.850
<v Dominik>dann mir sinnvoll überlegen, okay,

00:57:30.270 --> 00:57:32.050
<v Dominik>der Eingabewert ist jetzt vielleicht doch nur maximal

00:57:32.050 --> 00:57:33.550
<v Dominik>siebenstellig oder so, ja,

00:57:33.990 --> 00:57:35.830
<v Dominik>und nicht noch mehr. Und dann wurde dann

00:57:35.830 --> 00:57:38.090
<v Dominik>der Test natürlich dann viel schneller und dann habe ich halt gesagt,

00:57:38.170 --> 00:57:40.610
<v Dominik>ja, sorry, aber mehr ist jetzt hier einfach nicht erlaubt

00:57:40.610 --> 00:57:42.090
<v Dominik>und das halt direkt mit

00:57:42.090 --> 00:57:44.190
<v Dominik>abgefangen. Und so, das war

00:57:44.190 --> 00:57:45.990
<v Dominik>glaube ich, ja, an der Stelle eine gute

00:57:45.990 --> 00:57:48.050
<v Dominik>Strategie, um mal so ein bisschen so die Grenzen zu gucken,

00:57:48.150 --> 00:57:50.070
<v Dominik>was überhaupt an I.O. da sinnvoll ist

00:57:50.070 --> 00:57:52.210
<v Dominik>auch. Oder so eine Sanitization

00:57:52.210 --> 00:57:53.990
<v Dominik>zu machen an zwei Stellen oder so, was gut ist.

00:57:54.030 --> 00:57:55.690
<v Dominik>Ja, und am Schluss

00:57:55.690 --> 00:57:57.610
<v Florian>muss halt auch der Code, der dann irgendwas

00:57:57.610 --> 00:57:59.510
<v Florian>testet, genug schnell sein, dass man den

00:57:59.510 --> 00:58:01.430
<v Florian>200 Mal laufen lassen kann und es dann

00:58:01.430 --> 00:58:03.450
<v Florian>trotzdem nur idealerweise in Bruchteilen

00:58:03.450 --> 00:58:04.250
<v Florian>eine Sekunde geht.

00:58:05.150 --> 00:58:06.850
<v Florian>Das ist nicht immer der Fall.

00:58:08.410 --> 00:58:08.610
<v Florian>Ja.

00:58:09.630 --> 00:58:11.690
<v Jochen>Ja, das ist auch so ein interessantes Thema,

00:58:11.950 --> 00:58:13.630
<v Jochen>finde ich. Also ich mag

00:58:13.630 --> 00:58:15.750
<v Jochen>das sehr gerne, wenn Tests halbwegs schnell durchlaufen.

00:58:16.010 --> 00:58:17.390
<v Jochen>Ich finde das immer sehr frustrierend, wenn

00:58:17.390 --> 00:58:19.530
<v Jochen>Projekte so, wenn die Tests

00:58:19.530 --> 00:58:21.330
<v Jochen>so ewig brauchen, weil das halt auch

00:58:21.330 --> 00:58:23.270
<v Jochen>macht das Entwickeln irgendwie echt langsam.

00:58:23.530 --> 00:58:25.270
<v Dominik>Ja, also idealerweise halt ein, zwei Sekunden

00:58:25.270 --> 00:58:27.050
<v Dominik>nebenbei in der IDE, dann kann man sie dann

00:58:27.050 --> 00:58:29.250
<v Dominik>parallel laufen lassen und sieht direkt, wenn man irgendwas kaputt

00:58:29.250 --> 00:58:30.050
<v Dominik>gemacht hat.

00:58:31.250 --> 00:58:32.030
<v Dominik>Das ist auch gut.

00:58:32.430 --> 00:58:35.390
<v Florian>Ja, wäre schön, aber bei größeren Projekten

00:58:35.390 --> 00:58:37.870
<v Jochen>ist es

00:58:37.870 --> 00:58:39.090
<v Jochen>irgendwann nicht mehr realistisch.

00:58:39.550 --> 00:58:39.970
<v Jochen>Aber da,

00:58:40.410 --> 00:58:43.090
<v Dominik>dafür gibt es ja Testmarker.

00:58:45.350 --> 00:58:47.190
<v Dominik>Man könnte jetzt hingehen, könnte alle Tests, die

00:58:47.190 --> 00:58:49.450
<v Dominik>nicht so schnell gehen, als langsam markieren oder sowas

00:58:49.450 --> 00:58:51.390
<v Dominik>und die halt nicht immer parallel laufen lassen, sondern nur

00:58:51.390 --> 00:58:53.230
<v Dominik>dann, wenn man es explizit möchte oder in der

00:58:53.230 --> 00:58:55.210
<v Dominik>Pipeline oder so und nur die

00:58:55.210 --> 00:58:57.290
<v Dominik>schnellen standardmäßig nebenbei von der

00:58:57.290 --> 00:58:58.110
<v Dominik>IDE prüfen lassen.

00:58:59.870 --> 00:59:01.370
<v Florian>Ja, kommt halt auch ein bisschen darauf an,

00:59:01.430 --> 00:59:02.690
<v Florian>wie viele Tests man da hat.

00:59:03.990 --> 00:59:05.410
<v Florian>Also wenn ich mir jetzt PyTest

00:59:05.410 --> 00:59:07.090
<v Florian>selbst anschaue, wenn ich mir QBrowser

00:59:07.090 --> 00:59:09.270
<v Florian>anschaue, dann ist das irgendwas Vierstelliges

00:59:09.270 --> 00:59:11.010
<v Florian>und

00:59:11.010 --> 00:59:13.350
<v Florian>dann wird es zeitlich halt einfach knapp, auch wenn

00:59:13.350 --> 00:59:15.330
<v Florian>die Tests selbst relativ schnell sind.

00:59:15.330 --> 00:59:17.030
<v Florian>Das ist jetzt bei QBrowser nicht der Fall.

00:59:17.170 --> 00:59:19.030
<v Florian>Da sind es relativ viele End-to-End-Tests

00:59:19.030 --> 00:59:20.790
<v Florian>und halt GUI-Applikationen und so.

00:59:21.830 --> 00:59:23.630
<v Florian>Aber selbst wenn die Tests schnell sind,

00:59:23.710 --> 00:59:25.710
<v Florian>wenn es noch ein paar Tausende sind sogar

00:59:25.710 --> 00:59:27.710
<v Florian>in einem größeren Projekt, dann ist das

00:59:27.710 --> 00:59:29.210
<v Florian>Endergebnis halt nicht mehr so schnell.

00:59:31.870 --> 00:59:33.930
<v Florian>Ja, irgendwann kann man halt nichts mehr machen.

00:59:34.490 --> 00:59:35.730
<v Florian>Was vielleicht noch ganz

00:59:35.730 --> 00:59:39.250
<v Jochen>was man ja eventuell machen könnte, aber

00:59:39.250 --> 00:59:41.270
<v Jochen>meistens, das hat man ja vielleicht auch nicht immer,

00:59:41.430 --> 00:59:43.530
<v Jochen>was testet dann letztlich, gut, ich meine,

00:59:43.630 --> 00:59:45.350
<v Jochen>ich bin jetzt da eher im

00:59:45.350 --> 00:59:47.550
<v Jochen>Web-Anwendungsumfeld unterwegs, was da

00:59:47.550 --> 00:59:49.210
<v Jochen>die Tests langsam macht, ist halt immer, wenn man irgendwie

00:59:49.210 --> 00:59:51.590
<v Jochen>Datenbankzugriffe macht oder so und testet, dann ist halt

00:59:51.590 --> 00:59:52.330
<v Jochen>das halt mal langsam.

00:59:53.530 --> 00:59:55.590
<v Jochen>Jetzt könnte man natürlich, das weiß ich nicht,

00:59:55.690 --> 00:59:57.630
<v Jochen>ich habe das ehrlich gesagt noch nie, ich habe es einmal selber gemacht,

00:59:57.830 --> 00:59:59.090
<v Jochen>auch um es auszuprobieren.

00:59:59.890 --> 01:00:01.390
<v Jochen>Was man da ja tun könnte, ist halt so

01:00:01.390 --> 01:00:03.670
<v Jochen>Repository-Pattern oder so verwenden und dann

01:00:03.670 --> 01:00:05.610
<v Jochen>halt quasi die Datenbank weg abstrahieren und dann

01:00:05.610 --> 01:00:07.850
<v Jochen>für die Tests halt durch irgendwie eine Dummy-Datenbank

01:00:07.850 --> 01:00:09.450
<v Jochen>ersetzen, die halt dann schnell ist und dann sind die

01:00:09.450 --> 01:00:10.330
<v Jochen>nicht mehr langsam.

01:00:11.390 --> 01:00:13.710
<v Jochen>Hast du schon mal gesehen, dass das jemand erfolgreich gemacht hat

01:00:13.710 --> 01:00:15.550
<v Jochen>und dass es in einem größeren Projekt dann wirklich gut

01:00:15.550 --> 01:00:17.450
<v Jochen>funktioniert hat? Weil, ja,

01:00:17.610 --> 01:00:18.550
<v Jochen>das könnte ja ein Weg sein.

01:00:19.890 --> 01:00:24.510
<v Florian>Ja, ich bin jetzt nicht so viel im Web-Umfeld unterwegs.

01:00:24.510 --> 01:00:28.130
<v Florian>Ich habe ein Projekt, was ich maintaine, ein Studentenportal.

01:00:28.690 --> 01:00:35.330
<v Florian>So ein Portal für Lernhilfen und Zitate von Dozierenden und so was,

01:00:35.430 --> 01:00:37.050
<v Florian>halt von Studierenden für Studierende.

01:00:38.430 --> 01:00:41.790
<v Florian>Und das ist eine Django-Applikation und da hatten wir das mal diskutiert

01:00:41.790 --> 01:00:44.390
<v Florian>und sind dann zum Schluss gekommen,

01:00:44.490 --> 01:00:48.490
<v Florian>dass wir einfach zu viele datenbankspezifische Kleinigkeiten haben.

01:00:49.510 --> 01:00:51.130
<v Florian>Also spätestens, wo du halt

01:00:51.130 --> 01:00:52.950
<v Florian>irgendeine Fulltext-Suche verwendest

01:00:52.950 --> 01:00:55.050
<v Florian>und das halt dann so PostgreSQL

01:00:55.050 --> 01:00:56.530
<v Florian>Fulltext-Search nutzt,

01:00:57.250 --> 01:00:59.330
<v Florian>dann kannst du das nicht mal so auf die Schnelle

01:00:59.330 --> 01:01:00.370
<v Florian>ersetzen.

01:01:01.010 --> 01:01:03.210
<v Florian>Oder wenn du es kannst, läuft es also in die

01:01:03.210 --> 01:01:05.130
<v Florian>Gefahr, dass die Tests dann überhaupt nicht

01:01:05.130 --> 01:01:07.030
<v Florian>mehr das testen, was eigentlich in der Realität

01:01:07.030 --> 01:01:08.410
<v Florian>läuft. Ja, klar.

01:01:08.930 --> 01:01:09.770
<v Florian>Das ist natürlich das Problem.

01:01:12.170 --> 01:01:12.570
<v Florian>Ja.

01:01:13.390 --> 01:01:15.330
<v Dominik>Ja, ich finde das auch schwierig. Also so Datenbank-Sachen

01:01:15.330 --> 01:01:17.350
<v Dominik>testen, muss man sich oft darauf verlassen,

01:01:17.410 --> 01:01:18.150
<v Dominik>dass das irgendwie geht.

01:01:18.990 --> 01:01:21.130
<v Dominik>Und das, was andere Menschen schon getestet haben.

01:01:22.430 --> 01:01:25.150
<v Dominik>Und ja, das fällt dann halt auch tatsächlich auch drunter,

01:01:25.290 --> 01:01:28.350
<v Dominik>weil das so ein bisschen nervig sein kann.

01:01:29.450 --> 01:01:31.430
<v Dominik>Also, weil das halt so langsam wird dann im Entwickeln.

01:01:31.690 --> 01:01:32.930
<v Dominik>Und wenn man das alles aufsetzen muss,

01:01:32.990 --> 01:01:34.110
<v Dominik>dann muss ja auch die Datenbank laufen.

01:01:34.270 --> 01:01:36.510
<v Dominik>Also ganz ehrlich, also alleine eine Datenbank laufen zu lassen

01:01:36.510 --> 01:01:38.530
<v Dominik>auf einem Dev-Rechner ist manchmal schon eine Herausforderung,

01:01:38.570 --> 01:01:40.290
<v Dominik>je nachdem, was man alles draufhaben muss.

01:01:40.890 --> 01:01:42.950
<v Jochen>Ja gut, man muss ja auch den Website angucken können

01:01:42.950 --> 01:01:45.850
<v Jochen>auf dem Dev-System, was da auch schon für...

01:01:45.850 --> 01:01:48.050
<v Dominik>Ja, aber wenn dann halt Menschen drei oder vier oder fünf

01:01:48.050 --> 01:01:49.670
<v Dominik>verschiedene Projekte gleichzeitig machen müssen.

01:01:49.850 --> 01:01:51.710
<v Dominik>Und dann haben die nur irgendwie einen Rechner mit

01:01:51.710 --> 01:01:53.990
<v Dominik>8 GB oder sowas, müssen dann irgendwie da mal einen Docker drauf haben

01:01:53.990 --> 01:01:55.830
<v Dominik>und dann müssen die Container aber irgendwie alle gleichzeitig anleihen,

01:01:55.870 --> 01:01:57.870
<v Dominik>weil die schnell wechseln müssen. Dann macht es dann bei

01:01:57.870 --> 01:01:59.890
<v Dominik>fünf verschiedenen Datenmarken schon bumm. Dann musst du dann irgendwie gucken,

01:01:59.970 --> 01:02:01.690
<v Dominik>dass du vielleicht eine hast, die dann irgendwie weg abstrahiert ist,

01:02:01.970 --> 01:02:03.930
<v Dominik>wo dann aber auch die Kalender stimmen. Und dann musst du, wenn du eine

01:02:03.930 --> 01:02:05.810
<v Dominik>abreißt, nicht alle abreißen, weil du den Container nicht einfach kaputt

01:02:05.810 --> 01:02:07.810
<v Dominik>machen kannst. Ich wollte nur so ein kleines Glas und ja.

01:02:08.750 --> 01:02:08.910
<v Dominik>Ja.

01:02:10.110 --> 01:02:11.850
<v Dominik>Rennen wir schnell schon wieder mit dem Kopf gegen irgendeine Wand.

01:02:12.670 --> 01:02:13.490
<v Dominik>Da wäre so ein Absatz.

01:02:13.490 --> 01:02:14.990
<v Dominik>So eine Softwareentwicklung mit

01:02:14.990 --> 01:02:17.810
<v Florian>8 GB RAM finde ich halt auch so ein bisschen kritisch.

01:02:18.050 --> 01:02:20.630
<v Dominik>Ja, es ist eine Katastrophe, ist das. Also Gott sei Dank muss ich sowas nicht tun.

01:02:21.670 --> 01:02:29.390
<v Florian>Also Apple macht das ja, dass sie ihre neuen MacBook Pros haben im Standardmodell mit 8 GB für 1000 noch was Euro.

01:02:29.810 --> 01:02:31.770
<v Jochen>Ja, das ist eine Gemeinheit, aber ja, so ist es.

01:02:33.950 --> 01:02:45.510
<v Florian>Aber ja, ich meine, ich mit Qt-Browser, vielleicht soll ich da ja dann auch mal noch ein paar Worte dazu sagen, da muss ich halt ab und zu auch Chromium kompilieren, also der Code hinter Google Chrome.

01:02:47.410 --> 01:02:49.030
<v Florian>Und das braucht so

01:02:49.030 --> 01:02:51.130
<v Florian>mit einem Developer-Build, also mit

01:02:51.130 --> 01:02:53.330
<v Florian>Debug-Symbolen und so, braucht das

01:02:53.330 --> 01:02:55.470
<v Florian>halt mal so irgendwie um die 30 GB RAM.

01:02:56.210 --> 01:02:57.110
<v Florian>Wow, allein das

01:02:57.110 --> 01:02:59.150
<v Jochen>Kompilieren von dem, okay, das...

01:02:59.150 --> 01:03:01.290
<v Florian>Wenn ich es halt parallel machen

01:03:01.290 --> 01:03:03.170
<v Florian>würde, nur mit so einem Build-Job, wird es

01:03:03.170 --> 01:03:04.550
<v Florian>wahrscheinlich mir auch weniger reichen.

01:03:06.070 --> 01:03:07.210
<v Florian>Aber ja, wir haben dann

01:03:07.210 --> 01:03:09.070
<v Florian>32 GB tatsächlich

01:03:09.070 --> 01:03:10.090
<v Florian>nicht mehr ausgereicht.

01:03:11.810 --> 01:03:13.310
<v Florian>Ich bin jetzt auf 48,

01:03:13.310 --> 01:03:15.410
<v Florian>was halt das Maximale ist, was in den Laptop

01:03:15.410 --> 01:03:16.150
<v Florian>passt überhaupt.

01:03:16.950 --> 01:03:18.310
<v Florian>weil 16, glaube ich, fix

01:03:18.310 --> 01:03:19.130
<v Florian>eingelötet sind.

01:03:21.150 --> 01:03:22.650
<v Florian>Aber das fand ich

01:03:22.650 --> 01:03:24.610
<v Florian>schon heftig. Also Chromium

01:03:24.610 --> 01:03:25.970
<v Florian>ist ein riesiges Projekt.

01:03:27.650 --> 01:03:28.970
<v Florian>Aber wenn es so weitergeht,

01:03:29.070 --> 01:03:30.430
<v Florian>das wird dann nur noch komplexer,

01:03:30.510 --> 01:03:32.310
<v Florian>wie es bei Software halt oft so ist,

01:03:32.970 --> 01:03:34.610
<v Florian>habe ich echt irgendwann ein Problem.

01:03:36.650 --> 01:03:38.530
<v Dominik>Habt ihr schon mal Tests irgendwo auf anderen

01:03:38.530 --> 01:03:40.630
<v Dominik>Rechnern laufen lassen einfach nur? Also das habe ich auch schon mal gehört,

01:03:40.690 --> 01:03:42.330
<v Dominik>dass Leute das gar nicht bei sich mehr laufen lassen,

01:03:42.490 --> 01:03:43.710
<v Dominik>sondern irgendwo nur in der Pipeline?

01:03:45.730 --> 01:03:47.770
<v Florian>mache ich ganz oft aus Feilheit.

01:03:48.810 --> 01:03:48.970
<v Florian>Also

01:03:48.970 --> 01:03:51.630
<v Florian>bei mir gehen die Tests dann halt auch eine Weile

01:03:51.630 --> 01:03:53.710
<v Florian>und oft lasse ich

01:03:53.710 --> 01:03:55.270
<v Florian>die dann lokal halt gar nicht mehr laufen.

01:03:55.610 --> 01:03:57.310
<v Florian>Das ist eine gefährliche Angewohnheit.

01:03:57.830 --> 01:03:59.830
<v Florian>Sondern ich pushe das halt mal,

01:04:00.430 --> 01:04:01.790
<v Florian>wenn ich noch vernünftig bin

01:04:01.790 --> 01:04:03.650
<v Florian>in den Branch und nicht gleich nach Main

01:04:03.650 --> 01:04:05.730
<v Florian>und schaue dann halt

01:04:05.730 --> 01:04:07.150
<v Florian>mal, was da zurückkommt

01:04:07.150 --> 01:04:08.970
<v Florian>von GitHub Actions.

01:04:10.510 --> 01:04:10.990
<v Florian>Tadam!

01:04:11.710 --> 01:04:12.950
<v Florian>Dieser Test ist viel geschlagen.

01:04:13.570 --> 01:04:14.230
<v Florian>Meistens nicht.

01:04:15.090 --> 01:04:16.990
<v Dominik>Also manchmal gelingt es einem halt, das durchzukriegen,

01:04:17.110 --> 01:04:18.110
<v Dominik>aber ja.

01:04:19.090 --> 01:04:19.690
<v Dominik>Ja, okay.

01:04:20.890 --> 01:04:21.750
<v Dominik>Muss das aber halt, ja.

01:04:22.850 --> 01:04:24.970
<v Dominik>Was auch super ist, wenn man dann gar keine Testumgebung hat,

01:04:25.030 --> 01:04:26.870
<v Dominik>sondern es halt direkt durchgeht.

01:04:27.450 --> 01:04:28.610
<v Dominik>Du brauchst halt auch keine Entwicklungsumgebung.

01:04:28.770 --> 01:04:29.810
<v Dominik>Machst du alles bei GitHub.

01:04:30.130 --> 01:04:31.530
<v Dominik>Ist das da Codespaces oder so?

01:04:31.610 --> 01:04:34.470
<v Jochen>Und dann ist das alles nur noch in der Cloud.

01:04:35.290 --> 01:04:35.650
<v Jochen>Wunderbar.

01:04:36.570 --> 01:04:37.530
<v Jochen>Jemand anderes Problem.

01:04:37.530 --> 01:04:38.490
<v Jochen>Jetzt lasse ich dann halt so

01:04:38.490 --> 01:04:41.690
<v Florian>die Tests für das, was ich gerade daran arbeite,

01:04:41.750 --> 01:04:42.870
<v Florian>die lasse ich lokal laufen.

01:04:43.010 --> 01:04:44.410
<v Florian>Aber so eine volle Testbatterie.

01:04:45.090 --> 01:04:46.370
<v Florian>Es soll woanders laufen.

01:04:46.810 --> 01:04:48.970
<v Dominik>Ja, aber auch das ist vielleicht ein guter Punkt

01:04:48.970 --> 01:04:50.910
<v Dominik>für Marks, also um

01:04:50.910 --> 01:04:52.810
<v Dominik>Tests zu markieren nach verschiedenen Themen

01:04:52.810 --> 01:04:54.670
<v Dominik>oder sowas, dann kann man halt nur Tests laufen lassen

01:04:54.670 --> 01:04:56.190
<v Dominik>für das einzelne Topic oder

01:04:56.190 --> 01:04:58.810
<v Jochen>das Backend. Ja, aber ich meine, wenn du Entwickler hast, machst du das ja

01:04:58.810 --> 01:05:00.670
<v Jochen>meistens, dass du einfach sozusagen entweder

01:05:00.670 --> 01:05:02.690
<v Jochen>nur den einen Test, von dem du weißt, dass der halt

01:05:02.690 --> 01:05:04.810
<v Jochen>betroffen ist, irgendwie laufen lässt oder

01:05:04.810 --> 01:05:06.890
<v Jochen>halt eine Gruppe von Tests, die da außen rum

01:05:06.890 --> 01:05:08.790
<v Dominik>sind. Ja, genau, aber genau, die Frage ist halt

01:05:08.790 --> 01:05:10.870
<v Dominik>diese Gruppe, weil wenn du die thematisch gruppierst

01:05:10.870 --> 01:05:12.750
<v Dominik>und die vielleicht nicht an demselben Ort liegen irgendwie,

01:05:12.870 --> 01:05:14.750
<v Dominik>wenn man halt da, man kann ja die Tests, das ist auch

01:05:14.750 --> 01:05:17.150
<v Dominik>eine Frage der Philosophie, ob man sie in ein Testfahrzeichen

01:05:17.150 --> 01:05:18.770
<v Dominik>schreibt oder an die Applikationen

01:05:18.770 --> 01:05:20.570
<v Dominik>oder an die ganzen Apps, wo die zugehören oder so.

01:05:21.490 --> 01:05:22.810
<v Dominik>Und wenn die dann halt so

01:05:22.810 --> 01:05:24.770
<v Dominik>distributed sind und dann willst du aber trotzdem

01:05:24.770 --> 01:05:26.610
<v Dominik>viele verschiedene davon zusammenlaufen lassen,

01:05:26.690 --> 01:05:28.550
<v Dominik>weil die mit der Funktionalität dann doch irgendwie zusammenhängen.

01:05:28.550 --> 01:05:30.110
<v Dominik>Also auch da eine Frage.

01:05:30.770 --> 01:05:32.610
<v Dominik>Kann man sich über die Architektur Gedanken machen?

01:05:32.710 --> 01:05:34.270
<v Dominik>Gibt es vielleicht doch Gründe, das dann so zu machen?

01:05:35.750 --> 01:05:36.510
<v Dominik>Und mit diesen

01:05:36.510 --> 01:05:38.250
<v Dominik>Markern, die man da bei PyTest drüber setzen kann,

01:05:38.330 --> 01:05:40.310
<v Dominik>dann kann man ja einfach, die gruppieren recht einfach.

01:05:40.850 --> 01:05:42.550
<v Dominik>Finde ich gar nicht so schlecht für diese Fälle.

01:05:44.750 --> 01:05:58.130
<v Florian>Ja, mache ich jetzt weniger. Ich habe einen Marker einfach für alle GUI-Tests, sowas halt, weil das halt wirklich projektübergreifend sind Tests, die nutzen irgendwelche GUI-Dinge und die testen einfach nur Python-Code.

01:05:59.290 --> 01:06:12.950
<v Florian>Aber ansonsten, ja, ich kann mir jetzt vorstellen, so bei einem Enterprise-Projekt, können auch Kunden, die das so machen, da dann wirklich so eine Use-Case-Nummer oder so noch dranhängen und dann sagen, alle Tests irgendwie zu diesem Use-Case laufen lassen.

01:06:14.190 --> 01:06:16.330
<v Florian>Aber ansonsten finde ich, reicht eigentlich

01:06:16.330 --> 01:06:17.770
<v Florian>diese Unterteilung in Module.

01:06:18.190 --> 01:06:20.170
<v Dominik>Also je modularer man ist oder je

01:06:20.170 --> 01:06:21.930
<v Dominik>modulitischer man so eine Anwendung baut, dann

01:06:21.930 --> 01:06:24.330
<v Dominik>müsste man vielleicht tatsächlich diese einzelnen Funktionalitäten

01:06:24.330 --> 01:06:26.430
<v Dominik>so ein bisschen, so ein Multilead

01:06:26.430 --> 01:06:27.830
<v Dominik>voneinander...

01:06:27.830 --> 01:06:30.130
<v Jochen>Ich weiß nicht, also bei mir reicht auch diese

01:06:30.130 --> 01:06:32.470
<v Jochen>Trennung in Dateien eigentlich, ehrlich gesagt.

01:06:32.490 --> 01:06:32.870
<v Jochen>Okay, okay.

01:06:32.950 --> 01:06:36.110
<v Jochen>Ich habe dafür Marker schon verwendet,

01:06:36.170 --> 01:06:36.930
<v Jochen>aber nicht dafür.

01:06:38.550 --> 01:06:40.290
<v Jochen>Aber genau, das ist eine interessante Frage,

01:06:40.290 --> 01:06:41.930
<v Jochen>was ich jetzt auch, also einfach alles

01:06:41.930 --> 01:06:44.050
<v Jochen>Tests in einem Tests-Directory

01:06:44.050 --> 01:06:45.730
<v Jochen>drin haben oder halt neben

01:06:45.730 --> 01:06:47.870
<v Jochen>die Module im Code

01:06:47.870 --> 01:06:49.770
<v Jochen>legen. Das sind ja auch zwei unterschiedliche Möglichkeiten. Ich habe beides

01:06:49.770 --> 01:06:51.610
<v Jochen>auch schon gesehen und ich

01:06:51.610 --> 01:06:53.730
<v Jochen>persönlich mag es lieber, irgendwie das alles in einem

01:06:53.730 --> 01:06:54.930
<v Jochen>Tests-Verzeichnis zu haben.

01:06:55.470 --> 01:06:56.690
<v Jochen>Ich mache tatsächlich beides.

01:06:57.750 --> 01:06:59.670
<v Dominik>Also ich habe einen Tests-Verzeichnis, wo so die

01:06:59.670 --> 01:07:00.790
<v Dominik>grundlegenden Sachen drin sind, wie

01:07:00.790 --> 01:07:03.310
<v Dominik>Kernfunktionalität, die Clients für

01:07:03.310 --> 01:07:05.650
<v Dominik>Authentication, die Nutzer und

01:07:05.650 --> 01:07:07.570
<v Dominik>sowas. Und der

01:07:07.570 --> 01:07:09.670
<v Dominik>Test-Runner und diese ganzen Sachen und die Haupt-

01:07:09.670 --> 01:07:11.570
<v Dominik>Fixtures. Auch witzig,

01:07:11.650 --> 01:07:13.610
<v Dominik>Manchmal auch meist in anderen

01:07:13.610 --> 01:07:15.590
<v Dominik>Fixtures schon. Das heißt, Fixtures für Modelle

01:07:15.590 --> 01:07:16.970
<v Dominik>lege ich mit in das Hauptverzeichnis rein.

01:07:17.470 --> 01:07:19.730
<v Dominik>Aber die Tests selber, also die einzelnen

01:07:19.730 --> 01:07:21.710
<v Dominik>Units für Routen zum Beispiel, die sind mit

01:07:21.710 --> 01:07:23.310
<v Dominik>in dem API-Verzeichnis zum Beispiel.

01:07:23.550 --> 01:07:25.410
<v Dominik>Oder in der App

01:07:25.410 --> 01:07:26.470
<v Dominik>von Dango oder so.

01:07:27.490 --> 01:07:29.850
<v Dominik>Da muss man die halt importieren.

01:07:30.790 --> 01:07:31.410
<v Dominik>Einfach in den

01:07:31.410 --> 01:07:33.290
<v Dominik>Komftest, die man halt da nutzt. Und dann kann man aber

01:07:33.290 --> 01:07:35.250
<v Dominik>direkt da die Tests schreiben, wo

01:07:35.250 --> 01:07:37.310
<v Dominik>die Anwendung quasi liegt. Man muss nicht die ganze Zeit

01:07:37.310 --> 01:07:39.210
<v Dominik>durch das ganze Directory so hin und her traversen.

01:07:40.050 --> 01:07:40.290
<v Dominik>Okay.

01:07:41.650 --> 01:07:43.530
<v Dominik>Und man kann halt auch modulär arbeiten

01:07:43.530 --> 01:07:45.670
<v Dominik>und die Leute wissen halt direkt, dass die Tests da dazugehören

01:07:45.670 --> 01:07:47.830
<v Dominik>und man vergisst dann nicht, welche für welche Module.

01:07:47.910 --> 01:07:48.990
<v Dominik>Man kann halt auch einmal direkt sehen,

01:07:49.370 --> 01:07:50.710
<v Dominik>sind die Tests für die Module jetzt schon da drin

01:07:50.710 --> 01:07:52.150
<v Dominik>oder welche Tests für die Module gibt es denn da?

01:07:52.650 --> 01:07:54.470
<v Dominik>Manchmal finde ich sind Tests auch sehr nützlich

01:07:54.470 --> 01:07:57.510
<v Dominik>sowas als wie Dokumentation für den Code.

01:07:57.970 --> 01:07:59.630
<v Dominik>Wenn ich manchmal nicht mehr so genau weiß,

01:07:59.730 --> 01:08:00.710
<v Dominik>was passiert denn da jetzt eigentlich

01:08:00.710 --> 01:08:02.590
<v Dominik>oder was sollte da passieren, gucke ich mir den Test an

01:08:02.590 --> 01:08:04.290
<v Dominik>und wenn der gut geschrieben ist, sagt der Test,

01:08:04.330 --> 01:08:06.110
<v Dominik>testet ja die Logik, was da passieren sollte.

01:08:06.610 --> 01:08:08.210
<v Dominik>Und dann lese ich den Test, ah, so war das.

01:08:08.370 --> 01:08:09.910
<v Dominik>Und dann, das macht viel Sinn.

01:08:10.810 --> 01:08:12.470
<v Florian>Das mache ich tatsächlich auch ganz oft.

01:08:12.930 --> 01:08:15.910
<v Florian>Oft, wenn ich halt irgendwo einen Bug in einem Python-Projekt finde,

01:08:16.010 --> 01:08:18.310
<v Florian>der sich nutzt, dann versuche ich den halt mal kurz zu beheben.

01:08:19.650 --> 01:08:21.690
<v Florian>Und dann schaue ich mir oft auch mal irgendwie

01:08:21.690 --> 01:08:23.790
<v Florian>jetzt bei einem fremden Open-Source-Projekt

01:08:23.790 --> 01:08:25.230
<v Florian>erst mal die Tests ein bisschen an,

01:08:25.410 --> 01:08:27.890
<v Florian>um mehr ein Gefühl zu kriegen, was da passiert.

01:08:28.910 --> 01:08:30.170
<v Florian>Wenn es dann welche gibt.

01:08:31.070 --> 01:08:31.970
<v Florian>Ja, gut.

01:08:32.930 --> 01:08:34.450
<v Florian>Ja, das ist tatsächlich auch eine der Sachen,

01:08:34.530 --> 01:08:35.490
<v Florian>die oft runterfällt, ne?

01:08:36.890 --> 01:08:38.730
<v Florian>Ich mache das tatsächlich aber auch so,

01:08:39.070 --> 01:08:40.990
<v Florian>wie das die PyTest-Dokumentation, glaube ich,

01:08:41.010 --> 01:08:43.230
<v Florian>auch empfiehlt, dass ich einfach ein Testverzeichnis

01:08:43.230 --> 01:08:44.850
<v Florian>habe und dann da quasi so

01:08:44.850 --> 01:08:46.170
<v Florian>eins zu eins das

01:08:46.170 --> 01:08:48.230
<v Florian>Python-Package gespiegelt.

01:08:48.890 --> 01:08:50.430
<v Florian>PyTest-Dokumentation

01:08:50.430 --> 01:08:52.610
<v Dominik>ist auch noch so eine, ich fand

01:08:52.610 --> 01:08:55.110
<v Dominik>PyTest-Dokumentation war eine der schwierigeren Dokumentationen,

01:08:55.110 --> 01:08:55.970
<v Dominik>die ich lesen durfte.

01:08:57.030 --> 01:08:58.150
<v Dominik>Im Laufe der,

01:08:58.730 --> 01:09:00.110
<v Dominik>wenn er so Python kriegt.

01:09:00.130 --> 01:09:02.670
<v Jochen>Ja gut, das ist halt auch kompliziert.

01:09:03.690 --> 01:09:04.590
<v Jochen>Ja, aber gerade.

01:09:06.090 --> 01:09:07.090
<v Jochen>Ich habe da so diesen

01:09:07.090 --> 01:09:08.410
<v Jochen>Curse of Knowledge halt.

01:09:08.710 --> 01:09:17.390
<v Florian>Ich kenne das unter diesem Begriff, dass es halt echt schwierig ist, wenn man das alles schon verinnerlicht hat, das nochmal so in den Augen eines Neulings anzuschauen.

01:09:17.390 --> 01:09:19.510
<v Dominik>Also, dass man wirklich einfach

01:09:19.510 --> 01:09:21.290
<v Dominik>verstehen kann, was denn da passiert. Das ist so

01:09:21.290 --> 01:09:22.650
<v Dominik>eine hohe Kunst, glaube ich.

01:09:23.590 --> 01:09:25.610
<v Dominik>Und das war bei Pytas, ich muss auch sagen,

01:09:25.670 --> 01:09:26.710
<v Dominik>mittlerweile ist es einfacher,

01:09:27.690 --> 01:09:29.470
<v Dominik>also die Doku zu lesen, aber manchmal ist es, hä,

01:09:29.610 --> 01:09:30.870
<v Dominik>was wollen die denn jetzt und warum?

01:09:31.330 --> 01:09:33.510
<v Dominik>Da waren auch so ganz viele Fragen offen, die haben dann

01:09:33.510 --> 01:09:35.710
<v Dominik>ganz viel Knowledge halt auch tatsächlich vorausgesetzt,

01:09:36.350 --> 01:09:37.510
<v Dominik>dass man sich halt irgendwo an

01:09:37.510 --> 01:09:39.130
<v Dominik>irgendwelchen anderen Stellen so zusammenklauben musste.

01:09:39.310 --> 01:09:41.610
<v Dominik>Und wo musste man dann selber finden und so

01:09:41.610 --> 01:09:43.010
<v Dominik>und das war schon, war steil.

01:09:45.350 --> 01:09:46.650
<v Dominik>Aber ja, also was

01:09:46.650 --> 01:09:48.870
<v Dominik>noch vielleicht so coole Funktionalitäten

01:09:48.870 --> 01:09:50.690
<v Dominik>von Python, ich glaube, es gibt noch jede Menge Plugins,

01:09:50.750 --> 01:09:52.070
<v Dominik>die wir noch vielleicht erwähnen können.

01:09:52.790 --> 01:09:54.690
<v Dominik>Ich würde eins gerne herausfinden, VCR,

01:09:55.070 --> 01:09:56.750
<v Dominik>also irgendwie so Video Recalling auch noch.

01:09:57.410 --> 01:09:58.070
<v Dominik>Das ist auch sehr cool.

01:09:59.650 --> 01:10:00.490
<v Dominik>Was macht das denn?

01:10:00.930 --> 01:10:02.530
<v Dominik>VCR stellt quasi,

01:10:02.830 --> 01:10:04.490
<v Dominik>wenn du jetzt eine API nutzt, zum Beispiel

01:10:04.490 --> 01:10:06.530
<v Dominik>ein Request, zeichnet das quasi

01:10:06.530 --> 01:10:08.530
<v Dominik>die echten Antworten auf

01:10:08.530 --> 01:10:10.350
<v Dominik>und macht halt quasi einen echten API-Call

01:10:10.350 --> 01:10:12.390
<v Dominik>und schreibt das Ergebnis

01:10:12.390 --> 01:10:14.370
<v Dominik>inklusive aller Header und allem Content

01:10:14.370 --> 01:10:16.550
<v Dominik>und so weiter in Jamil-Files rein

01:10:16.550 --> 01:10:17.970
<v Dominik>automatisch und

01:10:17.970 --> 01:10:20.330
<v Dominik>beim nächsten Call nimmt es einfach die und

01:10:20.330 --> 01:10:22.150
<v Dominik>tut halt so, als wäre die echte API-Antwort

01:10:22.150 --> 01:10:24.430
<v Dominik>quasi in der File drin und dann hast du

01:10:24.430 --> 01:10:26.410
<v Dominik>quasi die echte API-Antwort gemockt, quasi

01:10:26.410 --> 01:10:28.510
<v Dominik>genauso, wie sie kommt und du kannst halt

01:10:28.510 --> 01:10:30.470
<v Dominik>bei Testen immer sagen, okay, zieh jetzt mal neu,

01:10:30.670 --> 01:10:32.430
<v Dominik>also du bist gerade in einer Umgebung, wo du das ausprobieren kannst,

01:10:32.830 --> 01:10:34.390
<v Dominik>aber du willst ja die APIs auch wegen Quotas

01:10:34.390 --> 01:10:36.210
<v Dominik>und so weiter halt auch nicht ständig fragen zum Beispiel

01:10:36.210 --> 01:10:38.110
<v Dominik>oder halt auch

01:10:38.110 --> 01:10:40.270
<v Dominik>nur selten oder halt, wenn sich was aktualisiert

01:10:40.270 --> 01:10:42.290
<v Dominik>und kannst aber so halt dann schon gucken,

01:10:42.290 --> 01:10:43.830
<v Dominik>ob die API nach draußen halt auch funktioniert

01:10:43.830 --> 01:10:45.690
<v Dominik>und halt nicht nur so tun, als hast du die API

01:10:45.690 --> 01:10:47.890
<v Dominik>nachgebaut, sondern kannst ja tatsächlich

01:10:47.890 --> 01:10:49.930
<v Jochen>direkt benutzen. Ja, ich weiß

01:10:49.930 --> 01:10:51.770
<v Jochen>nicht. Ich mache sowas ungern. Also

01:10:51.770 --> 01:10:53.990
<v Jochen>da gibt es ja auch

01:10:53.990 --> 01:10:55.310
<v Jochen>immer diesen Spruch, ich weiß nicht,

01:10:55.350 --> 01:10:57.930
<v Jochen>don't mock what you don't own.

01:10:58.410 --> 01:10:59.890
<v Jochen>Also ich mock lieber meine eigenen Sachen

01:10:59.890 --> 01:11:01.790
<v Jochen>als das externe Geschichten, weil

01:11:01.790 --> 01:11:03.750
<v Jochen>ich weiß nicht. Ja, aber es ist ja eben vielleicht

01:11:03.750 --> 01:11:05.150
<v Jochen>nicht gemockt.

01:11:06.190 --> 01:11:07.110
<v Jochen>Das ist recorded.

01:11:08.550 --> 01:11:09.810
<v Jochen>Ja, aber das, ja gut, das

01:11:09.810 --> 01:11:11.470
<v Jochen>ist ein bisschen Convenience, aber du mockst es

01:11:11.470 --> 01:11:15.730
<v Jochen>Ja gut, du willst ja

01:11:15.730 --> 01:11:17.810
<v Florian>du willst ja nicht, dass

01:11:17.810 --> 01:11:19.850
<v Florian>deine Tests wirklich auf die

01:11:19.850 --> 01:11:21.530
<v Florian>API zugreifen im Normalfall.

01:11:22.150 --> 01:11:24.130
<v Florian>Also gerade wenn du da irgendwie ein API-Key

01:11:24.130 --> 01:11:25.930
<v Florian>brauchst, irgendwelche Credits hast

01:11:25.930 --> 01:11:27.690
<v Florian>oder die API was ganz Schlimmes macht,

01:11:28.250 --> 01:11:29.770
<v Florian>dann musst du die ja irgendwie

01:11:29.770 --> 01:11:31.870
<v Florian>mocken. Ja, aber ich würde sie

01:11:31.870 --> 01:11:33.890
<v Florian>an der Stelle mocken, an der internen

01:11:33.890 --> 01:11:35.610
<v Jochen>sozusagen, bevor ich das aufrufe

01:11:35.610 --> 01:11:37.730
<v Jochen>und die dann gar nicht aufrufen.

01:11:38.630 --> 01:11:39.930
<v Jochen>Ach so meinst du. An der Stelle, wo ich

01:11:39.930 --> 01:11:41.330
<v Jochen>halt noch weiß, was das ist.

01:11:41.470 --> 01:11:43.050
<v Jochen>sodass ich halt auch weiß, wenn ich das ändere,

01:11:43.330 --> 01:11:44.990
<v Jochen>dass ich dann auch den Mock ändern muss.

01:11:45.250 --> 01:11:47.090
<v Jochen>Aber bei einem externen, wenn ich das einfach nur automatisch

01:11:47.090 --> 01:11:49.150
<v Jochen>mocke, dann weiß ich ja gar nicht, wenn sich

01:11:49.150 --> 01:11:50.970
<v Jochen>da jetzt irgendwas geändert hat, okay, muss ich meine

01:11:50.970 --> 01:11:53.090
<v Jochen>Mocks anpassen irgendwie, das kriege ich ja

01:11:53.090 --> 01:11:54.050
<v Jochen>nicht sozusagen direkt mit.

01:11:55.790 --> 01:11:56.530
<v Jochen>Gut, am Schluss

01:11:56.530 --> 01:11:59.210
<v Florian>ist dein Code ja so oder so

01:11:59.210 --> 01:12:01.130
<v Florian>kaputt, wenn sich an der API wirklich was ändert.

01:12:01.130 --> 01:12:02.370
<v Florian>Ja, das, ja.

01:12:03.630 --> 01:12:05.070
<v Florian>Da, was ich einen schönen

01:12:05.070 --> 01:12:07.150
<v Florian>Ansatz finde da, ist, dass

01:12:07.150 --> 01:12:09.110
<v Florian>man, um vielleicht auch

01:12:09.110 --> 01:12:10.630
<v Florian>nochmal bei den Plugins einzuhängen,

01:12:11.370 --> 01:12:13.610
<v Florian>es ist sehr einfach, PyTest halt eben

01:12:13.610 --> 01:12:15.850
<v Florian>irgendwie zu erweitern und unter anderem

01:12:15.850 --> 01:12:17.770
<v Florian>auch ein eigenes Kommandozeilen-Argument

01:12:17.770 --> 01:12:19.250
<v Florian>zu PyTest hinzuzufügen.

01:12:20.670 --> 01:12:22.010
<v Florian>Und was man dann machen kann,

01:12:22.370 --> 01:12:23.630
<v Florian>ist theoretisch zumindest,

01:12:23.970 --> 01:12:25.770
<v Florian>ich habe jetzt nicht ein Projekt, wo ich das effektiv

01:12:25.770 --> 01:12:26.750
<v Florian>mache tatsächlich,

01:12:28.250 --> 01:12:29.510
<v Florian>eine Kommandozeilen-Option

01:12:29.510 --> 01:12:32.170
<v Florian>Real API oder sowas hinzuzufügen

01:12:32.170 --> 01:12:33.770
<v Florian>und dann halt zu sagen, wenn ich das

01:12:33.770 --> 01:12:35.810
<v Florian>mitgebe, laufen einmal meine Tests

01:12:35.810 --> 01:12:37.310
<v Florian>gegen die richtige API durch,

01:12:38.130 --> 01:12:39.310
<v Florian>anstatt gegen meine

01:12:39.310 --> 01:12:42.210
<v Florian>rekordeten Antworten.

01:12:42.270 --> 01:12:44.170
<v Jochen>Ja, das könnte man natürlich machen, ja.

01:12:46.510 --> 01:12:48.090
<v Jochen>Dann je nach API halt sagen,

01:12:48.330 --> 01:12:50.150
<v Florian>das können wir nach, auf einer CI irgendwie

01:12:50.150 --> 01:12:52.190
<v Florian>wöchentlich oder monatlich oder sowas mal

01:12:52.190 --> 01:12:54.190
<v Florian>ausführen. Ja, also ich finde

01:12:54.190 --> 01:12:56.150
<v Dominik>es super spannend, also das macht halt echt

01:12:56.150 --> 01:12:57.610
<v Dominik>coole Sachen möglich.

01:12:58.330 --> 01:12:59.970
<v Dominik>Man kann ja auch seine eigene API quasi mit

01:12:59.970 --> 01:13:01.850
<v Dominik>aufnehmen oder sowas, wenn man das möchte und dann hat man

01:13:01.850 --> 01:13:04.070
<v Dominik>auch schnell so Mock-Fictures da, die man

01:13:04.070 --> 01:13:06.070
<v Dominik>halt nicht selber bauen möchte. Selbst wenn

01:13:06.070 --> 01:13:08.070
<v Dominik>du sagst, okay, du möchtest gerne vorher das mocken, aber

01:13:08.070 --> 01:13:09.470
<v Dominik>ich finde das schon ziemlich gut.

01:13:12.510 --> 01:13:14.370
<v Dominik>Man kann das sogar

01:13:14.370 --> 01:13:16.510
<v Dominik>abusen. Wenn man sich

01:13:16.510 --> 01:13:18.550
<v Dominik>viele Zeugs

01:13:18.550 --> 01:13:20.530
<v Dominik>irgendwie abspeichern will von irgendwelchen

01:13:20.530 --> 01:13:22.310
<v Dominik>Scrapern oder sowas, könnte man das tatsächlich

01:13:22.310 --> 01:13:24.570
<v Dominik>einfach einsetzen, um sich die

01:13:24.570 --> 01:13:26.330
<v Dominik>API-Calls einfach mal wegzuschaben

01:13:26.330 --> 01:13:27.170
<v Dominik>und das relativ easy.

01:13:29.790 --> 01:13:30.450
<v Dominik>Ja, ich hasse

01:13:30.450 --> 01:13:31.490
<v Dominik>sich. Also genau,

01:13:32.130 --> 01:13:34.330
<v Jochen>ich beurteile gerade, was ich

01:13:34.330 --> 01:13:36.130
<v Jochen>an Plugins normalerweise verwende.

01:13:37.210 --> 01:13:39.150
<v Jochen>X-Test verwirsche ich tatsächlich irgendwie.

01:13:39.830 --> 01:13:41.070
<v Jochen>Aber das muss man ja, wenn man

01:13:41.070 --> 01:13:43.330
<v Jochen>Tests parallel ausführen lassen

01:13:43.330 --> 01:13:43.910
<v Jochen>möchte.

01:13:44.910 --> 01:13:47.210
<v Jochen>Da kommt aber noch viel mehr Zeug mit dabei. Ich will manchmal

01:13:47.210 --> 01:13:49.330
<v Jochen>nicht so ganz sicher, ob ich das alles

01:13:49.330 --> 01:13:50.990
<v Jochen>haben will, aber was ich

01:13:50.990 --> 01:13:53.270
<v Jochen>auch oft benutze, also was ich total super finde,

01:13:53.370 --> 01:13:54.870
<v Jochen>ist PyTestMock zum Beispiel, finde ich super.

01:13:55.850 --> 01:13:57.190
<v Jochen>Ich bin mit Unitests, immer wenn ich

01:13:57.190 --> 01:13:59.090
<v Jochen>Unitests-Geschichten irgendwo mache und dann

01:13:59.090 --> 01:14:01.450
<v Jochen>türmen sich so die Patch-Dekoratoren

01:14:01.450 --> 01:14:03.290
<v Jochen>oder ganz viele Context-Manager

01:14:03.290 --> 01:14:04.910
<v Jochen>und dann ist PyTestMock echt total

01:14:04.910 --> 01:14:06.210
<v Jochen>also sehr angenehm.

01:14:06.770 --> 01:14:09.030
<v Jochen>Was macht das? Das übernimmt,

01:14:09.390 --> 01:14:11.230
<v Jochen>das macht das halt automatisch.

01:14:11.710 --> 01:14:12.610
<v Jochen>Du kriegst halt einen Mocker

01:14:12.610 --> 01:14:14.450
<v Jochen>und schreibst als Fixture sozusagen

01:14:14.450 --> 01:14:16.370
<v Jochen>in deinen Text-Test und dann

01:14:16.370 --> 01:14:18.490
<v Jochen>rufst du halt mocker.patch irgendwie

01:14:18.490 --> 01:14:20.650
<v Jochen>einfach auf, musst aber da nicht

01:14:20.650 --> 01:14:22.630
<v Jochen>den Kontextmanager drum rum machen oder

01:14:22.630 --> 01:14:24.590
<v Jochen>irgendwie das Insekurator verwenden und kannst

01:14:24.590 --> 01:14:26.710
<v Jochen>das halt auch mehrfach aufrufen, ohne

01:14:26.710 --> 01:14:28.610
<v Jochen>dass du da halt irgendwie dann eine Verschachtelung von

01:14:28.610 --> 01:14:30.510
<v Jochen>Kontextmanagern hast. Und

01:14:30.510 --> 01:14:32.450
<v Jochen>das wird halt hinterher auch wieder alles

01:14:32.450 --> 01:14:33.530
<v Jochen>entmockt sozusagen,

01:14:34.530 --> 01:14:36.630
<v Jochen>entgepatcht, wenn der Test vorbei ist

01:14:36.630 --> 01:14:36.850
<v Jochen>und so.

01:14:37.010 --> 01:14:40.650
<v Dominik>Ja, du hast recht, das ist für viele

01:14:40.650 --> 01:14:42.550
<v Dominik>Sachen ganz nett, aber ich finde es auch irgendwie hässlich. Ich weiß nicht

01:14:42.550 --> 01:14:43.110
<v Dominik>mehr genau, warum.

01:14:44.050 --> 01:14:47.110
<v Dominik>Ja, diese API halt

01:14:47.110 --> 01:14:48.850
<v Florian>von unitest.mock, die

01:14:48.850 --> 01:14:50.590
<v Florian>macht schon irgendwie ganz viel Magic.

01:14:50.990 --> 01:14:53.150
<v Florian>Da bin ich auch nicht so wirklich zufrieden

01:14:53.150 --> 01:14:53.790
<v Florian>damit irgendwie.

01:14:55.690 --> 01:14:56.990
<v Florian>Und ja, das Plugin ist eigentlich nur

01:14:56.990 --> 01:14:58.970
<v Florian>ein relativ dünner Layer darum, um

01:14:58.970 --> 01:15:00.950
<v Florian>das halt zu einer PyTest-Fixture zu

01:15:00.950 --> 01:15:01.870
<v Florian>machen, zum einen.

01:15:02.750 --> 01:15:05.010
<v Florian>Und zum anderen, wenn dann was schief geht,

01:15:05.250 --> 01:15:07.250
<v Florian>man kann diese Mock-Objekte

01:15:07.250 --> 01:15:08.470
<v Florian>ja dann im Nachhinein fragen,

01:15:08.710 --> 01:15:10.370
<v Florian>wurdest du jetzt so und so aufgerufen?

01:15:11.650 --> 01:15:13.030
<v Florian>Und wenn was schief geht,

01:15:13.150 --> 01:15:14.730
<v Florian>nochmal PyTest einzuhängen,

01:15:14.870 --> 01:15:15.350
<v Florian>dass man halt

01:15:15.350 --> 01:15:18.610
<v Florian>den schöneren Output von PyTest kriegt,

01:15:18.730 --> 01:15:20.730
<v Florian>der dann auch die Werte vergleicht und sowas.

01:15:22.590 --> 01:15:22.790
<v Florian>Aber

01:15:22.790 --> 01:15:24.730
<v Florian>viel mehr als das macht das Plugin eigentlich

01:15:24.730 --> 01:15:26.630
<v Dominik>nicht. Apropos schöner Output,

01:15:26.730 --> 01:15:27.630
<v Dominik>PyTest-Witch natürlich.

01:15:29.230 --> 01:15:29.870
<v Dominik>Ah, okay, ja.

01:15:31.390 --> 01:15:32.150
<v Dominik>Ja, das hier überhaupt,

01:15:32.350 --> 01:15:34.410
<v Jochen>das hat man noch gar nicht so richtig, finde ich, ist eigentlich fast

01:15:34.410 --> 01:15:36.410
<v Jochen>das Hauptfeature von

01:15:36.410 --> 01:15:37.910
<v Jochen>PyTest für mich jedenfalls, dass

01:15:37.910 --> 01:15:40.510
<v Jochen>man einfach so Assertion schreiben

01:15:40.510 --> 01:15:42.470
<v Jochen>kann und das halt funktioniert und man

01:15:42.470 --> 01:15:44.070
<v Jochen>halt trotzdem sehr schöne Ausgabe kriegt,

01:15:44.290 --> 01:15:46.350
<v Jochen>die einem zeigt, wo ist genau was

01:15:46.350 --> 01:15:47.310
<v Jochen>unterschiedlich und so.

01:15:48.310 --> 01:15:49.950
<v Jochen>Das ist halt sehr, sehr angenehm.

01:15:50.030 --> 01:15:52.030
<v Dominik>Nicht so komisch ist das, ich will den Camel case.

01:15:54.830 --> 01:15:56.450
<v Florian>Das ist aber auch übrigens

01:15:56.450 --> 01:15:58.250
<v Florian>eine ordentliche Portion Magie.

01:15:58.350 --> 01:15:59.990
<v Jochen>Ja, ich fürchte auch irgendwie, ja.

01:16:01.350 --> 01:16:02.310
<v Jochen>Weil an sich dieses

01:16:02.310 --> 01:16:04.290
<v Florian>Assert-Keyword von Python, das

01:16:04.290 --> 01:16:06.270
<v Florian>macht einfach nur einen Assertion-Error.

01:16:06.630 --> 01:16:08.090
<v Florian>Also ohne jetzt, dass man irgendwie

01:16:08.090 --> 01:16:10.050
<v Florian>Zugriff hat auf Infos, was da

01:16:10.050 --> 01:16:10.710
<v Florian>passiert ist.

01:16:12.010 --> 01:16:14.210
<v Florian>PyTest macht da eben sein

01:16:14.210 --> 01:16:15.190
<v Florian>Rewriting.

01:16:15.910 --> 01:16:17.430
<v Florian>Das ist den

01:16:17.430 --> 01:16:19.410
<v Florian>Abstract Syntax Tree,

01:16:20.450 --> 01:16:21.870
<v Florian>was Python als so ein Modul

01:16:21.870 --> 01:16:23.930
<v Florian>generiert intern, bevor das wirklich dann

01:16:23.930 --> 01:16:25.570
<v Florian>zu Python Bytecode wird.

01:16:26.330 --> 01:16:27.810
<v Florian>Passiert das beim Import der

01:16:27.810 --> 01:16:29.870
<v Jochen>Testmodule irgendwie? Da wird der Bytecode

01:16:29.870 --> 01:16:31.230
<v Jochen>dann...

01:16:31.230 --> 01:16:33.930
<v Jochen>Nicht der Bytecode,

01:16:34.070 --> 01:16:35.810
<v Florian>sondern halt ein Level vorher, den Abstract

01:16:35.810 --> 01:16:37.990
<v Florian>Syntax Tree. Da injectet

01:16:37.990 --> 01:16:39.910
<v Florian>dann PyTest noch seine eigenen Calls,

01:16:41.290 --> 01:16:43.170
<v Florian>um da quasi einmal festzuhalten,

01:16:43.350 --> 01:16:44.890
<v Florian>was ist da eigentlich drin in dieser

01:16:44.890 --> 01:16:45.430
<v Florian>Assertion.

01:16:47.010 --> 01:16:47.190
<v Florian>Ja.

01:16:50.190 --> 01:16:51.090
<v Florian>Ja, das sind

01:16:51.090 --> 01:16:52.510
<v Florian>viele Dinge, wo ich sagen muss,

01:16:52.990 --> 01:16:54.710
<v Florian>genau, ist sehr viel Magie,

01:16:54.930 --> 01:16:56.730
<v Florian>aber irgendwie so unterm Strich halt auch sehr

01:16:56.730 --> 01:16:58.770
<v Florian>angenehm. Ja. Also hat

01:16:58.770 --> 01:17:00.150
<v Florian>sich irgendwo bewährt.

01:17:01.090 --> 01:17:01.830
<v Florian>Entspricht diesem

01:17:01.830 --> 01:17:03.910
<v Dominik>Pathonic-ästhetischen Ansatz irgendwie,

01:17:04.110 --> 01:17:05.930
<v Dominik>das in klarer Sprache hinzuschreiben, was

01:17:05.930 --> 01:17:07.890
<v Dominik>das machen soll. Und das Assert ist da

01:17:07.890 --> 01:17:10.090
<v Dominik>für Tests, glaube ich. Sieht einfach schick aus.

01:17:11.290 --> 01:17:16.070
<v Jochen>Ja, aber wäre das jetzt nicht auch schick, wenn Assert in anderen Stellen genauso funktionieren würde?

01:17:17.250 --> 01:17:19.730
<v Jochen>Vielleicht denken ja Leute, wenn sie das in PyTest verwendet haben,

01:17:19.910 --> 01:17:22.250
<v Jochen>ah, das funktioniert ja immer so und machen das dann irgendwann anders.

01:17:22.330 --> 01:17:24.630
<v Jochen>Und dann verhält sich das plötzlich ganz anders, als sie gedacht haben.

01:17:24.630 --> 01:17:30.150
<v Dominik>Ja, aber man kann ja zwar Asserts ausschalten, wenn man das richtig aufruft, den Interpreter.

01:17:30.630 --> 01:17:31.750
<v Dominik>Aber normalerweise macht man das ja nicht.

01:17:31.850 --> 01:17:34.910
<v Dominik>Normalerweise fährt Assert dann einfach mit einem Assertion Error auf die Nase.

01:17:35.210 --> 01:17:38.250
<v Jochen>Ja, aber in PyTest sieht das dann ja anders aus.

01:17:38.930 --> 01:17:40.850
<v Dominik>Naja, aber das ist eigentlich relativ

01:17:40.850 --> 01:17:42.670
<v Dominik>klar, oder? Dass halt, wenn ein Python-Test fällt,

01:17:42.750 --> 01:17:44.630
<v Dominik>dass der Assertion-Error dann mit mehr

01:17:44.630 --> 01:17:46.110
<v Dominik>Informationen auch zurückgegeben wird. Also,

01:17:46.850 --> 01:17:48.310
<v Dominik>das macht er ja schon. Also, der im Prinzip

01:17:48.310 --> 01:17:50.710
<v Dominik>ein failender Python-Test heißt, du hast ein Assertion-Error.

01:17:51.910 --> 01:17:52.610
<v Dominik>Nee, nee, nee.

01:17:53.110 --> 01:17:54.230
<v Dominik>Ja, aber also,

01:17:54.670 --> 01:17:56.330
<v Jochen>ein Python-Test macht dann halt eine Menge Dinge.

01:17:56.450 --> 01:17:58.630
<v Dominik>Ja gut, aber das ist ja, dafür ist ja das Framework ja da.

01:17:58.770 --> 01:17:59.570
<v Dominik>Ich glaube, dass das...

01:17:59.570 --> 01:18:02.670
<v Florian>Da wollte Ronny Pfandschmid, auch einer

01:18:02.670 --> 01:18:04.610
<v Florian>der Maintainer, wollte da auch mal irgendeinen

01:18:04.610 --> 01:18:06.730
<v Florian>Pip schreiben oder sowas, dass man sich eben

01:18:06.730 --> 01:18:08.730
<v Florian>bei Python gerade schön da

01:18:08.730 --> 01:18:10.370
<v Florian>reinhängen kann in diese Assertions.

01:18:10.510 --> 01:18:10.990
<v Florian>Ja, das wäre

01:18:10.990 --> 01:18:14.770
<v Florian>schon ganz nützlich.

01:18:14.890 --> 01:18:16.570
<v Jochen>Für irgendwie so eine Assertion-Lib oder sowas,

01:18:16.630 --> 01:18:18.550
<v Jochen>die man einfach importiert und dann hat man schönere Assertions

01:18:18.550 --> 01:18:19.330
<v Jochen>oder so, das wäre doch cool.

01:18:19.890 --> 01:18:22.770
<v Jochen>Aber ich glaube, da ist es leider nie

01:18:22.770 --> 01:18:23.310
<v Jochen>was geworden.

01:18:26.130 --> 01:18:26.690
<v Jochen>Was es

01:18:26.690 --> 01:18:28.950
<v Florian>gibt für Notebooks vielleicht noch ganz interessant,

01:18:29.530 --> 01:18:30.350
<v Florian>ein Ding namens

01:18:30.350 --> 01:18:31.370
<v Florian>IPyTest,

01:18:31.850 --> 01:18:34.470
<v Florian>was eben PyTest in diese Notebooks

01:18:34.470 --> 01:18:36.370
<v Florian>integriert. Also man kann einfach mit

01:18:36.370 --> 01:18:38.290
<v Florian>Prozent-Prozent IPyTest

01:18:38.290 --> 01:18:39.730
<v Florian>kann man halt PyTest ausführen

01:18:39.730 --> 01:18:42.230
<v Florian>und hat dann auch Zugriff gleich auf die

01:18:42.230 --> 01:18:44.250
<v Florian>lokalen Variablen aus dem Notebook und

01:18:44.250 --> 01:18:46.430
<v Florian>sowas. Und das,

01:18:46.610 --> 01:18:48.270
<v Florian>wenn man das einmal einrichtet in dem

01:18:48.270 --> 01:18:50.230
<v Florian>Notebook, dann kriegt man auch in diesem

01:18:50.230 --> 01:18:51.470
<v Florian>Notebook global

01:18:51.470 --> 01:18:53.890
<v Florian>quasi geschenkt die

01:18:53.890 --> 01:18:56.330
<v Florian>Assertion-Infos, wenn eine Assertion

01:18:56.330 --> 01:18:58.150
<v Jochen>fehlschlägt. Ach, das geht dann auch an anderen Stellen

01:18:58.150 --> 01:18:59.790
<v Jochen>sozusagen, dann, ah ja.

01:19:00.330 --> 01:19:02.150
<v Florian>Genau, das hängt sich dann halt da irgendwie

01:19:02.150 --> 01:19:04.250
<v Florian>ein. Ach, cool, das

01:19:04.250 --> 01:19:04.830
<v Florian>kann ich auch noch nicht.

01:19:06.510 --> 01:19:06.730
<v Florian>Ja.

01:19:07.970 --> 01:19:09.190
<v Florian>Und noch mehr Plugins hier benutzt?

01:19:11.250 --> 01:19:11.770
<v Florian>Äh...

01:19:11.770 --> 01:19:13.410
<v Dominik>Finde ich nochmal Freescan, wenn ich

01:19:13.410 --> 01:19:15.390
<v Dominik>irgendwie so Zeit sagen will, auch zu der und der Zeit

01:19:15.390 --> 01:19:17.390
<v Dominik>oder die Zeit muss ich jetzt um zwei Stunden verschieben

01:19:17.390 --> 01:19:19.050
<v Dominik>zwischen zwei Tests oder sowas.

01:19:19.190 --> 01:19:21.410
<v Dominik>Das ist ganz nett. Mit Context Manager

01:19:21.410 --> 01:19:23.490
<v Dominik>oder so. Das ist cool.

01:19:23.890 --> 01:19:25.090
<v Dominik>Ja, das habe ich schon genutzt.

01:19:25.550 --> 01:19:27.130
<v Dominik>Responses. Oh ja, ja.

01:19:27.150 --> 01:19:29.730
<v Florian>Das ist Mocking halt für Requests.

01:19:30.170 --> 01:19:31.110
<v Florian>Man ruft eigentlich

01:19:31.110 --> 01:19:33.330
<v Florian>im Prinzip, wie man Requests abruft, ruft man halt

01:19:33.330 --> 01:19:35.530
<v Florian>erstmal Responses auf und das mockt einem das weg.

01:19:35.790 --> 01:19:37.290
<v Dominik>Ich glaube, das gibt auch für HTTPX, wenn ich das

01:19:37.290 --> 01:19:37.990
<v Dominik>richtig gesehen habe.

01:19:39.190 --> 01:19:40.310
<v Dominik>Und da,

01:19:40.990 --> 01:19:42.990
<v Florian>ich fände es eigentlich schön, wenn es mehr so

01:19:42.990 --> 01:19:45.290
<v Florian>Mocking-Libraries gibt. Also sowas

01:19:45.290 --> 01:19:47.510
<v Florian>wie jetzt eben FreezeGang, VCR,

01:19:47.770 --> 01:19:48.950
<v Florian>Responsys oder diesen

01:19:48.950 --> 01:19:51.370
<v Florian>HTTPX-Mock. Ich bin eigentlich

01:19:51.370 --> 01:19:53.690
<v Florian>der Meinung, jede Python-Library,

01:19:53.810 --> 01:19:55.110
<v Florian>die irgendwas macht mit

01:19:55.110 --> 01:19:57.070
<v Florian>externen Systemen, also auch sowas wie

01:19:57.070 --> 01:19:58.670
<v Florian>PySerial beispielsweise,

01:19:59.470 --> 01:20:01.190
<v Florian>sollte halt gerade auch

01:20:01.190 --> 01:20:02.930
<v Florian>irgendwie so Testsupport oder so

01:20:02.930 --> 01:20:05.070
<v Florian>Mocks gleich mitliefern und dann auch schöne

01:20:05.070 --> 01:20:06.990
<v Florian>maintained getestete Mocks.

01:20:07.290 --> 01:20:10.390
<v Florian>Mocking ist immer noch sowas, das macht man irgendwie so

01:20:10.390 --> 01:20:12.490
<v Florian>ad hoc in jeder Testsuite wieder neu

01:20:12.490 --> 01:20:14.610
<v Florian>das Rad erfunden. Ja, ist das natürlich

01:20:14.610 --> 01:20:16.530
<v Dominik>auch, ja. Das stimmt, da ist relativ viel Zeit

01:20:16.530 --> 01:20:18.050
<v Dominik>immer dann, bis man das richtig läuft.

01:20:18.710 --> 01:20:20.510
<v Dominik>Das ist wahrscheinlich sogar der Hauptteil, den man

01:20:20.510 --> 01:20:21.830
<v Dominik>braucht für Testschreiben, ne?

01:20:22.890 --> 01:20:24.270
<v Dominik>Nö, das würde ich jetzt auch nicht sagen.

01:20:25.010 --> 01:20:26.410
<v Dominik>Aber es ist halt immer wieder

01:20:26.410 --> 01:20:27.510
<v Dominik>das, ja.

01:20:29.170 --> 01:20:30.730
<v Dominik>Was ich noch gerne mache, ist Insta-Fail.

01:20:32.190 --> 01:20:32.790
<v Dominik>Ah, ja.

01:20:32.790 --> 01:20:34.850
<v Dominik>Und dann sieht man halt direkt, wenn die Tests ein bisschen länger laufen

01:20:34.850 --> 01:20:36.650
<v Dominik>und die Tests, die fehlen schon mal, kann daran schon mal

01:20:36.650 --> 01:20:38.570
<v Dominik>dann werkeln, wenn man einfach nur

01:20:38.570 --> 01:20:40.130
<v Dominik>sich verschrieben hat, vertippt hat oder so,

01:20:40.650 --> 01:20:42.410
<v Dominik>hat man den schon mal dann drauf und das läuft dann trotzdem

01:20:42.410 --> 01:20:43.490
<v Dominik>noch.

01:20:44.990 --> 01:20:46.590
<v Dominik>Ich nutze noch, da bin ich jetzt nicht

01:20:46.590 --> 01:20:48.670
<v Florian>so stolz drauf, aber ich nutze noch PyTest

01:20:48.670 --> 01:20:49.930
<v Florian>Rerun Failures,

01:20:50.890 --> 01:20:52.650
<v Florian>wo man Tests halt aus Flaky markieren

01:20:52.650 --> 01:20:54.610
<v Florian>kann und wenn sie fehlschlagen, werden sie halt noch mal

01:20:54.610 --> 01:20:55.210
<v Florian>ausgeführt.

01:20:56.490 --> 01:20:58.610
<v Florian>Weil ich bei Qt-Browser halt wirklich

01:20:58.610 --> 01:21:00.610
<v Florian>aus GUI-Applikationen mit so vielen

01:21:00.610 --> 01:21:02.070
<v Florian>externen Komponenten

01:21:02.070 --> 01:21:04.690
<v Florian>dieses Problem mit Flaky-Tests

01:21:04.690 --> 01:21:05.950
<v Florian>fast nicht in den Griff kriege.

01:21:06.650 --> 01:21:09.510
<v Florian>Und dann bis zu irgendwie

01:21:09.510 --> 01:21:11.570
<v Florian>eine Assertion-Failure in der

01:21:11.570 --> 01:21:13.430
<v Florian>libc, also so die Library

01:21:13.430 --> 01:21:14.930
<v Florian>c selbst implementiert,

01:21:15.430 --> 01:21:17.550
<v Florian>wo ich sagen muss, dass ich mir jetzt so viele Levels

01:21:17.550 --> 01:21:19.290
<v Florian>darunter, da kann ich jetzt echt nichts

01:21:19.290 --> 01:21:21.330
<v Florian>daran ändern. Also, was will ich machen?

01:21:23.070 --> 01:21:23.270
<v Florian>Ja.

01:21:23.990 --> 01:21:25.290
<v Florian>Aber natürlich nur so jedes

01:21:25.290 --> 01:21:26.130
<v Florian>tausendste Mal.

01:21:27.790 --> 01:21:29.450
<v Dominik>Ja, das ist ja ganz

01:21:29.450 --> 01:21:30.770
<v Dominik>mies, wenn irgendwie so ein Test nur

01:21:30.770 --> 01:21:33.330
<v Dominik>jedes hundertste Mal fehlschlägt,

01:21:33.410 --> 01:21:34.630
<v Dominik>das ist ja ganz eklig.

01:21:35.590 --> 01:21:37.050
<v Dominik>Irgendwie so das rauszufinden,

01:21:37.450 --> 01:21:39.610
<v Dominik>das ist immer...

01:21:39.610 --> 01:21:41.490
<v Jochen>Ja, war das auch, ist das ein Plugin oder kann das

01:21:41.490 --> 01:21:43.130
<v Jochen>Pytest, das weiß ich gar nicht, aber dass man die

01:21:43.130 --> 01:21:45.310
<v Jochen>Reihenfolge irgendwie zufällig macht,

01:21:45.770 --> 01:21:47.470
<v Jochen>Random, Pytest, Randomize oder

01:21:47.470 --> 01:21:49.630
<v Jochen>irgendwie so. Ja, da gibt es ein paar

01:21:49.630 --> 01:21:50.770
<v Jochen>Randomly, gibt es...

01:21:50.770 --> 01:21:55.530
<v Jochen>Ja, genau, ja.

01:21:56.190 --> 01:21:57.270
<v Jochen>Macht eigentlich Sinn,

01:21:57.270 --> 01:21:59.390
<v Florian>weil eben Tests voneinander unabhängig

01:21:59.390 --> 01:22:00.010
<v Florian>sein sollten.

01:22:01.470 --> 01:22:03.130
<v Florian>Und andersrum gibt es

01:22:03.130 --> 01:22:05.290
<v Florian>Pytest Order, wo man sagen kann, Tests sollen

01:22:05.290 --> 01:22:07.350
<v Florian>halt voneinander abhängig sein in einer bestimmten

01:22:07.350 --> 01:22:07.970
<v Florian>Reihenfolge.

01:22:08.970 --> 01:22:10.350
<v Florian>Wie heißt das? Kannst du nochmal betonen, bitte?

01:22:11.050 --> 01:22:12.570
<v Florian>PyTest Order, glaube ich.

01:22:15.210 --> 01:22:17.170
<v Florian>Da kommt oft die Frage dann eben

01:22:17.170 --> 01:22:19.250
<v Florian>von Kunden von mir,

01:22:19.350 --> 01:22:21.470
<v Florian>die dann irgendwie Elektronik mit PyTest testen.

01:22:22.710 --> 01:22:23.370
<v Florian>Weil da

01:22:23.370 --> 01:22:25.150
<v Florian>natürlich, wenn man jetzt

01:22:25.150 --> 01:22:26.570
<v Florian>eine Klimakammer hat oder so,

01:22:27.210 --> 01:22:28.850
<v Florian>ist das halt nun mal so, dass die Dinge

01:22:28.850 --> 01:22:29.910
<v Florian>voneinander abhängen.

01:22:30.930 --> 01:22:32.770
<v Florian>Oder dass man vielleicht alle Tests irgendwie

01:22:32.770 --> 01:22:34.850
<v Florian>bei 30 Grad laufen

01:22:34.850 --> 01:22:36.670
<v Florian>sollen, dass man die erstmal laufen lassen

01:22:36.670 --> 01:22:38.770
<v Florian>will, anstatt jedes Mal auf minus 10 Grad

01:22:38.770 --> 01:22:40.530
<v Florian>runter zu kühlen und weder hoch auf 30.

01:22:40.930 --> 01:22:41.770
<v Florian>Oder wie auch immer.

01:22:43.150 --> 01:22:44.150
<v Florian>Macht wahrscheinlich Sinn.

01:22:46.230 --> 01:22:46.490
<v Florian>Ja.

01:22:47.410 --> 01:22:48.850
<v Florian>Ja, PyTest-BDD

01:22:48.850 --> 01:22:50.570
<v Florian>nutze ich noch. Ah, okay,

01:22:50.670 --> 01:22:52.490
<v Jochen>das ist interessant. Ja, da habe ich auch schon häufiger was

01:22:52.490 --> 01:22:52.770
<v Jochen>gehört.

01:22:54.730 --> 01:22:56.030
<v Jochen>Ich habe es auch mal versucht zu nutzen.

01:22:56.930 --> 01:22:58.010
<v Jochen>Also, vielleicht nochmal kurz, der

01:22:58.010 --> 01:23:01.570
<v Dominik>Behavior-Driven-Development-Test.

01:23:01.970 --> 01:23:02.090
<v Dominik>Genau.

01:23:02.690 --> 01:23:04.570
<v Dominik>Man kann so Logik, so Business-Logik

01:23:04.570 --> 01:23:06.230
<v Dominik>schreiben, so für den PO oder so

01:23:06.230 --> 01:23:08.330
<v Dominik>und der kann dann so Sätze

01:23:08.330 --> 01:23:09.930
<v Dominik>formulieren in seiner eigenen

01:23:09.930 --> 01:23:11.730
<v Dominik>Sprache und dann guckt

01:23:11.730 --> 01:23:13.250
<v Dominik>PyTestBD, ob es geht oder nicht.

01:23:14.290 --> 01:23:15.590
<v Dominik>Aber so tief reinzukriegen...

01:23:15.590 --> 01:23:18.530
<v Florian>Das ist im Prinzip einfach nochmal eine kleine Abstraktion,

01:23:18.650 --> 01:23:19.730
<v Florian>dass man sagen kann,

01:23:20.470 --> 01:23:22.450
<v Florian>given I have an author

01:23:22.450 --> 01:23:24.250
<v Florian>user, when

01:23:24.250 --> 01:23:26.050
<v Florian>I do this and that,

01:23:26.230 --> 01:23:27.530
<v Florian>then this and that should happen.

01:23:28.270 --> 01:23:29.710
<v Florian>Also mit diesem given, when, then.

01:23:30.330 --> 01:23:32.390
<v Florian>Das halt wirklich als Testsprache hat

01:23:32.390 --> 01:23:33.590
<v Florian>und dann die Implementation

01:23:33.590 --> 01:23:35.490
<v Florian>der Tests

01:23:35.490 --> 01:23:38.190
<v Florian>eigentlich nochmal abgekapselt

01:23:38.190 --> 01:23:39.850
<v Florian>hat von den Test Cases.

01:23:40.010 --> 01:23:41.630
<v Florian>Also quasi so diese User Story

01:23:41.630 --> 01:23:42.770
<v Florian>reingießen, ja.

01:23:44.790 --> 01:23:45.270
<v Florian>Genau.

01:23:45.550 --> 01:23:47.770
<v Dominik>Also ich habe es wieder rausgeschmissen, ich habe es ausprobiert, aber irgendwie

01:23:47.770 --> 01:23:49.730
<v Dominik>wahrscheinlich lag es aber auch an einem Projekt

01:23:49.730 --> 01:23:51.750
<v Dominik>halt, wo das halt nicht so wirklich dazu gepasst hat.

01:23:52.610 --> 01:23:53.850
<v Dominik>Wofür verwendest du das?

01:23:55.070 --> 01:23:55.770
<v Dominik>Ich nutze halt

01:23:55.770 --> 01:23:57.650
<v Florian>ganz stark für die End-to-End-Tests für

01:23:57.650 --> 01:23:59.610
<v Florian>Cube Browser. Jetzt müsste ich

01:23:59.610 --> 01:24:01.530
<v Florian>da vielleicht nochmal kurz einhaken, was

01:24:01.530 --> 01:24:03.530
<v Florian>Cube Browser denn überhaupt ist. Jetzt habe ich es schon ein paar Mal

01:24:03.530 --> 01:24:27.990
<v Florian>Das ist so mein Hauptprojekt seit ziemlich genau zehn Jahren. Ich glaube, in drei Tagen oder so sind es zehn Jahre. Und zwar ein Webbrowser, der sehr stark auf Tastaturbedienung ausgelegt ist, so inspiriert von VI bzw. WIM, auf Chromium aufsetzt und in Python geschrieben ist.

01:24:27.990 --> 01:24:30.050
<v Florian>und darüber bin ich dann auch zu PyTest

01:24:30.050 --> 01:24:30.490
<v Florian>gekommen

01:24:30.490 --> 01:24:34.090
<v Florian>und das

01:24:34.090 --> 01:24:35.270
<v Florian>hat halt dann so

01:24:35.270 --> 01:24:37.670
<v Florian>ein Interface, also

01:24:37.670 --> 01:24:39.630
<v Florian>eine Command-Line quasi eingebaut

01:24:39.630 --> 01:24:41.930
<v Florian>und da habe ich dann

01:24:41.930 --> 01:24:43.870
<v Florian>halt auch viele End-to-End-Tests, wo ich halt einfach

01:24:43.870 --> 01:24:45.930
<v Florian>irgendwo ein Kommando hinschicke zu einem

01:24:45.930 --> 01:24:46.870
<v Florian>laufenden Browser

01:24:46.870 --> 01:24:50.210
<v Florian>und dann erstmal schaue, mit einem Web-Server,

01:24:50.330 --> 01:24:52.210
<v Florian>der direkt im PyTest-Prozess

01:24:52.210 --> 01:24:54.050
<v Florian>läuft, wurde

01:24:54.050 --> 01:24:55.730
<v Florian>dann die und die Seite

01:24:55.730 --> 01:24:57.790
<v Florian>aufgerufen oder ist das und das passiert.

01:24:57.990 --> 01:25:00.430
<v Florian>und so diese End-to-End-Tests

01:25:00.430 --> 01:25:01.770
<v Florian>habe ich dann halt eben mit

01:25:01.770 --> 01:25:03.630
<v Florian>BDD geschrieben, dass ich sage

01:25:03.630 --> 01:25:06.070
<v Florian>when I run open

01:25:06.070 --> 01:25:07.030
<v Florian>und irgendwie

01:25:07.030 --> 01:25:10.310
<v Florian>dann this and that page

01:25:10.310 --> 01:25:11.050
<v Florian>should be loaded

01:25:11.050 --> 01:25:13.430
<v Florian>ja

01:25:13.430 --> 01:25:16.370
<v Jochen>an der Stelle

01:25:16.370 --> 01:25:18.250
<v Jochen>klingt das durchaus sinnvoll, weil wahrscheinlich

01:25:18.250 --> 01:25:20.290
<v Jochen>hat man dann ganz viele davon und da will man ja

01:25:20.290 --> 01:25:22.490
<v Jochen>wahrscheinlich dann sozusagen nicht immer

01:25:22.490 --> 01:25:24.230
<v Jochen>das ganze Boilerplate

01:25:24.230 --> 01:25:26.290
<v Jochen>einschreiben

01:25:26.290 --> 01:25:31.190
<v Florian>Ja, ich weiß auch nicht, ob ich es nochmal so machen würde,

01:25:31.330 --> 01:25:34.590
<v Florian>weil es sind jetzt halt doch sehr viele so End-to-End-Tests geworden

01:25:34.590 --> 01:25:39.430
<v Florian>und da hat man ein Problem mit flaky Tests und mit langsamen Tests.

01:25:43.550 --> 01:25:46.230
<v Florian>Aber ich glaube, für so gewisse Dinge lohnt sich das schon.

01:25:46.490 --> 01:25:49.930
<v Florian>Also ich fand es auch ganz angenehm, wenn halt neue Leute dazukommen,

01:25:50.030 --> 01:25:51.730
<v Florian>die noch nie was mit PyTest gemacht haben,

01:25:52.510 --> 01:25:54.990
<v Florian>dass du denen sagen kannst, guck, schau dir das mal an,

01:25:54.990 --> 01:25:58.330
<v Florian>das ist eine schöne, eine hohe Abstraktion,

01:25:58.430 --> 01:25:59.830
<v Florian>noch mal höher als Python-Code

01:25:59.830 --> 01:26:01.750
<v Florian>und schau mal, ob du so einen Test schreiben kannst.

01:26:02.870 --> 01:26:06.610
<v Jochen>Ja, an der Stelle ist vielleicht auch noch ganz interessant,

01:26:06.730 --> 01:26:07.350
<v Jochen>genau, das ist ja auch,

01:26:07.470 --> 01:26:11.670
<v Jochen>selbst wenn man jetzt nicht BDD-Tests sozusagen so hinschreibt,

01:26:11.810 --> 01:26:13.350
<v Jochen>sondern normale Tests,

01:26:13.890 --> 01:26:15.690
<v Jochen>dann empfiehlt es sich da ja auch vielleicht,

01:26:15.930 --> 01:26:18.090
<v Jochen>sich im Grunde an dieses Pattern zu halten.

01:26:18.630 --> 01:26:21.390
<v Jochen>Also genau, Given-When-Then ist halt die eine Formulierung,

01:26:21.490 --> 01:26:23.470
<v Jochen>wie man das halt ausdrücken kann.

01:26:23.810 --> 01:26:44.830
<v Jochen>Es gibt noch eine andere, die nennt sich irgendwie Arrange, Act, Assert, aber es ist im Grunde beides das Gleiche. Es ist halt immer irgendwie, man baut sich zuerst irgendwie einen State zusammen, der halt irgendwie ist und dann macht man irgendwas drauf und dann guckt man hinterher, ist das rausgekommen, was man erwartet hat und wenn nicht, ist halt schlecht.

01:26:44.910 --> 01:26:55.170
<v Jochen>Aber es macht halt Sinn, Tests immer so zu strukturieren, dass man halt auch, wenn man jetzt auf den Test guckt, sofort weiß, okay, ach, an der Stelle wird nur irgendwas zusammengebaut.

01:26:55.490 --> 01:27:01.050
<v Jochen>An der Stelle wird jetzt der eigentliche Aufruf gemacht und hier erst hatten wir irgendwelche Dinge, wo wir dachten, das müsste jetzt da rauskommen.

01:27:03.250 --> 01:27:08.090
<v Dominik>Das BDD, das klingt auch so ein bisschen nach, als könnte man das mit Playwright machen. Ich weiß nicht, ob das dieses Pattern auch ist.

01:27:10.910 --> 01:27:12.170
<v Dominik>Die Playwright-Tests, die ich

01:27:12.170 --> 01:27:14.210
<v Jochen>bisher gemacht habe, ne, die waren halt einfach,

01:27:14.250 --> 01:27:15.610
<v Jochen>da habe ich das alles immer von Hand hingeschrieben.

01:27:16.150 --> 01:27:16.350
<v Jochen>Ja.

01:27:18.350 --> 01:27:20.190
<v Dominik>Es ist halt, ja, das macht aber so ein bisschen

01:27:20.190 --> 01:27:21.930
<v Dominik>BDD auch, oder? Also es gibt halt so einen Browser

01:27:21.930 --> 01:27:23.970
<v Dominik>und sagt halt, okay, geh auf diese Seite

01:27:23.970 --> 01:27:25.990
<v Dominik>und drück mal so einen Knopf und erwarte

01:27:25.990 --> 01:27:27.650
<v Jochen>das. Ja, aber es sind schon einfach

01:27:27.650 --> 01:27:29.930
<v Jochen>Funktionsaufrufe, es ist nicht irgendwie Text,

01:27:30.010 --> 01:27:31.850
<v Dominik>den man hinschreibt. Ja, okay, stimmt, ich mache es halt

01:27:31.850 --> 01:27:33.470
<v Dominik>anders, ich soll es direkt abheißen, ja.

01:27:34.530 --> 01:27:34.770
<v Dominik>Ja.

01:27:36.030 --> 01:27:38.050
<v Dominik>Ja, ich glaube, mir fällt kein Plugin mehr ein,

01:27:38.090 --> 01:27:39.730
<v Dominik>was ich jetzt empfehlen wollen würde.

01:27:40.390 --> 01:27:41.530
<v Dominik>Welche hatten wir ja schon.

01:27:43.530 --> 01:27:44.310
<v Dominik>Muss ich mich fragen,

01:27:44.430 --> 01:27:46.050
<v Jochen>ob es sowas gibt? Ich weiß nicht, in der

01:27:46.050 --> 01:27:47.730
<v Jochen>JavaScript-Welt, das sehe ich halt ab und zu mal,

01:27:48.250 --> 01:27:49.990
<v Jochen>gibt es halt auch so Dinge, da läuft halt

01:27:49.990 --> 01:27:51.110
<v Jochen>einfach immer irgendwie,

01:27:51.670 --> 01:27:54.050
<v Jochen>da wird halt geguckt, ob sich irgendwas an den

01:27:54.050 --> 01:27:56.070
<v Jochen>Files geändert hat und wenn, dann läuft halt da

01:27:56.070 --> 01:27:58.050
<v Jochen>irgendwie der Testrunner quasi die ganze Zeit

01:27:58.050 --> 01:28:00.250
<v Jochen>und läuft alle Tests, die dann halt

01:28:00.250 --> 01:28:02.210
<v Jochen>sozusagen davon beeinflusst sein könnten

01:28:02.210 --> 01:28:04.050
<v Jochen>von irgendeiner Änderung, werden dann halt nochmal ausgeführt

01:28:04.050 --> 01:28:06.090
<v Jochen>und das gibt dann einem so eine Art Dashboard,

01:28:06.190 --> 01:28:08.050
<v Jochen>was halt gerade nicht funktioniert oder was funktioniert.

01:28:08.810 --> 01:28:10.130
<v Jochen>Gibt es das für PyTest eigentlich

01:28:10.130 --> 01:28:11.690
<v Jochen>auch, weil ich glaube, sowas habe ich noch nicht gesehen.

01:28:13.090 --> 01:28:13.790
<v Jochen>Ja, es gibt

01:28:13.790 --> 01:28:15.990
<v Jochen>Testmon. Ah, okay.

01:28:16.330 --> 01:28:17.970
<v Jochen>Cool. Also ein Projekt,

01:28:18.250 --> 01:28:19.310
<v Jochen>ein größeres Projekt,

01:28:19.650 --> 01:28:20.830
<v Jochen>testmon.org,

01:28:21.690 --> 01:28:23.750
<v Florian>hatte ich mir mal angeschaut, aber jetzt auch schon länger

01:28:23.750 --> 01:28:24.350
<v Florian>nicht mehr.

01:28:26.310 --> 01:28:27.750
<v Florian>Ein paar Linken, guck mal noch mal rein.

01:28:28.150 --> 01:28:29.850
<v Florian>Ich weiß, dass es auch ein,

01:28:29.850 --> 01:28:31.510
<v Florian>zwei Leute gibt, die jetzt da so ein bisschen

01:28:31.510 --> 01:28:33.510
<v Florian>schauen, wie

01:28:33.510 --> 01:28:35.610
<v Florian>kann ich mit Coverage

01:28:35.610 --> 01:28:37.790
<v Florian>halt auch dann schauen, welche Tests wirklich

01:28:37.790 --> 01:28:39.710
<v Florian>beeinflusst sind von der

01:28:39.710 --> 01:28:40.530
<v Florian>Veränderungen und sowas.

01:28:41.350 --> 01:28:43.150
<v Florian>Aber es ist schon noch so etwas, was

01:28:43.150 --> 01:28:45.350
<v Florian>jetzt nicht so in fix

01:28:45.350 --> 01:28:47.410
<v Florian>fertig ist, eben aus dem Testmon.

01:28:47.650 --> 01:28:49.090
<v Florian>Also es gibt schon in fix fertig, aber

01:28:49.090 --> 01:28:50.910
<v Florian>jetzt auch noch was, was ich weiß, dass Leute

01:28:50.910 --> 01:28:51.770
<v Florian>dann arbeiten.

01:28:54.970 --> 01:28:55.370
<v Florian>Ja.

01:28:57.370 --> 01:28:59.150
<v Jochen>Ja, ansonsten, ich weiß nicht, was haben wir denn noch

01:28:59.150 --> 01:28:59.890
<v Jochen>so für Themen?

01:29:00.990 --> 01:29:02.610
<v Jochen>Noch irgendwie größere Dinge

01:29:02.610 --> 01:29:04.290
<v Jochen>gar nicht besprochen, oder?

01:29:06.970 --> 01:29:08.090
<v Jochen>Ja, vielleicht noch

01:29:08.090 --> 01:29:10.370
<v Jochen>den Development Sprint.

01:29:11.270 --> 01:29:12.670
<v Jochen>Naja, und zwar

01:29:12.670 --> 01:29:14.150
<v Jochen>gab es im

01:29:14.150 --> 01:29:16.850
<v Jochen>2016

01:29:16.850 --> 01:29:18.830
<v Florian>glaube ich mal einen Development Sprint,

01:29:19.430 --> 01:29:20.650
<v Florian>wo wir uns alle mal getroffen

01:29:20.650 --> 01:29:22.730
<v Florian>hatten in Freiburg im Breisgau

01:29:22.730 --> 01:29:24.650
<v Florian>und halt mal zusammen

01:29:24.650 --> 01:29:26.530
<v Florian>rumgehackt haben an PyTest.

01:29:27.210 --> 01:29:28.530
<v Florian>Zum einen halt eben so

01:29:28.530 --> 01:29:30.490
<v Florian>die wirklichen Verdächtigen,

01:29:30.490 --> 01:29:32.610
<v Florian>die Core-Entwickler, zum anderen

01:29:32.610 --> 01:29:34.370
<v Florian>aber auch ganz viele Leute von irgendwelchen

01:29:34.370 --> 01:29:36.470
<v Florian>Plugins oder auch einfach Leute, die mal was

01:29:36.470 --> 01:29:37.530
<v Florian>an PyTest machen wollten.

01:29:38.090 --> 01:29:40.010
<v Florian>Und ich bin gerade

01:29:40.010 --> 01:29:42.010
<v Florian>dran, fürs 24

01:29:42.010 --> 01:29:43.610
<v Florian>sowas wieder zu organisieren.

01:29:44.590 --> 01:29:46.030
<v Florian>Müsste wahrscheinlich mal noch schauen,

01:29:46.170 --> 01:29:48.010
<v Florian>dass ich das auf die PyTest-Webseite

01:29:48.010 --> 01:29:50.190
<v Florian>auch mache, weil bisher war die Resonanz

01:29:50.190 --> 01:29:51.910
<v Florian>nicht

01:29:51.910 --> 01:29:53.290
<v Florian>so viel.

01:29:54.670 --> 01:29:55.950
<v Florian>Ich habe

01:29:55.950 --> 01:29:58.130
<v Florian>da halt mal von einem Kunden von mir

01:29:58.130 --> 01:30:00.170
<v Florian>das Angebot bekommen, dass die

01:30:00.170 --> 01:30:01.930
<v Florian>uns da

01:30:01.930 --> 01:30:04.090
<v Florian>hosten bei sich in

01:30:04.090 --> 01:30:04.790
<v Florian>Vorarlberg,

01:30:05.850 --> 01:30:06.930
<v Florian>was erstmal so

01:30:06.930 --> 01:30:08.190
<v Florian>eben nirgendwo ist.

01:30:09.010 --> 01:30:11.070
<v Florian>Vorhalb, klingt nach Alpen irgendwo.

01:30:12.370 --> 01:30:13.310
<v Florian>Ja, das ist

01:30:13.310 --> 01:30:14.510
<v Florian>tatsächlich ziemlich nah

01:30:14.510 --> 01:30:17.130
<v Florian>als Österreich, aber gerade an der

01:30:17.130 --> 01:30:17.910
<v Florian>Schweizer Grenze.

01:30:18.930 --> 01:30:20.870
<v Florian>In einem Dorf mit irgendwie 3000

01:30:20.870 --> 01:30:21.930
<v Florian>Leuten oder so

01:30:21.930 --> 01:30:24.550
<v Florian>sind die zu Hause.

01:30:25.150 --> 01:30:26.890
<v Florian>Omikron heißen die.

01:30:27.490 --> 01:30:28.850
<v Florian>Und die hatten mir

01:30:28.850 --> 01:30:30.990
<v Florian>angeboten, das halt da zu

01:30:30.990 --> 01:30:33.250
<v Florian>hosten und meinten

01:30:33.250 --> 01:30:34.930
<v Florian>noch, ja, wir können da gratis

01:30:34.930 --> 01:30:37.150
<v Florian>essen und so und haben Sitzungsräume und so was.

01:30:39.270 --> 01:30:40.930
<v Florian>Und da hatte ich

01:30:40.930 --> 01:30:42.970
<v Florian>jetzt mal so eine Umfrage gemacht,

01:30:43.090 --> 01:30:44.850
<v Florian>wer dann so kommen will und es haben sich halt

01:30:44.850 --> 01:30:46.490
<v Florian>irgendwie fünf Leute oder so gemeldet.

01:30:47.750 --> 01:30:48.970
<v Florian>Ich würde da eigentlich

01:30:48.970 --> 01:30:50.610
<v Florian>ganz gerne ein paar mehr Leute noch haben.

01:30:50.910 --> 01:30:53.030
<v Florian>Also eben in 2016

01:30:53.030 --> 01:30:54.970
<v Florian>waren es 27 Leute.

01:30:57.150 --> 01:30:58.710
<v Florian>Diesmal könnten wir schon so

01:30:58.710 --> 01:31:01.210
<v Florian>30, 35 oder so könnten wir hosten.

01:31:02.630 --> 01:31:03.110
<v Florian>Wahrscheinlich

01:31:03.110 --> 01:31:05.350
<v Florian>dann auch mit Preise teilweise

01:31:05.350 --> 01:31:07.150
<v Florian>bezahlt und so was, Unterkunft teilweise

01:31:07.150 --> 01:31:09.030
<v Florian>bezahlt, müsste man sich alles im Detail mal

01:31:09.030 --> 01:31:10.950
<v Florian>anschauen, wenn wirklich

01:31:10.950 --> 01:31:12.450
<v Florian>die Retonanz auch da ist.

01:31:13.010 --> 01:31:15.050
<v Jochen>Ja, cool. Also da kann man sich auf jeden Fall mal

01:31:15.050 --> 01:31:16.430
<v Jochen>melden, wenn man da Interesse hat.

01:31:16.970 --> 01:31:18.830
<v Jochen>Wann wäre das denn ungefähr im Jahr?

01:31:19.090 --> 01:31:20.210
<v Jochen>Eher in so einem Sommer oder?

01:31:20.830 --> 01:31:22.190
<v Jochen>Genau im Juni.

01:31:22.570 --> 01:31:23.870
<v Jochen>Dann ist noch ein bisschen Zeit.

01:31:25.010 --> 01:31:27.010
<v Florian>Genau, Mitte, Ende Juni

01:31:27.010 --> 01:31:28.950
<v Florian>sowas. Müssen noch schauen, welche Woche

01:31:28.950 --> 01:31:29.490
<v Florian>das wird.

01:31:30.710 --> 01:31:32.810
<v Florian>Und dann wäre eben so

01:31:32.810 --> 01:31:34.430
<v Florian>die Hoffnung, dass

01:31:34.430 --> 01:31:36.710
<v Florian>wir da Leute zusammenkriegen,

01:31:36.810 --> 01:31:38.710
<v Florian>die irgendwas machen wollen. Jetzt ohne eine fixe

01:31:38.710 --> 01:31:40.690
<v Florian>Idee zu haben, was genau, es kommt

01:31:40.690 --> 01:31:41.450
<v Florian>dann mal alles noch.

01:31:42.490 --> 01:31:44.130
<v Florian>Aber halt einfach so ein Development-Sprint

01:31:44.130 --> 01:31:46.570
<v Florian>wieder mal zu haben und sich mal wieder in Person zu sehen.

01:31:47.630 --> 01:31:48.430
<v Florian>Ja, gute Sache.

01:31:48.590 --> 01:31:49.570
<v Florian>Das ist mal super sowas, ja.

01:31:51.710 --> 01:31:52.850
<v Florian>Ja, was

01:31:52.850 --> 01:31:53.410
<v Florian>gibt's noch?

01:31:54.310 --> 01:31:56.450
<v Dominik>Ich würde sagen, mit PyTest sind wir, glaube ich,

01:31:56.450 --> 01:31:58.330
<v Dominik>mit den Themen, die ich zumindest auf der Liste

01:31:58.330 --> 01:31:59.270
<v Dominik>hatte, soweit.

01:32:00.030 --> 01:32:01.910
<v Dominik>Dann können wir vielleicht zu den Pics

01:32:01.910 --> 01:32:04.350
<v Dominik>der Woche des Monats der Folge

01:32:04.350 --> 01:32:05.930
<v Dominik>übergehen. Ja, kann man gerne machen.

01:32:07.570 --> 01:32:08.250
<v Dominik>Alles klar, dann mache ich

01:32:08.250 --> 01:32:10.030
<v Dominik>hier mal Kapitelmarker, Picks.

01:32:10.670 --> 01:32:11.010
<v Dominik>Upsi.

01:32:12.530 --> 01:32:13.810
<v Dominik>Also ich picke

01:32:13.810 --> 01:32:14.750
<v Dominik>fstring.help.

01:32:16.130 --> 01:32:17.430
<v Dominik>Aha, mich geehrt.

01:32:18.490 --> 01:32:20.390
<v Jochen>Ich glaube, ich hatte das auch schon mal

01:32:20.390 --> 01:32:22.330
<v Jochen>irgendwann gepickt, meine ich. Aber wir müssen mal gucken.

01:32:22.870 --> 01:32:24.330
<v Jochen>Wir picken immer nur noch Sachen, die wir

01:32:24.330 --> 01:32:26.130
<v Dominik>schon mal gepickt haben. Uns fällt nichts mehr ein.

01:32:26.130 --> 01:32:28.110
<v Dominik>Ja, ist mir jetzt

01:32:28.110 --> 01:32:29.490
<v Dominik>letztens auch passiert, habe ich es genau

01:32:29.490 --> 01:32:31.770
<v Dominik>in der nächsten Episode noch mal gepickt,

01:32:31.850 --> 01:32:32.750
<v Dominik>was ich schon mal gepickt hatte.

01:32:34.490 --> 01:32:35.810
<v Dominik>Ja, lass mal überlegen,

01:32:35.890 --> 01:32:37.790
<v Jochen>was würde ich denn picken? Ah, ich glaube, ich mache mal irgendwas

01:32:37.790 --> 01:32:39.870
<v Jochen>aus dem Data-Science-Bereich. Jetzt hat man das am Anfang

01:32:39.870 --> 01:32:40.550
<v Jochen>schon so ein bisschen

01:32:40.550 --> 01:32:43.650
<v Jochen>den Mund wässrig gemacht mit dem

01:32:43.650 --> 01:32:45.830
<v Jochen>OpenAI-Thema und dann

01:32:45.830 --> 01:32:47.030
<v Jochen>kam aber überhaupt gar nichts mehr.

01:32:47.690 --> 01:32:49.590
<v Jochen>Ich versuche mich da wieder so ein bisschen reinzufuchsen.

01:32:49.670 --> 01:32:51.390
<v Jochen>Ich mache das ja auch, aber in letzter Zeit viel mehr

01:32:51.390 --> 01:32:53.750
<v Jochen>Web-Entwicklungen gemacht, weiß gar nicht, warum.

01:32:53.750 --> 01:32:55.490
<v Jochen>Irgendwie eigentlich ist ja auch das

01:32:55.490 --> 01:32:56.610
<v Jochen>große Thema gerade, aber

01:32:56.610 --> 01:33:00.290
<v Jochen>und deswegen habe ich mir auch mal

01:33:00.290 --> 01:33:02.010
<v Jochen>geguckt, was gibt es denn da so an Kursen,

01:33:02.330 --> 01:33:04.050
<v Jochen>wenn man sich jetzt für diese ganzen Geschichten

01:33:04.050 --> 01:33:06.330
<v Jochen>LLM, Deployment und Kram

01:33:06.330 --> 01:33:08.310
<v Jochen>interessiert und da gibt es einen

01:33:08.310 --> 01:33:09.730
<v Jochen>Kurs von Fast AI,

01:33:10.250 --> 01:33:11.790
<v Jochen>Jeremy Howard macht das, das ist super,

01:33:12.350 --> 01:33:14.170
<v Jochen>den verlinke ich dann auch mal in den Shownotes,

01:33:14.710 --> 01:33:16.090
<v Jochen>da gibt es 2022

01:33:16.090 --> 01:33:18.370
<v Jochen>und 23, ich weiß nicht, ob es die 23

01:33:18.370 --> 01:33:20.270
<v Jochen>schon gibt, aber die 22

01:33:20.270 --> 01:33:21.550
<v Jochen>ist auf jeden Fall, ich glaube, die habe ich,

01:33:22.570 --> 01:33:24.290
<v Jochen>das Ding ist echt. Eigentlich müssen wir dazu eh noch mal

01:33:24.290 --> 01:33:26.110
<v Dominik>eine Folge machen, ich würde sagen, der Einstiegskurs ist

01:33:26.110 --> 01:33:28.010
<v Dominik>vielleicht sogar CS50

01:33:28.010 --> 01:33:30.030
<v Dominik>AIOS Python für die Leute, die so ein bisschen

01:33:30.030 --> 01:33:31.990
<v Dominik>mehr anfangen, die Grundlagen

01:33:31.990 --> 01:33:33.150
<v Dominik>irgendwie und dann

01:33:33.150 --> 01:33:35.530
<v Dominik>parallel mit der

01:33:35.530 --> 01:33:37.770
<v Dominik>YouTube-Travel-Serie von Andrew Capaci

01:33:37.770 --> 01:33:39.090
<v Dominik>ein Fast AI.

01:33:40.230 --> 01:33:41.770
<v Dominik>Würde ich sagen, dann ist mein

01:33:41.770 --> 01:33:43.890
<v Dominik>Datasign schon mit der Nase ganz schön

01:33:43.890 --> 01:33:44.390
<v Dominik>tief drin.

01:33:45.550 --> 01:33:47.410
<v Dominik>Wenn man so ein bisschen noch Statistik macht, vielleicht dann.

01:33:48.070 --> 01:33:49.730
<v Jochen>Oh, und dann picke ich vielleicht die andere Geschichte,

01:33:49.730 --> 01:33:51.510
<v Jochen>die ich mir auch aufgeschrieben hatte, gleich mit.

01:33:51.870 --> 01:33:53.150
<v Jochen>Es gibt eine super schöne

01:33:53.150 --> 01:33:55.590
<v Jochen>Visualisierung von, wie funktionieren diese

01:33:55.590 --> 01:33:57.750
<v Jochen>LLMs eigentlich, wo man halt sieht, wie ein Token

01:33:57.750 --> 01:33:59.590
<v Jochen>irgendwie oben so grafisch irgendwo

01:33:59.590 --> 01:34:01.830
<v Jochen>reinfällt und dann halt irgendwie

01:34:01.830 --> 01:34:03.730
<v Jochen>in Embeddings umgewandelt wird

01:34:03.730 --> 01:34:05.450
<v Jochen>und dann durch diese ganze Maschinerie durchläuft.

01:34:05.510 --> 01:34:07.470
<v Jochen>Dann kann man auch noch auswählen, welches Modell hätte man gerne.

01:34:08.890 --> 01:34:09.770
<v Jochen>Und das, wenn man

01:34:09.770 --> 01:34:11.910
<v Jochen>das mit der Technik, oh, das ist aber eine beeindruckende Visualisierung

01:34:11.910 --> 01:34:13.670
<v Jochen>und naja, das ist ja bestimmt alles irgendwie nur so,

01:34:14.130 --> 01:34:15.890
<v Jochen>hat sich jemand halt, ein Grafiker halt hingemalt

01:34:15.890 --> 01:34:17.670
<v Jochen>oder so, aber nein, es ist tatsächlich, es sind die

01:34:17.670 --> 01:34:19.690
<v Jochen>echten mehr oder weniger, also gut,

01:34:19.790 --> 01:34:21.770
<v Jochen>vielleicht nicht in jedem letzten Detail, aber es sind schon fast

01:34:21.770 --> 01:34:23.690
<v Jochen>die, schon quasi die echten Modelle

01:34:23.690 --> 01:34:25.590
<v Jochen>und da hat jemand sich echt Mühe gegeben

01:34:25.590 --> 01:34:27.790
<v Jochen>und in WebAssembly die ganzen

01:34:27.790 --> 01:34:29.950
<v Jochen>Operationen

01:34:29.950 --> 01:34:31.310
<v Jochen>alle nachimplementiert und

01:34:31.310 --> 01:34:33.690
<v Jochen>das ist schon großartig. Es gibt auch

01:34:33.690 --> 01:34:34.770
<v Jochen>den Source dazu.

01:34:36.630 --> 01:34:37.490
<v Jochen>Ja, es ist halt hauptsächlich

01:34:37.490 --> 01:34:39.090
<v Jochen>TypeScript und WebAssembly.

01:34:39.790 --> 01:34:41.450
<v Dominik>Du meinst aber nicht ManimaML?

01:34:42.410 --> 01:34:42.890
<v Dominik>ManimaML?

01:34:44.070 --> 01:34:45.670
<v Jochen>Ne, wüsste ich jetzt nicht. Also es ist halt einfach

01:34:45.670 --> 01:34:47.590
<v Jochen>so grafisch, man sieht halt

01:34:47.590 --> 01:34:49.490
<v Jochen>quasi wie so ein Ergebnis

01:34:49.490 --> 01:34:51.810
<v Jochen>von so einem Modell berechnet wird, halt grafisch.

01:34:52.230 --> 01:34:52.750
<v Jochen>Und wie heißt das?

01:34:53.690 --> 01:34:56.050
<v Dominik>Also ich kenne Money Mill.

01:34:57.150 --> 01:34:58.310
<v Dominik>Da muss ich mal gerade nachgucken,

01:34:59.530 --> 01:35:00.790
<v Dominik>ob das

01:35:00.790 --> 01:35:01.710
<v Dominik>genau so

01:35:01.710 --> 01:35:03.370
<v Dominik>heißt.

01:35:05.850 --> 01:35:06.950
<v Dominik>Das heißt

01:35:06.950 --> 01:35:08.790
<v Jochen>einfach nur LLM Visualization

01:35:08.790 --> 01:35:11.470
<v Jochen>und bbcroft.net

01:35:11.470 --> 01:35:12.670
<v Jochen>Also was

01:35:12.670 --> 01:35:14.630
<v Dominik>man mit Money Mill, kann man quasi seine eigenen

01:35:14.630 --> 01:35:16.670
<v Dominik>Sachen auch bauen. Da kann man sich auswählen,

01:35:16.750 --> 01:35:18.530
<v Dominik>welche Layer man in sein Neural-Network

01:35:18.530 --> 01:35:20.510
<v Dominik>reinsteckt und dann sowas bauen.

01:35:20.690 --> 01:35:22.190
<v Dominik>Oh, das sieht aber auch schick aus.

01:35:22.530 --> 01:35:24.230
<v Jochen>Ja, gut, kann man jetzt nicht sehen, wenn man es nur hört.

01:35:24.610 --> 01:35:26.310
<v Dominik>Ja, ja, Jochen hat es gerade aufgemacht auf dem Screen.

01:35:26.550 --> 01:35:28.930
<v Dominik>Das sieht sehr nice aus. Das bitte auch einmal linken.

01:35:30.050 --> 01:35:31.510
<v Dominik>Genau, das hätte ich dann halt auch nochmal verlinken.

01:35:31.910 --> 01:35:33.830
<v Dominik>Ja, dann machst du Money Mail direkt noch dazu.

01:35:33.970 --> 01:35:34.690
<v Dominik>Dann haben wir beide.

01:35:35.010 --> 01:35:36.350
<v Dominik>Okay, mache ich dann auch.

01:35:37.550 --> 01:35:37.750
<v Dominik>Ja.

01:35:39.870 --> 01:35:40.750
<v Dominik>Florian, hast du auch einen Pick?

01:35:42.050 --> 01:35:44.010
<v Florian>Ja, ich hatte erst mal gar nichts

01:35:44.010 --> 01:35:45.850
<v Florian>und jetzt sind mir da gleich zwei Dinge eingefallen.

01:35:46.350 --> 01:35:46.970
<v Florian>Ja, sehr gut.

01:35:47.850 --> 01:35:51.450
<v Florian>Zum einen, als du Data Visualization Event hattest,

01:35:51.850 --> 01:35:54.190
<v Florian>eine Webseite, die ich letztens

01:35:54.190 --> 01:35:56.050
<v Florian>von einem Kollegen

01:35:56.050 --> 01:35:58.490
<v Florian>gekriegt habe, datatowith.com,

01:35:59.730 --> 01:35:59.950
<v Florian>was

01:35:59.950 --> 01:36:01.990
<v Florian>einem so durchleitet, wenn ich eine gewisse

01:36:01.990 --> 01:36:03.870
<v Florian>Art von Daten habe, also

01:36:03.870 --> 01:36:05.390
<v Florian>jetzt irgendwie numerische Daten,

01:36:05.810 --> 01:36:07.850
<v Florian>zwei Variablen, ordered,

01:36:08.670 --> 01:36:09.750
<v Florian>was mir dann anzeigt,

01:36:09.890 --> 01:36:11.210
<v Florian>wie plotte ich das am schönsten.

01:36:12.950 --> 01:36:13.830
<v Florian>Mit dann auch

01:36:13.830 --> 01:36:16.170
<v Florian>Links zu irgendwie Python-Example-Code

01:36:16.170 --> 01:36:17.430
<v Florian>und sowas. Ja, schick.

01:36:18.730 --> 01:36:19.550
<v Florian>Das war das eine.

01:36:20.330 --> 01:36:21.410
<v Florian>Das andere ist

01:36:21.410 --> 01:36:22.790
<v Florian>die Evol-Game.

01:36:23.510 --> 01:36:25.010
<v Florian>Ich weiß nicht, ob ihr das mitbekommen habt mit

01:36:25.010 --> 01:36:26.130
<v Florian>The Password Game.

01:36:27.090 --> 01:36:29.750
<v Florian>Eine Webseite, wo man halt ein Passwort eingeben soll

01:36:29.750 --> 01:36:31.710
<v Florian>und dann kommen mehr und mehr

01:36:31.710 --> 01:36:33.110
<v Florian>Regeln dazu, das irgendwie

01:36:33.110 --> 01:36:35.570
<v Florian>um es dann

01:36:35.570 --> 01:36:36.630
<v Florian>unmöglich zu machen.

01:36:38.390 --> 01:36:39.930
<v Florian>Und basierend darauf

01:36:39.930 --> 01:36:42.230
<v Florian>Das Passwort-Game

01:36:42.230 --> 01:36:42.630
<v Florian>will ich auch.

01:36:43.870 --> 01:36:45.370
<v Florian>Und basierend darauf hat jemand halt

01:36:45.370 --> 01:36:48.090
<v Florian>The Evol-Game gemacht, wo man eine Python-Expression

01:36:48.090 --> 01:36:49.670
<v Florian>eingeben muss, die dann immer mehr

01:36:49.670 --> 01:36:51.010
<v Florian>um mehr Regeln folgen.

01:36:51.010 --> 01:36:52.470
<v Florian>Ach, ja, okay, interessant.

01:36:53.270 --> 01:36:53.910
<v Florian>Das klingt gut.

01:36:56.890 --> 01:36:59.050
<v Dominik>The digits in your password must add up

01:36:59.050 --> 01:36:59.730
<v Dominik>to 25.

01:37:01.410 --> 01:37:02.910
<v Jochen>Großartig. Sehr gute Idee.

01:37:02.970 --> 01:37:04.490
<v Florian>Ganz so ähnlich sieht es nach meinem

01:37:04.490 --> 01:37:06.170
<v Florian>Evil-Game aus.

01:37:08.810 --> 01:37:10.810
<v Florian>Ja, nee, vielen Dank. Das klingt doch super.

01:37:11.570 --> 01:37:11.710
<v Florian>Ja.

01:37:14.050 --> 01:37:14.450
<v Florian>Ja.

01:37:16.330 --> 01:37:17.150
<v Florian>Ja, ich glaube,

01:37:17.210 --> 01:37:18.130
<v Florian>dann sind wir heute durch.

01:37:18.130 --> 01:37:20.910
<v Dominik>Vielen Dank, dass du da warst, Florian.

01:37:21.010 --> 01:37:22.130
<v Dominik>Ich fand es sehr schön.

01:37:24.250 --> 01:37:24.930
<v Dominik>Ja, danke euch.

01:37:25.030 --> 01:37:26.430
<v Dominik>Viele Dinge, die ich noch nicht wusste.

01:37:27.510 --> 01:37:28.910
<v Dominik>Ja, ein Beitrag ist ein ganz

01:37:28.910 --> 01:37:31.270
<v Dominik>essentieller Teil, glaube ich, von dem, was wir so machen.

01:37:32.530 --> 01:37:33.170
<v Dominik>Auf jeden Fall.

01:37:33.930 --> 01:37:35.150
<v Dominik>Ja, dann danke, Florian.

01:37:35.310 --> 01:37:37.090
<v Dominik>Bleibt uns alle gewogen. Danke, Jochen.

01:37:37.950 --> 01:37:39.230
<v Dominik>Schreibt ein, wenn ihr noch was

01:37:39.230 --> 01:37:41.190
<v Dominik>wissen wollt, Fragen habt, Anregungen,

01:37:41.430 --> 01:37:42.790
<v Dominik>Kommentare. Vielen Dank auch von unseren

01:37:42.790 --> 01:37:44.290
<v Dominik>lieben Hörerinnen und Hörern, die uns

01:37:44.290 --> 01:37:46.730
<v Dominik>Fanpost schicken oder Fragen stellen und so.

01:37:46.810 --> 01:37:47.430
<v Dominik>Das ist immer sehr nett.

01:37:47.950 --> 01:37:49.550
<v Dominik>Hallo at peißenpodcast.de

01:37:49.550 --> 01:37:51.170
<v Dominik>könnt ihr uns erreichen.

01:37:52.270 --> 01:37:54.730
<v Dominik>Dann bis bald und ein gutes Jahresende

01:37:54.730 --> 01:37:56.450
<v Dominik>kann man ja fast schon sagen. Wir sind ja bald schon im

01:37:56.450 --> 01:37:57.510
<v Dominik>sechsten Podcast. Ja, Jochen?

01:37:58.210 --> 01:37:59.670
<v Dominik>Ach du giebe mir nicht. Echt? Ist das schon so lang?

01:37:59.830 --> 01:37:59.990
<v Dominik>Ja.

01:38:01.030 --> 01:38:04.270
<v Jochen>Jetzt fühle ich mich ja noch älter als ich normalerweise schon fühle.

01:38:04.370 --> 01:38:04.590
<v Jochen>Aber gut.

01:38:06.090 --> 01:38:08.630
<v Florian>Heißt also, die Folge muss jetzt noch dieses Jahr rauskommen.

01:38:08.770 --> 01:38:10.390
<v Jochen>Das wird aber auch noch funktionieren, denke ich.

01:38:10.810 --> 01:38:11.390
<v Jochen>Gut, gut.

01:38:11.390 --> 01:38:12.170
<v Jochen>Weiter ab, Jochen.

01:38:12.710 --> 01:38:15.790
<v Jochen>Ja, schauen wir mal.

01:38:16.270 --> 01:38:18.650
<v Jochen>Also, vielen Dank für eure Aufmerksamkeit.

01:38:18.790 --> 01:38:19.550
<v Jochen>Ja, ebenso.

01:38:20.750 --> 01:38:21.550
<v Jochen>Ciao dann. Tschüss.

01:38:22.250 --> 01:38:22.570
<v Jochen>Tschüss.
