Transkript: PP02 - Django

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Dominik

Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python Podcast in der heute zweiten Episode.

Dominik

Wir haben heute ein ganz besonderes Thema für euch mitgebracht, und zwar Django.

Dominik

Für das zweite Mal natürlich ist es auch schon ein steiles Thema, aber ich glaube, das regen wir gemeinsam hin.

Dominik

Versuchen auch eine Einführung dazu zu machen.

Dominik

Wir fangen heute ein bisschen an, wieder mit den Basics und dann gehen wir ein bisschen in die Tiefe des Themas.

Dominik

Wir sind wieder im wunderschönen Wintergarten hier von Jochen.

Dominik

Ich bin der Dominik und diesmal habe ich nicht nur den Jochen dabei, sondern auch den Johannes.

Dominik

Sagt uns auch nochmal Hallo, ihr zwei.

Jochen

Ja, genau, hier ist auch Jochen, hallo von mir.

Jochen

Und genau, zum Django-Thema haben wir direkt schon mal einen ersten Expertengast eingeladen und wir hoffen, dass der da irgendwie mehr weiß als wir und uns da viele interessante Geschichten erzählen kann.

Jochen

Und das ist Johannes und genau, kannst du sich ja vielleicht mal vorstellen.

Ja, hallo, ich bin Johannes.

Johannes

Und nach der Ankündigung kann ich eigentlich gar nicht mehr so richtig viel sagen.

Johannes

Jetzt sind die Anforderungen gestellt und mal schauen, ob ich die erfüllen kann.

Dominik

Also du arbeitest auch mit Django.

Johannes

Ich arbeite auch mit Django, genau.

Johannes

Ich arbeite mit Jochen viel zusammen, der ja auch mit Django sehr viel macht.

Johannes

Und wir haben uns auch darüber kennengelernt.

Im Python Club in Chaos Computer Club in Düsseldorf in der Python-Ecke.

Johannes

Und haben dann festgestellt, dass wir beide Django machen und arbeiten eigentlich seither zusammen.

Dominik

Beim Python Food an Donnerstag.

Johannes

Genau, jeden Donnerstag ab 18 Uhr.

Dominik

Ja, der Veranstaltungsschutz kommt erst at the end, but we versuchen das ab und zu noch mal ein bisschen einzustreuen.

Dominik

Yeah, um weiter heute Django.

Dominik

Deswegen fangen wir vielleicht nochmal an.

Dominik

Johannes kann glaube ich so etwas zur Geschichte von Django erzählen.

Dominik

It's nice so an alter Haser wie der Jochen.

Dominik

What is it überhaupt?

Dominik

Django hört sich jetzt erstmal an ja.

Dominik

Was ist das?

Dominik

Tanz?

Johannes

It is benannted by Jazz Gitarristen, Django Reinhardt.

Johannes

The beiden Entwickler, die sich das ausgedacht haben, waren wohl Fans von diesem Gitarristen.

Johannes

Es hat sonst auch keinerlei Verbindung mehr dazu, nur der Name stammt daher.

Johannes

Django ist ein Framework, um Webanwendungen mit Python herstellen zu können.

Johannes

Da gibt es mehrere solcher Frameworks, aber Django ist da sicherlich das Größte und sicherlich auch das Ausgereifteste.

Das gibt es schon seit, jetzt müsste man rechnen können, knapp 15 Jahren?

Jochen

Ja, ich glaube, also 2005 ist es rausgekommen oder 2004, ich weiß nicht.

Jochen

Ich glaube kurz nach Ruby on Rails.

Jochen

Und ich denke, das war auch so ein bisschen vielleicht das Vorbild für Django.

Johannes

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.

Johannes

Ich habe das damals kennengelernt von einer Veranstaltung wie Snakes and Rubies.

Um sehr zu empfehlen auch übrigens.

Johannes

Gibt es auf YouTube immer noch das Video, inzwischen ungeheuer alt, wo sich eben da die beiden Hauptentwickler getroffen haben.

Der Captain Moss war das, glaube ich, der Dame.

Johannes

Und der von Ruby Rails heißt David Heinmeier-Hanson.

Johannes

Und die beiden haben so in usually Ansatz.

Johannes

And haben eben Snakes and Ruby's.

Johannes

And the one, the Caplan Moss had each other, where many problems with Django used.

Johannes

So I'm quite the Querschnitt.

Johannes

We have a message URLs to define and then a functionality to define, and then the templates that are and something on the data bank to hold.

Dominik

Wodurch unterscheidet sich the Ruby on Rails art and we are from the world.

Johannes

Also ein Beispiele is wie eben URLs funktionieren.

Johannes

In Django definierst du eine URL, in dem du einen regulären Ausdruck entschuldigst.

Johannes

And when the regular Ausdruck entspricht, what the benutzer in seinem Browser gibst, then the entsprechend funktion dazu ausgeführt.

Johannes

In Ruby and Rails is this and Ruby and Rails is this during a convention, you have a controller that a name has, and over these name will automatically the URL, with what you dies in controller entsprechen kannst.

Johannes

That he has auf der einen Seite stärkere Conventionen, you have damit the Möglichkeit, ein Ruby on Rails Projekt, sag ich mal, schneller zu verstehen, weil they all the gleich struktur have.

Johannes

Andererseits musst du diese Sachen eben wissen, du musst die Konventionen wissen.

Johannes

Und das ist für mich so ein bisschen der große Unterschied am Anfang gewesen.

Johannes

Ich mag es gerne, wenn Sachen explizit dastehen, wenn die Programme das tun, was ich hingeschrieben habe, und nicht so ein bisschen magisch hintenrum das tun, was halt eingerichtet ist, weil das jemand wusste.

Johannes

Und das ist gleichzeitig eine Stärke und eine Schwäche, weil man eben dadurch in Ruby und Rails wesentlich schneller Ergebnisse sieht.

Johannes

Ich muss nur diesen Controller schreiben und ich muss eben nur eben eine bestimmte Datei an die richtige Stelle hinlegen und dann wird das automatisch zu einer kompletten Webseite.

Johannes

In Django muss ich den ganzen Weg gehen.

Johannes

Ich muss die URL definieren, ich muss die Funktionalität definieren, ich muss die Datenbankmodelle definieren, ich muss die in die Datenbank reintun, ich muss die aus der Datenbank wieder rausholen und dann muss ich sie in ein Template reintun, was ich selbst definiert habe.

Dominik

Du hast ja gerade nochmal von Controllern geredet, vielleicht weiß jetzt noch nicht jeder Hörer, was das genau ist.

Dominik

Wollt ihr das nochmal kurz erklären?

Dominik

Ich weiß nicht, Jochen hat einmal mir schon ganz schön erklärt, um es dabei geht.

Jochen

Ja, also das wäre dann halt auch so eine Gemeinsamkeit zwischen Ruby on Rails und Django, das sind beides so Model View Controller-Frameworks, also die diesen Ansatz halt halbwegs sauber irgendwie umsetzen.

Jochen

Das heißt, es gibt halt Modelle, in denen irgendwie definiert wird, wie die Daten aussehen, die man jetzt in der Applikation hält, also wie der State der Applikation quasi abgelegt ist, sich verhalten soll.

Jochen

Meistens hat man eine relationale Datenbank irgendwie im Hintergrund und dann muss halt aus den Modellen wird dann halt ein Schema generiert, dann werden die Daten halt da irgendwie reingespeichert.

Jochen

Und dann hat man sogenannte Controller, die quasi die Daten, die in den Modellen sind, mit den Views, die halt dafür zuständig sind, wie das hinterher aussehen soll, für ein Benutzerinterface verbinden sollen, wobei Benutzerinterface ganz unterschiedliche Sachen sein können.

Jochen

Also ein Beispiel ist, man macht irgendwie ein Weltraumkampfspiel und dann gibt es halt vielleicht irgendwie ein grafisches Interface, wo man irgendwie die Raumschiffe rumfliegen sieht und so.

Jochen

Aber man kann sich halt auch vorstellen, dass ein anderes Interface nur textbasiert ist, wo sich dann Leute quasi Patellnet irgendwie einloggen oder so.

Jochen

Und das muss dann natürlich unterschiedlich aussehen, je nachdem, was man für ein Interface hat.

Jochen

Oder wenn man jetzt ein Touch-Interface hat, ist es nochmal anders.

Jochen

Und dafür diese Unterschiede abzubilden, ist halt der View zuständig und der Controller.

Jochen

Die sind halt dafür da, sozusagen die Views mit den Modellen irgendwie zu verbinden, also die Daten irgendwie aus Modellen zu holen, die dann in der Form den Views zu geben, die sie das halt brauchen.

Jochen

Und ja, das Ganze nennt man irgendwie Model View Controller.

Dominik

Also ein Modell ist das, was in der Datenbank angelegt ist, wie dann das.

Jochen

Ja, aber auch die Objekte quasi, die hinterher in der Applikation sich um die Datenhaltung kümmern, sind auch sozusagen die Modelle, ja.

Jochen

Okay.

Jochen

Also Datenbank ist halt eigentlich nochmal ein bisschen.

Dominik

Also die Klassen gibt man Benutzerverwaltung von dieser Datenbank auch.

Jochen

Ja, ja, genau, genau.

Jochen

Und was ein bisschen verwirrend ist, ist halt, dass in den Django die Views-Templates heißen und die Controller-Views das, weiß nicht, ein bisschen.

Dominik

Hier sind ja alle ein bisschen verwirrend durcheinander.

Johannes

Da stolpert den Anfänger oft drüber, dass die Bezeichnungen anders sind und eben ausgerechnet View und View unterschiedliche Dinge bedeuten.

Dominik

Gemein, da muss doch jemand mal so ein Request stellen und sagen, hey, ändert das mal.

Jochen

Ja, aber nach über zehn Jahren ist das halt ein bisschen schwer zu ändern, dass das geht halt nicht mehr so an.

Dominik

Haben das ja an die anderen Leute auch dran gewöhnt, wie das dann heißt.

Dominik

Ja, verstehe ich.

Dominik

Ja, also wofür nutzt man denn Dungu, wenn ihr jetzt gesagt habt, was da schon man mitmachen kann?

Johannes

Ja, im Prinzip kann man jede Web-Anwendung damit herstellen.

Und die Breite ist da, ist da, also es gibt quasi keine Begrenzung.

Johannes

Die erste Anwendung, die sicherlich jeder machen muss, ist ein Blog und jeder Django-Entwickler, der mehr als ein halbes Jahr daran gearbeitet hat, hat auch schon mal einen Blog damit gemacht.

Johannes

Dann gibt es so die ganz typischen Sachen, den Wiki-Programmieren einfach mal auch zur Übung her.

Johannes

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.

Johannes

Und in einem einwöchigen Kurs ist es absolut kein Problem, eine Basisfunktion von jeder dieser Webseiten hinzukriegen.

Johannes

Klar, die sehen nicht so schön aus und die haben auch nicht so viele Funktionen wie die tatsächlichen Vorbilder, aber die Grundfunktionalität ist eben sehr schnell damit umzusetzen.

Dominik

Auf was konzentrierst du dich dann besonders in diesem Kurs?

Dominik

Also auf das Model, das Hue, das Controller-Ding?

Johannes

Nee, die müssen alle drei zusammenarbeiten, weil du mit jedem dieser Teile allein kannst du nicht, hast du keine komplette Anwendung.

Johannes

Es wird erst dann eine komplette Anwendung, wenn die drei zusammenarbeiten.

Johannes

Das heißt, man muss so zwischen diesen Bereichen hin und her springen.

Johannes

Und da gibt es auch verschiedene Möglichkeiten, damit umzugehen, die sich auch, gerade wenn man mit anderen Leuten drüber spricht, zeigen, dass da jeder unterschiedlich damit umgeht.

Johannes

Aber im Endeffekt geht es darum, diese drei Bereiche zu verheiraten und diese drei Bereiche so zusammenzubringen, dass eine Anwendung daraus wird.

Johannes

Das heißt, ich brauche irgendwoher Daten, die ich handhaben kann.

Johannes

Und diese Daten sind eben in den Modellen definiert.

Johannes

Ich brauche irgendwelche Sachen, die ich anzeigen kann, weil im Endeffekt dann eine Webseite daraus werden soll.

Johannes

Das heißt, ich brauche so ein Template oder in der klassischen Sprache, ich brauche einen View.

Johannes

Und ich brauch irgendwas, was eine Funktionalität darstellt, weil sonst macht meine Webanwendung nichts.

Johannes

Und das ist hier in Django eben der Controller bzw.

Johannes

die View-Funktion.

Johannes

Und nur wenn ich diese drei Teile zusammen habe und wenn die drei Teile so ineinander greifen, dass sie zusammen funktionieren, wird daraus eine Web-Anwendung.

Johannes

Das heißt, der Trick an der ganzen Sache oder der Trick an Django ist eigentlich nicht, dass sie diese drei Dinge gefunden haben oder diese drei Bereiche geschrieben haben, sondern dass die so integriert sind, dass die nahtlos ineinander greifen.

Johannes

Klingt praktisch.

Johannes

Ja, ist es auch.

Johannes

Eine Stelle, an der man das ganz schnell sieht, ist der Django Admin.

Johannes

Das ist eines der am meisten gelobten Module in Django.

Dominik

Also Django Admin ist das Backend-Interface oder eine Seite der Admin.

Johannes

Das ist sozusagen ein genialer Zaubertrick, weil der Django Admin, das ist einfach ein Modul in Django, ja.

Und ich kann das reinladen, das hat eine URL wie alles andere auch.

Johannes

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.

Johannes

Das heißt, ich habe automatisch eine Backend-Funktionalität drin.

Johannes

Ich habe automatisch eine Verwaltungsfunktion drin, die aber meine Modellierung nimmt.

Johannes

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

Johannes

And this is eine sehr schöne Sache, wenn man eben so eine Anwendung zum ersten Mal schreibt and sagt, okay, ich habe mich jetzt an WordPress orientiert, ich möchte einen Blog machen, jeder möchte einen Blog machen am Anfang.

Johannes

Dann gehört dazu eben auch so ein Interface, wo ich die Blogposts bearbeiten kann.

Johannes

And in der ersten Version kann man 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 hinzu verschieben oder sonst was zu machen.

Johannes

Diese ganzen Basisfunktionalitäten, die man immer braucht, die sind im Django Admin schon drin.

Johannes

Das heißt oft CRUD, Create, Read, Update, Delete.

Johannes

Das sind die vier Funktionen, die man immer mit seinen Datenbankdingen tun muss.

Johannes

Und die sind eben schon im Django Admin drin.

Johannes

Und 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.

Dominik

Ist das bei Django ganz individuell oder einzigartig oder machen das die anderen Frameworks, die es in Python gibt, weiß ich nicht, von Flask oder von Pyramid mal gehört, auch so?

Jochen

Nee, also gut, es gibt auch noch andere, die das auch so machen.

Jochen

Aber ich würde sagen, die bekannteren, die das halt komplett integrieren, sind eben Django für Python oder halt eben Ruby und Rails für Ruby.

Jochen

Und wenn man jetzt zum Beispiel Flask nimmt, dann ist das eher ein etwas anderer Ansatz.

Jochen

Da ist es halt so, dass der Layer, also Flask selber enthält kaum Model View-Controller-Funktionalität, die man sonst wo in Django hat.

Jochen

Also es ist halt nicht alles integriert, sondern da kann man sich halt Dinge zusammenstecken, die man benutzen kann.

Jochen

Zum Beispiel der Object Relational Mapper ORM genannt oft, ist halt in Flask meistens SQL Alchemy.

Jochen

Man kann aber auch irgendwas anderes nehmen.

Jochen

Man kann, wie heißt dieses Dings, Pony oder so, was da irgendwie heute irgendwie recht beliebt ist, nehmen oder so.

Man könnte ja auch den Django ORM nehmen.

Jochen

Man könnte auch den Django, genau.

OR was?

ORM Object Relational Mapper.

Johannes

Das ist die Verbindung zwischen der SQL-Datenbank, die eben rohes SQL braucht und der Python-Welt, wo wir ja mit Python-Klassen arbeiten.

Okay, jetzt

Dominik

habe ich das verstanden.

Jochen

Ja.

Jochen

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.

Jochen

Während bei Django kann man das theoretisch auch.

Jochen

Mit manchen Dingen ist es einfacher als mit anderen.

Jochen

Aber ich würde es jetzt nicht unbedingt gerade empfehlen.

Jochen

Also so den Django-ORM auszutauschen ist halt, ja, kann sein, dass das geht, aber das will man wahrscheinlich eher nicht tun.

Jochen

Bevor man das macht, nimmt man dann vielleicht auch besserer Flask oder so.

Jochen

Und ja, das sind halt unterschiedliche Trade-offs.

Jochen

Das hat halt gewisse Vorteile, wenn alles integriert ist.

Jochen

Und es hat halt auch gewisse Nachteile.

Jochen

Es ist halt ein bisschen weniger Flexibilität, es ist eine steilere Lernkurve am Anfang, aber weil einfach viel mehr Funktionalität da ist, mit der man irgendwie sich vertraut machen muss.

Jochen

Aber wenn man da erstmal so durchgestiegen ist, dann ist es halt auch schneller, damit irgendwas zu machen oder das halt auf neue Anforderungen anzupassen, als wenn man das sich jetzt irgendwie immer neu zusammenstöpseln muss.

Dominik

Wie ist das denn zum Beispiel, wenn ihr jetzt so ein Modul benutzt, was es irgendwie schon gibt, wie viel Arbeit wäre das denn jetzt, in so ein neues Framework zu integrieren?

Johannes

Das kommt total auf das Modul an.

Johannes

Diese Fragen kann man so eigentlich nicht beantworten.

Johannes

Die Mentalität, glaube ich, zwischen diesen Frameworks ist auch so ein bisschen unterschiedlich.

Johannes

Flask ist so ein bisschen, du kannst alles benutzen, was du willst.

Johannes

Du musst dann halt selber dafür sorgen, dass die Teile zusammenpassen.

Johannes

Und Django is mehr so ein bisschen, here we have dir einen Bausatz gemacht und du kannst gerne drauf aufbauen, aber die müssen so funktionieren, wie wir das vorgegeben haben.

Johannes

Das heißt eben, wenn ich irgendein Modul habe oder eine Bibliothek, die nicht integriert ist, dann bin ich in Flask sicherlich schneller damit unterwegs, weil ich dann eben sowieso für diese Anbindung sorgen muss.

Johannes

In Django ist es dann eben oft so, dass es schon eine Django-Variante gibt davon, die mir eben genau diese Integration schon gibt.

Johannes

Und dann ist es natürlich leichter, die Django-Variante zu verwenden.

Johannes

Heißt halt aber, dass ich darauf angewiesen bin, dass schon jemand die Arbeit gemacht hat und auch fortlaufend tut, weil die Versionen natürlich ständig aktualisiert werden.

Johannes

Und es hat alles

so seine Vor- und Nachteile.

Dominik

Wie würdet ihr denn einsteigen, wenn ihr jetzt irgendwie jemanden habt, der das noch nie gemacht hat?

Dominik

Möchtet ihr seine erste Website, einen Blog einstellen, das würdet ihr ihm empfehlen?

Dominik

Einfach das Paket installieren und Tutorial lesen oder gibt es das schon eine Best Practice, wo ihr am besten.

Jochen

Ja, also ich würde, das habe ich bisher dann auch immer so gemacht, wenn ich das gefragt worden bin, das Two Scoops auf Django-Buch zu empfehlen.

Jochen

Also das jetzt ist halt momentan nicht mehr so richtig super aktuell.

Jochen

Ich glaube, die letzte Auflage ist für Django 1.111 und wir sind jetzt aber auch eigentlich schon bei 2.1.

Jochen

Da kommt dann wahrscheinlich für die nächste stabile oder lang, länger supportete Release von Django wahrscheinlich auch wieder eine neue Version.

Jochen

Aber da wird eigentlich mal so grob beschrieben, wie man Dinge tut mit Django und so, ja.

Jochen

Also ich fand das, ich habe damals auch quasi einen Aninstieg in Django über dieses Buch gefunden.

Jochen

Das war irgendwann 2013 oder so, weil ich irgendwie in einem Projekt plötzlich mit einem Django-Backend konfrontiert war und dann, ja, mir auch gesagt wurde, dann liest doch mal einfach dieses Buch und dann macht alles Sinn plötzlich.

Jochen

Und so ein bisschen war das schon so.

Jochen

Also das war das war sehr, sehr hilfreich.

Jochen

Ja, man kann aber auch mit der Dokumentation, die sehr gut ist anfangen, oder ich weiß nicht, vielleicht mit einem von Johannes Krusen.

Oder Textbook.

Johannes

Nee, ich mach das tatsächlich nicht so.

Johannes

Ich mag dieses Two Scoops of Django Buch nicht ungeheuer gerne, weil es sehr viele eigene Meinungen schon mitbringt.

Johannes

Und weil man die erst bemerkt, wenn man sich so ein bisschen mehr damit auskennt.

Johannes

Ich meine, es ist nicht schlecht, ja.

Johannes

Und die Leute, die das machen, sind auch Experten und wir benutzen auch sehr viel davon.

Johannes

Wir werden vielleicht noch über Cookie Cutter sprechen.

Johannes

Aber ich finde, es ist schon, es hat schon zu viel Flavor.

Johannes

Es ist schon zu viel, zu weit von dem Vanilla Django weg von dem Discord.

Dominik

Das sind ja noch mehr Freiheiten, die du selber gerne kreativ ausleben würdest, wenn du genau verstanden hättest, wie es funktioniert.

Johannes

Genau, and das bedeutet auch, dass man eben auf diese Wahl festgelegt ist, die die Leute von ToScoops of Django schon getroffen haben für uns.

Johannes

Weil die eben, wie gesagt, ihre Meinungen haben und weil die sagen, okay, du solltest eigentlich immer diese bestimmten Systeme verwenden und eben nicht diese anderen.

Dominik

Hast du das schon getan, so ein Beispiel?

Johannes

Ja, zum Beispiel, wenn die ihre Docker-Container bereitstellen.

Es gibt oft Situationen, wo man eben keine Docker-Container haben möchte.

Johannes

Das ist halt aber bei denen einfach so.

Johannes

Die haben alles dockerisiert.

Ist einfach so eine Sache.

Johannes

Oder die benutzen Django-Crispy Forms, wo ich am Anfang sehr damit zu kämpfen hatte, weil es gar nicht dem entspricht, wie ich das

machen möchte.

Dominik

Das müssen wir vielleicht gleich nochmal kurz erklären, was ein Docker-Container ist und was eine CRISPR-Form ist.

Johannes

Das sind einfach nur so zwei Beispiele, wo Two Scoops of Django schon was ausgewählt hat, was man eventuell anders machen würde.

Johannes

Unwichtig, was das jetzt genau bedeutet oder was das jetzt genau ist.

Johannes

Ich fange üblicherweise mit dem Tutorial an auf der Webseite.

Johannes

Weil es zum einen relativ gut geschrieben ist.

Die Django-Dokumentation ist erstklassig, die ist einwandfrei, die ist super.

Kann ich jedem nur empfehlen.

Johannes

Auch wenn man nur die Django-Dokumentation liest und das alles mehrmals angeschaut hat, dann ist man Experte in den Django-Entwickler.

Johannes

Und das Tutorial ist einfach ein schneller Einstieg in was muss ich tun, um eine Funktionalität zu kriegen.

Johannes

Aber eigentlich würde ich noch einen Schritt vorher anfangen, wenn sich jemand da einlesen möchte, oder wenn jemand anfangen möchte, mit Django zu programmieren, is meine Empfehlung immer erstmal einen Schritt zurück zu gehen und zu überlegen, genau was man eigentlich erreichen möchte.

Johannes

Weil es oft schwierig ist, das gleichzeitig zu machen, gleichzeitig zu lernen, wie man etwas erreicht, und herauszufinden, was man eigentlich erreichen möchte.

Dominik

Das heißt, du würdest dir an ein Projekt ausdenken, was sie dann umsetzen möchte, ob es jetzt Freizeit ist oder irgendwie nebenbei oder schon was Professionelles und dann direkt an dem Projekt konkret sich die Lösung aus Django dann zu erarbeiten.

Genau.

Johannes

Und vielleicht auch einfach mal konkret zu sagen, was muss ich haben an Funktionalität, um mein Ziel erreicht zu haben.

Dominik

Mach das dann richtig mit Stift und Papier oder auf einem Whiteboard oder malst du da eine Kreidetafel voll?

Johannes

Je nachdem, wo ich gerade bin und was gerade für Werkzeuge da sind.

Johannes

Wenn ich nur einen Texteditor da habe, dann schreibe ich mir halt ein paar Punkte in den Texteditor rein.

Johannes

Wenn ich die Wachsmalstifte von meinem Kleiding dabei habe, dann male ich mir was auf die Hand.

Johannes

Nee, es ist einfach nur wichtig, ein Bild davon zu haben, was man erreichen möchte.

Johannes

Zu wissen, wo ich es ein Blog sein, was YouTube-Videos anzeigt, oder soll es ein Podcast-Blog sein?

Or a Blog sein, where I don't know, my texture, there are builder remains, yeah, or no.

Johannes

Loud of the things that for this product entered, and they actually in this project, but when we argue, not so much.

Johannes

And this is for me a wicked thing, that I know where I hit.

Johannes

Then muss man.

Johannes

But man will trot where man möchte.

Dominik

Is it sinnvoll, so from Scratch total anzufangen, alles selbst zu bauen, oder nimmt man dann direkt so etwas wie ein Template aus einem Cookie-Cutter?

Dominik

Vielleicht, Jörg, kannst du nochmal kurz erzählen, was das überhaupt ist?

Jochen

Also genau, also ein Problem bei Django ist halt, da ist schon relativ viel Funktionalität enthält und viele Teile und man möglicherweise für ein System, was dann hinterher irgendwas tun soll, wie einen Block implementieren oder so, noch viel mehr Kram braucht.

Jochen

Da braucht man halt möglicherweise noch eine Anbindung an ein Cache-Backend, eine Redis oder sowas, man Cache die, braucht vielleicht irgendwie eine Volltext-Suchmaschine, die man dann noch mit drin hat.

Jochen

Man hat vielleicht irgendwelche Background-Tasks, die laufen müssen und so weiter und so weiter.

Jochen

Da gibt es noch eine ganze Menge Dinge, die man halt irgendwie einstellen muss und wo man Entscheidungen treffen muss.

Jochen

Und das ist doch relativ überwältigend, denke ich mal, für jemanden, der eigentlich nur mal einen Block schreiben wollte und mal schnell irgendwie eine Django hochziehen wollte.

Jochen

Und da gibt es dann halt so ein Tool, nennt sich Cookie Cutter, das ist auch von den Autoren von Two Scoops auf Django oder beziehungsweise von einer der beiden Autoren und das legt dann halt so ein Projekt quasi an.

Jochen

Da werden am Anfang im Grunde genauso ein paar dieser Fragen gestellt, halt so möchtest du Docker oder lieber nicht oder brauchst du eigentlich Hintergrundtasks wirklich.

Jochen

Und wenn man das angegeben hat, dann wird quasi aus den, wenn halt die Template-Variablen, die im Projekt-Template drin sind, ersetzt durch konkrete Werte, also man gibt dem Projekt halt einen Namen und so, der wird dann relativ oft eingetragen und dann wird halt so ein Projekt erstellt.

Jochen

Und das läuft dann halt auch direkt von Anfang an.

Jochen

Und damit hat man dann ja quasi schon mal einen großen Schritt geschafft, weil bis dahin zu kommen möglicherweise auf anderem Weg relativ lange dauern könnte.

Jochen

Auf der anderen Seite hat man dann natürlich das Problem, dass man nicht genau weiß, was passiert ist und man halt jetzt auch viele sozusagen Einstellungen schon vorgenommen sind, von denen man jetzt gar nicht genau weiß, ob man die wirklich so haben wollte oder nicht.

Jochen

Und ja, die man auch nur noch schwer ändern kann und man versteht nicht so genau, was da passiert.

Jochen

Und das ist natürlich in gewisser Weise so ein Nachteil.

Jochen

Also, aber es ist, denke ich, schon halt irgendwie eine Möglichkeit, relativ schnell zu einem funktionierenden System zu kommen.

Jochen

Und ja, darauf aufbauen kann man dann ja weitermachen.

Jochen

Aber ja, es kann einem eine Menge Arbeit ersparen.

Jochen

Ich mache das meistens so, wenn ich neue Projekte irgendwie aufmache, dass ich halt dann irgendwie das Django Cookie Hutter Template benutze.

Jochen

Aber ja, das trifft dann natürlich schon eine ganze Menge Entscheidungen, die man vielleicht auch anders treffen können wollte.

Dominik

Klingt, aber das könnte man es gut gebrauchen für Projekte, bei denen man schon relativ genau weiß, was man will.

Jochen

Ja.

Jochen

Naja, also ich meine, ich hab, das ist halt dann die Frage, ob man sozusagen das, was man tun möchte, den eigenen Bedürfnissen anpasst oder die eigenen Bedürfnisse halt so ähnlich wie eine SAP-Einführung.

Jochen

Wenn man sich dafür entscheidet, das zu verwenden, dann muss man halt die eigenen Prozesse so umstellen, dass sie zu SAP passen und dann geht das halbwegs.

Jochen

Und bei Cookie Cutter ist es halt auch so, man muss dann die Dinge so machen, wie dieses Template, das halt irgendwie quasi vorgibt.

Jochen

Und wenn man das anders machen will, hat man Schwierigkeiten oder dann ist es halt nicht mehr so hilfreich, weil da muss man wieder eine ganze Menge von Hand ändern, was man ja eigentlich vermeiden wollte, indem man Cookie Cutter verwendet, daher.

Jochen

Es ist halt so eine, also wenn man sich quasi damit abfindet, dass alles so ist, wie das in dem Template halt vorgesehen ist, dann ist es eigentlich ganz nett.

Jochen

Also dann, wenn man das nicht so nicht so toll findet, dann hilft es einem halt nicht.

Jochen

Dann muss man vielleicht ein eigenes Template machen oder so.

Johannes

Viele Sachen, die in dem Cookie-Cutter-Template drin sind, gehen für mich so ein bisschen in Richtung Produktivbetrieb.

Johannes

Die nehmen einem viel Arbeit weg, wenn man dann Produktivbetrieb hat.

Johannes

Die haben Sachen drin für Content Delivery Networks und die haben Sachen drin für Docker und die haben Sachen drin für Cached oder für sonst irgendwelche Sachen.

Johannes

Ich glaube, wenn man zum ersten Mal so ein Projekt macht, ist es einfacher, vom Scratch anzufangen.

Johannes

Weil man viele von diesen Sachen dann einfach nicht braucht.

Johannes

Das Blog, was man da als erstes mal entwickelt, wird sicherlich nicht gleich 100.000 Hits pro Minute haben.

Woher willst du das denn wissen?

Johannes

Also meine Blogs haben nie so viele gehabt.

Johannes

Vielleicht habt ihr mehr Erfolg als ich, ich wünsche es euch.

Johannes

Aber es ist sicherlich nicht die erste Ausrichtung.

Johannes

Es wird sicherlich nicht das erste Problem sein, dafür zu sorgen, dass das die ganze Welt gleichzeitig lesen kann.

Johannes

Sondern das erste Problem wird sicherlich sein, dafür zu sorgen, dass es irgendjemand lesen kann.

Und das überhaupt läuft, vielleicht.

Genau, dass es überhaupt läuft.

Johannes

Dass man überhaupt einen Block hat.

Johannes

Und ich glaube, dann ist es einfacher, mit dem Puren, mit dem Basis-Django umzugehen.

Dominik

Habt ihr ein Lieblingsmodul, ein Lieblings-Template?

Dominik

Also wenn ihr jetzt das schon irgendwo einsetzt in Produktivbetrieb oder.

Johannes

Das ist eine schwere Frage, weil da oft sehr viele Sachen zusammenkommen.

Johannes

Weil man oft sehr, sehr viele Bibliotheken reinlädt, die alle nur einen kleinen Teil machen.

Johannes

Das ist so, wenn ich die Frage, welches Lego-Teil ist denn dein Lieblings-Lego-Teil?

Ritterburg.

Johannes

Ja, aber das ist ja kein einzelnes Teil.

Johannes

Das sind ja gleich hier was sehr Großes zusammengegeben.

Dominik

Also viele kleine Steine dabei, glaube ich, ja.

Johannes

Genau, und die einzelnen Steine an sich sind alle nicht super interessant, aber wenn man sie dann sowas zusammengebaut hat, dann ist das, was man gebaut hat, super interessant.

Dominik

Okay, aber gut, aber du weißt ja dann schon, welche Steine du dann brauchst, damit du dann irgendwie sowas gießen kannst.

Dominik

Ja, klar.

Dominik

Also das heißt, man hat sich schon so einen Workflow, an dem man sich dann gewohnt und er ist dann auch irgendwie individuell.

Ja, okay.

Johannes

Ja, aber auch da, also ich, ich jedes Mal, wenn ich mit Leuten zusammenarbeite, dann bin ich wieder überrascht davon, wie unterschiedlich man die Sachen machen kann.

Johannes

Nicht schlechter oder besser bei irgendjemandem, aber einfach so unterschiedlich.

Johannes

Auf viele Sachen, die der Jochen macht, komme ich einfach gar nicht.

Johannes

Und das wird sicherlich umgekehrt sein.

Dominik

Genau das fände ich jetzt total interessant, also so Sachen von euch noch zu hören, wo sonst jemand auf gekommen ist, wo sagt so, hey, denk doch mal drüber nach, das wäre ein toller Tipp.

Dominik

Macht das doch mal diesen Weg oder.

Jochen

Ja, also wenn ich da quasi eine App nennen sollte, wäre das wahrscheinlich Django Image Kit tatsächlich.

Dominik

Django Image Kit.

Jochen

Ich habe da mal so einen so einen Blog in Django geschrieben und bin relativ bald auf das Problem gestoßen, dass man, wenn man jetzt so, ja, wir haben 2018, will man schon so irgendwie responsive Images haben und dass das halt auch auf dem Handy irgendwie einigermaßen aussieht.

Jochen

Aber man möchte jetzt auch nicht alle Bilder in riesig groß ausliefern, wenn man ja eben auch gerade auf dem Handy und so.

Jochen

Und da muss man ja dann was tun.

Jochen

Also da gibt es Unterstützung in HTML5 durchaus, was solche Probleme angeht.

Jochen

Aber man muss das ja jetzt auch dann noch irgendwie backendseitig hinbekommen.

Jochen

Also es muss halt die Bilder in unterschiedlichen Größen geben, man muss halt irgendwie die entsprechenden Text so rausschreiben, dass halt Source-Set-Attribut und vielleicht irgendwie noch andere Geschichten, Picture-Element so gesetzt sind, wie man das irgendwie haben will.

Jochen

Und ich war etwas überrascht, dass es da in Django quasi überhaupt gar nichts gibt.

Jochen

Also da gibt es zwar ein Image-Field, aber das war es auch schon.

Jochen

Das kennt dann halt irgendwie so noch Höhe und Breite gegenüber dem File-Field einfach, wenn man das verwendet.

Jochen

Aber das hat eigentlich nicht viel Funktionalität dafür, sozusagen für diesen Use Case, den man oft hat, dass man das Bild wirklich auf einer Webseite anzeigen will.

Jochen

Und dann habe ich so ein bisschen geguckt und dann gibt es irgendwie so diverse Thumbnail-Libraries und so, die sind aber alle, die haben halt diesen Thumbnail-Use Case irgendwie, aber waren nicht so richtig das, was ich irgendwie da gesucht hatte.

Jochen

Und dann habe ich dann irgendwie was selber implementiert und dann irgendwie ein paar Wochen später oder so lief mir Django Image-Kit über den Weg, das quasi, also ich weiß nicht, das waren schon bei mir so, keine Ahnung, ein paar hundert Zeilen, Python oder so, die ich da geschrieben hatte.

Jochen

Und es war alles so ein bisschen hässlich und ich wusste auch, dass es alles nicht schön war.

Jochen

Und das hat das halt komplett ersetzt.

Jochen

So, ich musste es nur noch importieren und habe dann irgendwie da so meine Spec-Dinger an die an die Images rangeschrieben, sozusagen, welchen Größen ich das haben möchte.

Jochen

Und dann war es das.

Jochen

Voll gut.

Jochen

Also hat dieses Problem irgendwie für mich mehr oder weniger erledigt und das fand ich sehr hilfreich.

Jochen

Und daher denke ich, das ist etwas, was andere auch interessieren könnte.

Jochen

Weil den Fall, dass Bilder, dass man Bilder ausliefern will auf einer Webseite, den hat man ja doch relativ oft.

Dominik

Klingt nach tollen Geheimtipps tatsächlich.

Also genau.

Jochen

Das ist jetzt nicht so ein Geheimtipp, das Ding ist relativ bekannt und das ist ein bisschen komisch vielleicht, dass ich es nicht kannte, aber es ist oft so, dass man.

Dominik

Ja, es ist oft, dass man als Anfänger irgendwo drüber stolpert und gar nicht weiß, wo man anfangen soll und das ist so viel, da kriegt man doch gar nicht mit, was ist jetzt wichtig und was nicht.

Dominik

Aber ja, gerade für so responsive Implementation, glaube ich, ist das ein super Tipp.

Johannes

Ich glaube nicht nur, glaube ich, nicht nur als Anfänger so, weil das ist total das gute Beispiel, was der Jochen jetzt bringt, weil ich habe Django ImageKit noch nie benutzt.

Johannes

Das ist ein bisschen ein Problem in der Django-Welt.

Johannes

Die ist so groß, dass es für eigentlich alles was gibt, aber man muss es erst finden.

Johannes

Und man muss erst das finden, was zu einem passt.

Ich habe ImageKit noch nie benutzt.

Johannes

Ich benutze Wagtail und da ist das immer integriert.

Dominik

Ich muss das kurz in die Shownutzes notieren.

Johannes

Der hat auch schon eine Bildverarbeitung.

Johannes

Wagtail ist eigentlich ein Bausatz für Content Management-System.

Johannes

Also es ist quasi ein Framework, was nochmal oberhalb von Django ist, was noch mehr Sachen mitbringt.

Johannes

Und der hat eben auch gleich dieses Bildproblem mitgelöst und deshalb nutze ich das immer gleich für meine Bilder auch.

Dominik

Ein Wagtail, okay, okay.

Dominik

Kommt von einem Universum ins nächste, ich glaube, da kann man Bücher, Wochen, Kurse mitfüllen.

Dominik

Also das war wirklich sehr interessant.

Jochen

Ja, wobei ich mich jetzt also auch interessieren würde, wie hat Wagtail das Problem dann gelöst?

Jochen

Kann man, gibt es irgendwie Default-Einstellungen, die man machen kann, welche Bildgrößen gerechnet werden sollen und wie werden die dann tatsächlich gerechnet?

Jochen

Ich meine, sobald ein Bild hochgeladen wurde, werden dann die neuen Bilder erstellt oder erst beim Zugriff und dann gecached oder.

Johannes

Das kannst du alles einstellen.

Johannes

Ah, okay.

Johannes

Da gibt es ein Modul, das heißt Wagtail Images.

Johannes

Um mal kurz ein bisschen breiter auszuholen.

Johannes

Wagtail ist eine Sammlung von Modulen, die das Bauen von CMS-Systemen, also von Content Management-Systemen, erleichtern sollen.

Johannes

Es gab da schon was, das heißt Django CMS, das ist relativ alt.

Johannes

Hat auch mehr so diesen Flask-Ansatz.

Johannes

Hier sind 15 Module, bau sie zusammen, wie du willst.

Johannes

Wagtail hat mehr so diesen integrierten Ansatz.

Johannes

Du musst im Wesentlichen nur noch sogenannte Seitenmodelle liefern.

Johannes

Also du musst sagen, was auf einer Seite drauf sein soll für Felder.

Johannes

Und dann gibt es den Ragtail-Admin, der diese Felder eben, der diese Seiten eben inspiziert und mit reinnimmt und kriegst dann automatisch eben so eine Baumstruktur mit Revisionen und Freigabeprozess und eben Medienverwaltung auch mit dazu.

Johannes

Und die Medienverwaltung ist relativ flexibel, es gibt so Default-Dinger, die eingestellt sind.

Johannes

Standardmäßig ist eingestellt, dass die Bilder beim Zugriff erstellt werden und dann gecached werden.

Johannes

Das heißt, wenn du einmal dieses Bild in einer bestimmten Größe angefordert hast, dann ist es für immer sozusagen da und wird nicht nochmal neu erzeugt.

Johannes

Das heißt, das ist so ein bisschen die Mitte zwischen den beiden Extremen.

Johannes

Immer alles sofort anlegen und immer alles neu berechnen.

Johannes

Das wird berechnet, wenn es zum ersten Mal angefordert wird und dann wird es abgelegt.

Johannes

Eine Funktion, die mich ungeheuer beeindruckt hat, die sie einfach mal so eingebaut hatten, ist Content-Aware Resize.

Johannes

Es ist so ein bisschen magisch und man muss das ein kleines bisschen freischalten.

Johannes

Aber wenn man es einmal eingestellt hat, dann heißt das, dass wenn OpenCV installiert ist, dann versucht er interessante Bildbereiche zu finden.

Johannes

Und wenn ich eine kleinere Version von dem Bild anfordere, dann wird nicht einfach der Rand weggeschnitten oder kleiner gemacht, sondern er zoomt dann quasi auf diesen Bereich rein.

Johannes

Das heißt, wenn ich ein Bild habe, wo a person drauf is, dann wird auf the gist der Person verkleinert.

Johannes

And this, I have this iron mal in so a forstelling game from Features in Wagtail, and this is so magic.

Johannes

They have this flag angema, and then plotly take them not a verkleinerte Version of iron, or where the render abgeschnitten werden, but they zoomed tatsächlich auf die interessanten Bereiche rein.

Johannes

And that sowas in so eine Bibliothek einfach reinkommen kann, ist eine total geniale Sache auf der einen Seite, weil man eben ganz viele Funktionen da mitkriegt, but it is also a bit furchterregend, weil man eben ganz viele Funktionen drin hat, von denen man vielleicht gar nicht weiß, dass die da drin sind oder von denen man vielleicht gar nicht will, dass die da drin sind.

Johannes

Und es ist so ein bisschen schwierig, da oft abzuwägen, will ich sowas in mein Projekt reinholen oder nicht.

Okay.

Jochen

Ja, ich weiß jetzt natürlich nicht, wie dieses Feature technisch umgesetzt ist, aber genau.

Jochen

Da gibt es halt quasi in HTML5 so ein so ein, da gibt es das Picture-Element und das kann halt im Grunde, die nennen das da Art Direction, sozusagen, dass man angeben kann, welcher Bildbereich beim Verkleinern sichtbar bleiben soll und so.

Jochen

Und wenn Wagtail das so benutzt, dann wäre das natürlich sehr cool.

Jochen

Es konnte natürlich auch einfach das Bild irgendwie umrechnen oder so und das wäre halt alles so, das kommt halt drauf an, wie das implementiert ist.

Jochen

Und eigentlich würde man sich ja dann vielleicht auch ein Frontend wünschen, mit dem man festlegen kann, okay, also dieser Bereich in dem Bild ist jetzt etwas, was nicht rausverkleinert werden soll.

Jochen

Aber da habe ich eben auch nichts gefunden.

Jochen

Ich habe mir natürlich, also als ich da irgendwie mein mein persönliches Blog irgendwie angefangen habe zu schreiben, habe ich mir angeguckt, wie sieht das eigentlich aus, wenn ich jetzt einen WordPress-Blog aufmache, was passiert denn eigentlich da mit den Bildern?

Jochen

Und dann sieht man da so, ja gut, also die machen das im Grunde, da werden dann halt auch ein paar Größen vorgerechnet und die werden dann halt mit ausgeliefert als Horset.

Jochen

Und man hat so ein bisschen, kann man an dem Bild was machen, man kann irgendwas beschneiden oder man kann halt irgendwie die quasi so ein paar Editiergeschichten machen, aber letztendlich kann man zum Beispiel, was dieses Picture-Element kann, kann man auch in WordPress alles nicht setzen.

Jochen

Und es gibt eigentlich kaum Frontends für all die Möglichkeiten, die man jetzt mit dem Picture-Element hätte.

Jochen

Und ja, das ist halt, äh, genau, wenn das automatisch passiert, dann ist er halt immer die Gefahr, dass dann Dinge, Dinge hinterher zu sehen sind, die gar nicht so, wo niemand, ja, wenn er das manuell getan hätte, das ausgewählt hatte.

Jochen

Aber ja, also die Möglichkeiten sind natürlich schon groß.

Dominik

Du hattest eben gesagt, dass es Probleme machen könnte, so viele Module in einen Dango zu packen, die man gar nicht möchte.

Dominik

Hat was dann Sicherheitsbedenken, die du dann da bekommst?

Johannes

Ja, Sicherheitsbedenken habe ich da eigentlich relativ wenige.

Johannes

Dadurch, dass da einige Sicherheitsstandards in Django selbst umgesetzt sind, sind so diese ganzen Unsicherheiten, die man so kennt, die sind da alle direkt ausgeschlossen.

Johannes

Also es gibt diese ganz bekannte Sicherheitslücke SQL Injection, dass man eben die Datenbank dazu bringt, aber man muss dann schon die verborgenen Features benutzen, that actually not.

Johannes

And this is in Django directly with so much, ein Ruhe SQL daraus zu finden.

Johannes

A normaler Entwickler wird niemals dieses Problem haben, da eine SQL-Injection in Django zu haben.

Johannes

It is more so eine weniger eine Frage der Sicherheit, es ist eher eine Sache der Handhabbarkeit.

Johannes

Komme ich als Entwickler dann noch damit klar, was ich mir jetzt alles reingeholt habe?

Johannes

Oder habe ich vielleicht Sachen reingeholt, die die gleiche Funktion erfüllen?

Habe ich vielleicht WagTile und Django Image Kit reingeholt.

Johannes

Und dann stehe ich da und habe zu viele Optionen in der Hand, als dass ich dann weiterentwickeln könnte.

Johannes

Oder als ich dann sinnvoll weiterentwickeln könnte.

Johannes

Weil es eben für jede Sache, die ich machen kann, eventuell mehrere Optionen gibt.

Johannes

Das ist sicherlich von außen nicht sichtbar.

Johannes

Wenn die Anwendung dann fertig ist oder wenn die irgendwie mal benutzt wird, wird der Benutzer das sicherlich nicht sehen können, dass wir da diese Probleme reingeholt haben, indem wir zu viele Module reingeladen haben.

Johannes

Es ist dann eher was, was die Entwickler betrifft.

Johannes

Wie können wir jetzt noch weiterentwickeln, wenn wir drei oder vier verschiedene Sachen haben, die genau das gleiche machen?

Jochen

Ja, und wenn man dann Abhängigkeiten hat, man ist beispielsweise in einem Teil der Applikation abhängig von einer bestimmten Version irgendeiner von irgendeinem Django Third-Party-App oder so.

Jochen

Und im anderen Teil ist man von was anderem abhängig, dann hat man plötzlich Schwierigkeiten zu updaten.

Jochen

Das macht halt die Entwicklungsgeschwindigkeit langsam, wenn man sich quasi so unnötigerweise viele Abhängigkeiten nach außen reinholt.

Jochen

Während wenn man das halt sinnvoll beschränkt, dann kommt man halt eigentlich immer ganz gut halt auch mit Updates klar.

Dominik

Wenn ich denn jetzt so eine Auswahl habe, ich habe jetzt mehrere Optionen.

Dominik

Wen frage ich denn da, welche von diesen Optionen für mich jetzt die bessere wäre?

Tja, das

Johannes

ist eine sehr gute Frage und wenn ich die beantworten könnte, dann wäre auch mein Leben viel einfacher.

Johannes

Vieles davon läuft eben über Gespräche.

Johannes

Man spricht mit den Leuten in seinen Python User Groups oder in seinen Django User Groups oder auf den Konferenzen oder mit den Kollegen, mit denen man vielleicht zusammenarbeitet.

Johannes

Und jeder wird da sicherlich Dinge wissen, von denen man selbst noch nie gehört hat, egal wie lange man in dem Business drin ist.

Johannes

Jochen und ich sind ja jetzt beide schon länger unterwegs und wir können uns sicherlich, wenn wir uns da einen Abend lang unterhalten, finden wir beide zehn Sachen, die der andere noch nicht wusste oder die der andere noch nie benutzt hat.

Johannes

Es gibt eine Webseite, die heißt Django Packages, die versuchen so ein bisschen das zu sortieren und die versuchen so ein bisschen da diese Themenbereiche aufzuarbeiten und das vielleicht auf so ein bisschen eine rationale Ebene zu ziehen, muss man sozusagen, wo sie einfach sagen, okay, was gibt es denn zum Bereich, keine Ahnung, Bildbearbeitung?

Johannes

Und wie stabil ist das und wie viele Leute benutzen das?

Johannes

Und für welche Django-Versionen ist das geeignet und welche Features hat das, dass man einfach mal so eine Übersicht haben kann.

Dominik

Du kannst mir so eine kleine Scorecard bauen, also was ist jetzt für meinen Nutzen vielleicht das empfohlenste Paket.

Johannes

Genau, beziehungsweise man sieht dann einfach erstmal, was es gibt überhaupt.

Johannes

Das ist schon, das ist oft einfach eine sehr große Hilfe, wenn man sieht, okay, es gibt hier 15 verschiedene Bibliotheken, aber 10 davon sind schon seit Jahren nicht mehr geupdatet worden.

Johannes

Dann kann ich die gleich aus der Betrachtung rausziehen.

Johannes

Vielleicht auch, wenn ich mir die vorher schon angeguckt hatte und die sehr gut aussahen.

Johannes

Wenn es keine Updates mehr gibt, dann ist das oft ein Anzeichen dafür, dass die Entwickler sich es anders überlegt haben oder dass sie vielleicht in ein anderes Projekt reingemerged sind.

Dominik

Kann nicht sein, dass auf einmal so ein Ding fertig ist.

Johannes

Das kann auch sein, aber es ist unwahrscheinlich.

Johannes

Wann wird es Software je fertig?

Jochen

Und jede neue Version von Django bietet natürlich auch Möglichkeiten, Dinge wieder neu oder anders oder einfacher zu machen.

Jochen

Und dann eigentlich wahrscheinlich nicht immer, aber ab und zu muss man halt doch mal was anfassen und wenn man nichts mehr anfassen muss, dann ja, eben ist das eher ein Zeichen dafür, dass es nicht mehr richtig maintained wird.

Jochen

Und ja, Django Packages wird übrigens von einem der beiden Autoren.

Jochen

Du scopst aufs Django betrieben, dem, der auch Crispy Forms geschrieben hat, was erklärt, warum es die Präferenz ist.

Jochen

Ja, also die machen da ganz viel.

Jochen

Und ja, Django Packages ist tatsächlich eine große Hilfe.

Jochen

Aber ja, so oft ist es auch schwer zu erkennen.

Jochen

Also ich finde das oft nicht so einfach, wenn man jetzt irgendwie ein Problem hat, das man gelöst haben möchte.

Jochen

Und man jetzt hat man da so eine Auswahl von zehn unterschiedlichen Paketen.

Jochen

Es ist wirklich nicht einfach zu sagen, ja, welches davon man nehmen sollte.

Dominik

Ohne jetzt alle zu kennen schon.

Jochen

Genau, das kann man ja auch gar nicht.

Jochen

Man kann die gar nicht alle kennen.

Jochen

Und selbst wenn man dann mal zwei, drei reingeguckt hat, dann ist das nicht so einfach zu sagen.

Jochen

Und dann, ja, manchmal muss man halt dann Glück haben oder irgendwie sich später nochmal umentscheiden.

Jochen

Aber das ist tatsächlich ein großes Problem.

Jochen

Also wie wählt man die Software aus, von der man abhängig sein möchte?

Jochen

Das ist

Johannes

und jeder baut so mit der Zeit seine eigenen Vorlieben und seine eigenen Präferenzen auf.

Johannes

Die sind schwer austauschbar.

Johannes

Es ist super interessant, sich darüber zu erhalten, aber sie sind sehr schwer austauschbar.

Dominik

Gibt es was wie gute und schlechte Module oder ist das eher nur eine Präferenzenfrage?

Es gibt sicherlich gute und schlechte Module,

Johannes

aber nicht in so einer absoluten, nicht auf so einer absoluten Ebene.

Also ich könnte jetzt nicht auf irgendeinem Modul zeigen und sagen, das ist schlecht.

Wenn du das benutzt, dann bist du ein schlechter Mensch.

Jochen

Ja, doch, das Cookie-Law-Modul vielleicht.

Jochen

Wenn man keine Cookies einsetzen müsste, wenn man keine Cookies hat.

Jochen

Aber es gibt ganz viele Leute, die sowas anschalten und gar keine Cookies haben oder so.

Johannes

Ja, aber das ist ja in Django immer so.

Johannes

In Django hast du immer den Session-Cookie.

Also müsstest du eigentlich immer.

Johannes

Auch wenn du Sessions gar nicht benutzt, hast du ja immer ein Session-Cookie.

Johannes

Also müsstest du eigentlich immer das Modul direkt einschalten.

Jochen

Muss dann die Cookie-Warnung tatsächlich auch bei Sessions, ich dachte nur, wenn man tatsächlich ein persistentes Cookie setzt im Browser.

Soweit ich weiß,

Johannes

muss man es immer, wenn du Informationen über den Benutzer speicherst.

Und das tust du ja in dem Moment.

Jochen

Ah, okay, ja, da muss man es immer.

Mist.

Dominik

Okay, das klingt super.

Dominik

Also nach den Themen, die wir schon immer machen wollten.

Dominik

Ich glaube, Artikel 6 oder sowas ist das spannend.

Dominik

Da kann man einfach sagen, hey, das muss ich machen, deswegen darf ich das auch und dann müsst ihr einfach mit zufrieden sein.

Dominik

Ich muss euch da gar nicht Bescheid geben und gut ist.

Johannes

Ja, klar, es gibt ja auch verschiedene Arten, wie man damit umgehen kann.

Ich habe neulich eine Cookie-Marnung gesehen, da stand einfach nur drin, wir müssen sie informieren, dass wir Cookies setzen.

Johannes

Das haben wir hiermit getan.

Ja.

Dominik

Da kann man sich ja vor Gericht streiten, was ausreichend war.

Johannes

Ja, aber.

Jochen

Mir fällt das schwer, das zu verstehen manchmal, was da bestimmte Regulierungen irgendwie eigentlich nutzen sollen.

Jochen

Und Leuten, die da noch weniger an zum Beispiel EU-Verordnungen dran sitzen in den USA, denen fällt das möglicherweise noch schwerer und dann kriegt man teilweise so fast schon passiv-aggressiv anmutende Geschichten.

Jochen

So, willst du die Seite wirklich weiter benutzen?

Jochen

Dann drück jetzt die Meldung.

Ja.

Jochen

Naja, gut.

Jochen

Wahrscheinlich muss man einfach damit leben, dass es halt manchmal ein bisschen nervig ist, wenn man Dinge

Dominik

geregelt wird.

Dominik

Und dann haben die Leute, die das nicht verstehen, irgendwann ausgedient und dann kommen Leute, die es ein bisschen besser verstehen.

Dominik

Die sagen dann, äh, mach den Schrott weg oder so.

Dominik

Hoffentlich.

Dominik

Man weiß es nicht, kann natürlich immer alles schlimmer werden, aber ich glaube mir mal, dass gute Menschen, ja.

Jochen

Ja, das ist ja immer Politik irgendwie zwei Schritte vor, drei zurück.

Jochen

Nein, warte mal, drei Frohe hat zwei zurück, hoffentlich.

Oder im Kreis kann man auch mal sagen.

Ja, ja.

Dominik

Was habt ihr Neuigkeiten für Django?

Dominik

Ist euch da was eingefallen, was in letzter Zeit da zukam, wo ihr sagt hast, ey, wow, guckt euch das unbedingt nochmal an?

Johannes

Es gibt da eigentlich immer neue Sachen zu sehen.

Johannes

Django hat vor kurzem seinen, ja vor kurzem, vor langer Zeit, hat schon seit langer Zeit einen sehr schnellen Release-Zyklus.

Entschuldigung, was heißt schnell?

Johannes

Schnell heißt, dass die sagen, alle neun Monate kommt eine neue Version von

Django raus.

Dominik

Immer ein nächstes Baby dann, ja.

Genau.

Johannes

Und jede dritte Version von Django ist eine sogenannte LTS-Version, eine Long-Time-Support oder Long-Term-Support.

Das heißt, dass die mindestens für Jochen Kurimech drei Jahre

Sicherheitsupdates haben.

Und das heißt, dass es ab jetzt regelmäßig neue Major-Versionen gibt, weil die eben dieses Namensschema angestellt haben.

Johannes

Wir sind jetzt gerade bei Django 2.1.

Johannes

Die nächste Version 2.2 wird eben so eine LTS-Version sein, die dann für längere Zeit gültig ist oder unterstützt wird, muss man so zu sagen.

Und die Version danach ist Django 3.0.

Johannes

Und üblicherweise erwartet man ja bei Versionssprüngen immer viele Neuigkeiten.

Johannes

Und ich glaube, dass das auch hier so sein wird.

Johannes

Also der Sprung von 1.11, was die letzte, was die gerade aktive LTS-Version ist, auch 2.0, da waren schon einige Sachen drin, die sich deutlich geändert haben.

Johannes

Das, was sicherlich, oder was für mich am offensichtlichsten war, ist der Sprung von URL zu Path, wo sich die Definition der verfügbaren URLs in Django verändert hat.

Johannes

Früher in dem alten URL-Schema hat man einfach reguläre Ausdrücke angegeben.

Johannes

Ein regulärer Ausdruck ist so eine Beschreibung für einen Text, für ein Textmuster.

Johannes

Und wenn dieses Textmuster gepasst hat, dann ist eben diese passende Funktion dazu aufgerufen worden.

Johannes

Man musste sich dann aber immer noch selbst darum kümmern, dass, wenn da jetzt zum Beispiel eine Jahreszahl drin war, dass die zu einer Zahl wurde, weil die natürlich aus diesem Text erstmal nur als Text rausgekommen ist.

Johannes

Und dieses Problem haben sie in 2.0 geändert, das heißt jetzt nicht mehr URL, sondern Path.

Johannes

Und man gibt eben nicht mehr so ein Textmuster an, sondern man gibt so ein Parametermuster an.

Johannes

Und sagt, okay, zwischen diesem, an dieser Stelle soll jetzt ein Integer stehen und dem möchte ich gerne als Parameter Ja gegeben bekommen.

Johannes

Und dann wird diese URL auch tatsächlich nur aufgerufen, wenn da eine Ganzzahl drinsteht, die als Zahl interpretiert werden kann.

Und das nimmt einem viel Arbeit weg, weil man eben nicht mehr dafür sorgen muss, dass die Parameter passen.

Johannes

Ist aber auch erstmal ein Umdenken.

Johannes

Wenn man so lange mit den regulären Ausdrücken gearbeitet hat, dass man sich daran gewöhnt hat, dann verliert man oft den Blick dafür, was überhaupt möglich ist und ob das überhaupt gut ist.

Jochen

Ja, wobei ich finde, also das mit den regulären, also reguläre Ausdrücke sind natürlich toll und man kann sie für ganz viele Sachen verwenden.

Jochen

Und wenn man sich da mal so zwei Stunden oder einem halben Tag reingefuxt hat, dann sieht das für einen auch alles ganz natürlich aus.

Jochen

Aber wenn man das halt, wenn man jetzt Django entwickelt, dann hat man mit diesen URL-Patterns eigentlich immer nur so ab und zu mal zu tun, wenn man halt irgendwie ein neues Modul reintut oder neue Views definiert und das ist eigentlich gar nicht so super häufig.

Jochen

Also das kommt schon vor, aber bei mir ist es jedenfalls so, dass ich eigentlich fast immer, wenn ich sowas dann, wenn ich das URL-Pattern geändert habe, dass ich dann irgendwie in alte Projekte geguckt habe oder nochmal Doku lesen musste, so, wie macht man das denn jetzt eigentlich nochmal, wenn ich mir das nie mehr, wie geht das mit der Gruppe und dann wird das zu einem Variablen-Namen, wo schreibt man den nochmal hin?

Jochen

Kommt das P jetzt davor, dahinter oder dann muss ich jetzt da ein Fragezeichen?

Jochen

Also das war immer, ich musste es immer nachgucken und dann, das ist natürlich irgendwie so ein bisschen ein schlechtes Zeichen, weil das ist dann irgendwie nicht intuitiv und das jetzt mit diesen Pars-Geschichten tatsächlich deutlich besser.

Jochen

Also da steht dann immer nur so Doppelpunkt, also Int oder String, ich weiß nicht, genau, es gibt auch gar nicht so viele, es gibt noch Slug und ich glaube Pars oder so.

Johannes

Man kann sich selber welche schreiben.

Jochen

Man kann sich selber welche schreiben.

Jochen

Oh, das ist ja super.

Jochen

Das wusste ich jetzt zum Beispiel auch nicht.

Jochen

Ist ja voll gut.

Ja, man kann sich selber welche schreiben.

Johannes

Es gibt verschiedene Möglichkeiten.

Johannes

Du kannst entweder direkt reguläre Ausdrücke machen, also wenn du halt irgendwas ganz Bestimmtes matchen musst, oder du kannst welche, die es gibt, zusammentun.

Also wenn du zum Beispiel möchtest, dass da ein Datum steht, kannst du eben drei so Integer-Dinge hintereinander mit, keine Ahnung, mit Bindestrichen getrennt und kannst das als Date deklarieren und kriegst dann auch automatisch ein Date.

Johannes

Also musst du halt das entsprechend konvertieren, aber kriegst dann automatisch immer ein Date zurück.

Johannes

Und kannst es dann von da an überall verwenden.

Jochen

Oh, das ist ja großartig, das muss man mal angucken, wie das geht.

Johannes

Ja, siehst du, und das ist so ein bisschen das Schöne.

Johannes

Das ist so ein bisschen das, was immer passiert, wenn Django-Experten zusammensitzen.

Dann sagt einer irgendwas und der andere sagt, oh, das ist ja cool, das wusste ich noch gar nicht.

Johannes

Das muss ich unbedingt mal anschauen.

Johannes

Und das geht mir da eigentlich regelmäßig so.

Ja.

Jochen

Ja, ich weiß nicht genau, ob für 3.0 jetzt schon so ein Thema.

Jochen

Also das war auf, ich habe irgendwie so am Rande mitbekommen, dass auch für 2.0 im Grunde schon angedacht war, ob man jetzt nicht doch irgendwie so ein bisschen mehr Kommunikation mit dem Client mit in Django reinnehmen kann.

Jochen

Aber das geht jetzt auch schon seit einiger Zeit irgendwie sind in neueren HTTP-Versionen, dass man quasi auch über Websockets wieder mit dem Client vom Server aus zurück sprechen kann.

Jochen

Und es gibt diverse Fälle, wo das ja auch total sinnvoll ist, dass man das tut.

Jochen

Aber das passt halt nicht so richtig auf dieses, ja, auf diese Schnittstelle zwischen Webserver und Applikation.

Jochen

WSGI, Whisky-Schnittstelle gibt das halt eigentlich nicht her.

Jochen

Und da muss halt noch eine ganze Menge Infrastruktur geändert werden.

Jochen

Und es gab da dieses Django Channels-Projekt und gibt es ja immer noch.

Jochen

Es gibt immer noch, ja.

Jochen

Und da war ja irgendwie schon mal irgendwie quasi sozusagen angedacht, das in Django 2 mit reinzunehmen, aber das ist dann halt irgendwie nicht passiert.

Jochen

Wahrscheinlich, weil zu viel angepasst werden musste.

Jochen

Und vielleicht kommt das ja dann in drei, ich habe keine Ahnung, aber ja.

Das ist eine ganz spannende Sache.

Johannes

Das muss man sich auch mal genauer angucken, weil da viele Dinge möglich werden, die vorher nicht möglich waren.

Johannes

Ist aber eben technisch ganz anders, weil wir nicht mehr in dieses klassische Webschema reinfallen, wo der Benutzer eben eine Webseite aufruft und dann kriegt er die zurück, sondern weil es jetzt eben auf einmal eine Verbindung gibt.

Johannes

Weil der, wo der Server potenziell selbst sagen kann, hier ist was passiert, mach mal was.

Johannes

Und das ist eine ganz spannende Sache.

Ja, auch technisch super interessant.

Haben sie sich einen neuen Standard mehr oder weniger ausgedacht, ASGI.

Was dann halt auch neue Server-Backends so fordert.

Johannes

Daphne heißt der Server.

Jochen

Genau, genau.

Jochen

Man kann nicht einfach irgendwie Unicorn nehmen oder den normalen Entwicklungsserver von Django, sondern.

Johannes

Und da ändert sich dann einiges.

Johannes

Man kann schon den normalen Entwicklungsserver nehmen, weil der das direkt mitintegriert hat.

Also wenn du Channels installierst,

Jochen

wenn man es installiert hat, kommt das,

dann kriegst du eine andere Variante von Run-Server und der das automatisch, der automatische Websockets bringt.

Damit du eben in der Entwicklung den Unterschied nicht merkst.

Johannes

Aber das Arbeiten damit ist deutlich anders, weil du eben diese Kanäle hast und nicht mehr so dieses

Request-Response-Schema hast.

Dominik

Das muss man jetzt nochmal kurz erklären.

Dominik

Also ich habe jetzt ganz kurz noch fast nur Wahrheit verstanden.

Dominik

Request-Response-Schema, ja, Kanäle, hä?

Was ist das?

Johannes

Früher, als das Web noch jung war, war die Idee, dass eine Webseite eigentlich nie einen Zustand haben sollte.

Johannes

Das heißt, du fragst eine URL an und kriegst das Ergebnis oder kriegst das, was da auf dieser URL steht, zurück.

Dominik

Error 4.02 Payment Required, ja.

Genau.

Johannes

Das hat sich dann schnell gezeigt, dass dem nicht so ist und dass man irgendwie einen Zustand braucht und man hat dann eben die Lösung gefunden, dass man Cookies setzt.

Johannes

Cookies sind im Wesentlichen der Zustand, den du mitlieferst, wenn du eine Webseite anguckst.

Johannes

Wenn du dich irgendwo einloggst, dann wird eben der Login auf dem Server mit dem Cookie, den du hast, verbunden.

Johannes

Und jedes Mal, wenn du diese Seite aufrufst, guckt eben der Server, ist das ein Benutzer, der eingeloggt ist oder einer, der nicht eingeloggt ist, und zeigt dann entsprechend die richtige Variante an.

Johannes

Ist sehr schön, weil man da die Seiten eben so dynamisch generieren kann, dass sie für den Benutzer zugeschnitten sind, der jetzt gerade da ist.

Weil wir ja wissen, wer sich eingeloggt hat.

Johannes

Oder weil wir vielleicht wissen, was der gestern gekauft hat.

Oder weil wir vielleicht wissen, was der für einen Computer hat oder irgendwie sowas.

Johannes

Das Schema ist immer noch request response.

Johannes

The browser sagt, I have this it's bitte give me this it, then macht the server iron was and gives him this it's the art designed.

Johannes

And the server has a game hinterher to say, oh, hold it's not and vielleicht hat sich da in the time was getan, or vielleicht passiert irgendwas.

Dominik

So erwartet immer bis der Browser wieder fragt.

Johannes

Genau, die Verbindung ist dann erstmal weg anderes muss dann fragen.

Johannes

Jetzt haben Browser in der Zwischenzeit JavaScript bekommen und haben eben die Möglichkeit erhalten, regelmäßig zu fragen.

Johannes

Das ist zum Beispiel das, was Twitter macht oder das, was Facebook macht.

Johannes

Wenn ein Newsfeed sich aktualisiert, dann fragen die halt alle 30 Sekunden, gibt es was Neues für mich.

Und dann sagt der Server in den allermeisten Fällen nein.

Johannes

Und wenn es doch was Neues gibt, dann gibt ihr eben diese Schnipsel zurück, die neu sind, oder gibt die Informationen zurück, die neu sind, und der Browser baut die dann für sich zusammen.

Johannes

Jetzt wäre es doch eigentlich von der Denkweise her viel besser, dass der Browser nicht alle 30 Sekunden fragen muss, gibt es was Neues?

Johannes

Und ganz oft die Antwort bekommen wird, nein, es gibt nichts Neues.

Sondern es wäre doch eigentlich besser, wenn der Server sagen könnte:

Dominik

Wenn es was Neues gibt, hier, bitte nimm.

Genau.

Johannes

Wenn es was Neues gibt, sage ich dir Bescheid.

Johannes

Und das ist eben genau diese Veränderung.

Johannes

Auf einmal hast du nicht mehr einen Server, der nur noch Fragen beantworten kann, der Anfragen umsetzt und dann die komplette Seite zurückschicken kann oder eben auch Teile von der Seite.

Johannes

Sondern du hast jetzt in dem Schema die Möglichkeit zu sagen, es ist ein Ereignis passiert auf dem Server und der Server gibt automatisch dem Client Bescheid.

Johannes

Dafür brauchst du aber eine Verbindung zwischen dem Server und dem Client, die die ganze Zeit da sein muss.

Dominik

Ist das nicht dann das Netz viel mehr ausgelastet?

Johannes

Nee, es ist eigentlich weniger ausgelastet.

Johannes

Weil du eben nicht die ganze Zeit leere Anfragen schicken musst.

Johannes

Gibt's was Neues, gibt's was Neues, gibt es was Neues, gibt's was Neues, sondern du hast nur diese eine Verbindung und die, klar, die wird offen gehalten.

Johannes

Also insofern hast du eine Ressource belegt.

Johannes

But this verbinding offenhalten is sowieso was TCP kann und das wird eben über so Keep Alive Mechanismen, die sich dann anpassen, die most wenig Bandbreite verwenden, abgedeckt.

Johannes

And du hast wirklich nur communication, wenn auch tatsächlich was passiert.

Johannes

And this gives dir eigentlich zwei Vorteile.

Johannes

Zum einen sparst du dir die Bandbreite, dass du die ganze Zeit fragen musst, auch wenn nichts passiert ist.

Du weißt ja noch nicht, was passiert ist.

Johannes

And zum anderen hast du natürlich eine viel schnellere Antwortzeit.

Johannes

Weil es nicht mehr davon abhängt, wie oft der Client fragt, but when an updates bekommt, sondern wenn ein Update passiert, kann der Server sofort sagen, yes is what passiert.

Johannes

And the client fragt halt nur all 30 seconds, wenn ich mir meine Chat-Anwendung schreibe, then alle 30 Sekunden, ob jemand was geschrieben hat.

Johannes

When the server sagen kann, hier ist was Neues, dann kann ich das sofort ausliefern.

Johannes

Das heißt, es wird sehr viel responsiver, sehr viel schneller in der Verarbeitung.

Dominik

Ohne Latenz direkt verfügbar.

Johannes

Genau, direkt, es wird direkt weitergeleitet und direkt verfügbar gemacht.

Johannes

Und das ist natürlich was, was man heutzutage haben möchte.

Johannes

Diese Geschwindigkeit in den Antworten.

Johannes

Auch in ganz modernen Anwendungen, ja, immer dann, wenn ich irgendwas anzeigen möchte, was auf dem Server passiert, brauche ich diesen Update-Mechanismus oder kann ich diesen Update-Mechanismus.

Dominik

Also immer ein request und that is halt jetzt ein Riesen-Vorteil, ja.

Genau.

Jochen

Yeah.

Jochen

Ich glaube, es gab da auch noch Dinge, bevor man das halt mit JavaScript gemacht hat, es waren so solche furchtbaren Dinge wie Long Polling, wo dann der Server immer gesagt hat, ja, nee, warte mal, ist noch nicht ganz fertig.

Jochen

Warte mal, Moment.

Jochen

Und dann ab und zu mal doch wieder so ein Content-Bröckchen an den Client weitergeschickt hat.

Jochen

Also es gibt da diverse furchtbare Geschichten, die gemacht wurden.

Jochen

Und im Grunde jetzt Websockets und eine stehende Verbindung löst all das eigentlich relativ sauber und ja, damit kann man wirklich tolle Sachen machen.

Jochen

Und es gab ja auch, es gibt auch schon komplette Frameworks und komplette Technologie, Text, die halt darauf basieren, dass man sowas machen kann.

Jochen

Also wenn man zum Beispiel in die JavaScript-Welt guckt, da Meteor oder so, die sind halt, das ist halt vom Backend bis zum Frontend darauf ausgerichtet, dass das dem Client irgendwie Dinge schicken kann.

Jochen

Und damit kann man halt Sachen bauen, die ja, wenn man da sowas zum ersten Mal sieht, relativ verblüffend aussehen, weil sie anders sind als das, was man so von Web-Anwendungen gewohnt ist.

Dominik

Hast du gerade wieder angegriffen hat, ein Meteor.

Jochen

Ja, das ist halt so, dieser Stack ist es heute auch nicht mehr so relevant, dass wenn man eine Zeit lang irgendwie halbwegs hip und dass es halt irgendwie als Datenbank verwendet, dass halt irgendwie dieses da Dings da MongoDB.

Jochen

Das kann halt quasi diese Verbindungen auch, oder wenn was irgendwie passiert, direkt wieder an den Server, dass dann irgendwie ein eigenes Node.js-mäßiges Dings irgendwie weiterreichen und das Ding reicht es halt komplett durch an den Client und du hast halt sozusagen Model View Controller, aber mit dem Client direkt drin und auf dem Client und auf dem Server kann der gleiche Code laufen und so und das ist alles sehr schick.

Jochen

Und das bedeutet, also damit sieht dann halt so eine Anwendung quasi genauso aus wie eine Desktop-Applikation im Grunde, was die Reaktivität angeht.

Jochen

Man drückt irgendeinen Knopf und sofort bei jemand anders in einem anderen Browser irgendwie, dass dieser Knopf gedrückt wurde.

Jochen

Und es passt, ja, also Statusänderungen sind halt sozusagen instantan für alle, die es betrifft, sichtbar.

Jochen

Und das ist halt etwas, was man normalerweise jetzt so nicht hat.

Jochen

Das hat man auch bei Django nicht oder das kann man dann schon machen, aber das ist dann halt immer irgendwie so eine Sonderlecke und das halt nicht irgendwie in dem Framework mit integriert, sondern ja, halt immer so ein bisschen dran vorbei.

Jochen

Aber das wäre natürlich schön, wenn man das halt direkt mit drin hätte.

Jochen

Und das kann natürlich gut sein, dass es jetzt demnächst dann in einer größeren Major-Version kommt.

Johannes

Ja, ansonsten kann man sich Channels ja auch so reinholen.

Ja, kann man auch, ja.

Also nicht so eigentlich.

Dominik

Implementiert Django dann Module, die es vorher schon gab, oder hat es komplett eigene Dinge selber?

Dominik

Sind da vorher so Requests für vorhanden, dass tatsächlich die Entwickler gucken, hey, was ist denn so an Bedarf da oder kommen die mit eigenen kreativen Ideen?

Johannes

Ja, es gibt Django ist ein sehr großes Open-Source-Projekt.

Und wie viele

Dominik

Entwickler gibt es da ungefähr in diesem.

Johannes

Es ist schwer zu sagen, aber es gibt eine Stiftung.

Johannes

Es gibt die Django Software Foundation.

Johannes

Also die sind irgendwann so groß geworden, dass sie eine Stiftung gegründet haben.

Dominik

Also Leute, die Vollzeit auch ein bisschen dafür bezahlt werden, dass sie die Moodle weiterentwickeln.

Johannes

Genau, da gibt es so ein paar Programme, wie das möglich ist.

Johannes

Und die haben auf jeden Fall genügend finanzielle Ressourcen, um sich am Leben zu halten und um dieses Projekt am Leben zu halten.

Johannes

Heißt eben aber auch, dass da inzwischen relativ viel Community Management drin is, weil die Community so gross is, weil es so viele Leute gibt, die Django setzen, that it's notwendig, Prozesse to have.

Johannes

It is not so centralisiert as we in other projekten violent kennt, sondern it passiert sehr viel einfach aus der Community raus.

Johannes

Es gibt auch jedes Jahr Conferenzen zu dem Thema.

Johannes

Es gibt die DjangoCon, die this year in den USA stattfindet.

Es gibt the Django Con Europe, die this year in a station in Europa.

Dominik

Wo is he next year and what was this year?

Johannes

This year was it in Heidelberg in Mai.

Yeah.

Next year is in Copenhagen, when I was rich.

Johannes

And this will be the community organisation.

Johannes

We community, the benutzer, wollen in the process of weiterentwickling.

Johannes

And the DjangoCon Europe is for a year in Süd Frankreich, and there had an Insel.

Johannes

They had a complete Insel gemietet.

Johannes

This is jedes Mal anders and this is also der Reizer dran.

Warst du da?

Johannes

In Heidelberg war ich da zum ersten Mal.

Johannes

War sehr angenehm.

Johannes

War eben hinter dem, vor dem studentischen Hintergrund Heidelbergs auch ganz nett.

Johannes

Nächstes Jahr in Kopenhagen werde ich wohl nicht dazu kommen können, aber ich war schon mal in Kopenhagen, das ist auch sehr schön.

Johannes

Und ich kann es eigentlich jedem nur empfehlen und jede DjungleCon Europe ist so ein bisschen anders, weil die eben von Leuten aus dieser Gegend organisiert wird, die vorher vielleicht noch nie so eine Konferenz organisiert hat.

Dominik

Also auf der nächsten Insel schaue ich wahrscheinlich auch mal vorbei.

Johannes

Es lohnt sich auf jeden Fall.

Johannes

Es ist super, da die Leute kennenzulernen.

Johannes

Und man hat auch Kontakt da mit den Core-Entwicklern, also mit den Leuten, die sich tagtäglich damit beschäftigen.

Johannes

Und das ist natürlich super.

Johannes

Und gerade jetzt bei dem Channels-Projekt, ich habe da auch ein paar Leute kennengelernt und habe dann auch direkt was mit denen zusammen angefangen zu bearbeiten.

Jochen

Das klingt ja auf jeden Fall schon mal echt gut.

Jochen

Ja, ansonsten, ich weiß gar nicht, inwiefern das da mit reingreift, was halt auch interessant wäre.

Jochen

Es gibt ja in Python jetzt so eine ziemlich schicke Syntax für Async.io.

Jochen

Und was eigentlich ja schon immer toll gewesen wäre, aber nie so richtig geklappt hat, war, dass man diese Asynchronizität, die man nach draußen hat, mit den Requests, Web-Requests, die halt reinkommen, dass man die halt weiterreicht.

Jochen

Sondern zum Beispiel an Datenbanken oder irgendwelche APIs, die man fragt.

Jochen

So momentan ist es halt so, wenn man jetzt, weiß ich nicht, um eine Seite zu bauen, 10 Statements irgendwie an die Datenbank schicken muss, dann werden die halt da seriell hingeschickt und abgearbeitet und dann, wenn die fertig sind, dann zeigt man die Seite an.

Jochen

Was ein bisschen doof ist, weil das halt jedes Mal die Latenz, also die halt durchaus ein paar oder auch vielleicht mal ein paar 10 Millisekunden sein kann pro Statement, das addiert sich halt alles auf und dann am Schluss quasi hat man halt, ist die Zeit, die man braucht, um halt quasi Content auszuliefern.

Jochen

Das ist ja eine wichtige Zeit, weil erst ab da ja alles losgeht, auch wenn man hinterher Bilder parallel holen kann oder so.

Jochen

Das geht aber nur, wenn man weiß, wie die Bild-URLs sind.

Jochen

Das heißt, solange nicht irgendwie ein Content vom Applikationsserver gekommen ist, kann, passiert nichts weiter.

Dominik

Holt sie nochmal einen Kaffee.

Jochen

Genau.

Jochen

Und dummerweise sind halt in diesem kritischen Zeitbereich halt solche Dinge wie halt, dass alle SQL-Statements serielle geholt werden müssen.

Jochen

Und das ist natürlich eigentlich ziemlich blöd.

Jochen

Und schöner wäre es ja, wenn man irgendwie alle gleichzeitig abfeuern würde und dann würde man die halt irgendwie so einsammeln und dann wäre sozusagen das längste Statement irgendwie vielleicht das, was darüber entscheidet, wie lange es dauert, aber man müsste nicht irgendwie quasi auf jedes Einzelne warten.

Jochen

Das könnte die Zeit deutlich verringern.

Jochen

Und ja, im Grunde könnte man ja auch eine ähnliche Schnittstelle verwenden wie für Asynchronisierten Geschichten nach vorne raus.

Jochen

Und da weiß ich gar nicht, ob es und bisher war das halt immer problematisch, weil man kann es halt irgendwie mit den vielen unterschiedlichen Geschichten, die es in Python da gibt, machen, man kann Threads nehmen, man kann halt irgendwie Twisted nehmen oder so, aber.

Dominik

Free Do habe ich letztens kennengelernt.

Jochen

Ja, das ist voll super, aber ja.

Jochen

Aber ja, im Grunde jetzt hätte man halt die Möglichkeit zu sagen, okay, da wir jetzt dann eine Syntax für haben, dann machen wir das einfach so.

Jochen

Und das wäre natürlich auch eine interessante Geschichte.

Jochen

Ich weiß auch, dass Flask irgendwie, dass es zumindest ein Projekt gibt, das versucht, Flask umzubauen, dass es halt alles, also ein I.O.-kompatibel sozusagen ist.

Jochen

Und bei Django weiß ich jetzt gar nicht, wie weit das ist, oder ob es da überhaupt Beschreibungen gibt.

Jochen

Aber sowas wäre natürlich auch sehr nett.

Jochen

Keine Ahnung.

Johannes

Ja, wüsste ich jetzt auch nicht, Freihand, aber es hört sich an, als ob du mal ein Enhancement-Proposal einrichten solltest.

Johannes

Und vielleicht ein Fellowship-Beantragen, dass du auch

irgendwas tun.

Ja.

Jochen

Tja, tja, tja.

Jochen

Ist wahrscheinlich auch nicht so einfach, muss man sagen.

Das wäre gut, aber wenn es einfach wäre, dann wäre es ja auch langweilig.

Das ist ja auch schon wahrscheinlich jemand gemacht, ja.

Johannes

Wir machen es nicht, weil es einfach ist, sondern wir machen es, weil es schwer ist.

Jochen

Ja, was gibt es noch so an interessanten Django-Themen?

Jochen

Ach ja, vielleicht sollte man das auch noch erwähnen.

Jochen

Genau.

Jochen

Die Art, wie dieser Podcast publiziert wird, also ich habe natürlich auch gedacht, so, okay, wenn ich da jetzt schon irgendwie Django entwickle, dann ist es ja eigentlich, weil es ja jetzt eigentlich schon ziemlich beschämend, irgendwie WordPress zu nehmen, um einen Podcast zu veröffentlichen.

Jochen

Und dann habe ich halt mein kleines Blog-Modul genommen, das ich mal irgendwann geschrieben habe und da jetzt auch so Podcast-Funktionalität reingedengelt und mal gucken, wie weit das trägt.

Jochen

Aber das war alles gar nicht so schwierig.

Jochen

Also zum Beispiel, wo einem Django da schon sehr hilft bei, ist, es gibt so ein Feed Syndication, Feed-App.

Jochen

Also Django selbst enthält einige Apps, unter anderem halt Admin oder Contrib, also Authentication und so Zeugs.

Jochen

Und halt auch ein Feed Syndication Framework, mit dem man halt Feeds generieren kann.

Jochen

Und das ist natürlich total hilfreich, wenn man das halt nicht selber machen muss, weil das ist irgendwie ziemlich fies.

Jochen

Und ja, das war eigentlich sehr angenehm.

Jochen

Was natürlich irgendwie, was immer noch ein Problem ist, ist, dass man dann halt irgendwie so diverse Feinheiten berücksichtigen muss.

Jochen

Man muss halt gucken, oh, wenn ich jetzt das auf dem eigentlich einzig relevanten Katalog, einem einzig relevanten Katalog veröffentlichen will, das ist halt der iTunes Podcast, das iTunes-Podcast-Verzeichnis, dann gibt es halt noch so ein paar Spezialattribute, die halt iTunes haben will und die müssen halt richtig gesetzt sein und das will halt die Bilder in einem bestimmten Format haben oder das Artwork zu dem Podcast und ja, Kategorien müssen ein bestimmtes Format haben

Jochen

und so Dinge.

Jochen

Darf ich jetzt mal so ein bisschen knabbern müssen, aber so einfach nur, dass man dann ein RSS oder Atom-Feed hat, wo die Episoden quasi drinstehen, das war relativ einfach.

Jochen

Das war auch sowieso bei dem bei dem Blog-Teil war das halt sehr simpel.

Jochen

Das waren halt irgendwie, keine Ahnung, 15 Zeilen Code oder so und dann gab es ein RSS-Feed zu den Blogposts.

Dominik

Das heißt, wenn ihr euren eigenen Podcast machen könnt, könnt ihr jetzt demnächst Joch unser Modul dafür verwenden.

Jochen

Ja, kann man tatsächlich.

Jochen

Also sagen wir so, das ist halt nicht gut dokumentiert und wahrscheinlich alles irgendwie noch ein bisschen experimentell, aber so benutzen kann man das schon, wenn man ein bisschen furchtlos ist.

Jochen

Und nicht aufgibt, wenn ich ein bisschen was für Wasser, da muss man schon sagen, ja.

Ja.

Jochen

Genau, und das ist natürlich auch eine gute Gelegenheit, um immer wieder was über Django zu erzählen, wenn da irgendwelche Probleme aufgetaucht sein sollten oder irgendwelche schönen, eleganten Lösungen möglich werden.

Jochen

Ja.

Jochen

Also ich bin da, ich bin da eigentlich durchaus angetan.

Jochen

Also auch die Erfahrungen irgendwie mit dem Blockschreiben in Django, das war auch eigentlich alles sehr, sehr nett.

Jochen

Ja, man kann, man kommt, aber was auch interessant ist, ist halt, es ist auf der einen Seite halt sehr, sehr viel da schon, was man verwenden kann.

Jochen

Wenn man jetzt aber tiefer bohrt, dann kommt man auch immer relativ schnell an Stellen, wo man sich sagt, so, ja, da gibt es noch nichts, das hat noch nie jemand.

Jochen

Und das ist halt schon so, also zum Beispiel bei den Bildern wieder, also vielleicht gibt es da auch was oder ich weiß es, und ich weiß es einfach noch nicht, das kann natürlich auch sein, aber dieses Django Image-Kit löst in gewisser Weise ein Problem, halt dieses Vorberechnen der unterschiedlichen Bildgrößen.

Jochen

Aber wie es das tut, ist halt nicht so richtig toll.

Jochen

Und da gibt es dann wieder, soweit ich weiß, nichts.

Jochen

Also es gibt da ja tolle Möglichkeiten.

Jochen

Es gibt so LibJPEG-Tobo oder Mods JPEG, die halt ungefähr nochmal so mindestens ein Drittel die Bilder kleiner machen bei gleicher Qualität oder auch dafür sorgen, dass wenn ein Bild angezeigt wird und das geladen wird, dann werden halt zuerst grobe Geschichten angezeigt und dann halt feinere Sachen.

Jochen

Das kann man mit JPEG halt irgendwie machen.

Jochen

Und ja, default-mäßig wird aber Pillow verwendet.

Jochen

Pillow verwendet irgendwie unten drunter Image Magic oder so.

Jochen

Und das ist alles nicht richtig optimal.

Jochen

Also da kann man zwar angeben, wie hoch die Qualität sein soll, aber die Bilder sind halt nicht so klein, wie sie sein könnten, was für die meisten Leute vielleicht kein großes Problem sein wird, aber wenn man jetzt irgendwie ein paar tausend Bilder hat, dann macht das doch durchaus was aus.

Jochen

Oder ich habe mal so einen, ich habe auch einen Bock mit relativ vielen Bildern drin und war dann irgendwie, dachte ich, dann hörte ich immer so Klagen von Leuten, die sich das angeguckt haben, das dauert immer so lange.

Jochen

Ich habe das gar nicht so gemerkt, gut, ich habe hier irgendwie so 100 M mit, was jetzt auch nicht so furchtbar schnell ist, aber da ging das eigentlich ganz flüssig.

Jochen

Und dann habe ich halt mal so in den D-D-Bock-Truber geguckt und so und gesehen, so, oh, so die ersten fünf Artikel holen mit vielen Bildern drin, das sind halt so 200 MB.

Jochen

Wenn man sich das auf dem Handy auf Edge anguckt, dann kann ich mir durchaus vorstellen, dass das ein bisschen langsam ist.

Jochen

Ja, und da wäre es schon schön, wenn man da tatsächlich quasi default-mäßig auch irgendwie gute Ergebnisse bekommt, aber das ist halt irgendwie momentan jedenfalls noch nicht so.

Jochen

Und da wäre es natürlich auch interessant, wenn da, also man stößt relativ schnell auf Ecken, wo man eigentlich was verbessern könnte, wenn man dann mal Zeit hat.

Jochen

Und ja.

Jochen

Tja.

Dominik

Wann das, wo ist dein größter Struggle?

Johannes

Das ist wie beim Jochen, das sind die Details.

Johannes

Man kommt sehr schnell so zu den 95% des Projektes, die eigentlich so Smooth sailing sind, die man am ersten Tag durchkriegt.

Johannes

Und an den letzten 5% arbeitet man dann die nächsten zwei Jahre.

Johannes

Also es ist schwierig zu sagen, welcher Bereich am schwierigsten ist, weil es eben oft an diesen ganz kleinen Details hängen bleibt.

Dominik

Also du hast selber für gebaut, was du irgendwo mal offen gestellt hast?

Johannes

Es gibt so ein paar Sachen, die ich mal gebaut habe und offen gestellt habe.

Genau, erzähl mal.

Johannes

Die sind alle schon etwas älter.

Johannes

Die meisten Sachen, die ich in den letzten Jahren gemacht habe, waren eben für Kunden.

Johannes

Und dann ist es schwierig, denen zu sagen, hier, ich habe so und so viele Stunden dafür abgerechnet.

Johannes

Wie wär's, wenn wir das jetzt der Welt für umsonst geben?

Johannes

Deshalb sind die meisten Sachen, die ich in den letzten Jahren gemacht habe, eben hinter Gittern.

Johannes

Die müssen leider hintergittern werden.

Johannes

Eine Sache, die ich vor Jahren mal in Python gemacht habe, ist eine Bibliothek für Kommandozeilenaufrufe.

Johannes

Hat jetzt überhaupt gar nichts mit Django zu tun.

Dominik

Verlinken wir natürlich auch in den Show Notes.

Johannes

Natürlich, Kommandier heißt die Bibliothek.

Johannes

Beste Kommandozeilen-Bibliothek, die es gibt.

Johannes

Weil es einfach ein Problem war, was mich gestört hat.

Johannes

Ich wollte gerne einfache Programme mit der Kommandozeile ansprechen.

Johannes

Oder eine ansprechende Kommandozeile anbieten können.

Johannes

Und die Lösungen, die es gab, haben mich alle nicht überzeugt, also habe ich meine eigene gemacht.

Johannes

Das ist so ein bisschen das, was von allem erwartet wird und was man natürlich dann auch gerne macht, weil mehr nicht der einzige ist, der dieses Problem hat.

Johannes

Vor Jahren hat der Python Package Index immer noch Downloadzahlen angezeigt und die sahen eigentlich schon immer ganz gut aus für meine kleine Bibliothek.

Johannes

Inzwischen zeigen sie die nicht mehr an.

Ich weiß also nicht, wie viele Leute das verwenden oder nicht.

Johannes

Aber so ein kleines bisschen Validierung kriegt man da schon von der Gemeinde zurück.

Dominik

Klingt gut.

Dominik

Spannend, sehr schön nützlich.

Ja.

Dominik

Da haben wir doch noch ein bisschen Streichwerb gemacht für die Open-Source-Pakete hier.

Dominik

Ich bin begeistert.

Johannes

Ja, für kostenlose Dinge Werbung machen.

Johannes

Das ist nicht so schlimm.

Ich bin ja auch sehr glaubt.

Dominik

Was fällt euch denn noch zu Django ein?

Dominik

Haben wir noch irgendwas bei den Themen offen, was vergessen?

Dominik

Irgendwie was von Tipps und Tricks, die gerade noch so unter den Fingern brennen, die ihr gerade noch mitbekommen habt.

Johannes

Ah, so viele, es gibt so viele Sachen.

Johannes

Wir könnten, glaube ich, tagelang über Django und über die verschiedenen Bauteile reden und was jetzt besser ist und was schlechter ist, dass es mir echt schwerfällt, eine Auswahl zu treffen.

Jochen

Ja, doch, vielleicht eine Geschichte, die ich.

Jochen

Tests sind ja eine relativ wichtige Geschichte.

Der ist jemand wach geworden.

Jochen

Und wütend.

Jochen

Naja.

Jochen

Hoffentlich über Tests sprichst.

Jochen

Das ist immer sehr schmerzhaft.

Er kommt tatsächlich direkt in die Kreis hoch.

Jochen

Ja, genau.

Jochen

Und da gibt es also ich bin da, ich bin ein Fan von PyTest eher als von dem eingebauten Unitest-Framework in Python und da gibt es dann auch diverse Hilfspakete, die einem das erleichtern, irgendwie zum Beispiel PyTest Django oder Pytest Sugar und diverse andere und gibt es noch Dinge, die einem irgendwie so es erleichtern, so ein bisschen Fixtures und Daten zu generieren

Jochen

, so Factory Boy und weiß ich gar nicht, was man da, ob man das wirklich alles empfehlen sollte, was ich da so verwende.

Jochen

Und genau, das ist eigentlich auch sehr, sehr praktisch.

Jochen

Also da gibt es halt dann schon eine existierende Integration, da muss man sich gar nicht so selbst umkümmern und das funktioniert eigentlich echt ganz toll.

Jochen

Also ich weiß nicht, ich glaube, du machst eher Unitest oder das klassische.

Johannes

Ja, ich benutze eher die in Django eingebauten, also die klassischen Unitests.

Johannes

Ich mag Py-Test nicht so gerne.

Jochen

Aber da gibt es doch Methodennamen mit Camel Case.

Ja, muss man nicht.

Jochen

Muss man nicht?

Johannes

Nee.

Johannes

Alles was Testunterstrich heißt, ist ein Test und alles andere ist egal.

Johannes

Nee, das ist ganz normal.

Johannes

Dieser Testrunner ist nicht besonders gut.

Johannes

Ich benutze immer den Nose-Testrunner, aber das ist nur eine Kleinigkeit.

Jochen

Ja, aber man muss so Dinge machen wie man muss sagen, Assert Equal.

Jochen

Und da hat man doch auch wieder Camel Case irgendwie.

Johannes

Ja, das stimmt, diese Assert-Methoden sind so ein bisschen seltsam.

Aber.

Jochen

Ja, gut.

Johannes

Das sind so Dinge, an die gewöhnt man sich mit der Zeit und dann erscheinen sie einem völlig undenkbar, dass es anders sein könnte.

Johannes

Und ich glaube auch, wir haben kein grundsätzliches Missverständnis zwischen uns.

Johannes

Natürlich, Coverage ist hoch genug.

Johannes

Und ob die Assert-Methode jetzt Assert Equal heißt oder Assert Equals oder Assert Unterstrich-Equal oder was weiß ich, wie sie bei Py-Test heißen mag.

Jochen

Es ist einfach nur Assert.

Jochen

Und dann sagt man irgendwie das eine gleichgleich das andere oder so.

Und dann war es auch.

Johannes

Ja, das kannst du ja bei einem Unitest prinzipiell auch machen.

Ja.

Johannes

Aber dann kannst du halt nicht unterscheiden zwischen, du wolltest, dass da ein Fehler passiert oder du wolltest nicht, dass ein Fehler passiert.

Johannes

Aber das sind auch da wieder nur Detailthemen.

Ob das jetzt so oder so ausschaut, ist, glaube ich, gar nicht so wichtig.

Ja.

Johannes

Aber wir kehren wieder zurück zu diesem Thema, was wir vorhin hatten.

Johannes

Jeder hat so seine Präferenzen und mit der Zeit findet man halt so die Sachen, die man am liebsten benutzt.

Dominik

So die ausgelatschten Wege, die immer tiefer werden, weil man immer wieder durchstiefelt.

Johannes

Und dann kann man nie wieder was Neues anfangen.

Johannes

Ich hoffe, dass wir uns genügend Flexibilität erhalten haben, um doch immer noch neue Sachen anfangen zu können.

Dominik

Ja, immer neu lernen, Adile heißt ja auch ganz wenig Wissen und immer wieder von neu anfangen und ja.

Jochen

Ganz, ganz wenig Wissen weiß ich nicht, ob das so eine super Idee ist.

Dominik

Naja, du kannst immer wieder neue Bausteine suchen und dann.

Johannes

Ach ja, viele Software, die man so kennt, fühlt sich schon so an, als ob die einfach mit ganz wenig Wissen gestanden sind.

Jochen

Das stimmt natürlich auch.

Jochen

Aber was man generell sagen kann, ist also testen, wenn man das nicht macht, das ist eine sehr gute Idee.

Jochen

Ich habe früher immer gedacht, irgendwie so die ja, ich bin halt eher so jemand, der mehr so auf der, ich habe früher eher Backend oder ich komme ganz ursprünglich aus der Systemadministration und dann irgendwie über Datenbanken und dann bin ich immer weiter in dieses Programmieren reingerutscht.

Jochen

Aber am Anfang habe ich irgendwie eher kurze Sachen geschrieben und fand das immer viel einfacher, wenn das irgendwie so Skripte waren, die nur so auf einer Bildschirmseite passen oder vielleicht ein paar hundert Zeilen haben oder so.

Jochen

Das war, das habe ich mich wohlgefühlt, weil das war etwas, was kann man halt so komplett überblicken.

Jochen

Und wenn da sich irgendwas dran ändern soll, dann kann man das auch tun, ohne dass es hinterher schief geht.

Jochen

Und immer wenn ich dann versucht habe, größere Sachen zu schreiben und dann halt Features hinter sehr dazukamen oder sich geändert haben, dann sind immer furchtbare Sachen passiert.

Jochen

Oder nicht immer, aber häufig genug, dass es irgendwie unangenehm war, schreckliche Dinge passiert.

Dominik

Im Eck geht unangenehm, ja.

Jochen

Ja, so und seit seit ich irgendwie Tests schreibe, ist das eigentlich nicht mehr so schlimm.

Jochen

Seit dem

Johannes

Test ohne passiert

Jochen

leider immer noch, ja, das ist so ganz lässt sich das nicht verhindern, aber es ist, ich fühle mich jetzt wohl dabei, auch längere Sachen zu schreiben, auch wenn ich jetzt nicht mehr quasi die Details anderer Module oder anderer Apps, die da auch noch Dinge tun, wenn ich die nicht mehr so verstehe oder auch lange nicht mehr dran gearbeitet habe, dann habe ich jetzt nicht mehr so ein Problem, irgendwas zu ändern, was die betrifft, weil wenn ich hinterher die Tests durchlaufen lasse und die sehen gut aus, dann kann

Jochen

ich mir schon relativ sicher sein, dass da nichts total Schreckliches passieren wird.

Jochen

Und wenn man das halt nicht hat, dann hat man ein großes Problem, weil wenn man Tests hat, dann weiß man, wenn man ein Update macht oder wenn man jetzt eine Version von einer Bibliothek ändert oder man ändert irgendwas völlig harmloses, von dem man denkt, das kann eigentlich überhaupt keine Auswirkungen auf irgendwas anderes haben.

Jochen

Und dann führt man die Tests aus und dann schlagen vier Tests fehl und einer davon schlägt Feld und man denkt sich so, oh Gott, das hätte nie passieren dürfen, dann weiß man, ja, das wäre jetzt, wenn man keine Tests gehabt hätte, dann wäre das wirklich fieser Bug gewesen.

Jochen

Und teilweise sind die halt so, dass man sich hinterher auch sagt, also das da kommt man nicht drauf, dass das irgendwie die Auswirkungen hätte, das hätte man jetzt gar nicht, also durch lange Meditation über diese Änderung hätte man das nicht wirklich rausbekommen können.

Dominik

Wären wahrscheinlich auch gar nicht aufgefallen und dann irgendwann fliegt es dann im, ja.

Jochen

Wäre es im User aufgefallen oder dann hätte der sich beschwert, was schon ziemlich schlimm ist oder noch schlimmer, es wäre irgendwie eine Sicherheitsdrücke oder so gewesen.

Jochen

Also es ist, ja, also man fühlt sich da deutlich besser, wenn man Tests hat und das irgendwie so praktiziert.

Jochen

Und seit ich damit angefangen habe, fühle ich mich da irgendwie deutlich wohler mit allem.

Dominik

Also ihr hört, brav testen und eure Testfunk nutzen.

Dominik

Schreibt ihr zuerst eure Tests oder schreibt ihr erst den Code?

Johannes

Da kann man sich, wenn man die Frage beantwortet, kann man sich nur in den Nesseln setzen.

Wenn ihr so viele Zusendungen kriegt, wie wir das was anderes machen solltest.

Dominik

Zusendungen übrigens gerne an hallo atpython-podcast.de.

Dominik

Könnte jederzeit Fragen, Anmerkungen stellen.

Dominik

Gerade gerade so wunderschon reingepasst.

Dominik

Also keine Aussage von Johannes?

Johannes

Ich schreibe meinen Code zuerst und schreibe die Tests hinterher und das schockiert viele Leute.

Ich mach nicht TDD.

Johannes

I come überhaupt gar nicht klar mit TDD.

Dominik

TD ist Test-driven development.

Dominik

Genau, Test-driven

Johannes

development heißt man schreibt zuerst Tests und ausschließlich Tests und dann schreibt man ganz genau so viel Code that these tests erfolgreich werden and nicht mehr.

Johannes

And the idea dahinter is eben, dass man immer automatisch 100% Test Coverage hat.

Johannes

Alles what man an Code geschrieben hat, is automatisch getestet.

Johannes

Weil man den Test vorher geschrieben hat, bevor man den Code hat.

Klingt logisch.

Klingt logisch.

Johannes

Das Problem für mich ist, dass Tests sind etwas, auch wie der Jochen das so eben beschrieben hat, die fixieren die Funktionalität eines Programms.

Johannes

Die sorgen dafür, dass ich weiß, das funktioniert genau auf diese Art and Weise.

Johannes

Ich weiß aber oft gar nicht, wie ein Programm funktionieren soll, wenn ich anfange das zu schreiben.

Johannes

Und dann fällt es mir sehr schwer, diesen Test dafür zu schreiben, when ich noch gar nicht weiß, wie ich es dann tatsächlich machen möchte.

Johannes

Wie ich denn möchte, dass es am Ende ausschaut.

And deshalb fange ich üblicherweise an Code to schreiben und dann hat man halt irgendwie so ein paar Sachen umgesetzt und dann fange ich an, die Tests dazu zu schreiben.

Johannes

And then eben sozusagen das so weit aufzubohren that alles drin is, what I have möchte und die Tests.

Dominik

Was ist denn das Gegenargument?

Dominik

Wäre das dann, du bist nicht kreativ genug, dir vor die Tests auszudenken, or wäre das dann hinter wirst du dann zu faul und die Tests fehlen am Ende?

Nee, ich

Johannes

glaube es ist einfach nur ein gewisser Arbeitsmodus, der eben zu manchen Leuten passt und der zu manchen Leuten nicht passt.

Johannes

Und ich bin immer sehr beeindruckt, wenn Leute TDD machen und wenn die das zeigen und ich weiß auch, dass das super gut funktioniert.

Johannes

Weil die Vorteile eben da sind.

Johannes

Man hat eben immer Tests geschrieben, bevor man Code überhaupt schreibt.

Johannes

Also aller Code, den man schreibt, ist getestet automatisch.

Heißt auch nicht, dass der 100% failesafe ist, aber man kann auf jeden Fall sicher sein, dass die Dinge, die man in die Tests geschrieben hat, funktionieren.

Wie sie funktionieren sollen.

Dominik

Wie machst du das, Jochen?

Jochen

Ich muss gestehen, tatsächlich genauso quasi.

Jochen

Also ja, ich habe mir auch schon häufiger mal, oder ich habe es auch tatsächlich schon probiert, irgendwie zuerst die Tests zu schreiben und dann den Code, aber also es gibt da eben zwei Dinge für mich.

Jochen

Also eine Sache ist halt auch, dass ich oft nicht weiß, wo es hingehen soll.

Jochen

Und ich fange sogar, das ist auch vielleicht noch eine ganz interessante Empfehlung, oft auch gar nicht jetzt tatsächlich einem Modul anzuschreiben, wenn ich irgendwas schreibe.

Jochen

Also quasi in einer Django-App, also ein Django-Projekt oder eine Django-Applikation, besteht üblicherweise aus einer Reihe von Django-Apps, die man halt schreibt.

Jochen

Und dann gibt es halt Third-Party-Apps, die man sich von irgendwo importiert, wenn man irgendwie das installiert hat und dann gibt es halt welche, die man selber schreibt.

Jochen

Also Userverwaltung ist üblicherweise ein Teil, ne?

Jochen

Und dann kann halt irgendwie, keine Ahnung, ein bestimmter Teil der Webseite kann halt irgendwie ein anderer Teil sein oder so.

Jochen

Und ja, üblicherweise schreibt man halt in diesen Apps irgendwas, wenn man jetzt eine Django-Applikation schreibt.

Jochen

Aber oft, wenn ich nicht weiß, wie ich das, wie ich überhaupt irgendwas machen möchte, dann mache ich nicht das, sondern ich schreibe Sachen in einem Notebook.

Jochen

Das ist auch dein Hintergrund, der da durchkommt.

Jochen

Ja, ja, natürlich.

Jochen

Also ich mache ich mache halt so eigentlich noch mehr als Django so Data Science.

Dominik

Ein Dupbo, du meinst ein Jupyter-Notebook?

Jochen

Genau, ein Jupyter-Notebook.

Jochen

Da gibt es auch ein sehr empfehlenswertes Paket, nennt sich Django Extensions.

Jochen

Da sind einige schöne Sachen dabei.

Jochen

Unter anderem halt einen Entwicklungsserver, der einen eingebauten Debugger hat, wo man dann halt direkt im Traceback quasi eine Debug-Shell bekommt.

Jochen

Da gibt es noch andere Dinge, Shell Plus, wo dann halt diverse Imports schon mit drin sind.

Jochen

Was das Ding auch hat, ist, man kann halt Shell Plus minus minus Notebook oder so starten und dann wird ein Notebook-Server hochgefahren.

Jochen

Und zwar mit einer Django-Shell.

Jochen

Und dann hat man halt all den Kram, den man in Shell Plus hat, halt in einem Jupyter-Notebook.

Und das ist halt sehr nett.

Jochen

Und dann kann man halt einfach mal hingehen und mit denen spielen und einfach mal so Sachen so sketch-mäßig implementieren und gucken, ob es funktioniert.

Jochen

Und erst, wenn ich weiß, okay, so funktioniert das irgendwie, was ich vorhabe, schreibe ich das quasi tatsächlich in eine Django-App rein.

Jochen

Und gut, es gibt Dinge, bei denen geht es nicht anders, als wenn man.

Oh, Gesundheit.

Jochen

Wenn man Modelle hat und die Datenbank ändert sich, dann muss man das halt irgendwie in der Models-PY machen und dann muss man halt irgendwie Migration ausführen.

Jochen

Oh, Migration, das ist ja auch so ein Thema.

Jochen

Aber wenn es um irgendwie Logik oder so geht, dass die richtig funktioniert oder wenn man einfach nur hinkriegen möchte, dass das jetzt oder wie wenn es elegant hinschribt, man weiß oft nicht, wie man das elegant hinschreibt.

Jochen

Und wenn man Sachen ausprobiert, dafür ist Notebook echt total super.

Jochen

Kann man halt so lange probieren, bis es geht.

Jochen

Es muss sich nicht dauernd irgendwie sich darum kümmern, dass man auf der Webseite ist, irgendwas anklickt oder irgendwie den Entwicklungsserver neu startet, weil im Syntax einfach steigt der dann aus und dann muss man irgendwie den neu starten.

Jochen

Das ist alles so ein bisschen langsam und im Notebook ist das alles viel schneller.

Jochen

Und dann, wenn es halt irgendwie funktioniert, dann übertrage ich die Funktionen, die ich halt im Notebook drinstehen habe, halt in meine anderen Files und dann schreibe ich Tests halt irgendwie.

Das ist der eine Punkt.

Jochen

Der andere Punkt bei Tests ist halt, dass es Dinge gibt, die sind sehr schwer zu testen.

Jochen

Es bringt aber gar nicht so furchtbar viel, das zu testen.

Jochen

Also das ist auch sowas.

Jochen

Wenn man jetzt tatsächlich, ich habe auch eigentlich fast nie 100%-Testabdeckung, sondern meistens eher so 70 bis 80 oder so.

Jochen

Was auch nicht so schlecht ist, was halt, ja, es ist halt irgendwo, ich weiß nicht genau, wo der Sweet Spot ist.

Jochen

Vielleicht ist er dabei noch ein bisschen mehr, vielleicht ist er ein bisschen weniger.

Jochen

Ich finde, es ist halt im Grunde wichtig, dass man so viele Tests hat, dass einem, wenn was schief geht, das auffällt.

Jochen

Aber wenn man jetzt so viele Tests hat, auch wenn man so viel Zeit in den Tests verbringt, hat man halt das Problem, dass man sich dann schon sehr, sehr festgelegt hat und das hinterher schwer ändern kann.

Jochen

Und die Frage ist, ist es das wert?

Jochen

Wenn das halt gar nicht mehr so viele Fehler fängt, weil ich irgendwie anfange, weiß ich nicht, also Dinge, die ich selten teste, sind halt, es funktioniert das URL-Routing.

Jochen

Das kriege ich eigentlich auch ohne Tests mit, wenn das nicht mehr funktioniert.

Jochen

Oder auch die Tests schlagen halt Fehler, die auf die entsprechenden Endpunkte gehen.

Jochen

Oder das Django-Admin-Geschichten, die teste ich auch eigentlich eher selten.

Jochen

Also die Logik schon, aber nicht, ob-Admin überhaupt geht.

Jochen

Überhaupt sollte man nicht unbedingt testen, die halt schon eigene Pakete sind, weil die haben schon Tests und so.

Jochen

Ja, und für mich ist der Sweet Spot beim Testen eher so bei 70, 80 Prozent und ja, Tests, die man einfach schreiben kann.

Jochen

Das ist ja auch immer so ein Problem, wenn die Tests zu kompliziert werden.

Jochen

Also gut, naja, manchmal schaffe ich das nicht.

Jochen

Manchmal schreibe ich auch Tests, die komplizierte Dinge tun und dann hinterärgere ich mich immer, wenn ich mir, wenn die fehlschlagen und ich dann nicht mehr weiß, was das, was testet das überhaupt?

Warum brauche ich die Dinge?

Jochen

Was macht das für komische Sachen?

Du brauchst Tests für deine Tests.

Jochen

Genau, und das will man natürlich eigentlich vermeiden, weil dann wird es schwer.

Wie kriege

Dominik

ich aber auch so eine Test-Coverage raus?

Dominik

Also, woher weiß ich denn, wie viel vor meiner Funktion getestet wird?

Dominik

Zähle ich dann einfach die Funktion, schreib für jede Funktion eine Testfunktion und gucke dann und dividiere dann in Prozenten?

Nee, da gibt es Tools für da gibt es ein Tool, das heißt Coverage.

Johannes

Kreativer Name und der gibt einem Wesentlichen für jede Programmzeile an, würde die von einem Test berührt oder nicht.

Und die Anzahl der Gesamtzeilen in einem Programm geteilt durch die Anzahl der getesteten Zeilen ist da nicht.

Dominik

Okay, also ganz easy.

Jochen

Ganz easy.

Jochen

Das macht einmal eine Ausgabe auf der Kommandozeile, aber es macht halt auch, es erzeugt so irgendwie HTML und wenn man das im Browser aufmacht, dann, wenn man auf die entsprechende Zeile drückt, dann sieht man halt auch, ich habe eine Ansicht des Kurz und sieht dann halt irgendwie farblich markiert, welche Kurzeilen halt noch nicht getestet sind.

Jochen

Und dann kann man halt relativ schnell sehen, wenn das halt Zeugs ist, wo man relativ sicher davon ausgehen kann, dass es sowieso funktionieren wird, wie irgendwie UL-Cons oder.

Die Stirn-Methode.

Jochen

Ja, dann muss man.

Johannes

Man kriegt nie auf 100% Coverage, wenn man diese Methode nicht testet, aber die ist völlig irrelevant.

Jochen

Auf der einen Seite, wenn man dann halt durchscrollt und sieht dann halt irgendwie ein komplexes Ding, einen Algorithmus, der irgendwas macht und der ist gar nicht getestet, dann sollte man, da sollte man dann vielleicht nochmal einen Test schreiben.

Jochen

Und so kann man, so gehe ich jedenfalls vor.

Jochen

Ich guck mir halt mal an, was die größten Code-Teile, die halt am meisten Funktionalität irgendwie haben.

Jochen

Wenn die nicht getestet, dann fange ich da halt da an.

Johannes

Es gibt auch ganz viele IDEs, die das integrieren, wo du quasi diese Ansicht in der Idee hast.

Johannes

Wenn du eine Testansicht haben kannst, wo du eben siehst, welche Zeilen durchgelaufen sind.

Welche Idee nutzt du?

Johannes

Ich benutze PyCharm.

Johannes

Vor ein paar Jahren sind die plötzlich groß geworden.

Jetbrains.

Das ist so eine Variante von einer IDE, die hieß früher Idee.

Die gibt es auch immer noch, aber es ist eine Java-Idee.

Johannes

It is schwierig, da eine Empfehlung zu given, weil auch da die Forlieben sehr weit.

Johannes

Genau, and this is a good one.

Johannes

I think that it's not the best IDE is and I know that it's not billiger.

Johannes

But I'm just what I can.

The Community

Edition can use, but they have not so good Django integration.

Oder Templates auch.

Johannes

Die Template Syntax ist in der Community Edition nicht drin.

Johannes

Ist ein bisschen schade, aber so ist es normalerweise.

Dominik

Migration hast du noch angesprochen, Jürgen.

Jochen

Ja, ja, das ist auch etwas, was halt.

Was ist das?

Genau, was ist das?

Jochen

Also oft hat man halt das Problem, wenn man jetzt so eine Web-Applikation entwickelt, dass sich, man hat ein neues Feature oder so und dafür muss man jetzt auch das Datenmodell ändern, weil man irgendwas Neues abspeichern muss oder so.

Jochen

Oder man muss halt eine bestehende Datenstruktur irgendwie ändern, weil sich die Beziehungen der Daten untereinander irgendwie ändern oder so.

Jochen

Und dann ist die Frage, wie macht man das eigentlich?

Johannes

Das gab es in den ersten Versionen von Django gab es das nicht.

Johannes

Da konnte man Datenbanken nicht ändern.

Johannes

Musste man manuell ändern in der Datenbank selber.

Johannes

Oder halt einmal komplett resetten.

Jochen

Ja, genau, dann gab es irgendwann ein Modul, das nannte sich South.

Jochen

Das hat halt dann damit angefangen.

Jochen

Ich weiß gar nicht gar nicht, wo die Idee dafür herkommt.

Für den Namen.

Jochen

Einfach für den Namen nicht und ich weiß auch gar nicht, wo das ist.

Johannes

Das ist, glaube ich, Vogelmigration, dass die in den Süden ziehen.

Jochen

Ach so.

Vogelmigration.

Jochen

Schlau.

Jochen

Es ist nur ein bisschen schlecht, wenn man danach googeln will.

Johannes

Ja, ist Django South, kann man schon sagen.

Johannes

Jedenfalls hat diese Bibliothek dieses Problem gelöst, in dem man eben gesagt hat, okay, ich möchte jetzt eine Zustandsänderung aufzeichnen.

Johannes

Und diese Zustandsänderung, die konnte man dann auf eine Datenbank anwenden.

Johannes

Also die hat einfach tatsächlich diese Tabellen, die da drin sind.

Verändert.

Johannes

Die haben ein Alter-Table gemacht oder Zeilen gelöscht oder was auch immer notwendig war, um eben diesen neuen Datenbankzustand hinzubekommen.

Johannes

Nicht den Datenzustand, also nicht, was da in der Datenbank drin ist, sondern die Struktur.

Johannes

Die strukturelle Anlage der Datenbank.

Johannes

Und das ist so ein wichtiges Problem, dass es irgendwann in Django Core gewandert ist.

Johannes

Und ist jetzt eines der wichtigsten Module in

Jochen

Django Core.

Jochen

Ja, ja, auf jeden Fall.

Jochen

Also, ich erinnere mich da auch, mit Schrecken an Zeiten, also wo dieses Problem, also jetzt mit integrierten Migrationen und so, ist es halbwegs okay.

Jochen

Also, es ist auch immer noch, man stößt da auf viele Fälle, wo es eklig werden kann und wo man auch für die Migration einen Test schreiben muss und so.

Jochen

Aber wenn ich mich da an frühere Zeiten zurückerinnere, wo wir ja jetzt gar nicht sowas wie Django verwendet hatten, zum Beispiel bei Firmen, bei denen ich gearbeitet habe, sondern irgendwie selbstgebaute Webframeworks oder Dinge, die es schon gab, die aber irgendwie sowas alles nicht drin hatten, da war das immer irgendwie eine problematische Geschichte.

Jochen

Da hat man dann halt irgendwie das getestet, irgendwie lokal oder auf einem Entwicklungssystem oder einem Staging-System und da hat es dann funktioniert.

Jochen

Da hatte man das Problem, wie synchronisiert man die unterschiedlichen Schemaversionen, was passiert auf einem Produktionssystem, dann hat man das irgendwie durchgeführt und dann ist auf dem Produktionssystem aber was anderes passiert, als man irgendwie eigentlich erwartet hatte.

Jochen

Und dann muss man halt danach gucken, was ist denn da jetzt eigentlich passiert?

Jochen

Und es gab gar keine formalisierte Sicht auf dieses, was passiert da jetzt gerade, sondern das ist halt ein Skript, das man ausgeführt hat.

Jochen

Und dann, ja, das ist dann aber möglicherweise auch nicht so mit dabei, sondern das ist bei irgendeinem Entwickler auf dem Rechner und so und der konnektiert sie, hat er dann auch.

Jochen

Genau, in irgendeinem Notebook und das macht dann halt irgendwas.

Jochen

Und das ist halt schön, wenn man das halt formalisiert hat, weil bei Django hat man dann halt irgendwie ein Verzeichnis Migrations, in dem die alle drin liegen, wo man da reingucken kann, was da passiert.

Jochen

In der Datenbank selbst wird festgehalten, welche schon ausgeführt worden sind und an welcher Stelle man sich befindet.

Jochen

Und man kann halt auch leicht wieder vor- und zurückspulen, sozusagen.

Jochen

Man kann halt sagen, Migrate und dann halt eine Nummer einer Migration angeben, zu der man zurück möchte und dann rollt sich die Datenbank in diesen Zustand wieder zurück.

Jochen

Dann kann man halt, wenn man zum Beispiel gesehen hat, dass das, was man gemacht hat, war Blödsinn, dann rollt man halt das Ding zurück, löscht die Migration und macht halt eine andere.

Jochen

Und ja, das ist eine sehr, sehr praktische Geschichte und führt halt dazu, dass man dieses ganze Problem irgendwie so halbwegs in den Griff bekommt.

Jochen

Und es gibt halt zumindest die Tools an die Hand, mit denen man das in den Griff bekommen kann.

Jochen

Was halt, wenn man das halt nicht so macht, sondern von Hand oder selbstgestrickt halt doch viele böse Falschstricke für Leute bereithält und die dann also relativ unvorbereitet reinlaufen.

Jochen

Ja.

Jochen

Und das ist halt eine Geschichte, die man auf jeden Fall wissen sollte, dass das gibt.

Johannes

Ich glaube auch, dass gerade Third-Party-Apps dadurch überhaupt erst richtig möglich wurden.

Johannes

Ja.

Johannes

Dass man eben diese Migrationen mitliefern konnte.

Johannes

Weil sonst immer in jeder Bibliotheks-Update musstest du von Hand diese Struktur anpassen.

Johannes

Oder eben diese Skripte haben, die das irgendwie machen und hoffen, dass die funktionieren auf deiner Datenbank.

Johannes

Genauso wie sie bei dem Entwickler funktioniert haben.

Johannes

Und heute weißt du einfach, wenn du eine Bibliothek installierst, die bringt ihre Migrationen mit und die funktionieren auch.

Johannes

Aber klar, es ist auch so ein Falschstrick.

Johannes

Wenn man zum ersten Mal eine Django-Anwendung startet und dann schön seine Modelle geschrieben hat und dann Operational Errors bekommt, weil die Datenbank nicht da ist, stolper ich auch regelmäßig noch drüber, weil ich vergesse, meine Datenbank zu migrieren.

Dominik

Dann gibt es keine automatische Erinnerung, also die musst du dir dann selber.

Johannes

Der Operational Error ist die automatische Erinnerung.

Dominik

Ja, es hat sich auf jeden Fall so.

Dominik

Ernst könnte man Dango für alles mögliche coole einsetzen.

Dominik

Für große Projekte, für kleine Projekte, für schmale, schlanke.

Jochen

Ich weiß nicht, haben wir eigentlich schon irgendwelche Beispiele genannt für Jungle-Anwendungen, die man vielleicht so man vielleicht so kennt?

Kennst du denn welche?

Jochen

Ja, zufällig.

Ja, zufällig.

Jochen

Aber ich kenne bestimmt auch nicht alle, aber zwar, ich glaube, eine der größten Django-Implementationen hat Instagram.

Jochen

Oder hat Instagram?

Haben sie abgelöst, klar.

Haben sie abgelöst?

Jochen

Oh je, dann war das jetzt kein gutes Beispiel.

Johannes

Nee, aber sie sind natürlich sehr groß damit gewachsen.

Johannes

Das ist natürlich richtig.

Jochen

Ansonsten.

Dominik

Was machen die denn jetzt, weißt du das?

Weiß ich nicht genau, nee.

Johannes

Es ist üblicherweise so, dass wenn man solche Standardlösungen einsetzt und dann so groß wird wie Instagram zum Beispiel, dass man dann auf einmal auf Probleme trifft, die eben durch Standardlösungen nicht mehr abgedeckt werden und dass man dann anfängt, seine eigenen Dinge zu bauen.

Johannes

Das haben die ganzen großen Firmen das ja.

Johannes

Die betreiben alle ihre eigenen Webserver.

Johannes

Die haben alle ihre eigenen Datenbanken geschrieben, die haben alle ihre eigene Infrastruktur geschrieben, weil ab einer gewissen Größe sind die Standardlösungen einfach nicht mehr richtig.

Johannes

Und bei Instagram war es genauso.

Johannes

Die sind sehr groß geworden mit Django und haben es dann abgelöst.

Soweit ich weiß.

Dominik

Fällt dir noch ein anderes Beispiel ein?

Einen von euch.

Johannes

Es gibt viele kleine Sachen, die damit laufen.

Man sieht es von außen natürlich nicht.

Johannes

Man sieht eine Web-Anwendung nicht an, ob es in Django geschrieben ist oder nicht.

Dominik

Äh, ich bin in der Karte.

Johannes

Deshalb muss man so ein bisschen darauf vertrauen, dass die Entwickler einem das mitteilen.

Johannes

Es gibt ein System, das heißt Pre-Tix.

Johannes

Das ist ein Ticket-Verkaufssystem.

Johannes

Also wenn man ein Konzert veranstaltet und Tickets verkaufen möchte, das ist in Django geschrieben.

Johannes

Die sind auch sehr aktiv bei den Django-Cons.

Jochen

Ja.

Jochen

Ansonsten, also ich weiß, das ist halt auch noch.

Es gibt so eine Zeitung in Amerika.

Jochen

Ja, genau.

Lawrence.

Johannes

Das waren die ursprünglichen Entwickler von Django.

Johannes

Also es kommt aus dem Zeitungsumfeld.

Dominik

Also auch als Blogplattform für Vertrieb von neuen Newsartikeln oder.

Johannes

Ja, die haben ihre komplette Zeitungswebseite damit organisiert im Wesentlichen.

Johannes

Also die, ja.

So ist es, das ist so die Entstehungsgeschichte.

Johannes

Das ist aus einer kleinen Stadt in Texas, Lawrence, wo eben zwei Entwickler gesagt haben, wir machen das jetzt einmal richtig, anstatt immer wieder PHP-Kram zusammenzubasteln.

Johannes

Haben sie einmal das Problem richtig gelöst und durften es dann irgendwann veröffentlichen.

Johannes

Und das System heißt jetzt Django.

Und soweit ich weiß, wird es da immer noch eingesetzt.

Dominik

Spannend.

Dominik

Ja, habt ihr noch was beizutragen zum Django oder würdet ihr sagen, wir haben das Thema jetzt soweit durch?

Tja.

Johannes

Es gibt noch viele Dinge, die man sagen könnte, aber nichts konkretes.

Dominik

Ja, dann hatte meine Fragen, wenn wir irgendwie ein Thema nochmal besprechen sollen, dann sagt gerne Bescheid, dann machen wir genau da weiter.

Johannes

Bestimmt ja auch diese E-Mail-Adresse, indem ihr Fragen

Johannes

schicken kann.

Dominik

Ganz genau.

Hallo at python-podcast.de.

Jochen

Nee, mir fällt da jetzt auch tatsächlich, ja, aber man kann bestimmt auch noch über diverse Bereiche in Django wieder eine eigene Seite machen.

Jochen

Eigene Episode.

Jochen

Über Episode über den ORM oder Episode über Template Sprachen oder so.

Johannes

Ja, oder auch über ganz einfache Sachen wie die Formularintegration oder wie die Session-Integration oder ganz einfache Dinge, die man so für ganz normal hält, die aber

Dominik

ganz normal, easy und so weiter.

Dominik

Ja, man kriegt das halt

Johannes

das halt automatisch mit.

Johannes

Wenn man Django einmal startet, dann ist es schon da und man muss sich nie Gedanken drüber machen.

Johannes

Aber es ist super interessant, was damit alles geht und was vielleicht nicht geht und wie es geht.

Und super spannende Sachen.

Jochen

Was man vielleicht noch erwähnen sollte, also dieser ganze Web-Stack, also Web ist halt so ein bisschen, was man halt leider auch immer wieder sieht, dass es nicht so richtig aus einem Guss ist.

Jochen

Also wenn man sich jetzt beispielsweise anschaut, wenn man mit X-Code jetzt iOS-Applikationen erstellt oder so, dann ist das halt auch Model View Controller, aber es ist halt eigentlich sehr, sehr schön irgendwie so gebaut, dass es halt alles von dem Finger, der irgendwo draufklickt, bis zu dem Datenmodell halt alles schön ineinander greift und funktioniert.

Jochen

Das ist im Web leider alles nicht so wirklich und das fällt einem dann halt auch öfter auf oder auf den Fuß, weil man halt ganz so viele unterschiedliche Sprachen-Layer hat, die irgendwie miteinander interagieren müssen.

Jochen

Jetzt der Django-Teil ist jetzt sozusagen nur der Teil der Web-Applikation, die sich jetzt auf einem Applikationsserver befindet und da irgendwie, und der Datenbankteil ist halt jetzt auch noch irgendwie mit drin, sozusagen.

Jochen

Aber, oder es rendert auch HTML nach vorne raus, aber es ist halt auch das HTML, also die Templates selber.

Jochen

Ist das jetzt, ist HTML ein Teil von Django?

Jochen

Eigentlich eher nicht.

Jochen

Das ist eigentlich nochmal eine etwas andere Welt.

Jochen

Wie sieht das hinterher aus?

Jochen

Dazu braucht man dann ein CSS, das ist zwar auch irgendwie ein Django drin.

Jochen

Man kann halt, es gibt da, man kann SAS oder LESS oder was auch immer man verwenden möchte, um halt irgendwie das CSS von der Seite zu erzeugen.

Jochen

Das kann man natürlich machen, aber wie man das jetzt macht und der Umgang damit, das ist natürlich wieder irgendwie so eine eigene Geschichte.

Jochen

Das ganze JavaScript, also der Teil der Web-Applikation, die halt auf dem Browser läuft, ist nochmal eine andere Geschichte, die wird dann halt auch vielleicht, die wird wahrscheinlich nicht mal von Django ausgeliefert, sondern von dem statischen Web-Server, der halt irgendwie vor Django meistens noch davor ist und irgendwie so Reverse-Proxy vor der Applikation ist für statische Inhalte und Dinge.

Jochen

Und ja, Typografie, überhaupt wie SSL, dann die ganzen Netze, also da ist noch so viel Zeugs mit dabei, der halt auch eine Rolle spielt, wenn man jetzt so eine Webseite betreibt, der jetzt nicht unbedingt Teil von Django ist, da gibt es noch viel zu tun.

Jochen

Und das ist natürlich so ein Ding, also wenn man jetzt einfach nur Django macht, dann hat man damit die Komplexität dieses Gesamtdings irgendwie eine Webseite betreiben, noch nicht komplett abgedeckt.

Jochen

Also es ist ein ganz guter Teil davon, aber da gibt es.

Dominik

Also wie man eine Webseite komplett betreibt, so von Server und Deployment und wie man so, weiß ich, Load Balance macht oder sowas.

Jochen

Könnte man auf jeden Fall auch.

Jochen

Hat dann nicht mehr so wahnsinnig viel mit Python zu tun.

Gibt es das nicht in Python?

Jochen

Doch, man kann das auch alles in Python machen, aber ich mache das auch in Python.

Johannes

Nee, viele Bereiche gehen ja dann raus, auch aus der eigentlichen Programmierung und gehen dann in die Administration rein.

Johannes

Und da ist Python natürlich ein wichtiges Werkzeug, aber jetzt nicht das, worauf es läuft.

Dominik

Ja, also dann vielen Dank euch beiden hier, dass ihr euch so schön euch unterhalten habt, mir ein paar Fragen beantwortet, ob ich so hatte.

Dominik

Ich glaube, so viel zusammenfassen müssen wir gar nicht.

Dominik

Ich habe so ein bisschen Dango gemacht heute.

Dominik

Ja, das war super.

Dominik

Und wir haben heute noch gar nicht über Events gesprochen, aber ich kenne gerade keine, die jetzt in nächster Zeit sind, so jetzt am Jahresende.

Dominik

Ich weiß nicht, ob euch welche einfallen.

Jochen

12.

Jochen

Dezember ist Treffen der Python-User Group Köln, PyCologen.

Jochen

Ja, jede Woche ist halt irgendwie Python Fuhr in Düsseldorf.

Jochen

Nächstes PyTDF-Treffen ist erst wieder am 9.

Januar, glaube ich.

Jochen

Also Treffen der Düsseldorfer Python-User Group.

Dominik

Falls ihr eure eigenen E-Mail-Sput verboten wollt, schreibt uns bitte eine E-Mail.

Jochen

Natürlich, also ich meine, wir kennen jetzt nur die Sachen im Rheinland, Düsseldorf, Köln, Umfeld.

Ja, würde ich sagen.

Dominik

Vielen Dank schön, dass ihr zugehört habt.

Dominik

Noch einen schönen Tag, morgen, Abend, wo auch immer ihr gerade seid, was ihr macht.

Dominik

Und ja, bis zum nächsten Mal.

Bis zum nächsten Mal.

Jochen

Tschüss.