WEBVTT

00:00:00.500 --> 00:00:04.980
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast in der heute zweiten Episode.

00:00:04.980 --> 00:00:09.560
Wir haben euch da ein ganz besonderes Thema für euch mitgebracht, und zwar Django.

00:00:09.560 --> 00:00:14.480
Für das zweite Mal natürlich ist es auch schon ein steiles Thema, aber ich glaube, das kriegen wir gemeinsam hin.

00:00:14.480 --> 00:00:21.500
Wir versuchen auch eine Einführung dazu zu machen, fangen heute ein bisschen an, wieder mit den Basics,

00:00:21.500 --> 00:00:23.580
und dann gehen wir ein bisschen in die Tiefe des Themas.

00:00:23.580 --> 00:00:27.700
Wir sind wieder im wunderschönen Wintergarten hier von Jochen, ich bin der Dominik,

00:00:27.860 --> 00:00:30.460
und diesmal habe ich nicht nur den Jochen dabei, sondern auch den Johannes.

00:00:30.460 --> 00:00:32.160
Danke auch nochmal, hallo ihr zwei.

00:00:32.160 --> 00:00:36.080
Ja, genau, hier ist auch Jochen, hallo von mir.

00:00:36.080 --> 00:00:44.400
Und genau, zum Django-Thema haben wir uns direkt schon mal einen ersten Expertengast eingeladen,

00:00:44.400 --> 00:00:52.340
und wir hoffen, dass der da irgendwie mehr weiß als wir und uns da viele interessante Geschichten erzählen kann.

00:00:52.340 --> 00:00:55.100
Und das ist Johannes, und genau, das kannst du dir vielleicht mal vorstellen.

00:00:55.100 --> 00:00:56.680
Ja, hallo, ich bin Johannes.

00:00:57.140 --> 00:01:00.460
Und nach der Ankündigung kann ich eigentlich gar nicht mehr so richtig viel sagen.

00:01:00.460 --> 00:01:05.320
Jetzt sind die Anforderungen gestellt, und mal schauen, ob ich die erfüllen kann.

00:01:05.320 --> 00:01:09.100
Also du arbeitest auch mit Django?

00:01:09.100 --> 00:01:10.700
Ich arbeite auch mit Django, genau.

00:01:10.700 --> 00:01:14.300
Ich arbeite mit Jochen viel zusammen, der ja auch mit Django sehr viel macht.

00:01:14.300 --> 00:01:22.620
Und wir haben uns auch darüber kennengelernt, im Chaos Computer Club in Düsseldorf in der Python-Ecke.

00:01:22.620 --> 00:01:26.140
Und haben dann festgestellt, dass wir beide Django machen.

00:01:27.140 --> 00:01:29.360
Und ja, arbeiten eigentlich seither zusammen.

00:01:29.360 --> 00:01:30.900
Gut, beim Python-Foodern, donnerstags.

00:01:30.900 --> 00:01:33.280
Genau, jeden Donnerstagabend ab 18 Uhr.

00:01:33.280 --> 00:01:37.700
Ja, also die Veranstaltungen kommen erst am Ende, aber wir versuchen das ab und zu nochmal ein bisschen einzuschreuen.

00:01:37.700 --> 00:01:38.300
Nein, super.

00:01:38.300 --> 00:01:42.100
Ja, wir machen heute Django, deswegen fangen wir vielleicht nochmal ganz am Anfang an.

00:01:42.100 --> 00:01:45.100
Johannes kann, glaube ich, sogar etwas zur Geschichte von Django erzählen.

00:01:45.100 --> 00:01:46.760
Er ist nämlich genauso ein alter Hase wie der Jochen.

00:01:46.760 --> 00:01:54.200
Wäre doch super, wenn du nochmal kurz erklären könntest, was das ist, wo kommt das denn her, was macht man damit überhaupt.

00:01:54.200 --> 00:01:56.900
Und also Django hört sich jetzt erstmal an.

00:01:56.980 --> 00:01:59.020
Warte, ist das ein Tanz?

00:01:59.020 --> 00:02:03.480
Ja, es ist benannt nach einem Jazz-Gitarristen, Django Reinhardt.

00:02:03.480 --> 00:02:08.920
Die beiden Entwickler, die sich das ausgedacht haben, waren wohl Fans von diesem Gitarristen.

00:02:08.920 --> 00:02:14.620
Es hat sonst auch keinerlei Verbindung mehr dazu, nur der Name stammt daher.

00:02:14.620 --> 00:02:20.520
Django ist ein Framework, um Web-Anwendungen mit Python herstellen zu können.

00:02:20.520 --> 00:02:26.720
Da gibt es mehrere solcher Frameworks, aber Django ist da sicherlich das Größte und sicherlich auch das Ausgereifteste.

00:02:26.820 --> 00:02:31.620
Das gibt es jetzt schon seit - jetzt müsste man rechnen können - knapp 15 Jahren?

00:02:31.620 --> 00:02:39.620
Ja, ich glaube, 2005 ist es rausgekommen oder 2004, ich weiß nicht, ich glaube, kurz nach "Ruby on Rails".

00:02:39.620 --> 00:02:43.220
Und ich denke, das war auch so ein bisschen vielleicht das Vorbild für Django.

00:02:43.220 --> 00:02:50.560
Ja, ich weiß gar nicht, ob die sich gegenseitig als Vorbild genommen haben, weil die sind ja schon so ein bisschen unterschiedlich in ihren Ansätzen.

00:02:50.560 --> 00:02:56.560
Ich habe das damals kennengelernt von einer Veranstaltung wie "Snakes and Rubies", sehr zu empfehlen auch.

00:02:56.660 --> 00:03:03.420
Übrigens gibt es auf YouTube immer noch das Video, inzwischen ungeheuer alt, wo sich eben da die beiden Hauptentwickler getroffen haben.

00:03:03.420 --> 00:03:12.160
Der Jack of Kaplan Moss war das, glaube ich, der da war und der von "Ruby on Rails" heißt David Hanmeier-Hansen.

00:03:12.160 --> 00:03:19.660
Und die beiden haben so im Wesentlichen ihre beiden Ansätze vorgestellt und haben eben "Snakes and Rubies" gezeigt.

00:03:19.660 --> 00:03:26.400
Und der eine, der Kaplan Moss, hat eben gezeigt, wie man Probleme mit Django löst.

00:03:26.500 --> 00:03:34.540
Den Querschnitt, wir haben eine Möglichkeit, URLs zu definieren und dann eine Funktionalität dazu zu definieren und dann die Templates dazu anzuzeigen und Sachen aus der Datenbank zu holen.

00:03:34.540 --> 00:03:44.000
Und dann hat der David Hanmeier-Hansen mehr oder weniger das Gleiche gemacht, aber auf eine ganz andere Art und Weise, eben auf die "Ruby on Rails"-Art und Weise.

00:03:44.000 --> 00:03:47.800
Wodurch unterscheidet sich die "Ruby on Rails"-Art und Weise von dem, was wir jetzt suchen?

00:03:47.800 --> 00:03:50.140
Ja, zuerst mal natürlich, dass es eine andere Programmiersprache ist.

00:03:50.140 --> 00:03:52.060
Ja.

00:03:52.060 --> 00:03:56.240
Aber "Ruby on Rails" geht wesentlich mehr über...

00:03:56.340 --> 00:03:57.900
Konventionen.

00:03:57.900 --> 00:04:02.580
Bei Django wird sehr viel explizit gemacht, also ein paar Beispiele ist, wie eben URLs funktionieren.

00:04:02.580 --> 00:04:06.900
In Django definierst du eine URL, indem du einen regulären Ausdruck hinschreibst.

00:04:06.900 --> 00:04:14.200
Und wenn der reguläre Ausdruck eben dem entspricht, was der Benutzer in seinem Browser eingibt, dann wird die entsprechende Funktion dazu ausgeführt.

00:04:14.200 --> 00:04:15.380
In "Ruby on Rails" ist das anders.

00:04:15.380 --> 00:04:17.540
In "Ruby on Rails" ist das durch eine Konvention gemacht.

00:04:17.540 --> 00:04:26.080
Du hast einen Controller, der einen bestimmten Namen hat und über diesen Namen wird automatisch die URL bestimmt, über die du diesen

00:04:26.180 --> 00:04:29.140
Controller ansprechen kannst.

00:04:29.140 --> 00:04:35.340
Das heißt, du hast auf der einen Seite wesentlich stärkere Konventionen, du hast damit die Möglichkeit, ein "Ruby on Rails"-Projekt,

00:04:35.340 --> 00:04:40.080
sag ich mal, schneller zu verstehen, weil die alle die gleiche Struktur haben.

00:04:40.080 --> 00:04:43.940
Andererseits musst du diese Sachen eben wissen, du musst die Konventionen wissen.

00:04:43.940 --> 00:04:47.620
Und das ist für mich so ein bisschen der große Unterschied am Anfang gewesen.

00:04:47.620 --> 00:04:55.920
Ich mag es gerne, wenn Sachen explizit dastehen, wenn die Programme das tun, was ich hingeschrieben habe und nicht so ein bisschen magisch hintenrum

00:04:56.020 --> 00:05:02.460
das tun, was halt eingerichtet ist, weil das jemand wusste.

00:05:02.460 --> 00:05:11.560
Und das ist gleichzeitig eine Stärke und eine Schwäche, weil man eben dadurch in "Ruby on Rails" wesentlich schneller Ergebnisse sieht.

00:05:11.560 --> 00:05:18.260
Ich muss nur diesen Controller schreiben und ich muss ihm nur eben eine bestimmte Datei an die richtige Stelle hinlegen und dann wird das automatisch zu einer

00:05:18.260 --> 00:05:19.160
kompletten Webseite.

00:05:19.160 --> 00:05:20.760
In Django muss ich den ganzen Weg gehen.

00:05:20.760 --> 00:05:25.760
Ich muss die URL definieren, ich muss die Funktionalität definieren, ich muss die Datenbankmodelle definieren, ich muss die in die

00:05:25.860 --> 00:05:31.920
Datenbank reintun, ich muss die aus der Datenbank wieder rausholen und dann muss ich sie in ein Template reintun, was ich selbst definiert habe.

00:05:31.920 --> 00:05:34.000
Du hast gerade nochmal von Controllern geredet.

00:05:34.000 --> 00:05:36.600
Vielleicht weiß jetzt noch nicht jeder Hörer, was das genau ist.

00:05:36.600 --> 00:05:37.500
Wollt ihr das nochmal kurz erklären?

00:05:37.500 --> 00:05:41.400
Ich weiß nicht, Jochen hat es einmal mir schon ganz schön erklärt, worum es dabei geht.

00:05:41.400 --> 00:05:45.260
Ja, also das wäre dann halt auch so eine Gemeinsamkeit zwischen "Ruby on Rails" und Django.

00:05:45.260 --> 00:05:52.920
Das sind beides so Model-View-Controller-Frameworks, also die diesen Ansatz halt halbwegs sauber irgendwie umsetzen.

00:05:52.920 --> 00:05:55.600
Das heißt, es gibt halt Modelle, in denen

00:05:55.700 --> 00:06:00.240
irgendwie definiert wird, wie die Daten aussehen, die man jetzt in der Applikation hält.

00:06:00.240 --> 00:06:05.840
Also wie der State der Applikation quasi abgelegt ist, sich verhalten soll.

00:06:05.840 --> 00:06:11.840
Meistens hat man eine relationale Datenbank irgendwie im Hintergrund und dann muss halt aus den Modellen wird dann halt ein Schema generiert.

00:06:11.840 --> 00:06:14.740
Dann werden die Daten halt da irgendwie reingespeichert.

00:06:14.740 --> 00:06:25.440
Und dann hat man sogenannte Controller, die quasi die Daten, die in den Modellen sind, mit den Views,

00:06:25.540 --> 00:06:31.280
die halt dafür zuständig sind, wie das hinterher aussehen soll, für ein Benutzer-Interface verbinden sollen.

00:06:31.280 --> 00:06:33.580
Wobei Benutzer-Interface ganz unterschiedliche Sachen sein können.

00:06:33.580 --> 00:06:42.780
Also ein Beispiel ist, man macht irgendwie ein Weltraum-Kampfspiel und dann gibt es halt vielleicht irgendwie ein grafisches Interface,

00:06:42.780 --> 00:06:44.880
wo man irgendwie die Raumschiffe rumfliegen sieht und so.

00:06:44.880 --> 00:06:48.780
Aber man kann sich halt auch vorstellen, dass ein anderes Interface nur textbasiert ist,

00:06:48.780 --> 00:06:55.280
weil wo sich dann Leute quasi per Telnet irgendwie einloggen oder so und das muss dann natürlich unterschiedlich

00:06:55.380 --> 00:06:57.380
aussehen, je nachdem, was man für ein Interface hat.

00:06:57.380 --> 00:07:00.380
Oder wenn man jetzt ein Touch-Interface hat, ist es nochmal anders.

00:07:00.380 --> 00:07:04.380
Und dafür diese Unterschiede abzubilden, ist halt der View zuständig und der Controller.

00:07:04.380 --> 00:07:10.380
Die sind halt dafür da, sozusagen die Views mit den Modellen irgendwie zu verbinden, also die Daten irgendwie aus den Modellen zu holen,

00:07:10.380 --> 00:07:13.380
die dann in der Form den Views zu geben, die sie deshalb brauchen.

00:07:13.380 --> 00:07:16.380
Und ja, das Ganze nennt man irgendwie Model-View-Controller.

00:07:16.380 --> 00:07:19.380
Also Modell ist das, was in der Datenbank angelegt ist, wie dann das...

00:07:19.380 --> 00:07:25.120
Ja, aber auch die Objekte quasi, die hinterher in der Applikation sich um die Datenhaltung kümmern, sind auch sozusagen die Modelle,

00:07:25.220 --> 00:07:26.220
ja.

00:07:26.220 --> 00:07:27.220
Okay.

00:07:27.220 --> 00:07:29.220
Also Datenbank ist halt eigentlich nochmal ein Problem.

00:07:29.220 --> 00:07:31.220
Also die klar ist, man benutzt die Verwaltung von dieser Datenbank auch.

00:07:31.220 --> 00:07:33.220
Ja, ja, genau, genau.

00:07:33.220 --> 00:07:40.220
Und was ein bisschen verwirrend ist, ist halt, dass in den Django, die die Views Templates heißen und die Controller-Views,

00:07:40.220 --> 00:07:43.220
das, weiß nicht, ein bisschen...

00:07:43.220 --> 00:07:45.220
Hier sind wir alle ein bisschen verwirrt und durcheinander, okay.

00:07:45.220 --> 00:07:53.220
Ja, da stolpern Anfänger oft drüber, dass die Bezeichnungen anders sind und eben ausgerechnet View und View unterschiedliche Dinge bedeuten.

00:07:53.220 --> 00:07:54.960
Gemein, da muss doch jemand mal so...

00:07:55.060 --> 00:07:57.060
Da muss jemand mal so ein Request stellen und sagen, hey, ändert das mal, oder?

00:07:57.060 --> 00:08:00.060
Ja, aber nach über zehn Jahren ist das halt ein bisschen schwer zu ändern.

00:08:00.060 --> 00:08:01.060
Ja, das ist halt nicht...

00:08:01.060 --> 00:08:04.060
Da haben sich ja die anderen Leute auch dran gewöhnt, wie das dann heißt, ja, verstehe, verstehe.

00:08:04.060 --> 00:08:05.060
Ja.

00:08:05.060 --> 00:08:10.060
Ja, also wofür nutzt man denn Django, wenn ihr jetzt gesagt habt, was da schon man machen kann?

00:08:10.060 --> 00:08:11.060
Mhm.

00:08:11.060 --> 00:08:18.060
Ja, im Prinzip kann man jede Web-Anwendung damit herstellen.

00:08:18.060 --> 00:08:23.060
Und die Breite ist da, also es gibt quasi keine Begrenzung.

00:08:23.060 --> 00:08:24.800
Das ist die erste Anwendung, die sicherlich...

00:08:24.900 --> 00:08:25.900
Was sicherlich jeder machen muss, ist ein Blog.

00:08:25.900 --> 00:08:33.800
Und jeder Django-Entwickler, der mehr als ein halbes Jahr daran gearbeitet hat, hat auch schon mal einen Blog damit gemacht.

00:08:33.800 --> 00:08:34.800
Ja.

00:08:34.800 --> 00:08:40.800
Dann gibt es so die ganz typischen Sachen, ein Wiki, Programmieren einfach mal auch zur Übung.

00:08:40.800 --> 00:08:54.640
Ich mache regelmäßig Django-Kurse und da programmieren wir dann Shops nach oder eBay nachprogrammiert oder Twitter nachprogrammiert, einfach um zu sehen, wie solche Funktionalitäten in Web-Anwendungen umgesetzt werden.

00:08:54.740 --> 00:09:01.640
Ja, also bei einem einwöchigen Kurs ist es absolut kein Problem, eine Basisfunktion von jeder dieser Webseiten hinzukriegen.

00:09:01.640 --> 00:09:10.640
Klar, die sehen nicht so schön aus und die haben auch nicht so viele Funktionen wie die tatsächlichen Vorbilder, aber die Grundvorgangsqualität ist eben sehr schnell damit umzusetzen.

00:09:10.640 --> 00:09:15.640
Auf was konzentrierst du dich dann besonders in diesem Kurs, also auf das Model, das View, das Controller-Ding?

00:09:15.640 --> 00:09:24.480
Ne, die müssen alle drei zusammenarbeiten, weil du mit jedem dieser Teile allein kannst du nicht, hast du keine komplette Anwendung.

00:09:24.580 --> 00:09:26.680
Ich habe keine komplette Anwendung, wenn die drei zusammenarbeiten.

00:09:26.680 --> 00:09:39.680
Das heißt, man muss so zwischen diesen Bereichen hin und her springen und da gibt es auch verschiedene Möglichkeiten, damit umzugehen, die sich auch, gerade wenn man mit anderen Leuten darüber spricht, zeigen, dass da jeder unterschiedlich damit umgeht.

00:09:39.680 --> 00:09:49.180
Aber im Endeffekt geht es darum, diese drei Bereiche zu verheiraten und diese drei Bereiche so zusammenzubringen, dass eine Anwendung daraus wird.

00:09:49.180 --> 00:09:53.980
Das heißt, ich brauche irgendwoher Daten, die ich handhaben kann.

00:09:54.420 --> 00:09:58.380
Und diese Daten sind eben in den Modellen definiert.

00:09:58.380 --> 00:10:03.400
Ich brauche irgendwelche Sachen, die ich anzeigen kann, weil im Endeffekt eine Webseite daraus werden soll.

00:10:03.400 --> 00:10:08.080
Das heißt, ich brauche so ein Template oder in der klassischen Sprache, ich brauche einen View.

00:10:08.080 --> 00:10:13.460
Und ich brauche irgendwas, was eine Funktionalität darstellt, weil sonst macht meine Web-Anwendung nichts.

00:10:13.460 --> 00:10:16.660
Und das ist hier in Django eben der Controller bzw. die View-Funktion.

00:10:16.660 --> 00:10:23.540
Nur wenn ich diese drei Teile zusammen habe und wenn die drei Teile so ineinander greifen, dass sie zusammen funktionieren,

00:10:24.260 --> 00:10:25.120
daraus eine Web-Anwendung.

00:10:25.120 --> 00:10:31.860
Das heißt, der Trick an der ganzen Sache oder der Trick an Django ist eigentlich nicht, dass sie diese drei Dinge gefunden haben

00:10:31.860 --> 00:10:37.780
oder diese drei Bereiche geschrieben haben, sondern dass die so integriert sind, dass die nahtlos ineinander greifen.

00:10:37.780 --> 00:10:40.960
Klingt praktisch.

00:10:40.960 --> 00:10:43.280
Ja, ist es auch.

00:10:43.280 --> 00:10:47.880
Eine Stelle, an der man das ganz schnell sieht, ist der Django-Admin.

00:10:47.880 --> 00:10:52.660
Das ist eines der am meisten gelobten Module in Django.

00:10:52.660 --> 00:10:54.040
Also Django-Admin ist das Backend.

00:10:54.100 --> 00:11:01.600
Das ist sozusagen ein genialer Zaubertrick, weil der Django-Admin, das ist einfach ein Modul in Django.

00:11:01.600 --> 00:11:05.040
Und ich kann das reinladen, das hat eine URL wie alles andere auch.

00:11:05.040 --> 00:11:12.560
Aber was der machen kann, ist, der kann die Modelle, die ich geschrieben habe, inspizieren und mir die dann eben in einer schönen Darstellung zeigen.

00:11:12.560 --> 00:11:22.900
Das heißt, ich habe automatisch eine Backend-Funktionalität drin, ich habe automatisch eine Verwaltungsfunktion drin, die aber meine Modellierung nimmt.

00:11:23.940 --> 00:11:32.640
Das heißt, die sich auf meine Modellklassen bezieht und die mir das Schreiben von so einer Backend-Funktionalität im Wesentlichen wegnimmt.

00:11:32.640 --> 00:11:41.600
Und das ist eine sehr schöne Sache, wenn man eben so eine Anwendung zum ersten Mal schreibt und sagt, okay, ich habe mich jetzt an WordPress orientiert, ich möchte einen Blog machen.

00:11:41.600 --> 00:11:42.860
Jeder möchte einen Blog machen am Anfang.

00:11:42.860 --> 00:11:49.220
Dann gehört dazu eben auch so ein Interface, wo ich die Blogposts bearbeiten kann.

00:11:49.220 --> 00:11:53.780
Und in der ersten Version kann man das sicherlich...

00:11:53.780 --> 00:12:06.680
Man kann das sicherlich im Django-Admin einfach drin lassen, weil es da die Möglichkeit gibt, Seiten hinzuzufügen und Seiten zu bearbeiten und Seiten zu löschen und vielleicht Seiten, keine Ahnung, wenn man das modelliert hat, freizugeben oder irgendwo hinzuverschieben oder sonst was zu machen.

00:12:06.680 --> 00:12:12.860
Diese ganzen Basisfunktionalitäten, die man immer braucht, die sind im Django-Admin schon drin.

00:12:12.860 --> 00:12:16.840
Das heißt oft CRUD, Create, Read, Update, Delete.

00:12:16.840 --> 00:12:22.980
Das sind die vier Funktionen, die man immer mit seinem Datenbank-Ding tun muss und die sind eben schon im Django-Admin drin.

00:12:23.620 --> 00:12:36.060
Das ist einfach eine sehr praktische Sache, weil diese drei Teile, Model, View und Controller, so gut integriert sind, dass man quasi aus Django heraus die zusätzlichen Dinge da mit reinnehmen kann.

00:12:36.060 --> 00:12:44.740
Ist das bei Django ganz individuell oder einzigartig und machen das die anderen Frameworks, die es in Python oder so gibt, von Flask oder von Pyramid mal gehört, auch so?

00:12:44.740 --> 00:12:53.160
Ja, gut, es gibt auch noch andere, die das auch so machen, aber ich würde sagen, die Bekannteren, die das halt komplett integrieren, sind eben Django.

00:12:53.460 --> 00:12:56.240
Für Python oder halt eben Ruby und Rails für Ruby.

00:12:56.240 --> 00:13:01.020
Und wenn man jetzt zum Beispiel Flask nimmt, dann ist das eher ein etwas anderer Ansatz.

00:13:01.020 --> 00:13:11.280
Da ist es halt so, dass der Layer, also Flask selber enthält kaum Model-View-Controller-Funktionalität, wie man sonst so in Django hat.

00:13:11.280 --> 00:13:18.740
Also es ist halt nicht alles integriert, sondern da kann man sich halt Dinge zusammenstecken, die man benutzen kann.

00:13:18.740 --> 00:13:22.960
Zum Beispiel der Object-Relational-Mapper.

00:13:23.300 --> 00:13:28.840
Also ORM genannt oft, ist halt in Flask meistens SQL-Alchemy.

00:13:28.840 --> 00:13:30.040
Man kann aber auch irgendwas anderes nehmen.

00:13:30.040 --> 00:13:35.980
Man kann, wie heißt dieses Dings, Pony oder so, was da irgendwie heute recht beliebt ist, nehmen oder so.

00:13:35.980 --> 00:13:38.280
Man könnte auch den Django-ORM nehmen.

00:13:38.280 --> 00:13:39.480
Man könnte auch den Django, genau.

00:13:39.480 --> 00:13:40.100
OR was?

00:13:40.100 --> 00:13:43.020
ORM Object-Relational-Mapper.

00:13:43.020 --> 00:13:51.800
Das ist die Verbindung zwischen der SQL-Datenbank, die eben rohes SQL braucht, und der Python-Welt, wo wir ja mit Python-Klassen arbeiten.

00:13:51.800 --> 00:13:53.140
Okay, jetzt habe ich das verstanden.

00:13:53.140 --> 00:14:03.060
Ja, und genau, bei Flask ist halt der Vorteil, dass man sich da quasi die Dinge, die man vielleicht auch sonst verwendet, oder die man lieber mag, irgendwie benutzen kann.

00:14:03.060 --> 00:14:06.340
Während bei Django kann man das theoretisch auch.

00:14:06.340 --> 00:14:08.280
Mit manchen Dingen ist es einfacher als mit anderen.

00:14:08.280 --> 00:14:11.800
Aber ich würde es jetzt nicht unbedingt gerade empfehlen.

00:14:11.800 --> 00:14:18.920
Also den Django-ORM auszutauschen ist halt, ja kann sein, dass das geht, aber das will man wahrscheinlich eher nicht tun.

00:14:18.920 --> 00:14:22.180
Wo man das macht, nimmt man dann vielleicht auch besser Flask oder so.

00:14:22.980 --> 00:14:24.800
Und ja, das sind halt unterschiedliche Trade-offs.

00:14:24.800 --> 00:14:27.020
Das hat halt gewisse Vorteile, wenn alles integriert ist.

00:14:27.020 --> 00:14:29.200
Und es hat halt auch gewisse Nachteile.

00:14:29.200 --> 00:14:30.820
Es ist halt ein bisschen weniger Flexibilität.

00:14:30.820 --> 00:14:33.740
Es ist eine steilere Lernkurve am Anfang.

00:14:33.740 --> 00:14:39.460
Aber weil einfach viel mehr Funktionalität da ist, mit der man irgendwie sich vertraut machen muss.

00:14:39.460 --> 00:14:46.020
Aber wenn man da erstmal so durchgestiegen ist, dann ist es halt auch schneller, damit irgendwas zu machen.

00:14:46.020 --> 00:14:51.100
Oder das halt auf neue Anforderungen anzupassen, als wenn man das jetzt irgendwie immer neu zusammenstöpseln muss.

00:14:51.100 --> 00:14:52.640
Wie ist das denn zum Beispiel?

00:14:52.820 --> 00:14:55.600
Wenn ihr jetzt so ein Modul benutzt, was es irgendwie schon gibt,

00:14:55.600 --> 00:14:58.780
wie viel Arbeit wäre das denn jetzt, in so ein neues Framework zu integrieren?

00:14:58.780 --> 00:15:02.340
Das kommt total auf das Modul an.

00:15:02.340 --> 00:15:05.580
Diese Fragen kann man so eigentlich nicht beantworten.

00:15:05.580 --> 00:15:12.960
Die Mentalität, glaube ich, zwischen diesen Frameworks ist auch so ein bisschen unterschiedlich.

00:15:12.960 --> 00:15:15.740
Flask ist so ein bisschen, du kannst alles benutzen, was du willst.

00:15:15.740 --> 00:15:19.020
Du musst dann halt selber dafür sorgen, dass die Teile zusammenpassen.

00:15:19.020 --> 00:15:22.720
Und Django ist mehr so ein bisschen, hier wir haben den Bowser,

00:15:22.740 --> 00:15:24.440
der hat es gemacht und du kannst gerne darauf aufbauen.

00:15:24.440 --> 00:15:27.580
Aber die müssen so funktionieren, wie wir das vorgegeben haben.

00:15:27.580 --> 00:15:33.880
Das heißt eben, wenn ich irgendein Modul habe oder eine Bibliothek, die nicht integriert ist,

00:15:33.880 --> 00:15:36.140
dann bin ich in Flask sicherlich schneller damit unterwegs,

00:15:36.140 --> 00:15:38.420
weil ich dann eben sowieso für diese Anbindung sorgen muss.

00:15:38.420 --> 00:15:43.820
In Django ist es dann eben oft so, dass es schon eine Django-Variante gibt davon,

00:15:43.820 --> 00:15:46.440
die mir eben genau diese Integration schon gibt.

00:15:46.440 --> 00:15:49.840
Und dann ist es natürlich leichter, die Django-Variante zu verwenden.

00:15:49.840 --> 00:15:52.440
Heißt halt aber, dass ich darauf angewiesen bin,

00:15:52.580 --> 00:15:55.640
dass schon jemand die Arbeit gemacht hat und auch fortlaufend tut,

00:15:55.640 --> 00:15:58.980
weil die Versionen natürlich ständig aktualisiert werden.

00:15:58.980 --> 00:16:03.080
Und es hat alles so seine Vor- und Nachteile.

00:16:03.080 --> 00:16:07.800
Wie würdet ihr denn einsteigen, wenn ihr jetzt irgendwie jemanden habt,

00:16:07.800 --> 00:16:08.860
der das noch nie gemacht hat?

00:16:08.860 --> 00:16:11.160
Möchtet ihr seine erste Website, einen Blog einstellen?

00:16:11.160 --> 00:16:12.200
Das würdet ihr ihm empfehlen?

00:16:12.200 --> 00:16:15.020
Einfach das Paket installieren und Tutorial lesen?

00:16:15.020 --> 00:16:17.080
Oder gibt es da schon eine Best Practice, wo ihr am besten...

00:16:17.080 --> 00:16:22.200
Ja, also ich würde, das habe ich bisher dann auch immer so gemacht.

00:16:22.500 --> 00:16:23.660
Wenn ich das gefragt worden bin,

00:16:23.660 --> 00:16:27.680
das Two Scoops auf Django-Buch zu empfehlen.

00:16:27.680 --> 00:16:29.840
Also das ist jetzt halt momentan nicht mehr so richtig super aktuell.

00:16:29.840 --> 00:16:33.960
Ich glaube, die letzte Auflage ist für Django 1.11.

00:16:33.960 --> 00:16:36.200
Und wir sind jetzt aber auch eigentlich schon bei 2.1.

00:16:36.200 --> 00:16:39.540
Da kommt dann wahrscheinlich für die nächste stabile

00:16:39.540 --> 00:16:43.440
oder länger supportete Release von Django

00:16:43.440 --> 00:16:44.860
wahrscheinlich auch wieder eine neue Version.

00:16:44.860 --> 00:16:48.320
Aber da wird eigentlich mal so grob beschrieben,

00:16:48.320 --> 00:16:51.020
wie man Dinge tut mit Django und so.

00:16:52.340 --> 00:16:54.300
Also ich fand das...

00:16:54.300 --> 00:16:57.160
Ich habe damals auch quasi einen Einstieg in Django

00:16:57.160 --> 00:16:58.740
über dieses Buch gefunden.

00:16:58.740 --> 00:17:00.420
Das war irgendwann 2013 oder so,

00:17:00.420 --> 00:17:02.420
weil ich irgendwie in einem Projekt plötzlich

00:17:02.420 --> 00:17:04.100
mit einem Django-Backend konfrontiert war.

00:17:04.100 --> 00:17:08.020
Und dann, ja, mir auch gesagt wurde,

00:17:08.020 --> 00:17:09.220
dann liest doch mal einfach dieses Buch

00:17:09.220 --> 00:17:11.960
und dann macht alles Sinn plötzlich.

00:17:11.960 --> 00:17:14.420
Und so ein bisschen war das schon so.

00:17:14.420 --> 00:17:18.180
Also das war sehr, sehr hilfreich.

00:17:18.180 --> 00:17:20.420
Ja, man kann aber auch mit der Dokumentation,

00:17:20.420 --> 00:17:22.060
die sehr gut ist, anfangen.

00:17:22.260 --> 00:17:22.960
Oder, ich weiß nicht,

00:17:22.960 --> 00:17:24.640
vielleicht mit einem von Johannes Grosen.

00:17:24.640 --> 00:17:27.480
Oder Facebook.

00:17:27.480 --> 00:17:28.920
Ja.

00:17:28.920 --> 00:17:30.840
Nee, ich mache das tatsächlich nicht so.

00:17:30.840 --> 00:17:33.060
Ich mag dieses Two Scoops of Django-Buch

00:17:33.060 --> 00:17:34.200
nicht ungeheuer gerne,

00:17:34.200 --> 00:17:37.680
weil das sehr viele eigene Meinungen schon mitbringt.

00:17:37.680 --> 00:17:40.300
Und weil man die erst bemerkt,

00:17:40.300 --> 00:17:42.140
wenn man sich so ein bisschen mehr damit auskennt.

00:17:42.140 --> 00:17:44.060
Ich meine, das ist nicht schlecht, ja.

00:17:44.060 --> 00:17:45.940
Und die Leute, die das machen, sind auch Experten.

00:17:45.940 --> 00:17:48.140
Und wir benutzen auch sehr viel davon.

00:17:48.140 --> 00:17:50.140
Wir werden vielleicht noch über Cookie Cutter sprechen.

00:17:52.100 --> 00:17:54.560
Aber ich finde, es hat schon zu viel Flavor.

00:17:54.560 --> 00:17:59.620
Es ist schon zu weit von Vanilla Django weg.

00:17:59.620 --> 00:18:01.560
Das sind ja noch mehr Freiheiten,

00:18:01.560 --> 00:18:03.580
die du selber gerne kreativ ausleben würdest,

00:18:03.580 --> 00:18:05.240
wenn du genau verstanden hättest, wie es funktioniert.

00:18:05.240 --> 00:18:05.620
Genau.

00:18:05.620 --> 00:18:07.100
Und das bedeutet auch,

00:18:07.100 --> 00:18:10.040
dass man eben auf diese Wahl festgelegt ist,

00:18:10.040 --> 00:18:14.020
die die Leute von Two Scoops of Django schon getroffen haben für uns.

00:18:14.020 --> 00:18:16.620
Weil die eben, wie gesagt, ihre Meinungen haben.

00:18:16.620 --> 00:18:17.400
Und weil die sagen,

00:18:17.400 --> 00:18:20.340
okay, du solltest eigentlich immer diese bestimmten Systeme verwenden

00:18:20.340 --> 00:18:21.300
und eben nicht diese anderen.

00:18:22.020 --> 00:18:23.260
Ja, genau.

00:18:23.260 --> 00:18:26.160
Hast du das schon getan, so ein Beispiel?

00:18:26.160 --> 00:18:30.960
Ja, zum Beispiel, wenn die ihre Docker-Container bereitstellen.

00:18:30.960 --> 00:18:34.120
Es gibt oft Situationen, wo man eben keine Docker-Container haben möchte.

00:18:34.120 --> 00:18:36.500
Das ist halt aber bei denen einfach so.

00:18:36.500 --> 00:18:37.780
Die haben alles dockerisiert.

00:18:37.780 --> 00:18:40.200
Ist einfach so eine Sache, oder?

00:18:40.200 --> 00:18:41.880
Die benutzen Django-Crispy-Forms,

00:18:41.880 --> 00:18:45.680
wo ich am Anfang sehr damit zu kämpfen hatte,

00:18:45.680 --> 00:18:47.840
weil es gar nicht dem entspricht, wie ich das machen will.

00:18:47.840 --> 00:18:49.080
Müssen wir vielleicht gleich nochmal kurz erzählen,

00:18:49.080 --> 00:18:51.700
was ein Docker-Container ist und was eine Crispy-Form ist?

00:18:51.860 --> 00:18:55.020
Das sind einfach nur so zwei Beispiele,

00:18:55.020 --> 00:18:59.220
wo Two Scoops of Django schon was ausgewählt hat,

00:18:59.220 --> 00:19:01.440
was man eventuell anders machen würde.

00:19:01.440 --> 00:19:04.140
Es ist unwichtig, was das jetzt genau bedeutet

00:19:04.140 --> 00:19:05.160
oder was das jetzt genau ist.

00:19:05.160 --> 00:19:09.860
Ich fange üblicherweise mit dem Tutorial an auf der Webseite,

00:19:09.860 --> 00:19:14.320
weil es zum einen relativ gut geschrieben ist.

00:19:14.320 --> 00:19:17.360
Die Django-Dokumentation ist erstklassig,

00:19:17.360 --> 00:19:18.420
die ist anwandfrei, die ist super.

00:19:18.420 --> 00:19:21.780
Kann ich jedem nur empfehlen.

00:19:21.780 --> 00:19:24.660
Auch wenn man nur die Django-Dokumentation liest

00:19:24.660 --> 00:19:26.580
und das alles mehrmals angeschaut hat,

00:19:26.580 --> 00:19:28.620
dann ist man Experte in Django-Dokumentation.

00:19:28.620 --> 00:19:31.880
Und das Tutorial ist einfach ein schneller Einstieg

00:19:31.880 --> 00:19:36.160
in was muss ich tun, um eine Funktionalität zu kriegen.

00:19:36.160 --> 00:19:39.940
Aber eigentlich würde ich noch einen Schritt vorher anfangen.

00:19:39.940 --> 00:19:42.260
Wenn sich jemand da einlesen möchte

00:19:42.260 --> 00:19:45.960
oder wenn jemand anfangen möchte, mit Django zu programmieren,

00:19:45.960 --> 00:19:48.760
ist meine Empfehlung, immer erstmal einen Schritt zurückzugehen

00:19:48.760 --> 00:19:51.140
und zu überlegen, genau was man eigentlich erreichen möchte.

00:19:51.700 --> 00:19:55.580
Weil es oft schwierig ist, das gleichzeitig zu machen,

00:19:55.580 --> 00:19:59.900
gleichzeitig zu lernen, wie man etwas erreicht

00:19:59.900 --> 00:20:03.100
und herauszufinden, was man eigentlich erreichen möchte.

00:20:03.100 --> 00:20:04.840
Das heißt, du würdest dir ein Projekt ausdenken,

00:20:04.840 --> 00:20:06.700
was derjenige dann umsetzen möchte,

00:20:06.700 --> 00:20:08.560
ob es jetzt Freizeit ist oder irgendwie nebenbei

00:20:08.560 --> 00:20:10.020
oder schon was Professionelles

00:20:10.020 --> 00:20:11.920
und dann direkt an diesem Projekt konkret

00:20:11.920 --> 00:20:14.480
sich die Lösungen aus Django dann zu erarbeiten.

00:20:14.480 --> 00:20:16.760
Genau, und vielleicht auch einfach mal konkret zu sagen,

00:20:16.760 --> 00:20:19.620
was muss ich haben an Funktionalität,

00:20:19.620 --> 00:20:21.040
um mein Ziel erreicht zu haben.

00:20:21.620 --> 00:20:23.680
Und machst du das dann richtig mit Stift und Papier

00:20:23.680 --> 00:20:24.740
oder aus einem Whiteboard

00:20:24.740 --> 00:20:26.540
oder malst du da eine Kreidetafel voll?

00:20:26.540 --> 00:20:29.280
Je nachdem, wo ich gerade bin

00:20:29.280 --> 00:20:31.380
und was gerade für Werkzeuge da sind.

00:20:31.380 --> 00:20:33.020
Wenn ich nur einen Texteditor da habe,

00:20:33.020 --> 00:20:35.240
dann schreibe ich mir halt ein paar Punkte im Texteditor ein.

00:20:35.240 --> 00:20:37.260
Wenn ich die Wachsmalstifte von meinem Kleidung dabei habe,

00:20:37.260 --> 00:20:39.060
dann male ich mir was auf die Hand.

00:20:39.060 --> 00:20:40.600
Nee, es ist einfach nur wichtig,

00:20:40.600 --> 00:20:43.640
ein Bild davon zu haben, was man erreichen möchte.

00:20:43.640 --> 00:20:46.460
Zu wissen, wo möchte ich hinkommen.

00:20:46.460 --> 00:20:48.460
Soll das ein Blog sein,

00:20:48.460 --> 00:20:50.800
was YouTube-Videos anzeigt?

00:20:51.540 --> 00:20:52.800
Soll das ein Podcast-Blog sein

00:20:52.800 --> 00:20:53.800
oder soll das ein Blog sein,

00:20:53.800 --> 00:20:56.800
wo ich nur, keine Ahnung, meine Texte reinschreibe?

00:20:56.800 --> 00:20:57.740
Müssen da Bilder rein?

00:20:57.740 --> 00:21:01.100
Müssen da andere Dateitypen rein?

00:21:01.100 --> 00:21:03.800
Will ich Sharing-Buttons haben?

00:21:03.800 --> 00:21:05.540
Lauter so Sachen,

00:21:05.540 --> 00:21:08.600
die jeder für sich entscheiden muss,

00:21:08.600 --> 00:21:10.140
die jeder für dieses Projekt entscheiden muss

00:21:10.140 --> 00:21:11.860
und die sicherlich in jedem Projekt anders sein werden,

00:21:11.860 --> 00:21:13.780
die aber eben dazu führen,

00:21:13.780 --> 00:21:15.200
dass man während man daran arbeitet,

00:21:15.200 --> 00:21:16.780
nicht mehr so viel drüber nachdenken muss.

00:21:16.780 --> 00:21:19.080
Und das ist für mich eine ganz wichtige Sache,

00:21:19.080 --> 00:21:21.160
dass ich eben weiß, wo ich hin möchte.

00:21:21.460 --> 00:21:24.260
Also, das kann sich zwischendurch ja ruhig ändern.

00:21:24.260 --> 00:21:25.780
Ja, das kann ja ruhig,

00:21:25.780 --> 00:21:28.580
man muss ja seinen Weg auch anpassen können.

00:21:28.580 --> 00:21:31.060
Und wenn man sich eben herausstellt,

00:21:31.060 --> 00:21:32.700
dass man sich zu viel vorgenommen hat

00:21:32.700 --> 00:21:34.980
oder dass das, was man sich vorgenommen hat,

00:21:34.980 --> 00:21:36.820
nicht erreichbar ist oder dass es zu schwer ist,

00:21:36.820 --> 00:21:39.600
dann muss man das vielleicht anders machen.

00:21:39.600 --> 00:21:41.100
Aber man sollte trotzdem immer wissen,

00:21:41.100 --> 00:21:41.760
wo man hin möchte.

00:21:41.760 --> 00:21:45.520
Weil wenn man, wenn man dann anfängt,

00:21:45.520 --> 00:21:47.000
tatsächlich diese Umsetzung zu machen,

00:21:47.000 --> 00:21:48.460
ist man so sehr damit beschäftigt,

00:21:48.460 --> 00:21:50.240
die Dinge zu lernen, die man wissen muss.

00:21:51.380 --> 00:21:53.640
Dass es schwer ist, sich Gedanken darüber zu machen,

00:21:53.640 --> 00:21:54.860
ob das überhaupt sinnvoll ist.

00:21:54.860 --> 00:21:58.160
Ist es denn sinnvoll, so vom Scratch total anzufangen,

00:21:58.160 --> 00:21:59.080
alles selbst zu bauen?

00:21:59.080 --> 00:22:00.400
Oder nimmt man dann direkt so etwas

00:22:00.400 --> 00:22:02.700
wie ein Template aus einem Cookie-Cutter?

00:22:02.700 --> 00:22:04.560
Vielleicht, Jörg, kannst du nochmal kurz erzählen,

00:22:04.560 --> 00:22:05.540
was das überhaupt ist?

00:22:05.540 --> 00:22:07.560
Ja, also, genau.

00:22:07.560 --> 00:22:10.280
Also, ein Problem bei Django ist halt,

00:22:10.280 --> 00:22:12.560
da ist schon relativ viel Funktionalität enthält

00:22:12.560 --> 00:22:13.500
und viele Teile.

00:22:13.500 --> 00:22:15.660
Und man möglicherweise für ein System,

00:22:15.660 --> 00:22:17.040
was dann hinterher irgendwas tun soll,

00:22:17.040 --> 00:22:18.640
wie ein Block implementieren oder so,

00:22:18.640 --> 00:22:20.580
noch viel mehr Kram braucht.

00:22:20.580 --> 00:22:21.180
Da braucht man halt,

00:22:21.300 --> 00:22:24.520
möglicherweise noch irgendeine Anbindung an ein Cache-Backend,

00:22:24.520 --> 00:22:26.600
Redis oder sowas, mein Cache-Di.

00:22:26.600 --> 00:22:29.920
Braucht vielleicht irgendwie eine Volltext-Suchmaschine,

00:22:29.920 --> 00:22:30.840
die man dann auch noch drin hat.

00:22:30.840 --> 00:22:33.180
Man hat vielleicht irgendwelche Background-Tasks,

00:22:33.180 --> 00:22:35.360
die laufen müssen und so weiter und so weiter.

00:22:35.360 --> 00:22:36.900
Da gibt es noch eine ganze Menge Dinge,

00:22:36.900 --> 00:22:42.240
die man halt irgendwie einstellen muss,

00:22:42.240 --> 00:22:43.440
wo man Entscheidungen treffen muss.

00:22:43.440 --> 00:22:46.200
Und das ist doch relativ überwältigend,

00:22:46.200 --> 00:22:47.380
denke ich mal, für jemanden,

00:22:47.380 --> 00:22:49.220
der eigentlich nur mal einen Block schreiben wollte

00:22:49.220 --> 00:22:51.220
und mal schnell irgendwie eine Django-App,

00:22:51.220 --> 00:22:52.580
hochziehen wollte.

00:22:52.580 --> 00:22:56.540
Und da gibt es dann halt so ein Tool,

00:22:56.540 --> 00:22:57.460
nennt sich Cookie Cutter.

00:22:57.460 --> 00:23:02.320
Das ist auch von den Autoren von Two Scoops of Django

00:23:02.320 --> 00:23:05.700
oder beziehungsweise von einer der beiden Autoren.

00:23:05.700 --> 00:23:09.780
Und das legt dann halt so ein Projekt quasi an.

00:23:09.780 --> 00:23:11.680
Da werden einem am Anfang im Grunde

00:23:11.680 --> 00:23:13.320
genau so ein paar dieser Fragen gestellt.

00:23:13.320 --> 00:23:14.820
So, möchtest du Docker oder lieber nicht?

00:23:14.820 --> 00:23:17.700
Oder brauchst du eigentlich Hintergrund-Tasks wirklich?

00:23:17.700 --> 00:23:20.840
Und wenn man das angegeben hat,

00:23:20.840 --> 00:23:21.200
dann, wenn man das angegeben hat,

00:23:21.200 --> 00:23:22.840
dann wird quasi aus den,

00:23:22.840 --> 00:23:25.500
wenn halt die Template-Variablen,

00:23:25.500 --> 00:23:27.260
die im Projekt-Template drin sind,

00:23:27.260 --> 00:23:28.320
ersetzt durch konkrete Werte.

00:23:28.320 --> 00:23:29.940
Also man gibt dem Projekt halt einen Namen und so.

00:23:29.940 --> 00:23:31.540
Der wird dann relativ oft eingetragen

00:23:31.540 --> 00:23:32.940
und dann wird halt so ein Projekt erstellt.

00:23:32.940 --> 00:23:35.840
Und das läuft dann halt auch direkt von Anfang an.

00:23:35.840 --> 00:23:39.520
Und damit hat man dann ja quasi schon mal

00:23:39.520 --> 00:23:42.440
einen großen Schritt geschafft,

00:23:42.440 --> 00:23:44.880
weil bis dahin zu kommen,

00:23:44.880 --> 00:23:46.600
möglicherweise auf anderem Weg

00:23:46.600 --> 00:23:48.780
relativ lange dauern könnte.

00:23:48.780 --> 00:23:50.240
Auf der anderen Seite hat man dann natürlich das Problem,

00:23:50.240 --> 00:23:51.080
dass man nicht genau weiß,

00:23:51.180 --> 00:23:51.680
was passiert ist.

00:23:51.680 --> 00:23:53.060
Und man hat jetzt auch viele

00:23:53.060 --> 00:23:56.500
sozusagen Einstellungen schon vorgenommen sind,

00:23:56.500 --> 00:23:58.260
von denen man jetzt gar nicht genau weiß,

00:23:58.260 --> 00:24:00.080
ob man die wirklich so haben wollte oder nicht.

00:24:00.080 --> 00:24:02.320
Und ja,

00:24:02.320 --> 00:24:05.180
die man auch nur noch schwer ändern kann.

00:24:05.180 --> 00:24:06.460
Und man versteht nicht so genau,

00:24:06.460 --> 00:24:07.060
was da passiert.

00:24:07.060 --> 00:24:10.080
Und das ist natürlich in gewisser Weise so ein Nachteil.

00:24:10.080 --> 00:24:12.080
Aber es ist, denke ich,

00:24:12.080 --> 00:24:13.480
schon halt irgendwie eine Möglichkeit,

00:24:13.480 --> 00:24:16.320
relativ schnell zu einem funktionierenden System zu kommen.

00:24:16.320 --> 00:24:18.780
Und ja,

00:24:18.780 --> 00:24:20.180
darauf aufbauen kann man dann ja weitermachen.

00:24:20.180 --> 00:24:20.840
Aber ja,

00:24:21.160 --> 00:24:24.300
es kann einem eine Menge Arbeit ersparen.

00:24:24.300 --> 00:24:25.100
Ich mache das meistens so,

00:24:25.100 --> 00:24:26.580
wenn ich neue Projekte irgendwie aufmache,

00:24:26.580 --> 00:24:27.560
dass ich halt dann irgendwie

00:24:27.560 --> 00:24:29.640
das Django-Cookie-Cutter-Template benutze.

00:24:29.640 --> 00:24:31.040
Aber ja,

00:24:31.040 --> 00:24:34.620
das trifft dann natürlich schon eine ganze Menge Entscheidungen,

00:24:34.620 --> 00:24:36.640
die man vielleicht auch anders treffen können wollte.

00:24:36.640 --> 00:24:40.860
Klingt aber,

00:24:40.860 --> 00:24:42.340
als könnte man es gut gebrauchen für,

00:24:42.340 --> 00:24:43.180
sagen wir mal,

00:24:43.180 --> 00:24:44.620
Projekte, bei denen man schon relativ genau weiß,

00:24:44.620 --> 00:24:45.140
was man will.

00:24:45.140 --> 00:24:46.940
Ja.

00:24:46.940 --> 00:24:49.040
Naja, also ich meine,

00:24:49.040 --> 00:24:49.960
ich habe,

00:24:49.960 --> 00:24:50.980
das ist halt dann,

00:24:51.140 --> 00:24:51.480
die Frage,

00:24:51.480 --> 00:24:53.640
ob man sozusagen

00:24:53.640 --> 00:24:55.480
das, was man tun möchte,

00:24:55.480 --> 00:24:56.640
den eigenen Bedürfnissen anpasst

00:24:56.640 --> 00:24:57.940
oder die eigenen Bedürfnisse halt so,

00:24:57.940 --> 00:24:59.940
so ähnlich wie eine SAP-Einführung.

00:24:59.940 --> 00:25:00.800
Also quasi,

00:25:00.800 --> 00:25:02.880
wenn man sich dafür entscheidet,

00:25:02.880 --> 00:25:03.460
das zu verwenden,

00:25:03.460 --> 00:25:05.040
dann muss man halt die eigenen Prozesse so umstellen,

00:25:05.040 --> 00:25:05.960
dass sie zu SAP passen.

00:25:05.960 --> 00:25:07.000
Und dann geht das halbwegs.

00:25:07.000 --> 00:25:08.320
Und bei Cookie-Cutter ist es halt auch so,

00:25:08.320 --> 00:25:10.040
man muss dann die Dinge so machen,

00:25:10.040 --> 00:25:12.080
wie dieses Template das halt irgendwie quasi

00:25:12.080 --> 00:25:14.080
vorgibt.

00:25:14.080 --> 00:25:15.840
Und wenn man das anders machen will,

00:25:15.840 --> 00:25:16.180
hat man,

00:25:16.180 --> 00:25:17.500
hat man Schwierigkeiten

00:25:17.500 --> 00:25:19.160
oder dann ist es halt nicht mehr so hilfreich,

00:25:19.160 --> 00:25:20.840
weil da muss man wieder eine ganze Menge von handen ändern,

00:25:20.840 --> 00:25:21.120
was man,

00:25:21.120 --> 00:25:21.980
was man ja eigentlich vermeiden wollte,

00:25:21.980 --> 00:25:22.960
indem man Cookie-Cutter verwendet.

00:25:22.960 --> 00:25:25.620
Daher ist es halt so eine,

00:25:25.620 --> 00:25:27.520
also wenn man sich quasi damit abfindet,

00:25:27.520 --> 00:25:28.160
dass alles so ist,

00:25:28.160 --> 00:25:30.300
wie das in dem Template halt vorgesehen ist,

00:25:30.300 --> 00:25:32.160
dann ist es eigentlich ganz nett.

00:25:32.160 --> 00:25:32.840
Also dann,

00:25:32.840 --> 00:25:34.280
wenn man das nicht so,

00:25:34.280 --> 00:25:35.000
nicht so toll findet,

00:25:35.000 --> 00:25:36.460
dann hilft es einem halt nicht.

00:25:36.460 --> 00:25:37.940
Dann muss man vielleicht ein eigenes Template machen oder so.

00:25:37.940 --> 00:25:39.820
Viele Sachen,

00:25:39.820 --> 00:25:41.680
die in dem Cookie-Cutter-Template drin sind,

00:25:41.680 --> 00:25:44.900
gehen für mich so ein bisschen in Richtung Produktivbetrieb.

00:25:44.900 --> 00:25:45.500
Ja.

00:25:45.500 --> 00:25:47.180
Die nehmen einem viel Arbeit weg,

00:25:47.180 --> 00:25:48.400
wenn man dann Produktivbetrieb hat.

00:25:48.400 --> 00:25:51.040
Die haben Sachen drin für Content Delivery,

00:25:51.100 --> 00:25:51.600
für Networks

00:25:51.600 --> 00:25:52.600
und die haben Sachen drin für Docker

00:25:52.600 --> 00:25:54.200
und die haben Sachen drin für Cached

00:25:54.200 --> 00:25:56.060
oder für sonst irgendwelche Sachen.

00:25:56.060 --> 00:25:56.700
Ich glaube,

00:25:56.700 --> 00:25:58.740
wenn man zum ersten Mal so ein Projekt macht,

00:25:58.740 --> 00:25:59.600
ist es einfacher,

00:25:59.600 --> 00:26:01.760
from scratch einzufangen,

00:26:01.760 --> 00:26:04.940
weil man viele von diesen Sachen dann einfach nicht braucht.

00:26:04.940 --> 00:26:06.400
Das Blog,

00:26:06.400 --> 00:26:09.100
was man da als erstes Mal entwickelt,

00:26:09.100 --> 00:26:12.400
wird sicherlich nicht gleich 100.000 Hits pro Minute haben.

00:26:12.400 --> 00:26:13.480
Woher willst du das denn wissen?

00:26:13.480 --> 00:26:17.120
Also meine Blogs haben nie so viele gehabt.

00:26:17.120 --> 00:26:20.300
Vielleicht habt ihr mehr Erfolg als ich.

00:26:20.300 --> 00:26:21.000
Ich wünsche es euch.

00:26:21.100 --> 00:26:24.200
Aber es ist sicherlich nicht die erste Ausrichtung.

00:26:24.200 --> 00:26:27.520
Es wird sicherlich nicht das erste Problem sein,

00:26:27.520 --> 00:26:28.160
dafür zu sorgen,

00:26:28.160 --> 00:26:29.880
dass das die ganze Welt gleichzeitig lesen kann,

00:26:29.880 --> 00:26:33.200
sondern das erste Problem wird sicherlich sein,

00:26:33.200 --> 00:26:33.700
dafür zu sorgen,

00:26:33.700 --> 00:26:35.980
dass es irgendjemand lesen kann.

00:26:35.980 --> 00:26:37.220
Und das überhaupt läuft vielleicht.

00:26:38.160 --> 00:26:40.220
dass man überhaupt einen Block hat

00:26:40.220 --> 00:26:41.900
und ich glaube dann ist es einfacher mit

00:26:41.900 --> 00:26:44.220
dem puren

00:26:44.220 --> 00:26:45.380
mit dem Basis Django

00:26:45.380 --> 00:26:47.440
umzugehen

00:26:47.440 --> 00:26:49.920
Habt ihr ein Lieblingsmodul, ein Lieblingstemplate?

00:26:49.920 --> 00:26:52.620
Also wenn ihr das schon einsetzt im Produktivbetrieb

00:26:52.620 --> 00:26:52.880
oder

00:26:52.880 --> 00:26:56.120
Das ist eine schwere Frage, weil da

00:26:56.120 --> 00:26:57.820
oft sehr viele Sachen

00:26:57.820 --> 00:27:00.260
zusammenkommen, weil man oft

00:27:00.260 --> 00:27:01.340
sehr sehr viele

00:27:01.340 --> 00:27:04.160
Bibliotheken reinlädt, die

00:27:04.160 --> 00:27:06.280
alle nur einen kleinen Teil machen

00:27:06.280 --> 00:27:07.900
Das ist so, wenn ich dich frage, welches

00:27:07.900 --> 00:27:10.460
Lego-Teil ist denn dein Lieblings-Lego-Teil?

00:27:10.460 --> 00:27:11.660
Ritterburg

00:27:11.660 --> 00:27:13.820
Ja, aber das ist ja kein einzelnes Teil

00:27:13.820 --> 00:27:16.380
Das ist ja gleich was sehr Großes zusammengebaut

00:27:16.380 --> 00:27:17.800
Da sind viele kleine Steine dabei, glaube ich

00:27:17.800 --> 00:27:19.980
Genau, und die einzelnen Steine an sich sind alle

00:27:19.980 --> 00:27:21.860
nicht super interessant, aber wenn man sie dann

00:27:21.860 --> 00:27:23.560
sowas zusammengebaut hat, dann

00:27:23.560 --> 00:27:25.900
ist das, was man gebaut hat, super interessant

00:27:25.900 --> 00:27:28.140
Okay, aber gut

00:27:28.140 --> 00:27:30.460
Du weißt ja dann schon, welche Steine du dann brauchst

00:27:30.460 --> 00:27:32.140
damit du dann irgendwie sowas gießen kannst

00:27:32.140 --> 00:27:33.520
Ja, klar

00:27:33.520 --> 00:27:36.260
Also das heißt, man hat sich schon so ein Workflow, an dem man sich dann gewohnt

00:27:36.260 --> 00:27:37.280
und der ist dann auch irgendwie

00:27:37.280 --> 00:27:38.760
Okay, individuell

00:27:38.760 --> 00:27:41.480
Ja, aber auch da, also ich

00:27:41.480 --> 00:27:44.160
jedes Mal, wenn ich

00:27:44.160 --> 00:27:46.320
mit Leuten zusammenarbeite, dann

00:27:46.320 --> 00:27:47.900
bin ich wieder überrascht davon, wie

00:27:47.900 --> 00:27:50.280
unterschiedlich man die Sachen machen kann

00:27:50.280 --> 00:27:52.200
Nicht schlechter

00:27:52.200 --> 00:27:53.540
oder besser bei irgendjemandem,

00:27:53.540 --> 00:27:56.060
aber einfach so unterschiedlich. Auf viele

00:27:56.060 --> 00:27:58.100
Sachen, die der Jochen macht, komme ich einfach gar nicht

00:27:58.100 --> 00:27:59.580
und das wird sicherlich umgekehrt sein

00:27:59.580 --> 00:28:02.220
Genau das fände ich jetzt total interessant, also so Sachen

00:28:02.220 --> 00:28:04.000
von euch noch zu hören, wo

00:28:04.000 --> 00:28:05.580
sonst niemand auf den Punkt kommt, wo er sagt, hey,

00:28:06.240 --> 00:28:08.380
mach mal drüber nach, das wäre ein toller Tipp, mach das doch mal

00:28:08.380 --> 00:28:09.440
diesen Weg oder

00:28:09.440 --> 00:28:11.980
Ja, also wenn ich da

00:28:11.980 --> 00:28:14.260
quasi eine

00:28:14.260 --> 00:28:16.440
App nennen sollte, wäre

00:28:16.440 --> 00:28:18.680
das wahrscheinlich Django ImageKit

00:28:18.680 --> 00:28:20.060
tatsächlich, weil

00:28:20.060 --> 00:28:20.920
Django ImageKit?

00:28:20.920 --> 00:28:23.460
Ich habe

00:28:23.460 --> 00:28:26.180
da mal so einen Blog in Django

00:28:26.180 --> 00:28:28.160
geschrieben und

00:28:28.160 --> 00:28:30.280
bin relativ bald auf das Problem

00:28:30.280 --> 00:28:32.420
gestoßen, dass man, wenn man jetzt so

00:28:32.420 --> 00:28:34.360
ja, wir haben 2018

00:28:34.360 --> 00:28:36.140
will man schon so irgendwie responsivee

00:28:36.140 --> 00:28:38.100
Images haben und dass das halt auch auf dem Handy

00:28:38.100 --> 00:28:40.160
irgendwie einigermaßen aussieht, aber man

00:28:40.160 --> 00:28:41.940
möchte jetzt auch nicht alle Bilder in riesig groß

00:28:41.940 --> 00:28:42.960
ausliefern

00:28:42.960 --> 00:28:45.120
wenn man

00:28:45.120 --> 00:28:48.220
ja eben auch gerade auf dem Handy

00:28:48.220 --> 00:28:48.520
und so

00:28:48.520 --> 00:28:52.020
und da muss man ja dann was tun, also da gibt es Unterstützung

00:28:52.020 --> 00:28:53.620
in HTML5

00:28:53.620 --> 00:28:54.720
durchaus

00:28:54.720 --> 00:28:58.060
was solche Probleme

00:28:58.060 --> 00:29:00.060
angeht, aber man muss

00:29:00.060 --> 00:29:01.880
das ja jetzt auch dann auch irgendwie backend-seitig

00:29:01.880 --> 00:29:04.160
hinbekommen, also es muss halt die Bilder in unterschiedlichen

00:29:04.160 --> 00:29:06.120
Größen geben, man muss halt irgendwie

00:29:06.120 --> 00:29:08.240
die entsprechenden

00:29:08.240 --> 00:29:10.340
ja, Tags so rausschreiben,

00:29:10.340 --> 00:29:12.260
das halt Source-Set-Attribut

00:29:12.260 --> 00:29:13.080
und vielleicht

00:29:13.080 --> 00:29:16.180
irgendwie noch andere Geschichten, Picture-Element

00:29:16.180 --> 00:29:18.300
so gesetzt sind, wie man das irgendwie haben will

00:29:18.300 --> 00:29:20.560
und ich war etwas überrascht,

00:29:20.560 --> 00:29:22.260
dass es da in Django quasi überhaupt gar nichts

00:29:22.260 --> 00:29:23.800
gibt, also da gibt es zwar

00:29:23.800 --> 00:29:25.100
ein Image-Field, aber

00:29:25.100 --> 00:29:28.180
das war es auch schon, das kennt dann halt irgendwie so

00:29:28.180 --> 00:29:29.280
noch

00:29:29.280 --> 00:29:31.960
Höhe und Breite gegenüber dem

00:29:31.960 --> 00:29:33.200
File-Field einfach,

00:29:33.200 --> 00:29:36.080
wenn man das verwendet, aber das

00:29:36.080 --> 00:29:37.880
hat eigentlich nicht viel Funktionalität dafür

00:29:37.880 --> 00:29:39.640
sozusagen für diesen

00:29:39.640 --> 00:29:42.000
Use-Case, den man oft hat, dass man das Bild

00:29:42.000 --> 00:29:43.340
wirklich auf einer Webseite anzeigen will

00:29:43.340 --> 00:29:45.560
und

00:29:45.560 --> 00:29:48.080
dann habe ich so ein bisschen geguckt und dann gibt es irgendwie so diverse

00:29:48.080 --> 00:29:50.180
Thumbnail-Libraries und so

00:29:50.180 --> 00:29:51.860
die sind aber alle, die haben halt

00:29:51.860 --> 00:29:54.060
diesen Thumbnail-Use-Case

00:29:54.060 --> 00:29:56.100
irgendwie, aber nicht, war nicht

00:29:56.100 --> 00:29:57.680
so richtig das, was ich irgendwie da gesucht hatte

00:29:57.680 --> 00:29:59.820
und dann habe ich dann irgendwie was selber implementiert

00:29:59.820 --> 00:30:01.780
und dann irgendwie ein paar

00:30:01.780 --> 00:30:04.200
paar Wochen

00:30:04.200 --> 00:30:06.040
später oder so lief mir Django ImageKit über

00:30:06.040 --> 00:30:07.100
den Weg, dass

00:30:07.100 --> 00:30:09.860
quasi, also ich weiß nicht,

00:30:09.860 --> 00:30:11.880
das waren schon bei mir so, keine Ahnung,

00:30:11.880 --> 00:30:13.880
ein paar hundert Zeilen Python oder so, die ich da geschrieben hatte

00:30:13.880 --> 00:30:15.960
und es war alles ein bisschen hässlich

00:30:15.960 --> 00:30:17.320
und ich wusste auch, dass das alles nicht schön war

00:30:17.320 --> 00:30:19.100
und das hat das halt komplett ersetzt.

00:30:19.100 --> 00:30:21.580
Ich musste es nur noch importieren und habe dann irgendwie

00:30:21.580 --> 00:30:22.040
meine

00:30:22.040 --> 00:30:25.320
Spec-Dinger an die

00:30:25.320 --> 00:30:27.660
Images herangeschrieben, sozusagen in welchen Größen

00:30:27.660 --> 00:30:30.020
ich das haben möchte und dann war es das.

00:30:30.020 --> 00:30:30.760
Voll gut.

00:30:30.760 --> 00:30:33.500
Das hat dieses Problem irgendwie

00:30:33.500 --> 00:30:35.960
für mich mehr oder weniger erledigt,

00:30:36.000 --> 00:30:38.060
und das fand ich

00:30:38.060 --> 00:30:40.040
sehr hilfreich und daher denke ich,

00:30:40.040 --> 00:30:41.680
dass, ja, das ist etwas,

00:30:41.680 --> 00:30:43.660
was andere auch interessieren könnte,

00:30:43.660 --> 00:30:46.080
weil den Fall, dass man Bilder

00:30:46.080 --> 00:30:47.920
auslebern will auf einer Webseite, den hat man ja doch relativ

00:30:47.920 --> 00:30:50.220
oft. Klingt nach tollen Geheimtipps

00:30:50.220 --> 00:30:52.020
tatsächlich. Ja, gut, ist jetzt nicht

00:30:52.020 --> 00:30:53.860
so ein Geheimtipp, das Ding ist relativ bekannt

00:30:53.860 --> 00:30:55.960
und das ist ein bisschen komisch, vielleicht, dass ich es nicht kannte, aber es ist

00:30:55.960 --> 00:30:57.880
oft so, dass man... Ja, es ist oft so, dass man als Anfänger

00:30:57.880 --> 00:30:59.940
irgendwo drüber schläupert und gar nicht weiß, wo man anfangen soll

00:30:59.940 --> 00:31:01.800
und das ist so viel, da kennt man auch gar nicht mit,

00:31:01.800 --> 00:31:03.600
was ist jetzt wichtig und was nicht, aber

00:31:03.600 --> 00:31:05.940
ja, gerade für so responsive im

00:31:05.940 --> 00:31:07.960
Experimentation, glaube ich, ist das ein super Tipp.

00:31:07.960 --> 00:31:10.000
Ich glaube, es ist, glaube ich,

00:31:10.000 --> 00:31:11.480
nicht nur als Anfänger so, weil

00:31:11.480 --> 00:31:13.660
das ist total das gute Beispiel, was der Jochen

00:31:13.660 --> 00:31:16.280
jetzt bringt, weil ich habe Django ImageKit noch nie benutzt.

00:31:16.280 --> 00:31:16.440
Ah.

00:31:16.440 --> 00:31:19.600
Das ist

00:31:19.600 --> 00:31:21.460
ein so ein bisschen ein Problem

00:31:21.460 --> 00:31:23.880
in der Django-Welt, die ist so groß, dass es

00:31:23.880 --> 00:31:25.920
für eigentlich alles was gibt, aber man

00:31:25.920 --> 00:31:28.060
muss es erst finden und man muss erst das finden,

00:31:28.060 --> 00:31:29.860
was zu einem passt. Ich habe

00:31:29.860 --> 00:31:32.080
ImageKit noch nie benutzt, ich benutze Wagtail

00:31:32.080 --> 00:31:33.940
und da ist das immer

00:31:33.940 --> 00:31:35.900
integriert. Wie heißt das? Ich muss das kurz hier

00:31:35.900 --> 00:31:37.320
Shownotes notieren. Der hat auch schon

00:31:37.320 --> 00:31:39.920
eine Bildverarbeitung.

00:31:39.920 --> 00:31:41.160
Wagtail

00:31:41.160 --> 00:31:44.000
ist eigentlich ein Bausatz

00:31:44.000 --> 00:31:46.240
für Content-Management-Systemen.

00:31:46.240 --> 00:31:47.900
Also es ist quasi ein Framework,

00:31:47.900 --> 00:31:49.920
was nochmal oberhalb

00:31:49.920 --> 00:31:51.560
von Django ist, was noch mehr Sachen

00:31:51.560 --> 00:31:53.960
mitbringt und der hat eben auch gleich

00:31:53.960 --> 00:31:55.800
dieses Bildproblem mitgelöst und deshalb

00:31:55.800 --> 00:31:57.840
benutze ich das immer gleich für meine Bilder

00:31:57.840 --> 00:31:58.040
auch.

00:31:58.040 --> 00:32:00.880
Ein Wagtail, okay.

00:32:00.880 --> 00:32:03.960
Kommt von einem Universum ins

00:32:03.960 --> 00:32:05.860
nächste, ich glaube, da kann man Bücher

00:32:05.860 --> 00:32:07.640
Wochen, Kurse mit füllen.

00:32:07.640 --> 00:32:09.300
Also das ist wirklich sehr interessant.

00:32:09.300 --> 00:32:11.660
Ja, wobei mich jetzt

00:32:11.660 --> 00:32:13.760
auch interessieren würde, wie hat

00:32:13.760 --> 00:32:15.640
Wagtail das Problem dann

00:32:15.640 --> 00:32:16.120
gelöst?

00:32:16.120 --> 00:32:19.460
Gibt es da irgendwie Default-Einstellungen, die man machen kann?

00:32:19.460 --> 00:32:21.660
Welche Bildgrößen gerechnet werden sollen?

00:32:21.660 --> 00:32:23.720
Und wie werden die dann tatsächlich gerechnet?

00:32:23.720 --> 00:32:25.600
Ich meine, denn sobald ein Bild hochgeladen wurde,

00:32:25.600 --> 00:32:27.600
werden dann die neuen Bilder erstellt oder erst beim

00:32:27.600 --> 00:32:28.620
Zugriff und dann gecached?

00:32:28.620 --> 00:32:30.620
Das kannst du alles einstellen.

00:32:30.620 --> 00:32:32.760
Da gibt es ein Modul, das heißt Wagtail Images.

00:32:32.760 --> 00:32:35.820
Um einmal kurz ein bisschen breiter auszutauschen.

00:32:35.820 --> 00:32:38.020
Wagtail ist eine Sammlung

00:32:38.020 --> 00:32:39.620
von Modulen, die das

00:32:39.620 --> 00:32:42.160
Bauen von CMS-Systemen,

00:32:42.160 --> 00:32:44.180
also von Content-Management-Systemen

00:32:44.180 --> 00:32:45.840
erleichtern sollen. Es gab da schon

00:32:45.840 --> 00:32:47.640
was, das heißt Django CMS, das ist relativ

00:32:47.640 --> 00:32:49.780
alt, hat auch

00:32:49.780 --> 00:32:51.760
mehr so diesen Flask-Ansatz. Hier sind

00:32:51.760 --> 00:32:53.800
15 Module, baue sie zusammen, wie du

00:32:53.800 --> 00:32:55.820
willst. Wagtail hat mehr so diesen

00:32:55.820 --> 00:32:56.980
integrierten Ansatz.

00:32:56.980 --> 00:32:59.340
Du musst im Wesentlichen nur noch

00:32:59.340 --> 00:33:02.020
sogenannte Seitenmodelle

00:33:02.020 --> 00:33:03.640
liefern, also du musst sagen, was

00:33:03.640 --> 00:33:05.260
auf einer Seite drauf sein soll.

00:33:05.780 --> 00:33:07.400
Für Felder. Und dann

00:33:07.400 --> 00:33:09.460
gibt es den Wagtail-Admin, der

00:33:09.460 --> 00:33:11.540
diese Felder eben, der diese Seiten

00:33:11.540 --> 00:33:13.420
eben inspiziert und mit reinnimmt und

00:33:13.420 --> 00:33:14.660
kriegst dann automatisch eben so

00:33:14.660 --> 00:33:17.400
eine Baumstruktur mit

00:33:17.400 --> 00:33:19.400
Revisionen und Freigabeprozess und

00:33:19.400 --> 00:33:21.160
eben Medienverwaltung auch mit dazu.

00:33:21.160 --> 00:33:23.520
Und die Medienverwaltung

00:33:23.520 --> 00:33:25.940
ist relativ flexibel. Es gibt so Default-Dinger,

00:33:25.940 --> 00:33:26.900
die eingestellt sind.

00:33:26.900 --> 00:33:29.280
Standardmäßig ist eingestellt,

00:33:29.280 --> 00:33:31.760
dass die Bilder beim Zugriff

00:33:31.760 --> 00:33:33.620
erstellt werden und dann gecached werden.

00:33:33.620 --> 00:33:35.580
Das heißt, wenn du einmal

00:33:35.580 --> 00:33:37.600
dieses Bild in einer bestimmten Größe

00:33:37.600 --> 00:33:38.940
angefordert hast,

00:33:38.940 --> 00:33:41.400
dann ist es für immer

00:33:41.400 --> 00:33:43.640
sozusagen da und wird nicht

00:33:43.640 --> 00:33:45.720
nochmal neu erzeugt. Das heißt, es ist so ein bisschen

00:33:45.720 --> 00:33:47.820
die Mitte zwischen den beiden

00:33:47.820 --> 00:33:49.780
Extremen. Immer alles sofort anlegen und

00:33:49.780 --> 00:33:51.200
immer alles neu berechnen.

00:33:51.200 --> 00:33:53.700
Es wird berechnet, wenn es zum ersten Mal angefordert wird und dann

00:33:53.700 --> 00:33:55.480
wird es abgelegt. Eine

00:33:55.480 --> 00:33:57.580
Funktion, die mich hier

00:33:57.580 --> 00:33:59.300
ungeheuer beeindruckt hat, die sie

00:33:59.300 --> 00:34:01.640
einfach mal so eingebaut hatten, ist

00:34:01.640 --> 00:34:02.980
Content-Aware-Resize.

00:34:05.540 --> 00:34:09.300
Das ist so ein bisschen magisch

00:34:09.300 --> 00:34:11.260
und man muss das ein kleines bisschen freischalten.

00:34:11.260 --> 00:34:13.320
Aber wenn man

00:34:13.320 --> 00:34:15.300
das einmal eingestellt hat, dann heißt

00:34:15.300 --> 00:34:17.480
es, dass wenn OpenCV installiert

00:34:17.480 --> 00:34:19.360
ist, dann versucht er interessante

00:34:19.360 --> 00:34:20.580
Bildbereiche zu finden.

00:34:20.580 --> 00:34:23.360
Und wenn ich eine kleinere Version von

00:34:23.360 --> 00:34:25.480
dem Bild anfordere, dann wird nicht einfach

00:34:25.480 --> 00:34:27.420
der Rand weggeschnitten und das wird nicht einfach kleiner

00:34:27.420 --> 00:34:29.280
gemacht, sondern er zoomt dann quasi auf

00:34:29.280 --> 00:34:31.280
diesen Bereich rein. Das heißt, wenn ich ein

00:34:31.280 --> 00:34:33.280
Bild habe, wo eine

00:34:33.280 --> 00:34:35.260
Person drauf ist, dann wird auch das

00:34:35.260 --> 00:34:37.220
Gesicht der Person rein

00:34:37.220 --> 00:34:37.700
verkleinert.

00:34:37.700 --> 00:34:40.740
Ich habe das irgendwann mal in so einer

00:34:40.740 --> 00:34:42.960
Vorstellung gesehen von Features in MicTale und

00:34:42.960 --> 00:34:44.860
das ist einfach so magisch.

00:34:44.860 --> 00:34:47.120
Die haben dieses Flag angemacht und dann plötzlich zeigt

00:34:47.120 --> 00:34:48.980
der mir eben nicht kleine

00:34:48.980 --> 00:34:51.100
verkleinerte Versionen von irgendwas oder

00:34:51.100 --> 00:34:53.020
wo die Ränder dann abgeschnitten werden, sondern der

00:34:53.020 --> 00:34:55.160
zoomt tatsächlich auf die interessanten Bereiche ein.

00:34:55.160 --> 00:34:57.140
Und dass so etwas

00:34:57.140 --> 00:34:59.140
in so eine Bibliothek einfach reinkommen kann,

00:34:59.140 --> 00:35:00.620
ist eine total

00:35:00.620 --> 00:35:03.040
geniale Sache auf der einen Seite, weil man

00:35:03.040 --> 00:35:04.760
eben ganz viele Funktionen da mitkriegt,

00:35:05.220 --> 00:35:06.680
aber es ist auch so ein bisschen

00:35:06.680 --> 00:35:09.100
furchterregend, weil man eben

00:35:09.100 --> 00:35:10.920
ganz viele solche Funktionen drin hat,

00:35:10.920 --> 00:35:13.160
von denen man vielleicht gar nicht weiß, dass die da drin

00:35:13.160 --> 00:35:15.160
sind oder von denen man vielleicht gar nicht will,

00:35:15.160 --> 00:35:17.120
dass die da drin sind. Und das ist so ein

00:35:17.120 --> 00:35:17.440
bisschen

00:35:17.440 --> 00:35:20.920
schwierig da oft abzuwägen,

00:35:20.920 --> 00:35:22.940
will ich sowas in

00:35:22.940 --> 00:35:24.440
mein Projekt reinholen oder nicht.

00:35:24.440 --> 00:35:25.880
Okay, ja.

00:35:25.880 --> 00:35:29.000
Ich weiß jetzt natürlich nicht, wie

00:35:29.000 --> 00:35:30.680
dieses Feature technisch umgesetzt ist, aber

00:35:35.180 --> 00:35:36.200
da gibt es halt

00:35:36.200 --> 00:35:39.320
quasi in HTML5

00:35:39.320 --> 00:35:41.140
so ein, da gibt es das Picture Element

00:35:41.140 --> 00:35:43.140
und das kann halt im Grunde, die nennen das da

00:35:43.140 --> 00:35:44.960
Art Direction, sozusagen, dass man angeben kann, welcher

00:35:44.960 --> 00:35:46.980
Bildbereich beim Verkleinern sichtbar bleiben

00:35:46.980 --> 00:35:48.160
soll und so. Und wenn

00:35:48.160 --> 00:35:50.780
Wagtail das so

00:35:50.780 --> 00:35:52.900
benutzt, dann wäre das natürlich sehr cool.

00:35:52.900 --> 00:35:55.020
Es könnte natürlich auch einfach das Bild

00:35:55.020 --> 00:35:57.020
irgendwie umrechnen oder so und das wäre

00:35:57.020 --> 00:35:58.980
halt so, das kommt halt darauf an,

00:35:58.980 --> 00:36:01.000
wie das implementiert ist. Und eigentlich würde man

00:36:01.000 --> 00:36:02.680
sich ja dann vielleicht auch ein Frontend wünschen,

00:36:02.680 --> 00:36:05.140
mit dem man festlegen kann, okay, also dieser Bereich

00:36:05.140 --> 00:36:07.120
in dem Bild ist jetzt etwas, was

00:36:07.120 --> 00:36:09.200
nicht rausverkleinert werden

00:36:09.200 --> 00:36:11.120
soll. Aber da habe ich eben

00:36:11.120 --> 00:36:12.900
auch nichts gefunden. Ich habe mir natürlich, also als ich da

00:36:12.900 --> 00:36:13.600
irgendwie mein

00:36:13.600 --> 00:36:17.200
persönliches Blog irgendwie angefangen

00:36:17.200 --> 00:36:18.920
habe zu schreiben, habe ich mir angeguckt, wie sieht das

00:36:18.920 --> 00:36:21.180
eigentlich aus, wenn ich jetzt einen WordPress-Blog

00:36:21.180 --> 00:36:23.180
aufmache? Was passiert

00:36:23.180 --> 00:36:24.960
denn eigentlich da mit den Bildern? Und dann sieht man da so,

00:36:24.960 --> 00:36:27.060
ja gut, also die machen das im Grunde, da werden dann halt auch ein paar

00:36:27.060 --> 00:36:29.160
Größen vorgerechnet und die werden dann halt mit ausgeliefert

00:36:29.160 --> 00:36:29.740
als Source-Set.

00:36:29.740 --> 00:36:33.100
Und man hat so ein bisschen, kann man an dem Bild was machen,

00:36:33.100 --> 00:36:35.100
man kann irgendwas beschneiden

00:36:35.100 --> 00:36:36.820
oder man kann halt irgendwie

00:36:36.820 --> 00:36:40.560
quasi

00:36:40.560 --> 00:36:43.000
so ein paar Editiergeschichten

00:36:43.000 --> 00:36:45.120
machen, aber letztendlich kann

00:36:45.120 --> 00:36:46.980
man zum Beispiel was, was dieses Picture-Element kann,

00:36:46.980 --> 00:36:48.400
kann man auch in WordPress alles nicht setzen.

00:36:48.400 --> 00:36:51.140
Und es gibt eigentlich kaum

00:36:51.140 --> 00:36:53.080
Frontends für all die

00:36:53.080 --> 00:36:55.160
Möglichkeiten, die man jetzt mit dem Picture-Element hätte.

00:36:55.160 --> 00:36:56.240
Und

00:36:56.240 --> 00:36:58.800
ja, das ist halt, genau,

00:36:58.800 --> 00:37:00.380
wenn das automatisch passiert,

00:37:00.380 --> 00:37:02.480
dann ist halt immer die Gefahr, dass dann Dinge

00:37:05.060 --> 00:37:07.060
hinterher zu sehen sind, die gar nicht so, wo

00:37:07.060 --> 00:37:09.220
niemand, ja, wenn er das manuell getan

00:37:09.220 --> 00:37:11.260
hätte, das ausgewählt

00:37:11.260 --> 00:37:12.440
hatte. Aber

00:37:12.440 --> 00:37:15.140
ja, also die Möglichkeiten sind natürlich schon groß.

00:37:15.140 --> 00:37:16.740
Ja.

00:37:16.740 --> 00:37:20.820
Du hattest eben gesagt, dass das

00:37:20.820 --> 00:37:22.820
Probleme machen könnte, zu viele Module

00:37:22.820 --> 00:37:25.120
in einen dann gut zu packen, die man gar nicht

00:37:25.120 --> 00:37:27.060
möchte. Gibt es dann Sicherheitsbedenken,

00:37:27.060 --> 00:37:28.920
die du dann da bekommst, oder?

00:37:28.920 --> 00:37:30.900
Ja, Sicherheitsbedenken habe ich da eigentlich

00:37:30.900 --> 00:37:32.500
relativ wenige. Dadurch, dass

00:37:32.500 --> 00:37:35.060
da einige Sicherheits-

00:37:35.060 --> 00:37:36.940
Standards in Django selbst umgesetzt

00:37:36.940 --> 00:37:38.300
sind, sind so diese

00:37:38.300 --> 00:37:40.840
ganzen Unsicherheiten, die man so

00:37:40.840 --> 00:37:42.620
kennt, die sind da alle direkt

00:37:42.620 --> 00:37:44.660
ausgeschlossen. Also es gibt diese

00:37:44.660 --> 00:37:46.820
ganz bekannte Sicherheitslücke SQL Injection,

00:37:46.820 --> 00:37:50.920
dass man eben die Datenbank dazu bringt,

00:37:50.920 --> 00:37:52.800
Code auszuführen, der eigentlich nicht ausgeführt

00:37:52.800 --> 00:37:54.560
werden sollte. Und das ist in Django

00:37:54.560 --> 00:37:56.860
direkt nur

00:37:56.860 --> 00:37:58.720
mit sehr viel Aufwand möglich, muss man so

00:37:58.720 --> 00:38:00.880
zu sagen. Man kann es hinkriegen,

00:38:00.880 --> 00:38:02.900
dass man so eine Lücke hat, aber man muss ja dann,

00:38:02.900 --> 00:38:05.020
man muss dann schon die verborgene

00:38:05.020 --> 00:38:06.900
Features benutzen, die es einem

00:38:06.900 --> 00:38:08.360
eben ermöglichen, ein hohes SQL

00:38:08.360 --> 00:38:10.860
auszuführen. Ein normaler

00:38:10.860 --> 00:38:12.820
Entwickler wird niemals dieses Problem

00:38:12.820 --> 00:38:14.780
haben, da eine SQL Injection

00:38:14.780 --> 00:38:16.700
in Django zu haben. Es ist mehr

00:38:16.700 --> 00:38:18.780
so eine, es ist weniger eine Frage

00:38:18.780 --> 00:38:20.800
der Sicherheit, es ist eher eine Sache

00:38:20.800 --> 00:38:22.240
der Handhabbarkeit.

00:38:22.240 --> 00:38:24.860
Komme ich als Entwickler dann noch damit klar,

00:38:24.860 --> 00:38:26.460
was ich mir jetzt alles reingeholt habe?

00:38:26.460 --> 00:38:28.280
Oder habe ich vielleicht Sachen reingeholt,

00:38:28.280 --> 00:38:30.640
die die gleiche Funktion

00:38:30.640 --> 00:38:32.300
erfüllen? Habe ich vielleicht Ragtail und

00:38:32.300 --> 00:38:33.960
Django ImageKit reingeholt?

00:38:33.960 --> 00:38:34.980
Und

00:38:34.980 --> 00:38:38.040
dann stehe ich da und habe

00:38:38.040 --> 00:38:40.500
zu viele Optionen in der Hand, als dass

00:38:40.500 --> 00:38:41.860
ich dann weiterentwickeln könnte.

00:38:41.860 --> 00:38:44.300
Oder als dass ich dann sinnvoll

00:38:44.300 --> 00:38:45.260
weiterentwickeln könnte,

00:38:45.260 --> 00:38:48.080
weil es eben für

00:38:48.080 --> 00:38:50.100
jede Sache, die ich machen kann,

00:38:50.100 --> 00:38:51.660
eventuell mehrere Optionen gibt.

00:38:51.660 --> 00:38:57.120
Das ist sicherlich

00:38:57.120 --> 00:38:58.220
von außen nicht sichtbar.

00:38:58.220 --> 00:39:00.180
Wenn die Anwendung dann fertig ist oder wenn die

00:39:00.180 --> 00:39:02.760
irgendwie mal benutzt wird, wird der Benutzer

00:39:02.760 --> 00:39:04.220
das sicherlich nicht sehen können, dass

00:39:04.220 --> 00:39:04.940
das

00:39:04.940 --> 00:39:07.000
wir da diese Probleme uns reingeholt haben,

00:39:07.000 --> 00:39:08.960
indem wir zu viele Module reingeladen haben.

00:39:08.960 --> 00:39:10.940
Es ist dann eher was, was die

00:39:10.940 --> 00:39:12.980
Entwickler betrifft. Wie können wir jetzt

00:39:12.980 --> 00:39:14.960
noch weiterentwickeln, wenn wir drei oder vier verschiedene

00:39:14.960 --> 00:39:16.460
Sachen haben, die genau das Gleiche machen?

00:39:16.460 --> 00:39:19.040
Ja, und wenn man dann Abhängigkeiten hat, man ist

00:39:19.040 --> 00:39:21.020
beispielsweise in einem Teil der Applikation

00:39:21.020 --> 00:39:22.880
abhängig von einer bestimmten Version

00:39:22.880 --> 00:39:24.940
irgendeiner, von irgendeinem

00:39:24.940 --> 00:39:27.080
Django-Party-App

00:39:27.080 --> 00:39:28.860
oder so, und im anderen Teil ist man von

00:39:28.860 --> 00:39:30.960
was anderem abhängig, dann hat man plötzlich Schwierigkeiten zu updaten.

00:39:30.960 --> 00:39:32.520
Das macht halt die

00:39:32.520 --> 00:39:34.900
Entwicklungsgeschwindigkeit langsam, wenn

00:39:34.900 --> 00:39:36.240
man sich quasi so

00:39:36.240 --> 00:39:38.740
unnötigerweise viele Abhängigkeiten

00:39:38.740 --> 00:39:40.740
nach außen reinholt, während wenn man das halt

00:39:40.740 --> 00:39:42.880
sinnvoll beschränkt, dann kommt

00:39:42.880 --> 00:39:44.060
man eigentlich immer ganz gut

00:39:44.060 --> 00:39:46.040
halt auch mit Updates klar.

00:39:46.040 --> 00:39:49.040
Wenn ich jetzt so eine Auswahl

00:39:49.040 --> 00:39:50.860
habe, ich habe jetzt mehrere Optionen,

00:39:50.860 --> 00:39:52.720
wen frage ich denn da, welche von diesen Optionen

00:39:52.720 --> 00:39:54.660
für mich jetzt die bessere wäre?

00:39:54.660 --> 00:39:56.860
Tja, das ist eine sehr gute Frage

00:39:56.860 --> 00:39:58.740
und wenn ich die beantworten könnte, dann

00:39:58.740 --> 00:40:00.800
wäre auch mein Leben viel

00:40:00.800 --> 00:40:01.260
einfacher.

00:40:01.260 --> 00:40:04.700
Vieles davon läuft eben über

00:40:04.700 --> 00:40:06.140
Gespräche. Man spricht mit den

00:40:06.140 --> 00:40:08.440
Leuten in

00:40:08.440 --> 00:40:10.360
seinen Python-User-Groups oder in seinen

00:40:10.360 --> 00:40:12.400
Django-User-Groups oder auf den Konferenzen

00:40:12.400 --> 00:40:14.480
oder mit den Kollegen,

00:40:14.480 --> 00:40:16.520
mit denen man vielleicht zusammenarbeitet und jeder wird da

00:40:16.520 --> 00:40:17.960
sicherlich Dinge wissen,

00:40:17.960 --> 00:40:20.700
von denen man

00:40:20.700 --> 00:40:22.440
selbst noch nie gehört hat, egal wie lange man

00:40:22.440 --> 00:40:24.460
in dem Business drin ist. Jochen und ich sind

00:40:24.460 --> 00:40:26.600
ja jetzt beide schon länger unterwegs und wir können uns sicherlich,

00:40:26.600 --> 00:40:28.540
wenn wir uns da einen Abend lang unterhalten,

00:40:28.540 --> 00:40:30.380
finden wir beide zehn Sachen, die der andere noch nicht

00:40:30.380 --> 00:40:32.100
benutzt hat.

00:40:34.500 --> 00:40:36.240
Es gibt eine Webseite, die heißt

00:40:36.240 --> 00:40:37.140
Django Packages.

00:40:37.140 --> 00:40:40.160
Die versuchen so ein bisschen, das zu sortieren.

00:40:40.160 --> 00:40:42.380
Die versuchen so ein bisschen, da diese Themenbereiche

00:40:42.380 --> 00:40:43.520
aufzuarbeiten und das

00:40:43.520 --> 00:40:46.420
vielleicht auf so ein bisschen eine rationale Ebene

00:40:46.420 --> 00:40:47.480
zu ziehen, muss man sozusagen,

00:40:47.480 --> 00:40:49.100
wo sie einfach

00:40:49.100 --> 00:40:52.000
sagen, okay, was gibt es denn zum Bereich

00:40:52.000 --> 00:40:53.700
Bildbearbeitung

00:40:53.700 --> 00:40:56.200
und wie stabil ist das und wie viele

00:40:56.200 --> 00:40:57.700
Leute benutzen das und

00:40:57.700 --> 00:41:00.320
für welche Django-Versionen ist das geeignet

00:41:00.320 --> 00:41:02.200
und welche Features hat das, dass man

00:41:02.200 --> 00:41:03.300
einfach mal so eine Übersicht

00:41:03.300 --> 00:41:04.680
haben kann.

00:41:04.680 --> 00:41:06.080
Ja, da kann ich mir so eine kleine Scorecard

00:41:06.080 --> 00:41:07.940
bauen, also was ist jetzt für meinen Nutzen

00:41:07.940 --> 00:41:10.140
vielleicht, das empfohlendste Paket.

00:41:10.140 --> 00:41:12.240
Genau, beziehungsweise man sieht

00:41:12.240 --> 00:41:13.800
dann einfach erstmal, was es gibt überhaupt.

00:41:13.800 --> 00:41:16.080
Das ist oft einfach eine sehr

00:41:16.080 --> 00:41:18.060
große Hilfe, wenn man sieht, okay, es gibt hier 15

00:41:18.060 --> 00:41:20.120
verschiedene Bibliotheken, aber zehn davon

00:41:20.120 --> 00:41:21.660
sind schon seit Jahren nicht mehr

00:41:21.660 --> 00:41:24.140
geupdatet worden. Dann kann ich die gleich

00:41:24.140 --> 00:41:25.880
aus der Betrachtung rausziehen.

00:41:25.880 --> 00:41:28.160
Vielleicht auch, wenn ich mir die vorher schon

00:41:28.160 --> 00:41:30.000
angeguckt hatte und die sehr gut aussahen.

00:41:30.000 --> 00:41:32.180
Wenn es keine Updates mehr gibt,

00:41:32.180 --> 00:41:33.200
dann ist das oft,

00:41:33.200 --> 00:41:33.280
wenn ich mir die vorher schon angeguckt hatte,

00:41:33.280 --> 00:41:35.320
ein Zeichen dafür, dass die Entwickler

00:41:35.320 --> 00:41:37.200
sich es anders überlegt haben oder dass sie vielleicht

00:41:37.200 --> 00:41:39.280
in ein anderes Projekt reingemerged sind.

00:41:39.280 --> 00:41:41.280
Es kann nicht sein, dass auf einmal so ein Ding fertig ist.

00:41:41.280 --> 00:41:42.940
Das kann auch sein,

00:41:42.940 --> 00:41:45.120
aber es ist unwahrscheinlich.

00:41:45.120 --> 00:41:48.940
Wann wird Software je fertig?

00:41:48.940 --> 00:41:51.180
Und jede neue Version

00:41:51.180 --> 00:41:52.480
von Django bietet natürlich auch

00:41:52.480 --> 00:41:55.040
Möglichkeiten, Dinge wieder neu oder anders oder

00:41:55.040 --> 00:41:56.640
einfacher zu machen und dann eigentlich

00:41:56.640 --> 00:41:59.160
wahrscheinlich nicht immer, aber ab und zu muss man

00:41:59.160 --> 00:42:01.120
halt doch mal was anfassen und

00:42:01.120 --> 00:42:02.760
wenn man nichts mehr anfassen muss, dann

00:42:02.760 --> 00:42:03.260
muss man halt

00:42:03.260 --> 00:42:05.160
ja, eben ist es eher ein Zeichen dafür,

00:42:05.160 --> 00:42:07.200
dass es nicht mehr richtig maintained wird.

00:42:07.200 --> 00:42:09.680
Und ja, Django Packages

00:42:09.680 --> 00:42:11.200
wird übrigens von einem der beiden

00:42:11.200 --> 00:42:11.960
Autoren

00:42:11.960 --> 00:42:14.700
in Diskurs auf Django

00:42:14.700 --> 00:42:15.560
betrieben,

00:42:15.560 --> 00:42:18.120
dem, der auch

00:42:18.120 --> 00:42:20.960
Crispy Forms geschrieben hat,

00:42:20.960 --> 00:42:23.160
was erklärt, warum es die Präferenz ist.

00:42:23.160 --> 00:42:25.000
Ja, also die

00:42:25.000 --> 00:42:26.320
machen da ganz viel und

00:42:26.320 --> 00:42:29.540
ja, Django Packages

00:42:29.540 --> 00:42:30.920
ist tatsächlich eine große Hilfe, aber

00:42:30.920 --> 00:42:33.160
ja, so oft ist es auch schwer zu erkennen,

00:42:33.240 --> 00:42:35.100
also ich finde das oft nicht so

00:42:35.100 --> 00:42:36.960
einfach, wenn man jetzt irgendwie ein Problem hat,

00:42:36.960 --> 00:42:38.440
das man gelöst haben möchte

00:42:38.440 --> 00:42:41.180
und man jetzt hat, hat man da so eine Auswahl

00:42:41.180 --> 00:42:42.600
von zehn unterschiedlichen Paketen,

00:42:42.600 --> 00:42:45.040
ist es wirklich nicht einfach zu sagen,

00:42:45.040 --> 00:42:46.000
ja, welches davon

00:42:46.000 --> 00:42:48.920
man nehmen sollte.

00:42:48.920 --> 00:42:50.240
Ja, ohne jetzt alle zu kennen schon.

00:42:50.240 --> 00:42:52.720
Genau, das kann man ja auch gar nicht, man kann die gar nicht alle kennen

00:42:52.720 --> 00:42:55.040
und selbst wenn man dann mal zwei, drei

00:42:55.040 --> 00:42:56.180
reingeguckt hat, dann

00:42:56.180 --> 00:42:58.880
ist das nicht so einfach zu sagen.

00:42:58.880 --> 00:43:00.980
Ja, manchmal muss man halt dann Glück haben oder

00:43:00.980 --> 00:43:03.020
irgendwie sich später nochmal umentscheiden,

00:43:03.220 --> 00:43:04.820
aber das ist

00:43:04.820 --> 00:43:06.500
tatsächlich ein großes Problem, also

00:43:06.500 --> 00:43:08.460
wie wählt man

00:43:08.460 --> 00:43:11.040
die Software aus, von der man

00:43:11.040 --> 00:43:13.060
abhängig sein möchte, das ist

00:43:13.060 --> 00:43:15.120
Ja, und jeder

00:43:15.120 --> 00:43:16.920
baut so mit der Zeit seine eigenen

00:43:16.920 --> 00:43:19.180
Vorlieben und seine eigenen Präferenzen auf

00:43:19.180 --> 00:43:21.160
und die sind schwer

00:43:21.160 --> 00:43:22.900
austauschbar. Es ist super interessant,

00:43:22.900 --> 00:43:24.820
sich darüber zu unterhalten, aber

00:43:24.820 --> 00:43:26.340
sie sind sehr schwer austauschbar.

00:43:26.340 --> 00:43:26.860
Ja.

00:43:26.860 --> 00:43:31.140
Gibt es was wie gute und schlechte

00:43:31.140 --> 00:43:33.120
Module oder ist das eher nur eine

00:43:33.120 --> 00:43:33.920
Präferenzenfrage?

00:43:33.920 --> 00:43:37.160
Es gibt sicherlich gute

00:43:37.160 --> 00:43:38.260
und schlechte Module, aber

00:43:38.260 --> 00:43:41.320
nicht auf so einer absoluten

00:43:41.320 --> 00:43:42.940
Ebene. Also ich könnte jetzt nicht auf irgendeinem Modul

00:43:42.940 --> 00:43:44.940
zeigen und sagen, das ist schlecht. Wenn du das benutzt,

00:43:44.940 --> 00:43:45.840
dann bist du ein schlechter Mensch.

00:43:45.840 --> 00:43:48.460
Es ist eher...

00:43:48.460 --> 00:43:51.560
Das Cookie-Law-Modul

00:43:51.560 --> 00:43:52.200
vielleicht.

00:43:52.200 --> 00:43:55.220
Wenn man keine Cookies eigentlich einsetzen müsste.

00:43:55.220 --> 00:43:56.860
Wenn man keine Cookies hat.

00:43:56.860 --> 00:43:58.920
Aber es gibt ganz viele Leute, die sowas anschalten

00:43:58.920 --> 00:44:00.260
und gar keine Cookies haben oder so.

00:44:00.260 --> 00:44:03.020
Ja, aber das ist ja in Django immer so. In Django hast du immer den Session-Cookie.

00:44:03.020 --> 00:44:05.060
Session-Cookie. Also müsstest du eigentlich immer...

00:44:05.060 --> 00:44:05.860
Musst du immer, ja.

00:44:05.860 --> 00:44:08.920
Auch wenn du Session-Scar nicht benutzt hast, hast du immer einen Session-Cookie.

00:44:08.920 --> 00:44:10.200
Also müsstest du eigentlich immer

00:44:10.200 --> 00:44:11.840
das Modul direkt einschalten.

00:44:11.840 --> 00:44:14.340
Muss man die Cookie-Warnung tatsächlich auch bei Session...

00:44:14.340 --> 00:44:16.960
Ich dachte nur, wenn man tatsächlich ein persistentes Cookie

00:44:16.960 --> 00:44:19.380
setzt im Browser...

00:44:19.380 --> 00:44:21.120
Soweit ich weiß,

00:44:21.120 --> 00:44:23.280
immer wenn du

00:44:23.280 --> 00:44:24.860
Informationen über den Benutzer

00:44:24.860 --> 00:44:26.420
speicherst, dann das tust du ja in dem Moment.

00:44:26.420 --> 00:44:27.800
Okay, dann muss man es immer.

00:44:27.800 --> 00:44:32.120
Okay, das klingt super.

00:44:32.120 --> 00:44:32.900
Also nach...

00:44:32.900 --> 00:44:35.940
den Themen, die wir schon immer machen wollten.

00:44:35.940 --> 00:44:38.020
Ich glaube, Artikel 6

00:44:38.020 --> 00:44:39.760
oder sowas ist da spannend. Da kann man einfach sagen,

00:44:39.760 --> 00:44:42.180
hey, das muss ich machen, deswegen darf ich das auch.

00:44:42.180 --> 00:44:43.740
Und da müsst ihr einfach mit zufrieden sein.

00:44:43.740 --> 00:44:46.060
Ich muss euch da gar nicht Bescheid geben und gut ist.

00:44:46.060 --> 00:44:47.840
Ja, klar. Es gibt ja auch

00:44:47.840 --> 00:44:49.780
verschiedene Arten, wie man damit umgehen kann.

00:44:49.780 --> 00:44:51.980
Ich habe neulich eine Cookie-Warnung gesehen.

00:44:51.980 --> 00:44:53.860
Da stand einfach nur drin, wir müssen sie informieren,

00:44:53.860 --> 00:44:55.760
dass wir Cookies setzen. Das haben wir hier mitgetan.

00:44:55.760 --> 00:44:56.320
Ja.

00:44:56.320 --> 00:44:59.280
Da kann man sich ja vor Gericht streiten, ob das ausreichend war.

00:44:59.280 --> 00:45:01.280
Ja, aber...

00:45:01.280 --> 00:45:02.160
Ja.

00:45:02.780 --> 00:45:05.380
Mir fällt das schwer,

00:45:05.380 --> 00:45:07.160
das zu verstehen manchmal, was da

00:45:07.160 --> 00:45:09.680
bestimmte Regulierungen irgendwie eigentlich nutzen sollen.

00:45:09.680 --> 00:45:11.860
Und Leuten, die da noch weniger

00:45:11.860 --> 00:45:13.620
an zum Beispiel EU-Verordnungen dransitzen

00:45:13.620 --> 00:45:15.920
in den USA, denen fällt das möglicherweise noch schwerer.

00:45:15.920 --> 00:45:17.540
Und dann kriegt man teilweise so

00:45:17.540 --> 00:45:19.900
fast schon passiv-aggressiv

00:45:19.900 --> 00:45:21.880
anmutende so Geschichten so.

00:45:21.880 --> 00:45:23.720
Willst du die Seite wirklich weiter benutzen?

00:45:23.720 --> 00:45:24.760
Dann drück jetzt hier.

00:45:24.760 --> 00:45:25.900
Vermeldung.

00:45:25.900 --> 00:45:29.320
Ja. Naja, gut.

00:45:29.320 --> 00:45:31.940
Wahrscheinlich muss man einfach damit leben, dass es halt manchmal ein bisschen nervig ist,

00:45:31.940 --> 00:45:32.660
wenn man regelgeregelt...

00:45:32.660 --> 00:45:35.060
Und dann haben die Leute, die das nicht verstehen,

00:45:35.060 --> 00:45:37.680
irgendwann ausgedient. Und dann kommen Leute, die es ein bisschen besser verstehen,

00:45:37.680 --> 00:45:39.680
die sagen dann, mach den Schrott weg.

00:45:39.680 --> 00:45:40.980
Oder so. Hoffentlich.

00:45:40.980 --> 00:45:43.280
Dann weiß ich es nicht. Kann natürlich immer alles schlimmer werden.

00:45:43.280 --> 00:45:45.460
Aber ich glaube mir mal an das gute Menschen.

00:45:45.460 --> 00:45:46.760
Ja.

00:45:46.760 --> 00:45:49.720
Das ist ja immer Politik. Zwei Schritte vor, drei zurück.

00:45:49.720 --> 00:45:51.280
Nein, warte mal. Drei vor, zwei zurück.

00:45:51.280 --> 00:45:51.640
Hoffentlich.

00:45:51.640 --> 00:45:54.120
Oder im Kreis.

00:45:54.120 --> 00:45:56.820
Ja, ja.

00:45:56.820 --> 00:45:59.220
Ja.

00:45:59.220 --> 00:46:00.840
Was habt ihr denn an Neuigkeiten für Dango?

00:46:00.840 --> 00:46:02.540
Ist euch da was eingefallen, was in letzter Zeit

00:46:02.540 --> 00:46:04.620
da zukam, wo ihr sagtet, ey, wow,

00:46:04.620 --> 00:46:05.760
guckt euch das unbedingt nochmal an?

00:46:05.760 --> 00:46:08.340
Es gibt da eigentlich immer neue Sachen

00:46:08.340 --> 00:46:09.080
zu sehen.

00:46:09.080 --> 00:46:12.400
Dango hat vor kurzem seinen...

00:46:12.400 --> 00:46:14.200
Ja, vor kurzem. Vor langer Zeit.

00:46:14.200 --> 00:46:16.620
Er hat schon seit langer Zeit einen sehr schnellen

00:46:16.620 --> 00:46:17.520
Release-Zyklus.

00:46:17.520 --> 00:46:20.680
Entschuldigung, was heißt schnell?

00:46:20.680 --> 00:46:22.620
Schnell heißt, dass die

00:46:22.620 --> 00:46:24.740
sagen, alle neun Monate

00:46:24.740 --> 00:46:26.880
kommt eine neue Version von Dango raus.

00:46:26.880 --> 00:46:28.880
Immer ein nächstes Baby.

00:46:28.880 --> 00:46:29.920
Genau.

00:46:29.920 --> 00:46:32.100
Und jede dritte Version

00:46:32.100 --> 00:46:34.320
von Dango ist eine sogenannte LTS-Version.

00:46:34.320 --> 00:46:35.920
Eine Long-Time-Support.

00:46:35.920 --> 00:46:37.080
Oder Long-Term-Support.

00:46:37.080 --> 00:46:39.260
Das heißt, dass die mindestens für, Jochen,

00:46:39.260 --> 00:46:40.300
korrigiere ich mich, drei Jahre

00:46:40.300 --> 00:46:42.020
Sicherheits-Updates gibt.

00:46:42.020 --> 00:46:45.920
Und das heißt, dass es

00:46:45.920 --> 00:46:48.380
ab jetzt regelmäßig neue Major-Versionen

00:46:48.380 --> 00:46:49.820
gibt, weil die eben dieses

00:46:49.820 --> 00:46:51.660
Namensschema umgestellt haben. Wir sind jetzt

00:46:51.660 --> 00:46:53.400
gerade bei Dango 2.1.

00:46:53.400 --> 00:46:55.860
Die nächste Version, 2.2, wird

00:46:55.860 --> 00:46:57.920
eben so eine LTS-Version sein,

00:46:57.920 --> 00:46:59.060
die dann für längere Zeit

00:46:59.060 --> 00:47:01.980
gültig ist.

00:47:01.980 --> 00:47:03.780
Oder unterstützt wird, muss man so zu sagen.

00:47:03.780 --> 00:47:06.080
Und die Version danach ist Dango 3.0.

00:47:06.080 --> 00:47:08.100
Und üblicherweise

00:47:08.100 --> 00:47:09.080
erwartet man ja bei

00:47:09.080 --> 00:47:11.780
Versionssprüngen immer viele

00:47:11.780 --> 00:47:13.800
Neuigkeiten. Und ich glaube, dass das auch hier so sein wird.

00:47:13.800 --> 00:47:15.300
Also der Sprung von

00:47:15.300 --> 00:47:17.760
1.11, was die letzte, was die

00:47:17.760 --> 00:47:20.060
gerade aktive LTS-Version ist, auf 2.0,

00:47:20.060 --> 00:47:21.880
da waren schon einige Sachen

00:47:21.880 --> 00:47:24.040
drin, die sich deutlich geändert haben.

00:47:24.040 --> 00:47:25.920
Was sicherlich, oder

00:47:25.920 --> 00:47:27.680
was für mich am offensichtlichsten war, ist

00:47:27.680 --> 00:47:29.480
der Sprung von URL zu Path,

00:47:29.480 --> 00:47:31.480
wo sich die

00:47:31.980 --> 00:47:34.160
Definition der verfügbaren

00:47:34.160 --> 00:47:36.400
URLs in Django verändert hat.

00:47:36.400 --> 00:47:37.680
Früher

00:47:37.680 --> 00:47:40.020
in dem alten URL-Schema hat man einfach

00:47:40.020 --> 00:47:41.260
reguläre Ausdrücke angegeben.

00:47:41.260 --> 00:47:44.280
Und regulärer Ausdruck ist so eine Beschreibung

00:47:44.280 --> 00:47:46.300
für einen Text, für ein Textmuster.

00:47:46.300 --> 00:47:48.420
Und wenn dieses Textmuster gepasst hat,

00:47:48.420 --> 00:47:50.020
dann ist eben diese passende Funktion dazu

00:47:50.020 --> 00:47:52.180
aufgerufen worden. Man musste sich dann aber

00:47:52.180 --> 00:47:54.080
immer noch selbst darum kümmern, dass, wenn da

00:47:54.080 --> 00:47:55.800
jetzt zum Beispiel eine Jahreszahl drin war,

00:47:55.800 --> 00:47:57.960
dass die zu einer Zahl wurde, weil die

00:47:57.960 --> 00:48:00.160
natürlich aus diesem Text

00:48:00.160 --> 00:48:01.640
erstmal nur als Text rausgekommen ist.

00:48:01.980 --> 00:48:04.200
Und dieses Problem haben sie in

00:48:04.200 --> 00:48:06.280
2.0 geändert. Das heißt jetzt nicht mehr

00:48:06.280 --> 00:48:08.120
URL, sondern Path. Und man gibt eben

00:48:08.120 --> 00:48:10.120
nicht mehr so ein Textmuster an, sondern man gibt so

00:48:10.120 --> 00:48:12.100
ein Parametermuster an. Und sagt, okay,

00:48:12.100 --> 00:48:14.240
an dieser Stelle soll jetzt

00:48:14.240 --> 00:48:16.060
ein Integer stehen und den möchte ich gerne

00:48:16.060 --> 00:48:18.280
als Parameter Ja gegeben

00:48:18.280 --> 00:48:20.080
bekommen. Und dann wird diese URL auch

00:48:20.080 --> 00:48:21.780
tatsächlich nur aufgerufen, wenn da eine

00:48:21.780 --> 00:48:23.940
Ganzzahl drinsteht, die als Zahl

00:48:23.940 --> 00:48:25.860
interpretiert werden kann.

00:48:25.860 --> 00:48:28.120
Und das nimmt einem viel

00:48:28.120 --> 00:48:30.200
Arbeit weg, weil

00:48:30.200 --> 00:48:31.960
man eben nicht mehr dafür sorgen muss, dass die Parameter...

00:48:31.980 --> 00:48:33.700
...unterpassen. Ist aber auch

00:48:33.700 --> 00:48:34.820
erstmal ein Umdenken.

00:48:34.820 --> 00:48:37.880
Wenn man so lange mit den

00:48:37.880 --> 00:48:39.400
regulären Ausdrücken gearbeitet hat,

00:48:39.400 --> 00:48:42.140
dass man sich daran gewöhnt

00:48:42.140 --> 00:48:43.860
hat, dann verliert man oft den Blick

00:48:43.860 --> 00:48:46.080
dafür, was überhaupt möglich ist und ob das überhaupt gut ist.

00:48:46.080 --> 00:48:47.760
Ja, wobei ich finde,

00:48:47.760 --> 00:48:50.040
also reguläre Ausdrücke sind natürlich toll

00:48:50.040 --> 00:48:51.360
und man kann sie für ganz viele Sachen verwenden.

00:48:51.360 --> 00:48:52.760
Und wenn man sich da mal so

00:48:52.760 --> 00:48:55.500
zwei Stunden oder einen halben Tag reingefuchst hat,

00:48:55.500 --> 00:48:57.700
dann sieht das für einen auch alles ganz natürlich

00:48:57.700 --> 00:48:59.660
aus. Aber

00:48:59.660 --> 00:49:01.960
wenn man das halt...

00:49:01.980 --> 00:49:04.020
Django entwickelt, dann hat man mit diesen

00:49:04.020 --> 00:49:05.940
URL-Patterns eigentlich immer

00:49:05.940 --> 00:49:07.800
nur so ab und zu mal zu tun, wenn man halt

00:49:07.800 --> 00:49:09.360
irgendwie ein neues Modul reintut oder neue

00:49:09.360 --> 00:49:11.780
Views definiert. Und das ist eigentlich gar nicht

00:49:11.780 --> 00:49:13.600
so super häufig. Also das kommt schon vor, aber

00:49:13.600 --> 00:49:15.360
bei mir ist es jedenfalls so,

00:49:15.360 --> 00:49:17.680
dass ich eigentlich fast immer, wenn ich

00:49:17.680 --> 00:49:19.580
sowas dann, wenn ich das URL-Pattern

00:49:19.580 --> 00:49:21.640
geändert habe, dass ich dann irgendwie in alte

00:49:21.640 --> 00:49:23.460
Projekte geguckt habe oder nochmal Doku lesen musste.

00:49:23.460 --> 00:49:25.280
Wie macht man das denn jetzt eigentlich nochmal?

00:49:25.280 --> 00:49:27.520
Wie geht das mit der Gruppe?

00:49:27.520 --> 00:49:29.700
Und dann wird das zu einem Variablen-Namen. Wo schreibt man

00:49:29.700 --> 00:49:31.920
den nochmal hin? Kommt das P jetzt davor?

00:49:31.980 --> 00:49:33.880
Dahinter? Oder muss ich jetzt da ein Fragezeichen...

00:49:33.880 --> 00:49:35.280
Also das

00:49:35.280 --> 00:49:37.940
war immer... Ich musste

00:49:37.940 --> 00:49:39.880
es immer nachgucken. Und dann... Das ist natürlich irgendwie so ein bisschen

00:49:39.880 --> 00:49:41.960
ein schlechtes Zeichen, weil das ist dann

00:49:41.960 --> 00:49:43.880
irgendwie nicht intuitiv. Und das ist jetzt mit diesen

00:49:43.880 --> 00:49:46.000
Pass-Geschichten tatsächlich deutlich

00:49:46.000 --> 00:49:47.840
besser. Also da steht dann immer nur so

00:49:47.840 --> 00:49:49.780
Doppelpunkt, also Int

00:49:49.780 --> 00:49:51.820
oder String. Ich weiß nicht genau. Es gibt auch gar nicht

00:49:51.820 --> 00:49:53.420
so viele. Es gibt noch Slug und

00:49:53.420 --> 00:49:56.040
Pass oder so. Man kann sich selber welche

00:49:56.040 --> 00:49:57.980
schreiben. Man kann sich selber welche schreiben? Oh, das ist

00:49:57.980 --> 00:49:59.840
ja super. Das wusste ich jetzt zum Beispiel auch nicht.

00:49:59.840 --> 00:50:01.860
Ist ja voll gut. Ja, man kann

00:50:01.980 --> 00:50:03.940
sich selber welche schreiben. Es gibt verschiedene

00:50:03.940 --> 00:50:05.980
Möglichkeiten. Du kannst entweder direkt reguläre

00:50:05.980 --> 00:50:07.840
Ausdrücke machen. Also wenn du halt

00:50:07.840 --> 00:50:09.780
irgendwas ganz Bestimmtes merken musst.

00:50:09.780 --> 00:50:11.480
Oder du kannst welche, die es gibt, zusammentun.

00:50:11.480 --> 00:50:13.760
Also wenn du zum Beispiel möchtest, dass da

00:50:13.760 --> 00:50:15.640
ein Datum steht, kannst du eben drei so

00:50:15.640 --> 00:50:17.820
Integer-Dinger hintereinander mit

00:50:17.820 --> 00:50:19.860
Bindestrichen getrennt und kannst

00:50:19.860 --> 00:50:20.540
das als Date

00:50:20.540 --> 00:50:23.780
deklarieren. Und kriegst dann auch automatisch ein Date.

00:50:23.780 --> 00:50:25.740
Also musst du halt das entsprechend konvertieren, aber

00:50:25.740 --> 00:50:27.020
kriegst dann automatisch immer ein Date zurück.

00:50:27.020 --> 00:50:29.580
Und kannst es dann von da an überall verwenden.

00:50:29.580 --> 00:50:31.780
Oh, das ist ja großartig. Das finde ich

00:50:31.780 --> 00:50:32.480
mal angucken, wie das geht.

00:50:32.480 --> 00:50:35.760
Ja. Ja, siehst du, und das ist

00:50:35.760 --> 00:50:37.660
so ein bisschen das Schöne. Das ist so ein bisschen das, was

00:50:37.660 --> 00:50:39.720
immer passiert, wenn Django

00:50:39.720 --> 00:50:40.980
Experten zusammensitzen.

00:50:40.980 --> 00:50:43.820
Dann sagt einer irgendwas und der andere sagt, oh, das ist ja cool.

00:50:43.820 --> 00:50:45.660
Das wusste ich noch gar nicht. Das muss ich unbedingt mal

00:50:45.660 --> 00:50:46.640
anschauen. Ja.

00:50:46.640 --> 00:50:49.440
Und das geht mir da eigentlich regelmäßig so.

00:50:49.440 --> 00:50:49.820
Ja.

00:50:49.820 --> 00:50:52.000
Ja.

00:50:52.000 --> 00:50:57.160
Ja, ich weiß nicht genau, ob

00:50:57.160 --> 00:50:59.280
für 3.0 jetzt schon so ein Thema...

00:50:59.280 --> 00:51:01.340
Ich habe irgendwie so

00:51:01.580 --> 00:51:02.940
am Rande mitbekommen, dass

00:51:02.940 --> 00:51:05.180
auch für 2.0 im Grunde schon angedacht

00:51:05.180 --> 00:51:07.120
war, ob man jetzt nicht doch

00:51:07.120 --> 00:51:09.280
irgendwie so ein bisschen

00:51:09.280 --> 00:51:09.680
mehr

00:51:09.680 --> 00:51:12.300
ja, wie

00:51:12.300 --> 00:51:15.360
Kommunikation

00:51:15.360 --> 00:51:17.280
mit dem Client mit in Django reinnehmen kann.

00:51:17.280 --> 00:51:19.100
Aber das geht jetzt auch schon seit einiger Zeit

00:51:19.100 --> 00:51:19.900
irgendwie

00:51:19.900 --> 00:51:23.340
in den neueren HTTP-Versionen, dass man quasi auch

00:51:23.340 --> 00:51:25.080
über Websockets wieder mit dem Client

00:51:25.080 --> 00:51:27.360
vom Server aus zurücksprechen kann.

00:51:27.360 --> 00:51:29.020
Und es gibt diverse

00:51:29.020 --> 00:51:31.320
Fälle, wo das ja auch total sinnvoll ist, dass man das

00:51:31.320 --> 00:51:32.500
tut. Aber

00:51:32.500 --> 00:51:34.760
das passt halt nicht so richtig auf dieses

00:51:34.760 --> 00:51:36.940
ja, auf diese

00:51:36.940 --> 00:51:37.840
Schnittstelle zwischen

00:51:37.840 --> 00:51:41.060
Web-Server und Applikationen.

00:51:41.060 --> 00:51:42.940
WSGI, WSGI-Schnittstelle

00:51:42.940 --> 00:51:44.180
gibt das halt eigentlich nicht her.

00:51:44.180 --> 00:51:46.700
Und da muss halt noch eine ganze Menge

00:51:46.700 --> 00:51:48.780
Infrastruktur geändert werden.

00:51:48.780 --> 00:51:50.640
Und es gab da dieses Django-Channels-Projekt.

00:51:50.640 --> 00:51:53.140
Das gibt's ja immer noch.

00:51:53.140 --> 00:51:53.840
Das gibt's immer noch, ja.

00:51:53.840 --> 00:51:56.700
Und da war ja irgendwie schon

00:51:56.700 --> 00:51:58.840
mal irgendwie quasi

00:51:58.840 --> 00:52:01.120
sozusagen angedacht, dass in 2.0, Django 2

00:52:01.120 --> 00:52:02.620
mit reinzunehmen. Aber das ist dann halt irgendwie nicht

00:52:02.620 --> 00:52:04.380
passiert. Wahrscheinlich, weil zu viel angepasst werden musste.

00:52:04.380 --> 00:52:06.460
Und vielleicht kommt das ja dann in 3.0.

00:52:06.460 --> 00:52:07.020
Ich hab keine Ahnung.

00:52:07.020 --> 00:52:10.000
Das ist eine ganz spannende Sache.

00:52:10.000 --> 00:52:12.460
Das muss man sich auch mal genauer angucken.

00:52:12.460 --> 00:52:14.840
Weil da viele Dinge möglich werden, die vorher nicht möglich waren.

00:52:14.840 --> 00:52:16.920
Ist aber eben

00:52:16.920 --> 00:52:18.660
technisch ganz anders. Weil wir ja nicht mehr in

00:52:18.660 --> 00:52:20.640
dieses klassische Web-Schema reinfallen, wo

00:52:20.640 --> 00:52:22.940
der Benutzer eben eine Webseite aufruft

00:52:22.940 --> 00:52:24.140
und dann kriegt er die zurück. Sondern

00:52:24.140 --> 00:52:26.520
weil es jetzt eben auf einmal eine Verbindung gibt.

00:52:26.520 --> 00:52:28.740
Wo der Server potenziell

00:52:28.740 --> 00:52:30.840
selbst sagen kann, hier ist was passiert, mach mal was.

00:52:30.920 --> 00:52:33.020
Und das ist eine ganz spannende Sache.

00:52:33.020 --> 00:52:36.560
Ja, auch technisch super interessant.

00:52:36.560 --> 00:52:38.860
Da haben sie sich einen neuen Standard

00:52:38.860 --> 00:52:40.540
mehr oder weniger ausgedacht. ASGI.

00:52:40.540 --> 00:52:42.980
Was dann halt

00:52:42.980 --> 00:52:44.540
auch neue Server-Backends erfordert.

00:52:44.540 --> 00:52:46.320
Daphne heißt der Server. Genau, genau.

00:52:46.320 --> 00:52:48.400
Man kann nicht einfach irgendwie Junicorn nehmen oder

00:52:48.400 --> 00:52:50.680
den normalen Entwicklungs-Server von Django, sondern

00:52:50.680 --> 00:52:52.560
ja. Und da ändert sich dann einiges.

00:52:52.560 --> 00:52:54.680
Man kann schon den normalen Entwicklungs-Server nehmen, weil

00:52:54.680 --> 00:52:56.460
der das direkt mit integriert hat.

00:52:56.460 --> 00:52:58.560
Also wenn du Channels installierst,

00:52:58.560 --> 00:53:00.720
dann kriegst du eine andere Variante

00:53:00.720 --> 00:53:02.480
von Run-Server und der das automatisch

00:53:02.480 --> 00:53:04.420
der automatische Websockets bringt.

00:53:04.420 --> 00:53:06.380
Damit du eben in der Entwicklung den

00:53:06.380 --> 00:53:07.740
Unterschied nicht merkst.

00:53:07.740 --> 00:53:10.000
Aber das

00:53:10.000 --> 00:53:12.540
Arbeiten damit ist deutlich anders, weil du eben

00:53:12.540 --> 00:53:14.500
diese Kanäle hast und nicht mehr so dieses

00:53:14.500 --> 00:53:15.820
Request-Response.

00:53:16.320 --> 00:53:16.840
Schema.

00:53:16.840 --> 00:53:20.000
Das muss man jetzt mal kurz erklären. Also ich habe jetzt

00:53:20.000 --> 00:53:21.780
ganz kurz fast nur Warenverstand.

00:53:21.780 --> 00:53:24.460
Request-Response-Schema, ja.

00:53:24.460 --> 00:53:26.120
Kanäle, hä?

00:53:26.120 --> 00:53:28.120
Was ist das?

00:53:28.120 --> 00:53:29.200
Die

00:53:29.200 --> 00:53:32.120
früher, als das

00:53:32.120 --> 00:53:33.240
Web noch jung war,

00:53:33.240 --> 00:53:35.940
war die Idee,

00:53:35.940 --> 00:53:38.080
dass eine Webseite eigentlich nie

00:53:38.080 --> 00:53:39.280
einen Zustand haben sollte.

00:53:39.280 --> 00:53:42.240
Das heißt, du fragst eine URL an

00:53:42.240 --> 00:53:44.080
und kriegst das Ergebnis, oder kriegst das,

00:53:44.080 --> 00:53:46.000
was da auf dieser URL steht, zurück.

00:53:46.320 --> 00:53:47.880
Und mit Error 402

00:53:47.880 --> 00:53:49.480
Payment Required, ja. Genau.

00:53:49.480 --> 00:53:52.080
Das hat sich dann schnell gezeigt, dass dem nicht

00:53:52.080 --> 00:53:53.880
so ist und dass man irgendwie einen Zustand braucht.

00:53:53.880 --> 00:53:56.000
Und man hat dann eben die Lösung gefunden, dass man Cookies

00:53:56.000 --> 00:53:58.240
setzt. Cookies sind im Wesentlichen

00:53:58.240 --> 00:54:00.040
der Zustand, den du mitlieferst, wenn

00:54:00.040 --> 00:54:01.720
du eine Webseite anguckst.

00:54:01.720 --> 00:54:03.400
Wenn du dich irgendwo einloggst,

00:54:03.400 --> 00:54:05.920
dann wird eben der Login auf dem

00:54:05.920 --> 00:54:07.980
Server mit dem Cookie, den du

00:54:07.980 --> 00:54:09.980
hast, verbunden. Und jedes

00:54:09.980 --> 00:54:11.460
Mal, wenn du diese Seite aufrufst,

00:54:11.460 --> 00:54:13.760
guckt eben der Server, ist das ein Benutzer,

00:54:13.760 --> 00:54:15.520
der eingeloggt ist oder einer, der nicht eingeloggt ist.

00:54:15.960 --> 00:54:17.880
Und zeigt dann entsprechend die richtige Variante an.

00:54:17.880 --> 00:54:21.740
Ist sehr schön,

00:54:21.740 --> 00:54:23.880
weil man da die Seiten eben

00:54:23.880 --> 00:54:25.860
so dynamisch generieren kann, dass sie für den

00:54:25.860 --> 00:54:27.760
Benutzer zugeschnitten sind, der jetzt gerade

00:54:27.760 --> 00:54:29.640
da ist. Weil wir ja wissen, wer sich

00:54:29.640 --> 00:54:31.520
eingeloggt hat. Oder weil wir vielleicht wissen, was der

00:54:31.520 --> 00:54:33.420
gestern gekauft hat. Oder weil wir vielleicht wissen,

00:54:33.420 --> 00:54:35.680
keine Ahnung, was der für

00:54:35.680 --> 00:54:36.820
einen Computer hat oder irgendwie sowas.

00:54:36.820 --> 00:54:40.000
Ist aber immer noch,

00:54:40.000 --> 00:54:41.780
das Schema ist immer noch Request Response.

00:54:41.780 --> 00:54:43.080
Der Browser sagt,

00:54:43.080 --> 00:54:45.600
ich möchte jetzt diese Seite ansehen, bitte

00:54:45.600 --> 00:54:47.600
gib mir diese Seite. Dann macht der Server irgendwas

00:54:47.600 --> 00:54:49.620
und gibt ihm diese Seite zurück. Und damit

00:54:49.620 --> 00:54:51.300
ist die Arbeit des Servers schon beendet.

00:54:51.300 --> 00:54:53.800
Und der Server hat auch keine

00:54:53.800 --> 00:54:55.700
Gelegenheit hinterher noch zu sagen, oh halt,

00:54:55.700 --> 00:54:57.440
ist doch was anders. Oder

00:54:57.440 --> 00:54:59.900
vielleicht hat sich da

00:54:59.900 --> 00:55:01.600
in der Zwischenzeit was getan oder vielleicht

00:55:01.600 --> 00:55:03.520
passiert irgendwas. Und er wartet immer, bis der Browser

00:55:03.520 --> 00:55:05.380
wieder fragt. Genau, die Verbindung ist dann

00:55:05.380 --> 00:55:07.620
erstmal weg und der Browser muss dann fragen.

00:55:07.620 --> 00:55:11.200
Jetzt haben Browser

00:55:11.200 --> 00:55:13.540
in der Zwischenzeit JavaScript bekommen

00:55:13.540 --> 00:55:15.320
und haben eben die Möglichkeit erhalten,

00:55:15.320 --> 00:55:15.440
zu fragen.

00:55:15.600 --> 00:55:17.180
Regelmäßig zu fragen.

00:55:17.180 --> 00:55:19.480
Das ist zum Beispiel das, was Twitter macht oder das,

00:55:19.480 --> 00:55:21.220
was Facebook macht.

00:55:21.220 --> 00:55:23.920
Wenn da ein Newsfeed

00:55:23.920 --> 00:55:25.480
sich aktualisiert, dann fragen die halt

00:55:25.480 --> 00:55:27.340
alle 30 Sekunden, gibt es was Neues für mich?

00:55:27.340 --> 00:55:29.620
Und dann sagt der Server in den allermeisten

00:55:29.620 --> 00:55:31.700
Fällen nein. Und wenn es doch was Neues gibt,

00:55:31.700 --> 00:55:33.580
dann gibt er eben diese Schnipsel zurück, die neu

00:55:33.580 --> 00:55:35.600
sind oder gibt die Informationen zurück, die neu sind

00:55:35.600 --> 00:55:37.620
und der Browser baut die dann für sich zusammen.

00:55:37.620 --> 00:55:39.780
Jetzt wäre

00:55:39.780 --> 00:55:41.620
es doch eigentlich von der Denkweise

00:55:41.620 --> 00:55:43.560
her viel besser, dass der Browser nicht

00:55:43.560 --> 00:55:45.560
alle 30 Sekunden fragen muss, gibt es was Neues?

00:55:45.560 --> 00:55:47.580
Und ganz oft die Antwort bekommen

00:55:47.580 --> 00:55:48.940
wird, nein, es gibt nichts Neues.

00:55:48.940 --> 00:55:51.500
Sondern es wäre doch eigentlich besser, wenn der Server sagen

00:55:51.500 --> 00:55:53.680
könnte, wenn es was Neues gibt,

00:55:53.680 --> 00:55:54.980
hier, bitte nimm. Genau.

00:55:54.980 --> 00:55:57.160
Wenn es was Neues gibt, sage ich dir Bescheid.

00:55:57.160 --> 00:55:59.600
Und das

00:55:59.600 --> 00:56:00.860
ist eben genau diese

00:56:00.860 --> 00:56:03.480
Veränderung. Auf einmal hast du nicht mehr

00:56:03.480 --> 00:56:05.640
einen Server, der nur noch Fragen beantworten

00:56:05.640 --> 00:56:07.840
kann, der Anfragen

00:56:07.840 --> 00:56:09.520
umsetzt und

00:56:09.520 --> 00:56:11.460
dann die komplette Seite zurückschicken kann oder eben

00:56:11.460 --> 00:56:13.540
auch Teile von der Seite, sondern du hast

00:56:13.540 --> 00:56:15.520
jetzt in dem Schema die Möglichkeit,

00:56:15.520 --> 00:56:17.640
zu sagen, es ist

00:56:17.640 --> 00:56:19.340
ein Ereignis passiert auf dem Server

00:56:19.340 --> 00:56:21.440
und der Server gibt

00:56:21.440 --> 00:56:23.020
automatisch dem Client Bescheid.

00:56:23.020 --> 00:56:25.360
Dafür brauchst du aber eine Verbindung zwischen dem Server

00:56:25.360 --> 00:56:27.440
und dem Client, die die ganze Zeit da sein muss.

00:56:27.440 --> 00:56:29.320
Ist das nicht dann das Netz

00:56:29.320 --> 00:56:30.460
viel mehr ausgelastet?

00:56:30.460 --> 00:56:33.520
Nee, es ist eigentlich weniger ausgelastet.

00:56:33.520 --> 00:56:35.500
Weil du eben nicht die

00:56:35.500 --> 00:56:37.320
ganze Zeit leere Anfragen schicken musst.

00:56:37.320 --> 00:56:39.660
Gibt es was Neues? Gibt es was Neues? Gibt es was Neues?

00:56:39.660 --> 00:56:41.280
Gibt es was Neues? Sondern du hast nur diese eine

00:56:41.280 --> 00:56:43.560
Verbindung und die, klar, die wird offen gehalten.

00:56:43.560 --> 00:56:45.380
Also insofern hast du eine Ressource,

00:56:45.480 --> 00:56:47.480
belegt. Aber dieses

00:56:47.480 --> 00:56:49.480
Verbindung offen halten ist sowieso was, was

00:56:49.480 --> 00:56:51.380
TCP kann und das wird eben über so

00:56:51.380 --> 00:56:53.360
Keep-Alive-Mechanismen, die sich dann

00:56:53.360 --> 00:56:55.260
anpassen, die möglichst wenig Bandbreite

00:56:55.260 --> 00:56:57.340
verwenden, abgedeckt.

00:56:57.340 --> 00:56:59.280
Und du hast wirklich nur Kommunikation,

00:56:59.280 --> 00:57:00.600
wenn auch tatsächlich was passiert.

00:57:00.600 --> 00:57:03.400
Und das

00:57:03.400 --> 00:57:05.360
gibt dir eigentlich zwei Vorteile. Zum einen

00:57:05.360 --> 00:57:07.500
sparst du dir die Bandbreite, dass du die ganze Zeit

00:57:07.500 --> 00:57:08.980
fragen musst, auch wenn nichts passiert ist.

00:57:08.980 --> 00:57:11.480
Du weißt ja gar nicht, was passiert ist. Und zum anderen

00:57:11.480 --> 00:57:13.660
hast du natürlich eine viel schnellere Antwortzeit.

00:57:13.660 --> 00:57:15.440
Weil es nicht

00:57:15.440 --> 00:57:17.080
mehr davon abhängt, wie oft der Client

00:57:17.080 --> 00:57:18.980
fragt, dass er Updates bekommt,

00:57:18.980 --> 00:57:21.240
sondern wenn ein Update passiert,

00:57:21.240 --> 00:57:23.380
kann der Server sofort sagen, jetzt ist was passiert.

00:57:23.380 --> 00:57:25.260
Das heißt, wenn ich

00:57:25.260 --> 00:57:27.160
mir meine Chat-Anwendung schreibe

00:57:27.160 --> 00:57:29.360
und die, das ist so das klassische

00:57:29.360 --> 00:57:31.260
Beispiel, und der

00:57:31.260 --> 00:57:33.360
Client fragt halt nur alle 30 Sekunden, gibt es was

00:57:33.360 --> 00:57:35.220
Neues? Dann sehe ich auch nur alle

00:57:35.220 --> 00:57:37.060
30 Sekunden, ob jemand was geschrieben hat.

00:57:37.060 --> 00:57:39.180
Wenn der Server sagen kann, hier ist was Neues,

00:57:39.180 --> 00:57:41.160
dann kann ich das sofort ausliefern. Das heißt, es wird

00:57:41.160 --> 00:57:41.760
sehr viel

00:57:41.760 --> 00:57:44.900
responsiver, sehr viel

00:57:45.400 --> 00:57:47.020
schneller in der

00:57:47.020 --> 00:57:49.240
Verarbeitung. Und Latenz

00:57:49.240 --> 00:57:51.400
direkt verfügbar. Genau, es wird direkt

00:57:51.400 --> 00:57:52.940
weitergeleitet und direkt verfügbar gemacht.

00:57:52.940 --> 00:57:55.180
Und das ist natürlich was, was man heutzutage haben

00:57:55.180 --> 00:57:56.980
möchte, diese Geschwindigkeit

00:57:56.980 --> 00:57:58.800
in den Antworten.

00:57:58.800 --> 00:58:01.260
Auch in ganz mondänen

00:58:01.260 --> 00:58:02.520
Anwendungen,

00:58:02.520 --> 00:58:05.220
immer dann, wenn ich irgendwas anzeigen möchte,

00:58:05.220 --> 00:58:06.380
was auf dem Server passiert,

00:58:06.380 --> 00:58:09.060
brauche ich diesen

00:58:09.060 --> 00:58:11.420
Update-Mechanismus oder kann ich diesen Update-

00:58:11.420 --> 00:58:13.200
Mechanismus. Also immer ein Request und das

00:58:13.200 --> 00:58:14.840
ist halt jetzt ein Riesenvorteil.

00:58:14.840 --> 00:58:15.240
Genau.

00:58:15.400 --> 00:58:17.600
Ja, und ich glaube,

00:58:17.600 --> 00:58:18.200
es gab da auch

00:58:18.200 --> 00:58:21.200
noch Dinge, bevor man das

00:58:21.200 --> 00:58:22.540
mit JavaScript gemacht hat,

00:58:22.540 --> 00:58:24.720
solche furchtbaren Dinge wie Long-Polling,

00:58:24.720 --> 00:58:27.220
wo dann der Server immer gesagt hat,

00:58:27.220 --> 00:58:29.160
ja, nee, Moment, warte mal, ist noch nicht

00:58:29.160 --> 00:58:31.060
ganz fertig, warte mal,

00:58:31.060 --> 00:58:31.540
Moment.

00:58:31.540 --> 00:58:34.900
Und dann ab und zu mal doch wieder so ein

00:58:34.900 --> 00:58:37.280
Content-Bröckchen an den Client weitergeschickt hat.

00:58:37.280 --> 00:58:41.300
Und es gab da

00:58:41.300 --> 00:58:43.080
diverse furchtbare Geschichten, die gemacht wurden.

00:58:43.080 --> 00:58:45.140
Und im Grunde jetzt

00:58:45.140 --> 00:58:47.200
WebSockets und eine

00:58:47.200 --> 00:58:49.120
stehende Verbindung löst all das eigentlich

00:58:49.120 --> 00:58:51.040
relativ sauber und

00:58:51.040 --> 00:58:52.980
ja, damit kann man wirklich tolle Sachen

00:58:52.980 --> 00:58:53.680
machen.

00:58:53.680 --> 00:58:55.980
Und es gab ja auch,

00:58:55.980 --> 00:58:58.460
es gibt auch schon komplette

00:58:58.460 --> 00:59:00.460
Frameworks und komplette

00:59:00.460 --> 00:59:03.780
Technologie-Stacks,

00:59:03.780 --> 00:59:05.180
die halt darauf basieren, dass man

00:59:05.180 --> 00:59:07.200
sowas machen kann. Also wenn man zum Beispiel in die JavaScript-Welt

00:59:07.200 --> 00:59:09.140
guckt, da Meteor oder so, die sind halt,

00:59:09.140 --> 00:59:11.300
das ist halt vom Backend

00:59:11.300 --> 00:59:12.960
bis zum Frontend darauf ausgerichtet, dass

00:59:12.960 --> 00:59:15.060
man dem Client

00:59:15.060 --> 00:59:15.920
irgendwie Dinge schicken kann.

00:59:15.920 --> 00:59:19.060
Und damit kann man halt Sachen bauen, die

00:59:19.060 --> 00:59:20.360
ja,

00:59:20.360 --> 00:59:22.980
wenn man sowas zum ersten Mal sieht, relativ verblüffend

00:59:22.980 --> 00:59:25.020
aussehen, weil sie anders

00:59:25.020 --> 00:59:26.640
sind als das, was man so von Web-Anwendungen

00:59:26.640 --> 00:59:27.920
gewohnt ist.

00:59:27.920 --> 00:59:29.960
Jetzt hast du gerade wieder einen Begriff gesagt, ein Meteor.

00:59:29.960 --> 00:59:32.920
Ja, das ist halt dieser Stack, das ist heute auch

00:59:32.920 --> 00:59:34.560
nicht mehr so relevant, das ist immer eine Zeit lang irgendwie

00:59:34.560 --> 00:59:36.220
halbwegs hip.

00:59:36.220 --> 00:59:38.680
Und das ist halt irgendwie, als

00:59:38.680 --> 00:59:40.700
Datenbank verwendet das halt irgendwie

00:59:40.700 --> 00:59:42.020
dieses da, Dings da,

00:59:42.020 --> 00:59:43.320
MongoDB.

00:59:44.980 --> 00:59:45.920
Das kann halt quasi

00:59:45.920 --> 00:59:49.120
diese Verbindungen

00:59:49.120 --> 00:59:51.000
auch, oder wenn was irgendwie passiert,

00:59:51.000 --> 00:59:52.120
direkt wieder an

00:59:52.120 --> 00:59:54.240
den Server, dass dann

00:59:54.240 --> 00:59:56.940
irgendwie ein eigenes Node.js-Basics

00:59:56.940 --> 00:59:58.720
Dings irgendwie weiterreichen. Und deswegen

00:59:58.720 --> 01:00:00.560
reicht es halt komplett durch an den Client.

01:00:00.560 --> 01:00:03.080
Und du hast halt sozusagen Model-View-Kontrolle

01:00:03.080 --> 01:00:03.620
aber mit

01:00:03.620 --> 01:00:06.700
dem Client direkt drin. Und auf dem Client

01:00:06.700 --> 01:00:08.440
oder auf dem Server kann der gleiche Code laufen und so.

01:00:08.440 --> 01:00:09.280
Und das ist alles sehr schick.

01:00:09.280 --> 01:00:12.840
Damit sieht dann halt so eine Anwendung quasi genauso aus wie

01:00:12.840 --> 01:00:13.760
eine

01:00:13.760 --> 01:00:14.900
ähm

01:00:14.900 --> 01:00:17.540
ja, wie so eine Desktop-Applikation

01:00:17.540 --> 01:00:18.560
im Grunde, was die

01:00:18.560 --> 01:00:20.900
Reaktivität angeht. Man drückt irgendeinen Knopf

01:00:20.900 --> 01:00:22.940
und sofort bei jemand anders in einem

01:00:22.940 --> 01:00:25.040
anderen Browser irgendwie

01:00:25.040 --> 01:00:26.860
sieht man, dass dieser Knopf gedrückt wurde.

01:00:26.860 --> 01:00:29.020
Und ähm, das ist fast

01:00:29.020 --> 01:00:29.600
ja, also

01:00:29.600 --> 01:00:33.120
Statusänderungen sind halt sozusagen

01:00:33.120 --> 01:00:34.620
instantan für alle, die es betrifft,

01:00:34.620 --> 01:00:37.260
sichtbar. Und das ist halt etwas, was man normalerweise

01:00:37.260 --> 01:00:38.720
jetzt so nicht hat. Das hat man auch bei Django nicht.

01:00:38.720 --> 01:00:41.060
Das kann man dann schon machen, aber das ist dann halt

01:00:41.060 --> 01:00:43.080
immer irgendwie so eine Sonder-Locker und das ist halt nicht

01:00:43.080 --> 01:00:44.880
irgendwie in dem Framework mit,

01:00:44.880 --> 01:00:46.420
integriert, sondern, ähm, ja,

01:00:46.420 --> 01:00:48.900
halt immer so ein bisschen, äh, dran

01:00:48.900 --> 01:00:49.200
vorbei.

01:00:49.200 --> 01:00:52.920
Ähm, aber das wäre natürlich schön, wenn man das halt

01:00:52.920 --> 01:00:54.800
direkt mit drin hätte. Und das kann natürlich gut sein,

01:00:54.800 --> 01:00:57.120
dass das jetzt demnächst dann in einer größeren, äh,

01:00:57.120 --> 01:00:58.360
Major-Version kommt.

01:00:58.360 --> 01:01:00.920
Ja, ansonsten kann man sich Channels ja auch so

01:01:00.920 --> 01:01:01.760
reinholen. Ja, kann man auch.

01:01:01.760 --> 01:01:04.820
Also, implementiert Django dann

01:01:04.820 --> 01:01:07.000
Module, die es vorher schon gab, oder bleibt es komplett

01:01:07.000 --> 01:01:08.960
eigene Dinge selber? Sind da

01:01:08.960 --> 01:01:10.380
vorher so Requests für vorhanden,

01:01:10.380 --> 01:01:12.820
dass tatsächlich die Entwickler gucken, hey, was ist

01:01:12.820 --> 01:01:14.720
denn so an Bedarf da, oder kommen die mit eigenen

01:01:14.720 --> 01:01:16.180
kreativen Ideen, oder?

01:01:16.180 --> 01:01:19.160
Ja, es, äh, es gibt, äh,

01:01:19.160 --> 01:01:21.060
Django ist, ähm,

01:01:21.060 --> 01:01:22.800
ein sehr großes Open-Source-Projekt.

01:01:22.800 --> 01:01:24.760
Und, ähm... Wie viele Entwickler

01:01:24.760 --> 01:01:27.040
gibt es da ungefähr in diesem...

01:01:27.040 --> 01:01:28.680
Es ist schwer zu sagen, aber es gibt eine Stiftung.

01:01:28.680 --> 01:01:30.760
Es gibt die Django Software Foundation. Also, sie sind

01:01:30.760 --> 01:01:32.800
irgendwann so groß geworden, dass sie eine Stiftung gegründet

01:01:32.800 --> 01:01:34.600
haben. Also Leute, die

01:01:34.600 --> 01:01:37.040
Vollzeit auch ein bisschen dafür bezahlt werden, dass sie wie Moodle weiterentwickeln.

01:01:37.040 --> 01:01:38.640
Genau, da gibt es so ein paar Programme,

01:01:38.640 --> 01:01:40.840
wie das, äh, wie das, wie das möglich

01:01:40.840 --> 01:01:42.600
ist, und die haben auf jeden Fall genügend,

01:01:42.600 --> 01:01:44.700
äh, finanzielle Ressourcen,

01:01:44.720 --> 01:01:46.680
um sich am Leben zu halten, und um eben dieses

01:01:46.680 --> 01:01:48.260
Projekt, äh, am Leben zu halten.

01:01:48.260 --> 01:01:50.580
Heißt eben aber auch, dass, äh, dass da

01:01:50.580 --> 01:01:52.940
inzwischen relativ viel Community-Management

01:01:52.940 --> 01:01:54.980
drin ist, weil eben die Community

01:01:54.980 --> 01:01:56.640
so groß ist, weil es so viele Leute gibt,

01:01:56.640 --> 01:01:58.500
die Django einsetzen,

01:01:58.500 --> 01:02:00.740
dass es notwendig

01:02:00.740 --> 01:02:02.380
wird, da Prozesse zu haben.

01:02:02.380 --> 01:02:04.680
Die, der, die meiste

01:02:04.680 --> 01:02:06.620
Weiterentwicklung kommt, glaube ich, tatsächlich aus der

01:02:06.620 --> 01:02:07.860
Entwickler-Community, wo einer,

01:02:07.860 --> 01:02:10.680
der es haben möchte, einfach sagt, ich mach das

01:02:10.680 --> 01:02:12.780
jetzt mal, und dann zeige ich es allen Leuten,

01:02:12.780 --> 01:02:14.720
und wir schauen, ob das funktioniert

01:02:14.720 --> 01:02:16.680
oder nicht. Also es ist sehr viel da,

01:02:16.680 --> 01:02:18.860
es ist nicht so zentralisiert,

01:02:18.860 --> 01:02:20.880
wie man das in, in anderen Projekten vielleicht

01:02:20.880 --> 01:02:22.680
kennt, sondern es passiert sehr viel einfach

01:02:22.680 --> 01:02:23.660
aus der Community heraus.

01:02:23.660 --> 01:02:26.720
Es gibt auch, äh, jedes Jahr Konferenzen

01:02:26.720 --> 01:02:28.280
zu dem Thema, es gibt die DjangoCon,

01:02:28.280 --> 01:02:30.780
die jedes Jahr in den USA stattfinden,

01:02:30.780 --> 01:02:31.960
es gibt die DjangoCon Europe,

01:02:31.960 --> 01:02:34.700
die jedes Jahr in einer Stadt

01:02:34.700 --> 01:02:35.840
Europas, äh,

01:02:35.840 --> 01:02:38.900
Wo ist sie nächstes Jahr, und wo war sie dieses Jahr?

01:02:38.900 --> 01:02:40.520
Dieses Jahr war sie in Heidelberg,

01:02:40.520 --> 01:02:42.560
im Mai. Ja?

01:02:42.560 --> 01:02:43.620
Ach, in die Ecke.

01:02:44.720 --> 01:02:46.840
Ja, es ist in Kopenhagen, wenn ich das richtig

01:02:46.840 --> 01:02:48.760
weiß. Und das wird auch

01:02:48.760 --> 01:02:50.820
immer von, äh, von der Community

01:02:50.820 --> 01:02:52.980
organisiert, also die Software, die DSF,

01:02:52.980 --> 01:02:54.680
die Django Software Foundation sagt, ganz

01:02:54.680 --> 01:02:56.680
spezifisch, wir wollen, dass das Amateure

01:02:56.680 --> 01:02:58.820
machen, weil wir eben

01:02:58.820 --> 01:03:00.820
die, die

01:03:00.820 --> 01:03:02.720
Community, die Benutzer mit einbeziehen

01:03:02.720 --> 01:03:04.060
wollen in den Prozess

01:03:04.060 --> 01:03:05.980
der Weiterentwicklung.

01:03:05.980 --> 01:03:08.860
Und, äh, die DjangoCon Europe

01:03:08.860 --> 01:03:10.880
ist, vor ein paar Jahren war die in Südfrankreich,

01:03:10.880 --> 01:03:12.720
und da hatten sie so eine Insel, die hatten

01:03:12.720 --> 01:03:14.160
einfach eine komplette Insel gemietet.

01:03:14.720 --> 01:03:16.840
Ja. Hübsch. Das ist jedes Mal

01:03:16.840 --> 01:03:18.700
anders, und das ist auch so ein bisschen der Reiz da dran.

01:03:18.700 --> 01:03:20.880
Warst du da? Ich war letztens, in Heidelberg

01:03:20.880 --> 01:03:22.700
war ich da zum ersten Mal. Ja? War,

01:03:22.700 --> 01:03:24.400
war sehr angenehm, war eben

01:03:24.400 --> 01:03:26.760
hinter dem, vor dem studentischen Hintergrund

01:03:26.760 --> 01:03:28.460
Heidelbergs, äh, auch ganz nett.

01:03:28.460 --> 01:03:30.840
Nächstes Jahr in Kopenhagen werde ich

01:03:30.840 --> 01:03:32.240
wohl nicht dazu kommen können, aber

01:03:32.240 --> 01:03:34.840
ich war schon mal in Kopenhagen, das ist auch sehr schön.

01:03:34.840 --> 01:03:36.940
Und ich

01:03:36.940 --> 01:03:38.900
kann es eigentlich jedem nur empfehlen, und jede DjangoCon Europe

01:03:38.900 --> 01:03:40.560
ist so ein bisschen anders, weil die eben

01:03:40.560 --> 01:03:42.520
von Leuten

01:03:42.520 --> 01:03:44.700
aus dieser Gegend, ähm,

01:03:44.720 --> 01:03:46.580
organisiert wird, die vorher vielleicht noch nie

01:03:46.580 --> 01:03:48.600
so eine Konferenz organisiert haben. Also auf der nächsten Insel

01:03:48.600 --> 01:03:50.440
schaue ich wahrscheinlich auch mal vorbei, oder? Ja.

01:03:50.440 --> 01:03:52.520
Es lohnt sich auf jeden Fall.

01:03:52.520 --> 01:03:54.640
Ja. Es ist super, da die Leute

01:03:54.640 --> 01:03:56.660
kennenzulernen, und man hat auch

01:03:56.660 --> 01:03:58.480
Kontakt da mit den, mit den

01:03:58.480 --> 01:04:00.380
Core-Entwicklern, also mit den Leuten, die sich

01:04:00.380 --> 01:04:02.580
tagtäglich damit beschäftigen, und das ist natürlich super.

01:04:02.580 --> 01:04:04.580
Und gerade jetzt bei

01:04:04.580 --> 01:04:06.620
dem Janos-Projekt, ähm, ich hab da

01:04:06.620 --> 01:04:08.500
auch ein paar Leute kennengelernt, und hab dann auch

01:04:08.500 --> 01:04:09.480
direkt was mit denen zusammen

01:04:09.480 --> 01:04:12.420
angefangen zu bearbeiten.

01:04:12.420 --> 01:04:14.580
Oh, ja, das gibt ja auf jeden Fall schon was.

01:04:14.720 --> 01:04:16.120
Nicht gut. Ja.

01:04:16.120 --> 01:04:18.840
Ja, ansonsten,

01:04:18.840 --> 01:04:20.340
ich weiß gar nicht, äh,

01:04:20.340 --> 01:04:22.680
inwiefern

01:04:22.680 --> 01:04:24.720
das da mit reingreift,

01:04:24.720 --> 01:04:26.440
äh, was halt auch interessant wäre,

01:04:26.440 --> 01:04:28.800
äh, es gibt ja in Python jetzt so eine,

01:04:28.800 --> 01:04:29.820
ähm,

01:04:29.820 --> 01:04:32.440
äh, ziemlich schicke Syntax für

01:04:32.440 --> 01:04:35.000
AsyncIO, und, ähm,

01:04:35.000 --> 01:04:36.680
was eigentlich ja schon immer toll

01:04:36.680 --> 01:04:38.680
gewesen wäre, aber nie so richtig geklappt hat, war,

01:04:38.680 --> 01:04:40.700
äh, dass man diese Asynchronizität,

01:04:40.700 --> 01:04:42.480
die man nach draußen hat, mit den

01:04:42.480 --> 01:04:44.700
Requests, der Prequests,

01:04:44.720 --> 01:04:46.260
die halt reinkommen, dass man die halt weiterreicht,

01:04:46.260 --> 01:04:48.520
sondern, äh,

01:04:48.520 --> 01:04:50.600
zum Beispiel an, an, an Datenbanken

01:04:50.600 --> 01:04:52.540
oder irgendwelche APIs, die man fragt, ähm,

01:04:52.540 --> 01:04:54.380
so momentan ist es halt so, wenn man jetzt,

01:04:54.380 --> 01:04:56.400
weiß ich nicht, äh, um eine Seite zu bauen, zehn,

01:04:56.400 --> 01:04:58.540
zehn Statements irgendwie an die Datenbank schicken

01:04:58.540 --> 01:05:00.680
muss, dann werden die halt da, äh,

01:05:00.680 --> 01:05:02.840
seriell hingeschickt und, äh, abgearbeitet

01:05:02.840 --> 01:05:04.580
und dann, wenn die fertig sind, dann zeigt man

01:05:04.580 --> 01:05:06.620
die Seite an, was ein bisschen doof ist,

01:05:06.620 --> 01:05:08.540
weil das halt jedes Mal die Latenz,

01:05:08.540 --> 01:05:10.520
also die halt durchaus ein paar, oder auch

01:05:10.520 --> 01:05:12.460
vielleicht mal ein paar zehn Millisekunden sein kann pro

01:05:12.460 --> 01:05:14.580
Statement, das addiert sich halt alles auf,

01:05:14.680 --> 01:05:16.660
und dann am Schluss, äh, äh, quasi

01:05:16.660 --> 01:05:18.700
äh, hat man halt, äh,

01:05:18.700 --> 01:05:20.700
ist, ist die Zeit, die man

01:05:20.700 --> 01:05:22.720
braucht, um halt quasi Content auszuliefern,

01:05:22.720 --> 01:05:24.520
das ist ja eine wichtige Zeit, weil erst

01:05:24.520 --> 01:05:26.380
ab da ja alles losgeht, auch wenn man hinterher,

01:05:26.380 --> 01:05:28.620
äh, äh, Bilder parallel holen kann

01:05:28.620 --> 01:05:30.540
oder so, äh, das geht aber nur,

01:05:30.540 --> 01:05:32.480
wenn man weiß, wie die Build-URLs sind, das heißt,

01:05:32.480 --> 01:05:34.680
solange nicht irgendwie ein, irgendwie Content

01:05:34.680 --> 01:05:36.560
vom, vom, vom Applikations-Server gekommen ist,

01:05:36.560 --> 01:05:37.780
kann gar, passiert nichts weiter.

01:05:37.780 --> 01:05:38.920
Holst du noch mal einen Kaffee?

01:05:38.920 --> 01:05:42.200
Genau, und, äh,

01:05:42.200 --> 01:05:44.640
dummerweise sind halt in diesem, diese

01:05:44.640 --> 01:05:46.560
kritischen Zeitbereich halt, äh,

01:05:46.560 --> 01:05:48.260
äh, solche Dinge wie halt, dass

01:05:48.260 --> 01:05:50.580
alle, äh, SQL-Statements

01:05:50.580 --> 01:05:52.360
und Seriele geholt werden müssen, und das ist natürlich eigentlich

01:05:52.360 --> 01:05:54.360
ziemlich blöd, und schöner wär's ja, wenn man irgendwie

01:05:54.360 --> 01:05:56.340
alle gleichzeitig abfeuern würde, und dann

01:05:56.340 --> 01:05:58.200
würde man dann die Halter irgendwie so einsammeln,

01:05:58.200 --> 01:06:00.180
und dann wäre, äh, sozusagen das,

01:06:00.180 --> 01:06:02.480
ja, längste Statement, äh, irgendwie

01:06:02.480 --> 01:06:04.280
vielleicht das, was darüber entscheidet, wie lange es dauert,

01:06:04.280 --> 01:06:06.460
aber, äh, man müsste nicht, äh,

01:06:06.460 --> 01:06:08.480
irgendwie, äh, äh,

01:06:08.480 --> 01:06:10.240
äh, quasi auf jedes Einzelne warten,

01:06:10.240 --> 01:06:12.280
das könnte die Zeit deutlich verringern,

01:06:12.280 --> 01:06:13.780
und, ähm,

01:06:14.600 --> 01:06:16.520
ja, ähm, im Grunde könnte man da auch

01:06:16.520 --> 01:06:18.340
eine ähnliche Schnittstelle verwenden wie für, für,

01:06:18.340 --> 01:06:20.260
für, äh, äh,

01:06:20.260 --> 01:06:22.420
für Asynchro-Initial, äh, äh, für,

01:06:22.420 --> 01:06:24.700
für Asynchro-Geschichten nach vorne raus,

01:06:24.700 --> 01:06:26.260
und, ähm,

01:06:26.260 --> 01:06:28.500
da weiß ich gar nicht, ob's, äh, und bisher war das

01:06:28.500 --> 01:06:30.440
halt immer problematisch, weil man kann's halt irgendwie mit

01:06:30.440 --> 01:06:32.440
den vielen unterschiedlichen Geschichten, die es in Python

01:06:32.440 --> 01:06:34.480
da gibt, machen, man kann Threads nehmen, man kann halt

01:06:34.480 --> 01:06:36.560
irgendwie Twisted nehmen

01:06:36.560 --> 01:06:37.980
oder so, aber...

01:06:37.980 --> 01:06:39.280
Frido hab ich letztens kennengelernt.

01:06:39.280 --> 01:06:41.580
Ja, das ist auch, das ist voll super, aber, ähm,

01:06:41.580 --> 01:06:44.560
äh, ja, äh,

01:06:44.560 --> 01:06:46.440
äh, im Grunde, jetzt hätte man halt die Möglichkeit zu sagen,

01:06:46.440 --> 01:06:48.480
okay, da wir jetzt dann eine Syntax für haben,

01:06:48.480 --> 01:06:50.320
dann machen wir das einfach so, und das wäre

01:06:50.320 --> 01:06:52.420
natürlich auch eine interessante Geschichte, ich weiß auch, dass Flask,

01:06:52.420 --> 01:06:54.640
äh, irgendwie, dass da zumindest

01:06:54.640 --> 01:06:56.580
ein Projekt gibt, das versucht, Flask dahin umzubauen,

01:06:56.580 --> 01:06:58.240
dass das halt alles, also,

01:06:58.240 --> 01:07:00.500
IO-kompatibel sozusagen ist,

01:07:00.500 --> 01:07:02.460
und, äh, bei Django weiß ich jetzt gar nicht

01:07:02.460 --> 01:07:04.300
wieder, wie weit das ist, oder ob's da überhaupt Bestrebungen gibt,

01:07:04.300 --> 01:07:06.540
ähm, aber sowas wäre natürlich

01:07:06.540 --> 01:07:08.620
auch sehr nett, keine Ahnung, ja.

01:07:08.620 --> 01:07:10.120
Ja, wüsste ich jetzt auch nicht,

01:07:10.120 --> 01:07:12.180
aber es hört sich so an, als ob du mal ein, äh,

01:07:12.180 --> 01:07:14.360
Enhancement-Proposal einlassen solltest.

01:07:14.520 --> 01:07:16.320
Haha, und vielleicht

01:07:16.320 --> 01:07:18.340
ein Fellowship beantragen, das wäre auch was.

01:07:18.340 --> 01:07:20.660
Ja.

01:07:20.660 --> 01:07:22.780
Ja.

01:07:22.780 --> 01:07:26.320
Tja, tja, tja, ist wahrscheinlich auch

01:07:26.320 --> 01:07:27.480
nicht so einfach, muss man sagen.

01:07:27.480 --> 01:07:30.280
Ja gut, aber wenn's einfach wäre,

01:07:30.280 --> 01:07:31.300
dann wäre es auch langweilig.

01:07:31.300 --> 01:07:32.780
Das hätte auch schon wahrscheinlich jemand gemacht, ja.

01:07:32.780 --> 01:07:35.000
Ja, ja.

01:07:35.000 --> 01:07:37.300
Wir machen das nicht, weil es einfach ist, sondern wir machen das,

01:07:37.300 --> 01:07:38.040
weil es schwer ist.

01:07:38.040 --> 01:07:38.380
Ja.

01:07:38.380 --> 01:07:42.080
Ja.

01:07:42.080 --> 01:07:44.500
Ja.

01:07:44.500 --> 01:07:44.500
Ja.

01:07:44.500 --> 01:07:44.520
Ja.

01:07:44.520 --> 01:07:44.580
Ja.

01:07:44.580 --> 01:07:46.360
Was gibt's noch so an

01:07:46.360 --> 01:07:48.680
interessanten Django-Themen?

01:07:48.680 --> 01:07:50.340
Ach ja, vielleicht sollte man das auch noch erwähnen.

01:07:50.340 --> 01:07:53.040
Genau, ähm,

01:07:53.040 --> 01:07:56.540
die Art, wie dieser Podcast

01:07:56.540 --> 01:07:58.080
publiziert wird, also, genau,

01:07:58.080 --> 01:07:59.980
natürlich auch gedacht, so, okay,

01:07:59.980 --> 01:08:02.660
äh, wenn ich, wenn ich da jetzt schon

01:08:02.660 --> 01:08:04.240
irgendwie Django, äh,

01:08:04.240 --> 01:08:06.440
entwickle, dann ist es ja eigentlich, wäre das ja

01:08:06.440 --> 01:08:08.360
jetzt eigentlich schon ziemlich beschämend,

01:08:08.360 --> 01:08:10.120
irgendwie WordPress zu nehmen, um

01:08:10.120 --> 01:08:11.600
Podcasts zu veröffentlichen.

01:08:11.600 --> 01:08:14.500
Und, äh, dann hab ich halt meinen, meinen,

01:08:14.500 --> 01:08:16.880
äh, mein kleines Blog-Modul genommen, das, äh,

01:08:16.880 --> 01:08:18.880
das ich mal irgendwann geschrieben hab und, äh,

01:08:18.880 --> 01:08:21.060
da jetzt auch so Podcast-Funktionalität, äh,

01:08:21.060 --> 01:08:22.820
äh, reingedingelt.

01:08:22.820 --> 01:08:24.420
Und, ähm,

01:08:24.420 --> 01:08:26.660
äh, mal gucken, wie weit das, äh, wie weit das trägt.

01:08:26.660 --> 01:08:28.920
Äh, ähm, aber, äh,

01:08:28.920 --> 01:08:30.660
das war alles gar nicht so schwierig, ja.

01:08:30.660 --> 01:08:32.600
Also, zum Beispiel, wo einem Django da schon

01:08:32.600 --> 01:08:34.500
sehr hilft bei, ist, dass, äh,

01:08:34.500 --> 01:08:36.360
es gibt so ein, äh, äh,

01:08:36.360 --> 01:08:38.460
Feed, ähm,

01:08:38.460 --> 01:08:40.960
Syndication-Feed, äh,

01:08:40.960 --> 01:08:42.560
App, also Django selbst enthält

01:08:42.560 --> 01:08:44.200
einige Apps, unter anderem halt,

01:08:44.500 --> 01:08:46.300
äh, Admin oder, oder Contrib,

01:08:46.300 --> 01:08:48.280
äh, äh, also Authentication

01:08:48.280 --> 01:08:50.300
und so Zeugs. Und halt

01:08:50.300 --> 01:08:52.260
auch ein, ein Feed-Syndication-Framework, mit dem man halt

01:08:52.260 --> 01:08:54.440
Feeds generieren kann. Und das ist natürlich total hilfreich,

01:08:54.440 --> 01:08:56.120
äh, wenn man das halt nicht selber machen muss,

01:08:56.120 --> 01:08:58.500
weil das ist irgendwie ziemlich, äh,

01:08:58.500 --> 01:08:59.260
ziemlich fies.

01:08:59.260 --> 01:09:02.100
Und, ähm, ja, das,

01:09:02.100 --> 01:09:03.940
äh, das, das war eigentlich sehr angenehm.

01:09:03.940 --> 01:09:06.240
Was natürlich irgendwie, das, was immer noch ein Problem

01:09:06.240 --> 01:09:08.160
ist, ist, dass man dann halt irgendwie so

01:09:08.160 --> 01:09:10.220
diverse Feinheiten berücksichtigen muss. Man muss halt gucken,

01:09:10.220 --> 01:09:12.280
oh, äh, wenn ich jetzt,

01:09:12.280 --> 01:09:14.320
äh, das auf dem eigentlich

01:09:14.320 --> 01:09:16.060
einzig relevanten, äh,

01:09:16.060 --> 01:09:18.140
äh, Katalog,

01:09:18.140 --> 01:09:20.160
im einzig relevanten Katalog veröffentlichen will,

01:09:20.160 --> 01:09:22.080
das ist halt der iTunes, äh, Podcast,

01:09:22.080 --> 01:09:24.180
das iTunes-Podcast-Verzeichnis,

01:09:24.180 --> 01:09:26.180
dann gibt es halt noch so ein paar

01:09:26.180 --> 01:09:28.400
Spezial-Äh, Attribute, die halt iTunes

01:09:28.400 --> 01:09:30.240
haben will, und die müssen halt richtig gesetzt

01:09:30.240 --> 01:09:32.420
sein, und das will halt die Bilder in einem bestimmten Format

01:09:32.420 --> 01:09:34.560
haben, oder das, das Artwork zu dem Podcast.

01:09:34.560 --> 01:09:36.200
Und, ähm,

01:09:36.200 --> 01:09:38.240
ja, Kategorien

01:09:38.240 --> 01:09:40.160
müssen ein bestimmtes Format haben und so Dinge.

01:09:40.160 --> 01:09:42.260
Ähm, da hab ich jetzt nochmal so

01:09:42.260 --> 01:09:43.720
ein bisschen knabbern müssen, aber so,

01:09:44.140 --> 01:09:46.180
einfach nur, dass man dann, äh, RSS

01:09:46.180 --> 01:09:48.160
oder Atom-Feed hat, wo die, wo die

01:09:48.160 --> 01:09:49.820
Episoden, äh, quasi,

01:09:49.820 --> 01:09:52.200
ähm, drinstehen, das war

01:09:52.200 --> 01:09:54.340
relativ einfach, ne, das war auch sowieso bei dem,

01:09:54.340 --> 01:09:56.200
bei dem Blog-Teil war das halt

01:09:56.200 --> 01:09:57.900
sehr simpel, das waren halt irgendwie, keine Ahnung,

01:09:57.900 --> 01:10:00.340
15 Zeilen Code oder so, und dann gab's ein RSS-Feed

01:10:00.340 --> 01:10:02.520
zu den, zu den, äh, Blog-Posts.

01:10:02.520 --> 01:10:04.460
Das heißt, wenn ihr euren eigenen Podcast

01:10:04.460 --> 01:10:06.000
machen könnt, könnt ihr jetzt demnächst, äh, Jochen,

01:10:06.000 --> 01:10:08.200
das Modul dafür verwenden. Ja, kann man

01:10:08.200 --> 01:10:10.160
tatsächlich, äh, so, sag mal so, das ist halt nicht,

01:10:10.160 --> 01:10:12.200
äh, äh, gut dokumentiert und, ähm,

01:10:12.200 --> 01:10:14.020
ähm, wahrscheinlich alles,

01:10:14.020 --> 01:10:15.780
irgendwie noch ein bisschen experimentell, aber so,

01:10:15.780 --> 01:10:17.620
ja, benutzen kann man das

01:10:17.620 --> 01:10:20.020
schon, wenn man, äh,

01:10:20.020 --> 01:10:22.280
ein bisschen furchtlos ist.

01:10:22.280 --> 01:10:24.780
Und, und,

01:10:24.780 --> 01:10:26.260
ein Bastler, ein Bastler.

01:10:26.260 --> 01:10:28.020
Ja, das ist ein bisschen was für Bastler, muss man schon

01:10:28.020 --> 01:10:28.420
sagen, ja.

01:10:28.420 --> 01:10:31.980
Ja, genau, und das ist natürlich dann auch

01:10:31.980 --> 01:10:34.100
eine gute Gelegenheit, um immer wieder was über, äh,

01:10:34.100 --> 01:10:35.980
Django zu erzählen, wenn da, äh, irgendwelche Probleme

01:10:35.980 --> 01:10:38.080
aufgetaucht sein sollten oder, äh, irgendwelche schönen

01:10:38.080 --> 01:10:40.280
eleganten Lösungen möglich werden.

01:10:40.280 --> 01:10:41.360
Ja.

01:10:41.360 --> 01:10:43.240
Also ich, äh, ja,

01:10:43.900 --> 01:10:44.320
ähm,

01:10:44.320 --> 01:10:47.720
ich bin da, ich bin da eigentlich durchaus angetan. Also auch

01:10:47.720 --> 01:10:49.440
die, die Erfahrungen irgendwie mit dem, mit dem

01:10:49.440 --> 01:10:51.540
Blogschreiben in Django, das war auch eigentlich alles sehr,

01:10:51.540 --> 01:10:52.940
sehr nett. Äh,

01:10:52.940 --> 01:10:55.860
ähm, ja.

01:10:55.860 --> 01:10:57.960
Man kann, man kommt, aber was auch

01:10:57.960 --> 01:10:59.740
interessant ist, ist halt, äh,

01:10:59.740 --> 01:11:02.020
ist es auf der einen Seite halt sehr, sehr viel

01:11:02.020 --> 01:11:03.620
da schon, was man verwenden kann.

01:11:03.620 --> 01:11:05.660
Wenn man jetzt aber tiefer bohrt, dann kommt man auch immer

01:11:05.660 --> 01:11:07.840
relativ schnell an, an, an

01:11:07.840 --> 01:11:09.540
Stellen, wo man sich sagt so, hä,

01:11:09.540 --> 01:11:11.960
da gibt's noch nichts, das hat noch nie jemand irgendwie.

01:11:11.960 --> 01:11:13.780
Und das ist halt schon so, äh,

01:11:13.780 --> 01:11:15.480
äh, also zum Beispiel bei den Bildern

01:11:15.480 --> 01:11:17.580
wieder, also, vielleicht gibt's da auch

01:11:17.580 --> 01:11:19.560
was, oder ich weiß es, und ich weiß es einfach noch nicht, das kann natürlich auch

01:11:19.560 --> 01:11:21.200
sein, aber, ähm,

01:11:21.200 --> 01:11:22.200
äh,

01:11:22.200 --> 01:11:25.360
dieses Django-Image-Kit löst in gewisser Weise

01:11:25.360 --> 01:11:27.480
ein Problem, halt dieses, äh, vorberechnen

01:11:27.480 --> 01:11:29.620
der, der, äh, unterschiedlichen Bildgrößen.

01:11:29.620 --> 01:11:31.520
Aber wie es das tut, ist halt nicht

01:11:31.520 --> 01:11:33.620
so richtig toll. Und da gibt's dann wieder, soweit ich weiß,

01:11:33.620 --> 01:11:35.780
nix. Also, äh, es gibt da ja

01:11:35.780 --> 01:11:37.280
äh, tolle Möglichkeiten. Es gibt so,

01:11:37.280 --> 01:11:38.680
äh, ähm,

01:11:38.680 --> 01:11:41.820
LibJPG-Turbo oder, äh,

01:11:41.820 --> 01:11:43.660
Mods.jpg, die halt

01:11:43.660 --> 01:11:45.480
ungefähr nochmal so mindestens

01:11:45.480 --> 01:11:47.500
ein Drittel, äh, die Bilder

01:11:47.500 --> 01:11:49.460
kleiner machen bei gleicher Qualität oder auch

01:11:49.460 --> 01:11:51.440
dafür sorgen, dass, wenn ein Bild angezeigt wird

01:11:51.440 --> 01:11:53.380
und das geladen wird, dann werden halt zuerst grobe

01:11:53.380 --> 01:11:55.340
Geschichten angezeigt und dann halt feinere

01:11:55.340 --> 01:11:57.220
Sachen, so, äh, das kann man mit

01:11:57.220 --> 01:11:59.540
JPEG halt irgendwie machen. Und,

01:11:59.540 --> 01:12:01.740
ähm, ja, ähm,

01:12:01.740 --> 01:12:05.400
defaultmäßig wird aber Pillow verwendet. Pillow

01:12:05.400 --> 01:12:07.480
verwendet irgendwie unten drunter ImageMagic oder so.

01:12:07.480 --> 01:12:09.300
Und das ist alles

01:12:09.300 --> 01:12:11.380
nicht richtig optimal. Also, da kann man zwar angeben,

01:12:11.380 --> 01:12:13.180
wie hoch die Qualität sein soll,

01:12:13.540 --> 01:12:15.540
aber, äh, die Bilder sind halt

01:12:15.540 --> 01:12:17.280
nicht so klein, wie sie sein könnten, was, äh,

01:12:17.280 --> 01:12:19.440
für die meisten Leute vielleicht kein, kein großes Problem

01:12:19.440 --> 01:12:21.400
sein wird, aber wenn man jetzt irgendwie ein paar tausend Bilder

01:12:21.400 --> 01:12:23.040
hat, dann macht das durchaus was aus.

01:12:23.040 --> 01:12:25.360
Oder ich hab mal so ein, ich hab, ich hab auch einen,

01:12:25.360 --> 01:12:27.320
einen Block mit relativ vielen Bildern drin

01:12:27.320 --> 01:12:29.180
und war dann irgendwie, dachte ich,

01:12:29.180 --> 01:12:31.340
dann hörte ich immer so Klagen von Leuten, die sich

01:12:31.340 --> 01:12:33.360
das angeguckt haben. Äh, das dauert

01:12:33.360 --> 01:12:35.300
immer so lange. Ich hab das gar nicht so gemerkt. Gut,

01:12:35.300 --> 01:12:37.320
ich hab hier irgendwie so 100 MBit, was jetzt auch nicht so furchtbar

01:12:37.320 --> 01:12:39.000
schnell ist, aber da, da ging das eigentlich ganz flüssig.

01:12:39.000 --> 01:12:41.280
Und dann hab ich halt immer so in den,

01:12:41.280 --> 01:12:43.380
äh, äh, die LibJPG-Truber

01:12:43.380 --> 01:12:45.280
geguckt und so, und gesehen so, oh,

01:12:45.280 --> 01:12:47.300
äh, so die ersten fünf Artikel

01:12:47.300 --> 01:12:49.080
holen mit vielen Bildern drin, das sind halt so

01:12:49.080 --> 01:12:51.220
200 MB. Wenn man sich das auf dem Handy

01:12:51.220 --> 01:12:53.200
auf Edge anguckt, dann kann ich mir durchaus vorstellen,

01:12:53.200 --> 01:12:54.520
dass das ein bisschen langsam ist.

01:12:54.520 --> 01:12:55.740
Ähm,

01:12:55.740 --> 01:12:59.320
ja, äh, und

01:12:59.320 --> 01:13:01.160
da, da wär's schon schön, wenn man da halt

01:13:01.160 --> 01:13:03.160
tatsächlich, äh, quasi default-mäßig

01:13:03.160 --> 01:13:05.500
äh, auch irgendwie, äh,

01:13:05.500 --> 01:13:07.460
gute Ergebnisse bekommt, aber das ist halt, äh,

01:13:07.460 --> 01:13:09.320
irgendwie, äh, momentan jedenfalls

01:13:09.320 --> 01:13:11.180
noch nicht so. Und da wär's natürlich auch interessant, wenn da,

01:13:11.180 --> 01:13:13.260
äh, also man, man, man,

01:13:13.260 --> 01:13:15.080
man stößt relativ schnell auf, auf Ecken, wo man

01:13:15.080 --> 01:13:17.120
eigentlich was verbessern könnte, wenn man dann mal Zeit hat.

01:13:17.120 --> 01:13:18.100
Und, ähm, ja.

01:13:18.100 --> 01:13:21.080
Tja. Johannes, wo ist dein

01:13:21.080 --> 01:13:21.880
größter Struggle?

01:13:21.880 --> 01:13:24.980
Das, äh,

01:13:24.980 --> 01:13:27.240
das, äh, das ist wie beim Johannes, das sind die Details.

01:13:27.240 --> 01:13:29.040
Ähm, man

01:13:29.040 --> 01:13:30.980
kommt sehr schnell so

01:13:30.980 --> 01:13:33.160
zu den 95 Prozent des Projektes,

01:13:33.160 --> 01:13:34.980
die eigentlich so smooth

01:13:34.980 --> 01:13:37.020
sailing sind, die

01:13:37.020 --> 01:13:38.640
man am ersten Tag durchkriegt.

01:13:38.640 --> 01:13:40.980
Und an den letzten 5 Prozent arbeiten wir dann

01:13:40.980 --> 01:13:42.880
die nächsten zwei Jahre. Also es ist, äh,

01:13:43.140 --> 01:13:45.320
äh, es, es

01:13:45.320 --> 01:13:47.160
ist schwierig zu sagen, welcher Bereich

01:13:47.160 --> 01:13:49.040
am schwierigsten ist, weil es eben oft

01:13:49.040 --> 01:13:51.200
an diesen ganz kleinen Details hängen bleibt.

01:13:51.200 --> 01:13:53.260
Hast du da was

01:13:53.260 --> 01:13:55.000
selber für gebaut, was du irgendwo

01:13:55.000 --> 01:13:56.420
mal offengestellt hast?

01:13:56.420 --> 01:13:59.060
Es gibt so ein paar Sachen, die ich, äh, die ich mal

01:13:59.060 --> 01:14:00.660
gebaut hab und offengestellt hab. Oh, erzähl mal.

01:14:00.660 --> 01:14:02.980
Es, äh, die sind alle schon etwas

01:14:02.980 --> 01:14:03.380
älter.

01:14:03.380 --> 01:14:07.200
Ähm, die meisten Sachen,

01:14:07.200 --> 01:14:09.040
die ich in den letzten Jahren gemacht hab, waren eben für

01:14:09.040 --> 01:14:11.140
Kunden. Und dann ist es schwierig, äh,

01:14:11.140 --> 01:14:13.120
denen zu sagen, hier, ich hab,

01:14:13.120 --> 01:14:14.920
äh, so und so viele Stunden dafür abgerechnet,

01:14:14.920 --> 01:14:17.080
wie wär's, wenn wir das jetzt der Welt

01:14:17.080 --> 01:14:18.120
umsonst geben.

01:14:18.120 --> 01:14:21.120
Deshalb sind die meisten Sachen, die ich in den letzten Jahren gemacht hab,

01:14:21.120 --> 01:14:23.060
eben hinter, hinter Gittern. Die müssen leider

01:14:23.060 --> 01:14:23.740
hinter Gittern bleiben.

01:14:23.740 --> 01:14:27.080
Eine Sache, die ich

01:14:27.080 --> 01:14:29.180
vor Jahren mal in Python gemacht habe, äh,

01:14:29.180 --> 01:14:31.020
ist eine Bibliothek für Kommandozeilen.

01:14:31.020 --> 01:14:33.120
Aufrufe. Hat jetzt überhaupt gar nichts mit Django

01:14:33.120 --> 01:14:34.880
zu tun. Ähm.

01:14:34.880 --> 01:14:36.940
Verlinken wir natürlich auch in den Show noch.

01:14:36.940 --> 01:14:38.940
Natürlich. Kommandier heißt die Bibliothek. Beste

01:14:38.940 --> 01:14:40.440
Kommandozeilen-Bibliothek, die es gibt.

01:14:40.440 --> 01:14:41.800
Ähm.

01:14:43.000 --> 01:14:45.020
Weil es einfach ein Problem war, was mich

01:14:45.020 --> 01:14:47.040
gestört hat. Ich wollte gerne einfache

01:14:47.040 --> 01:14:49.080
Programme mit der Kommandozeile ansprechen.

01:14:49.080 --> 01:14:51.280
Oder eine ansprechende Kommandozeile

01:14:51.280 --> 01:14:53.080
anbieten können. Und

01:14:53.080 --> 01:14:54.920
die Lösungen, die es gab, haben mich alle nicht überzeugt.

01:14:54.920 --> 01:14:55.960
Also hab ich meine eigene gemacht.

01:14:55.960 --> 01:14:58.900
Das,

01:14:58.900 --> 01:15:00.940
das ist so ein bisschen das, was man, was

01:15:00.940 --> 01:15:02.960
von einem erwartet wird. Und was man natürlich dann

01:15:02.960 --> 01:15:04.780
auch gerne macht. Weil,

01:15:04.780 --> 01:15:07.060
weil man ja nicht der Einzige ist, der dieses Problem

01:15:07.060 --> 01:15:09.060
hat. Vor Jahren hat

01:15:09.060 --> 01:15:10.840
der Python Package Index immer noch

01:15:10.840 --> 01:15:12.640
Downloadzahlen angezeigt. Und

01:15:12.880 --> 01:15:15.160
die sahen eigentlich schon immer ganz

01:15:15.160 --> 01:15:17.020
gut aus für meine kleine Bibliothek.

01:15:17.020 --> 01:15:18.400
Inzwischen zeigen sie die nicht mehr an.

01:15:18.400 --> 01:15:21.040
Ähm. Ich weiß also nicht, wie viele Leute

01:15:21.040 --> 01:15:23.180
das verwenden oder nicht. Ähm.

01:15:23.180 --> 01:15:25.340
Aber so ein kleines bisschen Validierung

01:15:25.340 --> 01:15:27.280
kriegt man da schon von der Gemeinde

01:15:27.280 --> 01:15:28.840
zurück. Okay. Klingt

01:15:28.840 --> 01:15:30.520
spannend. Sehr schön nutzlich.

01:15:30.520 --> 01:15:32.000
Ja.

01:15:32.000 --> 01:15:34.780
Da haben wir doch noch ein bisschen

01:15:34.780 --> 01:15:36.760
Streichwerbung gemacht für die Open Source Pakete hier.

01:15:36.760 --> 01:15:37.780
Ich bin begeistert.

01:15:37.780 --> 01:15:40.760
Ja, für kostenlose Dinge Werbung machen.

01:15:40.760 --> 01:15:42.800
Ist, äh, nicht so schlimm.

01:15:42.800 --> 01:15:43.980
Durchaus erlaubt.

01:15:43.980 --> 01:15:46.240
Äh, genau.

01:15:46.240 --> 01:15:48.580
Was fällt euch denn noch zu Django ein? Haben wir noch irgendwas

01:15:48.580 --> 01:15:50.680
bei den Themen offen? Was vergessen? Irgendwie was von

01:15:50.680 --> 01:15:52.640
Tipps und Tricks, die gerade noch so

01:15:52.640 --> 01:15:54.480
unter den Fingern brennen, die ihr gerade noch

01:15:54.480 --> 01:15:56.520
mitbekommen habt? Ah, so viele.

01:15:56.520 --> 01:15:58.880
Es gibt so viele Sachen. Wir könnten, glaube ich, tagelang

01:15:58.880 --> 01:16:00.800
über Django und über

01:16:00.800 --> 01:16:02.620
die verschiedenen Bauteile reden. Und

01:16:02.620 --> 01:16:04.740
was jetzt, äh, besser ist und

01:16:04.740 --> 01:16:06.820
was schlechter ist, dass es mir echt schwerfällt

01:16:06.820 --> 01:16:08.520
eine Auswahl zu treffen. Ja, doch.

01:16:08.520 --> 01:16:10.120
Vielleicht eine Geschichte, die ich, äh,

01:16:10.120 --> 01:16:12.680
im Test sind ja eine relativ wichtige

01:16:12.680 --> 01:16:14.680
Geschichte und, ähm,

01:16:14.680 --> 01:16:16.220
äh...

01:16:16.220 --> 01:16:17.380
Da ist jemand wach geworden. Ah, ja.

01:16:17.380 --> 01:16:19.340
Und wütend.

01:16:19.340 --> 01:16:20.700
Naja.

01:16:20.700 --> 01:16:24.360
Hoffen wir mal, dass ich das recht...

01:16:24.360 --> 01:16:26.920
Ja, das ist immer sehr

01:16:26.920 --> 01:16:28.640
schmerzhaft. Er kommt tatsächlich direkt

01:16:28.640 --> 01:16:29.460
kreishoch.

01:16:29.460 --> 01:16:32.620
Ja, genau. Und, äh, da gibt's,

01:16:32.620 --> 01:16:34.480
äh, also ich bin da,

01:16:34.480 --> 01:16:36.600
ich bin ein Fan von PyTest

01:16:36.600 --> 01:16:38.560
eher als von dem eingebauten

01:16:38.560 --> 01:16:40.680
Unitest-Framework in Python und, ähm,

01:16:40.680 --> 01:16:42.560
äh, da gibt's dann

01:16:42.560 --> 01:16:45.000
auch diverse Hilfspakete,

01:16:45.000 --> 01:16:46.420
die einem das erleichtern, äh,

01:16:46.420 --> 01:16:48.700
irgendwie, äh, zum Beispiel,

01:16:48.700 --> 01:16:50.420
ja, PyTest-Django

01:16:50.420 --> 01:16:52.740
oder PyTest-Sugar und, äh,

01:16:52.740 --> 01:16:54.480
und, und, und diverse

01:16:54.480 --> 01:16:56.580
andere. Und, und gibt's noch Dinge, die einem

01:16:56.580 --> 01:16:58.520
irgendwie so es erleichtern, ne, so

01:16:58.520 --> 01:17:00.720
ein bisschen Fixtures und Daten

01:17:00.720 --> 01:17:02.340
zu generieren, so Factory-Boy

01:17:02.340 --> 01:17:03.400
und, ähm,

01:17:03.400 --> 01:17:06.600
äh, weiß ich gar nicht, was man

01:17:06.600 --> 01:17:08.660
da, ob man das wirklich alles empfehlen sollte,

01:17:08.660 --> 01:17:09.460
was ich da so verwende.

01:17:09.460 --> 01:17:11.540
Ähm,

01:17:12.440 --> 01:17:14.800
und, äh, äh, genau, das ist eigentlich

01:17:14.800 --> 01:17:16.700
auch sehr, sehr praktisch, ne, also da gibt's halt

01:17:16.700 --> 01:17:18.740
dann schon eine existierende Integration, da muss man

01:17:18.740 --> 01:17:20.580
sich gar nicht so, äh, ähm,

01:17:20.580 --> 01:17:23.040
selbst rumkümmern und, ähm,

01:17:23.040 --> 01:17:24.680
das, das

01:17:24.680 --> 01:17:26.660
funktioniert eigentlich echt, äh, echt ganz toll.

01:17:26.660 --> 01:17:28.040
Also, ähm,

01:17:28.040 --> 01:17:30.600
ich weiß nicht, ich glaub, du machst eher Unitest

01:17:30.600 --> 01:17:32.100
oder das klassische...

01:17:32.100 --> 01:17:34.320
Ja, ich benutze eher die in Django eingebauten,

01:17:34.320 --> 01:17:36.700
also die klassischen Unitests. Ich mag PyTest

01:17:36.700 --> 01:17:37.180
nicht so gerne.

01:17:37.180 --> 01:17:40.900
Aber, aber

01:17:40.900 --> 01:17:42.320
da gibt's noch Methodennamen mit

01:17:42.320 --> 01:17:44.500
CamelCase viel, viel...

01:17:44.500 --> 01:17:45.960
Ja, muss man ja nicht. Muss man nicht?

01:17:45.960 --> 01:17:48.300
Nee. Alles, was Test- heißt,

01:17:48.300 --> 01:17:50.320
ist ein Test und alles andere ist egal.

01:17:50.320 --> 01:17:51.760
Hm.

01:17:51.760 --> 01:17:53.960
Nee, das ist, das ist ganz normal.

01:17:53.960 --> 01:17:56.280
Dieser, dieser Testrunner ist nicht besonders gut.

01:17:56.280 --> 01:17:58.180
Ich benutze immer den Nose-Testrunner, aber das

01:17:58.180 --> 01:17:59.480
ist nur eine Kleinigkeit.

01:17:59.480 --> 01:18:02.160
Ja, aber, und man muss so Dinge machen wie, man muss

01:18:02.160 --> 01:18:04.140
sagen, äh, Assert Equal

01:18:04.140 --> 01:18:06.280
und da, da hat man doch auch wieder CamelCase irgendwie

01:18:06.280 --> 01:18:08.200
oder Assert... Ja, das stimmt,

01:18:08.200 --> 01:18:10.480
diese Assert-Methoden sind so ein bisschen seltsam.

01:18:10.480 --> 01:18:12.160
Aber... Ja, gut, ja.

01:18:12.200 --> 01:18:13.680
Das, das sind so Dinge, an die gewöhnt man sich

01:18:13.680 --> 01:18:16.100
mit der Zeit und dann erscheinen sie einem völlig

01:18:16.100 --> 01:18:18.340
undenkbar, dass es anders sein könnte.

01:18:18.340 --> 01:18:22.440
Und ich glaube auch,

01:18:22.440 --> 01:18:24.280
wir haben keine, kein grundsätzlichen,

01:18:24.280 --> 01:18:26.300
kein grundsätzliches Missverständnis zwischen

01:18:26.300 --> 01:18:26.540
uns.

01:18:26.540 --> 01:18:29.120
Man sollte testen bleiben.

01:18:29.120 --> 01:18:32.120
Natürlich, der Coverage ist

01:18:32.120 --> 01:18:33.060
hoch genug.

01:18:33.060 --> 01:18:36.360
Und ob die, ob die

01:18:36.360 --> 01:18:38.220
Assert-Methode jetzt Assert Equal heißt

01:18:38.220 --> 01:18:40.520
oder Assert Equals oder Assert-Equal

01:18:40.520 --> 01:18:41.680
oder was weiß ich, wie sie bei,

01:18:42.080 --> 01:18:43.400
bei PyTest heißen mag...

01:18:43.400 --> 01:18:44.480
Da ist es einfach nur Assert.

01:18:44.480 --> 01:18:47.980
Dann sagt man irgendwie, das eine gleiche als das andere oder so.

01:18:47.980 --> 01:18:50.160
Ja, das kannst du ja bei einem Unitest

01:18:50.160 --> 01:18:50.960
prinzipiell auch machen.

01:18:50.960 --> 01:18:53.620
Aber dann kannst du halt nicht unterscheiden zwischen

01:18:53.620 --> 01:18:56.040
du wolltest, dass da ein Fehler passiert oder du wolltest

01:18:56.040 --> 01:18:56.860
nicht, dass ein Fehler passiert.

01:18:56.860 --> 01:19:00.280
Aber das sind auch da wieder nur Detailthemen.

01:19:00.280 --> 01:19:01.660
Ob das jetzt so oder so

01:19:01.660 --> 01:19:03.140
ausschaut,

01:19:03.140 --> 01:19:05.300
ist, glaube ich, gar nicht so wichtig.

01:19:05.300 --> 01:19:08.340
Aber wir

01:19:08.340 --> 01:19:09.920
kehren wieder zurück zu diesem Thema, was wir

01:19:09.920 --> 01:19:11.880
vorhin hatten. Jeder hat so seine

01:19:11.880 --> 01:19:13.340
Präferenzen. Und mit der Zeit

01:19:13.340 --> 01:19:16.020
findet man halt so die Sachen, die man am liebsten benutzt.

01:19:16.020 --> 01:19:18.060
Die ausgelatschten Wege, die dann immer tiefer

01:19:18.060 --> 01:19:19.520
werden, weil man immer wieder durchstiefelt.

01:19:19.520 --> 01:19:21.280
Und dann kann man nie wieder was Neues anfangen.

01:19:21.280 --> 01:19:22.260
Ja.

01:19:22.260 --> 01:19:25.920
Ich hoffe, dass wir uns genügend Flexibilität

01:19:25.920 --> 01:19:27.800
erhalten haben, um doch immer noch

01:19:27.800 --> 01:19:29.060
neue Sachen anfangen zu können.

01:19:29.060 --> 01:19:31.760
Immer neu lernen, etwa, heißt ja auch ganz wenig

01:19:31.760 --> 01:19:33.700
Wissen und immer wieder von neu anfangen und

01:19:33.700 --> 01:19:35.940
ganz, ganz wenig Wissen.

01:19:35.940 --> 01:19:37.680
Weiß ich nicht, ob das nur eine Super-Idee ist.

01:19:37.680 --> 01:19:40.040
Naja, man muss immer wieder neue Bausteine

01:19:40.040 --> 01:19:41.760
suchen und dann... Ach ja, vielen Software,

01:19:41.760 --> 01:19:43.780
die man so kennt, fühlt sich schon so an,

01:19:43.780 --> 01:19:45.920
als ob die einfach mit ganz

01:19:45.920 --> 01:19:46.960
wenig Wissen gestoppt sind.

01:19:46.960 --> 01:19:49.900
Ja, das stimmt

01:19:49.900 --> 01:19:51.300
natürlich auch. Aber

01:19:51.300 --> 01:19:53.860
was man generell sagen kann, ist also

01:19:54.480 --> 01:19:56.220
und wenn man das nicht macht, das ist eine sehr gute Idee.

01:19:56.220 --> 01:19:57.820
Ich habe früher immer gedacht,

01:19:57.820 --> 01:20:00.300
irgendwie so die, ja ich bin halt

01:20:00.300 --> 01:20:01.860
eher so jemand, der mehr so

01:20:01.860 --> 01:20:04.020
auf der, ich habe

01:20:04.020 --> 01:20:06.160
früher eher Backend oder ich komme

01:20:06.160 --> 01:20:08.300
ganz ursprünglich aus der Systemadministration

01:20:08.300 --> 01:20:10.560
und dann irgendwie über Datenbanken

01:20:10.560 --> 01:20:12.400
und dann bin ich immer weiter in dieses Programmieren

01:20:12.400 --> 01:20:12.980
reingerutscht.

01:20:12.980 --> 01:20:16.360
Aber am Anfang habe ich irgendwie eher kurze Sachen

01:20:16.360 --> 01:20:18.480
geschrieben und fand das immer viel einfacher,

01:20:18.480 --> 01:20:20.280
wenn das irgendwie so Skripte waren,

01:20:20.280 --> 01:20:22.520
die nur so auf einer Bildschirmseite

01:20:22.520 --> 01:20:24.460
passen oder vielleicht ein paar hundert Zeilen haben

01:20:24.460 --> 01:20:25.800
oder so. Das war,

01:20:25.800 --> 01:20:28.300
da habe ich mich wohl gefühlt, weil das war

01:20:28.300 --> 01:20:30.580
etwas, das kann man halt so komplett überblicken

01:20:30.580 --> 01:20:32.380
und wenn da sich

01:20:32.380 --> 01:20:34.340
irgendwas dran ändern soll, dann kann man das auch tun, ohne

01:20:34.340 --> 01:20:36.360
dass es hinterher schief geht. Und immer

01:20:36.360 --> 01:20:38.040
wenn ich dann versucht habe, größere Sachen zu schreiben

01:20:38.040 --> 01:20:40.160
und dann halt Features hinterher

01:20:40.160 --> 01:20:42.220
dazukamen oder sich geändert haben, dann

01:20:42.220 --> 01:20:44.260
sind immer furchtbare Sachen passiert. Oder nicht immer,

01:20:44.260 --> 01:20:46.560
aber häufig genug,

01:20:46.560 --> 01:20:47.400
dass es irgendwie

01:20:47.400 --> 01:20:49.280
unangenehm war,

01:20:49.280 --> 01:20:51.220
schreckliche Dinge passiert.

01:20:51.220 --> 01:20:52.820
Die Welt geht unangenehm, ja.

01:20:54.440 --> 01:20:56.720
Und seit ich irgendwie

01:20:56.720 --> 01:20:58.820
Tests schreibe, ist das eigentlich nicht mehr

01:20:58.820 --> 01:20:59.620
so schlimm.

01:20:59.620 --> 01:21:02.620
Seitdem geht es los.

01:21:02.620 --> 01:21:04.140
Es ist immer noch so.

01:21:04.140 --> 01:21:06.880
So ganz lässt sich das nicht verhindern,

01:21:06.880 --> 01:21:08.360
aber es ist,

01:21:08.360 --> 01:21:10.820
ich fühle mich jetzt wohl

01:21:10.820 --> 01:21:12.760
dabei, auch längere Sachen zu schreiben, auch wenn

01:21:12.760 --> 01:21:14.680
ich jetzt nicht mehr quasi die Details

01:21:14.680 --> 01:21:15.120
anderer

01:21:15.120 --> 01:21:18.740
Module oder anderer Apps,

01:21:18.740 --> 01:21:21.080
die da auch noch Dinge tun,

01:21:21.080 --> 01:21:22.840
wenn ich die nicht mehr so verstehe oder auch

01:21:22.840 --> 01:21:23.820
lange nicht mehr daran gearbeitet habe,

01:21:24.420 --> 01:21:26.440
dann habe ich jetzt nicht mehr so ein Problem, irgendwas zu ändern,

01:21:26.440 --> 01:21:28.420
was die betrifft. Wenn ich hinterher die Tests

01:21:28.420 --> 01:21:30.440
durchlaufen lasse und die sehen gut aus,

01:21:30.440 --> 01:21:32.320
dann kann ich mir schon relativ sicher sein,

01:21:32.320 --> 01:21:34.040
dass da nichts total Schreckliches passieren wird.

01:21:34.040 --> 01:21:36.680
Und wenn man das halt nicht hat,

01:21:36.680 --> 01:21:38.660
dann hat man ein großes Problem,

01:21:38.660 --> 01:21:40.440
weil wenn man Tests hat,

01:21:40.440 --> 01:21:42.340
dann weiß man, wenn man ein Update macht oder wenn man jetzt

01:21:42.340 --> 01:21:44.420
eine Version von einer Bibliothek ändert oder man

01:21:44.420 --> 01:21:46.200
ändert irgendwas völlig harmloses, von dem man denkt,

01:21:46.200 --> 01:21:48.720
das kann eigentlich überhaupt keine Auswirkungen auf irgendwas anderes haben

01:21:48.720 --> 01:21:50.400
und dann füllt man die Tests aus und dann

01:21:50.400 --> 01:21:52.240
schlagen vier Tests Fail und einer davon

01:21:52.240 --> 01:21:54.400
schlägt Fail und man denkt sich so, oh Gott, das hätte nie

01:21:54.400 --> 01:21:55.280
passieren dürfen.

01:21:55.280 --> 01:21:57.200
Dann weiß man,

01:21:57.200 --> 01:22:00.100
ja, das wäre jetzt, wenn man keine Tests gehabt hätte,

01:22:00.100 --> 01:22:02.060
dann wäre das ein wirklich fieser Wack gewesen

01:22:02.060 --> 01:22:04.360
und teilweise sind die halt so, dass man

01:22:04.360 --> 01:22:06.340
sich hinterher auch sagt, also da

01:22:06.340 --> 01:22:08.520
kommt man nicht drauf, dass das irgendwie die Auswirkungen

01:22:08.520 --> 01:22:10.400
hatte, das hätte man jetzt

01:22:10.400 --> 01:22:12.340
gar nicht, also durch

01:22:12.340 --> 01:22:14.360
lange Meditationen über diese Änderungen hätte man das

01:22:14.360 --> 01:22:16.420
nicht wirklich rausbekommen

01:22:16.420 --> 01:22:18.380
können. Wäre ihm wahrscheinlich auch gar nicht

01:22:18.380 --> 01:22:20.300
aufgefallen und dann irgendwann fliegt es dann

01:22:20.300 --> 01:22:22.680
im, ja. Wäre es dem User aufgefallen

01:22:22.680 --> 01:22:24.140
oder dann

01:22:24.380 --> 01:22:26.340
hätte der sich beschwert, was schon ziemlich schlimm

01:22:26.340 --> 01:22:28.260
ist oder noch schlimmer, das wäre irgendwie eine Sicherheitswirkung

01:22:28.260 --> 01:22:29.560
oder so gewesen, also es ist,

01:22:29.560 --> 01:22:32.380
ja, also man fühlt sich da

01:22:32.380 --> 01:22:34.320
deutlich besser, wenn man Tests hat

01:22:34.320 --> 01:22:36.240
und das irgendwie so

01:22:36.240 --> 01:22:38.220
praktiziert und seit ich damit angefangen

01:22:38.220 --> 01:22:40.280
habe, fühle ich mich da

01:22:40.280 --> 01:22:42.320
irgendwie deutlich wohler mit allem.

01:22:42.320 --> 01:22:46.440
Also, ihr hört

01:22:46.440 --> 01:22:48.040
brav testen und eure Tests

01:22:48.040 --> 01:22:50.380
benutzen. Verschreibt ihr denn zuerst eure Tests

01:22:50.380 --> 01:22:51.480
oder schreibt ihr erst die Code?

01:22:51.480 --> 01:22:54.360
Da kann man sich

01:22:54.360 --> 01:22:56.380
wenn man die Frage beantwortet, kann man sich nur in den Nesseln

01:22:56.380 --> 01:22:58.260
setzen, weil man so viele

01:22:58.260 --> 01:23:00.440
Zusendungen kriegt, dass man es anders machen

01:23:00.440 --> 01:23:02.300
sollte. Zusendungen habe ich übrigens gerne

01:23:02.300 --> 01:23:04.640
an hallo-podcast.de

01:23:04.640 --> 01:23:06.640
und jederzeit Fragen, Anmerkungen

01:23:06.640 --> 01:23:08.300
stellen. Ich hatte gerade so von das schon

01:23:08.300 --> 01:23:09.100
reingepasst, also

01:23:09.100 --> 01:23:11.940
keine Aussage von dir, Johannes?

01:23:11.940 --> 01:23:14.320
Ich schreibe meinen Code zuerst und schreibe die Tests

01:23:14.320 --> 01:23:16.280
hinterher und das schockiert

01:23:16.280 --> 01:23:16.780
viele Leute.

01:23:16.780 --> 01:23:20.260
Ich mache nicht TDD, ich komme überhaupt gar

01:23:20.260 --> 01:23:21.060
nicht klar mit TDD.

01:23:21.060 --> 01:23:24.340
TDD ist Test Driven Development. Genau, Test Driven Development

01:23:24.340 --> 01:23:26.220
heißt, man schreibt

01:23:26.220 --> 01:23:28.420
zuerst Tests und ausschließlich

01:23:28.420 --> 01:23:30.240
Tests und dann schreibt man ganz genau

01:23:30.240 --> 01:23:31.940
so viel Code, dass diese Tests

01:23:31.940 --> 01:23:33.340
erfolgreich werden und nicht mehr.

01:23:33.340 --> 01:23:36.320
Die Idee dahinter ist eben,

01:23:36.320 --> 01:23:38.060
dass man immer automatisch 100%

01:23:38.060 --> 01:23:40.340
Test Coverage hat. Alles, was man an Code

01:23:40.340 --> 01:23:42.100
geschrieben hat, ist automatisch getestet.

01:23:42.100 --> 01:23:44.260
Weil man den Test vorher geschrieben hat, bevor man

01:23:44.260 --> 01:23:45.560
den Code schreibt. Klingt logisch.

01:23:45.560 --> 01:23:48.300
Das Problem für mich

01:23:48.300 --> 01:23:49.360
ist, dass

01:23:49.360 --> 01:23:51.680
Tests sind etwas,

01:23:51.680 --> 01:23:54.220
auch wie der Jochen das eben beschrieben hat,

01:23:54.340 --> 01:23:56.720
die fixieren die Funktionalität

01:23:56.720 --> 01:23:57.620
eines Programms.

01:23:57.620 --> 01:24:00.200
Die sorgen dafür, dass ich

01:24:00.200 --> 01:24:02.160
weiß, das funktioniert genau auf diese Art

01:24:02.160 --> 01:24:02.520
und Weise.

01:24:02.520 --> 01:24:06.000
Ich weiß aber oft gar nicht, wie ein Programm

01:24:06.000 --> 01:24:07.740
funktionieren soll, wenn ich anfange, das zu schreiben.

01:24:07.740 --> 01:24:09.760
Und dann fällt es mir sehr schwer, diesen

01:24:09.760 --> 01:24:11.720
Test dafür zu schreiben, wenn ich noch

01:24:11.720 --> 01:24:13.620
gar nicht weiß, wie ich es dann tatsächlich machen möchte.

01:24:13.620 --> 01:24:16.020
Wie ich denn möchte, dass es am Ende ausschaut.

01:24:16.020 --> 01:24:17.920
Und deshalb

01:24:17.920 --> 01:24:19.760
fange ich üblicherweise an Code

01:24:19.760 --> 01:24:21.840
zu schreiben und dann hat man halt irgendwie so ein paar Sachen

01:24:21.840 --> 01:24:23.820
umgesetzt und dann fange ich an die Tests dazu

01:24:23.820 --> 01:24:24.260
zu schreiben.

01:24:24.340 --> 01:24:25.980
Und dann eben

01:24:25.980 --> 01:24:28.160
sozusagen das so weit aufzubohren, dass alles

01:24:28.160 --> 01:24:30.220
drin ist, was ich haben möchte und die

01:24:30.220 --> 01:24:32.140
Tests. Was ist denn das Gegenargument?

01:24:32.140 --> 01:24:34.220
Bist du nicht kreativ genug,

01:24:34.220 --> 01:24:35.620
dir vor die Tests auszudenken oder

01:24:35.620 --> 01:24:38.120
hinterher wirst du dann zu faul und

01:24:38.120 --> 01:24:39.080
die Tests fehlen am Ende?

01:24:39.080 --> 01:24:42.020
Ne, ich glaube, es

01:24:42.020 --> 01:24:44.380
ist einfach nur ein gewisser Arbeitsmodus,

01:24:44.380 --> 01:24:45.940
der

01:24:45.940 --> 01:24:48.200
eben zu manchen

01:24:48.200 --> 01:24:49.960
Leuten passt und der zu manchen Leuten nicht passt.

01:24:49.960 --> 01:24:52.380
Ich bin

01:24:52.380 --> 01:24:53.720
immer sehr beeindruckt, wenn Leute

01:24:54.340 --> 01:24:56.340
die Idee machen und wenn die das zeigen und ich weiß auch,

01:24:56.340 --> 01:24:57.500
dass das super gut funktioniert,

01:24:57.500 --> 01:25:00.540
weil die Vorteile eben da sind. Man hat eben immer

01:25:00.540 --> 01:25:02.200
Tests geschrieben,

01:25:02.200 --> 01:25:04.600
bevor man Code überhaupt schreibt. Also aller Code,

01:25:04.600 --> 01:25:06.400
den man schreibt, ist getestet automatisch.

01:25:06.400 --> 01:25:08.380
Heißt auch nicht, dass der

01:25:08.380 --> 01:25:10.500
100% failsafe ist, aber man kann

01:25:10.500 --> 01:25:12.380
auf jeden Fall sicher sein, dass die Dinge, die man in die Tests

01:25:12.380 --> 01:25:13.320
geschrieben hat, so funktionieren.

01:25:13.320 --> 01:25:15.280
Wie sie funktionieren sollen.

01:25:15.280 --> 01:25:17.100
Wie machst du das, Jochen?

01:25:17.100 --> 01:25:20.280
Ich muss gestehen, tatsächlich genauso.

01:25:20.280 --> 01:25:22.640
Also

01:25:22.640 --> 01:25:24.300
ja, ich habe mir auch schon

01:25:24.340 --> 01:25:26.100
häufiger mal, oder ich habe es auch tatsächlich schon probiert,

01:25:26.100 --> 01:25:28.160
irgendwie zuerst die Tests zu schreiben und dann den Code, aber

01:25:28.160 --> 01:25:30.360
also es gibt

01:25:30.360 --> 01:25:32.260
da eben zwei Dinge für mich.

01:25:32.260 --> 01:25:34.380
Also eine Sache ist halt auch,

01:25:34.380 --> 01:25:36.480
dass ich oft nicht weiß, wo es hingehen

01:25:36.480 --> 01:25:38.420
soll und ich fange sogar,

01:25:38.420 --> 01:25:40.400
das ist auch vielleicht noch eine ganz interessante Empfehlung,

01:25:40.400 --> 01:25:42.440
oft auch gar nicht

01:25:42.440 --> 01:25:43.660
jetzt tatsächlich

01:25:43.660 --> 01:25:46.320
ein Modul anzuschreiben, wenn

01:25:46.320 --> 01:25:48.340
ich irgendwas schreibe. Also quasi

01:25:48.340 --> 01:25:50.120
in einer Django-App, so ein

01:25:50.120 --> 01:25:52.060
Django-Projekt oder eine Django-Applikation

01:25:52.060 --> 01:25:54.300
besteht üblicherweise aus einer Reihe von Django-Apps,

01:25:54.300 --> 01:25:56.320
die man halt schreibt. Und dann gibt es halt Third-Party-Apps,

01:25:56.320 --> 01:25:57.780
die man sich von irgendwo importiert, wenn man

01:25:57.780 --> 01:26:00.400
es installiert hat. Und dann gibt es halt welche, die man selber schreibt.

01:26:00.400 --> 01:26:02.120
Also User-Verwaltung ist

01:26:02.120 --> 01:26:03.840
üblicherweise ein Teil

01:26:03.840 --> 01:26:06.320
und dann kann halt irgendwie, keine Ahnung,

01:26:06.320 --> 01:26:08.140
ein bestimmter Teil der Webseite kann halt

01:26:08.140 --> 01:26:09.520
irgendwie ein anderer Teil sein oder so.

01:26:09.520 --> 01:26:12.220
Und

01:26:12.220 --> 01:26:14.080
ja, üblicherweise schreibt man halt

01:26:14.080 --> 01:26:16.120
in diesen Apps irgendwas, wenn man

01:26:16.120 --> 01:26:18.060
jetzt eine Django-Applikation schreibt.

01:26:18.060 --> 01:26:20.120
Aber oft, wenn ich

01:26:20.120 --> 01:26:21.880
nicht weiß, wie ich

01:26:21.880 --> 01:26:24.080
überhaupt irgendwas machen möchte, dann mache ich

01:26:24.080 --> 01:26:25.580
nicht das, sondern ich schreibe Sachen in einem

01:26:25.580 --> 01:26:26.520
Notebook.

01:26:26.520 --> 01:26:30.040
Das ist

01:26:30.040 --> 01:26:32.080
Das ist auch

01:26:32.080 --> 01:26:33.220
dein Hintergrund, der da durchkommt.

01:26:33.220 --> 01:26:35.060
Ja, ja, natürlich. Also ich mache halt

01:26:35.060 --> 01:26:37.140
eher so eigentlich

01:26:37.140 --> 01:26:39.540
noch mehr als Django so

01:26:39.540 --> 01:26:40.200
Data Science.

01:26:40.200 --> 01:26:43.720
Du meinst ein Jupyter-Notebook? Genau, ein Jupyter-Notebook.

01:26:43.720 --> 01:26:45.920
Da gibt es auch ein

01:26:45.920 --> 01:26:47.840
sehr empfehlenswertes

01:26:47.840 --> 01:26:48.360
Paket, nennt sich

01:26:48.360 --> 01:26:50.460
Django-Extensions.

01:26:50.460 --> 01:26:53.960
Da sind einige schöne Sachen dabei, unter anderem

01:26:53.960 --> 01:26:55.380
halt ein Entwicklungsserver, der

01:26:55.380 --> 01:26:57.820
eingebauten Debugger hat, wo man dann halt direkt

01:26:57.820 --> 01:26:59.780
im Traceback quasi eine Debug-Shell bekommt.

01:26:59.780 --> 01:27:03.620
Da gibt es

01:27:03.620 --> 01:27:05.860
noch andere Dinge, Shell Plus, wo dann halt

01:27:05.860 --> 01:27:07.220
diverse Imports schon mit drin sind.

01:27:07.220 --> 01:27:09.920
Was das Ding auch hat, ist, man kann

01:27:09.920 --> 01:27:10.280
halt

01:27:10.280 --> 01:27:13.880
Shell Plus minus minus Notebook oder so

01:27:13.880 --> 01:27:16.120
starten und dann wird ein Notebook-Server hochgefahren.

01:27:16.120 --> 01:27:17.600
Und zwar mit einer Django-Shell.

01:27:17.600 --> 01:27:19.940
Und dann hat man halt all den Kram, den man in Shell Plus hat,

01:27:19.940 --> 01:27:21.660
halt in einem Jupyter-Notebook.

01:27:21.660 --> 01:27:23.780
Und das ist halt sehr nett. Und dann kann man halt einfach mal

01:27:23.780 --> 01:27:25.700
hingehen und dann mit Dingen spielen und einfach

01:27:25.700 --> 01:27:26.420
mal so Sachen so

01:27:26.420 --> 01:27:29.240
Sketch-mäßig implementieren und gucken, ob es funktioniert.

01:27:29.240 --> 01:27:30.980
Und erst, wenn ich weiß, okay,

01:27:30.980 --> 01:27:33.660
so funktioniert das irgendwie, was ich vorhabe,

01:27:33.660 --> 01:27:35.700
schreibe ich das quasi tatsächlich

01:27:35.700 --> 01:27:37.520
in eine Django-App rein

01:27:37.520 --> 01:27:38.020
und

01:27:38.020 --> 01:27:41.660
gut, es gibt Dinge, bei denen geht es nicht anders.

01:27:41.660 --> 01:27:42.380
Jetzt, wenn man...

01:27:42.380 --> 01:27:47.360
Wenn man Modelle hat und die Datenbank

01:27:47.360 --> 01:27:49.640
ändert sich, dann muss man das halt

01:27:49.640 --> 01:27:51.420
irgendwie in der Models-PY machen

01:27:51.420 --> 01:27:53.140
und dann muss man halt irgendwie Migrationen ausführen.

01:27:53.780 --> 01:27:55.500
Oh, Migration, das ist ja auch so ein Thema.

01:27:55.500 --> 01:27:58.820
Aber

01:27:58.820 --> 01:28:01.480
wenn es um irgendwie Logik oder so geht,

01:28:01.480 --> 01:28:03.720
dass die richtig funktioniert

01:28:03.720 --> 01:28:05.600
oder wenn man einfach nur hinkriegen

01:28:05.600 --> 01:28:06.680
möchte, dass das jetzt...

01:28:06.680 --> 01:28:09.560
Man weiß oft nicht, wie man das elegant

01:28:09.560 --> 01:28:11.360
hinschreibt. Und wenn man Sachen

01:28:11.360 --> 01:28:13.260
ausprobiert, dafür ist ein Notebook echt total super.

01:28:13.260 --> 01:28:15.540
Kann man halt so lange probieren, bis es geht.

01:28:15.540 --> 01:28:16.960
Muss nicht dauernd irgendwie

01:28:16.960 --> 01:28:19.660
sich darum kümmern, dass man auf der Webseite ist,

01:28:19.660 --> 01:28:21.580
irgendwas anklickt oder irgendwie den

01:28:21.580 --> 01:28:23.580
Entwicklungs-Server neu startet, weil mit dem Syntax einfach steigt,

01:28:23.600 --> 01:28:25.240
der dann aus und dann muss man den wieder neu starten.

01:28:25.240 --> 01:28:27.780
Das ist alles

01:28:27.780 --> 01:28:29.520
so ein bisschen langsam und im Notebook ist das alles

01:28:29.520 --> 01:28:31.440
viel schneller. Und dann, wenn es halt irgendwie

01:28:31.440 --> 01:28:33.460
funktioniert, dann übertrage ich die Funktionen, die ich halt

01:28:33.460 --> 01:28:35.440
im Notebook drinstehen habe, halt in meine

01:28:35.440 --> 01:28:37.540
anderen Files und dann

01:28:37.540 --> 01:28:39.420
schreibe ich Tests halt

01:28:39.420 --> 01:28:40.180
irgendwie.

01:28:40.180 --> 01:28:43.480
Das ist der eine Punkt. Der andere Punkt

01:28:43.480 --> 01:28:44.920
bei Tests ist halt, dass

01:28:44.920 --> 01:28:47.440
es Dinge gibt, die sind sehr schwer zu testen.

01:28:47.440 --> 01:28:49.500
Es bringt aber gar nicht so furchtbar viel, das zu

01:28:49.500 --> 01:28:50.920
testen. Also das ist auch sowas.

01:28:50.920 --> 01:28:53.540
Wenn man jetzt tatsächlich... Ich habe auch eigentlich fast nie,

01:28:53.540 --> 01:28:55.060
nicht 100% Testabdeckung, sondern

01:28:55.060 --> 01:28:57.480
meistens eher so 70 bis 80 oder so.

01:28:57.480 --> 01:29:00.220
Weil...

01:29:00.220 --> 01:29:01.280
Was auch nicht so schlecht ist,

01:29:01.280 --> 01:29:03.420
was halt... Ja, es ist halt irgendwo... Ich weiß nicht

01:29:03.420 --> 01:29:05.340
genau, wo der Sweetspot ist. Vielleicht ist er bei noch

01:29:05.340 --> 01:29:07.240
ein bisschen mehr, vielleicht ist er bei ein bisschen weniger.

01:29:07.240 --> 01:29:09.620
Ich finde,

01:29:09.620 --> 01:29:11.120
es ist halt im Grunde

01:29:11.120 --> 01:29:13.380
wichtig, dass man so viele Tests hat, dass einem, wenn

01:29:13.380 --> 01:29:15.140
was schief geht, das auffällt. Aber

01:29:15.140 --> 01:29:17.080
wenn man jetzt so viele Tests hat,

01:29:17.080 --> 01:29:19.520
auch wenn man so viel Zeit in den Tests verbringt

01:29:19.520 --> 01:29:21.280
hat und halt das Problem, dass man sich dann schon sehr, sehr

01:29:21.280 --> 01:29:23.080
festgelegt hat und das hinterher schwer ändern kann,

01:29:23.480 --> 01:29:25.480
ähm...

01:29:25.480 --> 01:29:27.500
Und die Frage ist, ist es das wert? Ja, wenn das

01:29:27.500 --> 01:29:29.440
halt gar nicht mehr so viele Fehler fängt, weil ich

01:29:29.440 --> 01:29:31.640
irgendwie anfange... Äh, weiß ich

01:29:31.640 --> 01:29:33.240
nicht. Also Dinge, die ich selten teste, sind halt...

01:29:33.240 --> 01:29:35.580
Funktioniert das URL-Routing? Ja, das kriege ich

01:29:35.580 --> 01:29:37.520
eigentlich auch ohne Tests mit, wenn das nicht mehr funktioniert.

01:29:37.520 --> 01:29:39.500
Oder auch

01:29:39.500 --> 01:29:41.380
die Tests schlagen halt Fehler, die auf die entsprechenden

01:29:41.380 --> 01:29:43.440
Endpunkte gehen. Ähm...

01:29:43.440 --> 01:29:45.320
Oder das Django-Admin...

01:29:45.320 --> 01:29:47.620
Die Geschichten, die teste ich auch eigentlich eher selten.

01:29:47.620 --> 01:29:49.300
Also...

01:29:49.300 --> 01:29:51.040
Die Logik schon, aber nicht,

01:29:51.040 --> 01:29:53.420
ob Admin überhaupt geht. Überhaupt sollte man

01:29:53.420 --> 01:29:55.320
nicht unbedingt Sachen testen, die halt schon eigene

01:29:55.320 --> 01:29:56.980
Pakete sind, weil die haben schon Tests und so.

01:29:56.980 --> 01:29:59.320
Ja, äh, und

01:29:59.320 --> 01:30:01.320
ja, für mich ist der, der Sweet Spot

01:30:01.320 --> 01:30:03.240
beim Testen eher so bei 70, 80 Prozent

01:30:03.240 --> 01:30:04.980
und, äh, äh, ja.

01:30:04.980 --> 01:30:07.600
Ein Test, die, die, die,

01:30:07.600 --> 01:30:09.340
die man einfach schreiben kann. Das ist ja auch immer so ein Problem,

01:30:09.340 --> 01:30:10.540
wenn die Tests zu kompliziert werden.

01:30:10.540 --> 01:30:13.360
Also, gut, naja, manchmal schreibe ich das nicht. Manchmal schreibe ich

01:30:13.360 --> 01:30:15.240
auch Tests, die komplizierte Dinge tun und dann

01:30:15.240 --> 01:30:17.100
hinterher ärgere ich mich immer, wenn ich mir, wenn, wenn die

01:30:17.100 --> 01:30:18.960
fehlschlagen und ich dann nicht mehr weiß, was das,

01:30:18.960 --> 01:30:21.040
was testet das überhaupt? Warum macht's der Dinge?

01:30:21.040 --> 01:30:23.000
Was macht das für komische Sachen?

01:30:23.360 --> 01:30:24.620
Du brauchst Tests für deine Tests.

01:30:24.620 --> 01:30:26.980
Ja, genau, und das will man natürlich eigentlich

01:30:26.980 --> 01:30:28.780
vermeiden, weil dann, äh,

01:30:28.780 --> 01:30:31.320
ja, äh, dann wird's schwer.

01:30:31.320 --> 01:30:33.320
Wie krieg ich überhaupt so eine Test-Coverage raus?

01:30:33.320 --> 01:30:35.120
Also, woher weiß ich denn, wie viel von meiner

01:30:35.120 --> 01:30:37.300
Funktion getestet wird? Zähl ich dann einfach

01:30:37.300 --> 01:30:39.200
die Funktion, schreibe für jede Funktion eine Test-Funktion

01:30:39.200 --> 01:30:41.660
und guck dann und dividiere die dann in Prozenten?

01:30:41.660 --> 01:30:43.320
Ja, da gibt's, da gibt's Tools für.

01:30:43.320 --> 01:30:44.900
Also, du, äh, da gibt's ein

01:30:44.900 --> 01:30:46.320
Tool, das heißt Coverage.

01:30:46.320 --> 01:30:49.220
Kreativer Name. Na gut. Und der gibt einem

01:30:49.220 --> 01:30:51.120
im Wesentlichen für jede Programmzeile an, würde die

01:30:51.120 --> 01:30:52.920
von einem Test berührt oder nicht.

01:30:53.300 --> 01:30:55.200
Ja. Und, äh, die Anzahl

01:30:55.200 --> 01:30:57.140
der gesamten Zeilen in deinem Programm geteilt durch die

01:30:57.140 --> 01:30:59.300
Anzahl der getesteten Zeilen. Okay, also

01:30:59.300 --> 01:31:01.240
ganz easy. Ganz easy. Das gibt,

01:31:01.240 --> 01:31:03.280
macht einmal eine, eine Ausgabe auf der

01:31:03.280 --> 01:31:05.360
Commando-Zeile, aber es macht halt auch, es erzeugt

01:31:05.360 --> 01:31:07.160
so irgendwie HTML, äh, und wenn man

01:31:07.160 --> 01:31:09.080
das im Browser aufmacht, dann, wenn man

01:31:09.080 --> 01:31:11.280
auf die entsprechende Zeile drückt, dann

01:31:11.280 --> 01:31:12.100
sieht man halt auch,

01:31:12.100 --> 01:31:14.900
meine Ansicht ist kurz und sieht dann halt irgendwie

01:31:14.900 --> 01:31:16.120
farblich markiert, welche

01:31:16.120 --> 01:31:19.220
Kurzzeilen halt noch nicht getestet sind. Und dann kann man halt relativ schnell

01:31:19.220 --> 01:31:21.120
sehen, wenn das halt Zeugs ist, was, wo man

01:31:21.120 --> 01:31:23.040
relativ sicher davon ausgehen kann, dass es sowieso

01:31:23.240 --> 01:31:25.240
funktionieren wird, wie irgendwie OLCons oder

01:31:25.240 --> 01:31:27.140
Die Stereo-Methode. Ja, äh,

01:31:27.140 --> 01:31:29.420
dann muss man... Jedes Modell hat eine Stereo-Methode

01:31:29.420 --> 01:31:31.320
und das wird nie auf 100%

01:31:31.320 --> 01:31:32.980
Coverage, wenn man diese Methode nicht testet.

01:31:32.980 --> 01:31:34.500
Aber die ist völlig irrelevant. Ja.

01:31:34.500 --> 01:31:37.160
Auf der anderen Seite, wenn man da halt

01:31:37.160 --> 01:31:39.240
durchscrollt und sieht dann halt irgendwie ein komplexes

01:31:39.240 --> 01:31:41.060
äh, Ding, ein Algorithmus,

01:31:41.060 --> 01:31:43.080
der irgendwas macht und der ist gar nicht getestet,

01:31:43.080 --> 01:31:44.880
dann sollte man, da sollte man dann vielleicht nochmal

01:31:44.880 --> 01:31:47.000
einen Test schreiben, ne? Und so kann man, so

01:31:47.000 --> 01:31:49.080
gehe ich jedenfalls vor. Also ich gucke mir halt immer an, was sind die größten Codeteile,

01:31:49.080 --> 01:31:51.180
die halt am meisten Funktionalität irgendwie haben.

01:31:51.180 --> 01:31:52.920
Wenn die nicht getestet sind, dann fange ich halt da an.

01:31:53.180 --> 01:31:53.840
Und, ja.

01:31:53.840 --> 01:31:57.060
Es gibt auch ganz viele IDEs,

01:31:57.060 --> 01:31:59.240
die das integrieren, wo du quasi diese Ansicht

01:31:59.240 --> 01:32:01.300
in der IDE hast, wo du eine Testansicht

01:32:01.300 --> 01:32:02.900
haben kannst, wo du eben siehst, welche Zeilen

01:32:02.900 --> 01:32:04.560
durchgelaufen sind. Welche IDE nutzt du?

01:32:04.560 --> 01:32:06.340
Ich benutze PyCharm.

01:32:06.340 --> 01:32:09.280
Ähm, bis vor ein paar

01:32:09.280 --> 01:32:10.680
Jahren sind die plötzlich

01:32:10.680 --> 01:32:12.360
groß geworden.

01:32:12.360 --> 01:32:15.060
Ähm, JetBrains

01:32:15.060 --> 01:32:17.080
ist so eine Variante von

01:32:17.080 --> 01:32:19.020
einer IDE, die hieß früher

01:32:19.020 --> 01:32:19.640
IDE-er.

01:32:19.640 --> 01:32:22.620
Die gibt es auch immer noch. Das ist eine Java-IDE.

01:32:23.120 --> 01:32:23.560
Ja.

01:32:23.560 --> 01:32:26.920
Es ist schwierig, da eine Empfehlung

01:32:26.920 --> 01:32:29.120
zu geben, weil auch da die Vorlieben sehr weit...

01:32:29.120 --> 01:32:30.600
Dein Polybar hat natürlich auch

01:32:30.600 --> 01:32:32.600
Interesse. Genau. Und es ist auch eine

01:32:32.600 --> 01:32:34.740
Gewöhnung. Ich weiß auch, dass es nicht die beste

01:32:34.740 --> 01:32:36.420
IDE ist und ich weiß auch, dass sie

01:32:36.420 --> 01:32:38.000
nicht ungeheuer billig ist.

01:32:38.000 --> 01:32:39.740
Aber

01:32:39.740 --> 01:32:42.340
ich benutze halt das, was ich gewöhnt bin.

01:32:42.340 --> 01:32:44.260
Also Community Edition kann man vergessen, ne?

01:32:44.260 --> 01:32:47.160
Die Community Edition kann man nehmen, aber die hat nicht so eine gute Django-Integration.

01:32:47.160 --> 01:32:48.940
Gerade was Django angeht,

01:32:48.940 --> 01:32:50.800
ist tatsächlich die Professional Edition

01:32:50.800 --> 01:32:51.960
deutlich besser, weil die

01:32:51.960 --> 01:32:53.060
viele

01:32:53.060 --> 01:32:54.900
von den Sachen, die in Django so ein bisschen

01:32:54.900 --> 01:32:57.120
implizit sind, trotzdem weiß.

01:32:57.120 --> 01:32:58.940
Das ist gerade,

01:32:58.940 --> 01:33:01.440
was die Datenbank angeht, ist da sehr viel drin.

01:33:01.440 --> 01:33:03.600
Oder Templates auch. Die Template-Syntax

01:33:03.600 --> 01:33:05.360
ist in der Community Edition nicht drin.

01:33:05.360 --> 01:33:07.340
Ist ein bisschen schade,

01:33:07.340 --> 01:33:09.080
aber so ist es

01:33:09.080 --> 01:33:09.460
normalerweise.

01:33:09.460 --> 01:33:13.140
Ja, Migration

01:33:13.140 --> 01:33:13.860
hat es noch angesprochen.

01:33:13.860 --> 01:33:16.180
Ja, das ist auch etwas,

01:33:16.180 --> 01:33:19.140
was halt... Was ist das?

01:33:19.140 --> 01:33:21.260
Genau, was ist das? Also oft hat man

01:33:21.260 --> 01:33:22.020
halt das Problem,

01:33:23.000 --> 01:33:24.180
wenn man jetzt so eine

01:33:24.180 --> 01:33:25.980
App-Applikation entwickelt, dass sich

01:33:25.980 --> 01:33:28.100
man hat ein neues Feature oder so und dafür

01:33:28.100 --> 01:33:29.940
muss man jetzt auch das Datenmodell ändern,

01:33:29.940 --> 01:33:32.140
weil man irgendwas Neues abspeichern muss oder so.

01:33:32.140 --> 01:33:34.460
Oder man muss halt eine bestehende

01:33:34.460 --> 01:33:36.420
Datenstruktur irgendwie ändern, weil sich die Beziehungen

01:33:36.420 --> 01:33:37.840
der Daten untereinander irgendwie ändern oder so.

01:33:37.840 --> 01:33:40.320
Und dann ist die Frage, wie macht man das

01:33:40.320 --> 01:33:40.720
eigentlich?

01:33:40.720 --> 01:33:44.320
Das gab es in den ersten Versionen von

01:33:44.320 --> 01:33:45.780
Django, gab es das nicht.

01:33:45.780 --> 01:33:47.420
Da konnte man Datenbanken nicht ändern.

01:33:47.420 --> 01:33:50.200
Man muss dann mal manuell ändern in der Datenbank selber

01:33:50.200 --> 01:33:52.200
oder halt einmal komplett resetten.

01:33:53.000 --> 01:33:56.460
Ja, genau.

01:33:56.460 --> 01:33:58.260
Dann gab es irgendwann

01:33:58.260 --> 01:33:58.880
ein

01:33:58.880 --> 01:34:01.760
Modul, das nannte sich South.

01:34:01.760 --> 01:34:03.960
Das hat dann damit angefangen.

01:34:03.960 --> 01:34:06.260
Ich weiß gar nicht, wo die Idee dafür

01:34:06.260 --> 01:34:07.260
herkommt.

01:34:07.260 --> 01:34:08.500
Für den Namen?

01:34:08.500 --> 01:34:11.580
Einmal für den Namen nicht und ich weiß auch gar nicht, wo das...

01:34:11.580 --> 01:34:14.060
Das sind, glaube ich, Vogelmigrationen, dass die in den Süden ziehen.

01:34:14.060 --> 01:34:16.320
Ach so, Vogelmigrationen.

01:34:16.320 --> 01:34:17.880
Ja, schlau.

01:34:17.880 --> 01:34:20.080
Ist nur ein bisschen schlecht, wenn man

01:34:20.080 --> 01:34:20.820
danach googeln will.

01:34:20.820 --> 01:34:22.780
Ja, Django South.

01:34:22.940 --> 01:34:25.600
Jedenfalls, diese Bibliothek hat

01:34:25.600 --> 01:34:27.460
dieses Problem gelöst, indem man

01:34:27.460 --> 01:34:28.900
eben gesagt hat, okay, ich möchte jetzt

01:34:28.900 --> 01:34:30.760
eine Zustandsänderung

01:34:30.760 --> 01:34:31.880
aufzeichnen.

01:34:31.880 --> 01:34:35.280
Und diese Zustandsänderung, die konnte man dann

01:34:35.280 --> 01:34:36.920
auf eine Datenbank anwenden.

01:34:36.920 --> 01:34:39.500
Die hat einfach tatsächlich diese Tabellen, die da drin sind,

01:34:39.500 --> 01:34:41.100
verändert.

01:34:41.100 --> 01:34:42.660
Wir haben ein Alter Table gemacht oder

01:34:42.660 --> 01:34:44.940
Zeilen gelöscht oder was auch immer

01:34:44.940 --> 01:34:47.100
notwendig war, um eben diesen neuen

01:34:47.100 --> 01:34:48.640
Datenbankzustand hinzubekommen.

01:34:48.640 --> 01:34:51.360
Nicht den Datenzustand, also nicht, was da in der Datenbank

01:34:51.360 --> 01:34:52.420
drin ist, sondern die Struktur,

01:34:52.880 --> 01:34:55.340
die strukturelle Anlage der Datenbank.

01:34:55.340 --> 01:34:57.440
Und das ist so ein

01:34:57.440 --> 01:34:59.320
wichtiges Problem, dass es irgendwann in Django Core

01:34:59.320 --> 01:35:01.140
gewandert ist. Und das ist jetzt

01:35:01.140 --> 01:35:02.580
eines der wichtigsten Module in Django.

01:35:02.580 --> 01:35:05.300
Ja, auf jeden Fall. Also ich erinnere mich

01:35:05.300 --> 01:35:05.720
da auch

01:35:05.720 --> 01:35:08.700
mit Schrecken

01:35:08.700 --> 01:35:10.400
an Zeiten, also

01:35:10.400 --> 01:35:13.220
wo

01:35:13.220 --> 01:35:14.760
dieses Problem, also jetzt

01:35:14.760 --> 01:35:16.940
mit integrierten Migrationen und so ist es

01:35:16.940 --> 01:35:18.620
halbwegs okay. Es ist auch immer noch,

01:35:18.620 --> 01:35:20.580
man stößt da auf viele Fälle, wo es

01:35:20.580 --> 01:35:22.820
eklig werden kann und wo man auch für die Migration

01:35:22.820 --> 01:35:24.060
einen Test schreiben muss und so.

01:35:24.060 --> 01:35:26.760
Aber wenn ich mich da

01:35:26.760 --> 01:35:28.700
an frühere Zeiten zurückerranne,

01:35:28.700 --> 01:35:30.640
wo wir jetzt gar nicht sowas wie Django verwendet hatten,

01:35:30.640 --> 01:35:31.140
zum Beispiel

01:35:31.140 --> 01:35:34.700
bei Firmen, bei denen ich gearbeitet habe, sondern

01:35:34.700 --> 01:35:36.560
irgendwie selbstgebaute

01:35:36.560 --> 01:35:38.220
Webframeworks

01:35:38.220 --> 01:35:40.680
oder Dinge, die es schon gab, die

01:35:40.680 --> 01:35:42.040
aber sowas alles nicht drin hatten,

01:35:42.040 --> 01:35:44.580
da war das immer irgendwie

01:35:44.580 --> 01:35:46.440
eine problematische Geschichte.

01:35:46.440 --> 01:35:47.920
Da hat man dann halt irgendwie

01:35:47.920 --> 01:35:50.660
das getestet, irgendwie

01:35:50.660 --> 01:35:52.460
lokal oder auf einem Entwicklungssystem oder

01:35:52.460 --> 01:35:54.540
einem Staging-System und hat das dann

01:35:54.540 --> 01:35:56.440
funktioniert, dann hat man das Problem, wie synchronisiert man

01:35:56.440 --> 01:35:58.280
die unterschiedlichen Schema-Versionen,

01:35:58.280 --> 01:36:00.480
was passiert auf dem Produktionssystem,

01:36:00.480 --> 01:36:00.980
dann

01:36:00.980 --> 01:36:04.420
hat man das irgendwie durchgeführt und dann

01:36:04.420 --> 01:36:06.260
ist auf dem Produktionssystem aber was anderes passiert,

01:36:06.260 --> 01:36:08.060
als man irgendwie eigentlich erwartet hatte

01:36:08.060 --> 01:36:10.400
und dann musste man halt gucken, was ist denn

01:36:10.400 --> 01:36:12.360
da jetzt eigentlich passiert und es gab ja keine

01:36:12.360 --> 01:36:14.540
formalisierte Sicht

01:36:14.540 --> 01:36:16.180
auf dieses, was

01:36:16.180 --> 01:36:18.280
passiert da jetzt gerade, sondern das ist halt ein Skript, das man

01:36:18.280 --> 01:36:19.700
ausgeführt hat und dann

01:36:19.700 --> 01:36:22.400
ja, das ist dann

01:36:22.400 --> 01:36:23.980
aber möglicherweise auch nicht

01:36:23.980 --> 01:36:26.380
so mit dabei,

01:36:26.380 --> 01:36:28.400
sondern das ist bei irgendeinem Entwickler auf dem Rechner

01:36:28.400 --> 01:36:30.220
und so und der konnektiert sich

01:36:30.220 --> 01:36:31.220
in irgendeinem Notebook

01:36:31.220 --> 01:36:33.800
und das macht dann halt irgendwas

01:36:33.800 --> 01:36:36.380
und das ist halt schön,

01:36:36.380 --> 01:36:38.300
wenn man das halt formalisiert hat, weil bei Django hat man

01:36:38.300 --> 01:36:39.980
dann halt irgendwie ein Verzeichnis Migrations,

01:36:39.980 --> 01:36:42.220
in dem die alle drin liegen, wo man reingucken kann, was da

01:36:42.220 --> 01:36:44.520
passiert, in der Datenbank selbst wird festgehalten,

01:36:44.520 --> 01:36:46.380
welche schon ausgeführt worden sind

01:36:46.380 --> 01:36:47.960
und an welcher Stelle man sich befindet

01:36:47.960 --> 01:36:49.460
und man kann halt auch leicht wieder

01:36:49.460 --> 01:36:51.900
vor- und zurückspulen sozusagen, man kann halt sagen,

01:36:52.400 --> 01:36:54.320
äh, migrate und dann halt

01:36:54.320 --> 01:36:56.180
eine Nummer einer Migration angeben,

01:36:56.180 --> 01:36:58.340
zu der man zurück möchte und dann rollt sich

01:36:58.340 --> 01:37:00.080
die Datenbank in diesen Zustand wieder zurück

01:37:00.080 --> 01:37:02.340
und dann kann man halt, wenn man zum Beispiel gesehen hat,

01:37:02.340 --> 01:37:04.200
dass das, was man gemacht hat, war Blödsinn, dann

01:37:04.200 --> 01:37:06.400
rollt man halt das Ding zurück, löscht die Migration

01:37:06.400 --> 01:37:08.280
und macht halt eine andere und äh

01:37:08.280 --> 01:37:10.600
ja, das ist eine sehr, sehr praktische

01:37:10.600 --> 01:37:12.300
Geschichte und führt halt dazu, dass man

01:37:12.300 --> 01:37:14.380
dieses ganze Problem irgendwie so

01:37:14.380 --> 01:37:15.420
halbwegs in den Griff bekommt

01:37:15.420 --> 01:37:18.340
und es gibt einem zumindest die Tools an die Hand,

01:37:18.340 --> 01:37:19.720
mit denen man das in den Griff bekommen kann,

01:37:19.720 --> 01:37:21.260
äh, was halt

01:37:21.260 --> 01:37:22.280
äh,

01:37:22.400 --> 01:37:24.520
in, wenn man das halt nicht so

01:37:24.520 --> 01:37:26.360
macht, sondern von Hand oder selbst

01:37:26.360 --> 01:37:27.820
gestrickt halt doch viele

01:37:27.820 --> 01:37:30.260
böse Falschtricke für Leute bereithält, äh,

01:37:30.260 --> 01:37:32.620
und die dann also relativ unvorbereitet reinlaufen,

01:37:32.620 --> 01:37:33.920
ja,

01:37:33.920 --> 01:37:36.340
und das ist halt eine Geschichte, die man auf jeden Fall wissen sollte,

01:37:36.340 --> 01:37:37.540
dass das gibt, ja.

01:37:37.540 --> 01:37:40.520
Ich glaube auch, dass gerade Third-Party-Apps

01:37:40.520 --> 01:37:42.400
dadurch überhaupt erst richtig möglich wurden,

01:37:42.400 --> 01:37:44.360
ja, dass man eben diese Migrationen

01:37:44.360 --> 01:37:46.440
mitliefern konnte, weil sonst immer

01:37:46.440 --> 01:37:47.600
äh, in jeder

01:37:47.600 --> 01:37:50.340
Bibliotheks-Update musstest du von Hand

01:37:50.340 --> 01:37:52.380
diese Struktur anpassen oder eben,

01:37:52.400 --> 01:37:54.260
diese Skripte haben, die das irgendwie machen

01:37:54.260 --> 01:37:56.220
und hoffen, dass die funktionieren auf deiner Datenbank.

01:37:56.220 --> 01:37:58.140
Genauso wie bei der, wie sie bei dem Entwickler

01:37:58.140 --> 01:38:00.180
funktioniert haben. Und heute

01:38:00.180 --> 01:38:02.260
weißt du einfach, wenn du eine Bibliothek installierst,

01:38:02.260 --> 01:38:04.320
die bringt ihre Migrationen mit und die funktionieren auch.

01:38:04.320 --> 01:38:05.780
Ja.

01:38:05.780 --> 01:38:08.260
Aber klar, es ist auch so ein

01:38:08.260 --> 01:38:10.200
Fallstrick, äh, wenn man zum ersten Mal

01:38:10.200 --> 01:38:12.280
eine Django-Anwendung startet und dann schön seine

01:38:12.280 --> 01:38:13.500
Modelle geschrieben hat und dann

01:38:13.500 --> 01:38:16.360
Operational Errors bekommt, weil die Datenbank nicht da ist,

01:38:16.360 --> 01:38:17.560
äh,

01:38:17.560 --> 01:38:20.320
stolp ich auch regelmäßig noch drüber,

01:38:20.320 --> 01:38:22.360
weil ich vergesse meine Datenbank,

01:38:22.400 --> 01:38:22.840
die zu migrieren.

01:38:22.840 --> 01:38:23.680
Ja.

01:38:23.680 --> 01:38:28.120
Dann gibt's keine automatische Erinnerung, also du musst sie dann selber, äh,

01:38:28.120 --> 01:38:30.220
Der Operational Error ist die automatische Erinnerung.

01:38:30.220 --> 01:38:33.480
Ja, das hört sich auf jeden Fall so an,

01:38:33.480 --> 01:38:34.800
sonst könnte man Django für alles mögliche

01:38:34.800 --> 01:38:35.780
coole einsetzen.

01:38:35.780 --> 01:38:38.300
Für große Projekte, für kleine Projekte, für

01:38:38.300 --> 01:38:39.300
schmale, schlanke.

01:38:39.300 --> 01:38:42.920
Ich weiß nicht, haben wir eigentlich schon irgendwelche Beispiele genannt für, äh,

01:38:42.920 --> 01:38:44.140
Django-Anwendungen, die man vielleicht so,

01:38:44.140 --> 01:38:45.660
ja, die man vielleicht so kennt?

01:38:45.660 --> 01:38:48.140
Kennst du denn welche? Ja, ist ja zufällig.

01:38:48.140 --> 01:38:48.720
Ja, zufällig.

01:38:48.720 --> 01:38:52.140
Ich glaube, einen der größten, äh,

01:38:52.400 --> 01:38:53.700
Django, äh,

01:38:53.700 --> 01:38:56.260
Implementationen hat

01:38:56.260 --> 01:38:58.180
Instagram, oder hat, hat Instagram?

01:38:58.180 --> 01:38:59.740
Aber haben sie abgelöst, glaube ich. Haben sie abgelöst?

01:38:59.740 --> 01:39:01.420
Oh je, dann war das jetzt kein gutes Beispiel.

01:39:01.420 --> 01:39:03.740
Nee, aber sie sind natürlich sehr groß damit gewachsen.

01:39:03.740 --> 01:39:05.060
Und, ähm,

01:39:05.060 --> 01:39:07.960
das, äh, ist natürlich richtig.

01:39:07.960 --> 01:39:10.260
Ansonsten. Was machen die denn jetzt,

01:39:10.260 --> 01:39:11.980
weißt du das? Weiß ich nicht genau, nee.

01:39:11.980 --> 01:39:14.400
Es ist üblicherweise

01:39:14.400 --> 01:39:16.740
so, dass, äh, wenn man solche, äh,

01:39:16.740 --> 01:39:18.340
Standardlösungen einsetzt

01:39:18.340 --> 01:39:20.240
und dann so groß wird wie Instagram zum Beispiel,

01:39:20.240 --> 01:39:22.320
dass man dann auf einmal auf Probleme

01:39:22.320 --> 01:39:24.520
trifft, die eben durch Standardlösungen

01:39:24.520 --> 01:39:26.020
nicht mehr abgedeckt werden und dass man dann

01:39:26.020 --> 01:39:27.700
anfängt, seine eigenen

01:39:27.700 --> 01:39:30.260
Dinge zu bauen. Das haben die ganzen

01:39:30.260 --> 01:39:32.140
großen Firmen machen das ja, die betreiben

01:39:32.140 --> 01:39:33.300
alle ihre eigenen Webserver.

01:39:33.300 --> 01:39:36.000
Die haben alle ihre eigenen Datenbanken geschrieben,

01:39:36.000 --> 01:39:38.160
die haben alle ihre eigene Infrastruktur geschrieben, weil ab einer

01:39:38.160 --> 01:39:40.200
gewissen Größe sind die Standardlösungen einfach nicht mehr

01:39:40.200 --> 01:39:42.000
wichtig. Und bei Instagram war es genauso. Die sind

01:39:42.000 --> 01:39:44.100
sehr groß geworden mit Django und haben's dann

01:39:44.100 --> 01:39:45.740
abgelöst. Soweit ich weiß.

01:39:45.740 --> 01:39:48.160
Ja. Fällt dir noch ein anderes

01:39:48.160 --> 01:39:49.880
Beispiel ein? Einem von euch?

01:39:49.880 --> 01:39:52.060
Es gibt viele kleine

01:39:52.240 --> 01:39:54.160
Sachen, die damit

01:39:54.160 --> 01:39:54.560
laufen.

01:39:54.560 --> 01:39:58.020
Man sieht das von außen natürlich nicht.

01:39:58.020 --> 01:40:00.180
Man sieht in der Web-Anwendung nicht an, ob es in Django

01:40:00.180 --> 01:40:01.120
geschrieben ist oder nicht.

01:40:01.120 --> 01:40:02.340
Ja, ich bin in Django.

01:40:02.340 --> 01:40:05.280
Und deshalb muss man so ein bisschen darauf

01:40:05.280 --> 01:40:07.900
vertrauen, dass die Entwickler einem das mitteilen.

01:40:07.900 --> 01:40:10.060
Es gibt ein System,

01:40:10.060 --> 01:40:10.780
das heißt Pre-Tix.

01:40:10.780 --> 01:40:13.900
Das ist ein Ticket-Verkaufssystem.

01:40:13.900 --> 01:40:15.960
Also wenn man ein Konzert veranstaltet und Tickets verkaufen

01:40:15.960 --> 01:40:17.940
möchte, das ist in Django geschrieben.

01:40:17.940 --> 01:40:19.120
Die sind auch sehr aktiv

01:40:19.120 --> 01:40:22.120
bei den Django-Cons.

01:40:22.240 --> 01:40:24.240
Ja.

01:40:24.240 --> 01:40:27.840
Also ich weiß das halt auch noch.

01:40:27.840 --> 01:40:29.300
Das ist so eine Zeitung in Amerika.

01:40:29.300 --> 01:40:29.780
Ja, genau.

01:40:29.780 --> 01:40:34.240
Das waren die

01:40:34.240 --> 01:40:35.600
ursprünglichen Entwickler

01:40:35.600 --> 01:40:37.780
von Django. Also es kommt aus dem

01:40:37.780 --> 01:40:38.500
Zeitungsumfeld.

01:40:38.500 --> 01:40:42.020
Also auch als Blog-Plattform für

01:40:42.020 --> 01:40:43.800
Vertrieb von neuen

01:40:43.800 --> 01:40:44.840
News-Artikeln?

01:40:44.840 --> 01:40:47.600
Ja, die haben ihre komplette Zeitungs-Webseite

01:40:47.600 --> 01:40:49.960
damit organisiert im Wesentlichen.

01:40:49.960 --> 01:40:51.240
Also die, ja.

01:40:52.160 --> 01:40:53.820
Das ist so die Entstehungsgeschichte.

01:40:53.820 --> 01:40:55.740
Das ist aus einer kleinen Stadt in Texas,

01:40:55.740 --> 01:40:56.500
Lawrence,

01:40:56.500 --> 01:41:00.100
wo eben zwei Entwickler gesagt haben, wir machen

01:41:00.100 --> 01:41:01.740
das jetzt einmal richtig, anstatt immer wieder

01:41:01.740 --> 01:41:03.440
PHP-Kram zusammenzubasteln.

01:41:03.440 --> 01:41:06.280
Haben sie einmal das Problem richtig

01:41:06.280 --> 01:41:08.120
gelöst und durften es dann irgendwann

01:41:08.120 --> 01:41:10.100
veröffentlichen. Und das System

01:41:10.100 --> 01:41:12.300
heißt jetzt Django. Und soweit ich weiß,

01:41:12.300 --> 01:41:13.160
wird es da immer noch eingesetzt.

01:41:13.160 --> 01:41:16.560
Spannend.

01:41:16.560 --> 01:41:18.340
Ja, habt ihr

01:41:18.340 --> 01:41:20.060
noch was beizutragen zum Django oder

01:41:20.060 --> 01:41:22.140
würdet ihr sagen, wir haben das Thema jetzt so,

01:41:22.140 --> 01:41:23.500
soweit, durch?

01:41:23.500 --> 01:41:26.220
Es gibt noch

01:41:26.220 --> 01:41:28.140
viele Dinge, die man sagen könnte, aber nichts Konkretes.

01:41:28.140 --> 01:41:30.140
Wenn wir

01:41:30.140 --> 01:41:32.400
irgendein Thema nochmal besprechen sollen, dann sag gerne Bescheid.

01:41:32.400 --> 01:41:34.240
Dann machen wir genau da weiter.

01:41:34.240 --> 01:41:35.960
Es gibt ja auch diese E-Mail-Adresse,

01:41:35.960 --> 01:41:37.580
an die man Fragen schicken kann. Genau.

01:41:37.580 --> 01:41:39.580
Hallo at python-podcast.de

01:41:39.580 --> 01:41:40.540
Ja.

01:41:40.540 --> 01:41:44.120
Ne, mir fällt da jetzt auch

01:41:44.120 --> 01:41:46.240
tatsächlich...

01:41:46.240 --> 01:41:47.920
Man kann bestimmt auch noch über

01:41:47.920 --> 01:41:48.440
diverse

01:41:48.440 --> 01:41:52.120
Bereiche in Django,

01:41:52.120 --> 01:41:54.040
wie deine eigene Seite machen.

01:41:54.040 --> 01:41:54.780
Ja, eigene Episoden.

01:41:54.780 --> 01:41:57.680
Episode über den ORM oder Episode über

01:41:57.680 --> 01:41:59.020
Template-Sprachen oder so.

01:41:59.020 --> 01:42:02.120
Ja, oder auch über ganz einfache Sachen, wie die Formular-Integration.

01:42:02.120 --> 01:42:03.900
Oder wie die

01:42:03.900 --> 01:42:04.940
Session-Integration.

01:42:04.940 --> 01:42:08.020
Ganz einfache Dinge, die man so

01:42:08.020 --> 01:42:08.380
für

01:42:08.380 --> 01:42:11.220
ganz normal hält.

01:42:11.220 --> 01:42:13.980
Für euch ist das ganz normal, easy

01:42:13.980 --> 01:42:16.120
und aus dem Ärmel.

01:42:16.120 --> 01:42:17.620
Ja, man kriegt das halt automatisch mit.

01:42:17.620 --> 01:42:20.060
Wenn man Django einmal startet, dann ist das schon da

01:42:20.060 --> 01:42:21.580
und man muss sich nie Gedanken darüber machen.

01:42:22.000 --> 01:42:23.940
Es ist super interessant, was damit alles geht

01:42:23.940 --> 01:42:26.420
und was vielleicht nicht geht und wie es geht.

01:42:26.420 --> 01:42:26.900
Ja.

01:42:26.900 --> 01:42:28.920
Und super spannende Sachen.

01:42:28.920 --> 01:42:31.900
Was man vielleicht noch erwähnen sollte, also dieser ganze

01:42:31.900 --> 01:42:33.860
Web-Stack, also Web ist halt so ein bisschen

01:42:33.860 --> 01:42:36.220
was man halt leider auch

01:42:36.220 --> 01:42:38.040
immer wieder sieht, dass es nicht so richtig

01:42:38.040 --> 01:42:39.860
aus einem Guss, also wenn man sich jetzt

01:42:39.860 --> 01:42:42.040
beispielsweise anschaut, wenn man mit Xcode

01:42:42.040 --> 01:42:44.380
jetzt iOS-Applikationen

01:42:44.380 --> 01:42:45.980
erstellt oder so, dann ist das halt

01:42:45.980 --> 01:42:47.920
auch Model-View-Controller, aber es ist halt

01:42:47.920 --> 01:42:49.420
eigentlich sehr

01:42:49.420 --> 01:42:51.940
schön irgendwie so gebaut,

01:42:51.980 --> 01:42:54.200
dass es halt alles von dem

01:42:54.200 --> 01:42:56.220
Finger, der irgendwo

01:42:56.220 --> 01:42:57.440
draufklickt, bis zu

01:42:57.440 --> 01:42:59.860
dem Datenmodell halt alles schön ineinander

01:42:59.860 --> 01:43:01.160
greift und funktioniert.

01:43:01.160 --> 01:43:03.780
Das ist im Web leider alles nicht so wirklich

01:43:03.780 --> 01:43:05.760
und das fällt einem dann halt auch öfter

01:43:05.760 --> 01:43:07.840
auf oder auf den Fuß, weil man halt

01:43:07.840 --> 01:43:09.620
ganz so viele unterschiedliche

01:43:09.620 --> 01:43:12.060
Sprachen

01:43:12.060 --> 01:43:15.700
Layer hat, die irgendwie miteinander

01:43:15.700 --> 01:43:17.780
interagieren müssen. Jetzt der Django-Teil

01:43:17.780 --> 01:43:18.880
ist jetzt nur der

01:43:18.880 --> 01:43:21.860
Teil der Web-Applikation, die sich jetzt

01:43:21.860 --> 01:43:23.700
auf einem Applikations-Server befindet und

01:43:23.700 --> 01:43:25.620
da irgendwie, und der Datenbank-Teil ist halt

01:43:25.620 --> 01:43:26.860
auch noch irgendwie mit drin, sozusagen.

01:43:26.860 --> 01:43:29.720
Aber, oder es rennt halt auch

01:43:29.720 --> 01:43:31.360
HTML nach vorne raus, aber es ist halt auch

01:43:31.360 --> 01:43:33.540
das HTML, also die Template selber, ist das jetzt

01:43:33.540 --> 01:43:35.640
HTML ein Teil von Django, war ja

01:43:35.640 --> 01:43:37.700
eigentlich eher nicht. Das ist

01:43:37.700 --> 01:43:39.300
eigentlich nochmal eine etwas andere Welt.

01:43:39.300 --> 01:43:41.320
Wie sieht das hinterher aus?

01:43:41.320 --> 01:43:43.420
Dazu braucht man dann CSS, das ist zwar auch

01:43:43.420 --> 01:43:45.540
irgendwie in Django drin, man kann halt, es gibt da

01:43:45.540 --> 01:43:47.520
man kann Sass oder Less oder was auch immer

01:43:47.520 --> 01:43:49.640
man verwenden möchte, um halt irgendwie

01:43:49.640 --> 01:43:51.780
das CSS von der Seite zu erzeugen, das kann man natürlich machen,

01:43:51.840 --> 01:43:53.700
aber wie man das jetzt macht und

01:43:53.700 --> 01:43:55.540
der Umgang damit, das ist natürlich wieder irgendwie so eine

01:43:55.540 --> 01:43:56.780
eigene Geschichte.

01:43:56.780 --> 01:43:59.700
Das ganze JavaScript, also der

01:43:59.700 --> 01:44:01.580
Teil der Web-Applikation, die halt auf dem Browser läuft,

01:44:01.580 --> 01:44:03.620
ist nochmal eine andere Geschichte, die wird dann halt auch vielleicht

01:44:03.620 --> 01:44:05.480
die wird wahrscheinlich nicht mal von Django

01:44:05.480 --> 01:44:07.560
ausgeliefert, sondern von dem statischen Web-Server, der

01:44:07.560 --> 01:44:09.540
halt irgendwie vor Django meistens noch davor ist

01:44:09.540 --> 01:44:11.480
und irgendwie so Reverse-Proxy

01:44:11.480 --> 01:44:13.500
vor der Applikation ist, für statische

01:44:13.500 --> 01:44:14.240
Inhalte und Dinge.

01:44:14.240 --> 01:44:16.860
Und

01:44:16.860 --> 01:44:18.320
ja,

01:44:21.820 --> 01:44:22.640
überhaupt, wie

01:44:22.640 --> 01:44:25.520
SSL, dann die ganzen

01:44:25.520 --> 01:44:27.620
Netz, also da ist noch so viel Zeugs mit

01:44:27.620 --> 01:44:29.660
dabei, der halt auch eine Rolle spielt,

01:44:29.660 --> 01:44:30.800
wenn man jetzt eine Webseite betreibt,

01:44:30.800 --> 01:44:33.540
der jetzt nicht unbedingt

01:44:33.540 --> 01:44:35.500
Teil von Django ist, da gibt es noch

01:44:35.500 --> 01:44:37.460
viel zu tun und das ist natürlich so ein Ding,

01:44:37.460 --> 01:44:39.220
also wenn man jetzt einfach nur Django

01:44:39.220 --> 01:44:41.400
macht, dann hat man damit die

01:44:41.400 --> 01:44:43.440
Komplexität dieses Gesamtdings

01:44:43.440 --> 01:44:45.000
irgendwie eine Webseite betreiben

01:44:45.000 --> 01:44:47.420
noch nicht komplett abgedeckt.

01:44:47.420 --> 01:44:49.320
Also es ist ein ganz guter Teil davon, aber

01:44:49.320 --> 01:44:51.800
da gibt es halt...

01:44:51.800 --> 01:44:53.520
Das ist auch mal eine Folge, also wie man eine Webseite komplett

01:44:53.520 --> 01:44:55.220
betreibt, so von Server und

01:44:55.220 --> 01:44:57.420
Deployment und wie man so, weiß ich,

01:44:57.420 --> 01:44:59.680
Load Balance macht oder sowas.

01:44:59.680 --> 01:45:01.540
Könnte man auf jeden Fall auch. Hat dann nicht mehr

01:45:01.540 --> 01:45:03.100
so wahnsinnig viel mit Python zu tun,

01:45:03.100 --> 01:45:04.780
unter Umständen. Gibt das nicht in Python?

01:45:04.780 --> 01:45:07.540
Doch, man kann das auch alles in Python machen, aber ich mach das

01:45:07.540 --> 01:45:07.900
auch in Python.

01:45:07.900 --> 01:45:11.460
Ne, viele Bereiche

01:45:11.460 --> 01:45:13.460
gehen ja dann raus auch aus der

01:45:13.460 --> 01:45:15.060
eigentlichen Programmierung und gehen dann in die

01:45:15.060 --> 01:45:17.280
Administration rein und da ist Python natürlich

01:45:17.280 --> 01:45:19.180
ein wichtiges Werkzeug, aber

01:45:19.180 --> 01:45:21.780
jetzt nicht das, worauf es läuft.

01:45:21.780 --> 01:45:22.560
Ja.

01:45:22.560 --> 01:45:25.580
Ja.

01:45:25.580 --> 01:45:27.520
Ja, also dann

01:45:27.520 --> 01:45:29.540
vielen Dank euch beiden hier, dass ihr so

01:45:29.540 --> 01:45:31.620
schön euch unterhalten habt, mir

01:45:31.620 --> 01:45:33.580
ein paar Fragen beantwortet habt, die ich so hatte.

01:45:33.580 --> 01:45:35.840
Ich glaube, so viel zusammenfassen müssen

01:45:35.840 --> 01:45:37.520
wir gar nicht. Wir haben so ein bisschen Dango gemacht heute.

01:45:37.520 --> 01:45:39.880
Ja, das war super

01:45:39.880 --> 01:45:41.760
und wir haben heute

01:45:41.760 --> 01:45:43.520
noch gar nicht über Events gesprochen, aber ich kenne gerade

01:45:43.520 --> 01:45:45.780
keine, die jetzt in nächster Zeit sind,

01:45:45.780 --> 01:45:46.840
so jetzt am Jahresende.

01:45:46.840 --> 01:45:50.000
Ich weiß nicht, ob euch welche einfallen.

01:45:50.000 --> 01:45:51.760
12. Dezember ist

01:45:51.760 --> 01:45:53.540
Treffen der

01:45:53.540 --> 01:45:55.840
Python-User-Group Köln

01:45:55.840 --> 01:45:56.320
bei Cologne.

01:45:56.320 --> 01:45:59.620
Ja, jede Woche ist halt irgendwie

01:45:59.620 --> 01:46:01.280
Python-Fu in Düsseldorf.

01:46:01.280 --> 01:46:03.460
Nächstes PyTDF-Treffen ist erst wieder

01:46:03.460 --> 01:46:05.020
am 9. Januar, glaube ich. Also

01:46:05.020 --> 01:46:07.680
Treffen der Düsseldorfer Python-User-Group.

01:46:07.680 --> 01:46:09.340
Falls ihr eure eigene E-Mail-Adresse

01:46:09.340 --> 01:46:10.980
anboten wollt, schreibt uns bitte bitte eine E-Mail.

01:46:10.980 --> 01:46:13.480
Ja, natürlich. Also ich meine, wir kennen jetzt nur

01:46:13.480 --> 01:46:16.740
die Sachen im Rheinland-Düsseldorf-Köln-Umfeld.

01:46:16.740 --> 01:46:17.900
Ja.

01:46:17.900 --> 01:46:20.220
Ja, würde ich sagen.

01:46:20.220 --> 01:46:21.740
Vielen Dank. Schön, dass ihr zugehört habt.

01:46:21.740 --> 01:46:23.980
Noch einen schönen Tag, Morgen, Abend,

01:46:23.980 --> 01:46:25.440
wo auch immer ihr gerade seid, was ihr macht.

01:46:25.440 --> 01:46:27.540
Und ja, bis zum nächsten Mal.

01:46:27.540 --> 01:46:29.620
Bis zum nächsten Mal. Tschüss.
