Transcript: Python Packaging

· 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 34. Episode heute.

Dominik

Ja, wir nehmen wieder abends auf, ausnahmsweise, muss ja auch mal sein.

Dominik

Entschuldigung, dass ich wieder eingeschaltet habe.

Dominik

Was machen wir heute? Wir wollten ein bisschen was über Pakete besprechen.

Dominik

Der Jochen ist natürlich wieder dabei und wir haben wieder einen Gast.

Dominik

Hi, Jochen.

Dominik

Hallo.

Dominik

Und der Gast ist heute wieder der Ronny. Hi, Ronny.

Dominik

Hi.

Dominik

Hallo.

Dominik

Ich bin der Dominik.

Dominik

Ja.

Dominik

Ja.

Dominik

Ja.

Dominik

Ja, ich weiß nicht, ob wir wieder Struktur machen wollten, ein bisschen News oder so.

Dominik

Habt ihr News?

Jochen

Nee, ich bin zu irgendwie nicht viel gekommen

Jochen

und habe auch keine Newsletter oder sonst irgendwas gelesen.

Jochen

Daher nicht viel.

Dominik

Also es kam tatsächlich der Copilot auf GitHub heute raus zum Coden.

Dominik

Das fand ich ja ganz interessant.

Dominik

Das ist jetzt keine Python-News, aber man kann sich da anmelden,

Dominik

irgendwie eintragen in so einer Testerliste.

Dominik

Es gibt auch ein VSCode-Plugin für die Leute, die das nutzen.

Dominik

Was macht das denn?

Dominik

Das ist ein Copilot für GitHub, der, wenn man Docstring schreibt,

Dominik

automatisch die Funktion baut, der für verschiedene

Dominik

Sprachen funktioniert. Sieht ziemlich

Dominik

nice aus. Also so die Demo, aber wenn

Dominik

das mal richtig gut funktioniert, irgendwie mit

Dominik

Machine Learning dahinter wahrscheinlich so ein bisschen,

Dominik

vielleicht einfach einen coolen Dockstring und der baut

Dominik

die ganze Funktion so zusammen, wie er es für richtig hält.

Jochen

Ja, ich habe das irgendwie, ich habe nur so ein

Jochen

Animated GIF

Jochen

auf Twitter oder so gesehen, wo da

Jochen

jemand bezeichnet Learn was gemacht hat und das sah

Jochen

schon gut aus, aber

Jochen

ehrlich gesagt, ich würde mir jetzt nicht trauen, dass ich sage,

Jochen

okay, das tut jetzt genau das, was ich gerne hätte.

Jochen

Das heißt, man muss den Code dann zumindest nochmal lesen.

Dominik

Ja, ich glaube, lesen muss man es natürlich schon, aber es ist ja relativ

Dominik

super, um wahrscheinlich bekannte Patterns so zu verstehen

Dominik

und auch für Sprachen, die man vielleicht noch

Dominik

nicht so gut kann, dass man halt so grundsätzliche Konzepte

Dominik

da sehr schnell mitlernen kann.

Dominik

Das muss auch super interessant sein, außerdem wird man gezwungen,

Dominik

Dokumentationen zu schreiben, direkt

Dominik

am Anfang, das ist vielleicht auch gar nicht so doof.

Dominik

Also es ist halt die Frage, wohin das hinschaut,

Dominik

wenn das halt nur KI-gesteuert ist, irgendwann

Dominik

je nachdem, wie gut die Qualität der Leute ist,

Dominik

hier und da zu schreiben, was dann dabei rauskommt, weiß ich nicht.

Jochen

Ja, das ist die durchschnittliche

Jochen

GitHub-Code-Qualität, ich meine, wenn das

Jochen

jetzt, also kann ja eine Verbesserung

Dominik

sein. Ja, genau. Also ich finde es

Dominik

wirklich interessant und es sah auch echt top aus.

Dominik

Documentation-Driven-Development

Dominik

oder... Irgendwie so.

Dominik

Specification-Driven-Development.

Dominik

Ja, also diese Beispiele

Dominik

auf der Seite vom Co-Piloten da, die sahen echt

Dominik

schick aus, auch in Python, die es da gab.

Jochen

Okay, ja, cool. Das ist auf jeden Fall

Jochen

eine Neuigkeit, ja.

Jochen

Ja, haben wir noch was?

Jochen

Ich glaube, was hast du gesagt?

Jochen

Python 306, ja, egal.

Jochen

Ja, ist vor drei Tagen oder so rausgekommen.

Jochen

aber ich weiß ehrlich gesagt

Jochen

nicht mal, was der Unterschied ist.

Jochen

Voll gut, nur so eine Erinnerung,

Jochen

dass man das jetzt mal dann installieren könnte.

Jochen

Aber ansonsten.

Dominik

Nichts Großes passiert. Dann würden wir doch direkt

Dominik

zur Folge kommen, oder fällt dir noch was ein, Ronny?

Ronny

Ist doch eigentlich eine gute Überleitung, so GitHub

Ronny

Packages. Stimmt.

Dominik

Was ist denn das, ein Package?

Dominik

Genau, das ist das Thema, ne?

Dominik

Packaging.

Dominik

Was ist das? Wie macht man das denn?

Dominik

Wie spricht man das aus? Ganz wichtig.

Dominik

Ein Paket. Also ihr wollt irgendwas machen wie ein Paket schreiben, ein Modul schreiben. Was ist ein Modul? Und das Veröffentlichen, vielleicht ist Veröffentlichen eine der Sachen, die man damit machen will mit einem Paket? Oder Wiederbenutzen vielleicht?

Jochen

Ja, selbst wenn man das nur irgendwie, wenn man einen Code miteinander teilen will, ist es wahrscheinlich schon eine ganz gute Idee, unter Umständen das halt als Paket zu tun und nicht direkt als Repository.

Dominik

Das heißt, da können bestimmte Dinge dazu, sowas wie eine Bauanleitung oder sowas?

Jochen

Ja, also es gibt unterschiedliche

Jochen

Arten von Paketen.

Jochen

Das ist vielleicht schon mal so ein grundsätzliches Ding, mit dem man

Jochen

anfangen kann. Also es gibt halt zum Beispiel

Jochen

oder ich weiß nicht, wo wir damit

Jochen

anfangen, oder mit der Geschichte von

Dominik

Packaging. Ja, okay, ich bin gespannt.

Dominik

Ich hätte gesagt, es gibt noch DCP-IP, aber Entschuldigung.

Dominik

Ja,

Jochen

da gibt es auch Pakete, ja.

Jochen

Vielleicht nur so ganz kurz,

Jochen

es ist halt leider verwirrend, es ist kompliziert

Jochen

und es ist komisch und es ist alles nicht so einfach in Python

Jochen

leider. Das hat glaube ich

Jochen

angefangen alles irgendwie 1998 mit

Jochen

Distutils

Jochen

und das ist auch

Jochen

in der Standardbibliothek, ist da immer noch drin.

Dominik

Also es geht eigentlich darum, wie gebt ihr denn euer Programm

Dominik

irgendwem, der es dann ausführen

Dominik

möchte? Ja, wie

Jochen

kann man Code irgendwie,

Jochen

ja, wie kann man Code so verpacken, dass man das

Jochen

irgendwo anders dann halt einfach nur das Paket

Jochen

installiert und nicht den kompletten, das komplette Repository.

Jochen

Ja, oder vielleicht, wenn man noch nicht mal Python hat

Dominik

oder so, oder der weiß dann gar nicht,

Dominik

was für einen Computer der hat oder verschiedene

Dominik

Herausforderungen. Genau,

Jochen

Und dann irgendwann kamen halt Setup-Tools dazu.

Jochen

Damit hat man dann zum ersten Mal...

Dominik

Vielleicht ganz kurz noch, wenn wir jetzt schon mal wieder

Dominik

bei Python-Podcast noch ein bisschen einsteigen.

Dominik

Was ist denn DistroTilt?

Jochen

Genau, das ist halt so ein Ding, um zum Beispiel,

Jochen

ja, wenn man jetzt in einem Verzeichnis ist,

Jochen

wo man den Code hat, daraus irgendwas zu bauen,

Jochen

was man dann als Paket weitergeben kann.

Jochen

Und da kommen auch an so ein paar von den Begriffen,

Jochen

meine ich jedenfalls, her.

Jochen

Sowas wie S-Dist zum Beispiel oder B-Dist.

Jochen

Aber ich weiß nicht, ob es da schon wirklich dabei war.

Jochen

Ach so, ja.

Jochen

Es ist halt Source Distribution

Jochen

und

Jochen

sagt eigentlich im Grunde, dass man halt nur den

Jochen

Code irgendwie ins Paket packt, also den

Jochen

Source ins Paket packt und dann halt auf

Jochen

dem Zielsystem halt eventuell noch, wenn

Jochen

da Extensions, zum Beispiel C-Extensions oder so

Jochen

drin sind, muss man die dann halt noch

Jochen

bauen. Also es ist halt noch nicht gebaut.

Jochen

Es sind nicht die PYC-Files, sondern es sind nur

Jochen

tatsächlich die

Jochen

.py-Files.

Jochen

Und weil die

Jochen

PYC-Files, das hängt auch von

Jochen

der Interpreter-Version ab und so,

Jochen

Und dann gibt es halt die BDIS, also die Build Distribution Pakete, genau, und das sind halt irgendwie TAR-Balls vor allen Dingen gewesen oder manchmal auf Windows, glaube ich, auch ZIP-Files, weiß nicht genau, aber es ist noch kein richtiges Paketformat.

Jochen

Und dann kamen irgendwann Setup-Tools dazu und weiß nicht, irgendwann Anfang der Nullerjahre, keine Ahnung wann genau, und da war das Ziel halt dann so ein Paketformat zu haben, das hatte man dann mit X auch, aber das war es, was auch mehr oder weniger ein ZIP-File war.

Jochen

und inzwischen sind es Wheels,

Jochen

das ist auch mehr oder weniger der Fall.

Jochen

Aber

Jochen

so ein bisschen

Jochen

sind die Dinge schon anders, also Wheels sind jetzt

Jochen

deutlich schneller, kann man deutlich schneller auspacken

Jochen

und verwenden als X.

Jochen

X werden eigentlich nicht mehr verwendet.

Jochen

Dann gab es irgendwie eine Zeit, in der ganz viel rumgeforkt

Jochen

worden ist und dann sind Dinge

Jochen

auch wieder zurück nach Setup Tools gegangen

Jochen

und Setup Tools ist aber nie Teil der

Jochen

Standardbibliothek geworden.

Jochen

Distutils

Jochen

war es dann aber schon immer schon lange.

Jochen

So dass heute ist es halt so, es gibt halt Dinge, die macht Distu-Shills, wenn man ein Paket baut. Es gibt Dinge, da benutzt man Setup-Tools für, was ein bisschen komisch ist, weil das ist halt nicht in der Schaltebibliothek, man muss dafür Setup-Tools installieren. Und Setup-Tools hat dann wiederum Plugins für bestimmte Sachen, wie zum Beispiel, wenn man Wheels bauen will, dann gibt es halt das Wheels-Paket, das man dann noch installieren kann und das bringt dann halt ein Plugin für Setup-Tools mit, womit man dann halt auch Wheels bauen kann.

Jochen

Ja, okay.

Dominik

Das klingt aber so, als geht das halt nicht

Dominik

out of the box. Und da brauchen wir schon noch andere Sachen.

Dominik

Ohne C-Compiler geht das wahrscheinlich dann nicht?

Dominik

Doch, also wenn man

Dominik

zum Beispiel einfach nur

Jochen

reine Python, also wenn der

Jochen

Code, den man geschrieben hat, einfach nur

Jochen

Python-Code ist, dann

Jochen

braucht man eigentlich sonst nichts zu machen.

Jochen

Dann ist auch eine Source-Distribution

Jochen

im Grunde schon ausreichend.

Jochen

Aber wenn man

Jochen

jetzt halt C-Extensions dabei hat oder sonst irgendwas,

Jochen

was komplett werden muss, dann braucht man halt irgendwie

Jochen

so einem Compiler und

Jochen

muss halt

Jochen

ja, dass dann halt auch da

Jochen

Setup-Tools kein Konzept von

Jochen

Cross-Compiling hat, muss man halt auch

Jochen

für alle Architekturen, für die man Wheels bauen will

Jochen

zum Beispiel, auch tatsächlich eine

Jochen

Maschine da haben, die die Plattform

Jochen

halt, also eine Maschine der entsprechenden

Jochen

Plattform da haben.

Jochen

Was halt auch unter Umständen so ein bisschen doof war.

Jochen

Das war jetzt zu der Zeit, wo auf Apple Silicon

Jochen

umgestellt wurde, haben ganz viele Leute plötzlich

Jochen

gesucht nach, irgendwie habe ich irgendwo einen SSA-Zugang

Jochen

auf eine Maschine mit M1 oder so.

Jochen

damit ich das mal da bauen kann, weil

Jochen

ansonsten kann man halt keine Wheels bauen. Das geht halt nicht. Das kannst du nicht

Jochen

auf einer Intel-Maschine

Jochen

machen.

Jochen

Und das ist alles so ein bisschen

Jochen

hässlich. Und, ah ja, Gott.

Jochen

Ja.

Jochen

Es ist kompliziert, leider.

Dominik

Okay, dann habe ich Wheels gebaut und

Dominik

die kann ich dann irgendwie auf PyPI stellen

Dominik

und habe ein Paket.

Jochen

Aber nicht nur die Wheels, sondern auch Source-Distribution

Jochen

und Build-Distribution kann man auch

Jochen

auf PyPI stellen.

Jochen

Und passiert auch oft.

Jochen

Und oft muss man es dann auch selber kompilieren noch,

Jochen

wenn es halt keine Wheels gibt zum Beispiel.

Jochen

Ich habe jetzt auch hier so ein

Jochen

M1-Mac und das passiert regelmäßig, dass

Jochen

ich irgendwie Pandas oder NumPy und dann

Jochen

ein Großteil des Zeugs unten drunter muss halt dann

Jochen

noch kompiliert werden und das dauert halt

Jochen

relativ lang. Zum Beispiel, wenn jetzt man sowas

Jochen

installiert wie Python 3.9.6 irgendwie,

Jochen

wenn es gerade mal rausgekommen ist, dann gibt es halt für Pandas

Jochen

und NumPy noch keine Wheels und dann

Jochen

wird dann halt schön selber kompiliert,

Jochen

was dann halt mal ein paar Minuten dauern kann.

Jochen

Auf dem M1.

Jochen

Ja, und einen zur Verzweiflung treibt,

Jochen

wenn irgendwelche Details in dieser Compile-Pipeline

Jochen

und irgendwann der Vortragskompiler nicht richtig ist

Jochen

oder keine Ahnung, irgendwas bei der Emulation

Jochen

des Intel-Prozessors nicht richtig funktioniert oder so.

Jochen

Und dann kriegt man sehr, sehr komische Fehlermeldungen

Jochen

aus den Tiefen von irgendwelchen Compiler-Toolchains.

Jochen

Ja, okay.

Dominik

Ja, also tatsächlich auf anderen Systemen bauen zu wollen,

Dominik

an neuen Versionen, ist dann vielleicht immer nicht ganz so einfach.

Dominik

Nee.

Ronny

Aber das Gute ist, dass man tatsächlich auch,

Ronny

wenn man jetzt, vor allem wenn man jetzt eigentlich mal anfängt,

Ronny

dass man ja dann doch eher in der reinen Python-Welt

Ronny

bleibt und dass man dann das auch relativ

Ronny

entspannt einfach

Ronny

ohne irgendwelche großen Probleme

Ronny

die Packages erstens bauen kann und zweitens dann

Ronny

auch die dann auch wieder leicht installieren kann.

Dominik

Also man kann sich relativ viel von diesem Komplexitäts-

Dominik

Overhead sparen, indem man quasi

Dominik

keine externen Libraries verwendet

Jochen

oder sowas, ja. Genau, ja.

Jochen

Also reines Python, das

Jochen

ist eigentlich relativ einfach dann, ja.

Jochen

Also das Einzige, was halt dann

Jochen

mit in den

Jochen

Build Distributions drin, das sind halt die

Jochen

PYC-Files und

Jochen

PYC, also ansonsten

Jochen

muss die halt noch einmal von PY nach

Jochen

PYC verwandelt werden, aber das ist auch alles

Jochen

das merkt man heutzutage gar nicht mehr.

Dominik

Und dann hat man so ein Paket

Dominik

und dann hat man das auf PyPI und dann kann

Dominik

jeder das laden

Dominik

über PIP oder

Dominik

sowas.

Jochen

Ja, und die ganze Dokumentation

Jochen

dazu, ich habe

Jochen

mich ehrlich gesagt nicht wirklich

Jochen

vorbereitet, aber ich habe einmal

Jochen

geguckt,

Jochen

was gibt es

Jochen

denn, habe ich irgendwelche Bücher

Jochen

zufällig, wo was drinsteht über Packaging

Jochen

und da gab es irgendwie ein Buch

Jochen

Python Expert Programming, da war ein bisschen was drin,

Jochen

ein Kapitel und

Jochen

ansonsten

Jochen

ja, hier klingeln

Jochen

Dinge, das ist immer so was,

Jochen

Telefon auf Flugmodus stellen.

Jochen

Das ist ja immer eine Checkliste

Dominik

machen. Wird das ICQ-Bimmel im Hintergrund?

Dominik

Du kennst das.

Dominik

Oh ja, das ist lange her.

Dominik

Was sind hier der Flugmodus?

Dominik

Da ist er doch.

Dominik

So.

Dominik

Ja.

Jochen

Genau. Also die

Jochen

autoritative Quelle für Dokumentation

Jochen

über dieses ganze Packaging-Thema

Jochen

ist

Jochen

packaging.python.org, also die

Jochen

Python Packaging Authority,

Jochen

PyPA nennt die sich auch.

Jochen

Und da kann man das alles, also die ganzen Details,

Jochen

die ganzen fiesen Details, die stehen da alle drin.

Jochen

Und was mich sehr gefreut hat,

Jochen

das ist genauso aufgebaut

Jochen

wie, es gab da ja,

Jochen

das hatten wir das letzte Mal auch schon von,

Jochen

documentation.divio.com

Jochen

Ja.

Jochen

Sozusagen, also es gibt auch einen schönen

Jochen

Vortrag

Jochen

eben von Daniele

Jochen

Pruschida

Jochen

über... Der ist schon wieder.

Jochen

Der ist schon wieder, genau. Wie schreibt man eigentlich Dokumentationen

Jochen

sinnvollerweise? Und der teilt das halt auf.

Jochen

Naja, es gibt halt unterschiedliche

Jochen

Quadranten und unterschiedliche

Jochen

Zielrichtungen. Und dann schreibt man halt

Jochen

Tutorials, How-To-Guides, Explanations oder

Jochen

Reference-Documentation.

Jochen

Und das macht man alles mit Pleasure?

Jochen

Er hat mit dem

Jochen

Vortrag Programming for Pleasure gemacht. Genau, das war

Jochen

dieses Jahr. Das war, glaube ich, hier

Jochen

wo er über Dokumentationen Vortrag gemacht hat, war 2017

Jochen

oder so. Kann man sich auch angucken.

Jochen

Haben wir letztes Mal schon verlinkt.

Jochen

in der JagoCon Europe-Episode sehr empfehlenswert.

Jochen

Und was ich halt gesehen habe, ist, dass Pipey A hält sich genau da dran.

Jochen

Da sieht man halt, genau, sie machen Tutorials,

Jochen

dann machen sie How-To-Guides und dann machen sie irgendwie Discussions

Jochen

und dann gibt es dann halt irgendwie auch noch eine Referenzdokumentation.

Jochen

Also sie haben das genau so aufgeteilt und sich daran orientiert.

Jochen

Das fand ich irgendwie...

Dominik

Muss ich auch mal machen für meine Dokumentation.

Jochen

Dokumentation ist auch sowas, was ich irgendwie zu wenig tue.

Dominik

Ja, du sagst ja auch immer, guter Coach spricht für sich selbst.

Dominik

Genau, braucht man das alles gar nicht.

Dominik

So ein Quatsch, Dokumentation.

Dominik

Ich versuche tatsächlich,

Dominik

alle Sachen, die ich wahrscheinlich wieder vergesse,

Dominik

so aufzuschreiben,

Dominik

dass da auch jemand anders, der das vielleicht liest,

Dominik

dann auch noch machen könnte.

Ronny

Meistens ist man schon selber in einem halben Jahr und freut sich drüber.

Ronny

Ja, genau.

Ronny

Das ist immer ganz nett.

Ronny

Man ist auch schneller beim zweiten Mal,

Ronny

wenn man halt einfach seine eigene Doku lesen kann

Dominik

und sich nicht immer komplett von neuem irgendwo einarbeiten muss.

Ronny

Ich finde tatsächlich, dass man auch mit inneren Dokumentationen

Ronny

sehr viel gewinnen kann.

Ronny

Ich habe mir mal irgendwo mal abgeguckt,

Ronny

dass wenn man, sage ich mal, eine Methode hat,

Ronny

die vielleicht 20, 30 Zeilen irgendwie relativ viel macht,

Ronny

also du hast ein If und eine Schleife und keine Ahnung was,

Ronny

dass man mit so Pünktchen arbeitet,

Ronny

dass man sagt so, okay, hier mache ich jetzt das Punkt, Punkt, Punkt

Ronny

und wenn das zutrifft, Punkt, Punkt, Punkt

Ronny

und irgendwann kommst du halt zu dem Punkt, wo es halt vorbei ist

Ronny

und dann passiert dieses und dann passiert jenes.

Ronny

Das heißt, du kannst es halt mehr oder weniger wie so ein Buch lesen,

Ronny

also genau den Pfad, der dich interessiert.

Ronny

Habe ich mir irgendwann mal abgeguckt

Ronny

und das mache ich eigentlich öfters mal,

Ronny

ohne dass man jetzt da so einen fetten Dockstring drüber schreibt,

Ronny

weil ich finde, der liest sich irgendwie.

Ronny

Man ist ja irgendwie so ein bisschen faul.

Ronny

Eigentlich gar nicht das Thema.

Jochen

Ja, also wobei, ich weiß nicht,

Jochen

bei Dokumentationen innerhalb von Sourcecode

Jochen

oder Kommentare in Sourcecode finde ich immer ein bisschen schwierig.

Jochen

Also es kommt darauf an, was es ist.

Jochen

Manchmal auch natürlich stellen, wo das total sinnvoll ist.

Jochen

Aber manchmal ist es halt auch echt,

Jochen

weil das tendiert auch dazu, dann irgendwie so auseinanderzulaufen.

Dominik

Also warum man so bestimmte Sachen macht,

Dominik

die irgendwie komisch aussehen,

Dominik

dass das vielleicht manchmal gar nicht so schlecht sieht.

Jochen

Nee, das ist genau, genau, durchaus sinnvoll.

Jochen

Aber, ja, von, na, wie heißt er noch, Dingsda, Clean Code, Uncle Bob, der sagt immer, das Erste, was er macht, wenn er durch Code geht, ist halt die ganzen Kommentare entfernen, weil sie verwirren nur, weil, ja, aber es kommt halt drauf an.

Jochen

Also ich meine, es gibt halt so die Fälle, wo es klar ist, dass es verwirrend ist, aber es gibt halt auch die Fälle, wo es total sinnvoll ist.

Ronny

Ich finde, das kann sehr viel Vertrauen schaffen.

Ronny

Also wenn ich ein Package mir angucke, also jetzt in externer Sicht, und ich überlege, ob ich das nutzen möchte und vielleicht auch produktiv nutzen möchte und da ist halt gar nichts dokumentiert, dann habe ich direkt schon mal so ein großes Fragezeichen im Kopf, ob ich das wirklich nutzen möchte.

Dominik

Ja, wenn das gut strukturiert ist, gut dokumentiert ist, das lesbarer Code ist, vernünftig aufgeräumt ist, das macht schon echt viel aus.

Dominik

Bisschen moderner Stil. Wir haben ja alle so einen gewissen Taste mittlerweile.

Dominik

Ja, aber

Dominik

wir sind gerade bei Dokumentation

Dominik

gelandet, aber wir sind ja über Packaging

Dominik

dahin gekommen und

Dominik

ja, also okay, wir haben jetzt gesagt,

Dominik

okay, Setup-Tools des Utils,

Dominik

PIP,

Dominik

es gibt noch irgendwie dann so bestimmte

Dominik

Sachen, die man dann braucht, was wie eine Setup-Pi

Dominik

oder ich habe gesehen, man kann sowas auch mit Poetry und

Dominik

dann Pi-Project Hummel jetzt so ein bisschen basic

Dominik

einrichten.

Dominik

Ja, das ist doch mal...

Jochen

Ja, also wie man jetzt zum Beispiel die Metadaten zu einem Paket ...

Dominik

Ah, Moment, man braucht Metadaten zu einem Paket natürlich.

Jochen

Ja, ja, also zum Beispiel so was Simples wie,

Jochen

wie soll das Paket heißen?

Jochen

Das muss man ja irgendwo hinschreiben.

Jochen

Und da gibt es halt mehrere Methoden.

Jochen

Ja, das, was man, ich glaube, das ist auch das älteste Setup-Py.

Jochen

Also da ruft man halt Setup auf

Jochen

und irgendwie die ganzen Parameter sind im Grunde alles

Jochen

mehr oder weniger Argumente dieser Funktion.

Jochen

Das ist sehr dynamisch und so. Da kann man natürlich tolle Sachen machen. Da kann man dann so Sachen reinschreiben, wie man holt sich die Version von dem Paket irgendwie aus irgendeiner Init-PY in dem Paket selber oder solche Sachen. Aber auf der anderen Seite macht das halt der Infrastruktur darunter, dass es sehr, sehr schwer ist, dass das so dynamisch ist.

Dominik

Bei Project Hummel ist das ja auch ähnlich, es geht ja mit Poetry, wenn man damit arbeitet, auch so Bildbefehle und da kann man ja auch die Version direkt reinschreiben und einen kleinen Doxing reinschreiben und den Namen reinschreiben und so ein bisschen sich überlegen, was denn da stehen soll in dem Paket.

Jochen

Ja, ich weiß jetzt gar nicht so ganz genau, wie das bei Poetry dann tatsächlich darunter funktioniert, also ich habe es schon benutzt, aber tatsächlich ist das für mich so ein bisschen eine Blackbox irgendwie, Poetry tut dann irgendwas und dann fällt ein Paket raus.

Jochen

Also der Standardweg, wie man das mit Setup-Tools macht,

Jochen

ist dann setup.cfg, wo man dann halt so statische Metadaten drin hat

Jochen

und keine Setup-UI mehr verwendet.

Jochen

Das ist auch das, was empfohlen wird.

Jochen

Also die ganzen Leute, die sich da um dieses Python-Packaging-Ding kümmern,

Jochen

die sagen alle, oh mein Gott, bitte, bitte, bitte verwendet setup.cfg,

Jochen

das macht uns das Leben so viel einfacher.

Jochen

Setup-UI ist für uns ein Riesenproblem eigentlich.

Dominik

Also ich glaube, Setup-Chief-G ist viel

Dominik

davon ist auch in PyProject-Hummel dann gewandert.

Jochen

Genau, also PyProject-Hummel ist

Jochen

mehr oder weniger ein neues Format dafür, ja.

Jochen

Und das ist halt jetzt die aktuellste Art, wie man

Jochen

die Metadaten sozusagen erfasst.

Jochen

Und das ist halt auch Standard, ich glaube,

Jochen

das ist PEP

Jochen

518 oder sowas.

Jochen

Irgendwie, glaube ich.

Jochen

Ja, also das

Jochen

wandert jetzt alles in PyProject-Hummel rein

Jochen

und dann kann man das mit Poetry, wertet das dann halt

Jochen

irgendwie aus und baut das dann. Ob Poetry

Jochen

dann nochmal Setup-Tools unten drunter verwendet, weiß ich

Jochen

jetzt ehrlich gesagt gar nicht. Aber es gibt dann auch

Jochen

mehr Tools. Also

Jochen

Poetry gibt es. Es gibt aber auch, ich glaube,

Jochen

das habe ich in letzter Zeit

Jochen

viel Gutes drüber gehört, ist Flit.

Jochen

Oh, Flit?

Jochen

Und es liest halt auch

Jochen

PyProject Hummel aus

Jochen

und baut halt Pakete.

Jochen

Und vor allen Dingen benutzt es halt

Jochen

nicht, glaube ich, nicht Setup-Tools, sondern

Jochen

macht das alles selber. Und es benutzt auch nicht

Jochen

Vine, um dann hinterher die Pakete hochzuladen,

Jochen

sondern macht das auch selber. Das ist halt so eine komplett

Jochen

integrierte Geschichte.

Dominik

Was heißt flit? Das Symbol

Dominik

ist ein Kolibri. Ich fragte mich, ob das auch flit

Dominik

tut. Ich weiß jetzt

Dominik

nicht, wo der Name herkommt. Keine Ahnung.

Dominik

Also ein einfaches Modul, um Packages

Dominik

auf PyPy zu bekommen.

Dominik

Kenne ich auch noch nicht.

Jochen

Klingt spannend. Ich habe es jetzt letztens

Jochen

davon gehört,

Jochen

also ich hatte schon mal vorher davon gehört, aber jetzt nochmal

Jochen

ausführlicher in einer

Jochen

Podcast-Episode irgendwie

Jochen

Talk Python to me, wo, nee, nicht

Jochen

Talk Python to me, haha, falsch. Test & Code, glaube

Jochen

ich, von Brian Ocken

Jochen

der hatte da Brad Cannon

Jochen

zu Gast

Jochen

und der halt

Jochen

irgendwie da

Jochen

halt auch für diese Pipe EA irgendwie

Jochen

wesentlich zuständig ist und

Jochen

ja, der sagte also

Jochen

er benutzt auch selber Flit und das

Jochen

wird ihm sehr gut gefallen, weil es halt einfach schnell

Jochen

und so und macht das, was

Jochen

es soll, während Poetry

Jochen

ich verwende ja Poetry

Jochen

normalerweise, aber ehrlich gesagt so manchmal

Jochen

ich hatte das jetzt auch, ich glaube

Jochen

in dem Stream, wo ich da so

Jochen

Live-Sachen gerade irgendwie

Jochen

entwickle, da

Jochen

habe ich, ich habe dann

Jochen

irgendwann mal das Virtual

Jochen

N-Fax schmeißen müssen und dann habe ich

Jochen

nochmal als irgendwie neu

Jochen

von PyPI gezogen und

Jochen

Pootree irgendwie Update gesagt oder Install, ich weiß es

Jochen

gar nicht mehr genau und dann hat das irgendwie tatsächlich

Jochen

geschlagene 300 Sekunden

Jochen

irgendwie Dependencies aufgelöst.

Jochen

Ja. So, wo ich dachte so.

Dominik

Das passiert seitdem es das Async

Dominik

macht. Ja, mir geht das

Dominik

einstellen auf die Nerven. Da ist irgendwas richtig

Jochen

kaputt, weil das darf nicht, also das kann

Jochen

ich mir, ich kann mir nicht vorstellen,

Jochen

wie das irgendwie, welchen

Jochen

Grund es dafür geben könnte. Also ich meine,

Jochen

ich weiß nicht, so viele

Jochen

Pakete sind es nicht, vielleicht 50 oder so,

Jochen

die da drin sind, Abhängigkeiten.

Jochen

Und dass das dann irgendwie, also selbst

Jochen

ein paar Sekunden wäre viel zu viel,

Jochen

die Abhängigkeiten da aufzulösen. Wie kann das sein,

Jochen

dass das 300 Sekunden braucht? Das ist irgendwie, irgendwas ist

Jochen

da, oder es braucht

Jochen

es halt irgendwie, wenn es ein Netzwerk macht, das kann natürlich

Jochen

auch sein und PyPI überlastet ist oder so, vielleicht

Jochen

würde PIP auch so lange brauchen.

Jochen

Aber Pochi bringt ja einen eigenen Resolver mit und macht

Jochen

das halt nicht über PIP. Aber offenbar

Jochen

ist das irgendwie nicht so ganz okay. Also Pochi hat

Jochen

mir schon so ein paar Mal

Jochen

tatsächlich echt, ich dachte so,

Jochen

okay, da ist irgendwas nicht

Jochen

in Ordnung. Insofern...

Dominik

Falls ich schon immer mal Open Source entwickeln wollte,

Dominik

scheint es, als gibt es da ein paar Pull-Requests, die notwendig sind.

Dominik

Keine Ahnung,

Jochen

vielleicht muss ich mal reingucken, was da los ist, aber irgendwas,

Jochen

also da kriege ich auf jeden Fall, wenn ich

Jochen

sowas sehe, kriege ich einen Schreck.

Jochen

Oh, das ist ein Tool, auf das ich mich verlasse und das macht komische

Jochen

Dinge.

Jochen

Und das hat auch so,

Jochen

was mich auch bei Poetry so ein bisschen

Jochen

wo ich auch dachte, ach, das ist nicht so schlimm,

Jochen

aber das hat dann doch, macht auch

Jochen

immer wieder Probleme, ist halt,

Jochen

dass da halt, das gibt's bei den

Jochen

Setup-Tools,

Jochen

gibt's

Jochen

Setup, man kann Python Setup

Jochen

py-develop ausführen oder halt

Jochen

pip-i

Jochen

und damit halt so eine

Jochen

editierbare Version von einem Paket installieren.

Jochen

Das halt, wenn man das entwickelt, halt super praktisch ist.

Jochen

Und das geht mit Poetry

Jochen

geht das nicht. Also geht

Jochen

einfach gar nicht. Und was meinst du mit

Dominik

editierbare Version installieren? Also das lädt quasi

Dominik

seine lokale Datei

Dominik

als Symbolink

Jochen

Ja, ja, ja, genau.

Jochen

Es ist nur in den, tatsächlich

Jochen

im Virtual Env landet dann halt nur so eine Art Link

Jochen

und sobald man den Code ändert,

Jochen

dann muss man halt nicht irgendwie

Jochen

nochmal neu das Paket installieren, sondern

Jochen

sondern die geänderte Version vom Code ist dann halt direkt da.

Ronny

Das ist tatsächlich ein ganz, ganz wichtiger Punkt,

Ronny

den ich auch lernen musste.

Ronny

Wenn man mit einem Package arbeitet, dann denkt man erst mal,

Ronny

ja, cool, du hast ja meist den Code irgendwo,

Ronny

oder oft fängt man ja an, dass man denkt,

Ronny

ah, ich habe jetzt was gebaut in meinem Projekt,

Ronny

ich würde das gerne irgendwie generalisieren

Ronny

oder vielleicht anderen Leuten zur Verfügung stellen,

Ronny

was auch immer die Motivation sein könnte.

Ronny

Und dann merkt man, ja gut, jetzt habe ich das,

Ronny

jetzt muss ich es ein bisschen anpassen.

Ronny

Ja, wie teste ich das denn jetzt?

Ronny

Das ist ja jetzt ein eigenes Projekt,

Ronny

das ist ja jetzt nicht Standalone,

Ronny

das ist ja kein Django-Projekt in meiner Welt.

Ronny

Was macht man denn dann?

Ronny

Also dieses pip-e, das ist tatsächlich sehr, sehr cool und sehr einfach.

Ronny

Also ich nutze in den meisten Projekten pipenv einfach, weil, ja, weil.

Ronny

Ich habe gehört, Portree sei besser, keine Ahnung.

Ronny

Nö, weiß ich nicht.

Ronny

Naja, auf jeden Fall, ich bügele das dann halt einfach dann nochmal,

Ronny

also alles mit pipenv installiert und so und dann einfach manuell nochmal mit pip

Ronny

dann das drüber bügeln, um diesen Sim-Link zu machen.

Ronny

Und damit kann man dann sehr, sehr entspannt und sehr cool,

Ronny

dann auch mit zwei verschiedenen IDEs einfach.

Ronny

Auch im einen ändert man halt dann

Ronny

das Package erstmal gerade oder den

Ronny

Source Code des Packages, im anderen hast du quasi

Ronny

deinen richtigen Django-Web-Server

Ronny

oder was auch immer dein Projekt macht.

Ronny

Und das ist sehr, sehr

Ronny

convenient und da muss man auch erstmal wissen, was man suchen muss.

Ronny

Also du

Dominik

hast auch schon mal so ein paar Pakete gebaut, ich glaube

Dominik

auch, das hast du auch bei GitHub hochgestellt.

Dominik

Genau, ja, ich habe

Ronny

vor ein paar Jahren die

Ronny

Ownership von dem Package

Ronny

oder Maintainership von dem Package

Ronny

übernommen. Das

Ronny

habe ich auch schon mehrfach am Rande mal erwähnt

Ronny

auf ein paar Blog-Einträgen und sowas. Das ist dieses

Ronny

wunderbare AI Django Core Package.

Ronny

Das

Ronny

ist entstanden aus,

Ronny

wir hatten in der Frühzeit unsere

Ronny

Geschichte, also bei AIM Innovation, deshalb AI,

Ronny

hat nichts mit künstlicher Intelligenz zu tun,

Ronny

etwas misleading,

Ronny

haben wir

Ronny

gemerkt, dass wir halt irgendwie ganz praktische Sachen gebaut

Ronny

haben und dass man die halt irgendwie immer vom Projekt zu Projekt

Ronny

kopieren ist doof. Und

Ronny

da so, ja, machen wir mal ein Package und dann

Ronny

ist es halt einfacher zu installieren.

Ronny

Und hat man auch ein bisschen, wenn man mal einen Bug gefixt hat,

Ronny

und dann ist dann halt die Jahre...

Dominik

Also für die verschiedenen Projekte, das heißt, du kannst in jedem Projekt einfach sagen,

Dominik

okay, den Code nehme ich jetzt immer mit und hab die Basis-Funktionalität

Ronny

dann... Genau, ohne dass man es halt kopieren muss und

Ronny

hat halt dann keine Code-Renundanzen und sowas. Und wie gesagt,

Ronny

wenn man mal einen Bug fixen möchte oder irgendwas... Ja, vor allem, das ist halt

Dominik

blöd, wenn man halt irgendwas weiterentwickelt, ein neues Feature, und dann

Dominik

muss man das in jedem einzelnen Projekt wieder nachbauen,

Dominik

das ist natürlich nicht so gut. Genau, das ist sehr mühsam.

Dominik

Genau, und dann haben wir uns dann,

Dominik

dann ist da halt über Jahre

Ronny

dann so Einbahnstraßen-mäßig da halt Code hineingeflossen, auch dann irgendwie gab es dann irgendwann mal diesen großen Break, wo dann wirklich alle von Python 2 weg sind und dann waren da noch Python 2 Sachen drin, Python 3 Sachen und dann irgendwann habe ich mir das mal zur Brust genommen, ich glaube das war so 2018 ungefähr, habe ich mal angefangen zu gucken, was ist da eigentlich drin, weil ich da selber

Ronny

aber auch ziemlich viel contributed habe, weil ich halt

Ronny

oft Sachen gebaut habe, wo ich dachte, ach, das ist cool,

Ronny

das würde ich im nächsten Projekt auch gerne nutzen.

Ronny

Oder das, keine Ahnung, zum Beispiel Richtung

Ronny

Test-Setup oder so Sachen, die einfach

Ronny

das Ganze ein bisschen streamlinen und ein bisschen

Ronny

mehr so machen, wie ich das für richtig halte.

Ronny

Dann habe ich irgendwann mal angefangen zu gucken, was ist denn da eigentlich

Ronny

alles drin? Und wie gesagt, da waren Kompatibilitätsprobleme

Ronny

und da war anfangs noch kein

Ronny

Linting drin und die Dokumentation, es war nichts

Ronny

dokumentiert, es gab keine Dock-Strings,

Ronny

es gab überhaupt keine Art von Dokumentation,

Ronny

also es war auch einfach nichts,

Ronny

also man wusste halt, was drin ist oder man hat

Ronny

halt im Code rumgesucht, aber war halt irgendwie

Ronny

überhaupt nicht wirklich irgendwie

Ronny

freundlich und in dem Zuge, dass ich halt

Ronny

dann angefangen habe, ein paar Blogartikel zu schreiben, weil ich das

Ronny

auch irgendwie ganz cool fand, weil ich dachte, hey, wenn ich das Problem

Ronny

mal gelöst habe, das interessiert vielleicht auch jemand anders,

Ronny

dachte ich, ja gut, das ist halt irgendwie, ich kann

Ronny

da zwar einen Artikel drüber schreiben, aber eigentlich ist das

Ronny

so ein bisschen eine Frechheit, wenn man das so lässt, weil das

Ronny

halt nie, also in dem Zustand eigentlich nicht dafür da war,

Ronny

dass man das wirklich nach außen irgendwie gibt.

Ronny

Und das habe ich über die letzten Jahre halt dann angefangen

Ronny

und habe dann da in verschiedenen Wellen

Ronny

und Steps, ja,

Ronny

was gemacht. Also zum Beispiel

Ronny

super wichtig für mich,

Ronny

oder ein super wichtiges Learning für mich war, dass man einen Change-Log

Ronny

macht, allein schon für einen selbst.

Ronny

Ich habe keine Ahnung, was ich vor,

Ronny

also ich mache ungefähr

Ronny

alle ein bis zwei Monate einen Release,

Ronny

also irgendeine Art von Release. Kann mal

Ronny

Mad-Release sein, wenn ich irgendwas Größeres

Ronny

wirklich rudimentär gemacht habe oder halt

Ronny

was Kleineres, aber so ein bis zwei

Ronny

Monate, das heißt, da kommen einige Releases zusammen

Ronny

über die Zeit und wenn man dann

Ronny

mal irgendein größeres Projekt

Ronny

hat und das hochziehen möchte und denkt, ja komm, ich brauche

Ronny

ist dieses neue Feature, das da drin ist, und man nicht

Ronny

weiß, was man seitdem denn alles geändert hat

Ronny

und nicht weiß, wie man dann sein Projekt,

Ronny

dass man das aktualisieren möchte, wie man das möglicherweise

Ronny

kaputt macht, das ist echt blöd.

Ronny

Aber das geht ja dann auch direkt Richtung,

Ronny

wie vergibt man Versionsnummern und was ist,

Ronny

da gibt es ja auch... Ja, genau, da sind wir ja, genau.

Dominik

Semantic Versioning, glaube ich, habe ich gehört, ist da

Dominik

en vogue.

Dominik

Macht man das noch?

Jochen

Ja, naja, nicht, also ich wusste es halt...

Jochen

Wie man lustig ist?

Jochen

Ich guck mal...

Jochen

Ich habe gerade

Jochen

einen Artikel,

Jochen

Semantic Versioning

Jochen

won't save you.

Dominik

Ja, also es kann ja zum Beispiel sein, dass man eine neue Major-Version

Dominik

rausbringt, so von 2 auf 3 oder sowas,

Dominik

dann gehen Dinge kaputt. Das sind wir ja vielleicht nicht.

Dominik

Ja, also genau, da gibt es

Jochen

einen sehr schönen Blog-Artikel von

Jochen

Hüneck,

Jochen

Hüneck, Schlaback,

Jochen

Semantic Versioning will not save you.

Jochen

Der ist auch jetzt, genau,

Jochen

der ist von Anfang März,

Jochen

den habe ich mich nicht erinnert. Ja, leider

Jochen

ist das auch alles, also ich meine, es ist vielleicht besser als

Jochen

nix, aber es ist halt, es ist alles

Jochen

irgendwie. Vielleicht, was ist das denn?

Dominik

Was ist denn Semantik-Versioning? Was macht man denn da?

Dominik

Naja, dass man

Jochen

sozusagen so ein bisschen,

Jochen

also nicht nur das hochzählt,

Jochen

sonst könnte man ja einfach nur noch eine Zahl hochzählen,

Jochen

sondern dass da halt eine Bedeutung dran hängt,

Jochen

dass man zum Beispiel so eine Dreiteilung hat.

Jochen

Macht man bei Setup-Tools auch oft so,

Jochen

dass man da irgendwie dann Tuples verwendet, damit das

Jochen

klar ist, welche. Und dann wird es halt

Jochen

dann oft hat man dann halt irgendwie Major

Jochen

Version Punkt Minor Punkt irgendwie

Jochen

Patch Release oder so.

Jochen

Und in den Patch Releases

Jochen

sollten halt nur Bugs gefixt sein. Minor

Jochen

sollte vielleicht kommen, vielleicht

Jochen

Features dazu, aber es wird die

Jochen

Abwärtskompatibilität nicht gebrochen und dann

Jochen

bei Major Versionen kann man halt irgendwie

Jochen

eine neue App benutzen oder sowas.

Jochen

Ja, kann man es halt inkompatibel machen.

Jochen

Und oft sieht man das dann auch, dass Leute

Jochen

das dann halt in, ja,

Jochen

wenn sie halt ihre Abhängigkeiten definieren, dann so

Jochen

reinschreiben, also alles, was größer ist,

Jochen

größer gleich dieser meiner Version

Jochen

zum Beispiel, sodass halt sie

Jochen

keine Updates oder Features noch

Jochen

bekommen oder halt alle Security-Patches, aber

Jochen

halt nicht, dass die Kompatibilität

Jochen

nicht gebrochen wird.

Jochen

Nur das Problem ist natürlich, dass

Jochen

tatsächlich garantiert ist halt auch ein Bugfix

Jochen

kann natürlich die Kompatibilität brechen, wenn man sich

Jochen

darauf verlassen hat, dass sich etwas so verhält, wie es

Jochen

jetzt halt tut und das aber ein Bug war.

Jochen

Ja, das ist natürlich insofern

Jochen

ja, aber

Jochen

bei 0.9.7.0.20, das ist auch super.

Ronny

Ja, das gab ein sehr schönes Beispiel, das war vor, ich glaube, einem Jahr, vielleicht eineinhalb Jahren, zwei Jahren, da hatte Flake 8 ein neues Patch-Release rausgebracht, also die haben ja, glaube ich, von 0.96 auf 0.97 oder sowas und haben da aber einen neuen Check eingebaut, der nämlich gecheckt hat, ob F-Strings Variablen enthalten.

Ronny

Und wenn du dann S-String oder Variablen hast,

Ronny

dann ist es rausgeflogen.

Ronny

Und plötzlich sind halt dann bei diversen Projekten

Ronny

geht die Pipeline nicht mehr.

Ronny

Dann so, ich hab da nichts geändert, was ist denn jetzt los?

Ronny

War halt mit Star-Import einfach im PIP-File.

Ronny

Und ja, blöd.

Ronny

Tja.

Ronny

Wie gesagt, vielleicht hätte das schon vorher

Ronny

das überprüfen sollen, aber es war halt ein Bug

Ronny

und hat nicht funktioniert.

Ronny

Haben die den Bug repariert

Ronny

und schon hast du auf einmal ein komplett anderes Ergebnis

Ronny

und plötzlich ein Breaking-Change in deiner Pipeline.

Ronny

Aber trotzdem.

Dominik

Ja, dafür ist dann

Dominik

Pult wieder ganz ruhig, wegen der Log-File,

Dominik

wo es halt dann genau die Dependencies print.

Jochen

Ja, ja, auch eben, weil

Jochen

falls halt irgendwie

Jochen

andere Dinge, also einfach um

Jochen

reproduzierbare Umgebungen zu bekommen

Jochen

und auch wenn jemand es schafft,

Jochen

irgendwie malicious Pakete

Jochen

irgendwo hinzulegen, das ist ja auch so etwas,

Jochen

was dann zumindest sehr überprüft wird,

Jochen

dass der Hash stimmt und so, ja.

Dominik

Er würde dich auch nicht davor retten,

Dominik

wenn da schon ein malicious Paket drin wäre.

Dominik

Nee, dann hast du schon verloren, genau.

Dominik

wenn es halt jemand später schafft, genau.

Dominik

Aber tatsächlich bin ich

Dominik

jetzt auch ein großer Freund, dass ich

Ronny

eigentlich alle Abhängigkeiten, die ich habe,

Ronny

wirklich fixiere, weil ich bin da schon zu oft

Ronny

auf die Nase gefallen mit,

Ronny

weiß ich nicht, irgendwie Celery,

Ronny

das Monitoring-Tool Flower hat eine Abhängigkeit zur Tornado,

Ronny

die haben im Bugfix-Release irgendwie

Ronny

ein Attribut deprecated und rausgenommen

Ronny

und plötzlich steht man dann da und nichts mehr geht

Ronny

und das komplette Async ist tot.

Ronny

Und das ist halt bitter.

Ronny

Ja, ist schon doof.

Ronny

Ich habe gerade ein Problem mit

Ronny

auch einer Pipeline,

Dominik

weil das irgendwie so doof

Dominik

gebaut wird, dass da Abhängigkeiten zu Docker

Dominik

drin sind, dass aber das System

Dominik

dann doch abhängig funktionieren muss. Also das heißt,

Dominik

die nehmen dann, weil wir auf einer Windows-Maschine das aufbauen

Dominik

müssen, PyWin mit rein

Dominik

und das installiert sich natürlich nicht auf

Dominik

der Windows-Maschine, weil das dann in den Dependencies

Dominik

mit drin hängt. Das heißt, ich muss in der Pipeline das Log-File

Dominik

wegschmeißen. Toll.

Dominik

Hätte man sich auch direkt sparen können.

Dominik

Verlassen, dass dann halt das Dependency-Resolving

Dominik

vernünftig funktioniert, aber

Dominik

naja, da muss man halt doch wieder dann manuell pinnen.

Dominik

aber das geht dann schon irgendwie.

Dominik

Ja, aber solche Sachen, das ist halt wirklich hässlich dann.

Dominik

Da gibt es keine richtig gute Lösung für.

Dominik

Also wie baut man denn jetzt Python so zusammen,

Dominik

dass es immer vernünftig funktioniert,

Dominik

immer wieder auch in zwei Jahren noch irgendwo

Dominik

und das ist ein bisschen blöd irgendwie.

Dominik

Also auch wenn man jetzt,

Dominik

ich nehme jetzt noch dieses Windows-Beispiel,

Dominik

wenn man jetzt eine Executable erzeugen möchte,

Dominik

den man Leuten gibt, die eigentlich gar kein Python können

Dominik

oder auch programmieren nicht können oder sowas,

Dominik

sondern die wollen einfach ein Programm haben,

Dominik

was sie ausführen können, was dann auf Python läuft

Dominik

und bestimmte Dinge tut. Das

Dominik

bei denen auf den Rechner zu bekommen, das ist gar nicht so einfach.

Dominik

Aber darum gibt es ja auch Web-Software.

Ronny

Das ist ja genau der Grund, dass man diesen Knatsch halt

Dominik

nicht mehr hat. Ja gut, aber es gibt ja auch

Dominik

da verschiedenste Lösungen, wie man irgendwie so ein großes

Dominik

Paket zusammenschnürt, wo man dann alles

Dominik

mit reinpackt und

Dominik

die Dependencies mit reinpackt und den Compiler mit reinpackt

Dominik

und so, dass das dann halt selbstständig

Dominik

irgendwie aufgebaut werden kann. Ja, kann man

Jochen

schon. Also ich meine, PyInstaller ist halt wahrscheinlich

Jochen

vielleicht so die populärste. Es gab

Jochen

ja einige. Nuka. Es gab dann

Jochen

Nuka, PyOxidizer. Wir

Jochen

hatten da ja auch schon ein paar Mal drüber.

Jochen

Inzwischen, wenn man auf die Tools guckt,

Jochen

das sind Pi-Oxidizer und so, das ist schon wieder

Jochen

alles verschwunden aus den Empfehlungen.

Jochen

Das hat sich wohl

Jochen

dann... Pi-Installer ist irgendwie

Jochen

erstaunlich konstant.

Dominik

Ich habe es noch nie richtig... Funktioniert einfach

Dominik

nicht so, wie man will, wenn man zu viele externe Dependencies

Dominik

hat. Das ist auch nicht schön.

Dominik

Ja.

Dominik

Kein einfaches Problem,

Dominik

leider.

Dominik

Ja, aber was macht man da? Also Paket

Dominik

bauen? Ja, du sagst Web-Anwendung.

Jochen

Ja, Web-Anwendung, oder ich meine, klar,

Jochen

Docker-Image dürfte schon relativ haltbar

Jochen

sein, ist auch, ist natürlich so ein bisschen

Jochen

verschwenderisch groß alles. Solange es

Dominik

Docker noch gibt, ne? Ja.

Dominik

Ja.

Dominik

Aber, tja,

Dominik

ja, nee, ich habe auch keine Lösung dafür.

Dominik

Meine Lösung ist,

Jochen

nicht auf Systemen unterwegs sein, wo das ein Problem ist.

Jochen

Gut, aber es gibt halt

Dominik

Leute, die halt andere Systeme nutzen, das ist ja klar.

Dominik

Ja, ich verstehe das. Wenn die darauf relien,

Dominik

und wenn man von bestimmten Konzernen,

Dominik

die halt dann bestimmte Policies haben, die man nicht

Dominik

verstehen muss, aber wo man das natürlich daran halten muss.

Ronny

Die haben bestimmt 1998 Sinn

Ronny

gemacht, dass die jemand eingeführt hat.

Dominik

Ja, also die sind auch veränderungsresistent,

Dominik

da würde ja die ganze Abteilung sich als Renonant

Dominik

erweisen vielleicht, aber

Dominik

solange die gut verdienen, ist das halt nicht notwendig

Dominik

da irgendwas zu ändern, das ist halt

Dominik

dann so.

Ronny

Ja, aber wie gesagt, also

Ronny

nochmal zur Versionierung zurück,

Ronny

ich mache tatsächlich auch die Semantic Versioning,

Ronny

man kann halt damit wenigstens versuchen,

Ronny

dass man halt dem

Ronny

Nutzer, den man ja meistens nicht kennt, so ein bisschen

Ronny

wenn die, ja, den Pain

Ronny

zu nehmen, wenn man halt, wie man mit Updates umgeht,

Ronny

weil jedes Update, je nachdem, wie groß das Projekt ist und

Ronny

auch, wie stabil das Projekt ist, so

Ronny

Stichwort Testing und sowas,

Ronny

kann das ja auch ziemlich, mit ziemlich

Ronny

viel Kopfzerbrechen verbunden sein, irgendwas

Ronny

überhaupt hochzuziehen und

Ronny

bei dem habe ich jetzt halt gesagt, hey, wir

Ronny

machen jetzt Semantic Versioning und da

Ronny

versuche ich mich auch sehr dran zu halten, also

Ronny

darum habe ich jetzt auch schon in den Jahren jetzt

Ronny

vier Major Releases gemacht, weil

Ronny

Python hat irgendwie komplett

Ronny

alles auf drei umgestellt, ist halt ein Breaking Change,

Ronny

musst du halt hochgehen, da kommst du halt nicht drum rum.

Ronny

Fühlt sich manchmal so ein bisschen verschwenderisch an,

Ronny

wenn man denkt, schon wieder, das ist

Ronny

nicht so viel Code, aber

Ronny

man kann halt einfach nur hoffen, dass man

Ronny

es den Leuten halt möglichst einfach macht, weil

Ronny

das Problem ist, da sitzt dann nachher am

Ronny

anderen Ende der Welt jemand, der möchte genau das Package

Ronny

verwenden oder nutzt es im schlimmsten Fall vielleicht schon

Ronny

und dann macht man ihm plötzlich was kaputt, der hat keine Chance

Ronny

irgendwie vernünftig zu erreichen, zumindest

Ronny

nicht direkt und

Ronny

da sollte man ja schon

Ronny

gucken, dass man das

Ronny

ja, so stabil wie möglich baut.

Ronny

Ja.

Ronny

Ja, ja.

Ronny

Ja, ist auf jeden Fall nett.

Ronny

Ja, also ich wollte gerade sagen, also

Dominik

ich glaube, manchmal machen die Leute auch so ein bisschen zu viel

Dominik

Schwurbel um, es muss

Dominik

backwards kompatibel sein für

Dominik

bis in alle Zeiten.

Ronny

Absolut. Ich finde es vollkommen okay zu sagen,

Ronny

das Ding geht jetzt kaputt, wenn du das so nutzt wie vorher.

Ronny

Aber die müssen es halt wissen.

Ronny

So, ich meine, wäre halt einfach...

Dominik

Ja, es wäre schon nett, wenn man halt die Versionsnummer dann vielleicht major ändert.

Ronny

Genau, also wenn jemand halt blind irgendwie drei Majors hochgeht

Ronny

und sich dann ärgert, dass es nicht geht, ja gut.

Ronny

Wie gesagt, ich meine, manche Projekte haben ja leider wirklich kein Change-Log

Ronny

oder so ein ganz rudimentäres.

Ronny

Da ist man wirklich angeschmiert, weil du kannst es halt nicht wissen.

Dominik

Wie machst du das Change-Log und wie schreibst du das dann auf?

Dominik

Schreibst du dann vor jedem Commit

Dominik

oder lässt du aus den Commit-Messages automatisch dein Log kriegen?

Dominik

Ich mache das tatsächlich zu Fuß.

Dominik

Also da gibt es ganz viele Tools.

Ronny

Ich fand das Stand irgendwie nicht dafür,

Ronny

weil wie gesagt, wenn ich irgendwas mache,

Ronny

dann weiß ich ja, was ich mache

Ronny

und dann kann ich es auch einfach kurz ins Change-Logger.

Ronny

Das ist einfach ein Markdown-File.

Dominik

Disziplin, vernünftig deine Arbeit zu dokumentieren.

Ronny

Ja, und vor allem, das sind ja auch Stichpunkte.

Ronny

Ich meine, inzwischen habe ich eine Dokumentation,

Ronny

da kann ich gleich noch was dazu sagen.

Ronny

Auch ein Thema für sich.

Ronny

Aber ich habe einfach ein Markdown-File

Ronny

und das ist halt eine lange Liste, wo dann halt drinsteht,

Ronny

hey, am so und sovielten habe ich diese Version released

Ronny

und das hat sich geändert.

Ronny

Ich habe da irgendwie, weiß ich, drei Rechtschreibfehler

Ronny

in der Dokumentation gefixt, die Funktion ist neu

Ronny

und die Funktion hat neun Parameter.

Ronny

So, und dann, das ist halt, das dauert eine Minute, das zu schreiben. Ich meine, ich weiß ja, was ich da tue. Und wenn ich jetzt sage, ich sammle ein paar Kleinigkeiten, wo es sich nicht lohnt, ein Release zu machen, weil ich es gerade nicht so dringend brauche, dann habe ich halt einfach so ein current, temporäres Ding oben drin stehen und dann, wenn ich halt fertig bin, dann sage ich, okay, das gebe ich dem Namen, also sprich eine Versionsnummer und dann habe ich die Sachen einfach schon zusammengeschrieben, wenn von mehreren Seiten was, oder wenn mal auch von Kollegen oder so ein Pull-Request reinkommt oder sowas.

Ronny

Das ist auf jeden Fall ordentlich.

Ronny

Also ich tatsächlich

Ronny

bin da halt einfach gebranntes Kind, weil ich es halt schon zu oft

Ronny

hatte, dass ich denke, ja kacke, kann ich das jetzt noch

Ronny

verwenden, kann ich es nicht verwenden so.

Dominik

Also ich frage mich gerade, ab wann ich mit sowas anfangen würde,

Dominik

weil ich würde jetzt zum Beispiel in der ursprünglichen

Dominik

Entwicklung jetzt damit noch nicht anfangen, Change.org zu schreiben,

Dominik

wenn ich jetzt noch nichts habe, was richtig fertig ist und was

Dominik

funktioniert. Wahrscheinlich bei Person 1.0

Dominik

würde ich auch. Irgendwie so, ne, ja.

Jochen

Oder sobald halt Leute anfangen, das zu

Jochen

verwenden irgendwie. Was du natürlich auch nicht so genau

Jochen

weißt, also. Ne. Ja, sobald

Dominik

du was einigermaßen Nutzbares irgendwie hast,

Dominik

vielleicht. Ja. Genau.

Jochen

Ja, ich überlege gerade, ob ich was nicht so mache und denke mir so, oh nein, ich breche trauernd die Komplimente.

Ronny

Ich meine, es kommt auch immer darauf an, wenn das halt so ein Mini-Ding ist, also gut, selbst das kann irgendwie an eine zentrale Stelle eingebunden sein, aber zum Beispiel jetzt das Package, an dem ich jetzt arbeite, das ist halt eigentlich, das ist halt so eine Toolbox.

Ronny

Und ich bin eigentlich gar kein großer Fan, dass man so diese, sagt, hey, hier ist so ein Haufen von Zeug, das du so querbeet in dein Projekt einsetzen kannst.

Dominik

Wie so der Werkzeugkoffer bei euch im Schrank. Da hängt auch alle möglichen Schraubenschlüssel rum. Jeder hat seinen eigenen Werkzeugkoffer mit eigenen Schraubenschlüsseln. Tauscht man zu selten aus. Und da sind aber die Farben, die hat man sich selber zusammengesucht und man weiß selber, wo man in der Kiste was findet. Aber wenn jemand anders da in diesen Werkzeugkoffer reinguckt, dann, ja.

Ronny

Genau, also ich finde es eigentlich cooler, wenn man das, ich meine, da muss es nicht auf JavaScript-Level gehen, wo die quasi jeder zwei Zeilen ein eigenes Package ist, das ist manchmal ein bisschen krass, aber wenn man die Sachen vielleicht auch ein bisschen, also sagt man so, würde ich jetzt das Package nicht geerbt haben, sondern würde es jetzt neu machen, dann würde man sagen, hier dieser Code, der soll irgendwie Packages, würde ich das wahrscheinlich nach gewissen Use Cases strukturieren.

Dominik

Also auch nicht mehr Core nennen, sondern tatsächlich den Funktionalitätsgebiet.

Jochen

Das ist ja auch so ein Klassiker, das haben ganz

Jochen

viele Firmen. Ganz viele Firmen haben ein Paket, das

Jochen

heißt so wie die Firma. Oder

Jochen

sie haben halt ein Paket, das heißt dann irgendwie wie die Firma

Jochen

plus Core oder das heißt halt Core

Jochen

oder so. Das ist

Jochen

ja, das ist ganz, ganz typisch.

Ronny

Aber wie gesagt, zum Beispiel

Ronny

ich habe irgendwie ganz viele Sachen gebaut, die mir bei Unit-Tests

Ronny

helfen. Dann würde ich sagen, hey, das ist dann jetzt

Ronny

das Ambient-Unit-Test-Paket

Ronny

oder so. Und dann alle Sachen, die haben irgendwas

Ronny

berechnen oder die irgendwas mit dem View-Layer

Ronny

zu tun haben, weil viele Projekte laufen bei Django inzwischen

Ronny

auch Headless so, das hat dann auch gewisse

Ronny

Dependencies, die man ja sonst nicht reinholen muss.

Ronny

Das ist dann auch

Ronny

ein eigenes Paket. Und ich habe das jetzt mit

Ronny

Extensions tatsächlich gemacht, weil am Anfang

Ronny

war es auch so, dass auch die ganzen

Ronny

Dependencies wurden alle mit installiert immer,

Ronny

weil damals mir gar nicht so bewusst war,

Ronny

dass man das irgendwie trennen kann. Ich habe das dann einfach irgendwann übernommen

Ronny

und so ein bisschen umstrukturiert und dachte, okay, cool,

Ronny

funktioniert, wird schon passen. Aber man

Ronny

kann tatsächlich sagen, dass man verschiedene

Ronny

Extensions macht. Also das kennt man, wenn man das

Ronny

aus dem Requirements oder so

Ronny

ist, so eine enge Klammer, wo dann irgendwie

Ronny

bei Celery kann man es mit SQS oder

Ronny

mit Revit oder keine Ahnung welchen Extensions installieren

Ronny

und da kann man natürlich auch sehr schön

Ronny

die Dependencies wegkapseln, weil du kannst zum Beispiel

Ronny

sagen, hey, also zum Beispiel in meinem Fall

Ronny

ist es jetzt, ich habe diverse Sachen, die halt

Ronny

nur fürs Django Template Layer interessant sind,

Ronny

also ein Middleware und sowas und da sind halt

Ronny

ein, zwei Dependencies drin, die ich in anderen Cases nicht brauche.

Ronny

Das heißt, ich kann einfach hingehen

Ronny

und sagen, hey Leute, also steht es dokumentiert

Ronny

und sage, hey Leute, das ist das Standardpaket,

Ronny

das ist so das normale Shit, den man so mit Django

Ronny

machen kann und wenn

Ronny

ihr jetzt irgendwas Spezielles Julia haben wollt,

Ronny

das ist hier dokumentiert und da müsst ihr

Ronny

halt noch die Extension mit installieren und dann

Ronny

kriegen die halt auch die

Ronny

Dependency.

Dominik

Ja, das ist halt auch die Frage, bietet man den Leuten

Dominik

direkt das volle Rundum-Sorglos-Paket an,

Dominik

dass die ja nicht so viel Aufwand haben und das alles lesen müssen

Dominik

und alles nachinstallieren müssen oder

Dominik

machen wir das halt sehr modular?

Dominik

Also ich sag mal so,

Dominik

du kannst ja theoretisch

Dominik

auch einfach alles installieren, wenn du es willst.

Ronny

Das ist relativ zentral. Steht das auch am Anfang, hey, das gibt es

Ronny

und wenn du nicht so genau weißt, dann kannst du einfach alles nehmen.

Ronny

Aber ich finde es halt schön den Leuten, die halt

Ronny

mehr Kontrolle haben wollen, die zum Beispiel sagen wollen,

Ronny

hey, ich achte drauf, welche Unterdependencies

Ronny

in mein Projekt reinkommen, weil ich halt keinen Knatsch

Ronny

haben möchte oder sowas.

Ronny

Denen halt die Möglichkeit zu geben. Und dann auch

Ronny

ganz wichtig, dass man die ganzen

Ronny

Build-Dependencies, die man

Ronny

wirklich nur auf Meta-Ebene,

Ronny

also wenn du am Package arbeitest, dass man die halt

Ronny

rausnimmt, weil das bringt halt unendlich viele Sachen

Ronny

sonst nachher in so ein Projekt rein, den man eigentlich gar nicht haben

Jochen

möchte. Genau, ich habe

Jochen

jetzt hier gerade nochmal

Jochen

das letzte Paket, das ich irgendwie

Jochen

gebaut hat und reingeguckt.

Jochen

Das ist Django Fire Response.

Jochen

Oh, da hast du auch in deinem Stream

Jochen

einiges dran gearbeitet. Genau, da habe ich

Jochen

jetzt, bis letzte Woche habe ich da noch was dran gemacht.

Dominik

Falls ihr es noch nicht mitbekommen hattet, in der letzten Folge hatten wir

Dominik

erwähnt, dass der Jochen jetzt nämlich auch streamt.

Dominik

Relativ häufig. Und da könnt ihr zugucken, was der die ganze Zeit

Dominik

für uns anstellt und wie man dann so entwickelt,

Dominik

wie man das live macht. Ja.

Dominik

Ich finde es eigentlich, es sieht cool aus.

Dominik

Und ja, wirklich.

Jochen

Danke, danke, danke. Genau.

Jochen

Ja, technisch gar nicht so schlecht, glaube ich.

Jochen

Inhaltlich muss ich noch ein bisschen feilen, glaube ich.

Dominik

Nein, andersrum, weil ich finde auch tatsächlich, dass es inhaltlich

Dominik

sehr spannend ist, was man da alles so umsetzen kann.

Dominik

Ich baue das gerade so ein bisschen nach, ehrlich gesagt.

Dominik

Ich habe... Also Final Responses fand ich

Dominik

sehr interessant, den möchte ich auch mal bauen, ja.

Jochen

Also wo ich tatsächlich noch Schwierigkeiten... Ich merke das, das habe ich

Jochen

heute wieder gemerkt, tatsächlich,

Jochen

was mir schwerfällt und was ich nicht so gedacht hätte,

Jochen

nicht erwartet hätte, also wenn ich

Jochen

irgendwie so an den Projekten rumentwickle und

Jochen

ich weiß aber, das können sich

Jochen

Leute nachher angucken, dann tendiere ich

Jochen

dazu zu sagen so, ah, jetzt gut,

Jochen

jetzt müsste ich da jetzt immer tief graben oder

Jochen

irgendwie versuchen rauszukriegen, das wird voll langweilig

Jochen

und ich muss ganz viel probieren. Und ich habe absolut keine Ahnung,

Jochen

ob ich damit irgendwie in einer halben Stunde fertig bin oder so.

Jochen

Und jetzt kann es sein, dass sich Leute einfach eine halbe Stunde lang

Jochen

fürchterlich langweilen.

Jochen

Und es ist fruchtlos.

Jochen

Also das merken, weil normalerweise

Jochen

würde mir das halt nichts ausmachen. Mir macht das ja Spaß,

Jochen

das zu entwickeln. Und dann probiere ich halt rum

Jochen

und wenn es halt geht, super. Wenn es nicht geht, naja.

Dominik

Ich muss sagen, also mir macht das auch Spaß, weil dieses

Dominik

Rumprobieren, das kriege ich dann ja mit.

Dominik

Und da lerne ich auch mal was bei. Und ich glaube, gerade dann, wenn man

Dominik

halt nicht alles so perfekt vorher schon weiß,

Dominik

sondern das so ein bisschen rausknobeln muss.

Dominik

Und man ist ja quasi mit live dabei. Das ist ein bisschen

Dominik

vielleicht wie am Podcast, durch dieses Rausknobeln,

Dominik

das du ja dann machst, dann knobelt man selber

Dominik

so ein bisschen rein und man kommt halt tiefer

Dominik

in die Thematik rein und man hat ein tieferes Verständnis

Dominik

für die Zusammenhänge und das ist unheimlich

Dominik

wertvoll dann. Deswegen sollte man sowas, glaube ich,

Jochen

tun, ja. Ja, das ist tatsächlich vielleicht eine interessante

Jochen

Geschichte, dass man genau da bei Leuten

Jochen

halt so, aber wenn man das macht oder

Jochen

für mich war das überraschenderweise so,

Jochen

dass ich das Gefühl habe, oh, jetzt muss ich aber weiter

Jochen

oder oh, da sehen Leute, dass ich keine Ahnung

Jochen

habe oder weiß ich nicht, irgendwie so ein

Jochen

Ego-Ding, dass ich nicht so

Jochen

richtig los werde und da ist mir jetzt schon ein paar Mal

Jochen

aufgefallen, okay, da habe ich dann irgendwas übersprungen oder

Jochen

dann bin ich nicht so, mache ich das nicht so, wie ich das normalerweise

Jochen

machen würde. Also ich weiß eine Lösung.

Jochen

Also du hast ja so ein tolles Pult,

Dominik

da kannst du so bestimmte Einwendungen machen. Ich würde so

Dominik

einen Button dann einfügen, den kannst du zumindest später

Dominik

runterschalten, wo dann einfach so fett zensort auf dem

Dominik

Bildschirm steht, so ein schwarzer Balken,

Dominik

dann wird das, was du gerade programmierst, einfach kurz sensiert und

Dominik

der Ton gestrambelt, dann gehst du so

Dominik

selber kurz draufdrücken, dann hast du einen

Dominik

kurzen sensierten Teil, dann kannst du

Dominik

wieder freischalten, dann, okay, geht wieder.

Dominik

Ja, genau,

Jochen

wird sich schon irgendeine Methode finden.

Dominik

Kennt ihr das aus Starship Troopers, wo es dann kurz diesen

Dominik

Send-Out-Biken gibt und in den Hintergrund werden die Kühe dann von den Elfen vergessen?

Jochen

Ja, und hinten wie so die Gedärme fliegen, genau.

Jochen

Ja, das stimmt.

Jochen

Das ist eine gute Idee.

Jochen

Da fliegen noch nicht genug Gedärme

Jochen

in dem Stream, das ist wahr.

Jochen

Genau, da habe ich ja dieses

Jochen

Django-Fire-Response-Paket gebaut.

Jochen

Da habe ich etwas verwendet, was ich jetzt vielleicht dann

Jochen

auch nur aus Spaß

Jochen

habe ich

Jochen

ein MBDev, was in der Data Science

Jochen

welther so ein bisschen

Jochen

verbreiteter ist. Vielleicht nochmal ganz kurz, das hast du auch schon

Dominik

einmal kurz erklärt, aber NBDEF ist quasi

Dominik

entwickeln mit dem Notebook, aber das Notebook quasi

Dominik

das bei dem Paket automatisch

Dominik

mit den Dokumentationen und so erzeugen kann. Genau,

Jochen

also das eigentliche Ding, was das so interessant

Jochen

macht, ist, dass man so ein bisschen Literate Programming

Jochen

machen kann und halt

Jochen

Dokumentation, Code und

Jochen

Tests irgendwie direkt zusammenstehen hat

Jochen

und daraus dann halt sozusagen

Jochen

aus den Notebooks wird dann das Paket

Jochen

erzeugt oder das Modul, also der

Jochen

Source-Code erzeugt

Jochen

und aus dem

Jochen

Source Code wird dann ein Paket gebaut und das

Jochen

geht auch tatsächlich, ich habe jetzt nochmal nachgeguckt, weil ich es gar nicht mehr wusste,

Jochen

aber ja, das macht das per Setup.py

Jochen

und da hat man halt auch

Jochen

eben, da

Jochen

schreibt man halt rein, extra

Jochen

Extras Require zum Beispiel

Jochen

und kann dann

Jochen

halt, das ist einfach nur ein Dikt und

Jochen

dann kann man da beliebige Dinge reinschreiben, halt zum Beispiel

Jochen

was ich jetzt da nur drin stehen habe, ist halt Dev und dann

Jochen

Dev Requirements, aber man kann halt auch eben

Jochen

eben alle möglichen optionalen Geschichten mit

Jochen

angeben, die man dann halt installiert oder nicht und

Jochen

da wäre es zum Beispiel so, also dieses

Jochen

Django-File-Disponse-Dings hat selber praktisch keine

Jochen

Abhängigkeiten,

Jochen

aber wenn ich jetzt

Jochen

die Dev-Requirements da mit reinnehmen würde,

Jochen

dann wäre das ziemlich übel, weil dann würde

Jochen

der ganze Envy-Dev-Kram mitkommen zum Beispiel.

Jochen

Es würden Jupiter-Notebooks mitkommen,

Jochen

es würde Pandas mitkommen, es würde Nam-Pi mitkommen,

Jochen

es würde irgendwie so das

Jochen

halbe Deadline-Universum

Jochen

mitkommen, was du normalerweise

Jochen

auf dem Web-Server hast, wo du Django

Jochen

verwenden willst, hast du es ja gar nicht. Und plötzlich

Jochen

wird dann wahrscheinlich irgendjemand

Jochen

vor einer Konsole sitzen und denken sich,

Jochen

warum kommt da jetzt ein Fortran-Compiler

Jochen

mit Telefon drin? Und warum dauert

Jochen

das eine halbe Stunde, bis das kompiliert ist?

Jochen

Ja, genau.

Jochen

Nicht so gut.

Jochen

Aber vielleicht noch mal kurz zur NBDEV.

Dominik

Wie baut man denn quasi sein normales Notebook

Dominik

in ein NBDEV um, damit es halt dann auch als Paket

Dominik

nutzbar ist?

Dominik

Muss ich da quasi ein anderes Notebook nehmen

Dominik

oder kann ich einfach ein Jupyter-Notebook nehmen?

Jochen

Das ist ein Jupyter-Notebook, aber das Einzige,

Jochen

was man da braucht, ist im Grunde

Jochen

man muss MBDev installieren

Jochen

und dann halt MBDev build lib

Jochen

und dann hat man so ein paar Metaanweisungen

Jochen

sozusagen für MBDev in dem Notebook selber.

Dominik

Das heißt, das ist eine Extension für das eigentliche Notebook

Dominik

und wo man dann quasi ein bisschen anders strukturiert,

Dominik

als man nach vorne machen würde?

Dominik

Nee, das ist keine Extension,

Dominik

sondern das liest es einfach nur.

Jochen

Und wenn man da sowas reinschreibt wie Kommentar

Jochen

und dann Export oder Default Export,

Jochen

also diese Sachen werden dann ausgewertet

Jochen

und werden dann benutzt,

Jochen

um dann daraus zum Beispiel die Python-Module zu erzeugen.

Jochen

Also es ist nicht mal irgendwie

Jochen

ein Jupyter-Plugin

Dominik

oder sowas. Das heißt, man muss einfach richtig

Dominik

seine Zellen vom Typ her definieren im Jupyter-Notebook

Dominik

und dann Docs hinschreiben.

Jochen

Dann wird das gelesen von der MBDF und das schreibt dann halt

Jochen

den Source-Code dann raus.

Jochen

Also ich fand's eigentlich ganz nett.

Jochen

Ich find's auch sehr spannend, also sehr cool.

Dominik

Ich benutze auch relativ viele Notebooks zum Entwickeln.

Dominik

Also gerade auch so Django, so I.O. Sachen oder sowas

Dominik

oder Modellsachen, Funktionen, Methoden.

Dominik

Die kann man einfach super schnell

Dominik

dann testen. Die gehen halt an, Django-Shell auf

Dominik

und dann kann man testen.

Ronny

Ich mache das tatsächlich, das haben wir aber auch beim

Ronny

letzten Mal, als ich bei euch eingeladen war, schon mal drüber gesprochen,

Ronny

ich mache das tatsächlich so, dass

Ronny

ich das öfters ich oft mit dem Debugger

Ronny

entwickle. Ja, das ist auch eine interessante Option.

Jochen

Ja, auf jeden Fall. Das mache ich

Jochen

nicht so oft, aber das wollte ich mir auf jeden Fall

Jochen

auch nochmal angucken. Du nützt ja auch

Jochen

PyCharm, ne? Das ist, glaube ich,

Jochen

sehr komfortabel. Ja.

Ronny

Man muss sich auf jeden Fall abgewöhnen, STRG-S zu drücken.

Ronny

Ja. Weil dann speichert ihr die Datei

Ronny

und dann fliegt der Debugger raus. Ja. Aber

Ronny

ich finde, das ist eigentlich ganz cool.

Ronny

Also vor allem, wenn man so viele Funktionen

Ronny

und so irgendwie externen Daten und sowas bekommt,

Ronny

wo man dann oft irgendwie,

Ronny

okay, da muss ich mir auf die dritte Area-Stelle zugreifen.

Ronny

Das sind Sachen, die man halt, du weißt, es ist da irgendwo,

Ronny

du weißt nicht genau, wo es ist.

Ronny

Und da macht man dann normalerweise viele Runden

Ronny

und das ist dann einfach angenehm,

Ronny

wenn du dann direkt einfach in diesem Evaluate-Expression

Ronny

einfach die Sachen da zusammenklopfst

Ronny

und dann direkt auf den Knopf drückst und weißt,

Ronny

jo, läuft, passt, nice.

Dominik

Ja, da muss ich auch wieder ein Land zerbrechen,

Dominik

das geht auch in anderen Entwicklungsumgebungen

Dominik

tatsächlich ganz gut, wenn man die richtig einstellt.

Dominik

Das haben wir so ein bisschen gefummelt,

Dominik

bis man halt den Debugger so laufen hat,

Dominik

wie man das gehen hätte.

Dominik

Aber hast du da schon diesen Debugger,

Dominik

den wir letztes Mal vorgestellt haben, gesehen?

Dominik

Und zwar Kodo, oder wie hieß der?

Dominik

Kodo-App?

Dominik

Kodo-App, genau.

Dominik

Das ist ein neuer Django-Debugger,

Dominik

der relativ coole Sachen machen kann,

Dominik

wie Visualisierung der Code-Pathes und sowas.

Dominik

Cool.

Dominik

Relativ geil, musst du mal schauen.

Dominik

Ist aber nicht für Python.

Dominik

Ja.

Jochen

Ja, aber das wäre auch auf jeden Fall, genau.

Jochen

Also das habe ich mir auch zum Ziel gesetzt.

Jochen

Ich meine, normalerweise benutze ich ja immer Vim oder so.

Jochen

Aber das eben jetzt mal explizit nicht zu machen,

Jochen

sondern im Stream halt versuche ich jetzt,

Jochen

zum Beispiel habe ich jetzt immer eher VS Code benutzt.

Jochen

Einfach nur, um das halt auch so ein bisschen zu lernen.

Jochen

Oder halt auch PyCharm würde ich auch auf jeden Fall machen.

Dominik

Ja, also ach so, was du auch noch dabei machen solltest,

Dominik

vielleicht ist so ein bisschen so die Konfiguration zeigen,

Dominik

ein bisschen so die Magie zeigen, wie man das Tool dann jeweils benutzt.

Dominik

Das ist, glaube ich, auch noch mal sehr lehrreich.

Dominik

Also vielleicht kurz darauf eingehst,

Dominik

so wie man es da so nachmacht.

Jochen

Kann ich mir einfach mal vornehmen, das zu versuchen zu verwenden.

Dominik

weil dann, also je mehr man halt neue Sachen

Dominik

lernt, die man noch nicht lernt.

Jochen

Ja, okay, ich werde es mal versuchen.

Jochen

Ja, ja.

Jochen

Ja, das ist schon richtig.

Jochen

Man muss einfach ab und zu mal Dinge ausprobieren, das ist

Jochen

ganz wichtig.

Dominik

Ja, wenn man sonst immer noch bei seinen Sachen bleibt, dann wird man darin

Dominik

auch ein bisschen besser, aber was neue Sachen ist, ist schon spannend.

Dominik

Ja, ja, oft. So was wie Programmieren oder

Dominik

sowas kann ja auch für einige Leute neu sein.

Dominik

Ja, eigentlich bin ich schon fast

Dominik

zu lange dafür dabei, um das so noch zu erzählen.

Dominik

Aber ja, ist noch wahr.

Dominik

Das Gefühl geht auch nicht weg.

Dominik

Ja, okay.

Dominik

Ja, man hat halt von allen Sachen immer keine Ahnung.

Dominik

Aber irgendwie hat man dann doch mehr Ahnung hinterher,

Dominik

so Rückblicken von einigen Sachen,

Dominik

die man eigentlich gar nicht wissen wollte.

Dominik

Aber so da vorne ist immer,

Dominik

der Berg wird immer größer anstatt kleiner.

Dominik

Das ist so ein bisschen das Problem.

Jochen

Ja, weiß nicht, was mir bei so zunehmender Erfahrung auffällt,

Jochen

ist oft,

Jochen

muss ich gar nicht mehr so

Jochen

oder was mir heute leichter fällt

Jochen

oder ich sag mal so, der Unterschied zwischen heute und

Jochen

den Zeiten, wo ich halt wenig Erfahrung

Jochen

hatte, war halt, ich hatte früher immer mehr

Jochen

das Gefühl, bewusst Dinge zu tun oder

Jochen

bewusst irgendwie Sachen auszuprobieren. Und heute

Jochen

muss ich eigentlich nur, denke ich mir so,

Jochen

okay, ich habe keine Ahnung, wie genau es

Jochen

passieren wird, aber irgendwie in der nächsten halben Stunde wird

Jochen

mir schon irgendwas einfallen. Und dann probiere ich halt einfach rum

Jochen

und dann hinterher denke ich so, okay, das war's, aber keine Ahnung.

Jochen

Ich weiß gar nicht, ich habe mir jetzt gar nicht genau überlegt, was ich

Jochen

da tue, sondern es passiert irgendwie.

Dominik

Das passt mit dem Blogartikel, den du mir letztens geschickt hast,

Dominik

wo du sagtest, wie lange sollte man eigentlich

Dominik

über Probleme nachdenken? Und die Antwort war eigentlich

Dominik

so, ja, eigentlich gar nicht.

Jochen

Genau, würde ich auch inzwischen

Jochen

sagen, eigentlich lieber, wenn man

Jochen

nicht direkt weiterkommt, halt einfach was anderes machen.

Jochen

Später nochmal drauf zurückkommen.

Dominik

Duschen gehen, es fällt einem wie Schuppen von den Augen.

Ronny

Aber das ist ja auch direkt eine gute Überleitung.

Ronny

Ja.

Ronny

Weil bei Packages ist ja auch oft das Problem,

Ronny

dass wenn man entweder auf der

Ronny

gebenden oder auf der nebenen Seite des Packages steht

Ronny

und dann einen Bug hat,

Ronny

beziehungsweise auch irgendwie so eine gewisse Maintenance machen

Ronny

muss, zum Beispiel gibt es eine neue Dango-Version und man wird

Ronny

inkompatibel, das passiert ja leider

Ronny

immer wieder mal und das ist

Ronny

tatsächlich auch eine Sache,

Ronny

dass wenn man so ein Package in die Welt setzt,

Ronny

ich nehme jetzt mal extra dieses Wort,

Ronny

dass man halt da schon ein bisschen im Kopf

Ronny

behalten sollte, wie gehe ich denn damit um

Ronny

mit der Maintenorship, also wenn man sagt, ich mache das jetzt für mich

Ronny

und mal zum Ausprobieren, das nutzt eh keiner.

Dominik

Ich suche immer noch kurz den Übergang von der Dusche,

Dominik

aber okay, du bist für ein Maintenorship, ja.

Ronny

Nee, wegen Bugs und Problemen.

Dominik

Ja, wie lange man nur dran nachdenken sollte.

Dominik

Genau.

Ronny

Und das ist tatsächlich auch eine Sache,

Ronny

das merke ich halt auch oft,

Ronny

dass ich halt vor allem in älteren Projekten, die ich habe,

Ronny

dass ich da halt ein sehr cooles Package verwendet habe.

Ronny

Würde ich heute nicht mehr machen,

Ronny

aber ich habe den Code so gebaut, dass es halt funktioniert.

Ronny

Und dieses Package ist halt irgendwann mal hart abandoned worden.

Ronny

Also, dass da wirklich die Leute einfach kein Interesse mehr daran haben.

Ronny

Also, die nicht mal mehr das Interesse haben, zu sagen so,

Ronny

hey, ich schreibe einfach sorry, ich weiß ich nicht,

Ronny

ich bin jetzt irgendwie Gärtner und ich mache kein Programmieren mehr,

Ronny

kann ich nicht helfen, sondern es einfach kommt gar nichts mehr.

Ronny

Obwohl die Leute halt immer noch aktiv sind.

Ronny

Also man kann es ja auch sehen, was Leute so machen.

Ronny

Und das ist halt immer wieder sehr ärgerlich.

Ronny

Und ich glaube, dass wenn man so ein Paket in die Welt setzt,

Ronny

und man irgendwann merkt, okay, ich habe jetzt den Fokus verloren

Ronny

und das nutzt aber vielleicht noch irgendwer.

Ronny

Ich glaube, das Erste, was man machen kann,

Ronny

ist halt, dass man irgendwo prominent eine Möglichkeit hat,

Ronny

dass man den Leuten Feedback geben kann.

Ronny

Also offensichtlich ist es einfach bei GitHub, die Issues.

Ronny

Die kann man übrigens auch sehr schön über die,

Ronny

zum Beispiel Setup Highlight oder Project Setup Tommel,

Ronny

direkt verlinken in PyPy,

Ronny

dass die Leute direkt,

Ronny

über das Change-Log und so,

Ronny

kann man alles perfekt verlinken,

Ronny

dass die Leute gar nicht lange suchen müssen.

Ronny

Und dass man dann auf jeden Fall Leuten,

Ronny

die das halt nutzen,

Ronny

die Möglichkeit gibt,

Ronny

dass sie Feedback geben.

Ronny

Also zum Beispiel,

Ronny

ich habe die ersten zwei Issues bekommen,

Ronny

tatsächlich mit Übersetzungen,

Ronny

weil halt in dem Package halt ein paar Models,

Ronny

die ich da bereitstelle,

Ronny

waren halt auf Deutsch,

Ronny

weil die meisten Projekte,

Ronny

die wir nutzen,

Ronny

sind halt auf Deutsch.

Ronny

Und es ist halt nicht aufgefallen,

Ronny

dass da der Übersetzungshelfer fehlt.

Ronny

Und das war dann für die Leute halt echt super ärgerlich,

Ronny

weil die halt das irgendwie nutzen wollten.

Ronny

Wahrscheinlich haben die Blog-Artikel von mir gelesen, weil dann so, ja Mist, in dem Projekt ist alles auf Sprache X und das plötzlich auf Deutsch.

Ronny

Wenn der gut translatet, dann kommt irgendein Unsinn raus.

Ronny

Genau, und das hat mich dann total gefreut, es kam auch direkt ein Pull-Request hinterher, hey, hier so und so, und hab dann auch die Übersetzung nachgezogen und alles super, ne, also hätte ich sonst niemals rausgefunden, weil bis die irgendwie dann über die Webseite irgendwie mich anonym anschreiben oder mich über LinkedIn suchen oder keine Ahnung was, ist das ein riesen Overhead und so, einfach kennt halt jeder, ist schnell gemacht und das ist, glaube ich, so ein kleiner Convenience,

Ronny

die man dann seinen Usern irgendwie

Ronny

bereitstellen kann, weil es kostet ja auch nichts, es ist ja echt schnell

Ronny

gemacht. Und wie gesagt, das andere

Ronny

mit der Maintenorship, wenn man halt wirklich

Ronny

sagt, okay, ich gebe das jetzt auf,

Ronny

es gibt ja so

Ronny

entweder so Projekte, so wie Jazzband oder sowas,

Ronny

da gab es noch mit der DjangoCon einen schönen Vortrag dazu,

Ronny

wenn das wirklich ein größeres Projekt ist, dass man die da einfach

Ronny

abgeben kann und sagen kann, hey, sorry, ich bin

Ronny

raus hier mit dem Kram, aber das nutzt noch Leute,

Ronny

bitte kümmert euch drum.

Ronny

Und auf der anderen Seite,

Ronny

dass man natürlich auch dann notfalls auch andere Leute

Ronny

einfach befördern kann und einfach

Ronny

sagen kann, hier

Ronny

das,

Ronny

also ich habe da jetzt irgendwie Interesse und ich muss das reparieren

Ronny

und sage, gut, ich habe selber keine Zeit, dann mach halt.

Ronny

Ist immer noch besser, als wenn es gar keiner

Ronny

macht.

Dominik

Ja, ist ja gar nicht so einfach. Also gerade bei Leuten,

Dominik

die halt for pleasure entwickeln,

Dominik

da muss man sich halt auch überlegen,

Dominik

will man nicht auch mal was Neues machen oder sowas?

Dominik

Dann ist das schon klar, dass das schon schwierig ist.

Dominik

Immer an den alten Sachen, die irgendwie so mitzuschleppen.

Jochen

Aber das ist ja oft, also bei mir ist das

Jochen

keine bewusste Entscheidung, sondern das ist ja so,

Jochen

es ist halt einfach nur viel Zeugs inzwischen

Jochen

und

Jochen

ich würde das ja schon gerne alles noch machen.

Dominik

Ja, also manchmal möchte man halt auch mal

Dominik

in den Garten gehen oder sowas.

Dominik

Nein, das hatte ich jetzt gar nicht gesagt.

Dominik

Nein, nein, also das ist ja kein großer Wille.

Dominik

Aber dass man halt irgendwie,

Ronny

dass man dann vielleicht wenigstens noch ab und zu auf GitHub

Ronny

guckt, wenn jetzt einer sagt, hey, geht nicht mehr, dass man dann

Ronny

sagt, ja gut, dass man den Leuten vielleicht kommuniziert

Ronny

einfach so, hey, sorry.

Dominik

Dann würden wir nicht sagen, wir lesen wahrscheinlich noch

Dominik

so Nachrichten oder so.

Dominik

Aber es ist auch die Frage, wenn du irgendwie 5000 am Tag kriegst

Dominik

oder so, das ist wahrscheinlich dann auch anstrengend.

Dominik

Je nachdem, welche Größe du hast irgendwann.

Dominik

Das kann auch sehr overhelming werden.

Dominik

Also gerade, ich sag mal, das Leben von Leuten

Dominik

ändert sich ja auch oft. Also so Situationen

Dominik

oder sowas.

Dominik

Wenn da irgendwie dann die Prioritäten sich privat

Dominik

verschieben und die Leute dann nicht mehr von morgens bis abends

Dominik

dann noch in ihrer Freizeit

Dominik

partizipieren können, dann...

Ronny

Ja, absolut. Ich meine, das ist natürlich ein Problem.

Ronny

Es hat ja auch Carlton Gibson, glaube ich,

Ronny

macht gefühlt jede zweite Jungle Corner einen hervorragenden Vortrag zu dem Thema.

Ronny

Das ist natürlich

Ronny

ein Problem, aber ich sage, es gibt halt

Ronny

relativ einfache Möglichkeiten, die

Ronny

zwingend natürlich nicht bei jedem zutreffen, wenn einer wirklich

Ronny

sagt, hey, ich habe jetzt den Beruf gewechselt

Ronny

oder ich bin weggezogen oder keine Ahnung was und

Ronny

habe meinen GitHub-Account geschlossen, das war es jetzt

Ronny

für mich. Okay, kann immer passieren, aber

Ronny

ich sage eben, in den meisten Fällen

Ronny

ist es wahrscheinlich oft, dass Leute noch irgendwie

Ronny

latent am Ball bleiben und

Ronny

da gibt es halt ganz einfache Wege,

Ronny

das Problem zumindest für einen selbst irgendwie zu lösen.

Ronny

Ja, ich sage mal so, es ist schon

Ronny

schön, wenn man halt so ein paar Issues irgendwie

Dominik

die größten nicht offen lässt, sondern zumindest

Dominik

ein Team findet, das dann Lust hat, wenn man gerade

Dominik

wirklich viele Leute hat, die dann was benutzen,

Dominik

dass denen halt wenigstens mal deren Pull-Request-Merch

Dominik

oder denen die Möglichkeit gibt, dass die selber

Dominik

Sachen merchen können oder die Interesse dann haben.

Ronny

Klar kann man auch einfach forken und dann irgendwie

Ronny

ein neues Package machen und sowas, aber

Ronny

es ist halt natürlich schon

Ronny

schön, damit das alles irgendwie ein bisschen zentralisiert ist.

Dominik

Aber die Jazzband hast du ja erwähnt,

Dominik

das ist glaube ich eine ganz gute Möglichkeit, das zu tun, ja?

Dominik

Ja, ja, da bin ich jetzt,

Jochen

da hat sich halt im letzten Mal auch was getan, da bin ich jetzt

Jochen

auch mal da beigetreten.

Jochen

Und dann, weil ich habe

Jochen

nämlich gesehen in dem Projekt, in dem ich momentan gerade

Jochen

da rumschraube, da habe ich diverse

Jochen

Geschichten, die in Jasmine drin sind, reingewendert.

Jochen

Sozusagen,

Jochen

damit ich die anpassen kann.

Jochen

Und eigentlich kann ich das ja auch dann einfach

Jochen

so machen vielleicht.

Jochen

Cool.

Ronny

Dann löst du quasi dein Problem

Ronny

und hilfst aber noch ganz vielen.

Jochen

Ja, gut, das vielleicht mache ich auch

Jochen

demjenigen, der dann die nächste Release baut,

Jochen

Kopfschmerzen. Das kann auch sein.

Jochen

Aber ja, mal schauen.

Jochen

Ist auf jeden Fall interessant.

Jochen

Ist vielleicht auch eine kleine Verbesserung.

Jochen

Ja, ja.

Jochen

Tja, was haben wir denn?

Jochen

Was gibt es denn noch

Jochen

so für Dinge, die wir über

Jochen

Packaging irgendwie

Jochen

erzählen sollten?

Jochen

Habt ihr irgendwie

Jochen

irgendwelche Tools, die ihr

Jochen

bevorzugt verwendet? Also Flit, okay, kanntet ihr jetzt

Jochen

nicht. Habe ich auch nicht.

Jochen

Werde ich dann demnächst mal ausprobieren. Mal gucken.

Jochen

Das ist irgendwie voll gut.

Jochen

Ja, Poetry

Jochen

verwende ich meistens, aber

Dominik

Ja, tatsächlich so zum normalen

Dominik

lokalen Verwalten schon und zum Bauen.

Jochen

Du verwendest pipenv, aber das ist nur

Jochen

für die

Jochen

Genau, nur für die Requirements.

Jochen

Ja, genau.

Ronny

Tatsächlich, das Package,

Ronny

das schiebe ich noch

Ronny

mehr oder weniger genauso hoch, wie das damals

Ronny

2012 war, also so eine ganze fiese Set, also

Ronny

das heißt fies, aber aufgeräumt ist sie aber eine

Ronny

sehr angestaubte Setup-High.

Ronny

Und ja, dann auch, ich baue da auch ein Wheel draus,

Ronny

weil das für, also ich selbst bin ja tatsächlich ein Windows-Nutzer.

Ronny

Das wird jetzt auch ein bisschen populärer.

Ronny

Aber wieder beim Coden.

Ronny

Aber tatsächlich ist es mit den Wheels sehr, sehr angenehm,

Ronny

weil die Sachen sich einfach alle installieren lassen

Ronny

und man da keinen Knatsch mehr hat.

Ronny

PyCurl ist aktuell mein einziger Endgegner.

Ronny

Wenn ich das installieren möchte.

Ronny

Aber genau, von daher, das habe ich mir aber auch aufgeschrieben.

Ronny

Ich meine, gut, dass du das gesagt hast.

Ronny

das werde ich dann in ihrem Nachgang mal anschauen, weil

Ronny

ich hatte eh schon immer mal überlegt, ich würde da gerne

Ronny

was machen, aber wie du schon auch gesagt hast, es gibt

Ronny

so viele Wege, die nach oben führen und wenn ich jetzt gerade keinen

Ronny

unbedingten Druck habe, was

Ronny

zu ändern, dann ist mir dann auch so eine Sache,

Ronny

die auf der To-Do-List dann gerne mal ein bisschen nach hinten rutscht.

Ronny

Ja, ja, auch in diesem, auch in

Jochen

der Episode mit Brad Cannon, der meinte halt so,

Jochen

eines der Hauptprobleme, die sie so haben,

Jochen

auch irgendwie, also der

Jochen

Grund, warum das alles so zersplittert und kompliziert

Jochen

ist, ist halt auch, dass

Jochen

der Haupt

Jochen

Weg, wie Entwickler das machen und

Jochen

das erinnerte mich jetzt gerade daran, ist halt, dass

Jochen

sie irgendwann mal sich damit beschäftigt haben

Jochen

und dann haben sie ein Setup-Wi-Fi geschrieben und

Jochen

das kopieren sie halt Projekt von Projekt

Jochen

zu Projekt immer weiter. Und das Problem

Jochen

ist halt sozusagen

Jochen

aus Infrastruktursicht dann,

Jochen

ja, Abwärtskompatibilität ist halt

Jochen

super wichtig, weil

Jochen

es sind halt oft viele Dinge

Jochen

immer noch im Einsatz, die von irgendwann an oder

Jochen

dazu mal kopiert worden sind. Das heißt, man

Jochen

kann die Abwärtskompatibilität nicht mehr brechen, weil

Jochen

ansonsten bricht ganz, ganz viel,

Jochen

ganz, ganz viele Dinge und dessen

Jochen

ja, Vorschlag

Jochen

war auch eher SetupCFG

Jochen

zu verwenden und dann halt auch mal

Jochen

oder irgendein Projekt-Template oder so

Jochen

oder eben ein Tool, was einem das halt

Jochen

abnimmt, ja. Das klingt aber

Dominik

auch alles schon wirklich, also ganz im ganzen

Dominik

Packaging-Ding, ne, so gordischer Knoten.

Jochen

Ja, das ist wirklich gemein, ja, ich meine, was will man

Jochen

machen, wenn du, ja,

Jochen

ein Großteil der Pakete da draußen verwenden halt uralte

Jochen

Geschichten und du kannst es nicht mehr ändern, weil

Jochen

wenn du es änderst, dann brichst du all die Pakete.

Dominik

Wegschmeißen, neu machen, auf Features verzichten, vielleicht braucht man

Dominik

die alle gar nicht.

Dominik

Ich habe das Wesentliche

Dominik

konzentriert.

Jochen

Ja, aber genau, ich habe auch einmal so ein

Jochen

Cookie-Cutter-Template verwendet, also es gibt ja auch

Jochen

Python-Package

Jochen

Cookie-Cutter-Template von

Jochen

Pied Denny. Genau.

Jochen

Und das fand ich

Jochen

auch ganz nett, aber... Der übrigens auch auf Twitch streamt.

Jochen

Bitte? Der übrigens auch auf Twitch

Jochen

streamt. Ja, ja, richtig, genau. Das habe ich mir auch schon

Jochen

so ein bisschen

Jochen

angeguckt. Genau, fand ich auch gut.

Jochen

Ja, okay.

Jochen

Was ich auch ganz interessant finde,

Ronny

apropos Projektsetup,

Ronny

der Code, der jetzt in meinem Package drin ist,

Ronny

der ist natürlich auch logischerweise getestet.

Ronny

Also am Anfang war nicht so viel getestet.

Ronny

Logischerweise, natürlich, Ronny.

Ronny

Inzwischen ist er getestet, zumindest Großteils.

Ronny

Also die Sachen, die ich halt tatsächlich nutze,

Ronny

die sind jetzt auch getestet.

Ronny

Und am Anfang war es auch so,

Ronny

dass diese Testfiles dann einfach mit in dem Package gebandelt wurden.

Ronny

Also die Metatests quasi,

Ronny

also die Sachen, die das testen, was ich nachher ausliefere,

Ronny

mir ist dann nachher mal aufgefallen, die muss ich ja gar nicht mit ausliefern.

Ronny

Weil das interessiert einfach keinen.

Ronny

Vielleicht ist es ja doch, weil die

Ronny

wissen wollen, ob ich vernünftig das abgedeckt habe.

Ronny

Aber eigentlich liefere ich eine Datenmenge aus,

Ronny

die eigentlich nichts mit der eigentlichen Funktionalität zu tun hat.

Ronny

Und das war

Ronny

für mich so der erste Erkenntnispunkt.

Ronny

Sollte man mal reingucken, wie das damals mal irgendwie

Ronny

strukturiert hat, weil da kann man nämlich auch einstellen,

Ronny

welche Dateien dann von diesem Bundler gefunden

Ronny

werden sollen. Da habe ich mich mir direkt,

Ronny

als ich dann diesen besagten Bug mit den Übersetzungen

Ronny

gefixt habe und natürlich

Ronny

dann auch das erste Mal eine Pro-Datei

Ronny

in dem Projekt hatte, die waren

Ronny

natürlich nicht mit eingeschlossen. Das heißt,

Ronny

ich bandele das Ding wunderbar und dann

Ronny

klappt es halt nicht. Ich sage, das hat doch gerade lokal noch

Ronny

funktioniert. Ich bin auf die Idee gekommen, ich gucke mal

Ronny

in das Package rein, das installierte, ob das

Ronny

weil ich hatte es natürlich auch vorher mit Minus E installiert,

Ronny

also um es zu testen, da ging es mir natürlich

Ronny

und ja, also wenn man da

Ronny

irgendwie mal neue Dateiformate dazu baut, dann muss man

Ronny

die auch nochmal explizit angeben, je nachdem wie man es

Ronny

hat, ob man halt einschließend oder ausschließend hat, aber

Ronny

ja.

Jochen

mit den kleinen Hürden. Ja, das ist auch eine der häufigsten

Jochen

Sachen, die, wenn man so

Jochen

oder wie mir passiert, wenn man so ein GitHub-Action-Pipeline

Jochen

hat, die halt auch testet und so,

Jochen

das lokal funktioniert alles

Jochen

und dann macht man Push und dann geht die Pipeline

Jochen

kaputt und dann sagt man, hä, warum? Und ja, ganz oft

Jochen

ist es halt, weil in den Dev-Requirements

Jochen

irgendwas drin war, was man halt tatsächlich gebraucht hat,

Jochen

aber dann in den Produktions-Requirements nicht mehr und

Dominik

dann... Also ich würde sagen, war fast besser

Dominik

als andersrum, weil dann fällt es einem ja direkt auf und dann kann man

Dominik

es einbauen und so. Ja, das ist wahr.

Dominik

Dafür sind ja Pipelines dann auch da oder dann die E-Mail

Dominik

immer bekommt, dass das schon wieder kaputt gegangen ist oder so.

Dominik

da ist ja ganz praktisch

Dominik

ja

Dominik

Stichwort Pipelines

Dominik

hatten wir auch im Vorfeld

Ronny

noch drüber gesprochen, was ja bei

Ronny

GitHub sehr sehr cool ist, sind ja diese

Ronny

Travis Matrizen

Ronny

wo man, ich glaube Travis

Ronny

ist das Richtige, oder?

Ronny

Ja, die Tox-File, genau

Ronny

und Travis nutzt das dann

Dominik

Man kann da einstellen, wie viele verschiedenen Python-Versionen das einmal durchtragen

Ronny

Genau, mit welchen Django-Versionen und dann kann man halt

Ronny

relativ simpel in so einer Art YAML-Datei

Ronny

glaube ich ist das

Ronny

kann man dann halt eingeben

Ronny

und sagen, okay, ich unterstütze explizit

Ronny

Python 3.6.

Ronny

Genau, gehe ich durch

Ronny

und dann halt mit der und der Django-Version, da baut er dann

Ronny

eine Matrix auf und testet halt wirklich die Sachen

Ronny

gegeneinander durch. Und das ist halt sehr cool, weil

Ronny

auch wieder so eine Sache, man kann in der Setup oder

Ronny

wie auch immer man sein Projekt Meta deklariert,

Ronny

kann man halt auch explizit angeben, welche Django

Ronny

und Python oder was auch immer

Ronny

Versionen man unterstützt. Also ich bin ab

Dominik

3.8 und 3.2.

Dominik

Ja.

Dominik

Ich habe immer keine Lust auf Backward Compat.

Dominik

Ich will immer die neuen Features drin haben.

Dominik

Das Coole ist halt ...

Dominik

Das nutzt aber auch keiner, deswegen ist es auch egal.

Ronny

Das Coole an dieser Matrix ist halt,

Ronny

dass man halt erstens die Sachen halt

Ronny

sicherstellt. Also das, was man

Ronny

angibt, das geht. Das geht dann auch wirklich.

Ronny

Das ist halt sehr, sehr praktisch, weil wie schnell ist es,

Ronny

dass man sich bei, weiß ich, vor allem wenn man so

Ronny

Django-Admin-Extensions oder sowas baut, da erinnert sich ja so schnell

Ronny

mal irgendwas und dass dann plötzlich in irgendeiner

Ronny

Version irgendwas kaputt geht, der noch nicht da ist.

Ronny

Und das manuell zu testen, ist ja

Ronny

verrückt. Aber mit dieser Matrix gibst du

Ronny

die Sachen halt einfach ein.

Ronny

Problem gelöst, läuft. Da muss man sich ja nicht

Ronny

mal weiter drum kümmern. Das ist halt echt cool.

Ronny

Das bin ich auch tatsächlich, dadurch, dass

Ronny

wir intern GitLab

Ronny

nutzen, weiß ich gar nicht genau, wie das

Ronny

funktioniert. Das ist so ein Newscase, den man halt im

Ronny

normalen Verfahrensbereich nie hat. Also was ich auch

Dominik

sehr cool finde, sind diese ganzen, wenn wir jetzt

Dominik

bei GitHub schon sind, dann sind die ganzen GitHub-Actions,

Dominik

das habe ich bei GitLab noch nicht so hinbekommen. Und zwar

Dominik

kann ich ja aus Code

Dominik

Actions generieren, zum Beispiel, indem ich

Dominik

Tags in den Code reinschreibe.

Dominik

Und dann kann ich ja daraus dann bestimmte Dinge

Dominik

machen. Also ich könnte zum Beispiel direkt Issues erzeugen aus

Dominik

To-Do's oder aus Issues

Dominik

oder Fix-Me's, die halt irgendwo im Code drin stehen

Dominik

und habe halt dann direkt die Issues damit offen

Dominik

und das finde ich halt sehr nice, weil man halt dann das

Dominik

direkt auch schließen kann, wenn man das richtig

Dominik

konfiguriert und dann halt quasi gar nicht

Dominik

mehr seinen Code verlassen muss, um halt

Dominik

einen vernünftigen Issue-Tracker auch zu haben, wo sind denn die Issues,

Dominik

wo sind denn da noch was zu tun oder halt zu

Dominik

warten, wenn jemand anders kann halt direkt sehen, oh ja, da ist

Dominik

jetzt noch das Fix-Me offen, da muss ich jetzt einfach mal

Dominik

kurz gucken, dass ich da vielleicht was zu

Dominik

beitragen kann. Das ist schon sehr, sehr schön gemacht.

Dominik

Ja, das ist echt cool.

Dominik

Ja, wo du Pipelines sprachst, Pipelines sind eigentlich die Hölle,

Dominik

dass man irgendwie auf Produktionsumgebungen

Dominik

da kommen kann, wenn man eine einigermaßen komplexe

Dominik

Infrastruktur dann irgendwann da hat und

Dominik

bauen muss.

Dominik

Also ich habe da Jammelhölle im Moment von

Dominik

mehreren Jammelfiles, ich glaube es sind

Dominik

neun, die über

Dominik

2000 Zeilen jeweils lang sind, wo halt

Dominik

dann über irgendwelche Skripte passieren, die

Dominik

gemixt sind aus PowerShell

Dominik

und Bash und halt Python und

Dominik

dann passieren da komische

Dominik

Dinge und Versioning, tolles Versioning,

Dominik

Ich habe auch Semantic-Versioning eingebaut und ich wollte halt

Dominik

einfach die Version bekommen. Und da der Punkt, wo ich

Dominik

die Versionsnummer pinne, meine

Dominik

Pipe-Projekt-Hummel war oder ist,

Dominik

da habe ich mir gedacht, okay, ich passe die einfach und benutze

Dominik

die dann weiter. Und dann habe ich meine Version

Dominik

geändert von 0.9.9 auf

Dominik

0.9.10, weil es ging immer noch nicht

Dominik

weiter. Und bumm.

Dominik

Jetzt wäre eine Pipeline erst noch aneinandergeflogen, weil ich einfach den Rack-Ex

Dominik

falsch gepasst hatte. Aber solche Kleinigkeiten halt,

Dominik

dass halt sowas weg ist.

Dominik

Das ist halt lustig, aber solche kleinen Sachen,

Dominik

die führen halt immer dazu, dass eine Pipeline läuft, die

Dominik

manchmal ziemlich lange dauert.

Dominik

anderthalb Stunden oder länger.

Dominik

Ja, das klingt nach

Dominik

ein Problem, ehrlich gesagt.

Dominik

Ja, das ist nicht lustig und man hat

Dominik

halt auch irgendwelche Regeln von außen, die man gar nicht beeinflussen kann,

Dominik

die man sich halten muss und

Dominik

ja, man muss

Dominik

irgendwelche Türen aufmachen, da ein

Dominik

Kabel zwischenhängen, dann die Türe so wieder zumachen, dass nur

Dominik

das Kabel durchpasst und dann

Dominik

da durchrufen mit so Flüstertüten

Dominik

und dann am Ende muss man das alles wieder abhängen.

Dominik

Sowas, ja.

Dominik

Ja, ja. Furchtbar.

Jochen

Ja, also das ist auch

Jochen

irgendwie, ja, so wirklich gelöst

Jochen

ist das alles noch nicht auch irgendwie.

Dominik

Ich weiß nicht, ob der Produktionsrelease auch so eine Art Package ist.

Dominik

Also vielleicht, also das ist

Dominik

halt so, was wir halt zum Beispiel machen müssen, ist

Dominik

wir haben ja keine richtige Staging-

Dominik

Umgebung oder so. Das heißt, was wir machen ist,

Dominik

wir müssen quasi einmal Produktionsversionen

Dominik

komplett nachbauen

Dominik

und dann da ein Update drauf machen. Weil, wenn wir

Dominik

halt direkt eine neue Version bauen, dann kann es ja sein,

Dominik

dass das anders ist, als Produktion

Dominik

zu updaten. Und damit uns

Dominik

halt da nichts schief geht, müssen wir halt

Dominik

erstmals nachbauen. Das dauert halt dann immer doppelt so lange.

Dominik

Oder zweimal neu bauen musst.

Dominik

Und dann musst du am Ende, weil wir halt

Dominik

Budget und so, musst du halt die ganze Station-Gegend erstmal wieder abreißen,

Dominik

bevor du die Zone anfängst zu bauen.

Dominik

Deswegen dauert das halt auch alles immer so lange.

Dominik

Aber ja,

Dominik

das ist halt vielleicht auch was mit

Dominik

Paketierung zu tun.

Dominik

Ist das nicht so ganz public in dem Fall, aber

Ronny

Also ich glaube, wir hatten es ja vorhin ganz kurz

Ronny

schon angerissen. Ich glaube, eine Sache, die, wenn man

Ronny

so ein Package baut, die

Ronny

wirklich so ein bisschen, ja,

Ronny

unterm Radar läuft, weil es halt irgendwie niemand so gerne macht,

Ronny

ist halt einfach, dass man die Doku schreibt.

Ronny

Also es gab ja jetzt, glaube ich, letztes oder vorletztes JungleCon, diesen schönen Vortrag, Docs are didn't happen. Ich glaube, das war in Kopenhagen, ich glaube, das war vorletztes Mal. Das ist einfach, ich habe es halt auch gemerkt, dass jetzt, also selbst in meiner eigenen Firma, wo ich ja echt jetzt keine weiten Wege zu den Leuten habe, wenn ich sage, hey, da ist das drin, nutzt das mal, das ist halt eine Blackbox.

Ronny

Also selbst wenn du dann irgendwie, dass sich dann doch mal jemand irgendwie den Code reintraut und da mal rumguckt, wenn da halt nicht ordentlich dokumentiert ist, ich meine vielleicht mal irgendwo ein kurzer Docstring oder so, ist schon schwierig. Also da wirklich mal das irgendwie zusammenzuschreiben, das habe ich jetzt tatsächlich auch im letzten Quartal relativ viel gemacht und habe da mal bei Read the Docs da so ein bisschen Markdown mit Sphinx gepublished, also Sphinx kompliertes Markdown.

Dominik

Auch ein bisschen nervig mit Restructure-Test geht das immer besser.

Ronny

Ja, ich komme mit dem Dokumentformat irgendwie nicht.

Dominik

Nein, das ist recht, aber Sphinx macht das halt sehr ungern mit Markdown.

Ronny

Ich weiß, ich habe da mehrere, ich habe da so ein paar Adapter.

Jochen

Ja, man kann das halt ineinander konvertieren, genau.

Jochen

Ich habe so ein paar Adapter eingebaut.

Ronny

Musste ich auch ein bisschen googeln, aber inzwischen geht das jetzt ganz gut.

Ronny

Das bin ich ganz happy damit.

Ronny

Der war zwischendurch kaputt, der Adapter, ja.

Ronny

Ja, genau.

Ronny

Nein, aber das ist tatsächlich, da ist sehr, sehr viel,

Ronny

also dieses Dokumentieren und auch wenn man vielleicht nicht nur einfach sagt,

Ronny

so, das ist die Methode und die gibt,

Ronny

Sondern wenn man vielleicht auch so ein bisschen den Kontext herstellen möchte, so eine Art How-to, das wäre wahrscheinlich eher ein How-to, wie du vorhin bei deiner, also dass du sagst, hey, guck mal, ich habe diesen Use-Case, ich möchte wie Dartmark anonymisieren, habe ich hier irgendwie einen Rapper, der hilft dir.

Ronny

Oder wenn du irgendwie E-Mails testen möchtest, da habe ich hier eine Fernsehklasse oder ein Mix-In, das hilft dir, dass man die Leute auch ein bisschen abholt und erklärt, warum willst du das denn überhaupt nutzen, also welches Problem löse ich für dich.

Ronny

Wenn du dann nur sagst, so sieht der Code aus, dann hilft den Leuten das halt nicht.

Dominik

Wo ich das am liebsten mache und wie es irgendwie am besten auch funktioniert, dass das dann nicht nur aus meinem Kopf kommt, ist, wenn man das halt tatsächlich in Art Pair-Programming macht, wenn man halt dann gemeinsam mit seinem Team oder mit anderen Leuten drauf guckt und denen das quasi erklärt, was man da gebaut hat oder warum man das gebaut hat, weil dann fallen einem erstens so die ganzen Bugs auf, die man sonst übersieht, wenn man da irgendwie immer nur selber mit seinen eigenen vier Augen drauf schaut.

Dominik

Und dann halt am Ende, wenn man das den Leuten halt erklärt, kann man halt direkt das dann als Dockstring dann auch so reinschreiben, was das halt macht. Das macht meistens relativ viel Sinn. Und man merkt halt, dass nochmal der Name, den man da verwendet hat, irgendwie Quatsch ist und das macht man dann noch ein bisschen hübscher. Und dann so kommt man auf eine relativ gute Qualität, glaube ich. Das ist aber dann wirklich essentiell, dass man mit anderen Leuten das gemeinsam macht.

Dominik

Ja, also, das ist auf jeden Fall

Dominik

eine gute Idee.

Dominik

Und weil dann ist auch die Dokumentation

Dominik

in Ordnung. Also, was ich

Dominik

bei Dokumentationen oft merke, das ist,

Dominik

finde ich sehr nervig, habe ich auch noch keine Lösung für gefunden,

Dominik

die ist halt irgendwie hyperschnell veraltet.

Dominik

Das heißt, wenn ich mir irgendwie Mühe gebe, dass ich so detailliert

Dominik

aufschreibe, was denn da irgendwie gemacht werden muss,

Dominik

damit das dann das läuft, und dann muss ich dann

Dominik

ein oder zwei Wochen da nochmal Zeit reinstecken,

Dominik

wenn ich nicht jeden Tag irgendwie dann zehn Minuten wieder

Dominik

die Doku anpasse, die ist halt dann nach diesen zwei Wochen

Dominik

einfach nicht mehr benutzbar.

Dominik

So, das ist irgendwie ein bisschen blöd.

Dominik

Und das führt halt auch dann dazu, dass man

Dominik

nicht so Lust hat, dann das immer

Dominik

zu machen ordentlich. Also da hatte ja

Ronny

der Kalten Gipsen jetzt bei

Ronny

dieser DjangoCon einen Vortrag bezüglich

Ronny

wie dieses Static Dynamic Websites,

Ronny

Static Dynamic Pages

Jochen

hieß es, glaube ich. Ja, mit Zwings und

Ronny

Genau, ich habe vergessen, wie das Package heißt, das er gebaut hat.

Ronny

Müsste man mal nachschauen.

Ronny

Benutzt das dann einfach doch Strings irgendwie?

Ronny

Also die Idee dahinter ist, dass du quasi

Ronny

über Django

Ronny

Markdown, also du schreibst Markdown

Ronny

und das wird dann als Django HTML

Ronny

Template gerendert, rausgerendert

Dominik

und da... Hast du das nicht auch die Django-Docs, die da

Dominik

die Dokumentation, die tatsächlich in diesem Format irgendwie

Dominik

selber ist? Möglich, möglich.

Ronny

Auf jeden Fall, der hat das da halt ein Package draus gemacht und

Ronny

das ist halt, also ich glaube, ein

Ronny

Problem, das man damit lösen kann, ist halt genau

Ronny

also jetzt nicht Docstrings, weil die musst du halt

Ronny

die sind eh im Code, aber wenn du halt diese

Ronny

zum Beispiel so eine How-To-Dokumentation, bei mir

Ronny

läuft das halt irgendwie, ja es ist

Ronny

halt schon irgendwie im Code drin, aber ist auch

Ronny

irgendwie separat gehostet und

Ronny

wenn du jetzt, bei Packages ist es eh schwierig,

Ronny

weil die laufen ja nirgendwo, wenn das zum Beispiel sagt,

Ronny

ich möchte jetzt irgendwie Dokumentation für

Ronny

meine eigene Seite, also zum Beispiel ich möchte irgendwie

Ronny

die Business-Logik und die Technik und irgendwie sehr detailliert

Ronny

das aufschreiben, muss ich vielleicht, auch wenn es irgendwelche

Ronny

Compliance-Sachen gibt.

Dominik

Wie ging das nochmal mit dem Backup oder so, ja. Genau,

Ronny

und dass du die Sachen dann einfach direkt im Code,

Ronny

im gleichen Repo, im gleichen Commit machen kannst und dann

Ronny

zum Beispiel auch einfach da ein Linting

Ronny

reinbauen kannst, sagst ja, Moment mal, du hast da was angefasst,

Ronny

du hast dann das

Ronny

Markdown nicht dazu angepasst.

Ronny

Das sind, glaube ich, sehr, sehr coole Use-Cases. Dafür wäre man

Ronny

da halt wirklich, wenn das wirklich wichtig ist,

Ronny

du hast halt dann die Nähe

Ronny

von Dokumentation, die eigentlich sich weit weg anfühlt,

Ronny

das ist irgendwo ein Marktunterteil, die irgendwo umliegt

Ronny

und die irgendwo gehostet ist, dass du

Ronny

dann wirklich ins Projekt reinbringst.

Ronny

Ich habe es noch nicht ausprobiert tatsächlich, aber ich könnte mir

Ronny

vorstellen, dass das genau für solche Use Cases,

Ronny

also für sehr große Projekte, wo man

Ronny

das machen muss, das vielleicht so ein bisschen

Ronny

dann das näher bringt und damit auch die

Ronny

Motivation erhöht, dass man es auch wirklich tut.

Dominik

Also ich war ja echt Fan auch von diesen autogenerierten

Dominik

Sphinx-Docs, ja Autodoc aus den Docs-Sphinx heraus

Dominik

und so, dass einen halt so ein bisschen dazu zwingt,

Dominik

den Docsings aktuell zu halten. Aber noch

Dominik

besser sieht das tatsächlich, jetzt muss ich noch kurz

Dominik

verjochen und langsam brennen, dieses NBDEV aus, weil

Dominik

man in Notebooks halt das Markdown auch direkt

Dominik

mit reinschreiben kann, wenn das ordentlich

Dominik

aussieht. Man Notebook hat, was ordentlich aussieht

Dominik

und was dann automatisch

Dominik

dann zur Dokumentation von diesem Code führt,

Dominik

das dann irgendwie aus einem Guss hat. Das ist

Dominik

schon irgendwie sehr charmant für

Dominik

bestimmte Sachen. Gerade wenn man, glaube ich, so

Dominik

Pakete neu entwickelt, irgendwie das

Dominik

dann hinterher nochmal angucken will, das ist schon schön.

Dominik

Ja, ich sage mal so,

Jochen

gerade bei Data-Science-Geschichten

Jochen

ist es besonders schön, weil das halt

Jochen

zum Beispiel, man hat ja oft dann

Jochen

irgendwelche Visualisierungen.

Jochen

Die Visualisierung ist natürlich besonders.

Jochen

Das hast du ja sonst eigentlich, weiß ich nicht, wenn du jetzt

Jochen

ein Django-Paket hast oder so, hast du das im Grunde kaum.

Jochen

Insofern ist es da nicht so schlimm,

Jochen

wenn man das halt nicht im Notebook hat.

Jochen

Und auch wenn du bei so Data-Science-Geschichten,

Jochen

wenn jemand eine Visualisierung verbessern möchte,

Jochen

dann kannst du halt da in einem

Jochen

Pull-Request direkt den Unterschied in der

Jochen

Visualisierung sehen und direkt im Notebook

Jochen

und musst du halt nicht erst

Jochen

Paket bauen, also den Pull-Request

Jochen

bauen, den angucken, dann

Jochen

die Visualisierung dir anzeigen, erstmal bis dahin kommen.

Jochen

Das ist halt direkt da. Dafür ist es halt

Jochen

total super. Wenn man das jetzt gar nicht

Jochen

braucht, dann hilft

Jochen

es einem nicht so sehr, auch wenn es sonst auch ganz nett ist.

Jochen

Ich habe jetzt gerade nochmal geguckt.

Jochen

Ich glaube, das Paket ist Django

Jochen

Sphinx View von

Jochen

Carlton Gibson.

Jochen

Ja,

Jochen

ich finde das auch total interessant.

Jochen

Es gibt da so diverse Ansätze.

Jochen

Den kannte ich jetzt auch noch gar nicht mehr. War das auch

Jochen

überhaupt nicht klar, dass die Django-Dokumentation

Jochen

das so macht, dass das halt irgendwie

Jochen

ja,

Jochen

nur JSON ist, was im Grunde aus Sphinx rausfällt

Jochen

und dann man halt noch dynamische

Jochen

Geschichten mit dazu machen kann.

Jochen

Aber das ist auf jeden Fall auch

Jochen

eine sehr interessante Geschichte. Markdown, dann den

Jochen

Mistparser, dann das Ganze in

Jochen

Restructured Text, das Ganze dann

Jochen

wieder dynamisch vielleicht serven,

Jochen

ist sehr interessant.

Jochen

MBDev finde ich interessant. Ich finde

Jochen

voll interessant, was in dieser Vue.js

Jochen

Vue.js mache ich auch so ein bisschen, versuche ich auch

Jochen

reinzukommen, was die da machen, die nehmen ja

Jochen

VuePress beziehungsweise

Jochen

VitePress jetzt,

Jochen

genau, das ist auch total toll,

Jochen

das sieht super aus,

Dominik

bitte? Excuse me, Vite.

Dominik

Vite, ja, ich bin da auch,

Jochen

das ist auch so blöd, wenn man dann irgendwie,

Jochen

da habe ich auf irgendeinem

Jochen

Vue Meetup einen Vortrag

Jochen

über VitePress gehalten

Jochen

und dann VitePress gesagt

Jochen

oder sowas und dann kam die erste

Jochen

Frage und jemand hat gesagt, Vite.

Jochen

Ich hab's gerade gedacht.

Jochen

stundenlang jedes Mal falsch gesagt

Jochen

und ja, aber

Jochen

genau, so ist das halt und

Jochen

das ist aber, das ist auch voll toll, weil

Jochen

was daran super ist, ist, dass

Jochen

man direkt sieht, wenn man was an der Dokumentation

Jochen

ändert oder so, das ist halt sofort alles live

Jochen

während mit Sphinx und so, das ist ja dann doch

Jochen

eher so, man muss das erstmal dann irgendwie

Jochen

bauen und das dauert alles ein bisschen, bis

Jochen

dann auf der Webseite ist, dauert nochmal, also

Jochen

während bei Beatpress oder so,

Jochen

das ist halt sofort da, man editiert das quasi live,

Jochen

das ist halt auch

Jochen

ach, aber so

Jochen

das Rundum-sorglos-Ding

Jochen

für alles gibt es irgendwie nicht. Es gibt so

Jochen

diverse, sehr interessante

Jochen

Geschichten, die so in Teil-Communities

Jochen

irgendwie so

Jochen

entwickelt worden sind, aber

Dominik

Also ich würde auch fast sagen, also

Dominik

Weedpress irgendwie, also so

Dominik

ist schon nett für Markdown-Sachen,

Dominik

Markdown-Sachen husten oder hochladen, aber das generiert

Dominik

halt immer noch nicht deinen Content, ne? Den muss man halt immer noch

Jochen

selber schreiben, aber man

Jochen

kriegt den damit sehr gut aussehend hin, also die ganze

Jochen

also ich meine, die View-Dokumentation

Jochen

ist ja View-Press, weil das kann halt

Jochen

auch mal ein bisschen mehr, aber

Jochen

und das ist eigentlich,

Jochen

das ist auch alles Markdown, mehr oder weniger.

Jochen

Das sieht schon sehr schick aus,

Jochen

muss man sagen.

Jochen

Gerade auch im Vergleich zu Django-Dokumentationen.

Jochen

Django-Dokumentationen ist jetzt deutlich mehr und deutlich umfangreicher

Jochen

und vollständiger, aber

Jochen

also die Vue-Dokumentationen

Jochen

sieht schon besser aus.

Jochen

Und also das sind ja auch so kleine

Jochen

Animationen und diese ganzen Geschichten, die halt bei Vue

Jochen

so drin sind. Ja, es ist relativ

Dominik

einfach, dass da alles mit direkt auch als Paket

Dominik

kommt. Dann funktioniert das einfach.

Dominik

Das ist sowieso ein bisschen das Problem

Dominik

von Dango-Sachen, dass das immer so sehr statische

Dominik

Seiten sind immer.

Jochen

Ja, aber nicht unbedingt.

Dominik

Also ja, wenn man das halt hat, das macht man halt zum Beispiel

Dominik

wieder nicht, aber das ist halt dann unheimlicher

Dominik

Overhead, das dann halt in die Projekte dann alles mal reinzubringen

Dominik

und man muss halt eigentlich an mehreren Stellen dann gleichzeitig

Dominik

die Sachen bauen und das wird dann

Dominik

alles so ein bisschen, man verliert halt Features, die man

Dominik

vielleicht möchte oder so, das ist alles noch nicht

Dominik

so, ja, man hat halt immer

Dominik

Entscheidungen zu treffen, für welchen Case man was

Dominik

lieber möchte.

Dominik

Dass es allerdings war.

Dominik

Ja, Pakete. Jetzt hast du noch was,

Dominik

Ronny, du hast das noch.

Ronny

Also tatsächlich, ich habe

Ronny

jetzt noch so zwei, drei Kleinigkeiten, die

Ronny

mir jetzt aufgefallen sind, dass ich da, wie gesagt,

Ronny

jetzt so ein bisschen Streamlining gemacht habe,

Ronny

bei dem Package. Das eine

Ronny

ist, ich habe angefangen, bei allem, was ich

Ronny

anfasse, jetzt nochmal Type Hinting zu

Ronny

nutzen. Es ist ja so, wird ja kontrovers diskutiert,

Ronny

ob das jetzt gut oder schlecht ist. Also ganz radikal,

Dominik

jedes Argument in jeder einzelnen Methode.

Ronny

Ja, also es ist immer ein bisschen schwierig,

Ronny

wenn du halt Klassen hast, die aus dem eigenen

Ronny

Scope kommen, weil du halt dann super schnell in Circular

Ronny

Imports rennst. Da ist es dann so, dass ich

Ronny

zum Beispiel sage, okay, wenn ich jetzt, keine Ahnung,

Ronny

ein User-Query-Set habe, dass ich dann nicht

Ronny

sage, das gibt ein User-Query-Set zurück, sondern es gibt

Ronny

einfach nur Query-Set zurück. Also das ist das abstrakte

Ronny

Django-Ding, ja. Aber

Ronny

ich finde das halt super praktisch, also vor allem

Ronny

also... Aber ist das nicht falsch?

Ronny

Also wenn du halt

Ronny

eine... Ja, es ist halt

Ronny

der Vater, ne? Also es ist ja

Ronny

immer Typ Query-Set. Ja,

Dominik

na, ist dann nur die Base...

Jochen

Aber das ist schon, glaube ich, auch

Jochen

wie man das, man sollte halt irgendwie

Jochen

die Abstraktionen von der halt abhängen

Jochen

und die dann halt auch. Also im Endeffekt, wenn ich halt

Jochen

nix zurückgebe, also nicht halb hinter,

Ronny

dann weiß jemand nix. Wenn ich weiß, da kommt ein Query Set

Ronny

zurück, dann weiß ich immerhin schon mal, ey, das ist keine Liste.

Dominik

Ja, okay, aber das ist schon besser.

Dominik

Also man macht das ja

Dominik

in sowas wie TypeScript oder sowas so relativ

Dominik

detailliert, dass man irgendwelche Interfaces dann

Dominik

dafür baut, wo dann halt die Typen

Dominik

existent sind, die man aber auch verwenden muss, weil

Dominik

ansonsten ist das ja falsch. Also wenn du jetzt ein User Query Set hast,

Dominik

Vielleicht hast du ein Custom-Query-Set,

Dominik

wo du irgendwas Besonderes dran gemacht hast,

Dominik

irgendeine Methode, die andere Query-Sets nicht können.

Dominik

Und wenn du dann halt sagst, das ist nur ein Query-Set

Dominik

und dann kommt da irgendeine Methode, die Query-Sets gar nicht können,

Dominik

das wäre irgendwie seltsam dann.

Dominik

Und das müsste eigentlich auch gelintet werden, finde ich.

Ronny

Also du hast recht, es ist nicht ganz trennscharf.

Ronny

Dadurch, dass ich das Problem mit den Circular-Inputs

Ronny

noch nicht gelöst habe,

Ronny

und ich auch gar nicht weiß, was es für eine Lösung gibt,

Ronny

habe ich mich einfach dafür entschieden,

Ronny

ich gebe dem Nutzer halt einfach

Ronny

einen Ticken mehr

Ronny

Informationen mit.

Ronny

Verantwortung.

Ronny

Also meistens finde ich es eh, also sehr sinnvoll

Ronny

ist es vor allem eh bei trivialen

Ronny

Datentypen, weil du halt dann, ob es jetzt irgendwie

Ronny

Decimal oder Float oder ein Integer oder sowas ist,

Ronny

das macht ja schon, macht ja schnell irgendwie

Ronny

die Berechnung kaputt.

Ronny

Aber ich finde das tatsächlich praktisch, wenn du vor allem,

Ronny

wenn man so Helper-Methoden oder irgendwie

Ronny

Sachen hat, also wo andere dann meinen Code

Ronny

nutzen, ist das total praktisch, dass

Ronny

dir dann direkt die Idee schon anzeigt, so sorry,

Ronny

da stimmt irgendwas nicht. Genau, das ist, finde ich, auch das Wichtigste

Dominik

an diesen Type Lins in Python, dass du halt tatsächlich, wenn du

Dominik

den Lint richtig konfiguriert hast, während

Dominik

im Schreiben siehst, wenn du da irgendeinen

Dominik

Anspruch hast und das ist wirklich praktisch. Aber ich

Dominik

mündest auch tatsächlich meistens nur für komplexe

Dominik

Dinge, also wo es fraglich ist oder wo du nicht genau

Dominik

weißt, was es ist. Dann sage ich halt direkt, das ist jetzt explizit

Dominik

und die anderen Sachen, die gehen halt einfach so durch.

Dominik

Also tatsächlich

Ronny

auf der PyCologne,

Ronny

das ist ein Python-Meetup in Köln,

Ronny

das monatlich stattfindet,

Ronny

da hatte der

Ronny

Organisator mal irgendwann gesagt, dass er

Ronny

inzwischen jetzt übergegangen ist, dass er

Ronny

quasi in jeder Funktion, die er

Ronny

schreibt, das erzwingt, dass man die

Ronny

Keyword-Arguments nimmt. Das geht ganz einfach, indem man

Ronny

zum Beispiel aus einer Methode, das ist dann irgendwie

Ronny

von einer Klasse, da ist dann nur der erste

Ronny

Typ ist immer,

Ronny

nicht Typ, die erste Variable ist immer self.

Ronny

Und dann machst du Komma, Sternchen, Komma

Ronny

und danach deine anderen. Und dieses Sternchen

Ronny

sagst du dem quasi, es kommt hier

Ronny

quasi kein normales

Ronny

Argument und dahinter kommen die Keyword-Argumente.

Ronny

Das heißt, es ist verboten,

Ronny

dass du sagst, ich gebe den ersten Parameter normal

Ronny

rein. Habt ihr verstanden, was ich meine?

Dominik

Ja, also kein normales Argument

Dominik

gibt es nur Keyword-Argumente. Genau. Und das

Ronny

finde ich, also bei manchen Sachen ist es natürlich Unsinn.

Ronny

Ich meine, wenn du eine Sache hast, wo das auch

Ronny

klar ist, aber insbesondere bei so Methoden

Ronny

oder wenn man mal irgendwie dann doch mal so

Ronny

vor so einer Funktion steht, wo dann irgendwie doch mal so 3, 4, 5

Ronny

Sachen reingehen, was ja irgendwie auch so

Ronny

ein bisschen unlesbar ist. Ja. Da den

Ronny

User zu erzwingen, vor allem wenn da mal einer hinkommt

Ronny

und das irgendwie ein bisschen refactoren möchte,

Ronny

dann ist er auf jeden Fall sichergestellt, dass niemand

Ronny

aus Versehen, also zum Beispiel wenn man die Reihenfolge

Ronny

tauscht, man möchte irgendwas da vorne rein, dann

Ronny

kann man das einfach machen, weil es ist ein Keyword-Argument.

Dominik

Aber das schluckt ja nicht das mit dem ständigen Rest einfach weg dann?

Dominik

Ich überlege gerade, wo der dann rausfällt.

Jochen

Äh, nee, man kann auch noch ...

Jochen

Also der Argument wird ja wegschlucken,

Jochen

die würden einfach nicht mehr auftauchen,

Dominik

aber die werden halt nicht in den Keywords dann gemappt,

Dominik

die man eigentlich ...

Dominik

Nee, der macht dann tatsächlich einen Fehler.

Dominik

Der wirft da gar nichts, darf nur nicht.

Dominik

Also das ist sehr praktisch, weil ansonsten,

Ronny

das wäre ja blöd, wenn das passiert, was du sagst.

Ronny

Nee, tatsächlich sagt er dann,

Ronny

sorry, da müssen Keyword-Arguments drin sein.

Ronny

Okay.

Ronny

Und das finde ich, wie gesagt, es gibt Methoden,

Ronny

da macht das keinen Sinn,

Ronny

aber wenn das irgendwas sehr, sehr Wichtiges ist

Ronny

oder sehr, sehr ähnliche Variablen reinkommen.

Ronny

Dass man zum Beispiel, weiß ich nicht, du hast irgendwie User 1

Ronny

und User 2 oder sowas, die irgendwie eine andere Semantik

Ronny

haben, aber halt vom gleichen Typ

Ronny

sind und das einfach dann dir trotzdem zu Ende rechnen

Ronny

würde, was du da tust. Da finde ich das echt

Ronny

nett, wenn man das macht.

Ronny

Einfach, weil du halt

Ronny

dem weiteren User,

Ronny

ob du es du bist oder jemand anders, mehr

Ronny

Semantik erzwingst.

Ronny

Ja.

Dominik

Also explizit nur Keyword-Arguments

Dominik

erlaubt. Gibt es da nicht doch irgendwie ein Parameter für?

Jochen

Es gibt da irgendwas mit dem Slash, ich weiß es

Jochen

nicht mehr genau, es gibt, aber ich weiß

Jochen

jetzt auch nicht mehr genau, es gibt also Position-Only-Arguments,

Jochen

es gibt auch Keyword-Only-Arguments mit dem

Jochen

Stern, ja, aber

Jochen

genau, also ich, ja,

Jochen

ich würde jetzt sagen, genau, wenn man

Jochen

viele Argumente hat, dann ist erstmal,

Jochen

also ich würde sagen, naja, es gibt schon mal Fälle,

Jochen

wo das gut ist, aber, oder wo man

Jochen

das halt einfach braucht, aber wenn es jetzt so

Jochen

deutlich mehr als drei werden, dann denke ich mir schon

Jochen

so, okay, kann man das nicht vielleicht irgendwie anders machen, weil

Jochen

das kann sich ja eh keiner merken.

Jochen

Also ich meine, wenn die Idee das vervollständigt, okay, dann geht's

Jochen

vielleicht, aber ansonsten

Dominik

Wenn man ja immer durchpipen muss durch

Dominik

mehrere Ebenen. Was ich dann oft

Dominik

sehe, ist halt irgendwie,

Jochen

oder wo ich denke, da macht es dann nicht mehr so viel Sinn,

Jochen

ist halt, du hast eine Riesenliste, wo dann

Jochen

Leute dann anfangen, okay, Funktion geht

Jochen

auf, Klammer auf und dann kommt dann halt irgendwie so

Jochen

eine Riesenliste von

Jochen

Zeug, Klammer zu und dann kommen erstmal

Jochen

100 Zeilen Überprüfung, was man denn da

Jochen

bekommen hat und

Jochen

Fehlerbehandlung, wenn das irgendwie nicht so richtig

Jochen

zusammenpasst und so. Und ich denke so, ja, okay.

Jochen

Das kann man

Jochen

bestimmt irgendwie besser machen.

Jochen

Ja, aber ja.

Jochen

Ja, es ist schon

Jochen

interessant. Ja, überhaupt diese ganze Type-Hinting-Geschichte

Jochen

oder so, da bin ich auch noch nicht so richtig.

Jochen

Ich mag es natürlich, wenn die IDE mir hilft

Jochen

und irgendwie Dinge vorschlägt oder unterkringelt,

Jochen

wo ich es dann einen Fehler gemacht habe.

Jochen

Kann Wim das auch?

Jochen

Kann Wim das auch, gutes Linting?

Jochen

Ich weiß es gar nicht.

Jochen

Ich habe das nie wirklich verwendet, glaube ich.

Dominik

Also irgendwer aus dem Off-Drive bestimmt ja.

Jochen

Das geht bestimmt, ja. Ich habe das jetzt aber gar nicht

Jochen

da drin verwendet bisher.

Jochen

Ja, ich habe das auch selber, benutze ich das

Jochen

fast nie, weil ich würde sagen,

Jochen

es macht ja eigentlich auch, also wäre jetzt mein

Jochen

Bauchgefühl nur dann Sinn, wenn man Pakete

Jochen

schreibt, die dann halt irgendwie von anderen Leuten verwendet

Jochen

werden und das mache ich eigentlich auch nicht so richtig

Jochen

häufig, daher

Jochen

ja, ich habe das, aber müssen wir mal eine Sendung

Jochen

zu machen und muss ich mich damit beschäftigen, das wollte ich

Jochen

auch schon immer mal tun, das ist wirklich ein guter Grund, das mal zu

Jochen

machen, ja.

Ronny

Ja und sonst, was ich auch ganz praktisch

Ronny

finde, wie gesagt, man kann halt über diese,

Ronny

über die Projektmeta oder Package-Metadaten

Ronny

kann man halt super viele praktische

Ronny

Sachen mitgeben und da die Piper-Seite halt

Ronny

wirklich, die gibt da unendlich viel vor

Ronny

und viele Packages, die man so sieht, die nutzen das alles

Ronny

gar nicht, was sehr schade ist. Also nicht nur, dass du

Ronny

halt dann direkt an vorgegebener Stelle den Bug-Tracker,

Ronny

das Repo, den Maintainer,

Ronny

keine Ahnung was mitgeben kannst, du kannst halt auch

Ronny

diese Badges nehmen, wo du dann zum Beispiel

Ronny

dann sagst, hey, hier, das ist die aktuelle Piper-Version

Ronny

oder der Bild läuft durch oder meine Docs funktionieren.

Ronny

Es gibt ganz unendlich viele Sachen,

Ronny

unendlich viele Tools, die man da einfach anbinden

Ronny

kann und damit kann man halt,

Ronny

wenn man halt mal ein Package macht und auch gerne möchte,

Ronny

dass Leute das nutzen, kann man halt sehr viel

Ronny

ja, es ist einfach aufpeppen die Seite.

Ronny

Du hast ein bisschen Convenience dazu benutzt.

Ronny

Genau, Convenience und auch die Leute einfach so ein bisschen

Ronny

so, hey, guck mal, ich weiß, was ich hier tue.

Ronny

Ich habe ja irgendwie an alles gedacht. Auch bei diesen,

Ronny

da gibt es auch so Metadaten, wo du zum Beispiel sagen kannst,

Ronny

in welchem Status befindet sich das? Ist das gerade eine Alpha?

Ronny

Ist das eine Beta? Ist das Production-Ready?

Ronny

Da kannst du genau auflisten,

Ronny

welche Dependencies, was ich vorhin schon meinte,

Ronny

bei der Matrix, die und die Python-Version

Ronny

unterstütze ich, die und die Django-Version unterstütze ich.

Ronny

Ist halt super praktisch, wenn halt jemand kommt,

Ronny

der einfach gerade ein bisschen browset bei PyPy und einfach sucht,

Ronny

okay, ich möchte jetzt mein Problem lösen, welches Package

Ronny

geht denn für mich? Ich habe vielleicht eine Nebenbedingung,

Ronny

weiß ich nicht, ich bin noch auf Django 2 oder sowas und

Ronny

kann nicht so ohne weiteres hochgehen und dann

Ronny

einfach siehst, ach cool, dann zerstützt das, steht da, da muss man nicht

Ronny

irgendwie sich lange durch Dokus durchgraben oder

Ronny

weiß der Geier, aber es ist einfach super convenient

Ronny

und da gibt es sehr viel,

Ronny

ich mache das tatsächlich immer so, dass wenn ich

Ronny

irgendein Package gefunden habe, dass das sehr ausführlich

Ronny

nutzt, dann gucke ich mir GitHub an und klau

Ronny

dann da die Sachen und schaue es

Ronny

mir ab, was man da alles machen kann.

Dominik

Also gut geklaut ist halb gewonnen.

Jochen

Ja, ja, auf jeden Fall. Oh, das wollte ich eben noch

Jochen

sagen, das habe ich dann irgendwie vergessen.

Jochen

Genau, also Tests, ja.

Jochen

Inzwischen mache ich das auch

Jochen

meistens so, dass ich dann halt die Tests in einem Verzeichnis habe und das kommt halt

Jochen

nicht mit ins Paket.

Jochen

Ich lese mir oft,

Jochen

wenn ich jetzt wirklich verstehen will, was

Jochen

irgendwie Software macht, dann fange ich oft mit

Jochen

den Tests an, mir die anzugucken, aber da habe ich meistens

Jochen

sowieso einen Checkout von dem Repository,

Jochen

dass ich dann in das Paket

Jochen

selber reingucke.

Jochen

Nee, eigentlich auch nicht.

Jochen

Insofern, genau, ich mache das inzwischen

Jochen

auch so, dass die Tests halt nicht mehr in dem Paket mit drin sind.

Jochen

Ja, man kann schöne Sachen mit Paketen machen.

Jochen

Auf jeden Fall. Habt ihr noch was?

Jochen

Ja, also ein großer Teil, den wir jetzt nicht

Jochen

haben, aber vielleicht machen wir den dann auch mal irgendwann anders,

Jochen

weil es jetzt auch gar nicht so, das betrifft

Jochen

ja auch eher wieder so den Data Science

Jochen

Teil

Jochen

Conda. Das ist natürlich auch wieder eigene

Jochen

Pakete. Im Grunde auch eigener

Jochen

Teil wäre halt sowas wie irgendwie, baue ich

Jochen

ein Binary, einfach

Jochen

dass ich ein executable Ding

Jochen

irgendwie bauen kann.

Jochen

Das hätte man jetzt auch

Jochen

hier noch machen können, aber

Jochen

ich bin nicht vorbereitet.

Jochen

Müssen wir uns das Ganze nochmal angucken, wie das so funktioniert.

Dominik

Ich habe gerade das Benutzen, Leute. Also ich bin

Dominik

kein Fan davon persönlich, aber

Dominik

es nimmt sehr viel Kontrolle,

Dominik

die ich nicht abgeben möchte, immer ab.

Dominik

Deswegen muss man es immer so im Zaum halten.

Dominik

Conner. Achso.

Dominik

Wieso? Also es ist relativ intrusiv.

Dominik

Das heißt, man kann es nicht einfach so daneben

Dominik

den Rest packen. Also ich muss

Dominik

zum Beispiel, um es mit PyEnv zu benutzen

Dominik

und als PyEnv zu funktionieren, mal so ein bisschen

Dominik

rumhacken, dass das vernünftig geht.

Jochen

Ja, manchmal funktioniert es halt auch nicht mehr richtig,

Jochen

das stimmt schon. Oder es macht halt

Dominik

irgendwelche Pfade kaputt oder schreibt

Dominik

sich in irgendwelche System-Conflicts rein, wo es eigentlich

Dominik

gar nichts zu suchen hat, wo man es dann wieder rauslöschen muss und so.

Dominik

Ja, anstrengend.

Dominik

Genau, aber

Jochen

ist auf jeden Fall auch noch eine interessante Geschichte.

Jochen

Ja, ansonsten

Jochen

ne, war es nicht.

Jochen

Fällt mir jetzt auch

Jochen

nichts mehr ein.

Ronny

Ja, ich glaube eine Sache, die ist noch ganz cool, also ich habe tatsächlich gemerkt, dass selbst wenn ich Code schreibe, dann bemühe ich mich denen ja auch, dass der ordentlich ist, dass der getestet ist und so weiter, aber sobald man dann anfängt, den in Package zu legen, fallen einem sofort noch 10 Use Cases ein, die man eigentlich noch mit abdecken sollte und die Codequalität ist auf jeden Fall nachher immer nochmal 20-30% besser gefühlt, wenn ich das wirklich Package-ready gemacht habe.

Ronny

Einfach, weil man dann denkt, ach komm, irgendwie du hast so ein Spezial für dein Projekt, ja, das weiß ich nicht, du hast so ein separates User-Model, ja, ist okay, das lasse ich einfach so nachdenken.

Ronny

Nee, das funktioniert nicht so, das muss man nochmal sauber ziehen und gerade ziehen.

Ronny

Also das kann tatsächlich sehr, sehr pädagogisch wertvoll sein, einfach die Sachen mal zu versuchen auszulagern, weil man irgendwas Cooles gebaut hat.

Ronny

Ja, auf jeden Fall.

Ronny

Ja.

Jochen

Ja, wollen wir noch Pics machen?

Jochen

Habt ihr Pics der Woche?

Jochen

Etwas, ja.

Jochen

Ja, okay. Dann bitte dann.

Jochen

Allerdings ist es kein

Jochen

Paket oder keine Software, sondern

Jochen

es ist ein Artikel.

Jochen

Ist aber auch lang.

Jochen

Habt mal viel Spaß mit.

Jochen

Aufwand

Jochen

Subclassing in

Jochen

Python Redux.

Jochen

Ich weiß nicht, ob wir den...

Jochen

Du kannst das doch mal wiederholen, bitte.

Jochen

Subclassing in Python Redux.

Jochen

Ja.

Jochen

Am 20. Juni rausgekommen ist jetzt,

Jochen

also gefühlt noch gar nicht so lange her, vielleicht eine Woche

Jochen

oder müsste eigentlich mehr, etwas mehr

Jochen

als eine Woche vielleicht sogar. Ja, ich glaube eine Woche

Jochen

und zwei Tage, Jochen. Kann sein.

Jochen

Ist auf jeden Fall sehr interessant, genau.

Jochen

Schöner, langer Artikel, wo er

Jochen

irgendwie so seine Erfahrungen über die letzten

Jochen

paar Jahre viel beschreibt und

Jochen

was alles nicht funktioniert. Er verlinkt auch viele

Jochen

sehr interessante Quellen und

Jochen

genau, das ist so, die Erfahrung

Jochen

habe ich auf jeden Fall auch schon gemacht, dass

Jochen

wenn man Interfaces so,

Jochen

auch wenn man Libraries schreibt, so definiert,

Jochen

dass es halt, dass sie darauf basieren, dass man

Jochen

dann irgendwie

Jochen

von den Sachen erbt, die man da geschrieben hat,

Jochen

dann

Jochen

hat man so am Anfang das Gefühl, das ist voll gut

Jochen

und dann irgendwann denkt man sich, oh mein Gott, was habe ich getan?

Jochen

Das ist alles schrecklich.

Jochen

Ich komme da nicht wieder raus.

Jochen

Und ja,

Jochen

das ist auf jeden Fall,

Jochen

sollte man sich mal die Zeit nehmen,

Jochen

wenn man so einen langen, dunklen Nachmittag,

Jochen

jetzt ist gerade Sommer,

Jochen

Zeit hat, dich das mal durchlesen.

Jochen

Da ist viel lehrreiches Zeug drin.

Jochen

Sehr, sehr gut. Guter Artikel.

Jochen

Okay, interessant.

Jochen

Ronny, hast du auch

Jochen

einen Pick der Woche?

Jochen

Ein Modul, das du wahrscheinlich hast?

Jochen

Ich glaube

Ronny

tatsächlich gerade nicht aus dem

Ronny

MFF. Oder irgendein Talk

Ronny

oder irgendwas Interessantes?

Ronny

Ja gut, ich meine,

Ronny

Dominik hat es ja gerade schon irgendwie fünfmal angesprochen,

Ronny

dieser erste Talk von der JungleCon mit dem

Ronny

Programming for Pleasure.

Ronny

Ach ja, okay.

Ronny

Ich meine, das war so schön heretisch.

Ronny

das hat auf jeden Fall

Ronny

sehr, sehr viel Spaß gemacht, den zu hören und

Ronny

ich glaube, dass der Talk

Ronny

ist so meta, den kann man sich auch gut anhören, wenn man

Ronny

selbst nicht so tief im

Ronny

Coding drin ist. Das wäre vielleicht auch

Jochen

nochmal ganz interessant, es passt jetzt zwar nicht so richtig

Jochen

da rein, aber wie war denn die DjangoCon,

Jochen

wie ist das eigentlich aus

Jochen

Sicht, ihr wart ja ja irgendwie

Jochen

Sponsor als Firma,

Jochen

wie war das eigentlich sozusagen

Jochen

aus dem Blickwinkel?

Jochen

Ja, es ist schon, also wir haben uns

Jochen

alle immer, also wir haben mit

Ronny

paar wenigen Leuten im Büro geguckt,

Ronny

also ein paar Leute haben von zu Hause geschaut, ein paar wenige Leute waren

Ronny

im Büro und Corona und so ist ja alles nicht so einfach

Ronny

und haben uns

Ronny

natürlich alle immer schon gefreut, wenn dann unser

Ronny

nagelneues Promo-Video dann da über

Ronny

ein Bildschirm gelaufen ist

Ronny

und ja, ist auf jeden Fall auch

Ronny

cool, also irgendwie da das mit zu unterstützen

Ronny

und auch irgendwie ein bisschen

Ronny

was zurückgeben zu können, weil

Ronny

wir nutzen ja schon Dango irgendwie sehr, sehr viel

Ronny

Und ja, ansonsten, man kriegt da halt so ein paar Möglichkeiten. Du kannst dann einen Job-Offer im Slack posten, du kriegst einen Kanal, den du dann bearbeiten kannst. Das haben wir tatsächlich gar nicht so wirklich gemacht, weil wir hatten da irgendwie gar nicht so drüber nachgedacht, sage ich mal.

Ronny

Also, weil es war einfach so, ja klar, wir sind im Slack, unterschreibst du mit den Leuten und haben sich noch ein paar Leute gefragt wegen den Bewerbungen, wie es denn damit aussieht und wie es denn ist mit, wenn man halt irgendwie kein Deutsch kann und mit Remote und alles mögliche, aber da haben halt manche Firmen, haben da halt dann richtig Party gemacht in ihrem Kanal und richtig dann da den Kanal bearbeitet und ist eigentlich auch ganz cool, weil das da so ein bisschen ein anderes Element dazu gibt, weil das ja, es ist irgendwie, also ich weiß gar nicht, wer das war, ob das Lautzwurm war oder einer von denen auf jeden Fall,

Ronny

die hatten auf jeden Fall da richtig viel,

Ronny

da ging richtig viel rund.

Jochen

Six Feet Up ist, glaube ich, die Firma, die das

Jochen

gebaut hat oder so.

Jochen

Ich wüsste, Six Feet Under.

Jochen

Und das

Ronny

ist eigentlich schon ganz cool, weil das ist irgendwie auch eine ganz

Ronny

coole App, mit den Leuten so auch jetzt als Firma

Ronny

zu interagieren, ohne dass man jetzt irgendwie so direkt mit

Ronny

der Mega-Werbe-Call oder sowas kommt und sagt,

Ronny

hey, ich will euch was verkaufen.

Ronny

Von daher denke ich mal, also wir haben

Ronny

ja jetzt schon, das war jetzt die dritte

Ronny

Con-Folge, die wir gesponsert haben oder die vierte.

Ronny

Das war mir auch gar nicht klar. Aber wir waren diesmal

Ronny

ein Sponsortyp höher. Also ich glaube, wir waren jetzt Silber

Ronny

und davor waren wir immer Bronze.

Ronny

Aber tatsächlich

Ronny

glaube ich, würden wir das nächste Mal auch mal

Ronny

gucken, dass wir da dann auch ein bisschen mehr

Ronny

das nutzen, die Möglichkeiten, die man da bekommt.

Ronny

Weil wie gesagt, das ist schon cool und

Ronny

auch da irgendwie so einen direkten Draht zu den Leuten zu haben

Ronny

und ja, ich meine klar, wenn du

Ronny

vor Ort bist, ist eh nochmal alles anders. Da hängt ja jetzt nicht jeder

Ronny

zwingend am Laptop, aber

Ronny

das ist schon,

Ronny

ich denke mal auch, ich tippe mal, dass

Ronny

dieses Hybrid-Ding wird auch einfach bleiben.

Ronny

Ja, haben viele Leute gesagt, hm?

Ronny

Ja, vor allem, ich meine, es ist auch einfach, keine Ahnung,

Ronny

es waren, glaube ich, 700 Leute oder so im Slack,

Ronny

habe ich gesehen und normalerweise sind Django-Cons auf 300

Ronny

irgendwas begrenzt oder 400 oder so.

Ronny

Super viele Leute, die halt gerne irgendwie quasi

Ronny

denen das Geld geben möchten und gerne dabei sein möchten,

Ronny

aber eh nicht können, weil die halt irgendwo

Ronny

ganz weit weg wohnen oder keine Kohle haben

Ronny

oder keinen Urlaub kriegen oder so und

Ronny

die Leute einfach mitzunehmen und

Ronny

trotzdem teilhaben zu lassen, ist halt schon cool.

Ronny

Mhm, ja.

Ronny

Stimmt, so ein Lohlehrblick.

Ronny

Ich bin noch nicht so ganz sicher,

Dominik

ich finde das schon wichtig, diese Inklusion, aber

Dominik

so live treffen, ich vermisse zum Beispiel

Dominik

das beim Meetup, beim Django-Meetup, ne?

Dominik

Ich finde es viel schöner, euch da persönlich zu sehen.

Ronny

Absolut, also ich würde nicht sagen, dass man das

Ronny

nur noch macht, aber es wird immer

Ronny

Leute geben, wie uns drei, die da wirklich

Ronny

Spaß dran haben, die da gerne irgendwo hingehen,

Ronny

aber es gibt halt auch Leute, die halt einfach

Ronny

vollkommen zufrieden sind, das so auch als

Ronny

so ein Radio-Event oder so was,

Ronny

oder so ein Fernsehen halt irgendwie nebenher laufen

Dominik

zu lassen. Manchmal ist es weniger Commitment,

Dominik

es ist mehr so Leeching

Dominik

und die Frage ist halt, es gibt natürlich auch die Ausnahmen

Dominik

mit Leuten, die eigentlich gerne was machen

Dominik

würden, aber sich nicht trauen rauszugehen, das ist halt

Dominik

immer so schwierig, an welcher Seite

Dominik

setzt du da jetzt

Dominik

an und das irgendwie, ich habe noch nicht so

Dominik

rausgefunden, was denn da die ideale

Dominik

Hybridform von ist, wie man das machen kann, ob es

Dominik

verschiedene Sachen dazu geben muss vielleicht. Aber ich glaube also

Ronny

jetzt bei der Django-Community, glaube ich, gibt es so viele Leute, die

Ronny

da wirklich Spaß dran haben, die Tickets sind ja auch eigentlich immer

Ronny

ausverkauft, also die Vorort-Tickets, da muss man sich

Ronny

glaube ich keine Sorgen machen, dass man sich da selbst kannibalisiert,

Ronny

also das kann ich mir jetzt nicht vorstellen.

Ronny

Ich meine, beim Dago-Meetup

Ronny

jetzt

Ronny

werden wir auch, ich meine, es ist frei,

Ronny

wie es mit Corona und so weiter geht, aber

Ronny

ist es auch der Plan, dass wir jetzt vielleicht beim

Ronny

übernächsten Mal auch wieder das im Büro machen?

Ronny

Am nächsten Mal müssen wir mal schauen, wie das so klappt.

Ronny

Aber, dass man

Ronny

auch sagt, komm, wir stellen auf jeden Fall

Ronny

einfach eine Cam auf und wenn jemand halt Lust hat,

Ronny

sich irgendwie remote dazu zu schalten, dann machen wir das halt.

Ronny

Ich weiß auch nicht, ob das gut funktioniert,

Ronny

ob das irgendwie doof ist, ob dann vielleicht alle Leute eh sagen,

Ronny

boah, geil, vor Ort Bier trinken,

Ronny

keine Ahnung, mit Leuten

Ronny

reden, sozialisieren,

Ronny

das ist viel besser, das braucht man

Ronny

gar nicht, aber ich glaube, die Möglichkeit würde

Ronny

ich jetzt einfach schon anbieten, weil, wie gesagt, für manche

Ronny

Leute, die dann halt irgendwo von weiter weg kommen oder

Ronny

ja, keine Ahnung, wenn jemand in der Eifel oder

Ronny

sowas, also jetzt hier, ne, Kölner Raum,

Ronny

Eifel ist ja irgendwie so.

Ronny

Janz weit draußen.

Ronny

Ist dann halt teilweise vor allem abends ziemlich schwierig, hin und zurück zu kommen,

Ronny

wenn du irgendwie nicht extra ein Auto fährst oder so

Ronny

und einfach die Leute dann auch mitnehmen,

Ronny

mitzunehmen, wenn die da Spaß dran haben,

Ronny

das fände ich schon gut, das möglich zu machen.

Ronny

Wie gesagt, wir müssen mal gucken, welchen Modus wir nachher dann

Ronny

tatsächlich fahren, aber

Ronny

ich tippe mal, dass wir

Ronny

wahrscheinlich auf Hybrid gehen.

Dominik

Du warst auch in Berlin beim Django Meetup

Dominik

hast du erzählt. Ja genau, ich

Ronny

bin vom Philipp, der ist jetzt seit Januar

Ronny

der Organisator davon, angeschrieben worden

Ronny

über LinkedIn, hat mich gefunden und

Ronny

hatte mich nach ein bisschen Austausch gefragt

Ronny

und haben uns direkt sehr gut verstanden

Ronny

und dann habe ich

Ronny

einen Gastvortrag gemacht

Ronny

und habe ein kleines

Ronny

persönliches, very strongly opinionated

Ronny

Best of der DjangoCon.

Ronny

Okay.

Ronny

Zum Besten gegeben.

Ronny

Zum Besten gegeben, genau.

Ronny

Ich dachte, du hättest über Packages geredet, schade.

Ronny

Nein.

Ronny

Und ja, einfach quasi kurz erzählt, was die Talks sind

Ronny

und einfach den Leuten einfach so,

Ronny

hey, wenn du dich für dieses Thema interessierst,

Ronny

dann kann dieser Vortrag für dich interessant sein.

Ronny

Vorträge, die so ein bisschen mir vorbeigegangen sind,

Ronny

habe ich dann auch relativ offen dann gesagt,

Ronny

dass das bei mir persönlich vorbeigegangen ist.

Ronny

Aber mir ging es auch gar nicht darum,

Ronny

zu sagen, irgendwer ist doof oder so,

Ronny

sondern das waren wirklich so meine Eindrücke,

Ronny

die ich quasi beim Davor-Sitzen acht Stunden am Tag

Ronny

mir aufgenommen habe und einfach dann

Ronny

so, ja, keine Ahnung, also

Ronny

zum Beispiel gab es einen Talk über diese

Ronny

Interactive Shells, das ist einfach nicht meine Welt

Ronny

gewesen. Ich habe noch nie

Ronny

ansatzweise mit diesen

Ronny

Sachen arbeiten müssen und mehr

Ronny

als irgendwie mal mit der Django Shell mal kurz ein Model

Ronny

irgendwie aus der Datenbank holen, habe ich halt noch nicht gemacht,

Ronny

so ungefähr, ja. Und dann irgendwie zu sagen, ich will

Ronny

da irgendwie ein Betriebssystem drauf installieren oder sowas,

Ronny

es war einfach sehr weit

Ronny

weg. Was nicht heißt, dass der Talk

Ronny

schlecht war oder sowas, das hat mich halt als Webentwickler

Ronny

einfach nicht abgeholt.

Ronny

Was ja auch total legitim ist. Es ist ja auch schön, dass das breiten

Ronny

Wissen ist, aber das ist im Endeffekt

Ronny

das, was ich dann da so ein bisschen

Ronny

erzählt habe einfach.

Ronny

So hey, wenn ihr euch dafür interessiert, ist das cool

Ronny

und so, dass man halt dann, weil

Ronny

wenn man nicht dabei war, dann

Ronny

trotzdem vielleicht so ein paar Ideen

Ronny

hat, wenn es dann irgendwann mal auf YouTube kommt. Ich glaube, die wollten,

Ronny

dass die so die nächste Woche mal online stellen, die

Ronny

Talks. Ich weiß gar nicht, ob das schon gemacht wird.

Dominik

Ich glaube, ein Monat, das müsste ja genau dieses

Dominik

Wochenende sein. Wann war die JungleCon?

Dominik

2. Juni oder so? 2. bis 6. Juni, ja.

Dominik

Genau, und das haben wir ja. Ja, morgen ist es

Jochen

weiter. Also, genau, mal gucken.

Jochen

Ich werde das auf jeden Fall dann auch noch in die

Jochen

Shownotes packen, wenn sich das

Jochen

geben sollte. Sehr interessant.

Dominik

Ach so, ich habe auch noch einen Pick der Woche. Ja.

Dominik

Und zwar, ich weiß nicht, ob ihr TLDR kennt.

Dominik

Das gibt es auch auf PyPy

Dominik

und das ist eigentlich so ein Shell-Tool.

Dominik

Ihr kennt bestimmt Mand, ne? Linux-Command,

Dominik

um sich die Mand-Pages anzugucken

Dominik

von einem Command. Was macht denn das? Und TLDR

Dominik

geht einen bisschen anderen Weg, ist aber sehr, sehr geil.

Dominik

Also, ich stehe im Moment total drauf.

Dominik

Du kannst einfach das Gleiche machen wie bei Main, das heißt,

Dominik

gibst TLDR und Command-Name ein und es zeigt dir nicht

Dominik

die Main-Pages an, sondern die häufigsten

Dominik

vier oder fünf Use-Cases, wie man

Dominik

das Ding benutzt. Ah, okay, ja, das ist super.

Dominik

Das ist echt geil, weil du siehst halt direkt, wie man das benutzen

Dominik

kann, wenn man das benutzen will und musst nicht erst mal

Dominik

irgendwie in den Main-Pages gucken, wie war das und

Dominik

was heißt denn der Parameter? Nee, du siehst halt direkt

Dominik

irgendwie, wie ging das jetzt noch mal

Dominik

mit dem Grab oder mit dem Find und dann weißt du

Dominik

direkt, ah, so benutzt man das, ah, total super und

Dominik

cool. Richtig on short

Dominik

auf einer kleinen Seite, das ist auch meistens wirklich nur

Dominik

passt alles auf eine Seite, kannst du angucken.

Dominik

Mega geil, kann ich echt empfehlen.

Dominik

Das habe ich gefunden als Teil über die

Dominik

modernen Linux-Commands oder sowas.

Dominik

Ah, okay.

Dominik

Muss man vielleicht auch unbedingt nicht schon los.

Dominik

Das heißt tatsächlich, modern Linux,

Dominik

muss ich kurz gucken, ja genau, modern Unix, Entschuldigung,

Dominik

nicht Linux, es gibt ja einen Unterschied,

Dominik

von Ibrahimdiv

Dominik

und das ist sehr schön, gibt es die

Dominik

verschiedensten Erweiterungen.

Jochen

Okay, doch, das habe ich, genau, Watt, XR, ja, ja.

Dominik

Genau, genau, da ist auch TLDR dabei.

Dominik

Und viele, also tolle

Dominik

Implementierung auch in Rust und so, aber das ist

Dominik

ja, sehr nice, wenn man modernen Linux

Dominik

mag, Eudonics mag und

Dominik

ja, der TLDR ist auch auf PiPi tatsächlich und

Dominik

kann sich einfach

Dominik

an die Stelle ziehen und macht Spaß.

Jochen

Ja, sehr cool. Wunderbar. Muss ich auch mal angucken.

Jochen

Vorrangig.

Dominik

Ja, ich glaube, wir sind am Ende für diese Folge.

Dominik

Wir finden, dass du wieder da warst, Ronny.

Dominik

Vielen Dank, dass ich dir Spaß gemacht habe.

Dominik

Viel Spaß gemacht, ja.

Dominik

Ja, und ich würde euch

Dominik

sagen, hört uns, wann ihr uns hören wollt.

Dominik

Bleibt uns gewogen. Morgens, mittags, abends,

Dominik

nachts beim Fahrradfahren.

Dominik

Pass trotzdem ein bisschen auf und bleib gesund.

Dominik

Und ja, bis zum nächsten Mal.

Dominik

Ja, alles klar.

Dominik

Tschüss.

Dominik

Tschüss, ciao.