Transkript: Das Python Data Model

· Zurück zur Episode

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

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast Episode 58.

Jochen

Oh, 58, boah.

Dominik

Ja, gar nicht so schlecht, oder?

Dominik

Über das reden wir heute?

Bei Floh und Python.

Dominik

Hi Jochen.

Jochen

Jo, Halli, hallo Dominik, herzlich willkommen.

Und hi Johannes.

Jochen

Johannes, hi.

Schön, dass du da bist.

Johannes

Ja, schön, dass ihr wieder da seid.

Dominik

Die hatten nicht ja schon ein paar Mal hier, habe ich gehört.

Ich war schon.

Johannes

Ich glaube, ein oder zweimal oder so ungefähr dabei.

Dominik

Ja, glaube ich auch.

Dominik

Anderthalb oder so.

Dominik

Wir wollen heute bei einem Buch sprechen, Floh und Python, von Luciano Ramalho.

Richtig ausgesprochen?

Ich weiß nicht, genau.

Jochen

Ja, oder das haben wir so ein bisschen als Vorlage hergenommen.

Jochen

Ich würde eher denken wir, also es wurde, es wurde, wir haben uns erreichten, genau, uns erreichten irgendwie Zuschriften, die sagten, ah, mach doch mal ein bisschen was mehr für Anfänger und irgendwie mehr.

Dominik

Und dann hast du das tollste Buch ausgedruckt, wo du dann.

Jochen

Lieblings-Python-Buch und dann dachte ich, ah ja, da kann man ja vielleicht mal so ein bisschen durchgehen, was er so die.

Dominik

Ich lese mal kurz aus dem Buch vor, weil du sagtest ja Anfänger.

Dominik

If you are just learning Python, this book is going to be hard to follow.

Dominik

Not only that, if you read it too early in your Python, it may give to the Every Python Scripture, Leverage Special Messers, and Metaprogramming Tricks und so weiter.

Dominik

Also da steht, für alle Leute, die es nicht verstanden haben, es ist kein Anfängerbuch.

Jochen

Ja, ja, gut, aber wir machen ja jetzt nicht Metaprogramming.

Jochen

Also Metaprogramming-Zeugs ist da auch drin, aber das machen wir ja jetzt gar nicht.

Jochen

Noch nicht.

Jochen

Das machen wir dann.

Dominik

Okay, dann steigen wir leicht auch noch mit

Datenstrukturen und sowas.

Jochen

Genau, wir fangen jetzt mit so ganz grundlegenden Dingen dann an.

Dominik

Nicht, dass wir Struktur hätten in dieser Folge, aber wir versuchen

Jochen

es heute.

Ja, wir so ein bisschen.

Jochen

Also wir hatten ja auch schon mal was zu Dicts gemacht und zu Listen.

Jochen

Ja, ich weiß nicht, ob wir schon Strings hatten.

Jochen

Hatten wir, glaube

ich, noch nicht.

Dominik

Also wir haben darüber schon öfter gesprochen, aber ich glaube, wir haben tatsächlich noch keine Erfolge dazu gemacht.

Dominik

Steht noch auf unserer Möchten wir gerne machen Liste.

Dominik

Aber vielleicht jetzt noch zu News.

Dominik

Gibt es denn was Neues in Python, in der Python-Community oder

Jochen

Python Base?

Jochen

Seitdem wir das letzte Mal aufgenommen haben, haben wir es nicht so wahnsinnig.

Jochen

Wie passiert das jetzt auch?

Dominik

Letzte Woche war EuroPython-Jochen.

Jochen

Ach ja, ja, Europython.

Jochen

Wie war denn die Europython?

Jochen

War gut.

Jochen

Hat Spaß gemacht.

Ja, war cool.

Dominik

Hat sehr viele nette Leute kennengelernt und mit ihm geschnackt, wie das halt so ist.

Dominik

Ich weiß aber nicht, ob das News-Charakter hat.

Dominik

Also außer mich persönlich natürlich.

Dominik

Was ich sehr genossen habe, war tatsächlich Lukas Langer und der Python-Rapple 3.13 Talk, der quasi der letzte war vor der Abschlussrede, wo man so ein bisschen interaktive Möglichkeiten sehen konnte von denen, was so möglich ist.

Dominik

Es war so ein bisschen eine Mischung aus iPython mit Bunt und man konnte richtig coole Sachen machen und Bindings und Fancy Stuff.

Dominik

Ist so ein bisschen ein Spaß-Talk gewesen.

Dominik

Also er hat dabei Musik gemacht, dann Euro Rek angeschlossen und seiner MIDI-Synthesizer damit bedient.

Dominik

Also genau war mein Ding.

Dominik

Fanden die Talks draußen, schaut doch mal rein.

Dominik

Ist mit Sicherheit sehr nett.

Dominik

Und was ich auch ganz gut fand, war, wir haben alle relativ viel darüber diskutiert, was Armin Runacher so erzählt hat, zu was scheiße läuft in Python und zwar das ganze Packaging-Ding und so.

Dominik

Das sind wir wahrscheinlich alle derselben Meinung, dass das da irgendwann mal so ein Tool geben könnte, das sowas macht wie vielleicht Cargo für Rust oder so.

Jochen

Ja, nee, der Meinung bin ich aber nicht.

Jochen

Also wäre, also ich bin der Meinung, dass es schön wäre, wenn wir sowas hatten, aber ich glaube, ich fürchte, dass wir sowas nicht kriegen können.

Dominik

Okay, aber das ist ja was anderes.

Weil da

Johannes

gibt es auch schon 23 Tools, die sowas machen.

Ja, ja, genau.

Dominik

Genau, genau, das ist der Punkt.

Dominik

Also Armi meinte halt auch, dann gibt es halt noch ein 24-st, aber das ist so, das ist der alte X-KCD-Comic, ne?

Dominik

Aber das ist so ein bisschen, vielleicht doch.

Dominik

Also vielleicht sollte man einfach miteinander reden und vielleicht doch so ein Ding bauen, was dann übrig bleibt.

Dominik

Weil man braucht halt was, was diese ganze Quark-Sache wie Pakete managen und Piptools und Pienf und Conda und und und und und und und irgendwie so schön nutzbar macht, dass irgendjemand, der das noch alles nicht kennt, einfach mal so ein Curl macht auf so eine Installation und dann hat der ein Tool, mit dem das alles geht.

Dominik

Das wäre schon ziemlich gut.

Also so vom Pain-Faktor her.

Dominik

Und immer dann, wenn ich jetzt Leuten versucht habe, das beizubringen oder versucht habe, bei denen Python zu installieren oder auf so einer Schulung irgendwie kleine Sachen mit denen machen wollte oder die zum ersten Mal so ein Notebook in die Hand nehmen wollten oder irgendwie irgendwas anderes, das war immer Schmerzen damit verbunden.

Jochen

Ja.

Dominik

Und da ja Rust gerade so.

Johannes

Nein, eigentlich ist es ganz einfach.

Johannes

Also du musst folgende Sachen installieren.

Johannes

Es ist wirklich nur eine sehr kurze Liste.

Johannes

Erstmal brauchst du Build-Essentials und dann brauchst du die ganzen Abhängigkeiten und libjpg und libjpg 98 und libjpg 2K und dann musste Pyenf installieren und dann bist du schon fast so weit wieder.

Dominik

Und dann Apel, eine Banane und wie auch im Tag den ganzen Dschungel.

Und ja, ja.

Dominik

Also ich habe am StellPython am Sprint und für Pyran so ein paar Sachen installiert, weil ich es kompilieren wollte, es hat tatsächlich drei Stunden gedauert, bis du kompiliert hast auf meinem Tun langsam.

Dominik

Klasse.

Dominik

Ja.

Dominik

Aber so ist das manchmal.

Jochen

Ja.

Jochen

Ja, also ich bin mal gespannt.

Jochen

Also ich bin da, also ich habe ja auch schon dann irgendwie gehört, was Leute dazu sagen, die sich mit diesem ganzen Thema schon lange beschäftigen.

Jochen

Und es gab auch schon mehrere Versuche, das zu vereinheitlichen und da auch Paps zu etablieren, die quasi das standardisieren und die sind gescheitert alle bisher.

Jochen

Auch das letzte Mal, als jetzt, der, wie heißt er jetzt noch, einer ganz bekannter, einer der bekanntesten Python-Core-Entwickler, der halt auch da irgendwie so ein großes Team bei Microsoft Leitet war, der große Kanadier, wie heißt er noch?

Jochen

Ich habe den Namen vergessen, keine Ahnung.

Jochen

Auf jeden Fall, der hat da versucht, einen Pad zu gemacht, das ist halt hinterher gescheitert, weil ja, also mit dem Fazit, es geht nicht.

Dominik

Armi meinte, es braucht vielleicht noch ein Jahr, dann sind viele der Grundvoraussetzungen geschaffen, die da noch fehlen und das wären gar nicht mehr so viele.

Jochen

Okay, ich bin gespannt.

Jochen

Also wenn das dann funktioniert, dann lasse ich mich überzeugen, aber das, ja, gut.

Jochen

Wenn wir dann sehen.

Jochen

Was auch interessant ist, ja, es gibt einmal diese UV-Geschichte, da gibt es dann auch noch diese Firma von Charlie Marsh, die hat ja das irgendwie übernommen, das zum Ende, das UV, ne?

Ja, genau.

Dominik

Ja, also UV und Rai, das war von einem.

Dominik

Die integrieren sich tatsächlich relativ, die reden auch voneinander und übereinander und so und die integrieren einander relativ viel.

Dominik

Und Rai plus das UV, statt Piptools, glaube ich, oder so über dann darüber, das sieht alles gar nicht so schlecht aus.

Dominik

Und die Firmen schafft Astral oder so.

Dominik

Und die machen ja auch Rough und das, was eigentlich auch relativ gut funktioniert, finde ich.

Jochen

Ja, ja, die machen so eben ganz viel und Rust.

Jochen

Gibt es auch eine Firma hier, also es gibt ja da irgendwie auch eine schnellere Alternative zu Conda, Mamba von Prefix Death oder weiß ich nicht, Wolf Vollprecht oder so.

Jochen

Den könnten wir vielleicht auch mal, den können wir immer zu diesem Thema fragen.

Dominik

Ja, falls du gerade zufällig zuhörst.

Jochen

Ja, und genau, genau.

Jochen

Und das kommt da auch irgendwie mit rein.

Jochen

Deren Geschichten sollen da auch irgendwie mit integriert werden, weil das ist halt unten drunter auch alles Rust.

Jochen

Und ja, also okay, es tut sich was.

Jochen

Also insofern ist schon mal gut.

Jochen

Ja, mal gespannt.

Dominik

Ja, und ich finde es auch gut, dass man tatsächlich jetzt echt irgendwann durch ist mit diesem Ganzen.

Dominik

Es nervt.

Dominik

Und vielleicht, also Standards, also ich mag ja zum Beispiel diesen Go nicht, weil zu viel Standard und so, ne?

Dominik

Es ist immer zu viel Opinion und so.

Dominik

Und dann, okay, dann nutzt man dann doch Black.

Dominik

Aber vielleicht gibt es so ein paar.

Jochen

Moment habe ich nicht verstanden, was nutzt.

Dominik

Also ich mag das Standards nicht.

Dominik

Also ich mag es eigentlich nicht, wenn irgendjemand sagt, wie es sein muss, wenn jemand so opinionated ist und sagt, wir machen jetzt, keine Ahnung, Tabs instead of Spaces, weil ich will das so.

Dominik

Wenn ich das anders möchte.

Dominik

Und das nervt mich immer so ein bisschen, weil das das schon in Python ist, das ist halt dynamisch, ich kann es halt aussuchen, wie ich es mache.

Jochen

Ja, aber gut, also ich meine, aber würdest du das sozusagen würdest du, du würdest aber nur das konfigurieren wollen, wie es aussieht, aber du würdest schon Autoformaten wollen.

Äh, ja.

Jochen

Ja.

Jochen

Okay, ja gut, kann man machen, wie man will.

Dominik

Ja, also ich meine, aber wenn man jetzt bei Black dann irgendwie eine Konfigurationsdatei jedes Mal beschieben muss, ist halt auch irgendwie ad absurdum, ne?

Jochen

Ja, genau, weil Black gibt es das halt nicht, genau.

Jochen

Dann muss halt was anderes nehmen.

Aber es gibt ja auch noch andere.

Johannes

Das ist so eine Sache, die denke ich mir schon lange, dass eigentlich diese ganze Code-Formatting-Debatte, die ist doch Quatsch, oder?

Johannes

Eigentlich sollte doch eine Python-Datei den AST enthalten und dann hast du einen Editor und der kann dir den AST anzeigen, auf eine Art und Weise, wie sie dir passt.

Jochen

Ja, genau.

Johannes

Und wenn du die Sachen in grün oder gelb haben willst oder in Dateien oder Modulen aufgeteilt oder wie auch immer du es haben willst, da gibt es so viele Sachen, die man auf der Ebene machen könnte, aber stattdessen haben wir Textdateien.

Johannes

So ein bisschen so, da müsste mal jemand was machen.

Johannes

Da kommt dann immer der Einwand, dann mach doch mal was dagegen, sag ich, nee.

Jochen

Naja, das Problem ist halt, wie kriegst du denn aus dem Ast wieder was, wenn du jetzt tatsächlich was manuell anders hast.

Dominik

Du möchtest ja eine VR-Brille aufziehen und dann hast du vor dir den Einbalken, den Eingrafen und hast die Notes, musst du alle durchmarschieren.

Dominik

Kannst du dich auf deine Laufbahn stellen und hinlaufen.

Johannes

Nee, also da gibt es bestimmt Leute, die das so wollen, aber da, ich will ja nicht laufen, ich bin ja ein Softwareentwickler.

Johannes

Aber ob du jetzt Tabs oder Spaces hast oder ob du die Variablen so oder so nennst oder ob du, keine Ahnung, viele Dinge, die du da, ob du Einrückungen oder Braces haben willst, ja, das ist doch auch völlig egal.

Johannes

Wenn Leute lieber Braces haben wollen, dann sollen sie halt sich ihren Editor so einstellen, dass der die Blöcke mit Braces umfasst.

Johannes

Und umgekehrt, wenn ich TypeScript schreibe oder so, ja, dann will ich da nicht überall Braces haben.

Johannes

Dann muss doch mein Editor smart genug sein, das umformen zu können.

Johannes

Und warum ist das so schwierig?

Jochen

Ja, also ein Grund, der mir jetzt sofort.

Johannes

Das ist so eine Debatte, die jetzt auch ins

Gebüsch führt.

Jochen

Ja, also ein Grund, der mir direkt so einfallen würde, ist halt, was ist, weil das hatte ich jetzt letztens, ist halt, was ist, wenn ich Dinge anders machen möchte als jeder andere.

Dominik

Du meinst Innovation?

Jochen

Nein, einfach optisch.

Müll.

Achso, Entschuldigung.

Johannes

Ja, das muss doch dein Editor können.

Johannes

Das muss doch eine Einstellungssache bei dir sein.

Johannes

Aber wir kommen aber gleiche Python-Code raus.

Jochen

Ja, aber wenn jetzt, wenn jetzt sozusagen, du kriegst jetzt Code von jemand anders.

Jochen

Wie soll denn das, so wie ich das sehen will, wie soll der denn dahin transformiert werden?

Dominik

Das kannst du nur so ein bisschen.

Jochen

Also in der Standardform geht leicht, aber der umgekehrt geht halt nicht.

Jochen

Oder?

Dominik

Über ein Sprachmodell.

Johannes

Ich glaube, das geht in alle Richtungen.

Johannes

Aber das wäre halt das, was da zu beweisen wäre.

Johannes

Und ich glaube, dass die richtige Darstellungsart eben nicht Text in ASCII oder Unicode ist, sondern halt ein strukturierteres Modell.

Johannes

Und aus diesem strukturierteren Modell kannst du dann ja mehr Sachen auch rausziehen.

Jochen

Ja, gut.

Aber wie muss man.

Das ist unbewiesen, ja.

Johannes

Das ist hier so ein, wie gesagt, so ein Jemand sollte das mal tun.

Johannes

Projekt.

Johannes

In meiner vierstelligen Liste der Nebenprojekte ist es nicht auf Platz 10.

Dominik

Also jedenfalls, ich wollte eigentlich für Standards an der Stelle sprechen, weil ich tatsächlich finde, dass das so ein bisschen anstrengend ist.

Dominik

Und das wäre schon gut, wenn so ein Standard das so löst, dass diese ganzen Pains und Probleme eine Lösung haben, die tatsächlich von allen so mitgetragen wird.

Dominik

Das wäre schon irgendwie nice to have.

Dominik

Also so ein Kolorabotive-Spiel, äh, Kolor, boah, Zungenbrecher.

Dominik

Ihr wisst, was ich meine.

Ja, Kolorabor,

Jochen

aber du meinst du meinst jetzt für Code-Format?

Äh, nein.

Achso, okay.

Ich meine für Packaging.

Dominik

Packaging.

Dominik

Und also Installation und Python generell und Binaries verteilen und Setup und Venfs und Dependencies und sowas alles.

Jochen

Naja, ich habe mir da halt diese Diskussion halt so ein bisschen angeguckt und die hinter mich so ein bisschen hoffnungslos zurückgelassen, weil also auch die Leute, die sich ja mit Crafty haben, die sind ja, die haben das ja auch, das war ja das Ziel.

Jochen

Und das Ergebnis war, geht nicht.

Dominik

Ja, das Problem ist halt, man will sich aber damit gar nicht beschäftigen.

Jochen

Doch, doch, da haben sich, oh yeah, da haben sich viele Leute ganz lange

mit beschäftigt.

Dominik

Ich möchte mich nicht damit beschäftigen, was für Polen Python beim Package installieren, beim Ventfahrt, sondern ich möchte Packages installieren, die die benutzen.

Ja, aber.

Dominik

Weil ich möchte halt Programme schreiben.

Jochen

Ja, aber die Frage ist, ist das überhaupt möglich bei einer so alten Sprache?

Jochen

Geht das?

Jochen

Und bei Rust, also die Antwort ist, warum geht das bei Rust?

Jochen

Ist halt, die Antwort darauf ist halt, das geht deswegen, weil das eine sehr junge Sprache ist.

Jochen

Und weil man all die Dinge, die man früher bei Python macht hat, da halt nicht drin hat.

Dominik

Ja, aber da müssen wir auftämig.

Dominik

Das sind also so junge.

Ja, aber das ist das Problem.

Jochen

Ja, aber ein Großteil von dem Zeug, das verwendet wird, ist halt älter als 20 Jahre und macht Dinge, die total komisch sind.

Johannes

Johann, was würdest du sagen, wann ist Rust erschienen?

Johannes

Wann war das erste Release von Rust?

Jochen

Ich glaube, das ist etwas mehr als zehn Jahre her.

Jochen

So immer 2013, 2015.

Johannes

15.

Johannes

Mai 2015, also neun Jahre.

Johannes

Nicht so schlecht.

Jochen

Habe ich sogar ein bisschen zu alt geschätzt, ja.

Johannes

Ja, okay.

Johannes

Aber also ganz junge Sprache ist es auch nicht mehr.

Jochen

Nee, aber viel, viel jünger als Python.

Jochen

Viel, viel jünger.

Johannes

Ja, gut, das stimmt natürlich.

Johannes

Wobei Python 3 ist jetzt auch noch nicht, ist doch auch erst seit ein paar Jahren.

Ja.

Dominik

Sag ich aber Zeit für Python 4.

Dominik

Okay.

Johannes

Die nächste Version ist Python 8, oder?

Johannes

Da gab es doch mal so ein April-Chat.

Johannes

So ein Pep, wie die nächste Python-Version heißen sollte.

Johannes

Und dass man dann immer additiv vorgeht.

Johannes

Der große Vorteil von dem Versionsschema ist, dass man alle anderen Versionen einholt.

Dominik

Das war auch lustiger Talk.

Dominik

Wer ist nochmal der Release-Manager von 13 und 14, wisst ihr?

Jochen

Thomas Waters kommt.

Dominik

Ich meine, der war auch lustig, weil er meinte nämlich, er möchte gerne das Versioning von Python ändern, einfach auf Jahreszahlen anpassen.

Dominik

Dann wäre es halt demnächst Python 24 einfach.

Dominik

Dann Python 25.

Dominik

Und dann aber mit drei da vorne, weil wir drei behalten 3,25, weil Semantic Version irgendwie Blut wäre und ja.

Johannes

Müssen Sie sich aber auch noch irgendwelche lustigen Tiernamen ausdenken, die da dazu passen.

Johannes

Und bitte alphabetisch aufsteigend.

Dominik

Ja, genau, so ungefähr.

Das war dann die Debatte.

Dominik

Ja, also ich meine, es gab viel Spaß und die Talks sind mit Sicherheit auch irgendwann bald da.

Dominik

Die kann man sich alle angucken.

Dominik

Es gab ja verschiedene Tracks, der Data-Track war relativ viel vertreten wieder.

Dominik

LLMs und so sind ja wie immer hoch dabei.

Dominik

Ich hatte nicht das große Glück, dass ich jetzt da so einen Talk erwischt hatte, der mich so total faszinierte.

Dominik

Die waren immer sehr, ich sag mal, High Level, was es auch nicht schlecht sein muss.

Dominik

Aber ja, bis auf so ein paar Sachen, die halt darum gingen, so wie man das vielleicht mit dem Trainieren noch ein bisschen besser hinkriegt oder mit dem Feintun, dass man ein bisschen effektiver sein kann und nicht so viel Speicher dafür braucht oder so.

Dominik

Aber das müssten wir uns eigentlich mal für eigene Episoden irgendwann aufheben.

Sowas.

Ja.

Dominik

Wasche News haben wir noch?

Dominik

Jochen.

Jochen

Ah ja, jetzt wo es um Europe Python ging, was mir eingefallen ist, stimmt.

Jochen

Wir hatten ja letztes Mal auch über die DjangoCon Europe 2024 geredet.

Jochen

Und die Vorträge sind jetzt online.

Jochen

Wir können uns ja angucken und da bin ich jetzt gerade dran, die so ein bisschen nach und nach anzugucken, die ich interessant finde.

Jochen

Und da habe ich auch schon interessante gesehen.

Jochen

Da war auch jetzt diese Woche war Treffen der Python-User Group, äh, Django Cologne User Group, wo es dann halt auch einen Vortrag gab über Background Tasks, was ganz interessant war, genau.

Jochen

Und ja, das klingt alles tatsächlich ziemlich interessant.

Jochen

Also da haben sich schon Gedanken über das Interface gemacht.

Dominik

Salary ID.

Jochen

Ja, könnte sein, was eine gute Sache wäre.

Dominik

Ja, und das wäre richtig gut.

Dominik

Ja, aber da wollte ich noch sagen, weil du gesagt hast, die ganzen Talks gucken, das war tatsächlich auch super.

Dominik

Ich mag dieses hybride Format von Konferenzen.

Dominik

Auch bei der Europäisten konnte man halt abends, wenn man ganz schon durch war von dem ganzen Tag und die ganzen Konferenzen live gesehen hat, sich nochmal den Track von den Sachen, die man verpasst hatte, bei YouTube auf einmal halbfach angucken zum Einschlafen oder zum Runterkommen.

Das war ja schon.

Dominik

Das heißt, man kann alle Sachen parallel gucken gleichzeitig und ja, oder am Denger frühstücken, wenn man mag.

Was echt schön ist.

Dominik

Sehr zu empfehlen, sehr zu empfehlen.

Jochen

Ja, ansonsten so in Ermangelung von Dingen, die jetzt mit Palten so viel zu tun haben, was mich, äh, was mich hier gerade so noch so ein bisschen umtreibt, ist halt, ja, ja, es war bald Urlaub und ich habe ein bisschen neue Hardware irgendwie mir zugelegt.

Dominik

Ja, Jochen, das ist keine Werbeveranstaltung hier.

Jochen

Nee, aber also was ganz cool ist, es gibt jetzt so ein, tatsächlich, also dieser Haushalt enthält Computer, kann Spuren von Computern enthalten.

Jochen

Und das schnellste Computer in diesem Haushalt ist jetzt ein iPad.

Jochen

Und ja, also da sind ja diese M4-Dinger drin, sondern sie sind sackschnell.

Jochen

Also es ist unglaublich.

Dominik

Lass du das jetzt deine Machine Learning-Modelle tun?

Johannes

Aber das ist doch kein General-Purpose Computer, argumentiert, dass es kein General-Purpose Computer ist.

Jochen

Ja, das ist blöd.

Jochen

Aber es wäre voll cool, wenn es ein General-Purpose-Computer wäre, weil es wäre nämlich dann der schnellste, den ich hätte.

Bau doch einfach die CPU aus.

Dominik

Kannst du dich Wanders einlooten?

Jochen

Ja, nee.

Jochen

Genau, also ja, das ist so ein bisschen doof, aber das Ding ist tatsächlich, also es gibt das, M4 gibt es auch noch in keinem anderen Gerät irgendwie von Apple, also nur in einem iPad.

Jochen

Ja, es ist schon so ein bisschen traurig.

Jochen

Also es gab auch eine Tastatur diesmal mit einer Escape-Taste, sodass halt irgendwie mit einer Escape-Taste kannst du eigentlich auf iOS überhaupt gar nichts anfangen, sodass halt viele Leute gedacht haben, so es kommt irgendwann macOS für iPad, was voll cool wäre, aber nein, kam nicht.

Jochen

Und ja, jetzt habe ich ein iPad und kann es nicht benutzen.

Ein bisschen doof.

Jochen

Aber ja, ansonsten wirklich sehr schnell.

Johannes

Du kannst doch schnell YouTube gucken.

Jochen

Ja, genau.

Jochen

Und gut, genau.

Dominik

Ich habe noch so eine Platine mitgebracht, die kann man sich ankleben und mit so einem Magneten und da kann man so einen Text hin und her laufen lassen.

Dominik

Und da gibt es so ein Python-Modul, da kann man dann den Text auswählen.

Johannes

Und das ist dein schnellster Computer.

Psst.

Jochen

Ja, genau.

Jochen

Und ja, ansonsten gab es noch so ein bisschen irgendwie LLM-Krams.

Johannes

Ja, da gibt es doch immer was, oder?

Dominik

Caspack hat tolle neue Modelle rausgebracht, die ziemlich beeindruckend sind.

Johannes

Ja, und Mistral hat jetzt, ich glaube, heute ein neues Modell rausgebracht.

Johannes

Nemo heißt das mit einem neuen Embedding.

Johannes

Die haben einen neuen Embedder trainiert, der wohl deutlich besser ist.

Johannes

Das müsste man sich mal anschauen.

Johannes

Und dieses Nemo-Modell hört sich auch interessant an, dann ist Zusammenarbeit mit Nvidia entstanden.

Johannes

Das ist ein 12B-Modell.

Johannes

Das ist also etwas größer als diese 7B-Modelle und es ist wohl genau so trainiert, dass du es auf einer normalen Grafikkarte laufen lassen kannst.

Johannes

Also auf einer 40, 90.

Jochen

Ja, die haben ja alle normalen.

Jochen

12, 12 Gigabyte.

Völlig ganz normal.

Hauptsprecher, ja.

Johannes

Genau.

Johannes

Und es ist wohl auch schon so trainiert, dass es mit FP8 geht, ohne Leistungsabfall und das ist natürlich direkt sehr praktisch.

Jochen

Ja, ich habe auch letztens gesehen, dass irgendjemand quasi, also war das Microsoft Research, ich weiß es nicht, ich hatte einen Paper veröffentlicht zu einem Modell, das die gleiche Performance irgendwie über viele unterschiedliche oder sogar deutlich bessere Performance über viele unterschiedliche Benchmarks hingekriegt hat als GPT-3.5, aber auf einer einzelnen GPU läuft.

Jochen

Also auf so einer Consumer-GPU.

Jochen

Und das war auch zum ersten Mal, dass es jemand geschafft hat, quasi GPT-3.5 auf irgendwie so Consumer-Hardware zu schlagen.

Jochen

Und das auch selber ein.

Jochen

Also, das wird jetzt, geht jetzt, du kannst da wirklich auf deinem Rechner zu Hause irgendwie Sachen laufen lassen, lokal auf deiner Spielegrafikkarte, die halt irgendwie das Chat-GPT vom Anfang halt deutlich schlagen.

Jochen

Und das ist interessant.

Jochen

Also, ja, es geht halt an.

Johannes

Ja, da tun sich doch viele Dinge.

Johannes

Das ist schön, dass da so auch so völlig, sag ich mal, normale Sachen, ja, dass sich jetzt hier GPT-4 und 4.0 und so, dass die sich weiterentwickeln und Cloud Sonnet und so weiter.

Johannes

Achso, und das Mister Nemo-Modell hat einen 128K Kontaktwindow, das ist eine Besonderheit.

Johannes

Das ist auch was Interessantes, weil die anderen lokalen Modelle hatten ja immer nur irgendwie 4K oder 8K.

Johannes

Und das macht doch nochmal einen deutlichen Unterschied aus.

Johannes

Dass sich so ganz normale Sachen, sag ich mal, weiterentwickeln, dass man eben, genau wie du sagst, Jochen, das jetzt auf normalen GPUs laufen lassen kann und dass die Modelle größer und schneller und trotzdem skalierbar werden und dass es auch in der Richtung Entwicklung gibt, das finde ich eigentlich ziemlich cool.

Johannes

Dass es nicht nur so eben in diesen Hochburgen und in den Dienstanbietern festhängt, sondern die Szene ist auch sehr lokal.

Johannes

Und wenn man sich da mal so dieses, wenn man sich Hugging Face anguckt, ja, an wie viele Pflege von Lama es gibt und dann gibt es manche, wo die, wo das Sicherheitstraining weg ist und man einzelne spricht nur Piratensprache und man ist nur diesen, das und jenes klar.

Johannes

Ja, es ist schon schön, dass da was passiert.

Jochen

Ja, genau.

Jochen

Ja, und die andere Seite, also OpenAI und so, das ist auch interessant.

Jochen

Also überhaupt, da wollte ich auch noch wegen Apple irgendwie drauf zu sprechen, kommen, die bauen ja jetzt dann irgendwie die Dinger ein in iOS.

Jochen

Und was eingebaut wird, ist auch GPT-VO.

Jochen

Also du kriegst halt jetzt, wenn du ein iPhone oder sonst irgendwas kaufst, wahrscheinlich dann ab jetzt, wenn die neuen Geräte kommen, kriegst du halt, oder eine neue iOS-Version, kriegst du halt quasi die Bezahlversion von OpenAI irgendwie in deinem Gerät.

Jochen

Und das ist halt ein relativ dicker Deal wohl.

Jochen

Und dafür kriegt, also das ist, glaube ich, nur ein Gerücht, das ist noch nicht beschäftigt, aber.

Johannes

Er hat noch sogar einen Bordseed.

Jochen

Ja, genau, die haben jetzt, der hat jetzt nicht.

Da kriegt Microsoft wieder doch die Datenfüllung.

Johannes

Haben sie wieder aufgegeben, sind nicht mehr.

Johannes

Sowohl Microsoft als auch Apple haben ihren Bordseed aufgegeben.

Johannes

Es waren eh nur Beobachtende, aber haben sie beide, haben sich beide zurückgezogen.

Jochen

Ach so, okay, ich dachte eigentlich, dass jetzt sozusagen das Gerücht war, dass das Fallschüler irgendwie ins Board von OpenAI geht, aber.

Johannes

Ja, haben sie aber wieder zurückgezogen.

Jochen

Ah, okay.

Jochen

Dann, naja, dann war ich halt schon nicht mehr so aktuell.

Jochen

Aber ich meine.

Johannes

Es bewegt sich so schnell, dass das Ganze nicht.

Jochen

Falls man hinguckt, das stimmt alles ganz anders.

Jochen

Aber, naja, gut, also ich in gewisser Weise verstehe ich ja auch.

Jochen

Also das große Problem von OpenAI ist ja irgendwie, dass sie halt zwar irgendwie ganz gute Modelle haben, aber sie haben halt die Geräte nicht da draußen.

Jochen

Also sie haben halt einen strukturellen Nachteil gegenüber sowas wie Google.

Jochen

Oder so Google braucht das alles nicht.

Jochen

Die können einfach irgendwie über Android, haben sie da halt einen Riesenhebel.

Jochen

Aber OpenAI, wenn sie halt nicht Partnerschaften mit Microsoft oder mit Apple haben, dann haben sie halt ein Problem.

Jochen

Weil, ja, wenn die, sonst passiert ihnen das, was halt irgendwie, keine Ahnung, Slack passiert ist mit Teams oder so und dann sind sie halt weg.

Jochen

Ja.

Jochen

Insofern, ja, ist auf jeden Fall interessante Zeiten.

Bin mal gespannt.

Jochen

Aber 4O ist auch so gut, also ich finde das hier auch dauernd, also dass das wahrscheinlich irgendwie.

Johannes

Was warst denn, Jochen?

Johannes

Was machst du denn damit?

Jochen

Wir programmieren.

Johannes

Achso, ja gut, okay, das geht nicht in den Flow rein.

Dominik

Ja, aber auch Opus, das ist schon.

Jochen

Ja, Opus ist auch super.

Jochen

Also ja, absolut.

Jochen

Das ist ja

Dominik

auch du gibst halt einfach so Fragen, das stimmt dann auf einmal doch eher mehr als früher.

Dominik

Noch mehr als früher.

Dominik

Und dann, man kann es halt so steuern, ne?

Dominik

Wenn man halt.

Pipen das irgendwo integriert oder Interface.

Dominik

Also auch Konsole halt, ne?

Dominik

Und wenn man halt, dann kannst du halt auch Pipen mit Cut reinpipen, irgendwas.

Dominik

Oder sag dann halt Template, mach einen Pi-Test drauf oder so.

Dominik

Und das ist gut.

Dominik

Gute Vorschläge.

Dominik

Also die sind nicht immer ganz rein, aber man kann das ja auch modifizieren, kann man sagen, so ja, ein bisschen mehr in, ne, ein bisschen mehr Fixes, ein bisschen weniger dies, ein bisschen weniger das, wenn man das nicht von dem Systemprompt eh schon drin stehen hat.

Dominik

Und dann ist das ziemlich das, was man will.

Dominik

Man kann ja so ein Beispiel geben wie, ey, und so wie ich das hier gemacht habe, so dass es ungefähr so solltest, könnte es aussehen.

Dominik

Und dann fertig.

Johannes

Ich bin da mal neidisch, wenn da Leute das so erzählen, weil ich komme mit solchen Systemen einfach irgendwie nicht in den Flor.

Ich komme nicht in den Flow.

Vielleicht muss man sich

Jochen

da mal zusammensetzen.

Dominik

E-Makes, Johannes.

Entschuldigung.

Johannes

Ich habe doch PyCharm, bin noch ein PyCharm-Unterstützer.

Jochen

Ja, aber hast du da den Copilot zum Beispiel an oder so?

Jochen

Weil das ist auch schon ganz okay.

Jochen

Also ich finde ehrlich gesagt, das ist nicht so gut, wie wenn man jetzt quasi direkt mit.

Dominik

Warte, wann hast du das letzte Mal probiert, Johan?

Johannes

Keines dieser Systeme hat mich jeder überzeugt.

Okay.

Johannes

Ich habe es ein paar Mal probiert und das war jedes Mal so.

Johannes hätte es besser gewusst.

Johannes

Vielleicht ist das Problem, vielleicht weiß ich es einfach besser.

Dominik

Ja, ich würde es auch sagen.

Na gut, kann man machen.

Dominik

Da würde ich aber sagen, dass das genau das ist.

Johannes

Ne, wenn der Jochen sagt, dass das bei ihm hilft, dann kann es bei mir nicht sein, dass ich es besser weiß.

Dominik

Also hier ist eine wundervolle Überleitung, weil Tim Peters, der Co-Entwickler und Autor von Zen of Python, das ja bestimmt alle kennt, ne?

Dominik

Importis, dann meinte ich, der Plan wäre, wenn jemand ein Feature entwickelt, das du nicht verstehst, dann knall ihn einfach ab.

Dominik

Und das ist der Einstieg in das wunderschöne Buch von Python.

Jochen

Muss man direkt mal klar machen, wie die Sachen dann so laufen und genau.

Dominik

Das ist auf jeden Fall einfacher, etwas Neues zu lernen.

Jochen

Ja, und dann am Schluss hat man nur noch Leute, die irgendwie kein Problem mehr haben, das zu verstehen, was man sagt.

Dominik

Ja, und bevor die einzelnen, überlebenden Entwickler, dann kann man ein kleines Stück von dem, was man schon tun kann, dann verwenden und kommt damit weiter.

Johannes

Also sind wir jetzt bei Flutter.

Jochen

Sind wir jetzt bei Fluid?

Dominik

Ja, ich würde tatsächlich jetzt so ein bisschen unser Quatsch versuchen, in eine Struktur zu überführen, die uns ein bisschen zurückführt auf dieses wundervoll.

Also ich

Dominik

fluent, was heißt denn fluend flüssig?

Jochen

Also ich wollte nicht über das Buch sprechen eigentlich.

Jochen

Eigentlich wollte ich gar nicht erwähnen, dass das Buch, das wir jetzt aus dem Buch klauen, aber gut.

Dominik

Achso, du du, ach du, du wolltest einfach so tun, als ist das deine Verdauung.

Entschuldigung.

Dominik

Achso, den glaube ich Spaß verdauben.

Jochen

Okay.

Jochen

Ja, nee, wir können das auch sagen, das ist ja kein Problem.

Jochen

Aber genau, was wir.

Jochen

Was es heute im Grunde geht, ist halt wie, sie nennen das Python Data Model oder ein Buch wird es auch so genannt.

Jochen

Es wird auch eine Referenzdokumente und so genannt.

Jochen

Es gibt andere Leute, die nennen das irgendwie anders, Python Object Model oder so.

Jochen

Und im Grunde geht es darum,

Dominik

was ist denn das jetzt überhaupt wieder alles?

Dominik

Ich tue jetzt mal einmal so, ne?

Dominik

Also.

Johannes

Tu mal so, als ob du es nicht wüsstest damit.

Ja, genau,

das reicht doch.

Wie immer.

Jochen

Also zum Beispiel ist halt die super Beispiel, ist halt, um da vielleicht einen Einstieg zu finden, warum sagt man in Python eigentlich irgendwie Len von irgendwas in einer Collection oder so und nicht Collection.len, Klammer auf Klammer zu, wie man das jetzt vielleicht in Ruby machen würde oder so.

Jochen

Ich weiß ehrlich gesagt gar nicht, wie man es in Ruby macht, aber.

In Java, sag ich einfach.

Jochen

In Java, in Java, die machen das komisch.

Jochen

Genau, warum macht man das eigentlich so?

Jochen

Und ja, also der das, was halt Python an der Stelle halt anders macht, ist halt, dass es irgendwie ein bisschen objektorientierte Purity sozusagen irgendwie opfert, um halt eine Menge andere Vorteile zu kriegen.

Jochen

Und ja, das macht es, also das ist überhaupt so eine charakteristische Geschichte von Python, dass man halt oft irgendwie ja halt nicht die reine Lehre irgendwie macht, sondern halt irgendwie etwas, was nicht ganz so rein ist, aber das halt halt praktisch viel besser funktioniert.

Ich verstehe jetzt mal gesagt nicht.

Dominik

Also warum ist erstens irgendwas mit Klasse und Attribut und Methode callen die reine Lehre?

Dominik

Und zweitens, was ist das Problem, wenn man irgendeine Funktion hat oder eine call it whatever you like oder the closure und kippst da ein Objekt rein und dann passieren Dinge damit.

Jochen

Naja, also sozusagen, wenn du jetzt reine Objektorientierung machen wollen würdest, dann würde man ja sagen, naja gut, du schickst halt irgendwie Nachrichten an ein Objekt oder du rufst du halt Methoden auf oder was auch immer, wie man das nennt.

Jochen

Und das ist dann die Sache des Objekts.

Jochen

Ja, so ist es halt gedacht.

Johannes

Das ist zum Beispiel in Java so.

Dominik

Ja, aber warum ist das?

Johannes

Java heißt Kingdom of Nouns und es gibt quasi keine Funktionen in Java, sondern es gibt nur Objekte und denen kannst du Nachrichten schicken und die machen dann irgendwas.

Johannes

Und das ist der einzige Mechanismus, den es im Wesentlichen gibt.

Johannes

Und selbst wenn du sowas hast wie eine Main-Funktion, dann hast du da irgendwo eine Klasse und dann ist es halt eine Static-Methode auf dieser Klasse drauf.

Johannes

Und anstatt dass du sagst, wenn unser Programm läuft, dann rufen wir die Main-Funktion auf, sagst du, wir schicken eine Main-Nachricht an unsere Main-Klasse.

Dominik

Aber warum sollte man auf HD eine gute Idee sein könnte?

Dominik

Warte, was ist das?

Dominik

Also ich muss mal kurz über die Trade-Offs reden, um das mal so zu erzählen.

Dominik

Warum sollte man denken, dass das eine gute Idee sein könnte, sowas zu tun?

Jochen

Naja, es reduziert natürlich schon die Anzahl von Dingen, die es so gibt.

Jochen

Und halt nur Objekte und Methodenaufrufe und mehr nicht.

Dominik

Und das ist warum gut?

Also.

Einfach eine Sache lernen.

Jochen

Oh, komm's Razor, weil einfach halt ein Wegweiser zur Wahrheit ist oder zur Schönheit oder so.

Okay.

Dominik

Point einzige für den Java-Entwingler.

Dominik

Okay, und warum ist es denn nicht auch einfach, einfach sowas wie funktionale Programmierung zu machen und da Zeug zu hintereinander hin und her zu reichen?

Dominik

Was fehlt einem denn da in diesem Vergleich?

Jochen

Funktionale Programmierung ist ja auch was anderes.

Jochen

Das gibt es auch, aber das ist was ganz anderes.

Jochen

Also das ist ja.

Jochen

Also kann man auch machen.

Jochen

Aber dann ist es, also das wäre kannst du auch pure haben, sowas wie Haskell oder so dann.

Jochen

Oder Erlangen oder weiß ich nicht.

Johannes

Ah, Standard ML.

Ja, Haskell, hier, diese modernen.

Ja.

Jochen

Aber das ist halt ein anderes Konzept als jetzt Objektorientierung.

Dominik

Naja, aber wir sprachen gerade.

Dominik

Von ästhetischer Einfachheit oder so.

Jochen

Ja, ja, ist es auch.

Jochen

Aber es ist halt anders.

Jochen

Da gibt es halt dann nur Funktionen sozusagen.

Dominik

Okay, aber ich wollte kurz auf die Trade-Offs hinaus, weil warum ist das jetzt.

Jochen

Naja, also der Grund, warum man jetzt denken konnte, dass es halt im Halten nicht so schön ist, halt, dass man sagt, jetzt muss man halt auch noch so, jetzt machen wir so Build-Ins wie LEN oder so, die so ein bisschen komisch sind.

Jochen

Aber tatsächlich hat es halt praktisch sehr viele Vorteile, wie, ähm, naja, also einmal, du musst dir nicht für jedes Objekt merken, wie das denn jetzt nun heißt mit dieser Methode, weil das kann ja jeder dann anders machen, das wäre ja irgendwie schlecht.

Johannes

Das ist zum Beispiel ein Problem, was PHP hat.

Johannes

Oder JavaScript, da heißt es manchmal Size und manchmal Length und manchmal Account.

Ja.

Jochen

Und eine andere Geschichte ist halt, es ermöglicht dir halt irgendwie so ein paar dreckige Optimierungen zu machen, die halt irgendwie die Dinge, die wirklich Zeit kosten, irgendwie deutlich schneller zu machen.

Jochen

Wie zum Beispiel, du kannst halt, da diese Sachen, also tatsächlich, was Len halt macht, ist ja schon dann quasi, wenn das ein Objekt ist einer Klasse, die du erstellt hast, dann wird halt dann da Len aufgerufen.

Dominik

Schon doch die Methode, die geheime Methode.

Jochen

Die Methode aufgerufen, aber die ist halt nicht dafür da, dass irgendwie andere die aufrufen, sondern oder dass man die von Hand aufruft zu Fuß oder wie auch immer, sondern die ist halt dafür da, dass der Interpreter die aufruft, wenn man halt Len von irgendwas sagt.

Jochen

Und dann ruft der Interpreter die auf, aber der Interpreter kann halt auch andere Dinge tun.

Jochen

Der kann zum Beispiel jetzt, wenn das ein irgendwie so ein natives, also ein Ding im Interpreter selber ist, also da irgendwie ein C geschriebenes Ding, wie ein Dikt oder eine Liste oder sowas ist, dann kann es halt direkt irgendwie in diesem Pi-Objekt irgendwie drauf gucken, wie lang ist denn dieser Ding und gibt es dann halt zurück.

Jochen

Und muss halt keine Methode aufrufen.

Jochen

Also Methodenaufrufe sind halt etwas, was halt in Python super langsam ist.

Jochen

Oder in allen interpretierten Programmiersprachen, die so ähnlich sind wie Python, es sind halt Funktionsaufrufe, Methodenaufrufe immer total langsam.

Jochen

Es ist halt, da ist wirklich so ein Faktor 1000 dazwischen, zwischen irgendwie 3MC und Funktionsaufruf und Python oder so.

Jochen

Und ja, für die ganzen Standardfälle, wo man das halt benutzt, kann der Interpreter das halt alles wegoptimieren und dann macht er das halt einfach nicht, sondern da wird gar nichts aufrufen.

Jochen

Ja, also das sind halt zwei große Vorteile, die man halt kriegt, wenn man halt ein bisschen Reinheit opfert, sozusagen.

Jochen

Und genau, das ist halt irgendwie diese Balance zwischen irgendwie Reinheit und funktioniert super, ist halt so eine.

Jochen

Magie.

Jochen

Genau, ist halt so eine Spezial.

Jochen

Ja, Magie mag der, mag jetzt zum Beispiel der Autor von Flut und Python an der Stelle gar nicht so gerne.

Jochen

Also man nennt die Dinger ja irgendwie Magic Methods auch, also dieser Magic Methods,

Johannes

finde ich eine sehr schöne Diskussion über diese Namen, über die Magic Methods und über die Nicht-Magic Methods.

Jochen

Ja, ja.

Jochen

Fand ich auch so, das kommt halt so aus der Ruby-Community, das wusste ich gar nicht.

Jochen

Ich dachte eigentlich, das gibt halt ein paar Python-Entwickler, die nennen das halt Magic Methods, die dann sagen halt Dunder Methods oder sowas.

Jochen

Ja, aber in der Ruby-Welt ist das wohl üblich.

Jochen

Und ja, aber der.

Johannes

Das ist der offizielle Name, oder?

Johannes

In Ruby?

Johannes

Die heißen Magic Methods.

Jochen

Genau.

Jochen

Ja, oder auch in iPython oder so heißen die auch irgendwie Magic und dann gibt es diverse.

Jochen

Ja, aber.

Johannes

Aber das ist ja auch wirklich Magic.

Jochen

Das ist wirklich Magic, okay.

Jochen

Aber eigentlich sind halt eben die Python-Dinger gar nicht Magic, sondern das ist halt eigentlich völlig klar dokumentiert, was das ist und was das tut.

Jochen

Und insofern, der Autor sagt selber, ich finde das nicht gut.

Jochen

Die sollten lieber Muggel-Methoden heißen, weil sie halt so unmagisch sind.

Jochen

Aber ja.

Johannes

Ja, er nennt es ja dann auch oft Special Methods einfach.

Special Methods ist auch ein guter Name.

Johannes

Ich glaube, das, was da magisch ist, ist, dass man die implementiert und dann werden sie irgendwo her aufgerufen.

Johannes

Wenn du das nicht weißt, dann ist das schon magisch.

Dominik

Dass du für Anfänger ist nicht ersichtlich, dass wenn du irgendwie so eine Methode dazufügst, die Dinge macht, wo du nicht weißt, warum.

Dominik

Weil das unter der Haube passiert.

Dominik

Aber das Spacefield war ja auch nicht.

Dominik

Also magisch schon gut.

Dominik

Das macht ja Magie.

Dominik

Aber es passiert irgendwas, dann machst du einen String auf irgendein Objekt und dann kommt da irgendwas raus, weil du eine Rapper-Methode überschrieben soll.

Ah, Magie.

Johannes

Ja, wobei das natürlich eine sehr dünne Schicht Magie ist.

Johannes

Wie der Jochen schon gesagt hat, da gibt es eine Liste, so viel Magie gibt es und die sieht auch so und so aus und im Wesentlichen ist das ja nur eine syntaktische Umformung.

Syntaktische Magie.

Johannes

Damit syntaktische Magie, genau.

Dominik

Ja, aber das ist doch quasi echte Magie, ich meine.

Dominik

Echte Magie, da fummelt jemand vor den Augen mit deinem Fingerschnipsen rum und auf einmal zieht er hinter seinem Ohr eine große goldene, glänzende Münze.

Johannes

Ja, das sind Illusions, das ist keine Magie.

Dominik

Das ist so ein bisschen aber syntaktische Magie.

Johannes

Ja, aber echte Magie ist doch das, was man aus Harry Potter kennt.

Johannes

Dann schwingst du deinen Zauberstab und dann passiert irgendwas die richtigen

Jochen

Worte in der richtigen Reihenfolge sagen, genau.

Johannes

Das macht irgendwas, was thermodynamisch nicht möglich ist.

Dominik

Ja, genau, aber sind wir eigentlich alle relativ einig.

Dominik

Das gibt es halt auch nur in Harry Potter oder in.

Jochen

Ich weiß nicht.

Jochen

Also ich finde tatsächlich die Analogie auch gar nicht so schlecht für Programmieren insgesamt.

Jochen

Also ich meine, das ist halt, also ich meine, was ist es, also man sagt irgendwie, du sagst die richtigen Werte in der richtigen Reihenfolge und dann passieren Dinge, genau.

Jochen

Ja, ich finde, das ist gar nicht so weit hergeholt, dass man dann das.

Johannes

Deshalb sind wir alle Wizards.

Dominik

Ich habe auch keinen Wizard-Pullover.

Jochen

Es gibt auch tatsächlich Leute, die Nicht-Programmierer als Moogle bezeichnen.

Jochen

Also ich weiß, so weit würde ich jetzt nicht gehen vielleicht, aber.

Echt?

Johannes

Ich bezeichne den mal als NPCs.

Okay.

Ja.

Nein.

Johannes

Tatsächlich das erste Beispiel in einem nicht näher benannten Buch, was ich kürzlich gelesen habe.

Johannes

Das hat mich tatsächlich etwas überrascht.

Johannes

Da war tatsächlich ein bisschen Magie drin.

Johannes

Und zwar, da wird ein Card-Deck implementiert.

Johannes

Ja.

Johannes

Und er implementiert nur zwei von diesen Methoden.

Johannes

Ja, alles für Kartentricks dann.

Johannes

Und er implementiert nur zwei Methoden, nämlich dann The LEN und dann der Get-Item.

Johannes

Ja.

Johannes

Und das reicht aus für Slicing und Ranges und Rewst und Iterationen.

Jochen

Das hat mich

Johannes

etwas überrascht, dass der Python-Interpreter sich aus einem Get-Item, aus einem LEN, kann er sich alles zusammenbasteln.

Johannes

Ich meine, es ist nicht, wenn man so ein bisschen drüber nachdenkt, ist es einfach nur smart, dass das geht und es ist auch klar, dass es geht.

Johannes

Wenn ich weiß, wie viele es sind und ich ein einzelnes holen kann, dann kann ich auch mehrere holen.

Johannes

Okay, cool.

Johannes

Und ich kann auch Reverse machen drauf.

Johannes

Okay, auch das ist nicht arg überraschend.

Johannes

Und ich kann auch Iteration machen drauf, okay, auch das ist nicht arg überraschend mehr.

Johannes

Aber dass es, dass es implementiert ist, das fand ich sehr cool.

Jochen

Ja, man delegiert im Grunde die ganze schlaue oder die ganze schwierige Funktionalität von, wie das halt so funktioniert, an die interne Liste in der Namen.

Dominik

Die schnell auch funktionieren kann, bei dem man einfach so eine Längen-Get-Item definiert.

Jochen

Ja, aber Johann

ist nicht delegiert.

Johannes

Sondern der ruft Lenon Get-Item an.

Dominik

Ja, aber das macht ja die interne Repräsentation von Längen, wird ja aufgerufen.

Dominik

Also das heißt, die Magie wirklich dann in C-Python passiert, die ja damit schnell ist und so, da muss er implementieren.

Johannes

Gut, in dem Beispiel wird nicht implementiert, wie du tatsächlich Objekte speicherst, sondern er benutzt eine Liste.

Jochen

Genau, es wird halt sozusagen, das wird weitergereicht, die Position wird weitergereicht an die Liste.

Genau.

Und die kann halt nicht mehr.

Johannes

Also die Implementierung, die Implementierung dieser beiden Attribute ist tatsächlich einfach durchdelegiert.

Johannes

Aber dass du dann daraus eine Slicing-Syntax kriegst mit Rang.

Johannes

Das ist ja, das macht ja der Interpreter für dich.

Jochen

Ja.

Johannes

Das heißt, der macht sich diese Ranges und ruft dann die einzelnen Get-Items auf.

Jochen

Ja.

Jochen

Also hat mich auch gewundert, hätte jetzt auch nicht gedacht, dass man dann schon iterieren kann.

Jochen

Das war mir gar nicht klar.

Jochen

Das reicht, Get-Items zu implementieren.

Dominik

Ich muss meine naive Karteninterpretation von meinem Kartenspiel, von meinem Pokerspiel auch nochmal anpassen, wenn ich das so sehe, weil tatsächlich ich da auch immer dann ein Objekt gemacht habe, an den Karten dran waren, was natürlich dann eine Liste war, was aber nicht hieß, dass man einfach das Ding mischt, sondern muss halt diese Mischmethode aufrufen.

Dominik

Ich glaube, das ist einfach totaler Quatsch.

Johannes

Ja, da gibt es aber auch verschiedene Ansätze.

Johannes

Da kannst du auch auf verschiedene Arten und Weisen dran gehen.

Johannes

Du kannst dran gehen und sagen, ich mache jetzt eine neue Klasse, die eine Liste einpackt und dann halt so ein paar magische Methoden.

Johannes

Ich sage jetzt ja magische Methoden, ja, exportiert.

Johannes

Oder du kannst sagen, ich behandle jetzt eine Liste wie ein XY und Z.

Johannes

Und dann implementierst du erstmal selber gar nichts, sondern benutzt halt die Werkzeuge, die es gibt, auf eine bestimmte Art und Weise.

Es sind ja schon zwei

unterschiedliche, aber gleichwertige Herangehensweise.

Dominik

Aber dieser letzte Ansatz hast du irgendwie wirkt smart.

Dominik

Also weil man halt tatsächlich nicht das Rad neu machen muss.

Dominik

Und ich glaube, das ist eine ganz interessante Punkt.

Dominik

Das ist ein bisschen Python, aber es ist trotzdem sehr Pythonic, das findest du es implizit ist.

Dominik

Und in der Kombination, indem man das halt irgendwie schön moderisiert kriegt, kann man tolle Sachen machen.

Dominik

Das wird, also man musste so ein bisschen Boilerplate schreiben vielleicht, aber wie man es halt hinterher wirklich benutzt, wenn man diese Objekte in der Hand hat, wirkt einfach wie Pure Python irgendwie, oder?

Dominik

Wenn man halt dann direkt auf dem Deck, was man in der Hand hat, in DCs machen kann, Wendis machen kann und so.

Jochen

Ja gut, hier geht es ja vor allen Dingen darum, diese Methoden zu erklären.

Jochen

Aber ob man das jetzt so implementieren würde, weiß ich nicht.

Also keine Ahnung.

Jochen

Kommt drauf an, was man damit machen möchte, aber ja.

Jochen

Ja, ja, also ich finde es auch, ich finde es auch, also es sieht gut aus.

Jochen

Kann jetzt keiner sehen, weil es ein Podcast leider ist.

Jochen

Aber ja.

Dominik

Kannst du das teilen?

Ist das Public?

Jochen

Nee.

Na gut.

Dominik

Also ich glaube, es gibt irgendwo bestimmt auf irgendwelchen Kanälen oder sowas.

Ja.

Johannes

Das nächste Beispiel, was er bringt, fand ich auch interessant, aber das ist natürlich so ein bisschen dieses Vektorbeispiel.

Johannes

Das ist natürlich mehr so ein bisschen, ja.

Dominik

Du musst das einfach weiter erläutern, bitte, bei allen unserer HörerInnen, was denn das Vektorbeispiel ist.

Johannes

Ja, er macht sich eine Klasse, eine zweidimensionale Vektorklasse.

Sagt er gleich.

Johannes

Genau, also ein Koordinatenmodell, ein zweidimensionales Koordinatenmodell.

Johannes

Er sagt auch gleich im Vorhinein, könntest du auch die Build-In-Klasse Complex verwenden.

Johannes

Die kann alles, was wir gleich hier machen und noch viel mehr.

Johannes

Aber zum Zeigen ist es ja ganz schön.

Johannes

Und da implementiert er drei Special Methods, nämlich Add, Apps und Mull.

Johannes

Und kriegt daraus dann die Möglichkeit, zwei Vektoren zu addieren.

Johannes

Apps wird hier als die Metrik implementiert, das heißt, es ist die Länge eines Vektors.

Johannes

Und Mull ist eine Skalarmultiplikation, das heißt, du kannst dann einen Vektor mit einem Integer oder mit einem Float multiplizieren, dann kannst du die Länge verändern.

Johannes

Auch das mit wenigen Methoden schon relativ viel erreicht und auch relativ viel Syntax erreicht.

Dominik

Das fehlt aber noch nicht Vektor mit Vektor multiplizieren.

Jochen

Ja, das ist nicht so einfach.

Jochen

Das ist nicht so einfach dummerweise, weil.

Das ist mathematisch nicht so einfach.

Jochen

Das, genau, da steht, glaube ich, im Buch irgendwas drin.

Jochen

Ja, also wie man es das dann macht mit Magic Method, das ist dann in Kapitel 16 oder so viel weiter hinten.

Jochen

Das ist nicht so einfach.

Johannes

Und er sagt auch, er verschiebt auch, dass das tatsächlich in diesen ersten Kapiteln verschiebt er relativ viel auf später, wo er dann so schön, ja, hier, das kommt in Kapitel 17 nochmal oder in Kapitel 38 oder in Kapitel 12.

Johannes

Tatsächlich auch Skalar mit Vektor multiplizieren, also eine Zahl mal Vektor, verschiebt er auch auf später, weil da brauchst du nochmal einen anderen, eine andere Special Method, weil eben Mull nur Vektor mit Skalar kann.

Johannes

Und das ist dann so ein kleines bisschen unbefriedigend.

Johannes

Was ich aber eigentlich, worauf ich eigentlich raus wollte, ist, er hat halt dann die Möglichkeit, seine Klasse mit Plus, hat er zwei Vektoren, zwei Instanzen von seiner Klasse, kann er mit Plus addieren.

Johannes

Und das fand ich nicht so beeindruckend, weil das gab es in C auch schon.

Und das musste ich auch schon mal lernen.

Johannes

Und da heißen die Methoden halt anders, da heißen sie Operator Plus und Operator Minus und Operator noch irgendwas.

Johannes

Und dann kriegst du es aber auch.

Johannes

Da kannst du auch Vektoren addieren und so weiter.

Johannes

Deshalb, da war ich jetzt nicht so beeindruckt davon.

Jochen

Ja.

Dominik

Ich habe das mit dem Multiplizieren nicht verstanden, was du meintest mit Skalar mal Vektor und Vektor mal Skalar, wo ist denn der Unterschied?

Dominik

Das ist nicht kommutativ.

Das ist die Reihenfolge.

Jochen

Ja.

Du kannst halt nicht.

Johannes

Eigentlich mathematisch gesehen ist diese Operation kommutativ, aber in Python an dieser Stelle ist sie noch nicht kommutativ, weil wenn du die Mull-Methode implementierst auf einem auf deiner Klasse, dann musst, wenn du also x mal

Dominik

Y machst, dann wird das Punkt Mull aufgerufen.

Dominik

Weil ansonsten wird dann tatsächlich, ja, genau, ansonsten von dem Skalar die Mull-Methode aufgerufen, da gibt es den Vektor nicht.

Johannes

Genau, und die kann natürlich nicht mit Vektoren umgehen.

Johannes

Und damit es in die andere Richtung geht, brauchst du eine zweite Special Method, da heißt R Mull, also Reverse Multiplication.

Johannes

Und die hat er aber auch später verschoben, weil die später nochmal kommt.

Dominik

Ah, man kann auch R-Mull.

Dominik

Interessant, das wusste ich auch nicht.

Johannes

Genau, damit dann eben diese Kommutativität.

Johannes

Aber es wird zuerst Mull aufgerufen.

Johannes

Das heißt, da geht es dann auch noch um Präzedenz und deshalb verschiebt er das, glaube ich, auf später.

Dominik

Wie kriegt man denn die Präzedenz hin?

Dominik

Also ich möchte das gerne spoilern, bitte.

Johannes

Die kriegst du hin, also ist in dem Fall jetzt hier tatsächlich unproblematisch, aber du musst dann natürlich Type-Checks machen, dass du sagst, okay, was ist denn, wenn ich ein R-Mol mache mit dieser oder jener Sorte von Objekt?

Johannes

Weil da kann ja dann prinzipiell alles reinkommen.

Dominik

Matchcase.

Mit Typecase.

Johannes

Ja, so mit einem Matchcase oder mit einem.

Dominik

Was du nicht implementiert hast, wird einfach ein Normalkreis abgehandelt und ansonsten schreibst du für alle Cases, die einmal auftauchen, was rein.

Finde ich gut.

Ja, im

Johannes

Endeffekt macht der Interpreter das ja auch so, ja.

Johannes

Also wenn eine von diesen Methoden halt einen Fehler wirft oder kein Ergebnis zurückgibt, dann wird halt so lange weitere Methoden durchprobiert, bis es eins gibt und wenn es keinen gibt, dann sagt er halt, ja, das ist nicht definiert für diese Typen.

Johannes

Das haben wir ja auch alles schon mal gesehen, oder?

Johannes

Dass man versehentlich einen String zu einer Zahl addiert hat und dann gesagt bekommen hat.

Johannes

Das kannst du nicht.

Dominik

Es sei denn, man war ein JavaScript.

Jochen

Ja, ja, das halt so ist halt so ein fundamentaler Unterschied zwischen JavaScript und Python.

Jochen

Ja, ja.

Jochen

Ja, also ich finde das ja auch sehr.

Jochen

Ich weiß nicht, haben wir überhaupt schon definiert?

Jochen

Mir fällt das gerade zu heiß ein.

Jochen

Jeden reden wir schon die ganze Zeit drüber, aber ich weiß nicht, haben wir überhaupt gesagt, was, wie diese Danda-Methods denn aussehen?

Jochen

Also die sind immer, haben immer irgendwie zwei Underscores, damit fangen sie mal an und hören immer mit zwei Underscores auf.

Dominik

Genau, Dunder, für alle Leute es nicht kennen, das Unterstrich.

Unterstrich.

Jochen

Dunder ist halt quasi die Abkürzung für Double underscore before und double underscore after.

Dominik

Warum machen Underscores?

Dominik

Damit man denkt, die gibt es gar nicht, damit man die nicht sieht, damit die nicht auffallen.

Nö, Konvention.

Johannes

Kann du dir so unterscheiden kannst von allen anderen.

Johannes

Das ist eine Konvention im Python-Interpreter, wenn du eine Methode hast, die zwei Unterstriche vorne und zwei Unterstriche hinten hat, dann verspricht der Interpreter gar nichts darüber.

Johannes

Das kann sich jederzeit ändern und es kann jederzeit passieren, dass die nicht mehr funktioniert.

Johannes

Ist einfach nur eine visuelle Abtrennung, dass du siehst, dass das was

Dominik

Spezielles ist.

Dominik

Aber wenn ich das richtig verstehe, ruft man solche Methoden niemals selber einfach so an.

Jochen

Niemals stimmt nicht so ganz.

Also ab und zu schon.

Jochen

Also eine ganz populäre ist, achso, das wolltest du auch gerade sagen, weil ist halt.

Nicht du ja.

Jochen

Dann der Init.

Dominik

Ja.

Dominik

Ruft man den Init explizit auf, von außen.

Naja, nicht.

Nur mit Super.

Jochen

Ständig.

Jochen

Nee, ständig.

Ja.

Jochen

Wenn du halt Klasse, Klammer auf, komm mal zu, dann hast du

schon aufgerufen.

Nein, nein, aber das hast du ja.

Johannes

Naja, aber das ist ja die implizite.

Dominik

Ich meine, jetzt, dass du explizit jetzt dran schreibst, Init.

Jochen

Ja, okay.

Jochen

Das passiert tatsächlich nicht so häufig, ja.

Johannes

Ja, bei Super aufrufen schon.

Dominik

Ja, gut, aber du super machst ja mit Apps im anderen Init.

Dominik

Und das offensichtlich, aber außer dem Fall kenne ich jetzt eigentlich keinen.

Dominik

Also sei denn, man will irgendwas debuggen oder sowas, dann haben wir alles anders, aber ja.

Johannes

Es ist halt auch nicht notwendig.

Johannes

Das ist ja der Trick daran.

Aber es die nicht direkt

auf mir sein.

Dominik

Wenn ich jetzt eine App definiere, dann mache ich einfach einen String, dann kriege ich das Ergebnis.

Dominik

Und wenn ich einen Apps definiere, dann möchte ich halt irgendwie mit den Dingen rechnen und gucken, was passiert.

Dominik

Oder beim Bool vergleiche ich mit irgendwas oder so.

Dominik

Oder ich mache ein If vor.

Dominik

Aber ich würde dir niemals selber das vormachen.

Dominik

Und das ist ja aber vielleicht das Interessante an den Dunder-Messets, dass sie halt quasi die Reimplementierung sind, um mit normaler Python-Syntax und den Objekten zu interagieren.

Dominik

Also zum Beispiel Equals oder so oder Lesser-Sen oder ein komparatives Verhalten zwischen einzelnen Objekten von Klassen oder von Instanzen.

Jochen

Ja, du kannst halt sozusagen mit dem Interpreter so interagieren wie die anderen Teile in Python auch.

Jochen

Und das ist halt eine Besonderheit von Python, das geht in vielen anderen Sprachen.

Dominik

Genau, das macht's halt toll.

Dominik

Das ist halt genau das Schöne an diesen Magic Methods ist, dass wenn man das ordentlich implementiert, man hinterher in seinem Code Sachen machen kann, die sehr natürlich aussehen.

Dominik

Und die auch in der logischen Sprache dann natürlich Sinn machen, wenn man Dinge miteinander vergleichen möchte, die man dann vielleicht auch vergleichen kann, weil man denen ordentliche Namen gegeben hat und das aber einfach mit den instanzierten Objekten geht und man halt nicht irgendwie komische Dund-Dan-Methoden oder irgendwelche kryptischen Namen an Objekten aufrufen muss, wie das in anderen Sprachen der Fall ist.

Dominik

Und das ist toll, weil diese Syntax sogar Magie macht.

Dominik

Und deswegen finde ich den Namen Mindigmess jetzt auch sehr schön.

Johannes

Ja, du kriegst also Zugriff auf die Innereien des Python-Interpreters und du kannst dich da genauso rein integrieren wie alle, als ob du dazugehörst und das ist schon was sehr Schönes.

Johannes

Aber du hast eben noch was anderes gesagt, Dominik, was auch hier vorkommt, was ich auch in meinen Notizen habe.

Johannes

Du hast gesagt, du möchtest hier die Strill-Methode implementieren und dann kriegst du eine schöne String-Repräsentation.

Ich habe die Repr-Methode gesagt.

Jochen

Ja.

Jochen

Achso.

Johannes

Oh, dann muss ich nochmal zurückscrollen und mir das anhören.

Johannes

Aber das ist tatsächlich was, ich tendiere auch dazu, immer die Strill-Methode zu implementieren.

Johannes

Weil man das halt so gewöhnt ist.

Johannes

Bei Java machst du Two-String, bei irgendwelchen anderen machst du irgendeine Two-String-Transformation oder was auch immer.

Johannes

Und in Python gibt es da ja zwei davon.

Johannes

Es gibt Rapper und Str.

Genau.

Johannes

Und der Unterschied ist schwer zu erklären.

Johannes

Weil der nicht so, das ist nicht so was Formales.

Ich versuch's trotzdem.

Dominik

Aber die Repräsentation ist das, was in der Kommandozeile auftaucht oder einem String, wenn du ihn da reingeschrieben hast.

Dominik

Und das ist das, was rauskommt, wenn du die String-Conversion versuchst.

Johannes

Ja, aber das geht nicht.

Jochen

Ja, aber warum macht man dann da überhaupt einen Unterschied?

Jochen

Konntest du da genau mit einer machen dann?

Dominik

Das eine identifiziert das Objekt.

Dominik

Okay, erklär du, Johannes.

Johannes

Nee, also das geht schon so ein bisschen runter auf die Krux des Problems, weil diese zwei Methoden doch relativ ähnlich sind.

Johannes

Aber interessanterweise, wenn du Stirn nicht implementiert hast, fällt dir zurück auf Rapper, also auf die Representation.

Johannes

Und die Representation ist in dem Sinne ein bisschen formaler, weil das heißt, du sollst eine Repräsentation wählen, die du idealerweise direkt in den Interpreter reinkopieren kannst.

Johannes

Und das schränkt dich natürlich relativ ein, ja.

Johannes

Das heißt, da hast du üblicherweise dann sowas wie eben einen Konstruktor da drin stehen.

Johannes

Oder String-Repräsentation des Konstruktors.

Johannes

Die Stirn-Methode soll einfach nur eine menschenlesbare Beschreibung dieses Objektes sein.

Johannes

Und die kann dann natürlich auch was anderes sein.

Johannes

Also zum Beispiel für so einen Vektorklasse, da hat er als Representation halt den Namen der Klasse, Vektor 2, Klammer auf, dann die beiden Koordinaten und dann Klammer zu.

Johannes

Und das ist gut, weil das kannst du direkt reinkopieren, das identifiziert genau diese Sache.

Johannes

Als Stirnmethode hat er jetzt hier kein Beispiel im Buch drin, würde ich aber tatsächlich was anderes wählen.

Johannes

Ich würde entweder je nach Kontext vielleicht eckige Klammern wählen oder in einem mathematischen Kontext vielleicht sogar runde Klammern.

Oh.

Johannes

Genau, spitze Klammern, Entschuldigung.

Johannes

Oder vielleicht sogar runde, je nachdem, welchen Kontext es hat.

Johannes

Und da hat man natürlich einfach mehr Freiheit, weil es einfach eine menschenlesbare Darstellung dieses Objektes sein soll.

Johannes

Und ich tendiere eher dazu, die Strillmethode zu implementieren.

Johannes

Und die Argumente, die hier der Luciano uns gibt, die lassen mich jetzt doch auch tendieren, dazu eher rapper.

Jochen

Also, das ist sozusagen die Regel, die man da mitnehmen kann, ist halt, wenn man die, wenn man sozusagen sich entscheiden muss, dann lieber eher nur die Rapper-Methode implementieren, nicht unbedingt.

Ja.

Jochen

Und das war mir auch nicht so in der Feinheit klar, was jetzt da der genaue Unterschied oder Sinn dahinter ist.

Jochen

Und das weiß ich jetzt.

Jochen

Voll gut.

Jochen

Weiß ich schon wieder mehr.

Ja, das ist voll gut, oder?

Ja.

Jochen

Ja, ja, ja.

Johannes

Ich war etwas überrascht, als ich das Buch angefangen habe, weil das erste Kapitel schon ordentlich rangeht.

Dominik

Anfängerbuch, hat Jochen gesagt.

Johannes

Nein, das ist auf jeden Fall ein fortgeschrittenen Buch und der macht auch keine Pausen, ja, der geht direkt weiter hier.

Johannes

Zwei Klassen mit Operatoren, also das ist diese Deck-Klasse und die Vektorklasse und dann macht er noch Bool-Implementierung und dann geht es gleich mit der Collection API weiter.

Johannes

Auch das sehr interessant, sehr interessanter Abschnitt über die Collection API, wo natürlich jetzt mehr an Details drin ist, die ich weder präsent hatte noch jetzt so präsent habe.

Dominik

Ja, also jetzt muss man was prozesen.

Dominik

Einmal bitte.

Jochen

Ja, dafür ist das Buch halt, also das Buch ist schon dicht, okay, ich gebe es zu, aber dafür ist es halt auch nicht so lang.

Ja, das stimmt.

Die nächste Lüge 975 sind.

Johannes

Aber es ist ein Doppelbuchformat, also kann man locker auch in die Tasche stecken, ist auch relativ klein.

Dominik

961.

Also so vielleicht

Johannes

15 x 20 Zentimeter.

Jochen

Ja, also das ist auf jeden Fall doch die Größe, die man sich locker unters Kopfkissen legen kann.

Dominik

Damit sich man automatisch lernt, ja.

Johannes

Kannst du dein Kopfkissen ersetzen, kannst du das mit dem Buch.

Jochen

Ja, aber tatsächlich, also diese, diese, da ist sogar ein UML-Diagramm, das muss ich sagen, da war ich so fast ein bisschen abgestreckt, dass es kaufe ich es auch.

Jochen

Das UML-Diagramm, oh Gott, oh Gott, oh Gott.

Jochen

Aber ja, an der Stelle macht es tatsächlich Sinn.

Johannes

Dominik und ich, wir blättern jetzt gerade für die für die Zuhörer.

Jochen

Ja, ich genau, da gibt es halt ein UML-Diagramm von der Collection API.

Dominik

Was ist jetzt die Collection API?

Dominik

Ich habe es immer noch nicht genau verstanden.

Dominik

Bitte wiederhol das doch nochmal.

Jochen

Ja, also die ist.

Dominik

Was ist überhaupt eine Collection?

Dominik

Um was geht es da?

Intertools?

Jochen

Nee, nein.

Jochen

Da geht es darum, wie grundsätzlich quasi Objekte in Python irgendwie so funktionieren, die eine Collection von irgendwas sind.

Jochen

Und das sind halt die allermeisten.

Jochen

Das sieht jetzt hier nicht so aus, sieht doch irgendwas Spezielles aus, aber das sind halt die allerallermeisten sind sowas.

Jochen

Und da gibt es also Collection selber.

Jochen

Also damit es eine ist, quasi müssen drei Sachen irgendwie implementiert sein.

Jochen

Also es gibt halt drei Methoden, die sozusagen dann ein Ding zu einer Collection machen und das ist halt.

Dominik

Itter?

Jochen

Itter, ja.

Jochen

Du kannst halt irgendwie drüber iterieren.

Dominik

Also ein Iterator bauen.

Dominik

Ein Generator, also irgendwas yieldet.

Dominik

Nee.

Dominik

Nein.

Jochen

Du kannst halt, es muss halt irgendwie.

Fast.

Johannes

Mal ganz generell, so eine Collection ist einfach eine Sammlung von anderen Sachen.

Eine Sammlung von anderen Dingen.

Johannes

Und um das zu ermöglichen, gibt es jetzt hier diese verschiedenen Interfaces, die der Jochen jetzt gerade macht.

Dominik

Erstmal ein Iterable sein, ja.

Dominik

Und dann?

Jochen

Ja.

Johannes

Muss nicht, aber kann.

Jochen

Noch muss eigentlich.

Johannes

Also eine Collection, okay, eine Collection muss das schon sein.

Johannes

Aber es kann ja, es kann etwas geben, was iterable ist, aber keine Collection ist.

Jochen

Ja, klar, genau.

Das gibt

Dominik

es natürlich.

Dominik

Aber eine Collection muss iterable sein und das ist irgendwas, was ist.

Jochen

Sie muss halt iterable sein, also sie muss halt irgendwie eine Größe haben, sie muss halt sized sein und sie muss halt irgendwie ein Container sein, den man halt fragen kann, ja, ist das denn in dir drin oder nicht?

Jochen

Und das sind die drei Dinge, die man halt quasi implementiert haben muss, damit man irgendwie eine Collection ist.

Dominik

Also es ist a part of your collection.

Dominik

Wie viel bist du denn?

Dominik

Und gib mal mehr von dir.

Dominik

Von allem, was in dir drin ist.

Dominik

Das heißt, wenn ich über alles iteriere, dann habe ich alles drin, was drin war.

Alles Toys.

Dominik

For everything in Collection.

Ist das so, ja?

Muss alles ein Iterator über alle in der Rechnung sein?

Jochen

Nee, ich denke nicht.

Jochen

Also du kannst ja dann in der, wenn du das implementierst, da drin ja machen, was du willst.

Jochen

Das kann jetzt auch von irgendwas anderem ab nicht sein, was das so ist.

Johannes

Du musst nur das ITER-Protokoll erfüllen.

Ja, genau.

Johannes

Ein Nextes rausgibt.

Dominik

Also immer dasselbe.

Also diese pathologischen Edge-Cases.

Gib mir mal alle in deinem Ding.

Dominik

Ich will das erste, nee, du kriegst das erste, du kriegst doch das erste.

Dominik

Nein, darfst du immer nur das erste, immer noch das erste Mal.

Johannes

Nee, nee, nee, nee, du rufst ja das Iterable-Protokoll ist ja, du rufst immer Next auf auf dem Iterable.

Dominik

Ach, das doch keine Eltern.

Johannes

Das heißt, du kriegst immer ein nächstes Element.

Johannes

Aber das bedeutet nicht, dass du alle kriegst und das bedeutet auch nicht, dass du alle kriegen kannst.

Johannes

Es gibt da diese pathologischen Edge Cases, die man immer in Einführungsveranstaltungen macht, dass man sagt, hier, wir machen jetzt mal was Iterable und das berechnet einfach die nächste Primzahl.

Johannes

Es gibt dir alle Primzahlen.

Johannes

Aber das ist natürlich keine Sammlung, die je aufhört.

Johannes

Was ist alle Primzahlen iterieren?

Dominik

Unterschied, Joachim?

Dominik

Mit dem Generator und dem Next und dem Yield

und dem.

Jochen

Naja, also weil Iter ist halt die grundsätzliche Geschichte.

Jochen

Das ist halt das, was du brauchst, wenn du vor irgendwas in irgendwas sagst.

Jochen

Ja, ein Generator ist eine Spezifile, ist halt nicht so allgemein.

Jochen

Ein Generator heißt halt dann sozusagen da, ja, kriegst du halt eins nach dem anderen dringend.

Dominik

Hatte Moment, also wenn ich jetzt über irgendwas iteriere, ist was anderes als ein Eins nach dem anderen.

Jochen

Also sag mal so, Generator ist nochmal eine ganz, das ist nochmal eine speziellere Geschichte.

Jochen

Das hat halt irgendwie, das ist jetzt nicht das gleiche wie irgendwie was, über was du iterieren kannst.

Das ist was anderes.

Johannes

Ein Generator implementiert, ja.

Johannes

Ein Generator implementiert das

Iterable-Pokoll, ja, genau.

Jochen

Also ist schon iterable, ein Generator, aber es ist ja eine sehr spezielle Art von was, Iterable.

Aha.

Aha, okay.

Jochen

Aber eine Liste ist auch irgendwie, was iterable ist, aber das ist kein Generator, gar nicht.

Nein?

Dominik

Nein.

Dominik

Das Comprehension schon.

Jochen

Also wenn du eine Liste Comprehension schreibst, kriegst du eine Liste zurück.

Jochen

Du kannst eine Generator Expression hinschreiben, dann kriegst du einen Generator, aber das ist wieder was anderes.

Jochen

Also ja.

Jochen

Aber interessant finde ich halt, dass das halt reicht.

Jochen

Diese drei Dinge, also wenn du halt die, wenn du die Dana-Methods Iter, LEN und Contains implementierst, dann hast du halt eine Collection quasi.

Jochen

Und dann gibt es halt noch die eine zusätzliche Geschichte, die halt sozusagen dann daraus etwas, nochmal was Besonderes macht.

Jochen

Das ist halt reversible.

Jochen

Wenn das irgendeine Reihenfolge hat, dann ist es halt eine Sequenz.

Jochen

Ja, aber das ist halt das, was das unterscheidet.

Jochen

Also eine Sequence kann halt irgendwie beliebig sortiert werden.

Jochen

Das macht es halt besonders.

Johannes

Und das klassische Beispiel ist eine Liste.

Liste ist eine Sequence.

Johannes

Wenn man Sequence sagt, kann man immer an Liste denken.

Jochen

Ja.

Jochen

Und genau, ansonsten ist halt ein Dikt ist halt auch eine Collection.

Jochen

Ist halt ein Mapping, sozusagen.

Dominik

Ein Set ist keine Liste, aber ein Set ist schon eine Collection.

Genau, schon ist der dritte Basistyp.

Dominik

Aber keine Sequence.

Johannes

Also das sind dann die Basistypen, die sie da ableiten.

Sequence, Mapping und Set.

Johannes

Und die drei verhalten sich unterschiedlich und daraus, das sind aber die, die man dann einsetzt.

Johannes

Also diese Bausteine, also ein pures Iterable, ich meine, geht prinzipiell schon oder ein pures Size.

Johannes

Wüste ich nett, dass ich das schon mal gesehen habe.

Johannes

Aber natürlich Sequence und Mapping und Set, das sind die Sachen, die man dann tatsächlich benutzt, weil da hast du dann die Bausteine zusammengesetzt zu dem, was man tatsächlich einfach braucht.

Johannes

Das, was dann sinnvoll ist.

Johannes

Und da kann man dann auch Beispiele sagen.

Johannes

Also ein Beispiel von einem Iterable könnte ich jetzt nicht unbedingt sagen.

Johannes

Also von einem Puren.

Johannes

Aber von einer Sequence ist easy.

Dominik

Ein Huhn.

Ein Huhn ist ein Iterable.

Dominik

Nickt ein Ei, liegt noch ein Ei, liegt noch ein Ei, liegt noch ein Ei.

Johannes

Ja, es wüsste jetzt nicht, wie man es in Python, aber ja.

Johannes

Es gibt auch Hühner in Python.

Jochen

Dann ist halt die Frage, was war zuerst da?

Jochen

Das Ei oder das Huhn?

Jochen

Ah, ja, ich weiß auch nicht.

Johannes

Wenn du eine große Schlange hast, kannst du ja mal einen Huhn reintun und dann schauen, ob es iteriert.

Jochen

Ich habe letztens irgendwo irgendwo so ein Schaubild gesehen, wo ein Biologe meinte, sowas ist eine Quatschfrage.

Jochen

Also irgendwie, wir malen hier einfach mal so diesen evolutionären Stammburgen auf und da haben wir überall Eier, aber nur da ganz unten ein Huhn.

Jochen

Natürlich war das Ei zuerst da.

Das ist eine völlig triviale Frage.

Ja.

Okay.

Johannes

Genau, und Mapping, ich meine, das kennt man auch, das ist ein Dictionary und Set kennt man auch, das ist ein Set.

Johannes

Und das sind dann die Sachen, die man tatsächlich benutzt.

Johannes

Aber diese Protokolle, also das, was die tatsächlich an Funktionalität anbieten, das ist hier zusammengesetzt aus diesen ABCs, aus den Abstract-Base Classes.

Benutze ich tatsächlich auch.

Johannes

Der Trick ist, dass wenn du diese ABCs implementierst, dann, genau wie vorhin bei den Special Methods oder bei den Magic Methods, dann kannst du dich in den Python-Interpräder so rein integrieren, wie wenn du ein Dikt wärst oder eine Liste oder was auch immer.

Jochen

Ja.

Dominik

Also dann habe ich ein Interface implementiert.

Dominik

Kann man das so sagen?

Johannes

Ja, es heißt hier nicht Interface, sondern Protokoll.

Dominik

Aha.

Dominik

Das heißt vom Typing-Protokoll kann ich das dann benutzen.

Jochen

Das ist nochmal eine andere Geschichte, aber ja, das funktioniert dann, das ist eine andere Art,

das zu machen.

Aber das macht quasi genau.

Dominik

Deswegen, also Abstract-Base-Klasse, ja, braucht man das?

Jochen

Also du kannst, also das Problem bei den Abstract-Base-Class oder der, das ist halt, es funktioniert halt anders.

Jochen

Es ist halt sozusagen, das hat man in der Typing-Episode auch, es ist halt sozusagen nominative Typisierung sozusagen in dem Sinne, dass du jetzt bei jedem Ding, das du erzeugst, dadurch, dass du von so einer Abstract Base Classe erbst, sagst du halt genau, was es ist.

Jochen

Und das ist das, weil was davon erbt, ja.

Dominik

Genau, und bei Protokoll nicht sein, weil deswegen Protokoll eigentlich viel flexibler für sowas und auch viel besser geeignet.

Jochen

Ja, ja, aber es hat dann natürlich auch wieder Nachteile.

Dominik

Naja, wenn du sagst, es muss eine Collection sein, die da reingeht, dann ist doch scheißegal, was für eine Collection das ist.

Dominik

Weil das Protokoll der Collection erfüllt und die dann, des Mappings oder das Sets oder sowas, und das ist irgendein Set, das da rein muss, aber du sagst halt, es muss halt diese Sachen da drin haben, die im Protokoll definiert sind, also in den Methoden, die man für ein Set halt braucht.

Genau, aber was sagst du ja damit?

Dominik

Ja, aber dann ist das doch okay, aber dann muss ich doch keine Abstrakt-Base-Klasse verwenden.

Das ist irgendwie komisch.

Doch, klar.

Johannes

Das ist ja genau die Formalisierung davon.

Johannes

Du helpst von dieser Abstract-Base Class, dann hast du erstmal nichts umgesetzt, dann implementierst du die ganzen Sachen.

Dominik

Nein, Protokoll.

Johannes

Dann wirst du zu einer Collection.

Johannes

Deine Klasse ist eine Collection.

Nein, aber dann kannst du es auch überprüfen.

Johannes

Wenn du nur Typing sagst, das entspricht dem, dann hast du das nicht überhaupt.

Jochen

Wenn du ein Protokoll-Dings machst, dann würdest du sagen, is Collection, also is Instance of Collection, sagt der halt, nö, eher nicht.

Jochen

Was du dann machen kannst, ist halt, dein statischer Type-Checker kann immer noch Fehler finden.

Jochen

Genau.

Jochen

Ja.

Dominik

Mein Linter sagt mir halt, ja, nee, aber der will jetzt eine Collection haben und nichts anderes.

Jochen

Ja, aber wenn da jemand anders eine Instance auf deinem, was auch immer das Ding ist, irgendwie aufruft, dann kriegt der nicht und sagt, ist das eine Collection?

Dann kommt er zurück.

Jochen

Nö, ist nicht.

Dominik

Ja, okay, weil das kein hartes GRB ist.

Jochen

Weil es ist nicht wirklich eine Collection in dem Sinne.

Dominik

Aber es interpretiert nur das Protokoll, als wäre es eine Collection.

Johannes

Genau, also quasi die Formalisierung davon.

Johannes

Du gibst es technisch rein und sagst, das ist

Dominik

keine Collection.

Nicht nur komprimiert damit und das übereinander.

Dominik

Oder glaubst du deinem Linter, der dir sagst, das könnte passen oder nicht?

Jochen

Naja, es hat halt alle so Vor- und Nacht.

Glaube ich überhaupt gar nicht.

Dominik

Ja, aber warum will ich denn niemals testen, ob es Instance of Collections ist?

Dominik

Ich will nur wissen, ob dann das Lintet, weil es die Methoden implementiert und ich will, ob es Instance auf, keine Ahnung, meine Superliste.

Jochen

Es ist halt

Johannes

so, da gibt es ja schon Use Cases dafür, dass du sagst, okay.

Dominik

Ich will wissen, ist Instance Platten.

Funktion, die alles mögliche.

Dominik

Oder es ist Instance.

Johannes

Funktion, die alles Mögliche verarbeiten kann, muss ja schon eventuell auf unterschiedliche

Arten drücken.

Dominik

Nein, aber ich will wissen, ist Instance Buch, weil wenn ich nach der Bücher Collection gucke und ich will niemals wissen, ob es eine Collection von irgendwelchen abstrakten Dingen ist.

Dominik

Deswegen ist das Bullshit, das mit abstrakten Base-Klasse.

Dominik

Meiner Meinung nach so eine super Metal-Karte.

Johannes

Dass du noch nie eine Bibliothek implementiert hast, die so eine Funktionalität anbietet, ist jetzt schade, aber so ist es.

Jochen

Ich meine zum Beispiel, wo das halt häufig auftritt, also wo ich ja ich das kenne mit denen, dass man halt irgendwie, es gibt halt viele Methoden, zum Beispiel nehmen wir jetzt bei Data Science-Geschichten, irgendwie sowas wie irgendwie Data Pipelines oder irgendwelche Modelle oder so.

Jochen

Und da kommen halt manchmal so wirklich komische Sachen rein.

Jochen

Und ich habe auch schon viel Cyclit-Learn-Code zum Beispiel gelesen und so.

Jochen

Viele Methoden oder viele Funktionen, die fangen an mit, also, sag mal, bist du eigentlich ein sowas?

Jochen

Oder bist du vielleicht sowas?

Jochen

Und dann machen sie halt unterschiedliche Dinge, je nachdem, was das dann ist.

Jochen

Und das ist halt teilweise wirklich lang am Anfang.

Jochen

Und ja, ich wüsste jetzt nicht, wie man das anders machen könnte, außer so.

Jochen

Also, also, ja.

Johannes

Eine Sorte Funktion, die man auch häufig sieht in Bibliotheken, ist, wo du entweder einzelne Elemente reingeben kannst oder gleich eine ganze Sammlung.

Johannes

Und dann musst du halt auch am Anfang dieser Funktion in der Implementierung unterscheiden können, ob du jetzt gerade ein einzelnes Element in der Hand hast oder ganz viele einzelne Elemente.

Johannes

Und da musst du schon irgendwie eine formalisierte Unterscheidung machen.

Johannes

Da hilft dir auch der Linter nix, weil der geht ja zur Laufzeit nicht.

Johannes

Also es macht schon seinen Sinn, diese Sachen so zu deklarieren.

Johannes

Insbesondere wenn du eben hier solche, sag ich mal, grundlegenden Funktionen implementierst.

Johannes

Man kann das auch zu weit treiben.

Johannes

Wenn man das zu weit treibt, dann kriegt man Java.

Johannes

Und man muss da eine Balance finden.

Johannes

Aber es ist, es ist, um wieder darauf zurückzukommen, es ist schon interessant, dass das eigentlich so relativ simple Sachen sind.

Johannes

Also hier dieses UML-Diagramm ist eine Viertelseite.

Johannes

Und es stehen ja wirklich nicht viele Sachen da drin.

Johannes

Es sind nicht viele Methoden, die man umsetzen muss.

Jochen

Ja, und es ist halt irgendwie quasi, also die meisten oder viele Leute werden sich niemals aus diesem Universum von dem, was da definiert ist, rausbewegen, weil damit quasi fast alles erschlagen ist, was man so normalerweise so tut.

Jochen

Das ist schon faszinierend, dass das geht, ja.

Jochen

Ja, außer Skalare, okay, die stehen da jetzt auch nicht drin normalerweise.

Ja.

Johannes

Ja, und dann ist das erste Kapitel ja schon fast vorbei.

Johannes

Dann haben wir nachher die Übersicht der Dunder Methods, da wird einmal nochmal komplett alle aufgeführt, auch schön, so völlig ohne Zusammenhang her mit Metaprogramming und Abstract Base Classes und Attribute Descriptors und Attribute Management.

Also da ist es interessanter reinzuschauen, was es alles gibt, aber ich wüsste jetzt nicht bei allen, was die tun.

Dominik

Was ist der Unterschied zwischen GetAttribut und GetAttribute?

Johannes

Ja, es kommt in Kapitel.

Jochen

Also das eine ist irgendwie nochmal ein Stückchen allgemeiner, glaube ich, als das andere.

Jochen

Ich glaube, GetAtter ist halt das wirklich ganz allgemeine Ding und GetAttribute ist halt, guckt halt wirklich.

Ganz tief runter.

Johannes

Das eine ist näher drin, oder?

Johannes

Das eine ist.

Jochen

Also GetAttere kannst du auch, da kannst du auch Methoden überschreiben.

Dominik

Genau, die Frage ist halt, wann welches Dick das reinguckt, wenn du guckst.

Jochen

Aber so ganz genau, was ich das jetzt auch alles nicht.

Init Subclass.

Johannes

Wüsstest du, was in a Subclass macht, Jochen?

Oder Prepare?

Jochen

Ich weiß es aus einem, wir haben ja auch schon die nächste Episode.

Jochen

In a Subclass, das ist halt der Grund, warum Leute Metaklassen verwenden, ist eigentlich der, dass sie halt irgendwie die Klasseninstanzierung ab und zu mal so ein bisschen modifizieren wollen.

Jochen

Und fast alle Use Cases lassen sich, also Betaklassen selber zum Benutzen ist super füttelig.

Jochen

Man muss extrem aufpassen, was man da tut.

Jochen

Und daher ist das halt so ein bisschen auch in Verruf geraten und Leute raten einem davon immer ab, das zu machen.

Jochen

Aber genau, man kann, wenn man jetzt in eine Subclass verwendet, dann kann man fast alle Anwendungsfälle, für den Leute normalerweise so Metaklassen verwenden, halt damit hinkriegen und hat all diese Probleme nicht, die man halt sonst so kriegt, wenn man Metaklassen verwendet.

Jochen

Und das ist, das ist eingeführt worden mit Python 3.6 und ich weiß das halt nicht deswegen, weil ich sowieso immer alles weiß, aber sondern in dem speziellen Fall.

Jochen

In dem Speziellen falsch.

Jochen

In diesem Fall weiß ich es, weil den PEP dafür hat irgendwie, wir hatten ja Martin hier auch mal zu Gast, der irgendwie dann in diesen X-File Ronkelaser geschrieben hat.

Jochen

Und den PEP zur Einführung von Innet Subclass, den hat er geschrieben und das ist damals ein 3-6 reingekommen.

Dominik

Und deswegen ist es natürlich ganz besonders.

Okay, dann habe

ich jetzt das falsche gefragt.

Johannes

Dann sag mal, was Subclass-Check macht ja auch.

Weißt du mal alles?

Jochen

Ja, siehst du, weiß ich nicht.

Jochen

Keine Ahnung.

Johannes

Ja, okay, gut.

Johannes

Also das kommt dann in einem späteren Kapitel und da sind auch MRO-Entries.

Johannes

Also ich meine, dass man da sein MRO bearbeiten kann, das ist ja schon hart.

Kann man sich anders sagen.

Dominik

Das ist ein bisschen tiefer implementiert und ich bin jetzt einfach Type.

Johannes

Ja, keine Ahnung, ich weiß es nicht.

Wir werden es im Laufe dieser Vortragsreihe

vielleicht lernen.

Jochen

Genau, aber was mich also auch überrascht hat, ist das wie.

Johannes

Oder machen wir das ganze Buch heute?

Genau, ja.

Das muss jetzt ein bisschen dauern.

Jochen

Ihr müsst jetzt euch einmal ansteigen, Türen schließen.

Jochen

Was ich auch irgendwie nicht erwartet hätte, also ist, dass halt so viel Zeug sich um arithmetische Geschichten und Operator-Overloading.

Jochen

Also mehr als die Hälfte.

Jochen

Und das wäre mir jetzt auch, hätte ich jetzt nicht gedacht.

Jochen

Wenn man mich jetzt so nachts geweckt hätte und gefragt hätte, so, was machen die Magic, welche Magic Messes gibt es und so, was machen die so, dann wäre ich jetzt bei sowas wie Reper oder irgendwie genau Bool oder weiß ich nicht, sowas gewesen.

Dominik

Augmented und Vice Arithmetic.

Jochen

Ja, aber.

Johannes

Ja, es ist auch, es geht in beide Richtungen und dann gibt es mit Integer und dann gibt es mit Reversed und dann gibt es mit Augmented und dann gibt es mit Bitwise und mit Reversed und Augmented.

Johannes

Also das gibt es alles in drei verschiedenen Varianten jeweils.

Johannes

Sonst sind es ja nicht so viele, aber es.

Jochen

Ja.

Johannes

Ja, gut, Mathematik regiert die Welt.

Ja.

Jochen

Das ist es.

Johannes

Ja, dann ist doch interessant hier.

Johannes

Und am Ende seines Kapitels hat er immer noch einen Soap-Box-Abschnitt.

Dominik

Einen Seifenkette.

Dominik

Den finde ich

Johannes

auch sehr schön.

Johannes

Ja, ja, genau, wo er sich hinstellt und mal ein bisschen predigt.

Johannes

Und das fand ich tatsächlich auch so schön.

Johannes

The Art of the Meta-Object Protocol.

Johannes

Großartiger Buchtitel und habe ich mir jetzt auch mal auf meine Liste gesetzt.

Dominik

Das musst du nochmal genau erklären, bitte.

Johannes

Ja, ich weiß es auch nicht, ich habe es auch noch nicht gelesen, aber ich fand den Titel gut genug, dass ich es mir direkt auf meine Leseliste gesetzt habe.

Johannes

Was ich viel interessanter fand, noch, war ganz am Ende was, wo er sagt, hier der Autor, der dieses AMOP-Buch geschrieben hat, Autometer Object Protocol, der hat Asp-Oriented Programming entwickelt oder getrieben.

Johannes

Und ich habe es dann mal auf Wikipedia nachgelesen, was Aspect-Oriented Programming ist, aber nicht so richtig verstanden.

Dominik

Also Aspekte sind auch irgendwas mit Magie, oder?

Dominik

Da geht es entweder Wasser oder Feuer oder.

Irgendwas mit gegen die Muggel.

Ja, vielleicht.

Ich weiß es nicht.

Ja, muss uns mal erklären, dass man gerne mehr wissen, wie es geht.

Johannes

Aber da sind auf jeden Fall in dieser Soapbox eine schöne Pointer drin, wo man dann dem geneigten Laser als Übungsaufgabe überlassen werden.

Dominik

Vielleicht werden die Designer von Go irgendwann das Meta-Objekt-Protokoll erweitern.

Dominik

Aber das ist im Moment nicht das, was man auf dem Niveau, mit dem man in Python arbeiten kann.

Sag ja.

Johannes

Genau, das ist halt das, was er hier dann sagt.

Johannes

In anderen Sprachen hast du diese Möglichkeit nicht.

Johannes

In Go gibt es tatsächlich Magic-Sachen, weil die halt im Interpreter drin sind, kommst du auch nicht dran, kannst du nichts machen.

Und Pech gehabt.

Johannes

Und das ist ja in Python eben nicht so.

Johannes

Deshalb hier Muggle Methods.

Johannes

Kannst du, kann jeder da hingehen und die Finger drauflegen und dann so tun, als ob er zu Python gehört.

Jochen

Ja.

Dominik

Du wolltest damit einen exklusiven Kreis aufmachen, lieber Johannes.

Johannes

Du musst nur die magischen Worte wissen und in der richtigen Reihenfolge sagen und dann deinen Zauberstab in der richtigen Bewegung schwingen.

Dominik

Ja, du musst aber schon noch in jede Ecke vom Raum schon eine Kerze reinstellen und so.

Johannes

Das ist dann Metaprogramming, was du da meinst.

Dominik

Metaklasse.

Jochen

Muss man ein bisschen auffassen, was man damit sich heraufbeschwört, wenn man zu viel Meta macht.

Jochen

Das kann auch.

Zu viel Magie.

Ja.

Dominik

Wie sagt man?

Dominik

Mary Meet, Mary Greet.

Dominik

And Mary Meet again.

Dominik

Also, wegen des Heraufbestand.

Johannes

Das erste Kapitel war nicht so lang.

Nö, ich bin nicht.

Jochen

Ich war überrascht.

Johannes

Es fängt ordentlich an und ist dann aber nach, also hier 19 Seiten schon vorbei.

Ja, fand ich überraschend.

Johannes

Der legt ordentlich los und macht dann aber gleich direkt eine Pause.

Jochen

Ja, ja, danach kommen dann jetzt irgendwie Sequences und die Spieler.

Jochen

Ja, das ist ja wirklich längst und ja.

Dominik

Da hatten wir

schon mal drüber gesprechen.

Jochen

Pattern Managing Sache, genau.

Jochen

Ja, Pattern Managing ist ja auch sowas, das haben wir auch noch nie wirklich ausführlich besprochen.

Jochen

Das sollten wir vielleicht auch mal tun.

Johannes

Jetzt gibt es dann Kapitel 2.

Johannes

Das ist dann, das ist tatsächlich etwas über 60 Seiten lang.

Johannes

Das ist dann gleich deutlich länger.

Tja.

Johannes

Aber ich meine, wenn man auf 980 Seiten kommen will, muss man.

Jochen

Ab und zu mal eine füllen.

Kapitel machen.

Johannes

Wie viele Kapitel gibt es denn?

Gar nicht nachgeguckt.

Johannes

Ich habe einfach losgelesen, ohne ja zu lesen, wie viele Kapitel es gibt.

Dominik

Ja, du hast doch viele, 900 Seiten.

Hast du ein bisschen Platz?

Johannes

24 Kapitel gibt es.

Dominik

Ah ja.

Dominik

Hätten es 25 sein sollen?

Dominik

Oder wie ist eine andere von den magischen Zahlen, damit man auch in die richtige Stelle kommt?

Johannes

Nee, 24 ist doch gut.

Johannes

Das ist eine abundant Number, oder?

Johannes

Ist doch eine, wo die Summe der Teile größer ist als die Zahl selbst.

Jochen

Okay.

Johannes

Ist doch immer gut.

Johannes

Ja, jetzt kommen die Mathe-Nerds raus.

Jochen

Okay, kannte ich auch noch nicht.

Jochen

Ja.

Johannes

Da habe ich eine Buchempfehlung dazu, wenn mich das interessiert.

Johannes

These Wonderful Numbers.

Johannes

Da ist quasi zu jeder Zahl sind die Eigenschaften beschrieben.

Johannes

Es ist ein sehr nerdiges Buch für nerdige Mathematiker.

Dominik

Einfach keine Angst haben, die Dunkelheit länger ins Auge zu schauen.

Dominik

Je älter man wird, desto mehr versteht man davon auch.

Johannes

Ah ja, als Mathematiker hat man da keine Angst davor.

Dominik

Hat auch wieder was mit Magie zu tun.

Worte der Weisheit.

Spezielle Art von Magie.

Genau.

Dominik

Da wir die ganze Zeit von Magie reden, würde ich gerne meinen Pick tatsächlich nehmen.

Jochen

Ja, oh.

Dominik

Ich nehme doch tatsächlich noch einen Europäison-Talk, weil der liebe Rodrigo einen sehr schönen Talk gemacht hat über so Turtle, kennt ihr vielleicht, auch ganz magische Sachen macht.

Dominik

Das kann Dinge auf die Leinwand malen, die sich drehen, spiralen.

Dominik

Und dann kann man das erweitern, auch zu Fraktalen.

Dominik

Und damit kann man animierte Fraktale für Live-Performances zum Beispiel schreiben.

Dominik

Und zwar relativ einfach, indem man so einfache mathematische Prinzipien verwendet.

Dominik

Und da war ein toller Talk zu und er hat auch einen schönen Blogpost dazu geschrieben.

Deswegen würde ich den gerne mal in die Show sinken.

Jochen

Okay, okay.

Jochen

Okay, gut, cool, spannend.

Johannes

Ich habe heute zwei Picks dabei.

Johannes

Der erste Pick ist ein Buch ähnlichen Ausmaßes wie Fluent Python.

Johannes

Ich hatte nicht mehr in die Kamera für die anderen beiden.

Jochen

Oh, okay.

Jochen

Es ist tatsächlich

Johannes

so, als es kam, es hat ein tatsächlich ähnliches Format.

Johannes

Es heißt Django 5 by Example von Antonio Melee.

Johannes

Und ich glaube, dass das ähnlich ist wie Fluent Python, nur halt

für Django.

Ach, ganz frisch mit Django 5.

Johannes

Weil, also hier, ich habe es leider noch nicht durchgelesen.

Johannes

Es ist, wie gesagt, auch dieses Buch hat 750 Seiten, ein bisschen weniger, aber trotzdem ein ähnliches Format.

Jochen

Was ist das mit vielen Autoren von Programmierhandmüchern, warum müssen die immer so viel schreiben?

Johannes

Und ich glaube, der Trick darin ist halt, dass es by Example ist und eben sehr viele einfach handfeste Projekte enthält, wo er sagt, hier, wir machen jetzt mal einen Blog und jetzt machen wir mal noch mehr Block und jetzt machen wir mal noch mehr Block und jetzt machen wir mal noch Social Website und Social Authentication und Content Sharing und Online-Shop und Tracking User Actions und Managing Payments and Orders und Extending Your Shop und Internationalisation und Caching und E-Learning

Johannes

und Content Management und API und das ist, glaube ich, geht es so ein bisschen in die Richtung, wo auf Flurenpython hingeht, dass es halt über die Basics hinausgeht.

Johannes

Und ich glaube, dass das eine Lücke in meinem Bücherschrank füllt, von der ich bisher nicht wusste, dass ich sie hatte.

Und das freut mich sehr.

Dominik

Also hast du jetzt verendlich Zeit, deinen Dango-Webshop zu implementieren, von dem du schon die ganze Zeit träumst?

Johannes

Mein Blog, ich werde jetzt endlich mal meinen Blog.

Jochen

Ja, genau.

Jochen

Modernisierungs Generators, das vergessen, jetzt ist es wieder.

Johannes

Ja, nee, das ist doch langweilig.

Johannes

Ich muss dynamisch sein und mit User-Tracking und mit Payments and Orders.

Dominik

Ja, das würde ja auch mal Zeit.

Ja, ja, klar.

Dominik

Roi, wieder Magie.

Johannes

Der zweite Pick, den ich mitgebracht habe, ist eine Bibliothek, die heißt Dramatic.

Johannes

Oder vielleicht heißt es auch Dramatic Q.

Johannes

Und das kam auf in einer Diskussion über was kann man denn statt Celary verwenden.

Johannes

Da gibt es jetzt zwar in Django was die Background Tasks, hatten wir ja vorhin auch schon kurz gemacht.

Dominik

Denselben Mastodon-Social-Swert gelesen.

Johannes

Ja, offenbar, ja.

Johannes

Und ich habe mir aber die Links rausgeklickt.

Johannes

Und einer, der mir ins Auge gestochen ist, war eben Dramatic, was auch so ein Queuing-System ist, was aber ein bisschen eine Pythonischere Syntax hat als Salary jetzt zum Beispiel.

Johannes

Und das sah auf den ersten Blick sehr gut aus und ich freue mich darauf, das irgendwann mal einsetzen zu können.

Dominik

Ja, stimmt, habe ich mir auch angeguckt.

Dominik

Das fang tatsächlich nett.

Dominik

Ich hatte nur keine Zeit, habe gedacht, wenn ich jetzt eh noch bis April warten darf, bis Dango Background Task rauskommt, dann spare ich mir einfach.

Jochen

Du kannst es auch jetzt schon verwenden.

Jochen

Also ich meine, es ist noch nicht wirklich dafür gedacht, dass man es jetzt verwendet, aber Django Task ist ja sozusagen, kannst du einfach installieren und dann verwenden.

Jochen

Geht.

Dominik

Ja.

Dominik

Ja, warum eigentlich nicht?

Jochen

Kann vielleicht noch zu wenig, aber ja.

Jochen

Also, ja.

Jochen

Also ist auf jeden Fall eine gute Idee, wenn man das noch nicht gemacht hat, einfach mal das auszuprobieren, weil dann muss man sich nichts mehr, muss man nichts mehr umstellen, wenn es dann irgendwann dazu gibt.

Dominik

Ja, also es gibt so ein paar Module.

Dominik

Wie heißt das Django Background Tasks tatsächlich?

Dominik

Ich weiß nicht, dass du irgendwo.

Jochen

Django Tasks heißt das bei mir.

Dominik

Du hast glaube ich gerade Background Tasks gesagt, weil das ist ein völligstelliges Modul.

Dominik

Und Dango Task ist tatsächlich gut im Vergleich dazu.

Dominik

Und weil Dango Background Task gibt es auch und das wird man schwer wieder losgehen.

Jochen

Ja, ich verlinke das dann, aber es ist genau, es ist.

Dominik

Es gibt mehrere Module, die ähnlich benannt sind, die alle versuchen, was ähnliches zu tun oder mal so oder so naiv implementiert sind und dann relativ anstrengend wieder zu entweder.

Ja, wie auch immer.

Dominik

Also Dango Task ist, glaube ich, das, was wir

nehmen wollen.

Jochen

Genau.

Jochen

Ja, was, ähm, dann picke ich auch nochmal was.

Jochen

Was ich jetzt, ich hab ein, ich weiß nicht, ist auch eher was Spezielleres, was jetzt gar nicht so viel mit Partner ist.

Die waren es einfach nur auf Shoppingtour.

Jochen

Ja.

Jochen

Aber ich finde es ganz interessant, weil ich habe ganz lange jetzt so Dinge verwendet wie, also ich habe auch schon mal, also ich mach mal so.

Dominik

Du hast doch erst Geburtstagjochen, das ja.

Jochen

Ja, ja.

Jochen

Aber ich brauch's ja für was anderes.

Jochen

Das ist, ähm, ich habe auch tatsächlich irgendwie mal vor mal nochmal wieder, also wenn ich es schaffe, irgendwie, ich wollte mal Videos machen, mehr wieder.

Jochen

Und dann, da, da brauche ich dann natürlich auch entsprechendes Equipment für.

Dominik

Da soll ich jetzt demnächst mal in meine Eurorex-Sammlung picken, wenn ich.

Jochen

Ja, ja, mach das.

Jochen

Ich finde das gut.

Jochen

Ja, also wie kriegt man eigentlich quasi Bilder von der Kamera irgendwie auf den Rechner?

Jochen

Und ich habe auch schon sowas wie Lightroom verwendet oder so, wo früher mal.

Jochen

Und dann irgendwann dachte ich mir, ach, das brauche ich alles nicht mehr.

Jochen

Und dann habe ich irgendwie teilweise auch eine Zeit lang sogar Apple Fotos verwendet und fand das ganz okay, weil ich muss ja nicht viel machen und das hat geklappt.

Jochen

Und jetzt geht das aber nicht mehr, weil die War-Files, die aus der Kamera rausfallen, die mag Apple Fotos nicht mehr.

Ja.

Jochen

Und da gibt es aber dann vom Hersteller, von Nikon gibt es halt Nikon NX Studio und die kann das, äh, die Software kann dann halt tatsächlich das RAW-Format lesen und das Coole ist und das wusste ich gar nicht, dass das geht, das versteht das so gut, dass es halt irgendwie auch die Profile für alle möglichen Dinge aus der Kamera mit drin hat.

Jochen

Das heißt, wenn du das halt jetzt in der Kamera schon so eingestellt hast, dann kriegst du das halt automatisch halt mit rein oder sowas bei anderen, bei Lightroom oder so eben nicht kriegst.

Jochen

Und du kannst auch dann dir deine eigenen Profile zusammenstellen und die auf die Kamera speichern und dann kannst du halt Bilder machen, die genauso sind, wie du das halt wie dein Look halt aussehen soll und so.

Dominik

Das heißt, du kannst ihn vorher vorprogrammieren

und so.

Jochen

Ja, ja, also das ist wirklich, also man kann damit halt Dinge machen, die sonst nicht so richtig gehen.

Jochen

Das fand ich ganz sett.

Jochen

Und also viele Leute schwammen da auch von, dass es halt irgendwie mit den Farben richtig umgeht und solche Sachen, was halt immer so ein Problem ist bei Fotos.

Jochen

Und das ist alles richtig und das ist wirklich faszinierend.

Jochen

Das kann mehr als man so erwartet.

Jochen

Auf der anderen Seite ist es halt unfassbar schlecht programmiert.

Jochen

Unglaublich.

Jochen

Also einmal ist es ultra langsam und dann ist es also man kann es halt nur so ein paar Minuten lang verwenden und dann verbraucht es.

Dominik

Das klingt als halt zu noch ein neues Hobby.

Dominik

Du hast ja gerade schon Computerspiele in Rust programmiert mit Wetto.

Jochen

Ja, ja, vielleicht zu viel Zeit, ich weiß nicht genau.

Jochen

Aber also das leckt halt unglaublich, was Speicher angeht.

Jochen

Und das verbraucht halt irgendwie innerhalb von, also nach einer halben Stunde sind die 22 Gigabyte weg und dann muss man es neu starten.

Jochen

Was natürlich irgendwie echt totaler Quatsch ist.

Jochen

Aber.

Dominik

Hast du nicht genug Speicherdauer, musst du neu starten?

Jochen

Nee, das passt halt all so.

Jochen

Genau.

Jochen

So, ja.

Jochen

Ich bin nicht nur GPU-Pur, ich bin auch RAM-Pur, ja.

Wir haben nur 32 Gigabyte.

Jochen

Ja, das ist schon ein ziemlich lächerlicher.

Jochen

Ja, muss ich auch sagen, stimmt.

Jochen

Ja.

Jochen

Aber ja, genau, also da kann man nicht genug, kann man irgendwie mit dem RAM-Kaufen nicht hinterherkommen, wenn man halt Software hat, die einfach irgendwie das alles wegfrisst.

Jochen

Einfach so, ohne Grund.

Jochen

Jedenfalls, genau.

Jochen

Also aber wenn man sich lange nicht angeguckt hat, weil man immer dachte, ah, das ist alles furchtbar, vielleicht nochmal hingucken, ist ganz interessant, was da so passiert.

Jochen

Also, ich meine, ist auch so ein bisschen ärgerlich, aber auf der anderen Seite auch faszinierend, was da, was da alles so geht.

Jochen

Ja.

Jochen

Genau.

Jochen

Tja.

Dominik

Ja, vielleicht muss ich doch mal.

Johannes

Das war jetzt aber schon ein sehr spezieller Pick, Jochen.

Jochen

Ja, ja, war sehr speziell.

Dominik

Nochmal, was wir bei Foxtort oder sowas machen, wenn wir hier die ganze Zeit nur so Mediensachen tun wie mit den Bildern.

Jochen

Wir sind ja in so einem Medium-Dings hier auch, ne?

Dominik

Ja.

Dominik

So Musik, ja, die Musik, die ich mache, die finde ich meistens sowieso abartig, wie den Rest.

Dominik

Ja, ich glaube, dann sind wir für diese Episode tatsächlich ausnahmsweise mal früh fertig.

Dominik

Ich habe übrigens tatsächlich zwischendurch Kritik bekommen auf die Python von Leuten, die den Podcast hörten.

Dominik

Ich meine, es wäre viel zu lang, es wäre total nervig.

Dominik

Man könnte es gar nicht mal zwischendurch hören, sondern müsste eigentlich immer so viel Zeit vonnehmen.

Dominik

Man kommt da gar nicht durch, man hört sie nie zu Ende.

Jochen

Ja, da müssen wir mal ein bisschen.

Dominik

Also alles, was wir an weiterer Kritik, Anregung, Fragen und so weiter, hallo at pythonpodcast.de bleibt uns gewogen, hört uns weiter.

Dominik

Danke, Johannes, dass du wieder da warst.

Dominik

Das nächste Mal gerne wieder vor Ort.

Dominik

Du weißt das.

Dominik

Das war eine.

Johannes

Ich komme jedes Mal gerne vorbei, wenn ich da bin.

Dominik

Ja, wir freuen uns wieder drauf.

Dominik

Ja, danke, Jochen, und hört uns bald wieder.

Dominik

Bis dahin.

Tschüss.

Ciao, ciao.