Transcript: PP02 - Django

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

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

Dominik

Wir haben euch da 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 kriegen wir gemeinsam hin.

Dominik

Wir versuchen auch eine Einführung dazu zu machen, fangen heute ein bisschen an, wieder mit den Basics,

Dominik

und dann gehen wir ein bisschen in die Tiefe des Themas.

Dominik

Wir sind wieder im wunderschönen Wintergarten hier von Jochen, ich bin der Dominik,

Dominik

Und diesmal habe ich nicht nur den Jochen dabei, sondern auch den Johannes.

Dominik

Sag doch auch nochmal Hallo, ihr zwei.

Jochen

Ja, genau. Hier ist auch Jochen. Hallo von mir.

Jochen

Und genau, zum Django-Thema haben wir uns direkt schon mal einen ersten Expertengast eingeladen.

Jochen

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 dich ja vielleicht mal vorstellen.

Johannes

Ja, hallo, ich bin Johannes und nach der Ankündigung kann ich eigentlich gar nicht mehr so richtig viel sagen. Jetzt sind die Anforderungen gestellt und mal schauen, ob ich die erfüllen kann.

Johannes

Also du arbeitest auch mit Django?

Johannes

Ich arbeite auch mit Django, genau. Ich arbeite mit Jochen viel zusammen, der ja auch mit Django sehr viel macht. Und wir haben uns auch darüber kennengelernt im Chaos Computer Club in Düsseldorf in der Python-Ecke. Und haben dann festgestellt, dass wir beide Django machen und arbeiten eigentlich seither zusammen.

Dominik

Gut, beim Peißenfudern, donnerstags.

Dominik

Genau, jeden Donnerstagabend ab 18 Uhr.

Dominik

Ja, die Veranstaltungen kommen erst am Ende, aber wir versuchen das ab und zu nochmal ein bisschen einzustreuen.

Dominik

Ja, wir machen heute Dango, deswegen fangen wir vielleicht nochmal ganz am Anfang an.

Dominik

Johannes kann, glaube ich, sogar etwas zur Geschichte von Dango erzählen.

Dominik

Er ist nämlich genauso ein alter Hase wie der Jochen.

Dominik

Wäre doch super, wenn du nochmal kurz erklären könntest, was das ist, wo kommt das denn her?

Dominik

Was macht man damit überhaupt?

Dominik

Und also Django hört sich jetzt erstmal an, ja, was ist das, ein Tanz?

Johannes

Ja, es ist benannt nach einem Jazz-Gitarristen, Django Reinhardt.

Johannes

Die 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 Web-Anwendungen 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 jetzt 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. Ich glaube, kurz nach Ruby on Rails. Und ich denke, das war auch so ein bisschen vielleicht das Vorbild für Django.

Jochen

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, die hieß Snakes and Rubies. Sehr zu empfehlen auch übrigens. Gibt es auf YouTube immer noch das Video. Inzwischen ungeheuer alt. Wo sich eben da die beiden Hauptentwickler getroffen haben.

Johannes

Jacob Kaplan-Moss war das, glaube ich, der da war.

Johannes

Und der von Ruby on Rails heißt David Hanmeier-Hansen.

Johannes

Ja, genau.

Johannes

Und die beiden haben so im Wesentlichen ihre beiden Ansätze vorgestellt.

Johannes

Und haben eben Snakes und Rubys gezeigt.

Johannes

Und der eine, der Kaplan-Moss, hat eben gezeigt, wie man Probleme mit Django löst.

Johannes

So einmal quasi den Querschnitt.

Johannes

Wir haben eine Möglichkeit, URLs zu definieren und dann eine Funktionalität dazu zu definieren

Johannes

und dann die Templates dazu anzuzeigen und Sachen aus der Datenbank zu holen.

Johannes

Und dann hat der David Heinmeier-Hanson mehr oder weniger das Gleiche gemacht,

Johannes

aber auf eine ganz andere Art und Weise, eben auf die Ruby on Rails Art und Weise.

Dominik

Wodurch unterscheidet sich die Ruby on Rails Art und Weise von dem, was mir jetzt so...

Dominik

Ja, zuerst mal natürlich, dass es eine andere Programmiersprache ist.

Johannes

Aber Ruby on Rails geht wesentlich mehr über Konventionen.

Johannes

Bei Django wird sehr viel explizit gemacht.

Johannes

Also eines der Beispiele ist, wie eben URLs funktionieren.

Johannes

In Django definierst du eine URL, indem du einen regulären Ausdruck hinschreibst.

Johannes

Und wenn der reguläre Ausdruck eben dem entspricht, was der Benutzer in seinem Browser eingibt,

Johannes

dann wird die entsprechende Funktion dazu ausgeführt.

Johannes

In Ruby on Rails ist das anders.

Johannes

In Ruby on Rails ist das durch eine Konvention gemacht.

Johannes

Du hast einen Controller, der einen bestimmten Namen hat.

Johannes

Und über diesen Namen wird automatisch die URL bestimmt, über die du diesen Controller ansprechen kannst.

Johannes

Das heißt, du hast auf der einen Seite wesentlich stärkere Konventionen.

Johannes

Du hast damit die Möglichkeit, ein Ruby on Rails Projekt, sage ich mal, schneller zu verstehen, weil die alle die gleiche Struktur haben.

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

Johannes

gleichzeitig eine Stärke und eine

Johannes

Schwäche, weil man eben

Johannes

dadurch in Ruby on Rails wesentlich

Johannes

schneller Ergebnisse sieht. Ich muss nur diesen

Johannes

Controller schreiben und ich muss ihm nur eben

Johannes

eine bestimmte Datei an die richtige Stelle hinlegen

Johannes

und dann wird das automatisch zu einer

Johannes

kompletten Webseite. In Django muss ich den ganzen

Johannes

Weg gehen. Ich muss die URL definieren, ich muss die Funktionalität

Johannes

definieren, ich muss die Datenbankmodelle definieren,

Johannes

ich muss die in die Datenbank

Johannes

reintun, ich muss die aus der Datenbank wieder rausholen

Johannes

und dann muss ich sie in ein Template reintun, was ich selbst

Johannes

definiert habe.

Dominik

Du hast ja gerade noch mal von Kontrollern geredet.

Dominik

Vielleicht weiß jetzt noch nicht jeder Hörer, was das genau ist.

Dominik

Wollt ihr das noch mal kurz erklären?

Dominik

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

Dominik

um es dabei geht.

Jochen

Ja, also das wäre dann halt auch so eine Gemeinsamkeit

Jochen

zwischen Ruby on Rails und Django.

Jochen

Das sind beides so Model-View-Controller-Frameworks,

Jochen

also die diesen Ansatz halt halbwegs sauber irgendwie umsetzen.

Jochen

Das heißt, es gibt halt Modelle, in denen irgendwie definiert wird,

Jochen

wie die Daten aussehen, die man jetzt in der Applikation hält.

Jochen

also wie der State der Applikation quasi abgelegt ist, sich verhalten soll.

Jochen

Meistens hat man eine relationale Datenbank irgendwie im Hintergrund

Jochen

und dann muss halt aus den Modellen, wird dann halt ein Schema generiert

Jochen

und dann werden die Daten halt da irgendwie reingespeichert.

Jochen

Und dann hat man sogenannte Controller, die quasi die Daten, die in den Modellen sind,

Jochen

mit den Views, die halt dafür zuständig sind, wie das hinterher aussehen soll

Jochen

für ein Benutzerinterface

Jochen

verbinden sollen, wobei Benutzerinterface ganz

Jochen

unterschiedliche Sachen sein können, also

Jochen

ein Beispiel ist, man macht

Jochen

irgendwie ein Weltraumkampfspiel

Jochen

und dann gibt es halt

Jochen

vielleicht irgendwie ein grafisches Interface,

Jochen

wo man irgendwie die Raumschiffe rumfliegen sieht und so,

Jochen

aber man könnte sich halt auch vorstellen, dass ein

Jochen

anderes Interface nur textbasiert

Jochen

ist, wo sich dann Leute quasi per Telnet

Jochen

irgendwie einloggen oder so und

Jochen

das muss dann

Jochen

natürlich unterschiedlich aussehen, je nachdem

Jochen

was man für ein Interface hat oder

Jochen

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

Jochen

Und dafür diese Unterschiede abzubilden,

Jochen

ist halt der View zuständig und der Controller.

Jochen

Die sind halt dafür da,

Jochen

sozusagen die Views mit den Modellen irgendwie

Jochen

zu verbinden, also die Daten irgendwie aus den Modellen zu holen,

Jochen

die dann in der Form den Views zu geben,

Jochen

wie sie das halt brauchen. Und ja, das

Jochen

Ganze nennt man irgendwie Model-View-Controller.

Dominik

Also Modell ist das, was in der Datenbank angelegt ist,

Dominik

wie dann das... Ja, aber auch die

Jochen

Objekte quasi, die hinterher in der Applikation

Jochen

sich um die Datenhaltung kümmern, sind auch

Jochen

sozusagen die Modelle, ja.

Jochen

Okay. Also Datenbank ist halt

Jochen

eigentlich nochmal ein Parallel. Also die Klassen, die man benutzt

Jochen

zur Verwaltung von dieser Datenbank auch.

Jochen

Ja, ja, genau, genau. Und was

Jochen

ein bisschen verwirrend ist, ist halt, dass

Jochen

in den Django die Views Templates

Jochen

heißen und die Controller Views

Jochen

das, äh, weiß nicht,

Jochen

ein bisschen... Ihr seid ja alle ein bisschen

Jochen

verwirrt und durcheinander, okay.

Jochen

Ja, da stolpern Anfänger oft

Johannes

drüber, dass die Bezeichnungen anders sind und eben

Johannes

ausgerechnet View und View

Johannes

unterschiedliche Dinge bedeuten.

Dominik

Gemein, da muss doch jemand mal so ein Request stellen und sagen,

Dominik

hey, ändert das mal. Ja, aber

Jochen

nach über zehn Jahren ist das halt ein bisschen schwer zu ändern.

Jochen

Das geht halt nicht mehr so richtig gut.

Dominik

Da haben sich dann die anderen Leute auch dran gewöhnt, wie das dann heißt.

Dominik

Ja, verstehe.

Dominik

Ja, also wofür nutzt man denn Dango, wenn ihr jetzt

Dominik

gesagt habt, was da schon man mit machen kann?

Dominik

Ja, im Prinzip kann man jede

Dominik

Web-Anwendung damit

Dominik

herstellen.

Johannes

Und die Breite ist da,

Johannes

also es gibt

Johannes

quasi keine Begrenzung.

Johannes

Die erste Anwendung, die sicherlich jeder machen muss, ist ein Blog

Johannes

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.

Johannes

Ich mache regelmäßig Django-Kurse und da programmieren wir dann Shops nach oder eBay nachprogrammiert oder Twitter nachprogrammiert,

Johannes

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. Klar, die sehen nicht so schön aus und die haben auch nicht so viele Funktionen wie die tatsächlichen Vorbilder, aber die Grundvorgangsqualität ist eben sehr schnell damit umzusetzen.

Dominik

Auf was konzentrierst du dich dann besonders in diesem Kurs? Also auf das Model, das View, das Controller-Ding?

Johannes

Nee, die müssen alle drei zusammenarbeiten, weil du mit jedem dieser Teile allein hast du keine komplette Anwendung. Es wird erst dann eine komplette Anwendung, wenn die drei zusammenarbeiten. Das heißt, man muss so zwischen diesen Bereichen hin und her springen und da gibt es auch verschiedene Möglichkeiten, damit umzugehen, die sich auch, gerade wenn man mit anderen Leuten darüber spricht, zeigen, dass da jeder unterschiedlich damit umgeht.

Johannes

Aber im Endeffekt geht es darum, diese drei Bereiche zu verheiraten und diese drei Bereiche so zusammenzubringen, dass eine Anwendung daraus wird. Das heißt, ich brauche irgendwoher Daten, die ich handhaben kann. Und diese Daten sind eben in den Modellen definiert.

Johannes

Ich brauche irgendwelche Sachen, die ich anzeigen kann, weil im Endeffekt 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 brauche irgendwas, was eine Funktionalität darstellt, weil sonst macht meine Web-Anwendung nichts.

Johannes

Und das ist hier in Django eben der Controller bzw. die View-Funktion.

Johannes

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. Eine Stelle, an der man das ganz schnell sieht, ist der Django-Admin. Das ist eines der am meisten gelobten Module in Django.

Dominik

Also Django Admin ist das Backend-Interface,

Dominik

um seine Seite zu daten. Genau, das ist sozusagen

Johannes

ein genialer Zaubertrick, weil

Johannes

der Django Admin, das ist einfach

Johannes

ein Modul in Django.

Johannes

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

Johannes

auch. Aber was der

Johannes

machen kann, ist, der kann die Modelle,

Johannes

die ich geschrieben habe, inspizieren und mir die dann

Johannes

eben in einer schönen Darstellung zeigen.

Johannes

Das heißt,

Johannes

ich habe automatisch

Johannes

eine Backend-Funktionalität drin,

Johannes

ich habe automatisch eine Verwaltungsfunktion drin,

Johannes

die aber meine Modellierung

Johannes

nimmt. Das heißt, die

Johannes

sich auf meine Modellklassen

Johannes

bezieht und die mir

Johannes

das Schreiben von so einer Backend-Funktionalität

Johannes

im Wesentlichen wegnimmt.

Johannes

Und das

Johannes

ist eine sehr schöne Sache, wenn man eben so eine

Johannes

Anwendung zum ersten Mal schreibt und sagt,

Johannes

okay, ich habe mich jetzt an WordPress orientiert,

Johannes

ich möchte einen Blog machen. Jeder möchte einen Blog machen

Johannes

am Anfang.

Johannes

Dann gehört dazu eben auch so

Johannes

ein Interface, wo ich die Blogposts bearbeiten

Johannes

kann.

Johannes

Und das

Johannes

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 hinzuverschieben oder sonst was zu machen.

Johannes

Diese ganzen Basisfunktionalitäten, die man immer braucht, die sind im Django-Admin schon drin. Das heißt oft CRUD, Create, Read, Update, Delete. Das sind die vier Funktionen, die man immer mit seinen Datenbank-Dingen tun muss und die sind eben schon im Django-Admin drin 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

Dominik

oder einzigartig? Oder machen das die anderen Frameworks,

Dominik

die es in Python oder so gibt,

Dominik

von Flask oder von Pyramid mal gehört,

Dominik

auch so?

Jochen

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

Jochen

Aber ich würde sagen,

Jochen

die Bekannteren, die das halt komplett

Jochen

integrieren, sind eben Django für Python

Jochen

oder halt eben Ruby und Rails für Ruby.

Jochen

Und wenn man jetzt

Jochen

zum Beispiel Flask nimmt, dann ist das eher

Jochen

ein etwas anderer Ansatz. Da ist es halt so,

Jochen

dass der

Jochen

Layer, also Flask selber

Jochen

enthält kaum

Jochen

Model-View-Controller-Funktionalität,

Jochen

wie man sonst so in Django hat. Also es ist halt nicht

Jochen

alles integriert, sondern

Jochen

da kann man sich halt

Jochen

Dinge zusammenstecken,

Jochen

die man benutzen kann. Zum Beispiel der

Jochen

Object

Jochen

Relational Mapper,

Jochen

ORM genannt oft,

Jochen

ist halt in Flask

Jochen

meistens SQL Alchemy. Man kann aber auch irgendwas anderes

Jochen

nehmen. Man kann, wie heißt dieses Dings,

Jochen

Pony oder so, was da irgendwie heute

Jochen

irgendwie recht beliebt ist, nehmen

Jochen

oder so. Man könnte auch den

Jochen

Django-ORM nehmen. Man könnte auch den Django, genau.

Jochen

OR was? ORM

Jochen

Object Relation Mapper.

Jochen

Das ist die Verbindung zwischen der

Johannes

SQL-Datenbank, die eben

Johannes

rohes SQL braucht und

Johannes

der Python-Welt, wo wir ja mit Python-Klassen

Johannes

arbeiten. Okay, jetzt habe ich das verstanden.

Johannes

Ja, und

Jochen

genau, bei Flask ist halt der

Jochen

Vorteil, dass man sich da quasi die

Jochen

Dinge, die man vielleicht auch sonst verwendet oder die man

Jochen

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

Den Django-ORM auszutauschen ist halt ...

Jochen

Ja, kann sein, dass das geht,

Jochen

aber das will man wahrscheinlich eher nicht tun.

Jochen

Bevor man das macht, nimmt man dann vielleicht auch besser 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.

Jochen

Es ist eine steilere Lernkurve am Anfang,

Jochen

aber weil einfach viel mehr Funktionalität da ist,

Jochen

mit der man irgendwie sich vertraut machen muss.

Jochen

Aber wenn man da erstmal so durchgestiegen ist,

Jochen

dann ist es halt auch schneller, damit irgendwas zu machen

Jochen

oder das halt auf neue Anforderungen anzupassen,

Jochen

als wenn man das jetzt irgendwie immer neu zusammenstöpseln muss.

Dominik

Wie ist das denn zum Beispiel, wenn du jetzt so ein Modul benutzt,

Dominik

was es irgendwie schon gibt,

Dominik

wie viel Arbeit wäre das denn jetzt,

Dominik

in so ein neues Framework zu integrieren?

Dominik

Das kommt total auf das Modul

Dominik

an. Das kann man so,

Dominik

diese Fragen kann man so eigentlich nicht beantworten.

Dominik

Die

Dominik

Mentalität,

Dominik

glaube ich, zwischen diesen Frameworks ist auch so ein bisschen

Dominik

unterschiedlich. Flask ist so ein bisschen,

Dominik

du kannst alles benutzen, was du willst.

Johannes

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

Johannes

zusammenpassen. Und Django ist

Johannes

mehr so ein bisschen, hier, wir haben

Johannes

den Bausatz gemacht und du kannst gerne darauf aufbauen,

Johannes

aber die müssen so funktionieren, wie wir das

Johannes

vorgegeben haben.

Johannes

Das heißt eben, wenn ich eine

Johannes

Modul habe oder eine Bibliothek, die

Johannes

nicht integriert ist, dann bin ich in Flask

Johannes

sicherlich schneller damit unterwegs, weil ich dann eben

Johannes

sowieso für diese Anbindung sorgen muss.

Johannes

In Django ist es dann eben

Johannes

oft so, dass es schon eine Django-Variante

Johannes

gibt davon, die mir

Johannes

eben genau diese Integration schon gibt. Und dann

Johannes

ist es natürlich leichter, die

Johannes

Django-Variante zu verwenden.

Johannes

Heißt halt aber, dass ich darauf angewiesen bin, dass

Johannes

schon jemand die Arbeit gemacht hat und auch

Johannes

fortlaufen tut, weil die Versionen

Johannes

natürlich ständig aktualisiert

Johannes

werden und

Johannes

es hat alles so seine

Johannes

Vor- und Nachteile.

Dominik

Wie würdet ihr denn einsteigen, wenn

Dominik

jetzt irgendwie jemand, der das noch nie gemacht

Dominik

hat, möchte seine erste Website, einen Blog

Dominik

einstellen, was würdet ihr ihm empfehlen? Einfach

Dominik

das Paket installieren und Tutorial

Dominik

lesen oder gibt es da schon eine Best Practice, wo

Dominik

ihr am besten...

Dominik

Ja, also ich würde,

Jochen

das habe ich bisher dann auch immer so gemacht, wenn ich

Jochen

das gefragt worden bin,

Jochen

das Two Scoops auf Django

Jochen

Buch zu empfehlen. Also das jetzt

Jochen

ist halt momentan nicht mehr so richtig super aktuell.

Jochen

Ich glaube, die letzte

Jochen

Auflage ist für Django 1.11

Jochen

und wir sind jetzt aber auch eigentlich schon bei 2.1.

Jochen

Da kommt

Jochen

dann wahrscheinlich für die nächste stabile

Jochen

oder länger

Jochen

supportete Release von Django wahrscheinlich

Jochen

auch wieder eine neue Version. Aber

Jochen

da wird eigentlich mal so grob beschrieben,

Jochen

wie man Dinge tut mit Django

Jochen

und so, ja.

Jochen

Also ich fand das,

Jochen

ich habe damals auch quasi

Jochen

einen Einstieg in Django über dieses Buch

Jochen

gefunden, das war irgendwann 2013

Jochen

oder so, weil ich irgendwie ein Projekt

Jochen

plötzlich mit einem Django-Backend konfrontiert war

Jochen

und dann, ja,

Jochen

mir auch gesagt wurde,

Jochen

dann liest doch mal einfach dieses Buch und dann

Jochen

macht alles Sinn plötzlich.

Jochen

Und so ein bisschen war das

Jochen

schon so. Also das war

Jochen

sehr, sehr hilfreich.

Jochen

Ja, man kann aber auch mit

Jochen

der Dokumentation, die sehr gut ist, anfangen

Jochen

oder ich weiß nicht, vielleicht mit einem von

Jochen

Johannes Krosen.

Johannes

Ja, ich mache das tatsächlich nicht so. Ich mag dieses Two Scoops of Django Buch nicht ungeheuer gerne, weil es sehr viele eigene Meinungen schon mitbringt und weil man die erst bemerkt, wenn man sich so ein bisschen mehr damit auskennt.

Johannes

Ich meine, es ist nicht schlecht. Ja, und die Leute, die das machen, sind auch Experten und wir benutzen auch sehr viel davon. Wir werden vielleicht noch über Cookie Cutter sprechen.

Johannes

Aber ich finde, es hat schon zu viel Flavor.

Johannes

Es ist schon zu weit von Vanilla Django weg.

Johannes

Das sind ja noch mehr Freiheiten,

Dominik

die du selber gerne kreativ ausleben würdest,

Dominik

wenn du genau verstanden hättest, wie es funktioniert.

Johannes

Genau, und das bedeutet auch,

Johannes

dass man eben auf diese Wahl festgelegt ist,

Johannes

die die Leute von Two Scopes of Django schon getroffen haben für uns.

Johannes

Weil die eben, wie gesagt, ihre Meinungen haben

Johannes

und weil die sagen, okay,

Johannes

du solltest eigentlich immer diese bestimmten Systeme verwenden

Johannes

und eben nicht diese anderen.

Johannes

Hast du das schon getan, so ein Beispiel?

Johannes

Ja, zum Beispiel, wenn

Johannes

die ihre Docker-Container

Johannes

bereitstellen. Es gibt oft

Johannes

Situationen, wo man eben keine Docker-Container haben

Johannes

möchte. Das ist halt aber bei

Johannes

denen einfach so. Die haben alles dockerisiert.

Johannes

Ist einfach so eine Sache.

Johannes

Oder die benutzen Django-Crispy-Forms,

Johannes

wo ich

Johannes

am Anfang sehr damit zu kämpfen hatte,

Johannes

weil es gar nicht dem entspricht, wie ich das mache.

Dominik

Das müssen wir vielleicht gleich nochmal kurz erklären, was ein

Dominik

Docker-Container ist und was eine Crispy-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, weil es zum einen relativ gut geschrieben ist.

Johannes

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

Johannes

Kann ich jedem nur empfehlen.

Johannes

Auch wenn man nur die Django-Dokumentation liest

Johannes

und das alles mehrmals angeschaut hat,

Johannes

dann ist man Experte in Django-Entwicklung.

Johannes

Und das Tutorial ist einfach ein schneller Einstieg

Johannes

in was muss ich tun, um eine Funktionalität zu kriegen.

Johannes

Aber eigentlich würde ich noch einen Schritt vorher anfangen.

Johannes

Wenn sich jemand da einlesen möchte,

Johannes

oder wenn jemand anfangen möchte, mit Django zu programmieren,

Johannes

ist meine Empfehlung, immer erst mal einen Schritt zurückzugehen

Johannes

und zu überlegen genau, was man eigentlich erreichen möchte.

Johannes

Weil es oft schwierig ist, das gleichzeitig zu machen,

Johannes

gleichzeitig zu lernen, wie man etwas erreicht

Johannes

und herauszufinden, was man eigentlich erreichen möchte.

Dominik

Das heißt, du würdest dir ein Projekt ausdenken,

Dominik

was derjenige dann umsetzen möchte,

Dominik

ob es jetzt Freizeit ist oder irgendwie nebenbei

Dominik

oder schon was Professionelles

Dominik

und dann direkt an dem Projekt konkret

Dominik

sich die Lösung aus Django dann zu erarbeiten.

Dominik

Genau, und vielleicht auch einfach mal konkret zu sagen,

Johannes

was muss ich haben an Funktionalität, um mein Ziel erreicht zu haben.

Dominik

Machst du das dann richtig mit Stift und Papier oder auf einem Whiteboard

Dominik

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 im Texteditor rein.

Johannes

Wenn ich die Wachsmalstifte von meinem Kleidung 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 möchte ich hinkommen?

Johannes

Oder soll das ein Blog sein, was YouTube-Videos anzeigt? Oder soll das ein Podcast-Blog sein? Oder soll das ein Blog sein, wo ich nur, keine Ahnung, meine Texte reinschreibe? Müssen da Bilder rein? Müssen da andere Dateitypen rein? Will ich Sharing-Buttons haben?

Johannes

Laute so Sachen, die jeder für sich entscheiden muss, die jeder für dieses Projekt entscheiden muss und die sicherlich in jedem Projekt anders sein werden, die aber eben dazu führen, dass man während man daran arbeitet, nicht mehr so viel drüber nachdenken muss. Und das ist für mich eine ganz wichtige Sache, dass ich eben weiß, wo ich hin möchte.

Johannes

Das kann sich zwischendurch ja ruhig ändern. Man muss ja seinen Weg auch anpassen können. Und wenn man sich eben herausstellt, dass man sich zu viel vorgenommen hat oder dass das, was man sich vorgenommen hat, nicht erreichbar ist oder dass es zu schwer ist, dann muss man das vielleicht anders machen.

Johannes

Aber man sollte trotzdem immer wissen, wo man hin möchte, weil wenn man dann anfängt, tatsächlich diese Umsetzung zu machen, ist man so sehr damit beschäftigt, die Dinge zu lernen, die man wissen muss, dass es schwer ist, sich Gedanken darüber zu machen, ob das überhaupt sinnvoll ist, was man jetzt sagt.

Dominik

Ist es denn sinnvoll, so vom Scratch total anzufangen, alles selbst zu bauen oder nimmt man dann direkt so etwas wie ein Template aus einem Cookie-Cutter? Vielleicht, Jörg, kannst du nochmal kurz erzählen, was das überhaupt ist?

Jochen

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 ein Block implementieren oder so, noch viel mehr Kram braucht.

Jochen

Da braucht man halt möglicherweise noch eine Anbindung an Cash-Backend-Redis oder sowas. Man braucht vielleicht irgendwie eine Volltext-Suchmaschine, die man dann auch noch drin hat. Man hat vielleicht irgendwelche Background-Tasks, die laufen müssen und so weiter und so weiter. 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 Blog schreiben wollte und mal schnell irgendwie eine Django-App hochziehen wollte und da gibt es dann halt so ein Tool, nennt sich Cookie Cutter, das ist auch von den Autoren von Two Scoops of Django oder beziehungsweise von einer der beiden Autoren und das legt dann halt so ein Projekt quasi an.

Jochen

Da werden einem am Anfang im Grunde

Jochen

genau so ein paar dieser Fragen gestellt, halt so

Jochen

möchtest du Docker oder lieber nicht oder

Jochen

brauchst du eigentlich Hintergrund-Tasks wirklich

Jochen

und

Jochen

wenn man das angegeben hat, dann

Jochen

wird quasi aus den, wenn halt

Jochen

die Template-Variablen, die

Jochen

im Projekt-Template drin sind, ersetzt

Jochen

durch konkrete Werte, also man gibt dem Projekt halt einen Namen

Jochen

und so, der wird dann relativ oft eingetragen

Jochen

und dann wird halt so ein Projekt erstellt

Jochen

und das läuft dann halt auch direkt von Anfang

Jochen

an.

Jochen

Und damit hat man dann ja quasi schon mal

Jochen

einen großen Schritt

Jochen

geschafft,

Jochen

weil bis dahin zu kommen möglicherweise

Jochen

auf anderem Weg relativ

Jochen

lange dauern könnte. Auf der anderen Seite

Jochen

hat man natürlich das Problem, dass man nicht genau weiß, was passiert

Jochen

ist und man halt jetzt auch viele

Jochen

sozusagen Einstellungen

Jochen

schon vorgenommen sind, von denen man jetzt

Jochen

gar nicht genau weiß, ob man die wirklich so haben

Jochen

wollte oder nicht und

Jochen

ja, man

Jochen

die man auch nur noch schwer ändern kann

Jochen

und man versteht nicht so genau, was da passiert

Jochen

und das ist natürlich in gewisser

Jochen

so ein Nachteil. Also, aber es ist

Jochen

denke ich schon halt irgendwie eine

Jochen

Möglichkeit, relativ schnell zu einem

Jochen

funktionierenden System zu kommen.

Jochen

Und ja, darauf aufbauen

Jochen

kann man dann ja weitermachen. Aber ja,

Jochen

es kann einem eine Menge

Jochen

Arbeit ersparen. Ich mache das meistens so, wenn

Jochen

ich neue Projekte irgendwie aufmache, dass ich halt

Jochen

dann irgendwie das Django-Cookie-Cutter-Template

Jochen

benutze. Aber ja,

Jochen

das trifft dann natürlich schon eine

Jochen

ganze Menge Entscheidungen,

Jochen

die man vielleicht auch anders treffen können wollte.

Dominik

Klingt aber, als könnte man es gut gebrauchen

Dominik

für Projekte, bei denen man schon

Dominik

relativ genau weiß, was man will.

Dominik

Ja.

Dominik

Naja, also ich meine, ich

Jochen

habe, das ist halt dann die Frage, ob man

Jochen

sozusagen

Jochen

das, was man tun möchte, den eigenen

Jochen

Bedürfnissen anpasst oder die eigenen Bedürfnisse halt so

Jochen

ähnlich wie eine SAP-Einführung.

Jochen

Also quasi, wenn man

Jochen

sich dafür entscheidet, das zu verwenden, dann muss man

Jochen

halt die eigenen Prozesse so umstellen, dass sie zu SAP passen

Jochen

und dann geht das halbwegs. Und bei Cookie Cutter ist es

Jochen

halt auch so, man muss dann die Dinge so

Jochen

machen, wie dieses Template das halt irgendwie quasi

Jochen

vorgibt.

Jochen

Und wenn man das anders machen will,

Jochen

hat man Schwierigkeiten oder

Jochen

dann ist es halt nicht mehr so hilfreich, weil dann muss man wieder eine ganze Menge

Jochen

von Hand ändern, was man ja eigentlich vermeiden

Jochen

wollte, indem man Cookie-Catter verwendet.

Jochen

Es ist halt so eine,

Jochen

also wenn man sich quasi damit abfindet, dass alles

Jochen

so ist, wie das in dem Template halt

Jochen

vorgesehen ist, dann ist es eigentlich

Jochen

ganz nett. Also dann, wenn man das

Jochen

nicht so toll findet, dann

Jochen

hilft es einem halt nicht. Dann muss man vielleicht ein eigenes Template machen.

Johannes

Viele Sachen, die in dem Cookie-Cutter-Template

Johannes

drin sind, gehen für mich

Johannes

so ein bisschen in Richtung Produktivbetrieb.

Johannes

Die nehmen einem viel Arbeit

Johannes

weg, wenn man dann Produktivbetrieb hat. Die haben

Johannes

Sachen drin für Content-Delivery-Networks

Johannes

und die haben Sachen drin für Docker und die haben

Johannes

Sachen drin für Cached oder für

Johannes

sonst irgendwelche Sachen. Ich glaube, wenn man

Johannes

zum ersten Mal so ein Projekt macht, ist es

Johannes

einfacher,

Johannes

from scratch anzufangen.

Johannes

Weil man viele von diesen Sachen dann einfach nicht braucht.

Johannes

Das Blog, was man da

Johannes

als erstes Mal entwickelt,

Johannes

wird sicherlich nicht gleich

Johannes

100.000 Hits pro Minute haben.

Johannes

Woher willst du das denn wissen?

Johannes

Meine Blogs haben nie so viel gehabt.

Johannes

Vielleicht

Johannes

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

Johannes

Aber es ist sicherlich

Johannes

nicht die erste Ausrichtung. Es wird sicherlich

Johannes

nicht das erste Problem

Johannes

sein, dafür zu sorgen, dass das die ganze Welt

Johannes

gleichzeitig lesen kann. Sondern das erste

Johannes

Problem wird sicherlich sein,

Johannes

dafür zu sorgen, dass es irgendjemand

Johannes

lesen kann. Und das überhaupt läuft.

Johannes

Ja, genau.

Johannes

dass man überhaupt einen Block hat.

Johannes

Und ich glaube, dann ist es einfacher,

Johannes

mit dem puren, mit dem Basis-Django umzugehen.

Dominik

Habt ihr ein Lieblingsmodul, ein Lieblingstemplate?

Dominik

Also wenn ihr das schon einsetzt im Produktivbetrieb?

Dominik

Das ist eine schwere Frage,

Johannes

weil da oft sehr viele Sachen zusammenkommen.

Johannes

Weil man oft sehr, sehr viele Bibliotheken reinlädt,

Johannes

die alle nur einen kleinen Teil machen.

Johannes

Das ist so, wie wenn ich dich frage, welches

Johannes

Lego-Teil ist denn dein Lieblings-Lego-Teil?

Johannes

Ritterburg.

Johannes

Ja, aber das ist ja kein einzelnes Teil.

Johannes

Das ist ja gleich was sehr Großes zusammengebaut.

Johannes

Da sind viele kleine Steine dabei, glaube ich.

Johannes

Genau, und die einzelnen Steine an sich sind alle nicht

Johannes

super interessant, aber wenn man sie dann zu was

Johannes

zusammengebaut hat, dann ist

Johannes

das, was man gebaut hat, super interessant.

Johannes

Okay, aber gut,

Dominik

du weißt ja dann schon, welche Steine du dann brauchst,

Dominik

damit du dann irgendwie sowas gießen kannst.

Dominik

Ja, klar.

Dominik

Das heißt, man hat sich schon so ein Workflow, an dem man sich dann gewohnt

Dominik

und er es dann auch irgendwie

Dominik

individuell spielt.

Dominik

Ja, aber auch da, also ich

Dominik

jedes Mal, wenn ich

Dominik

mit Leuten zusammenarbeite,

Dominik

dann bin ich wieder überrascht davon, wie

Johannes

unterschiedlich man die Sachen machen kann.

Johannes

Nicht schlechter

Johannes

oder besser bei irgendjemandem,

Johannes

aber einfach so unterschiedlich. Auf viele

Johannes

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

Dominik

Sachen von euch noch zu hören, wo

Dominik

sonst niemand drauf gekommen ist, wo er sagt, hey,

Dominik

Denk nochmal drüber nach, das wäre ein toller Tipp.

Dominik

Mach das doch mal diesen Weg oder

Jochen

Ja, also wenn ich da

Jochen

quasi eine

Jochen

App nennen sollte,

Jochen

wäre das wahrscheinlich

Jochen

Django ImageKit tatsächlich.

Jochen

Django ImageKit?

Jochen

Ich habe

Jochen

da mal so einen Blog in Django

Jochen

geschrieben und

Jochen

bin relativ bald auf das Problem

Jochen

gestoßen, dass man, wenn man jetzt so

Jochen

ja, wir haben 2018,

Jochen

will man schon so irgendwie responsivee Images haben

Jochen

und dass das halt auch auf dem Handy irgendwie einigermaßen

Jochen

aussieht. Aber man möchte jetzt auch nicht

Jochen

alle Bilder in riesig groß ausliefern.

Jochen

Wenn man

Jochen

ja eben auch

Jochen

gerade auf dem Handy und so

Jochen

und da muss man ja dann was

Jochen

tun. Also da gibt es Unterstützung in

Jochen

HTML5 durchaus,

Jochen

was

Jochen

solche Probleme angeht.

Jochen

Aber man muss das ja jetzt auch dann auch

Jochen

irgendwie backend-seitig hinbekommen.

Jochen

Also es muss halt die Bilder in unterschiedlichen Größen

Jochen

geben. Man muss halt irgendwie

Jochen

die entsprechenden

Jochen

Tags so rausschreiben,

Jochen

dass halt Source-Set-Attribut

Jochen

und vielleicht irgendwie

Jochen

noch andere Geschichten, Picture-Element

Jochen

so gesetzt sind, wie man das irgendwie haben will.

Jochen

Und ich war etwas überrascht,

Jochen

dass es da in Django quasi überhaupt gar nichts gibt.

Jochen

Also da gibt es zwar ein

Jochen

Image-Field, aber

Jochen

das war es auch schon. Das kennt dann halt irgendwie so

Jochen

noch

Jochen

Höhe und Breite gegenüber dem

Jochen

File-Field einfach,

Jochen

wenn man das verwendet, aber das hat

Jochen

eigentlich nicht viel Funktionalität dafür,

Jochen

sozusagen für diesen Use Case,

Jochen

den man oft hat, dass man das Bild wirklich

Jochen

auf einer Webseite anzeigen will

Jochen

und

Jochen

dann habe ich so ein bisschen geguckt und dann gibt es irgendwie so diverse

Jochen

Thumbnail-Libraries und so,

Jochen

die sind aber alle, die haben halt diesen

Jochen

Thumbnail-Use Case

Jochen

irgendwie, aber nicht, war nicht

Jochen

so richtig das, was ich irgendwie da gesucht hatte

Jochen

und dann habe ich dann irgendwie was selber implementiert und dann

Jochen

irgendwie ein paar

Jochen

Wochen

Jochen

später oder so lief mir Django ImageKit

Jochen

über den Weg, dass

Jochen

quasi, also ich weiß nicht,

Jochen

das waren schon bei mir so, keine Ahnung,

Jochen

ein paar hundert Zeilen Python oder so, die ich da geschrieben hatte

Jochen

und es war alles ein bisschen hässlich

Jochen

und ich wusste auch, dass das alles nicht schön war

Jochen

und das hat das halt komplett ersetzt.

Jochen

Ich musste es nur noch importieren und habe dann irgendwie

Jochen

da so meine

Jochen

Speck-Dinger an die

Jochen

Images reingeschrieben, sozusagen in welchen Größen

Jochen

ich das haben möchte und dann

Jochen

war es das. Voll gut.

Jochen

das hat dieses Problem irgendwie

Jochen

für mich mehr oder weniger erledigt

Jochen

und das fand ich

Jochen

sehr hilfreich und daher denke ich,

Jochen

dass das etwas ist,

Jochen

was andere auch interessieren könnte,

Jochen

weil den Fall, dass man Bilder

Jochen

ausliefern will auf einer Webseite, den hat man ja doch relativ oft.

Jochen

Klingt nach tollen Geheimtipps

Jochen

tatsächlich.

Jochen

Das ist jetzt nicht so ein Geheimtipp, das Ding ist relativ bekannt

Jochen

und das ist ein bisschen komisch, vielleicht, dass ich es nicht kannte, aber es ist

Jochen

oft so, dass man... Ja, es ist oft so, dass man als Anfänger

Dominik

irgendwo drüber stolpert und gar nicht weiß, wo man anfangen soll

Dominik

und das war so viel, da kriegt man auch gar nicht mit,

Dominik

was ist jetzt wichtig und was nicht.

Dominik

Aber ja, gerade für so responsivee Implementation,

Dominik

glaube ich, ist das ein super Tipp.

Johannes

Ich glaube, es ist nicht nur als Anfänger so,

Johannes

weil das ist total das gute Beispiel,

Johannes

was der Jochen jetzt bringt,

Johannes

weil ich habe Django ImageKit noch nie benutzt.

Johannes

Ah, ja.

Johannes

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

Johannes

Die ist so groß, dass es für eigentlich alles was gibt,

Johannes

aber man muss es erst finden.

Johannes

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

Johannes

Ich habe ImageKit noch nie benutzt.

Johannes

Ich benutze Wagtail und da ist das immer integriert.

Dominik

Wie heißt das? Ich muss das kurz für die Show-Notes notieren.

Johannes

Der hat auch schon eine Bildverarbeitung.

Johannes

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

Johannes

Also es ist quasi ein Framework, was noch mal oberhalb von Django ist,

Johannes

was noch mehr Sachen mitbringt.

Johannes

Und der hat eben auch gleich dieses Bildproblem mitgelöst.

Johannes

Und deshalb benutze ich das immer gleich für meine Bilder auch.

Johannes

Ein Wagtail, okay.

Johannes

Kommt von einem

Dominik

Universum ins nächste. Ich glaube, da kann man

Dominik

Bücher, Wochen, Kurse mit

Dominik

füllen. Also das ist wirklich sehr interessant.

Dominik

Wobei

Jochen

mich jetzt auch interessieren würde,

Jochen

wie hat Wagtail das Problem

Jochen

dann gelöst?

Jochen

Gibt es irgendwie Default-Einstellungen, die man machen kann?

Jochen

Welche Bildgrößen gerechnet werden

Jochen

sollen und wie werden die dann tatsächlich

Jochen

gerechnet? Ich meine, sobald ein Bild hochgeladen

Jochen

wurde, werden dann die neuen Bilder erstellt oder

Jochen

erst beim Zugriff und dann gecached?

Jochen

Das kannst du alles einstellen.

Jochen

Ah, okay.

Jochen

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

Johannes

Um einen mal kurz ein bisschen breiter auszuholen.

Johannes

Wagtail ist eine Sammlung von Modulen,

Johannes

die das Bauen von CMS-Systemen,

Johannes

also von Content-Management-Systemen, erleichtern sollen.

Johannes

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

Johannes

Das ist relativ alt.

Johannes

Hat auch mehr so diesen Flask-Ansatz.

Johannes

Hier sind 15 Module, baue 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 Rectile-Admin, der diese Seiten eben inspiziert und mit reinnimmt

Johannes

und kriegst dann automatisch eben so eine Baumstruktur mit Revisionen und Freigabeprozess

Johannes

und eben Medienverwaltung auch mit dazu.

Johannes

Und die Medienverwaltung ist relativ flexibel.

Johannes

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, es ist so ein bisschen die Mitte zwischen den beiden Extremen. Immer alles sofort anlegen und immer alles neu berechnen.

Johannes

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

Johannes

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

Johannes

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

Johannes

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

Johannes

Und wenn ich eine kleinere Version von dem Bild anfordere,

Johannes

dann wird nicht einfach der Rand

Johannes

weggeschnitten und das wird nicht einfach kleiner gemacht, sondern

Johannes

er zoomt dann quasi auf diesen Bereich rein.

Johannes

Das heißt, wenn ich ein Bild habe,

Johannes

wo eine Person drauf ist,

Johannes

dann wird auch das Gesicht der Person

Johannes

rein verkleinert.

Johannes

Und ich habe das

Johannes

irgendwann mal in so einer Vorstellung gesehen

Johannes

von Features in Marktail und das

Johannes

ist einfach so magisch. Die haben dieses Flag

Johannes

angemacht und dann plötzlich zeigt er mir eben nicht

Johannes

kleine, verkleinerte

Johannes

Versionen von irgendwas oder wo die Ränder

Johannes

dann abgeschnitten werden, sondern der zoomt

Johannes

tatsächlich auf die interessanten Bereiche ein.

Johannes

Und dass sowas in so eine

Johannes

Bibliothek einfach reinkommen kann,

Johannes

ist eine total geniale

Johannes

Sache auf der einen Seite, weil man eben ganz

Johannes

viele Funktionen da mitkriegt.

Johannes

Aber es ist auch so ein bisschen

Johannes

furchterregend, weil man eben

Johannes

ganz viele solche Funktionen drin hat,

Johannes

von denen man vielleicht gar nicht weiß, dass die

Johannes

da drin sind oder von denen man vielleicht gar nicht

Johannes

will, dass die da drin sind. Und es ist

Johannes

so ein bisschen

Johannes

schwierig, da oft abzuwägen,

Johannes

will ich sowas in mein Projekt reinholen

Johannes

oder nicht.

Jochen

Ja, ich weiß jetzt natürlich

Jochen

nicht, wie dieses Feature technisch

Jochen

umgesetzt ist, aber

Jochen

da gibt es

Jochen

halt

Jochen

quasi in HTML5

Jochen

das Picture Element und das kann halt

Jochen

im Grunde, die nennen das da Art Direction,

Jochen

sozusagen, dass man angeben kann, welcher Bildbereich beim

Jochen

Verkleinern sichtbar bleiben soll und so.

Jochen

Und wenn

Jochen

Wagtail

Jochen

das so benutzt, dann wäre das

Jochen

natürlich sehr cool. Es könnte natürlich

Jochen

auch einfach das Bild irgendwie umrechnen oder so

Jochen

und das wäre halt so,

Jochen

das kommt halt darauf an, wie das implementiert ist

Jochen

und eigentlich würde man sich ja dann vielleicht auch ein Frontend

Jochen

wünschen, mit dem man festlegen kann,

Jochen

okay, also dieser Bereich in dem Bild ist jetzt

Jochen

etwas, was nicht

Jochen

rausverkleinert werden soll.

Jochen

Aber da habe ich eben auch nichts gefunden. Ich habe mir natürlich

Jochen

also, als ich da irgendwie mein

Jochen

persönliches Blog

Jochen

irgendwie angefangen habe zu schreiben, habe ich mir

Jochen

angeguckt, wie sieht das eigentlich aus, wenn ich jetzt

Jochen

einen WordPress-Blog aufmache,

Jochen

was passiert denn eigentlich da mit den

Jochen

Bildern und dann sieht man da so, ja gut, also die machen

Jochen

das im Grunde, da werden dann halt auch ein paar Größen vorgerechnet

Jochen

und die werden dann halt mit ausgeliefert als Source-Set

Jochen

und man hat so ein bisschen,

Jochen

kann man an dem Bild was machen, man kann irgendwas

Jochen

beschneiden oder man kann halt irgendwie

Jochen

die

Jochen

quasi

Jochen

so ein paar Editiergeschichten

Jochen

machen, aber letztendlich

Jochen

kann man zum Beispiel, was dieses Picture-Element

Jochen

kann, kann man auch in WordPress alles nicht setzen.

Jochen

Und es gibt

Jochen

eigentlich kaum Frontends für

Jochen

all die Möglichkeiten, die man jetzt mit dem Picture-Element

Jochen

hätte. Und

Jochen

ja, das ist halt, genau,

Jochen

wenn das automatisch passiert,

Jochen

dann ist halt immer die Gefahr, dass dann Dinge

Jochen

hinterher zu sehen

Jochen

sind, die gar nicht so,

Jochen

wo niemand, wenn er das

Jochen

manuell getan hätte,

Jochen

das ausgewählt hätte. Aber

Jochen

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

Dominik

Du hattest eben gesagt, dass das

Dominik

Probleme machen könnte, zu viele Module

Dominik

in einen dann gut zu packen, die man

Dominik

gar nicht möchte. Gibt es dann

Dominik

Sicherheitsbedenken, die du dann da bekommst?

Dominik

Sicherheitsbedenken habe ich da eigentlich

Dominik

relativ wenige. Dadurch, dass

Dominik

da einige Sicherheitsstandards

Dominik

in Django selbst umgesetzt

Dominik

sind, sind so diese

Johannes

ganzen Unsicherheiten, die man so

Johannes

kennt, die sind da alle direkt

Johannes

ausgeschlossen. Also es gibt diese

Johannes

ganz bekannte Sicherheitslücke SQL Injection,

Johannes

dass man eben die Datenbank dazu bringt,

Johannes

Code auszuführen, der eigentlich nicht ausgeführt

Johannes

werden sollte. Und das ist in Django

Johannes

direkt nur

Johannes

mit sehr viel Aufwand möglich, muss man so

Johannes

zu sagen. Man kann es hinkriegen,

Johannes

dass man so eine Lücke hat, aber man muss

Johannes

dann schon die

Johannes

verborgenen Features benutzen, die es

Johannes

einem eben ermöglichen, ein hohes SQL

Johannes

da auszuführen. Ein normaler

Johannes

Entwickler wird niemals dieses Problem

Johannes

haben, da eine SQL-Injection

Johannes

in Django zu haben. Es ist mehr

Johannes

so eine, es ist weniger eine Frage

Johannes

der Sicherheit, es ist eher eine Sache

Johannes

der Handhabbarkeit.

Johannes

Komme ich als Entwickler dann noch damit klar,

Johannes

was ich mir jetzt alles reingeholt habe?

Johannes

Oder habe ich vielleicht Sachen reingeholt,

Johannes

die die gleiche Funktion

Johannes

erfüllen? Habe ich vielleicht Wacktail und

Johannes

Django ImageKit reingeholt?

Johannes

Und dann

Johannes

stehe ich da und habe

Johannes

zu viele Optionen in der Hand, als dass

Johannes

ich dann weiterentwickeln könnte

Johannes

oder als ich dann sinnvoll

Johannes

weiterentwickeln könnte,

Johannes

weil es eben für

Johannes

jede Sache, die ich machen kann,

Johannes

eventuell mehrere Optionen gibt.

Johannes

Es ist

Johannes

sicherlich von außen nicht sichtbar.

Johannes

Wenn die Anwendung dann fertig ist oder wenn die

Johannes

irgendwie mal benutzt wird, wird

Johannes

der Benutzer das sicherlich nicht sehen können,

Johannes

dass wir da diese Probleme

Johannes

uns reingeholt haben, indem wir zu viele Module

Johannes

reingeladen haben. Es ist dann

Johannes

eher was, was die Entwickler betrifft.

Johannes

Wie können wir jetzt noch weiterentwickeln, wenn wir

Johannes

drei oder vier verschiedene Sachen haben, die genau das

Johannes

Gleiche machen? Ja, und wenn man dann Abhängigkeiten

Jochen

hat, man ist beispielsweise in einem Teil

Jochen

der Applikation abhängig von einer

Jochen

bestimmten Version irgendeiner,

Jochen

von irgendeinem

Jochen

Django-Sort-Party-App oder so,

Jochen

und im anderen Teil ist man von was anderem abhängig, dann hat man plötzlich

Jochen

Schwierigkeiten zu updaten. Das

Jochen

macht halt die Entwicklungsgeschwindigkeit

Jochen

langsam, wenn man sich quasi so

Jochen

unnötigerweise viele

Jochen

Abhängigkeiten nach außen reinholt, während

Jochen

Und wenn man das halt sinnvoll beschränkt,

Jochen

dann kommt man eigentlich immer ganz gut halt auch mit Updates klar.

Dominik

Wenn ich 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?

Johannes

Tja, das ist eine sehr gute Frage.

Johannes

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

Johannes

oder in seinen Django-User-Groups oder auf den Konferenzen

Johannes

oder mit den Kollegen, mit denen man vielleicht zusammenarbeitet.

Johannes

Und jeder wird da sicherlich Dinge wissen,

Johannes

von denen man selbst noch nie gehört hat,

Johannes

egal wie lange man in dem Business drin ist.

Johannes

Jochen und ich sind ja jetzt beide schon länger unterwegs

Johannes

und wir können uns sicherlich,

Johannes

wenn wir uns da einen Abend lang unterhalten,

Johannes

finden wir beide zehn Sachen, die der andere noch nicht musste

Johannes

oder die der andere noch nie benutzt hat.

Johannes

Es gibt eine Webseite, die heißt Django Packages.

Johannes

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 und wie stabil ist das und wie viele Leute benutzen das und für welche Django-Versionen ist das geeignet und welche Features hat das, dass man einfach mal so eine Übersicht haben kann.

Dominik

Kann ich mir so ein kleines Scorecard bauen? Also was ist jetzt für mein Nutzen vielleicht? Das empfohlenste Paket?

Johannes

Beziehungsweise man sieht dann einfach erst mal, was es gibt überhaupt. 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. Dann kann ich die gleich aus der Betrachtung rausziehen.

Johannes

Vielleicht auch, wenn ich mir die vorher schon angeguckt hatte

Johannes

und die sehr gut aussahen.

Johannes

Wenn es keine Updates mehr gibt,

Johannes

dann ist das oft ein Anzeichen dafür,

Johannes

dass die Entwickler es sich anders überlegt haben

Johannes

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 Software je fertig?

Jochen

Und jede neue Version von Django

Jochen

bietet natürlich auch Möglichkeiten,

Jochen

Dinge wieder neu oder anders oder einfacher zu machen

Jochen

und dann eigentlich

Jochen

wahrscheinlich nicht immer, aber ab und zu muss man halt

Jochen

doch mal was anfassen und wenn man

Jochen

nix mehr anfassen muss, dann

Jochen

ja, eben ist es eher ein Zeichen dafür, dass

Jochen

es nicht mehr richtig maintained wird.

Jochen

Und ja, Django Packages

Jochen

wird übrigens von einem der beiden

Jochen

Autoren

Jochen

Duskus of Django betrieben,

Jochen

dem,

Jochen

der auch

Jochen

Crispy Forms geschrieben hat,

Jochen

was erklärt, warum es die Präferenz ist.

Jochen

Ja, also die machen da

Jochen

ganz viel und

Jochen

ja, Django Packages

Jochen

ist tatsächlich eine große Hilfe, aber

Jochen

so oft ist es auch schwer zu erkennen, also ich

Jochen

finde das oft nicht so einfach,

Jochen

wenn man jetzt irgendwie ein Problem hat, das man

Jochen

gelöst haben möchte und man jetzt

Jochen

hat man da so eine Auswahl von

Jochen

zehn unterschiedlichen Paketen,

Jochen

es ist wirklich nicht einfach zu sagen, ja,

Jochen

welches davon

Jochen

man nehmen sollte.

Jochen

Ohne jetzt alle zu kennen schon. Genau, das kann man ja auch gar nicht.

Jochen

Man kann die gar nicht alle kennen und

Jochen

Und selbst wenn man dann mal zwei, drei reingeguckt hat,

Jochen

dann ist das nicht so einfach zu sagen.

Jochen

Manchmal muss man halt dann Glück haben

Jochen

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,

Jochen

von der man abhängig sein möchte?

Jochen

Ja, und jeder baut so mit der Zeit

Johannes

seine eigenen Vorlieben und seine eigenen Präferenzen auf.

Johannes

Und die sind schwer austauschbar.

Johannes

Es ist super interessant, sich

Johannes

darüber zu unterhalten, aber sie sind sehr schwer

Johannes

austauschbar.

Dominik

Gibt es was wie gute und schlechte Module

Dominik

oder ist das eher nur eine Präferenzenfrage?

Dominik

Es gibt sicherlich gute und schlechte Module,

Dominik

aber nicht

Johannes

auf so einer absoluten Ebene.

Johannes

Also ich könnte jetzt nicht auf irgendeinem Modul zeigen und sagen,

Johannes

das ist schlecht. Wenn du das benutzt, dann bist du ein schlechter

Johannes

Mensch.

Johannes

Es ist eher...

Jochen

Das Cookie-Law-Modul

Jochen

vielleicht, wenn man

Jochen

keine Cookies einsetzen müsste.

Jochen

Wenn man keine Cookies hat. Aber es gibt

Jochen

ganz viele Leute, die sowas anschalten und gar keine

Jochen

Cookies haben oder so. Ja, aber das ist ja in Django

Johannes

immer so. In Django hast du immer den Session-Cookie.

Johannes

Also müsstest du eigentlich immer.

Johannes

Auch wenn der Sessions gar nicht

Johannes

benutzt, hast du immer einen Session-Cookie. Also müsstest

Johannes

du eigentlich immer das Modul direkt

Jochen

einschalten. Muss man die Cookie-Warnung

Jochen

tatsächlich auch bei Session? Ich dachte nur, wenn man tatsächlich

Jochen

ein persistentes Cookie setzt

Jochen

im Browser.

Jochen

Soweit ich weiß,

Jochen

Muss man es immer? Immer, wenn du

Johannes

Informationen über den Benutzer speicherst.

Johannes

Und das tust du ja in dem Moment. Ah, okay.

Johannes

Ja, dann muss man es immer. Mist.

Johannes

Okay, das klingt super. Also nach

Dominik

den Themen, die wir schon immer

Dominik

machen wollten.

Dominik

Ich glaube, Artikel 6 oder sowas ist da spannend. Da kann man

Dominik

einfach sagen, hey, das muss ich machen,

Dominik

deswegen darf ich das auch. Und dann müsst ihr einfach mit

Dominik

zufrieden sein. Ich muss euch da gar nicht Bescheid geben und

Dominik

gut ist. Ja, klar.

Dominik

Es gibt ja auch verschiedene Arten, wie man

Dominik

damit umgehen kann. Ich habe neulich

Dominik

eine Cookie-Warnung gesehen, da stand einfach nur drin,

Dominik

wir müssen sie informieren, dass wir Cookies setzen,

Dominik

das haben wir hier mitgetan.

Dominik

Da kann man sich dann vor Gericht streiten, ob das ausreichend war.

Dominik

Ja, aber

Dominik

ja.

Dominik

Mir fällt das

Jochen

schwer, das zu verstehen manchmal,

Jochen

was da bestimmte Regulierungen irgendwie

Jochen

eigentlich nützen sollen und

Jochen

Leuten, die da noch weniger in zum Beispiel EU-Verordnungen

Jochen

dran sitzen in den USA, denen fällt das

Jochen

möglicherweise noch schwerer und dann kriegt man

Jochen

teilweise so fast schon

Jochen

passiv-aggressiv anmutende

Jochen

so Geschichten so, willst du die Seite

Jochen

wirklich weiter benutzen, dann drück jetzt hier

Jochen

Meldung.

Jochen

Ja,

Jochen

naja, gut, wahrscheinlich muss man einfach damit leben,

Jochen

dass es halt manchmal ein bisschen nervig ist, wenn Dinge geregelt werden.

Dominik

Und dann haben die Leute, die das nicht verstehen,

Dominik

irgendwann ausgedient und dann kommen Leute, die es ein bisschen

Dominik

besser verstehen, die sagen dann, mach den

Dominik

Schrott weg oder so, hoffentlich.

Dominik

Man weiß es nicht, kann natürlich immer alles schlimmer

Dominik

werden, aber ich glaube mir mal an das Gute

Dominik

im Menschen, ja.

Jochen

Ja, ist ja immer Politik irgendwie zwei Schritte vor,

Jochen

drei zurück, nein, warte mal, drei früher, zwei zurück

Jochen

hoffentlich.

Jochen

Oder im Kreis, kann man auch mal sagen.

Jochen

Ja, ja.

Dominik

Was habt ihr denn an Neuigkeiten für Django?

Dominik

Ist euch da was eingefallen, was in letzter Zeit da zukam,

Dominik

wo ihr sagtet, ey, wow, guckt euch das

Dominik

unbedingt nochmal an?

Dominik

Es gibt da eigentlich immer neue Sachen zu sehen.

Dominik

Django hat

Johannes

vor kurzem seinen, ja, vor kurzem,

Johannes

vor langer Zeit, hat schon

Johannes

seit langer Zeit einen sehr schnellen Release-Zyklus.

Johannes

Und

Johannes

Entschuldigung, was heißt schnell?

Johannes

Schnell heißt, dass die

Johannes

sagen, alle neun Monate

Johannes

kommt eine neue Version von Django raus.

Johannes

Immer ein nächstes Baby.

Johannes

Genau. Und

Johannes

jede dritte Version von Django ist

Johannes

eine sogenannte LTS-Version, eine

Johannes

Long-Time-Support oder Long-Term-Support.

Johannes

Das heißt, dass die mindestens für

Johannes

Jochen Kurier mich drei Jahre

Johannes

Sicherheitsupdates bekommen.

Johannes

Und

Johannes

das heißt, dass es ab jetzt

Johannes

regelmäßig neue Major-Versionen gibt,

Johannes

weil die eben dieses Namensschema

Johannes

umgestellt haben. Wir sind jetzt gerade bei

Johannes

Django 2.1. Die nächste

Johannes

Version, 2.2, wird eben so eine

Johannes

LTS-Version sein, die dann für längere

Johannes

Zeit

Johannes

gültig ist oder unterstützt

Johannes

wird, muss man so sagen. Und die

Johannes

Version danach ist Django 3.0.

Johannes

Und üblicherweise erwartet

Johannes

man ja bei Versionssprüngen

Johannes

immer viele Neuigkeiten und

Johannes

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

Johannes

Also der Sprung von 1.11, was die gerade aktive LTS-Version ist, auf 2.0,

Johannes

da waren schon einige Sachen drin, die sich deutlich geändert haben.

Johannes

Was für mich am offensichtlichsten war, ist der Sprung von URL zu Path,

Johannes

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,

Johannes

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, an dieser Stelle soll jetzt ein Integer stehen und den möchte ich gerne als Parameter Ja gegeben bekommen. Und dann wird diese URL auch tatsächlich nur aufgerufen, wenn da eine Ganzzahl drinsteht, die als Zahl interpretiert werden kann.

Johannes

Und das nimmt einem viel Arbeit weg, weil man eben nicht mehr dafür sorgen muss, dass die Parameter passen. Ist aber auch erstmal ein Umdenken. 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 reguläre Ausdrücke sind natürlich toll und man kann sie für ganz viele Sachen verwenden und wenn man sich da mal so zwei Stunden oder einen halben Tag reingefuchst hat, dann sieht das für einen auch alles ganz natürlich aus irgendwie, 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, also das kommt schon vor,

Jochen

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, weil ich mir das nie, wie geht das mit der Gruppe und dann wird das zu einem Variablen-Namen, wo schreibt man den nochmal hin, kommt das P jetzt davor, dahinter oder muss ich jetzt da ein Fragezeichen, 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.

Jochen

Und das jetzt mit diesen Pass-Geschichten tatsächlich deutlich besser.

Jochen

Also da steht dann immer nur so Doppelpunkt, also Int oder String.

Jochen

Ich weiß nicht genau, es gibt auch gar nicht so viele.

Jochen

Es gibt noch Slug und ich glaube Pass oder so.

Jochen

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

Das ist ja voll gut.

Jochen

Ja, man kann sich selber welche schreiben.

Jochen

Es gibt verschiedene Möglichkeiten.

Johannes

Du kannst entweder direkt reguläre Ausdrücke machen.

Johannes

Also wenn du halt irgendwas ganz Bestimmtes merken musst.

Johannes

Oder du kannst welche, die es gibt, zusammentun.

Johannes

Also wenn du zum Beispiel möchtest, dass da ein Datum steht, kannst du eben drei so Integer-Dinger hintereinander mit Bindestrichen getrennt und kannst das als Date deklarieren und kriegst dann auch automatisch ein Date. Also musst du halt das entsprechend konvertieren, aber kriegst dann automatisch immer ein Date zurück. Und kannst es dann von da an überall verwenden.

Jochen

Oh, das ist ja großartig. Das müssen wir mal angucken, wie das geht.

Jochen

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

Jochen

das ist so ein bisschen das, was immer passiert,

Jochen

wenn Django-Experten zusammensitzen.

Jochen

Dann sagt einer irgendwas und der andere

Jochen

sagt, oh, das ist ja cool, das wusste ich noch gar nicht,

Jochen

das muss ich unbedingt mal anschauen.

Jochen

Und das geht mir da eigentlich

Jochen

regelmäßig so.

Jochen

Ja.

Jochen

Ja.

Jochen

Ja, ich weiß nicht genau, ob

Jochen

für 3.0 jetzt schon so ein Thema,

Jochen

ich habe irgendwie so

Jochen

am Rande mitbekommen, dass auch

Jochen

für 2.0 im Grunde schon angedacht war,

Jochen

ob man jetzt nicht doch irgendwie

Jochen

so ein bisschen mehr

Jochen

wie

Jochen

Kommunikation mit dem

Jochen

Client mit in Django reinnehmen kann, aber

Jochen

das geht jetzt auch schon seit einiger Zeit

Jochen

irgendwie in den

Jochen

neueren HTTP-Versionen, dass man quasi auch

Jochen

über WebSockets wieder mit dem Client vom

Jochen

Server aus zurücksprechen kann

Jochen

und es gibt diverse

Jochen

Fälle, wo das ja auch total sinnvoll ist, dass man das

Jochen

tut. Aber das

Jochen

passt halt nicht so richtig auf dieses

Jochen

ja, auf diese Schnittstelle

Jochen

zwischen

Jochen

Web-Server und Applikationen.

Jochen

WSGI, WSGI-Schnittstelle gibt

Jochen

das halt eigentlich nicht her. Und

Jochen

da muss halt noch eine ganze Menge Infrastruktur

Jochen

geändert werden. Und es gab

Jochen

da dieses Django-Channels-Projekt und

Jochen

es gibt es immer noch.

Jochen

Ja. Und da war ja

Jochen

irgendwie schon

Jochen

mal irgendwie quasi sozusagen angedacht,

Jochen

in Django 2 mit reinzunehmen, aber

Jochen

das ist dann halt irgendwie nicht passiert, wahrscheinlich weil zu viel

Jochen

angepasst werden musste. Und vielleicht kommt das ja

Jochen

dann in 3, ich habe keine Ahnung.

Jochen

Das ist eine ganz spannende

Jochen

Sache, das muss man sich auch mal

Jochen

genauer angucken, weil da viele Dinge möglich werden,

Jochen

die vorher nicht möglich waren.

Jochen

Ist aber eben technisch ganz anders,

Jochen

weil wir ja nicht mehr in dieses klassische Web-Schema

Jochen

reinfallen, wo der Benutzer

Johannes

eben eine Webseite aufruft und dann kriegt er die zurück,

Johannes

sondern weil es jetzt eben auf einmal

Johannes

eine Verbindung gibt, wo der

Johannes

Server potenziell selbst sagen kann,

Johannes

hier ist was passiert, mach mal was.

Johannes

Und das ist eine ganz spannende Sache.

Johannes

Ja, auch technisch

Johannes

super interessant. Da haben sie sich

Johannes

einen neuen Standard, mehr oder weniger

Johannes

ausgedacht, ASGI.

Johannes

Was dann halt auch neue

Johannes

Server-Backends erfordert. Daphne heißt der Server.

Johannes

Genau, genau. Man kann nicht einfach irgendwie

Jochen

Unicorn nehmen oder den normalen

Jochen

Entwicklungs-Server von Django, sondern, ja.

Jochen

Und da ändert sich dann einiges. Man kann schon den

Jochen

normalen Entwicklungs-Server nehmen, weil der

Jochen

das direkt mit integriert hat. Also wenn du

Jochen

Channels installierst,

Jochen

Ach, wenn man es installiert, dann kommt das Ding.

Jochen

Dann kriegst du eine andere Variante von Run-Server

Jochen

und der das automatisch, der automatisch WebSockets bringt,

Jochen

damit du eben in der Entwicklung den Unterschied nicht merkst.

Jochen

Ja.

Jochen

Aber das Arbeiten damit ist deutlich anders,

Jochen

weil du eben diese Kanäle hast

Jochen

und nicht mehr so dieses Request-Response.

Jochen

Ja.

Jochen

Schema ist.

Dominik

Das muss man jetzt mal kurz erklären. Also ich habe jetzt

Dominik

ganz kurz fast nur Barm verstanden.

Dominik

Request-Response-Schema, ja.

Dominik

Kanäle, hä?

Dominik

Was ist das?

Dominik

Die

Dominik

früher, als das Web

Dominik

noch jung war,

Dominik

war die Idee,

Dominik

dass eine Webseite eigentlich nie

Dominik

einen Zustand haben sollte.

Dominik

Das heißt, du fragst eine URL an

Johannes

und kriegst das Ergebnis, oder kriegst das,

Johannes

was da auf dieser URL steht, zurück.

Dominik

Und mit Error 402 Payment Required, ja.

Johannes

Genau, 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 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.

Johannes

und zeig dann entsprechend die richtige Variante an.

Johannes

Ist sehr schön, weil man da die Seiten eben so dynamisch generieren kann,

Johannes

dass sie für den Benutzer zugeschnitten sind, der jetzt gerade da ist.

Johannes

Weil wir ja wissen, wer sich eingeloggt hat.

Johannes

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

Johannes

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

Johannes

Das Schema ist aber immer noch Request-Response.

Johannes

Der Browser sagt, ich möchte jetzt diese Seite ansehen, bitte gib mir diese Seite, dann macht der Server irgendwas und gibt ihm diese Seite zurück und damit ist die Arbeit des Servers schon beendet. Und der Server hat auch keine Gelegenheit hinterher noch zu sagen, oh halt, ist doch was anders oder vielleicht hat sich da in der Zwischenzeit was getan oder vielleicht passiert irgendwas.

Dominik

Und ihr wartet immer, bis der Browser wieder fragt.

Johannes

Genau, die Verbindung ist dann erst mal weg

Johannes

und der Browser muss dann fragen.

Johannes

Jetzt haben Browser in der Zwischenzeit JavaScript bekommen

Johannes

und haben eben die Möglichkeit erhalten,

Johannes

regelmäßig zu fragen.

Johannes

Das ist zum Beispiel das, was Twitter macht

Johannes

oder das, was Facebook macht.

Johannes

Wenn da ein Newsfeed sich aktualisiert,

Johannes

dann fragen die halt alle 30 Sekunden,

Johannes

gibt es was Neues für mich?

Johannes

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

Johannes

Und wenn es doch was Neues gibt,

Johannes

dann gibt er 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 und ganz oft die Antwort bekommen wird,

Johannes

nein, es gibt nichts Neues, sondern es wäre doch eigentlich besser, wenn der Server sagen könnte, wenn es was Neues gibt, hier, bitte nimm.

Johannes

Genau. Wenn es was Neues gibt, sage ich dir Bescheid. Und das ist eben genau diese Veränderung. 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, 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, weil du eben nicht die ganze Zeit leere Anfragen schicken musst.

Johannes

Gibt es was Neues, gibt es was Neues, gibt es was Neues, gibt es 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

Aber dieses Verbindung offen halten ist sowieso was, was TCP kann und das wird eben über so Keep-Alive-Mechanismen, die sich dann anpassen, die möglichst wenig Bandbreite verwenden, abgedeckt. Und du hast wirklich nur Kommunikation, wenn auch tatsächlich was passiert.

Johannes

Und das gibt dir eigentlich zwei Vorteile. Zum einen sparst du dir die Bandbreite, dass du die ganze Zeit fragen musst, auch wenn nichts passiert ist. Und zum anderen hast du natürlich eine viel schnellere Antwortzeit, weil es nicht mehr davon abhängt, wie oft der Client fragt, dass er Updates bekommt, sondern wenn ein Update passiert, kann der Server sofort sagen, jetzt ist was passiert.

Johannes

Das heißt, wenn ich mir meine Chat-Anwendung schreibe und der Client fragt halt nur alle 30 Sekunden, gibt es was Neues, dann sehe ich auch nur alle 30 Sekunden, ob jemand was geschrieben hat. Wenn der Server sagen kann, hier ist was Neues, dann kann ich das sofort ausliefern. Das heißt, es wird sehr viel responsiver, sehr viel schneller in der Verarbeitung.

Johannes

Und Latenz direkt verfügbar.

Johannes

Genau, es wird direkt weitergeleitet und direkt verfügbar gemacht. Und das ist natürlich was, was man heutzutage haben möchte, diese Geschwindigkeit in den Antworten. Auch in ganz mondänen Anwendungen, 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 das ist halt jetzt ein Riesenvorteil, ja?

Dominik

Ja, ich glaube

Dominik

es gab da auch

Jochen

noch Dinge, bevor man das halt

Jochen

mit JavaScript gemacht hat, es gab solche

Jochen

furchtbaren Dinge wie Longpolling, wo dann der Server

Jochen

immer gesagt hat, ja

Jochen

nee, client, warte mal, ist noch nicht ganz fertig

Jochen

warte mal, Moment

Jochen

und dann

Jochen

ab und zu mal doch wieder so ein Content-Bröckchen

Jochen

an den Client weitergeschickt hat

Jochen

und

Jochen

also es gab da

Jochen

diverse furchtbare Geschichten, die gemacht wurden

Jochen

und im Grunde jetzt WebSockets

Jochen

und eine stehende

Jochen

Verbindung löst all das eigentlich relativ

Jochen

sauber und

Jochen

ja, damit kann man wirklich tolle Sachen

Jochen

machen und es

Jochen

gab ja auch, es gibt

Jochen

auch schon komplette Frameworks

Jochen

und komplette

Jochen

Technologie-Stacks,

Jochen

die halt darauf basieren, dass man sowas machen kann.

Jochen

Also wenn man jetzt zum Beispiel in die JavaScript-Welt guckt,

Jochen

Meteor oder so, die sind halt,

Jochen

das ist halt vom Backend bis zum Frontend

Jochen

darauf ausgerichtet, dass

Jochen

man dem Client irgendwie Dinge schicken kann

Jochen

und damit kann man halt Sachen

Jochen

bauen, die

Jochen

ja, wenn man das sowas zum ersten Mal

Jochen

sieht, relativ verblüffend aussehen, weil sie

Jochen

anders sind als das, was man so von

Jochen

Web-Anwendungen gewohnt ist.

Dominik

Jetzt hast du gerade wieder einen Begriff gesagt, ein Meteor.

Dominik

Ja, das ist halt so, dieser

Jochen

Stack ist heute auch nicht mehr so relevant, das war mal eine Zeit

Jochen

lang irgendwie halbwegs

Jochen

hip und das ist halt irgendwie

Jochen

als Datenbank verwendet,

Jochen

dass halt irgendwie dieses da, Dings da, MongoDB,

Jochen

das kann halt quasi diese Verbindungen auch,

Jochen

oder wenn was irgendwie passiert, direkt wieder an den Server,

Jochen

dass dann irgendwie ein eigenes Node.js-Basics-Dings

Jochen

irgendwie weiterreichen und das Ding reicht es halt komplett

Jochen

durch an den Client und du hast halt sozusagen

Jochen

Model-View-Kontrolle aber mit dem Client direkt drin

Jochen

und auf dem Client oder auf dem Server kann der gleiche Code laufen

Jochen

und so und das ist alles sehr schick und das bedeutet, also

Jochen

damit sieht dann halt so eine Anwendung quasi

Jochen

genauso aus wie eine

Jochen

ja, wie so eine

Jochen

Desktop-Applikation im Grunde, was

Jochen

die Reaktivität angeht.

Jochen

Man drückt irgendeinen Knopf und sofort

Jochen

bei jemand anders in einem anderen Browser

Jochen

irgendwie sieht man, dass dieser

Jochen

Knopf gedrückt wurde und

Jochen

es passt, ja, also

Jochen

Statusänderungen

Jochen

sind halt sozusagen instantan für alle, die

Jochen

es betrifft, sichtbar und das ist

Jochen

halt etwas, was man normalerweise jetzt so nicht hat. Das hat man

Jochen

auch bei Django nicht oder das kann man dann schon machen,

Jochen

aber das ist dann halt immer irgendwie so eine

Jochen

Sonder-Locker und das ist halt nicht irgendwie

Jochen

in dem Framework mit integriert, sondern

Jochen

ja, halt immer so ein bisschen

Jochen

dran vorbei.

Jochen

Aber das wäre natürlich schön,

Jochen

wenn man das halt direkt mit drin hätte

Jochen

und das kann natürlich gut sein, dass das jetzt demnächst dann

Jochen

in einer größeren Major-Version

Jochen

kommt. Ja, ansonsten kann man

Jochen

sich Journals ja auch so reinholen. Ja, kann man auch machen.

Dominik

Also implementiert

Dominik

Django dann Module, die es vorher schon gab

Dominik

oder schreibst komplett eigene Dinge selber?

Dominik

Sind da vorher Requests für vorhanden,

Dominik

dass tatsächlich die Entwickler gucken,

Dominik

hey, was ist denn so an Bedarf da?

Dominik

Oder kommen die mit eigenen kreativen Ideen?

Johannes

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

Dominik

Wie viele Entwickler gibt es da ungefähr?

Dominik

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

Dominik

Es gibt die Django Software Foundation.

Dominik

Also sie sind irgendwann so groß geworden,

Dominik

dass sie eine Stiftung gegründet haben.

Dominik

Also Leute, die Vollzeit auch ein bisschen dafür bezahlt werden,

Dominik

dass sie 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,

Johannes

um sich am Leben zu halten und um eben dieses Projekt am Leben zu halten.

Johannes

Heißt eben aber auch, dass da inzwischen relativ viel Community-Management drin ist,

Johannes

weil eben die Community so groß ist, weil es so viele Leute gibt,

Johannes

die Django einsetzen, dass es notwendig wird, da Prozesse zu haben.

Johannes

Die meiste Weiterentwicklung kommt, glaube ich, tatsächlich aus der Entwickler-Community, wo einer, der es haben möchte, einfach sagt, ich mache das jetzt mal und dann zeige ich es allen Leuten und wir schauen, ob das funktioniert oder nicht. Also es ist sehr viel da, es ist nicht so zentralisiert, wie man das in anderen Projekten vielleicht kennt, sondern es passiert sehr viel einfach aus der Community heraus.

Johannes

Es gibt auch jedes Jahr Konferenzen zu dem Thema. Es gibt die DjangoCon, die jedes Jahr in den USA stattfindet. Es gibt die DjangoCon Europe, die jedes Jahr in einer Stadt Europas durchführt wird.

Dominik

Wo ist sie nächstes Jahr und wo war sie dieses Jahr?

Dominik

Dieses Jahr war sie in Heidelberg im Mai.

Dominik

Ja, fast in die Ecke.

Dominik

Nächstes Jahr ist sie in Kopenhagen, wenn ich das richtig weiß.

Johannes

Und das wird auch immer von der Community organisiert. Also die Software, die DSF, die Django Software Foundation sagt ganz spezifisch, wir wollen, dass das Amateure machen, weil wir eben die Community, die Benutzer mit einbeziehen wollen in den Prozess der Weiterentwicklung.

Johannes

Und die Django Con Europe, vor ein paar Jahren war die in Südfrankreich und da hatten sie so eine Insel. Die hatten einfach eine komplette Insel gemietet.

Johannes

Hübsch.

Johannes

Das ist jedes Mal anders und das ist auch so ein bisschen

Johannes

der Reiz da dran. Warst du da?

Johannes

In Heidelberg war ich da zum ersten Mal.

Johannes

War sehr angenehm.

Johannes

War eben vor dem studentischen

Johannes

Hintergrund Heidelbergs auch ganz nett.

Johannes

Nächstes Jahr in

Johannes

Kopenhagen werde ich wohl nicht dazu kommen können,

Johannes

aber ich war schon mal in Kopenhagen.

Johannes

Das ist auch sehr schön.

Johannes

Und ich kann es eigentlich jedem nur empfehlen

Johannes

und jede DjangoCon Europe ist so ein bisschen anders,

Johannes

weil die eben von

Johannes

Leuten aus dieser Gegend

Johannes

organisiert wird, die vorher vielleicht noch nie so eine

Dominik

Konferenz organisiert hat. Also auf der nächsten Insel schaue ich

Dominik

wahrscheinlich auch mal vorbei.

Dominik

Es lohnt sich auf jeden Fall.

Johannes

Es ist super, da die Leute

Johannes

kennenzulernen. Und man hat auch

Johannes

Kontakt da mit den

Johannes

Core-Entwicklern, also mit den Leuten, die sich tagtäglich

Johannes

damit beschäftigen. Und das ist natürlich super.

Johannes

Und gerade jetzt bei dem

Johannes

Channels-Projekt, ich habe da auch

Johannes

ein paar Leute kennengelernt und habe dann auch direkt

Johannes

was mit denen zusammen

Johannes

angefangen zu bearbeiten.

Johannes

Oh, das klingt ja auf jeden Fall

Johannes

schon mal echt gut.

Jochen

Ja, ansonsten, ich weiß gar nicht,

Jochen

inwiefern das da mit

Jochen

reingreift, was halt auch interessant

Jochen

wäre. Es gibt ja in Python

Jochen

jetzt so eine

Jochen

ziemlich schicke Syntax

Jochen

für AsyncIO.

Jochen

Und was eigentlich

Jochen

ja schon immer toll gewesen wäre, aber nie so richtig

Jochen

geklappt hat, war, dass man diese

Jochen

Asynchronizität, die man nach draußen hat,

Jochen

mit den Requests,

Jochen

Web-Requests, die halt reinkommen, dass man die halt weiterreicht.

Jochen

Sondern

Jochen

zum Beispiel an

Jochen

Datenbanken oder irgendwelche APIs, die man fragt.

Jochen

So momentan ist es halt so,

Jochen

wenn man jetzt, weiß ich nicht, um eine Seite zu

Jochen

bauen, zehn Statements irgendwie

Jochen

an die Datenbank schicken muss, dann werden

Jochen

die halt da seriell hingeschickt und

Jochen

abgearbeitet und dann, wenn die

Jochen

fertig sind, dann zeigt man die Seite an, was

Jochen

ein bisschen doof ist, weil das halt

Jochen

jedes Mal die Latenz, also die halt durchaus ein paar

Jochen

oder auch vielleicht mal ein paar zehn Millisekunden

Jochen

sein kann pro Statement. Das addiert sich

Jochen

halt alles auf und dann am Schluss

Jochen

quasi

Jochen

hat man halt, ist die

Jochen

Zeit, die man braucht, um halt quasi

Jochen

Content auszuliefern. Das ist ja eine wichtige Zeit, weil

Jochen

erst ab da ja alles losgeht, auch wenn

Jochen

man hinterher Bilder

Jochen

parallel holen kann oder so.

Jochen

Das geht aber nur, wenn man weiß, wie die Build-URLs

Jochen

sind. Das heißt, solange nicht irgendwie

Jochen

Content vom Applikationsserver

Jochen

gekommen ist, passiert nichts weiter.

Jochen

Holst du noch mal einen Kaffee?

Jochen

Genau, und

Jochen

dümmerweise sind halt in diesem

Jochen

kritischen Zeitbereich halt

Jochen

solche Dinge wie halt, dass

Jochen

alle SQL-Statements

Jochen

und Serielle geholt werden müssen und das ist natürlich

Jochen

eigentlich ziemlich blöd und schöner wäre es ja, wenn man

Jochen

irgendwie alle gleichzeitig abfeuern würde und

Jochen

dann würde man die halt irgendwie so einsammeln

Jochen

und dann wäre sozusagen das

Jochen

längste Statement

Jochen

irgendwie vielleicht das, was darüber entscheidet, wie lange es dauert,

Jochen

aber man müsste nicht

Jochen

irgendwie

Jochen

quasi auf jedes Einzelne warten.

Jochen

das könnte die Zeit deutlich verringern

Jochen

und

Jochen

ja, im Grunde könnte man da auch

Jochen

eine ähnliche Schnittstelle verwenden, wie für

Jochen

Asynchro

Jochen

Asynchro-Geschichten nach vorne raus

Jochen

und

Jochen

da weiß ich gar nicht, ob es, und bisher war das

Jochen

halt immer problematisch, weil man kann es halt irgendwie mit

Jochen

den vielen unterschiedlichen Geschichten, die es in Python

Jochen

da gibt, machen, man kann Threads nehmen, man kann halt

Jochen

irgendwie Twisted nehmen

Jochen

oder so, aber

Dominik

Frido habe ich letztens kennengelernt.

Jochen

Das ist voll super, aber

Jochen

ja,

Jochen

im Grunde, jetzt hätte man halt die Möglichkeit

Jochen

zu sagen, okay, da wir jetzt dann eine Syntax

Jochen

für haben, dann machen wir das einfach so.

Jochen

Und das wäre natürlich auch eine interessante Geschichte. Ich weiß auch,

Jochen

dass Flask irgendwie,

Jochen

dass da zumindest ein Projekt gibt, das versucht Flask

Jochen

umzubauen, dass das halt alles

Jochen

I.O. kompatibel

Jochen

sozusagen ist. Und bei Django

Jochen

weiß ich jetzt gar nicht wieder, wie weit das ist oder ob es da überhaupt

Jochen

Bestrebungen gibt.

Jochen

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

Jochen

Keine Ahnung.

Jochen

Ja, wüsste ich jetzt auch nicht, Freyhand.

Jochen

Aber es hört sich so an, als ob du mal

Jochen

ein Enhancement-Proposal einreichen solltest.

Jochen

Und vielleicht ein Fellowship beantragen,

Jochen

das du ja auch machst.

Jochen

Ja.

Jochen

Tja, tja, tja.

Jochen

Ist wahrscheinlich auch nicht so einfach, muss man sagen.

Jochen

Ja gut, aber wenn es einfach wäre,

Jochen

dann wäre es auch langweilig.

Jochen

Das hat ja auch schon wahrscheinlich jemand gemacht, ja.

Jochen

Ja, ja.

Jochen

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, die Art, wie dieser Podcast publiziert wird.

Jochen

Da habe ich mir natürlich auch gedacht,

Jochen

okay, wenn ich da jetzt schon irgendwie Django entwickle,

Jochen

dann wäre es ja eigentlich schon ziemlich beschämend,

Jochen

irgendwie WordPress zu nehmen, um ein Podcast zu veröffentlichen.

Jochen

Und dann habe ich halt mein kleines Blog-Modul genommen,

Jochen

das ich mal irgendwann geschrieben habe

Jochen

und da jetzt auch so Podcast-Funktionalität reingedengelt.

Jochen

Und mal gucken, wie weit das trägt.

Jochen

aber das war alles gar nicht

Jochen

so schwierig. Also zum Beispiel, wo

Jochen

ein Django da schon sehr hilfbar ist,

Jochen

es gibt so ein

Jochen

Feed

Jochen

Syndication

Jochen

Feed App, also

Jochen

Django selbst enthält einige Apps, unter anderem

Jochen

halt Admin oder

Jochen

Contrib, Authentication

Jochen

und so Zeugs

Jochen

und halt auch ein Feed Syndication Framework,

Jochen

mit dem man halt Feeds generieren kann. Und das ist natürlich

Jochen

total hilfreich, wenn man das halt nicht selber

Jochen

machen muss, weil das ist irgendwie

Jochen

ziemlich fies.

Jochen

Und ja,

Jochen

das war eigentlich sehr

Jochen

angenehm. Was natürlich irgendwie

Jochen

immer noch ein Problem ist, ist, dass man dann halt

Jochen

irgendwie so diverse Feinheiten berücksichtigen muss.

Jochen

Man muss halt gucken, oh,

Jochen

wenn ich jetzt

Jochen

das auf dem eigentlich einzig relevanten

Jochen

Katalog, im einzig relevanten Katalog

Jochen

veröffentlichen will, das ist halt der iTunes

Jochen

Podcast, das iTunes Podcast

Jochen

Verzeichnis, dann gibt es halt noch

Jochen

so ein paar Spezialattribute,

Jochen

die halt iTunes haben will und die müssen halt

Jochen

irgendwie richtig gesetzt sein und das will halt die Bilder

Jochen

in einem bestimmten Format haben oder das

Jochen

Artwork zu dem Podcast.

Jochen

Und ja,

Jochen

Kategorien müssen ein bestimmtes Format

Jochen

haben und so Dinge.

Jochen

Da habe ich jetzt immer so ein bisschen knabbern müssen, aber

Jochen

so einfach nur, dass man dann

Jochen

RSS oder Atomfeed hat,

Jochen

wo die Episoden

Jochen

quasi drinstehen.

Jochen

Das war relativ einfach.

Jochen

Das war auch sowieso bei dem Blog-Teil

Jochen

war das halt sehr simpel. Das waren halt

Jochen

irgendwie, keine Ahnung, 15 Zeilen Code oder so

Jochen

und dann gab es ein RSS-Feed zu den

Jochen

Blogposts.

Dominik

Das heißt, wenn ihr euren eigenen Podcast machen könnt, könnt ihr

Dominik

jetzt demnächst Jochen das Modul dafür verwenden.

Dominik

Ja, kann man tatsächlich.

Jochen

Also sagen wir mal so, das ist halt nicht gut

Jochen

dokumentiert und

Jochen

wahrscheinlich alles irgendwie noch ein bisschen experimentell,

Jochen

aber so, ja, benutzen kann man

Jochen

das schon, wenn man

Jochen

ein bisschen

Jochen

furchtlos ist.

Jochen

ein Bastler

Jochen

ein bisschen was für Bastler, muss man schon sagen

Jochen

ja

Jochen

genau, und das ist natürlich dann auch eine

Jochen

Gutgelegenheit, um immer wieder was über

Jochen

Django zu erzählen, wenn da irgendwelche Probleme

Jochen

aufgetaucht sein sollten oder irgendwelche schönen

Jochen

eleganten Lösungen möglich werden

Jochen

ja

Jochen

also ich, ja

Jochen

ich bin da

Jochen

ich bin da eigentlich durchaus angetan, also auch die

Jochen

Erfahrungen irgendwie mit dem Blog

Jochen

Schreiben in Django, das war auch eigentlich alles sehr nett

Jochen

ja, man kann

Jochen

aber was auch interessant ist, ist halt

Jochen

ist es auf der einen Seite halt

Jochen

sehr, sehr viel da schon, was man

Jochen

verwenden kann, wenn man jetzt aber tiefer bohrt

Jochen

dann kommt man auch immer relativ schnell an

Jochen

Stellen, wo man sich sagt

Jochen

so, ja, da gibt es noch nichts, das hat noch

Jochen

nie jemand irgendwie und das ist

Jochen

halt schon so, also zum Beispiel bei

Jochen

den Bildern wieder, also

Jochen

vielleicht gibt es da auch was und ich weiß es einfach noch nicht

Jochen

das kann natürlich auch sein, aber

Jochen

dieses Django-Image-Kit löst in gewisser Weise

Jochen

ein Problem, halt dieses Vorberechnen

Jochen

der unterschiedlichen Bildgrößen.

Jochen

Aber wie es das tut, ist halt

Jochen

nicht so richtig toll. Und da gibt es dann wieder, soweit ich

Jochen

weiß, nix. Also es gibt

Jochen

da ja tolle Möglichkeiten. Es gibt so

Jochen

LibJPG-Turbo oder

Jochen

Mods.jpg, die

Jochen

halt ungefähr nochmal so mindestens

Jochen

ein Drittel die Bilder

Jochen

kleiner machen bei gleicher Qualität oder auch

Jochen

dafür sorgen, dass wenn ein Bild angezeigt wird

Jochen

und das geladen wird, dann werden halt zuerst grobe

Jochen

Geschichten angezeigt und dann halt feinere

Jochen

Sachen. Das kann man mit JPEG

Jochen

halt irgendwie machen.

Jochen

Und ja,

Jochen

defaultmäßig wird aber Pillow verwendet.

Jochen

Pillow verwendet irgendwie unten drunter Image Magic oder so.

Jochen

Und das ist alles

Jochen

nicht richtig optimal. Also da kann man zwar angeben,

Jochen

wie hoch die Qualität sein soll,

Jochen

aber die Bilder

Jochen

sind halt nicht so klein, wie sie sein könnten, was

Jochen

für die meisten Leute vielleicht kein großes

Jochen

Problem sein wird, aber wenn man jetzt irgendwie ein paar tausend

Jochen

Bilder hat, dann macht das durchaus was aus.

Jochen

Oder ich hab mal so ein, ich hab auch

Jochen

einen Blog mit relativ vielen Bildern

Jochen

drin und war dann irgendwie,

Jochen

dann hörte ich immer so Klagen von Leuten,

Jochen

die sich das angeguckt haben. Das dauert

Jochen

immer so lange. Ich hab das gar nicht so gemerkt.

Jochen

Gut, ich hab hier irgendwie so 100M mit, was jetzt auch nicht so

Jochen

furchtbar schnell ist, aber da ging das eigentlich ganz flüssig.

Jochen

Und dann hab ich halt immer so in den

Jochen

D-Blog-Truber

Jochen

geguckt und so und gesehen so,

Jochen

oh, wir so die ersten fünf Artikel

Jochen

holen mit vielen Bildern drin. Das sind halt so

Jochen

200 MB. Wenn man sich das auf dem Handy

Jochen

auf Edge anguckt, dann könnte ich mir durchaus vorstellen,

Jochen

dass es ein bisschen langsam ist.

Jochen

Ja,

Jochen

und da wäre es schon schön, wenn man da

Jochen

tatsächlich quasi Default-mäßig

Jochen

auch irgendwie

Jochen

gute Ergebnisse bekommt, aber das ist halt

Jochen

irgendwie momentan

Jochen

jedenfalls noch nicht so. Und da wäre es natürlich auch interessant, wenn da

Jochen

also man

Jochen

stößt relativ schnell auf Ecken, wo man

Jochen

eigentlich was verbessern könnte, wenn man dann mal Zeit hat.

Jochen

tja. Johannes, wo ist dein größter

Jochen

Struggle?

Jochen

Das

Jochen

ist wie beim Jochen, das sind die Details.

Jochen

Man kommt

Johannes

sehr schnell so zu den

Johannes

95 Prozent des Projektes,

Johannes

die eigentlich so smooth sailing

Johannes

sind, die man

Johannes

am ersten Tag durchkriegt

Johannes

und an den letzten 5 Prozent arbeitet man dann

Johannes

die nächsten zwei Jahre.

Johannes

Es ist schwierig zu sagen, welcher Bereich

Johannes

am schwierigsten ist, weil es eben oft

Johannes

an diesen ganz kleinen Details hängen bleibt.

Johannes

Hast du da was

Dominik

selber für gebaut, was du irgendwo

Dominik

mal offengestellt hast?

Dominik

Es gibt so ein paar Sachen, die ich mal

Dominik

gebaut habe und offengestellt habe.

Dominik

Erzähl mal.

Dominik

Die sind alle schon etwas älter.

Johannes

Die meisten Sachen, die ich in den letzten Jahren

Johannes

gemacht habe, waren eben für Kunden und dann

Johannes

ist es schwierig, denen zu sagen,

Johannes

ich habe so und so viele Stunden

Johannes

dafür abgerechnet, wie wäre es,

Johannes

wir das jetzt der Welt für umsonst geben.

Johannes

Deshalb sind die meisten Sachen, die ich

Johannes

in den letzten Jahren gemacht habe, eben hinter

Johannes

Gittern. Die müssen leider hinter Gittern bleiben.

Johannes

Eine Sache, die ich vor Jahren mal in Python

Johannes

gemacht habe, ist eine Bibliothek

Johannes

für Kommandozeilenaufrufe.

Johannes

Hat jetzt überhaupt gar nichts mit Django zu tun.

Johannes

Verlinken wir

Johannes

natürlich auch in den Show noch. Natürlich.

Johannes

Kommandier heißt die Bibliothek. Beste Kommandozeilen-Bibliothek,

Johannes

die es gibt.

Johannes

Weil es einfach

Johannes

ein Problem war, was mich gestört hat. Ich wollte gerne

Johannes

einfache Programme mit der Kommandozeile

Johannes

ansprechen oder eine ansprechende

Johannes

Kommandozeile anbieten können.

Johannes

Und die Lösungen, die es gab, haben mich alle nicht

Johannes

überzeugt, also habe ich meine eigene gemacht.

Johannes

Das ist so ein bisschen das, was

Johannes

von einem erwartet wird und was man

Johannes

natürlich dann auch gerne macht,

Johannes

weil man ja nicht der Einzige ist, der

Johannes

dieses Problem hat.

Johannes

Vor Jahren hat der Python Package Index

Johannes

immer noch Downloadzahlen angezeigt

Johannes

und die sahen

Johannes

eigentlich schon immer ganz gut aus für meine kleine

Johannes

Bibliothek. Inzwischen zeigen sie die nicht mehr an.

Johannes

Ich weiß also

Johannes

nicht, wie viele Leute das verwenden oder nicht.

Johannes

Aber so ein kleines

Johannes

bisschen Validierung kriegt man da schon

Johannes

von der Gemeinde zurück.

Dominik

Klingt spannend, sehr schon nutzlich.

Dominik

Ja.

Dominik

Da haben wir noch

Dominik

ein bisschen Schleichwerbung gemacht für die

Dominik

Open-Source-Pakete hier. Ich bin begeistert.

Dominik

Ja, für kostenlose Dinge

Dominik

Werbung machen ist

Dominik

nicht so schlimm.

Dominik

genau. Was fällt euch denn noch

Dominik

zu Django ein? Haben wir noch irgendwas bei den Themen

Dominik

offen, was vergessen? Irgendwie was von Tipps und Tricks,

Dominik

die gerade noch so unter den Fingern

Dominik

brennen, die ihr gerade noch mitbekommen habt?

Dominik

Ah, so viele. Es gibt so viele

Dominik

Sachen. Wir könnten, glaube ich, tagelang

Dominik

über Django und über die

Johannes

verschiedenen Bauteile reden und was jetzt

Johannes

besser ist und was schlechter ist,

Johannes

dass es mir echt schwerfällt, eine Auswahl

Johannes

zu treffen. Ja doch, vielleicht eine Geschichte,

Johannes

die ich, Tests

Johannes

sind ja eine relativ wichtige

Jochen

Geschichte und

Jochen

Der ist jemand wach geworden.

Jochen

Ja, und wütend.

Jochen

Naja.

Jochen

Auf jeden Fall, dass du über Tests sprichst.

Jochen

Ja, das ist immer sehr schmerzhaft.

Jochen

Da kommt tatsächlich direkt ein Kreis hoch.

Jochen

Ja, genau.

Jochen

Und da gibt es

Jochen

also ich bin da

Jochen

ein Fan von PyTest,

Jochen

eher als von dem eingebauten Unit-Test

Jochen

Framework in Python und

Jochen

da gibt es dann auch diverse

Jochen

Hilfspakete, die einem das erleichtern.

Jochen

Irgendwie

Jochen

zum Beispiel

Jochen

PyTestJungle oder PyTestSugar

Jochen

und

Jochen

diverse andere. Und dann gibt es

Jochen

noch Dinge, die einem irgendwie so

Jochen

erleichtern, so ein bisschen

Jochen

Fixtures und Daten zu generieren,

Jochen

so Factory Boy und

Jochen

weiß ich

Jochen

gar nicht, was man da, ob man das

Jochen

wirklich alles empfehlen sollte, was ich da so verwende.

Jochen

und genau, das ist eigentlich

Jochen

auch sehr praktisch. Also da gibt es halt

Jochen

dann schon eine existierende Integration, da muss man

Jochen

sich gar nicht so

Jochen

selbst drum kümmern und

Jochen

das

Jochen

funktioniert eigentlich echt ganz toll.

Jochen

Also

Jochen

ich weiß nicht, ich glaube, du machst eher Unit-Test

Jochen

oder das klassische? Ja, ich benutze

Jochen

eher die in Django eingebauten, also

Jochen

die klassischen Unit-Tests. Ich mag Py-Test

Jochen

nicht so gerne.

Jochen

Aber da gibt es doch Methodennamen

Jochen

mit CamelCase.

Jochen

Ja, muss man ja nicht.

Jochen

Muss man nicht?

Jochen

Nee, alles, was Test- heißt, ist ein Test.

Jochen

Und alles andere ist egal.

Jochen

Hm.

Jochen

Nee, das ist ganz normal.

Jochen

Dieser Testrunner ist nicht besonders gut.

Jochen

Ich benutze immer den Nose-Testrunner,

Johannes

aber das ist nur eine Kleinigkeit.

Johannes

Ja, und man muss so Dinge machen wie,

Jochen

man muss sagen, AssertEqual.

Jochen

Da hat man doch auch wieder CamelCase irgendwie.

Jochen

Ja, das stimmt.

Jochen

diese Assert-Methoden sind so ein bisschen seltsam.

Johannes

Aber das sind so Dinge, an die gewöhnt man sich mit der Zeit.

Johannes

Und dann erscheinen sie einem völlig undenkbar,

Johannes

dass es anders sein könnte.

Johannes

Und ich glaube auch,

Johannes

wir haben kein grundsätzliches Missverständnis zwischen uns.

Johannes

Man sollte Tests schreiben.

Johannes

Ihr habt ja beide schon brav eure Tests gemacht.

Johannes

Natürlich, Coverage ist hoch genug.

Johannes

Und ob die Assert-Methode jetzt Assert-Equal heißt

Johannes

oder assert equals oder assert

Johannes

unterstrich equal oder was weiß ich, wie sie

Johannes

bei PyTest heißen mag.

Jochen

Es ist einfach nur assert. Dann sagt man

Jochen

irgendwie das eine gleich gleich das andere

Jochen

oder so. Ja, das kannst du aber

Jochen

im Unitest prinzipiell auch machen.

Jochen

Aber dann kannst du halt nicht unterscheiden zwischen

Jochen

du wolltest, dass da ein Fehler passiert

Jochen

oder du wolltest nicht, dass ein Fehler passiert.

Jochen

Aber das sind auch da wieder nur

Johannes

Detailthemen, ob das jetzt so oder so

Johannes

ausschaut.

Johannes

Ist, glaube ich, gar nicht so wichtig.

Johannes

Ja.

Johannes

Aber wir kehren

Johannes

wieder zurück zu diesem Thema, was wir vorhin

Johannes

hatten. Jeder hat so seine Präferenzen

Johannes

und mit der Zeit findet man halt

Johannes

so die Sachen, die man am liebsten benutzt.

Dominik

Die ausgelatschten Wege, die immer tiefer werden,

Dominik

weil man immer wieder durchstiefelt. Und dann kann man nie wieder

Dominik

was Neues anfangen.

Dominik

Ich hoffe,

Dominik

dass wir uns genügend Flexibilität erhalten haben,

Dominik

um doch immer noch neue Sachen

Dominik

anfangen zu können. Immer neu lernen,

Dominik

heißt ja auch ganz wenig Wissen und immer

Dominik

wieder von neu anfangen.

Jochen

Ganz, ganz wenig Wissen, weiß ich nicht,

Jochen

ob das so eine super Idee ist.

Dominik

Naja, man kann sich mal wieder neue Bausteine suchen.

Johannes

Ach ja, viel Software, die man so kennt,

Johannes

fühlt sich schon so an,

Johannes

als ob die einfach mit ganz wenig Wissen gestartet ist.

Johannes

Das stimmt natürlich auch.

Jochen

Aber was man generell sagen kann,

Jochen

ist also testen, testen, testen.

Jochen

Und wenn man das nicht macht, das ist eine sehr gute Idee. Ich habe früher immer gedacht, 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, das war, da habe ich mich wohl gefühlt, weil das war etwas, was kann man halt so komplett überblicken 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

Jochen

und dann halt Features hinter sehr

Jochen

dazukamen oder sich geändert haben,

Jochen

dann sind immer furchtbare Sachen passiert. Oder nicht immer,

Jochen

aber häufig genug,

Jochen

dass es irgendwie

Jochen

unangenehm war,

Jochen

schreckliche Dinge passiert.

Jochen

Die Welt geht unangenehm, ja.

Jochen

Ja, und seit

Jochen

ich irgendwie Tests schreibe, ist das

Jochen

eigentlich nicht mehr so schlimm.

Jochen

Seitdem

Jochen

nicht mehr so schlimm.

Jochen

Das passiert leider immer noch.

Jochen

So ganz lässt sich das nicht verhindern, aber

Jochen

es ist,

Jochen

ich fühle mich jetzt wohl dabei, auch

Jochen

längere Sachen zu schreiben, auch wenn ich jetzt nicht

Jochen

mehr quasi die Details anderer

Jochen

Module

Jochen

oder anderer Apps, die

Jochen

da auch noch Dinge tun,

Jochen

wenn ich die nicht mehr so verstehe oder auch lange nicht mehr

Jochen

daran gearbeitet habe, dann habe ich jetzt nicht mehr

Jochen

so ein Problem, irgendwas zu ändern, was die betrifft.

Jochen

Wenn ich hinterher die Tests durchlaufen lasse und

Jochen

die sehen gut aus, dann kann ich

Jochen

ja schon relativ sicher sein, dass da nichts total Schreckliches

Jochen

passieren wird.

Jochen

Und wenn man das halt nicht hat, dann

Jochen

hat man ein großes Problem, weil

Jochen

wenn man Tests hat, dann weiß man, wenn man ein Update

Jochen

macht oder wenn man jetzt eine Version von einer Bibliothek

Jochen

ändert oder man ändert irgendwas völlig

Jochen

harmloses, von dem her man denkt, das kann eigentlich überhaupt keine Auswirkungen

Jochen

auf irgendwas anderes haben und dann

Jochen

füllt man die Tests aus und dann schlagen vier Tests Fail

Jochen

und einer davon schlägt Fail und man denkt sich so

Jochen

oh Gott, das hätte nie passieren dürfen.

Jochen

Dann weiß man,

Jochen

ja, das wäre jetzt, wenn man keine

Jochen

Tests gehabt hätte, dann wäre das ein wirklich fieser

Jochen

Bug gewesen und teilweise

Jochen

sind die halt so, dass man sich hinterher auch sagt,

Jochen

also da kommt man nicht drauf, dass

Jochen

das irgendwie die Auswirkungen hatte, das

Jochen

hätte man jetzt gar nicht,

Jochen

also durch lange Meditationen über diese

Jochen

Änderungen hätte man das nicht wirklich

Jochen

rausbekommen können und

Dominik

wäre ihm wahrscheinlich auch gar nicht aufgefallen und dann

Dominik

irgendwann fliegt es dann im, ja.

Jochen

Wäre es dem User aufgefallen oder

Jochen

dann hätte der sich beschwert, was

Jochen

schon ziemlich schlimm ist oder noch schlimmer

Jochen

es wäre irgendwie eine Sicherheitslücke oder so gewesen, also

Jochen

Also man fühlt sich da deutlich besser,

Jochen

wenn man Tests hat und das irgendwie so praktiziert.

Jochen

Und seit ich damit angefangen habe,

Jochen

fühle ich mich da irgendwie deutlich wohler mit allem.

Dominik

Also, ihr hört, brav testen und eure Tests fern benutzen.

Dominik

Verschreibt ihr denn zuerst eure Tests

Dominik

oder schreibt ihr erst den Code?

Johannes

Da kann man sich, wenn man die Frage beantwortet,

Johannes

kann man sich nur in den Nesseln setzen.

Johannes

Weil du so viele Zusendungen kriegst,

Johannes

dass man es anders machen sollte.

Dominik

Zusendungen übrigens gerne an

Dominik

hallo-podcast.de

Dominik

Du könntest jederzeit Fragen, Anmerkungen stellen.

Dominik

Ich habe gerade so wunderschön reingepasst.

Dominik

Keine Aussage von dir, Johannes?

Dominik

Ich schreibe meinen Code zuerst

Dominik

und schreibe die Tests hinterher.

Dominik

Und das schockiert viele Leute.

Dominik

Ich mache nicht TDD.

Dominik

Ich komme überhaupt gar nicht klar mit TDD.

Dominik

TDD ist Test Driven Development.

Dominik

Genau, Test Driven Development heißt,

Johannes

Man schreibt zuerst Tests und ausschließlich Tests und dann schreibt man ganz genau so viel Code, dass diese Tests erfolgreich werden und nicht mehr.

Johannes

Und die Idee dahinter ist eben, dass man immer automatisch 100% Test Coverage hat.

Johannes

Alles, was man an Code geschrieben hat, ist automatisch getestet, weil man den Test vorher geschrieben hat, bevor man den Code geschrieben hat.

Johannes

Klingt logisch.

Johannes

Klingt logisch.

Johannes

Das Problem für mich ist, dass Tests sind etwas,

Johannes

auch wie der Jochen das soeben beschrieben hat,

Johannes

die fixieren die Funktionalität eines Programms.

Johannes

Die sorgen dafür, dass ich weiß,

Johannes

das funktioniert genau auf diese Art und Weise.

Johannes

Ich weiß aber oft gar nicht, wie ein Programm funktionieren soll,

Johannes

wenn ich anfange, das zu schreiben.

Johannes

Und dann fällt es mir sehr schwer, diesen Test dafür zu schreiben,

Johannes

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

Johannes

Und deshalb fange ich üblicherweise an Code zu schreiben und dann hat man halt irgendwie so ein paar Sachen umgesetzt und dann fange ich an die Tests dazu zu schreiben und dann eben sozusagen das so weit aufzubohren, dass alles drin ist, was ich haben möchte und die Tests.

Dominik

Was ist denn das Gegenargument? Bist du nicht kreativ genug, dir vor die Tests auszudenken oder hinterher wirst du dann zu faul und die Tests fehlen am Ende?

Johannes

Nee, ich glaube, es ist einfach nur ein gewisser Arbeitsmodus, der eben zu manchen Leuten passt und der zu manchen Leuten nicht passt. Und ich bin immer sehr beeindruckt, wenn Leute TDD machen und wenn die das zeigen und ich weiß auch, dass das super gut funktioniert, weil die Vorteile eben da sind.

Johannes

man hat eben immer Tests

Johannes

geschrieben, bevor man Code überhaupt

Johannes

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

Johannes

automatisch. Heißt auch nicht,

Johannes

dass der 100% failsafe

Johannes

ist, aber man kann auf jeden Fall sicher sein, dass die

Johannes

Dinge, die man in die Tests geschrieben hat, so funktionieren.

Johannes

Wie sie funktionieren sollen.

Johannes

Wie machst du das, Jochen?

Johannes

Ich muss gestehen, tatsächlich

Johannes

genauso quasi.

Johannes

Also,

Jochen

ja, ich habe ja auch schon häufiger mal, oder ich habe es auch tatsächlich

Jochen

schon probiert, irgendwie zuerst die Tests zu schreiben und dann

Jochen

den Code, aber

Jochen

also es gibt da eben

Jochen

zwei Dinge für mich. Also eine Sache ist halt

Jochen

auch, dass ich oft

Jochen

nicht weiß, wo es hingehen soll und

Jochen

ich fange sogar, das ist auch vielleicht noch

Jochen

eine ganz interessante Empfehlung,

Jochen

oft auch gar nicht jetzt

Jochen

tatsächlich ein Modul

Jochen

anzuschreiben, wenn ich irgendwas schreibe.

Jochen

Also quasi in einer Django-App

Jochen

so ein Django-Projekt oder

Jochen

eine Django-Applikation besteht üblicherweise

Jochen

aus einer Reihe von Django-Apps, die man halt schreibt

Jochen

und dann gibt es halt Third-Party-Apps, die man sich von irgendwo

Jochen

importiert, wenn man es installiert hat

Jochen

und dann gibt es halt welche, die man selber schreibt.

Jochen

Also User-Verwaltung ist

Jochen

üblicherweise ein Teil und dann kann halt

Jochen

irgendwie, keine Ahnung,

Jochen

ein bestimmter Teil der Webseite kann halt irgendwie ein anderer Teil

Jochen

sein oder so.

Jochen

Und

Jochen

üblicherweise schreibt man halt in diesen Apps

Jochen

irgendwas, wenn man jetzt eine Django

Jochen

Applikation schreibt.

Jochen

Aber oft, wenn ich nicht weiß,

Jochen

wie ich überhaupt irgendwas

Jochen

machen möchte, dann mache ich nicht das, sondern

Jochen

ich schreibe Sachen in einem Notebook.

Jochen

Das ist

Jochen

Das ist auch der Hintergrund, der da durchkommt.

Jochen

Ja, ja, natürlich. Also ich mache halt

Jochen

eher so eigentlich

Jochen

noch mehr als Django

Jochen

so Data Science.

Jochen

Du meinst ein Jupyter-Notebook? Genau, ein Jupyter-Notebook.

Jochen

Da gibt es auch

Jochen

ein sehr

Jochen

empfehlenswertes Paket, nennt sich

Jochen

Django Extensions.

Jochen

Da sind einige schöne Sachen dabei.

Jochen

Unter anderem halt ein Entwicklungsserver,

Jochen

eingebauten Debugger hat, wo man dann halt direkt

Jochen

im Traceback quasi eine Debug-Shell bekommt.

Jochen

Da gibt es

Jochen

noch andere Dinge, Shell Plus, wo dann halt

Jochen

diverse Imports schon mit drin sind.

Jochen

Was das Ding auch hat, ist, man kann

Jochen

halt

Jochen

Shell Plus minus minus Notebook oder so

Jochen

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,

Jochen

halt in einem Jupyter-Notebook.

Jochen

Und das ist halt sehr nett. Und dann kann man halt einfach mal

Jochen

eingehen und mit den Dingen spielen und einfach mal

Jochen

so Sachen so sketchmäßig

Jochen

implementieren und gucken, ob es funktioniert.

Jochen

Und erst, wenn ich weiß, okay, so

Jochen

funktioniert das irgendwie, was ich vorhabe,

Jochen

schreibe ich das quasi tatsächlich

Jochen

in eine Django-App rein

Jochen

und gut,

Jochen

es gibt Dinge, bei denen geht es nicht anders.

Jochen

Jetzt, wenn man... Oh, Gesundheit.

Jochen

Ja, danke.

Jochen

Wenn man Modelle hat und die Datenbank

Jochen

ändert sich, dann muss man das halt

Jochen

irgendwie in der Models-PY machen

Jochen

und dann muss man halt irgendwie Migrationen ausführen.

Jochen

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

Jochen

Aber wenn es um irgendwie Logik oder so geht,

Jochen

dass die richtig funktioniert

Jochen

oder man einfach nur hinkriegen möchte,

Jochen

dass das jetzt, oder wie man das elegant hinschreibt,

Jochen

man weiß oft nicht, wie man das elegant hinschreibt.

Jochen

Und wenn man Sachen ausprobiert,

Jochen

dafür ist ein Notebook echt total super.

Jochen

Kann man halt so lange probieren, bis es geht.

Jochen

Muss nicht dauernd irgendwie sich darum kümmern,

Jochen

dass man auf der Webseite ist, irgendwas anklickt

Jochen

oder irgendwie den Entwicklungsserver neu startet,

Jochen

beim Syntax-Error steigt der dann aus und dann muss man

Jochen

wieder neu starten.

Jochen

Das ist alles so ein bisschen langsam

Jochen

und im Notebook ist das alles viel schneller.

Jochen

Und dann, wenn das halt irgendwie funktioniert, dann übertrage ich

Jochen

die Funktionen, die ich halt im Notebook drinstehen habe,

Jochen

halt in meine

Jochen

anderen Files und dann

Jochen

schreibe ich Tests halt irgendwie.

Jochen

Das ist

Jochen

der eine Punkt. Der andere Punkt bei Tests ist halt,

Jochen

dass es Dinge gibt, die sind

Jochen

sehr schwer zu testen. Es bringt aber gar nicht

Jochen

so furchtbar viel, das zu testen. Also das ist

Jochen

auch sowas. Wenn man jetzt tatsächlich,

Jochen

ich habe auch eigentlich fast nie 100% Testabdeckung,

Jochen

sondern meistens eher so 70

Jochen

bis 80 oder so.

Jochen

Was auch

Jochen

nicht so schlecht ist, was halt, ja, es ist halt irgendwo,

Jochen

ich weiß nicht genau, wo der Sweetspot ist,

Jochen

vielleicht ist er bei noch ein bisschen mehr, vielleicht ist er bei

Jochen

ein bisschen weniger.

Jochen

Ich finde, es ist halt

Jochen

im Grunde wichtig, dass man so viele Tests hat,

Jochen

dass einem, wenn was schief geht, das auffällt,

Jochen

aber wenn man jetzt so viel

Jochen

Tests hat, auch wenn man so viel

Jochen

Zeit in den Tests verbringt, hat man halt das Problem, dass man

Jochen

sich dann schon sehr, sehr festgelegt hat und das hinterher schwer

Jochen

ändern kann.

Jochen

Und die Frage ist, ist es das wert?

Jochen

Wenn das halt gar nicht mehr so viele Fehler

Jochen

fängt, weil ich irgendwie anfange,

Jochen

weiß ich nicht, also Dinge, die ich selten teste,

Jochen

sind halt, funktioniert das URL-Routing?

Jochen

Das kriege ich eigentlich auch ohne Tests mit,

Jochen

wenn das nicht mehr funktioniert.

Jochen

Oder auch die Tests schlagen halt

Jochen

Fehler, die auf die entsprechenden Endpunkte gehen.

Jochen

Oder das Django-Admin

Jochen

Geschichten, die teste ich auch

Jochen

eigentlich eher selten.

Jochen

Also die Logik schon,

Jochen

aber nicht, ob Ant-Admin überhaupt geht.

Jochen

Überhaupt sollte man nicht unbedingt testen,

Jochen

die halt schon eigene Pakete sind, weil die haben schon

Jochen

Tests und so.

Jochen

Und für mich ist

Jochen

der Sweet Spot beim Testen eher so bei

Jochen

70, 80 Prozent.

Jochen

Ein Test,

Jochen

die man einfach schreiben kann.

Jochen

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

Jochen

Also gut, manchmal schaffe ich

Jochen

das nicht. Manchmal schreibe ich auch Tests, die komplizierte

Jochen

Dinge tun und dann hinterher ärgere ich mich immer,

Jochen

wenn die fehlschlagen und ich dann nicht mehr

Jochen

weiß, was testet das überhaupt?

Jochen

Warum brauchst du Dinge?

Jochen

Was macht das für komische Sachen?

Jochen

Du brauchst Tests für deine Tests.

Jochen

Genau, und das will man natürlich eigentlich vermeiden,

Jochen

weil dann wird es schwer.

Dominik

Wie kriege ich überhaupt so eine Test-Coverage raus?

Dominik

Also woher weiß ich denn,

Dominik

wie viel von meiner Funktion getestet wird?

Dominik

Zähle ich dann einfach die Funktionen,

Dominik

schreibe für jede Funktion eine Test-Funktion

Dominik

und gucke dann und dividiere dann in Quotienten?

Dominik

Ja, da gibt es Tools für.

Dominik

Also da gibt es ein Tool, das heißt Coverage.

Dominik

Ein kreativer Name.

Dominik

der gibt einem im Wesentlichen für jede Programmzeile

Dominik

an, würde die von einem Test berührt

Dominik

oder nicht. Und

Dominik

die Anzahl der Gesamtzeilen in einem Programm

Dominik

geteilt durch die Anzahl der getesteten

Dominik

Zeilen. Okay, also ganz easy.

Jochen

Ganz easy. Das macht einmal eine

Jochen

Ausgabe auf der Commando-Zeile, aber es

Jochen

macht halt auch, es erzeugt so irgendwie HTML

Jochen

und wenn man das im Browser aufmacht,

Jochen

dann, wenn man auf die

Jochen

entsprechende Zeile drückt, dann sieht man halt auch

Jochen

eine Ansicht des Codes und sieht

Jochen

dann halt irgendwie farblich markiert, welche

Jochen

Codezeilen halt noch nicht getestet sind.

Jochen

und dann kann man halt relativ schnell sehen, wenn das halt Zeugs

Jochen

ist, wo man relativ sicher davon

Jochen

ausgehen kann, dass es sowieso funktionieren wird, wie

Jochen

URL-Confs oder... Die Stereo-Methode.

Jochen

Ja, dann muss man...

Jochen

Jedes Modell hat eine Stereo-Methode und das

Jochen

wird nie auf 100% Coverage, wenn man diese

Johannes

Methode nicht testet, aber die ist völlig irrelevant.

Johannes

Ja.

Jochen

Auf der anderen Seite, wenn man dann halt durchscrollt und sieht dann

Jochen

halt irgendwie ein komplexes

Jochen

Ding, ein Algorithmus, der irgendwas macht

Jochen

und der ist gar nicht getestet, dann sollte man

Jochen

da sollte man dann vielleicht mal einen Test schreiben.

Jochen

Und so kann man, so gehe ich jedenfalls vor. Ich gucke mir halt

Jochen

immer an, was die größten Code-Teile, die halt am meisten

Jochen

Funktionalität irgendwie haben. Wenn die nicht geteilt

Jochen

sind, dann fange ich halt da an.

Johannes

Es gibt auch ganz viele IDEs, die das integrieren,

Johannes

wo du quasi diese Ansicht in der IDE hast.

Johannes

Wenn du eine Testansicht haben kannst, wo du

Johannes

eben siehst, welche Zeilen durchgelaufen sind.

Johannes

Welche IDE nutzt du? Ich benutze

Johannes

PyCharm.

Johannes

Vor ein paar Jahren

Johannes

sind die plötzlich groß

Johannes

geworden.

Johannes

JetBrains ist

Johannes

so eine Variante von

Johannes

von einer IDE, die hieß

Johannes

früher IDEA.

Johannes

Die gibt es auch immer noch. Das ist eine Java-IDE.

Johannes

Es ist schwierig, da eine Empfehlung

Johannes

zu geben, weil auch da die Vorlieben sehr weit...

Dominik

Deine Vorliebe hat natürlich auch Interesse.

Dominik

Genau. Und es ist auch eine Gewöhnung.

Johannes

Ich weiß auch, dass es nicht die beste IDE

Johannes

ist und ich weiß auch, dass sie nicht

Johannes

ungeheuer billig ist.

Johannes

Aber

Johannes

ich benutze halt das, was ich gewöhnt bin.

Johannes

Also Community Edition kann man vergessen.

Johannes

Die Community Edition kann man nehmen, aber die hat

Johannes

nicht so eine gute Django-Integration.

Johannes

Gerade was Django angeht, ist tatsächlich

Johannes

die Professional Edition deutlich besser, weil

Johannes

die viele von den Sachen,

Johannes

die in Django so ein bisschen implizit

Johannes

sind, trotzdem weiß.

Johannes

Gerade was die

Johannes

Datenbank angeht, ist da sehr viel drin.

Johannes

Oder Templates auch. Die Template-Syntax

Johannes

ist in der Community Edition nicht drin.

Johannes

Ist ein bisschen schade,

Johannes

aber so ist es normalerweise.

Johannes

Migration hast du noch

Johannes

angesprochen, Jürgen. Ja, ja,

Jochen

Das ist auch etwas, was halt...

Jochen

Was ist das?

Jochen

Genau, was ist das?

Jochen

Also oft hat man halt das Problem,

Jochen

wenn man jetzt so eine Applikation entwickelt,

Jochen

man hat ein neues Feature oder so

Jochen

und dafür muss man jetzt auch das Datenmodell ändern,

Jochen

weil man irgendwas Neues abspeichern muss oder so.

Jochen

Oder man muss halt eine bestehende Datenstruktur irgendwie ändern,

Jochen

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,

Johannes

gab es das nicht. Da konnte man Datenbanken

Johannes

nicht ändern. Du musst dann mal manuell

Johannes

ändern in der Datenbank selber

Johannes

oder halt einmal komplett resetten.

Johannes

Ja, genau.

Jochen

Dann gab es irgendwann

Jochen

ein Modul,

Jochen

das nannte sich South.

Jochen

Das hat dann damit angefangen.

Jochen

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

Jochen

Für den Namen?

Jochen

Einmal für den Namen nicht.

Jochen

Und ich weiß auch gar nicht, wo das...

Jochen

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

Jochen

Ach so, Vogelmigration.

Jochen

Ja, schlau.

Jochen

Ist nur ein bisschen schlecht, wenn man danach googeln will.

Johannes

Ja, es ist eher Django South.

Johannes

Jedenfalls, diese Bibliothek hat dieses Problem gelöst,

Johannes

in dem man eben gesagt hat,

Johannes

okay, ich möchte jetzt eine Zustandsänderung aufzeichnen.

Johannes

Und diese Zustandsänderung,

Johannes

die konnte man dann auf eine Datenbank anwenden.

Johannes

Also die hat einfach tatsächlich diese Tabellen,

Johannes

die da drin sind, verändert.

Johannes

Die haben ein Alter Table gemacht

Johannes

oder Zeilen gelöscht

Johannes

oder was auch immer notwendig war,

Johannes

um eben diesen neuen Datenbankzustand

Johannes

hinzubekommen. Nicht den Datenzustand,

Johannes

also nicht, was da in der Datenbank drin ist, sondern die

Johannes

Struktur, die strukturelle

Johannes

Anlage der Datenbank.

Johannes

Und das ist so ein wichtiges Problem,

Johannes

dass es irgendwann in Django Core gewandert ist

Johannes

und ist jetzt eines der wichtigsten Module

Johannes

in Django. Ja, ja, auf jeden Fall.

Johannes

Also ich erinnere mich da auch

Johannes

mit

Jochen

Schrecken an Zeiten,

Jochen

also

Jochen

wo dieses Problem, also jetzt

Jochen

mit integrierten Migrationen und so

Jochen

ist es halbwegs okay, also es ist auch immer noch

Jochen

ein Stößer auf viele Fälle, wo es

Jochen

eklig werden kann und wo man auch für die Migration

Jochen

dann Tests schreiben muss und so,

Jochen

aber wenn ich mich da

Jochen

an frühere Zeiten zurückerinnere,

Jochen

wo wir jetzt gar nicht sowas wie Django verwendet hatten,

Jochen

zum Beispiel

Jochen

bei Firmen, bei denen ich gearbeitet habe, sondern

Jochen

irgendwie selbstgebaute

Jochen

Webframeworks

Jochen

oder Dinge, die es schon gab, die aber

Jochen

sowas alles nicht drin hatten, da war

Jochen

das immer irgendwie

Jochen

eine problematische Geschichte. Da hat man

Jochen

dann halt irgendwie

Jochen

das getestet, irgendwie lokal

Jochen

oder auf einem Entwicklungssystem oder einem Staging-System

Jochen

und hat das dann funktioniert.

Jochen

Dann hat man das Problem, wie synchronisiert man die

Jochen

unterschiedlichen Schema-Versionen, was

Jochen

passiert auf dem Produktionssystem,

Jochen

dann

Jochen

hat man das irgendwie durchgeführt und dann ist auf dem

Jochen

Produktionssystem aber was anderes passiert, als man

Jochen

irgendwie eigentlich erwartet hatte und dann

Jochen

musste man halt wieder nachgucken, was ist denn da

Jochen

jetzt eigentlich passiert und es gab gar keine

Jochen

formalisierte Sicht

Jochen

auf dieses, was passiert

Jochen

da jetzt gerade, sondern das ist halt ein Skript, das man ausgeführt

Jochen

hat und dann

Jochen

ja, das ist dann aber

Jochen

möglicherweise auch nicht

Jochen

so mit dabei,

Jochen

sondern das ist bei irgendeinem Entwickler auf dem Rechner

Jochen

und so und der connectiert sich halt

Jochen

in irgendeinem Notebook und das

Jochen

macht dann halt irgendwas

Jochen

und das ist halt schön, wenn man das halt formalisiert hat,

Jochen

weil bei Django hat man dann halt irgendwie ein Verzeichnis

Jochen

Migrations, in dem die alle dringend liegen, wo man

Jochen

reingucken kann, was da passiert, in der Datenbank

Jochen

selbst wird festgehalten, welche schon

Jochen

ausgeführt worden sind und an welcher Stelle man

Jochen

sich befindet und man kann halt auch leicht wieder

Jochen

vor- und zurückspulen sozusagen, man kann

Jochen

halt sagen, migrate

Jochen

und dann halt eine Nummer einer Migration

Jochen

angeben, zu der man zurück möchte und

Jochen

dann rollt sich die Datenbank in diesen Zustand

Jochen

wieder zurück, dann kann man halt, wenn man

Jochen

zum Beispiel gesehen hat, dass das, was man gemacht hat, war

Jochen

Blödsinn, dann rollt man halt das Ding

Jochen

zurück, löscht die Migration und macht halt eine andere

Jochen

und ja, das

Jochen

ist eine sehr, sehr praktische Geschichte und

Jochen

führt halt dazu, dass man dieses ganze

Jochen

Problem irgendwie so halbwegs in den Griff

Jochen

bekommt und es gibt

Jochen

zumindest die Tools an die Hand, mit denen man das in den Griff

Jochen

bekommen kann, was halt

Jochen

in

Jochen

wenn man das halt nicht so macht, sondern

Jochen

von Hand oder selbst gestrickt halt

Jochen

doch viele böse Falschtricke

Jochen

für Leute bereithält und die dann

Jochen

also relativ unvorbereitet reinlaufen

Jochen

und das ist halt eine Geschichte, die man auf jeden Fall

Jochen

wissen sollte, dass das gibt

Jochen

Ich glaube auch, dass gerade

Johannes

Third-Party-Apps dadurch überhaupt erst richtig

Johannes

möglich wurden, dass man eben diese

Johannes

Migrationen mitliefern konnte, weil

Johannes

sonst immer in jeder

Johannes

Bibliotheks-Update musstest du

Johannes

von Hand diese Struktur anpassen

Johannes

oder eben diese Skripte haben, die das irgendwie

Johannes

machen und hoffen, dass die funktionieren auf deiner Datenbank

Johannes

genauso wie sie bei dem

Johannes

Entwickler funktioniert haben

Johannes

und heute weißt du einfach, wenn du eine Bibliothek installierst

Johannes

die bringt ihre Migration mit und die funktionieren auch.

Johannes

Aber klar, es ist auch so ein

Johannes

Fallstrick, wenn man zum ersten Mal

Johannes

eine Django-Anwendung startet und dann schön seine

Johannes

Modelle geschrieben hat und dann

Johannes

Operational Errors bekommt, weil die Datenbank nicht da ist.

Johannes

Stolper ich auch regelmäßig noch drüber,

Johannes

weil ich vergesse, meine Datenbank

Johannes

zu migrieren.

Johannes

Dann gibt es keine automatische

Dominik

Erinnerung, also die musst du dir dann selber...

Dominik

Der Operational Error ist die automatische Erinnerung.

Dominik

Ja, das hört sich auf jeden Fall so an.

Dominik

Da könnte man Django für alles mögliche

Dominik

einsetzen. Für große Projekte,

Dominik

für kleine Projekte, für schmale, schlanke.

Dominik

Ich weiß nicht, haben wir eigentlich schon

Dominik

irgendwelche Beispiele genannt für

Jochen

Django-Anwendungen, die man vielleicht so

Jochen

kennt? Kennst du denn welche?

Jochen

Ja, ist ja zufällig.

Jochen

Ich kenne bestimmt auch nicht alle, aber ich glaube,

Jochen

eine der größten Django

Jochen

Implementationen

Jochen

hat Instagram

Jochen

oder hat Instagram? Aber haben sie abgelöst.

Jochen

Haben sie abgelöst? Oh je, dann war das jetzt kein

Jochen

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

Jochen

Und das ist natürlich richtig.

Jochen

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

Jochen

Weiß ich nicht genau, nee.

Jochen

Es ist üblicherweise so, dass wenn man solche Standardlösungen einsetzt

Johannes

und dann so groß wird wie Instagram zum Beispiel,

Johannes

dass man dann auf einmal auf Probleme trifft,

Johannes

die eben durch Standardlösungen nicht mehr abgedeckt werden

Johannes

und dass man dann anfängt, seine eigenen Dinge zu bauen.

Johannes

Das haben die ganzen großen Firmen

Johannes

machen das ja alle. Die betreiben alle ihre eigenen

Johannes

Web-Server. Die haben alle ihre

Johannes

eigenen Datenbanken geschrieben. Die haben alle ihre eigene

Johannes

Infrastruktur geschrieben, weil ab einer gewissen Größe

Johannes

sind die Standardlösungen einfach nicht mehr wichtig.

Johannes

Und bei Instagram war es genauso. Die sind sehr

Johannes

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

Johannes

Soweit ich weiß.

Dominik

Fällt dir noch ein anderes Beispiel ein?

Dominik

Einem von euch?

Dominik

Es gibt viele kleine Sachen,

Dominik

die damit laufen.

Dominik

Man sieht

Dominik

das von außen natürlich nicht. Man sieht in der

Johannes

Web-Anwendung nicht an, ob es in Django geschrieben ist

Johannes

oder nicht.

Johannes

Und deshalb muss man

Johannes

so ein bisschen darauf vertrauen, dass

Johannes

die Entwickler einem das mitteilen.

Johannes

Es gibt ein System, das heißt

Johannes

Pre-Tix. Das ist ein

Johannes

Ticket-Verkaufssystem. Also wenn man

Johannes

ein Konzert veranstaltet und Tickets verkaufen möchte,

Johannes

das ist in Django geschrieben. Die sind auch

Johannes

sehr aktiv

Johannes

bei den Django-Cons.

Johannes

Ja.

Johannes

Ne, ansonsten,

Johannes

also ich weiß das halt auch noch.

Johannes

Das ist so eine Zeitung in Amerika.

Johannes

Ja, genau.

Johannes

Das waren die ursprünglichen Entwickler von Django.

Johannes

Also es kommt aus dem Zeitungsumfeld.

Dominik

Also auch als Blog-Plattform für Vertrieb von neuen News-Artikeln?

Johannes

Ja, die haben ihre komplette Zeitungs-Webseite damit organisiert im Wesentlichen.

Johannes

Also so ist es, das ist so die Entstehungsgeschichte.

Johannes

Das ist aus einer kleinen Stadt in Texas, Lawrence.

Johannes

wo eben zwei Entwickler gesagt haben, wir machen das

Johannes

jetzt einmal richtig, anstatt immer wieder

Johannes

PHP-Kram zusammenzubasteln.

Johannes

Haben sie einmal das Problem richtig

Johannes

gelöst und durften es dann irgendwann

Johannes

veröffentlichen. Und das System

Johannes

heißt jetzt Django. Und soweit ich weiß,

Johannes

wird es da immer noch eingesetzt.

Johannes

Spannend.

Johannes

Ja, habt ihr

Dominik

noch was beizutragen zum Django oder

Dominik

würdet ihr sagen, wir haben das Thema jetzt so weit

Dominik

durch?

Dominik

Es gibt noch

Johannes

viele Dinge, die man machen könnte, aber nichts Konkretes.

Dominik

Wenn wir irgendein Thema nochmal besprechen sollen,

Dominik

dann sag gerne Bescheid, dann machen wir genau

Dominik

da weiter. Es gibt ja auch diese E-Mail-Adresse,

Dominik

an die man Fragen schicken kann. Genau,

Dominik

hallo at python-podcast.de

Dominik

Ja.

Dominik

Ne, mir fällt da

Dominik

jetzt auch tatsächlich,

Dominik

man kann bestimmt auch noch

Dominik

über diverse

Dominik

Bereiche in

Jochen

Django wieder eine eigene Sendung

Jochen

machen. Ja, eigene Episoden.

Jochen

Episode über den ORM oder Episode über

Jochen

Template-Sprachen oder so. Ja, oder auch

Johannes

über ganz einfache Sachen wie die Formular-Integration

Johannes

oder wie

Johannes

die Session-Integration oder

Johannes

ganz einfache Dinge, die

Johannes

man so für

Johannes

ganz normal hält, die aber

Dominik

für euch ist alles ganz normal,

Dominik

easy und aus dem Ärmel.

Dominik

Man kriegt das halt automatisch mit.

Dominik

Wenn man Django einmal startet, dann ist es schon da

Dominik

und man muss sich nie Gedanken darüber machen.

Dominik

Aber es ist super interessant, was damit alles geht

Johannes

und was vielleicht nicht geht und wie

Johannes

es geht. Und

Johannes

super spannende Sachen.

Jochen

Was man vielleicht noch erwähnen sollte, also dieser ganze

Jochen

Web-Stack, also Web ist halt so ein bisschen

Jochen

was man halt leider

Jochen

auch immer wieder sieht, dass es nicht so richtig

Jochen

aus einem Guss, also wenn man sich jetzt

Jochen

beispielsweise anschaut, wenn man mit Xcode

Jochen

jetzt iOS-Applikationen

Jochen

erstellt oder so, dann ist das halt

Jochen

auch Model-View-Controller, aber es ist halt

Jochen

eigentlich sehr

Jochen

schön irgendwie so gebaut,

Jochen

dass es halt alles von dem

Jochen

Finger, der irgendwo draufklickt, bis zu

Jochen

dem Datenmodell halt alles

Jochen

schön ineinander greift und funktioniert.

Jochen

Das ist im Web leider alles nicht

Jochen

so wirklich und das fällt einem dann halt auch

Jochen

öfter auf oder auf den Fuß, weil

Jochen

man halt ganz so viele unterschiedliche

Jochen

Sprachen

Jochen

Layer hat, die irgendwie

Jochen

miteinander interagieren müssen. Jetzt der

Jochen

Django-Teil ist ja sozusagen nur der

Jochen

Teil der Web-Applikation,

Jochen

die sich jetzt auf einem Applikations-Server

Jochen

befindet und da irgendwie, und der Datenbankteil

Jochen

ist halt jetzt auch noch irgendwie mit drin, sozusagen.

Jochen

Aber, oder

Jochen

es rennt halt auch HTML nach vorne raus, aber es ist halt

Jochen

auch das HTML, also die Templates selber,

Jochen

ist das jetzt, ist HTML ein Teil von

Jochen

Django? Eigentlich eher nicht.

Jochen

Das ist eigentlich nochmal eine etwas andere Welt.

Jochen

Wie sieht das hinterher aus?

Jochen

Dazu braucht man dann CSS, das ist

Jochen

zwar auch irgendwie in Django drin, man kann halt,

Jochen

es gibt da, man kann SAS oder LESS

Jochen

oder was auch immer man verwenden möchte, um halt

Jochen

irgendwie das CSS von der Seite zu erzeugen,

Jochen

das kann man natürlich machen, aber wie man das

Jochen

jetzt macht und der Umgang damit, das ist natürlich wieder

Jochen

irgendwie so eine eigene Geschichte.

Jochen

Das ganze JavaScript,

Jochen

also der Teil der Web-Applikation, die halt auf dem

Jochen

Browser läuft, ist nochmal eine andere Geschichte, die wird dann

Jochen

halt auch vielleicht, die wird wahrscheinlich nicht

Jochen

mal von Django ausgeliefert, sondern von dem statischen

Jochen

Web-Server, der halt irgendwie vor Django meistens

Jochen

noch davor ist und irgendwie so

Jochen

Reverse-Proxy vor der Applikation ist,

Jochen

für statische Inhalte und Dinge.

Jochen

Und

Jochen

ja,

Jochen

Typografie,

Jochen

überhaupt wie

Jochen

SSL, dann die ganzen

Jochen

Netz, also da ist noch so viel Zeugs mit

Jochen

dabei, der halt auch eine Rolle spielt,

Jochen

wenn man jetzt so eine Webseite betreibt,

Jochen

der jetzt nicht unbedingt

Jochen

Teil von Django ist, da gibt es noch

Jochen

viel zu tun und das ist natürlich so ein Ding,

Jochen

also wenn man jetzt einfach nur Django

Jochen

macht, dann hat man damit die

Jochen

Komplexität dieses Gesamtdings

Jochen

irgendwie eine Webseite betreiben

Jochen

noch nicht komplett abgedeckt.

Jochen

Also es ist ein ganz guter Teil davon, aber

Jochen

da gibt es halt...

Dominik

Machen wir dazu tatsächlich nochmal eine Folge, also wie man eine Webseite

Dominik

komplett betreibt, so von Server und

Dominik

Deployment und wie man so, weiß ich nicht,

Dominik

Load Balance macht oder sowas.

Jochen

Könnte man auf jeden Fall auch. Hat dann nicht mehr

Jochen

so wahnsinnig viel mit Python zu tun.

Jochen

Unter Umständen... Gibt es das nicht in Python?

Jochen

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

Jochen

das auch in Python.

Jochen

Nee, viele Bereiche

Jochen

gehen ja dann raus, auch aus der

Jochen

eigentlichen Programmierung und gehen dann in die

Jochen

Administration rein und da ist Python natürlich

Johannes

ein wichtiges Werkzeug, aber

Johannes

jetzt nicht das, worauf es läuft.

Dominik

Ja, also dann

Dominik

vielen Dank euch beiden hier, dass ihr

Dominik

so schön euch unterhalten habt,

Dominik

mir ein paar Fragen beantwortet habt, die ich so hatte.

Dominik

Ich glaube, so viel zusammenfassen

Dominik

müssen wir gar nicht. Wir haben so ein bisschen Dango gemacht heute.

Dominik

Ja, das war

Dominik

super und wir haben

Dominik

heute noch gar nicht über Events gesprochen, aber ich kenne gerade

Dominik

keine, die jetzt in nächster Zeit

Dominik

sind, so jetzt am Jahresende.

Dominik

Ich weiß nicht, ob euch welche

Dominik

einfallen? 12. Dezember

Dominik

ist Treffen der

Jochen

Python User Group

Jochen

Köln, PyCologne.

Jochen

Ja, jede Woche ist halt

Jochen

irgendwie Python-Fu in Düsseldorf.

Jochen

Nächstes PyTDF-Treffen ist erst

Jochen

wieder am 9. Januar, glaube ich. Also

Jochen

Treffen der Düsseldorfer Python User Group.

Jochen

Falls ihr eure eigene E-Mail

Jochen

promoten wollt, schreibt uns bitte bitte eine E-Mail.

Jochen

Ja, natürlich. Also ich meine, wir kennen

Jochen

jetzt nur die Sachen im Rheinland,

Jochen

Düsseldorf, Köln-Umfeld.

Jochen

Ja, würde ich sagen.

Jochen

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

Jochen

Noch einen schönen Tag, Morgen, Abend,

Jochen

wo auch immer ihr gerade seid, was ihr macht.

Jochen

Und ja, bis zum nächsten Mal.

Jochen

Bis zum nächsten Mal. Tschüss.