Transkript: Was ist neu in Python 3.15? Vom Textadventure über FrozenDict bis zu Djangos CalVer
Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast.
Lange nicht gehört, schön, dass ihr da seid.
Hi Jochen.
Ja, halli, hallo, hallo Dominik.
Hi Johannes.
Hallo zusammen.
Ja, welche Episode das gerade ist, wissen wir selber nicht so genau.
Wir haben nämlich so ein paar aufgenommen und nicht veröffentlicht und irgendwas mit 70, 71, 72.
Irgendwie sowas.
Wir legen das in Ex post legen wir die Einzelne.
Ich würde sagen, wir stellen einfach um auf Calver.
Ist das der 2610?
Das ist auch gefährlich.
Es kann ja sein, dass dann wieder liegen bleibt, dann stimmt auch das nicht mehr.
Okay, stimmt.
Aber das wäre auch blöd.
Ich meine, wir reden jetzt, wir haben nämlich jetzt ein Thema, das ist aktuell und 3.15, deswegen sollte man das auch schnell veröffentlichen, sonst.
Ja, Python 3.15 ist tatsächlich veröffentlicht.
Genau.
Könnt ihr spielen, habe ich gehört.
Ja.
Es gibt ein wundervolles Adventure, mit dem ihr das alles ausprobieren könnt.
Ich finde, das muss man immer als allererstes sagen, weil das ziemlich cool ist.
Obwohl es schwierig ist, also es ist ein Text-Adventure.
Ich weiß nicht, wie lange Text-Adventures bei euch her sind.
Oder ob ihr aus einer Zeit kommt, wo es das schon gar nicht mehr gab.
Ist aber eigentlich eine nette Art und Weise, finde ich, jetzt so neue Sachen zu lernen.
Ja, wie startet man das denn?
Du musst was in der Kommandozeile eingeben.
Also ich probiere das mal.
UVX.
Minus minus Python 3, 15 WhatsApp.
Und dann, äh, ja.
Ja, und dann gibt es so eine richtig schöne.
Genau, so ein Foyer, mit was alles Neues in Python, was so ein paar Hacks waren, die gefixt worden sind und so.
Und dann kann man sich selber so ein bisschen durchnavigieren.
Es gibt eine Map F2.
Ja.
Schick.
Toll, ne?
Okay.
Ja, wollen wir direkt mal anfangen mit Features oder so?
Oder wie geht es euch erstmal so sagen?
Oder News News?
Es gab viele News.
Ja, viele News, aber wir konnten eigentlich kaum über alles reden.
Ja, wir müssten auf die News aus den anderen noch nachholen, die wir noch offen hatten.
Aber naja.
News sind noch gezwungenermaßen immer Neuigkeiten, oder?
Also kann sich eh nur auf die letzten paar Wochen beziehen.
Okay.
Schieß los.
Haben wir da was?
Also Python 3015 ist rausgekommen.
Oh, oh, das ist ja spannender Zerma.
Ja, ansonsten, ich glaube, also.
Ich glaube, wir bringen uns heute auf 3.15.3.15.
Ja.
Was ist denn da so schönes Neues in Python 3.15 erschienen?
Ja, da sind viele.
Ich habe mir vorhin mal die Release-Notes durchgeschaut.
Also abgesehen von dem Text-Adventure.
Willst du da noch länger drüber sprechen?
Ne, ich fand es ziemlich schwierig und ich habe es ehrlicherweise nicht ganz so weit geschmied in meine Zeit und dann habe ich auch nur die Release-Notes weitergelesen.
Aber ich bin über die PTH-Files gestolpert, wo es ja eine Erinnerung gab, dass man nicht mehr einfach irgendwie ein Paket ausliefern kann, was arbitäre Dinge ausführt.
Habt ihr früher Text-Adventures gespielt?
Seid ihr so alt?
Ja, ich schon.
Oh, Jochen, welches hast du denn gespielt?
NetHac.
Bitte?
NetHac zum Beispiel.
NetHac.
Ja, NetHac ist jetzt nicht ein Text-Adventure in dem Sinne.
Achso, achso, du meinst Text-Adventure im Sinne von.
Ja, ja, ja, das ist schon auch Textbasiert aber.
Ja, okay.
Lass mal, äh, du meinst Text-Adventure tatsächlich sowas wie Sack McCracken oder so, wo man einfach nur Text aus dem Begriff hat.
Das ist auch schon grafisch.
Also ich habe
irgendwann mal zu Weihnachten die Zorg-Adventures auf CD bekommen, da gab es schon CD-Laufwerke.
Und die sind natürlich im Vergleich zu dem, was es dann grafisch gab, nicht ganz so beeindruckend.
Und bin da nie reingekommen.
Ich weiß nicht, das hat mich nie.
Ja, ich fand es auch so ein bisschen.
Also Talk habe ich tatsächlich auch mal so ein bisschen nochmal getestet, aber eher auch so Legacy, weil als ich groß wurde, da gab es schon, was gab es da schon?
Rick Dangerous oder sowas.
Okay.
Und das war natürlich viel wichtiger, dass man so 64.
Das weiß vermutlich auch niemand, was das ist.
Das ist so ein bisschen runter, oder?
Interessanterweise gibt es auch heutzutage immer noch sehr viele Text-Adventures und genauso wie wir im goldenen Zeitalter der klassischen Musik leben, es gibt heutzutage mehr klassische Musik, als es je in der Geschichte der Menschheit gab, sind wir auch im goldenen Zeitalter der Text-Adventure.
Es gibt viele, sagen wir mal, Enthusiasten, die spielen und herstellen und bewerten und man kann es auf H.I.O.
kann man sehr viele finden.
Und vielleicht landen ja ein oder zwei in den Shownotes.
Ich glaube, das kann auch in Python schreiben, oder?
Ja, da gibt es, also es gibt tatsächlich Dialekte, die extra dafür da sind, aber es gibt natürlich auch, kann man auch in Python machen.
Wie wir ja gesehen haben, ja, also das What's Newt ist ja, das ist ja, was Textadventure angeht, das ist ja schon luxuriös.
Oh, ich habe gar nicht geschaut, was das geschrieben wurde, was das Text-Gepfe ist.
Grafik und das finde ich ziemlich cool.
Nee, ist nicht Texture, hat keine Abhängigkeit.
Hat nur Abhängigkeit zu Pyrefly.
Ja, damit man schilde Tests machen kann für Typen.
Es gibt nämlich ein paar neue Typen in Python 3.15.
Oder was ist das?
Form-Type, Type-Form?
So Dinge, die das Typen des Damen und Anfangs.
Ich wollte mir das einfach einfügen.
Ich finde, man kann tatsächlich mit dem ersten Ding anfangen, weil das halt auch einen Bezug dazu hat, worüber wir von einem Jahr oder so.
Ja, da haben wir
auch gedacht, dass
wir geredet, ja, genau.
Ich dachte so, genau, das Problem hatte ich und jetzt hat es irgendjemand eingebaut.
Voll gut.
Also es gibt jetzt einen Central Built-in-Type, wenn man nicht einen None verwenden möchte, weil man None für was anderes braucht, wenn es zum Beispiel tatsächlich ein erlaubter Wert ist, dann was macht man denn da?
Und da gibt es jetzt was eingebautes.
Und das ist aber alles, oder?
Also ich meine, ist da noch mehr?
Nee, dahinter.
Mehr ist dann, also du kannst dem jetzt Namen geben und dann das eben, der Typ davon, den kannst du halt auch dann checken, aber das war es eigentlich schon, ja.
Also so wie wenn man vorher Class Sentinel gemacht hätte und passed.
Class Sentinel Pass.
Das sind die drei zwei Zeiten, die sie eingefügt haben.
Nee, nee, wie gesagt, man kann eben halt, also es ist schon ein bisschen mehr.
Also ja, es ist nicht viel mehr, aber ja.
Okay.
Aber das habe ich mir gedacht, das macht dich froh, weil das hatten wir
ja schon.
Ja, ich bin inzwischen auch wieder zurück zu Nan, weil niemand, also immer versuche ich den Leuten zu erklären und warum und alle gucken mich so verständnislos an.
Und dann so habe ich das Gefühl, wenn ich mich umdrehe oder so, dann kommen dann so Gesten so wie, ja, okay.
Lass dir mal über sein Auto- und Sentinel-Zeugs reden.
Und dann doch None.
Und dann verwenden sie alle einen Code und dann doch wieder None und dann sage ich dann in Code-Reviews, du musst aber hier Auto verwenden oder so.
Achso, erklär doch nochmal.
Auto, ja, genau.
Ich habe es aufgegeben, es funktioniert nicht.
Jetzt kannst du den Leuten sagen, hey, Sentinel.
Du musst einfach Pepsi661 lesen.
Jetzt machst du halt mal und dann kennen
wir wieder.
Ja, ich weiß nicht, vielleicht hilft es auch nicht.
Ich finde es gut, wenn man Nerdigkeit durch Arroganz ersetzt.
Wenn du Pepsi 661 nicht verstehst, weißt du, dann kann ich auch nicht mit dir zusammenarbeiten.
Ach ja.
Ja, okay.
Also es ist keine riesige Änderung, aber es ist doch irgendwie schön, dass es scheinbar mindestens noch eine andere Person gibt, die das Problem auch hat.
Und das finde ich immer gut zu wissen, wenn man nicht der einzige ist.
Ich habe ja schon viele so Bibliotheken geschrieben, wo ich mir gedacht habe, das wäre doch total gut, wenn sowas mal existieren würde und nur um dann herauszufinden, dass ich eigentlich der Einzige bin auf der ganzen Welt, der dieses Problem hat.
Ja, passieren wir auch häufiger.
Also das finde ich auch faszinierend.
Das ist halt irgendwie, wenn man sich so überlegt, die Sachen, die irgendwie andere Leute interessieren.
Also das betrifft sowas wie Stack Overflow Fragen und Antworten.
Also ich habe gutes Stack Overflow, da bin ich auch seit 15 Jahren, oder noch länger nicht mehr, ja, aber irgendwie, ich habe mal eine Zeit lang da Haufen Fragen gestellt und auch Antworten gegeben.
Und es gibt, also ich habe zum Beispiel für eine Frage Superistischen Goldbadge irgendwie gekriegt und das haben irgendwie zehntausende Leute diese Frage angeguckt.
Und es ist, ich denke, also, warum?
Das ist wirklich echt totaler Quark.
Oder auch Antworten, die Leute total interessant fanden, wo ich mir denke, okay.
Ich muss nur sagen, was für eine Frage das war, Jochen.
Ich weiß es ehrlich gesagt nicht mehr so genau.
Aber das war wirklich das Gefallen.
Ist das noch online, die Plattform?
Schreibt uns
einen Kommentar, was ihr denkt, was Jochen damals geantwortet hat.
Ist die Plattform schon tot?
Das ist so ein MySpace-Problem, oder?
Ich weiß nicht, ich meine, die ist noch online, das gibt es alles noch.
Und dann habe ich auch mal Antworten.
Ja, so eine meiner bestbewertetste Antwort ist auch so was völlig banales.
Und dann habe ich teilweise lange Texte oder habe ich geschrieben, super, irgendwie habe ich mir lange Gedanken drüber gemacht oder so, so drei Leute interessiert es oder irgendwie auch niemand.
Also ja, man
kann es.
Meine beste Antwort war irgendwas in Assembler.
Oder war es eine Frage?
Weiß ich nicht mehr genau.
Ja, eine
Nachfrage zu irgendwas, ja.
Ganz schwer einzuschätzen, ob das Leute interessiert oder bei GitHub-Projekten ganz genauso.
Also das beliebteste Projekt irgendwie von mir ist irgendwie so ein für so eine Kochgeschichte.
Das haben wir mal an einem Wochenende so irgendwie gebaut und so, yay, alles super, voll gut.
Und meine Karre, der ist online.
Ich habe mich noch gar nicht geteilt, ne?
Mein Recipes ist online.
Egal.
Kann ich noch gerade drauf kochen.
Ja, es ist immer sehr schwer.
Also rauszukriegen, was so Leute interessiert oder was irgendwie gut ankommt oder nicht, das ist, kann man nicht.
Also ich kann das nicht vorhersagen.
Keine Chance.
Völlig überraschend.
Aber dann brauchst du vielleicht nur noch ein tolles Logo wie der neue Profiler Tachion.
Oder Terry, wie schricht man ihn aus?
Tachion.
Also es gibt einen neuen Python-Profiler.
Bei solchen Wörtern bin ich gnadenlos deutsch.
Das ist egal, wie die Amerikaner oder die Briten das aussprechen, das heißt Tachion.
Tachion?
Tachion.
Ja, was macht der denn?
Hat den jemanden mal ausprobiert?
Nee.
Nee, hab's auch noch nicht ausprobiert.
Also ich meine, das ist das nicht, dass hier, äh, wie heißt er noch?
Pablloch.
Spielzeug von Pablo, genau.
Und ich meine, der ist, ähm, macht es halt statistisch.
Also normalerweise ein Profiler.
Ja, ja, das steht ja auch in den Notizen.
Macht aber dann, das Problem beim klassischen Profiler ist, macht halt alles auch langsamer und halt Einfluss auf das Laufzeitverhalten, was ja irgendwie doof ist, weil muss halt immer mit irgendwie alles mitschleifen.
Und Tachion guckt sich halt nur periodisch den gesamten Call-Trace von der Applikation an und zählt dann einfach.
Und sagen, das ist halt natürlich wesentlich weniger invasiv, das heißt, aber es ist halt, es liefert dann halt nur statistische Ergebnisse.
Also man muss annehmen, dass wenn ich jetzt ab und zu mal mit den kompletten Calltrace von der Gesamtapplikation angucke, dass die Sachen, die halt viel Zeit verbrauchen, dann halt da auch häufig auftauchen.
So, wenn ich das annehme, dann ja.
Naja, also das klingt so ein bisschen so, als wäre das schon an 313, 314 irgendwie benutzt worden.
Das wäre es dann irgendwie jetzt dann nach draußen geschafft, weil diese statistischen Optimierungen in C gab es ja schon in den letzten Python-Releases.
Ja, und also ich meine, es gibt ja immer wieder Sachen, die sich von der Welt in die Standardbibliothek reinbewegen.
Das ist ja jetzt nichts ganz Neues.
Das gilt natürlich nicht für Programme, die nur eine Sekunde brauchen.
Also es geht nur Programme, die länger laufen, weil eben diese statistische.
Aber hier sind schöne Key-Features drin.
No Code Modification required, also man muss gar nichts machen.
Flexible Target Modes.
Man kann einfach einen bestehenden Prozess sich da dran klatschen.
Und das ist natürlich für operative Sachen total gut, wenn man irgendwo einen Django-Prozess laufen hat oder irgendwo einen was weiß ich.
Ein Salary-Prozess oder was weiß ich, dann ist es natürlich sehr cool, wenn man da einfach sagen kann, den hier jetzt mal für die nächsten fünf Minuten überwachen, bitte.
Das macht es schon mächtig.
Für die Use Cases natürlich, für die man da hat.
Also für ein Skript, was vier Sekunden braucht, statt zwei Sekunden, würde ich einen traditionellen Profiler verwenden.
Da reicht der statistische Boden nicht aus dafür.
Ja, das ist doch schön, aber Profiling ist natürlich auch so eine, das ist schon so eine Profisache, oder?
Würde ich sagen?
Das ist schon sowas, was.
Und damit du sich Mikrosekunden abweichen messen kannst und dann rausfindest, ob da irgendwie so ein Attack eingefunden hat.
Das ist natürlich für die ganz großen Profis, wenn auf einmal der SSH-Login länger dauert und man dann eine globale Verschwörung rausfindet.
War ein netter Use Case.
Ist mir noch nicht gekommen.
Tja.
Ich muss auch sagen, Profiler sind so ein Tool, wo das jetzt das Gegenteil von dem, was die, was wir eben hatten.
Da sagen alle Leute, das ist was total Tolles und wichtiges und wenn du Performance-Probleme hast, musst du ja immer sofort einen Profil auspacken.
Mache ich eher selten.
Ja, ich bin es auch selten.
Also es gibt manchmal Situationen, in denen.
Aber das Problem ist auch mal, ich brauche es so selten, dass ich mir auch nie so richtig merke, wie das alles gut funktioniert und was man da machen kann oder so, sodass es halt dann.
Deine Nerdcredibility leidet gerade enorm.
Bitte?
Deine Nerd Credibility
leidet gerade.
Nee, das liegt daran, dass unser Code halt immer schon optimal ist, Dominik.
Deshalb brauchen wir die Notprofile.
Ja, aber dass man so wirklich Performance Probleme hat, ist halt einfach nicht so häufig.
Also der bei mir, so habe ich jetzt einfach nicht so.
Ja, passiert es halt seltener.
Ja, okay,
Performanceprobleme habe ich schon, aber die sind dann bei mir meistens, naja, der Unterschied zwischen O von N hoch 3 und O von Log N ist halt sehr deutlich sichtbar und meistens weiß man das ja dann auch.
Oder man findet es dann sehr schnell raus, ohne tief reinprofiern zu müssen.
Es ist ja nicht so, dass wir Anwendungen schreiben, ja, die irgendwie ein Frame-Budget haben, die in 16 Millisekunden fertig sein müssen.
Alle 60 Mal pro Sekunde, sondern es ist ja mehr so ein paar, wenn hier viele CSVs in dem Verzeichnis liegen, dann dauert es manchmal fünf Minuten statt nur vier Minuten.
Aber vielleicht ist es doch relevant, ne?
Vielleicht macht es Sinn.
Also für alle solche Sachen ist das super.
Vielleicht, ja.
Okay, ich habe ein cooles Feature.
Das steht unter Interpretor Improvements.
Ist kein Feature, es steht unter Interpreter Improvements.
Und da brauche ich eure Hilfe, weil ich dachte, es wäre schon seit Python 3.0 so.
Python now uses UTF-8 as the default encoding.
Das habe ich auch gedacht, dass das schon so ist.
Was ist daran neu?
Ist das jetzt anders?
Ist es nicht schon seit seit, also Python 3 gibt es jetzt auch schon seit mehreren Jahren.
Ist das nicht so?
Ja, also hätte ich jetzt auch erwartet.
Ich überrascht es auch, dass das irgendwie nicht default gewesen sein soll.
Was war denn der Default?
Auch lustig.
Die als Beispiel in dem PEP haben sie irgendwie Open Flying Circus Txt.
Wo das wohl herkommt.
Das wäre auch interessant.
Ja, ich weiß es nicht.
Ehrlich gesagt, keine Ahnung, was der bisherige Default war, aber ich dachte auch, dass es bisher schon so gewesen wäre.
Da muss man die KI fragen, vielleicht weiß sie ja nicht.
Ja, okay, kann ich leider nicht so schnell.
Ja.
Keine Ahnung.
Ja, also ich, das habe ich nicht verstanden, weil ich dachte, das wäre seit Python 3.0 so.
Das war für mich eins der großen Features, dass man auf einmal nicht mehr zwischen String und Bytes, äh auf einmal zwischen String und Bytes unterscheiden kann und dass die nicht mehr
gemischt sind.
Das ist Unicode, aber die Frage ist, wie die encoden wahrscheinlich
System, Locale oder sowas?
Ich weiß nicht.
Hier steht unter Windows meistens CP1252.
Ja, das ist ja vor Unicode, das ist ja ein ganz altes, schreckliches Format.
Aber das, äh, da fällt mir tatsächlich doch noch was Interessantes ein, was man sagen kann.
Python 3 ist ja jetzt nur wenige Jahre alt.
Und es gibt ja trotzdem immer noch so ein oder zwei große Python 2-Installationen oder Python 2-Benutzer.
Und einer der großen, bekannten Python 2 Benutzer war Eve Online.
Ist ein großes, ist ein großes 3D-Spiel im Weltraum.
Und die, also die haben natürlich einen 3D-Client, ja, und der ist in irgendeiner Game Imagine geschrieben, keine Ahnung welcher.
Aber deren Serverinfrastruktur lief lange Zeit auf Python.
Die haben 2003 angefangen mit Stackless Python.
Falls sich daran noch jemand erinnern kann.
Ach, die guten alten Zeiten.
Und die haben dieses Jahr tatsächlich einen Artikel veröffentlicht, dass sie jetzt mit der Migration anfangen.
25.08.
noch gar nicht so lange her, haben sie veröffentlicht.
Wir fangen jetzt an, zu Python 3 zu bewegen.
Und das nur wie viele?
12, 13, 14 Jahre nachdem es.
Wahrscheinlich Hilfe von L<unk>M's sondern
ja, aber es ist wahrscheinlich eine gute Idee.
Ist so allmählich.
Ja, die haben wohl sehr lange auch noch selber diesen, die mussten dann ja irgendwann anfangen, den Interpreter selber zu pflegen, weil da halt einfach Sachen nicht mehr reingekommen sind und das haben sie jetzt schon offenbar keinen Bock mehr drauf.
Was man verstehen kann.
Also ich kann es verstehen.
Also da geben sie Performance-Boosts an.
Ja.
Da ist auch einiges passiert inzwischen.
Vielleicht finden sie auch einfach keine Programmierer mehr, die noch Python 2.
Wie Python 2 können
oder wollen will ich nicht.
Ja, genau.
Also ja, ansonsten, was haben wir noch?
Wir haben noch.
Wunderschönes Unpacking von List
Comprehension Systems.
Das ist sehr schön.
Das habe ich früher auch schon versucht, mal zu basteln, das ging aber nicht.
Ja, erklärt mir das mal.
Das habe ich nicht verstanden, was sich da verändert hat.
Du hast verschachtelte Objekte oder sowas, ne?
Eine Liste.
Und dann möchtest du quasi die anpacken.
Da musste man vorher immer was Kompliziertes schreiben.
Also in der List-Comprehension zum Beispiel dann halt so eine ineinander verschachtelte List-Comprehension, wo man sich dann immer fragt, okay, was ist denn jetzt was?
Welcher Teil bedeutet denn jetzt was?
X verlieh in List vor X in L oder Y.
Genau, da kann man das nachlesen und dann versteht man es wieder für die nächsten fünf Minuten und dann hat man es zwei Tage nicht benutzt und hat man es wieder vergessen, wieum man das jetzt machen musste.
Und jetzt kann man einfach das erste Listobjekt mit dem Asterix anpecken und dann macht man einfach die äußere Liste und dann wird es einfach direkt entpackt.
Flach.
Also ich höre jetzt, ich habe die ganze Zeit nur Skillische gehört, aber okay.
Ja, schon, aber ist es auch kürzer, ist es auch kürzer jetzt.
Also mit dem, also zum Beispiel, also.
Ja, okay,
dieses Sternen, diese komische Sternsyntaxe besser.
Also findet ihr die wirklich besser verständlich?
Ja, also ich finde das ist schon besser verständlich als diese doppelter Schachloten.
Of Ethertools oder sowas.
Also ich benutze es tatsächlich, also der Hauptanwendungsfall für das ist halt Flatten.
Du hast eine Liste von Listen und dann willst du die flatten.
Gibt es dann nicht auch eine eigene Danku-Methode für Flattenliste irgendwie sogar?
Es gibt auch eine eigene Funktion.
Genau.
Und die verwende ich dann normalerweise auch, weil ich mir denke, ja, also es soll einfach klar sein, was da passiert und dann nicht halt Flatten und.
Genau, mit der Sternchen ist das irgendwie klar.
Ja, aber das mit dem Sternchen ist auch relativ klar, ja.
Also ich bin am Anfang, ich habe es mir vorhin ja durchgelesen und ich bin da so drüber gestolpert, diese Syntax, was die genau bedeutet.
Und ich glaube, dass es gerade für Einsteiger nicht einfach ist zu verstehen, was Stern L for L in Lists bedeutet.
Ja, gut, okay.
Aber ja, okay.
Wir werden das sehen, was wieder die Resonanz ist.
Also das ist auf jeden Fall.
Du meinst, es gibt noch Einsteiger, die Python lernen so von der Pike an, wie wir damals.
Ich denke schon.
Schwierig, ja wird es erstmal, wenn die ganzen Agenten.
Ja, aber die ganzen Agenten werden dann gefragt und wenn die Agenten damit auf die Nase fallen, hä, wieso geht doch nicht in ungultigen Sundtags?
Oh, ups, es gab ein Patch in Python.
Na gut, dann können wir auch bei Python 2 bleiben.
Ja, wahrscheinlich schon.
Frage, was ist da gerade aktuell schon mit drin im Skill?
Okay, also man kann jetzt anpacken, das ist doch auch sehr schön.
Wie steht ihr zu Lazy Imports?
Könnt ihr mir erklären, was Lazy Imports sind?
Erst wenn es benutzt wird, wird es importiert.
Ja, beziehungsweise was halt passiert, wenn das, weil was halt auf Top-Level ist, wird ja direkt ausgeführt quasi.
Und was das dann macht, also es wird ausgeführt, aber der Import wird nicht ausgeführt, sondern was importiert wird, ist ein Proxy-Objekt und nicht das eigentliche Ding, was man importiert.
Und erst wenn da mal darauf zugreift, dann wird der echte Import ausgeführt.
Und das braucht man halt, wenn man zum Beispiel eine große Codebasis hat, wie jetzt sowas wie zum Beispiel Instagram oder so, was hat irgendwie zig Millionen Codezahlen und.
Oder Eve Online, 2,3 Millionen.
Das ist ja relativ klein sogar.
Ich weiß gar nicht, ob die das Problem überhaupt haben.
Ja, genau, sowas habe ich, das schreibe ich an den Nachmittag, ja, ganz klar.
Aber ja, bei Instagram war halt zum Beispiel das Problem, dass der Django-Test-Server, also wenn man jetzt halt irgendwie, man ändert Code und dann startet der neu und dann braucht er halt anderthalb Minuten zum Neustarten.
Importe landen.
Importe, genau.
Das ist natürlich irgendwie doof.
Oder was halt auch oft passiert ist, dass man halt irgendwas importiert, was halt wirklich, wirklich lange braucht.
Also irgendwas Data Science-mäßiges, wo dann ein Modell irgendwie instanziert wird oder das halt Sekunden braucht oder also NumPy und Panassen halt auch so, die darauf brauchen auch relativ lange, wenn man die importiert.
Oder da gibt es halt diverse Kandidaten für so, wenn man das importiert, dann hat man passiert erstmal eine Minute, also ein paar Sekunden lang nichts.
Aber das führt jetzt natürlich dazu, dass diese Sachen dann nicht direkt im Speicher liegen, sondern erst zur Run-Time dann geladen werden dann halt.
Ja, aber wenn.
Gut, aber wenn das halt in einem irgendwo passiert, wo es halt egal ist, dann ist es ja okay.
Aber wenn das halt beim Starten passiert, ist es halt doof.
Aber das dauert doch immer noch genauso lange, oder?
Also diese Wartezeit ist ja immer noch da, die ist jetzt nur irgendwann anders, die ist später.
Nein, das dauert nicht.
Also die Frage ist, wann, genau, wann dauert es wie lange?
Ja, genau, die dauert, also anstatt dass es jetzt zwei Sekunden dauert und dann sehe ich den ersten Input, sehe ich den ersten Output, sehe ich quasi das erste Print und dann dauert es zwei Sekunden.
Wenn du jetzt zum Beispiel irgendwas testen möchtest oder irgendwas entwickelst, was halt den ganzen Kram tatsächlich da gar nicht drauf zugreift, weil das halt Codepfade sind, die sowieso nur selten benutzt werden, dann kann es sein, dass du das sofort testen kannst und bist dann zufrieden und musst halt nicht warten.
Okay, also wenn du nicht alles benutzt quasi.
Ja.
Aber ja, entweder sehr große Codebasen oder du findest halt komische Bibliotheken, dann ist es wichtig, ansonsten.
Naja.
So komische Bibliotheken wie NumPy oder Pandas.
Ja, genau.
Seltsamen Kram.
Ja.
Ja, okay.
Also das hat mich jetzt nicht so, haut mich nicht so vom Hocker genauso wie das Comprehension Unpacking.
Fand ich.
Also ich weiß, dass da immer wieder Leute drüber sprechen, ja, über dieses Lazy Importing.
Und ich habe auch, da gibt so ganz alte Artikel, erinnere ich mich von irgendeiner Chat-Plattform, die gesagt hat, wir können Python nicht verwenden, weil unsere Imports so lange dauern.
War bei mir nie ein Problem.
Also an alle Hörer, ja, wenn ihr dieses Problem nicht habt, dann ist das auch in Ordnung.
Dann seid ihr trotzdem gut.
Ihr seid trotzdem gute Hörer.
Der nächste
Eintrag, der hat mich sehr gefreut, weil das ist, was ich schon.
Der nächste Eintrag ist etwas, was mich sehr gefreut hat, weil das habe ich schon lange vermisst.
Und das ist Frozen Dict.
Es gibt jetzt einen Frozen Dikt als Built-in-Type.
Kann man nicht dran sagen.
Ich bin jetzt mal
dran mit erklären, oder?
Frozen Dikt ist ein Dictionary, das sich nicht verändern kann, wo sich die Keys nicht mehr verändern können.
Und das bedeutet, dass man es selbst als Eintrag, als Key in einem Dictionary verwenden kann.
Das hört sich seltsam an.
Und man braucht es auch nicht so häufig, aber wenn man es braucht, ist es echt super praktisch.
Aber Moment, war das nur die Keys oder waren das nicht auch die Keys und die Values?
Die dürfen sie beide nicht mehr ändern.
Oder?
Meine ich.
Moment.
Ich glaube nicht.
Ich glaube, dass es nur die Keys sind, weil du kannst zum Beispiel bei einem Set, wenn du in einem Set eine Liste drin hast, kannst du die immer noch verändern,
die Liste.
Ja, nee.
All of its Keys and Values are hashable.
Ja, okay, hashable, aber, ja, okay, da kommt man ja drum rum.
Ja, okay, stimmt.
Achso, und Dictionaries kann man jetzt in Sets reintun.
Also Frozen Dicts kann man in Sets reintun.
Auch praktisch.
Das ist tatsächlich sehr praktisch.
Warum ist das so praktisch?
Genau.
Das erfordert eine gewisse Code-Komplexität.
Du musst natürlich an eine Stelle drankommen, wo du mehrere Dictionaries hast und zu diesen Dictionaries irgendwas dazu speichern möchtest, was du nicht in das Dictionary reintun kannst.
Das heißt, es ist schwer, jetzt irgendwie ein simples Beispiel zu sagen, was einleuchtend ist.
Aber ich erinnere mich, dass ich immer wieder an solche Stellen komme, wo ich mir denke, ah, das ist kein Problem, das tue ich in dieses Dictionary rein und da kriegt man eben diese Meldung an Hashable Type.
Kann ich nicht in ein Dictionary reintun.
Und das passiert mir immer wieder.
Okay.
Vielleicht bin ich auch der Einzige wert, der
vorhin davorbesprechung drüber gesprochen.
Aber das ist doch dasselbe Probleme, weil das muss ja auch jetzt hier Hashable sein.
Genau, aber jetzt kannst du einfach Frozen Dict draus machen.
Also wenn du eine Menge von Dictionaries hast, kannst du jetzt einfach Frozen Dicts draus machen und die kannst du dann in Set tun oder die kannst du in den Dictionary tun.
Dann ist es Hashable, genau, ja.
Also ein Anwendungsfall, der mir so spontan einfällt, ist halt, du kannst jetzt sozusagen, wenn zum Beispiel die Argumente von irgendwelchen Funktionen oder so Frozen dickt sind anstelle von Dicts, dann kannst du plötzlich das alles cachen.
Kannst du Funktionsaufruf cachen.
Und ja, das ist ja manchmal vielleicht eigentlich ganz cool.
Und oft will man das ja sogar haben, dass halt die.
Macht das jetzt nicht der Interpreter sogar automatisch?
Nee, das ist nicht.
Nee, automatisch nicht.
Ist wie bei Frozen Set.
Das ist auch überraschend.
Frozen Set gibt es ja schon lange, aber Frozen Dict ist jetzt relativ neu.
Deduplikation ist so ein Thema, was bei mir immer wieder kommt.
Wenn ich irgendwelche, ich habe hier einen Ordner voll JSON-Dateien, lad mal die Sachen, die, egal ob da Duplikate drin sind.
Und dann kannst du einfach Frozen Dicks draus machen und die in ein Set reintun und dann hast du am Ende automatisch dedupliziert.
Schön, ist schön, dass das jetzt geht auf einmal.
Ja.
Ist ja ohne Steuer.
Ich glaube, Viktor Sinner hat das, und der hat der erste versucht, ein Pap dazu zu schreiben oder vorgeschlagen hat, auf einer Mailingliste das zu machen, ist halt irgendwie über zwölf Jahre her oder so.
Das ist ja hartnäckig geblieben.
Das ist tatsächlich auch, also ich habe eine Weile lang diese Python-Mailing-Liste mal verfolgt und da wird schon sehr viel zerredet, da wird schon sehr viel zerdiskutiert.
Auch Sachen, die eigentlich einleuchtend oder klein erscheinen.
Der Anspruch an sowas ist halt sehr hoch und da darf jeder seine Stimme sagen und deshalb dauert es manchmal zwölf Jahre, bis solche Dinge, die eigentlich offensichtlich sind, die sich offensichtlich anfühlen, irgendwann in Python reinlanden.
Aber das ist ja durchaus auch eine Stärke von Python, dass eben da Dinge drin sind, wo man hinterher sagt, ja, das ist ja offensichtlich.
Und das sind ja oft die, die am schwierigsten rauszufinden sind.
Dass wir tatsächlich so sind.
Das liegt leider in der Natur der Welt, dass die Dinge, die hinterher einfach erscheinen, oft die schwierigsten sind.
Ja, Package Startup Configuration Files, PEP 829 PC-Files.
Das habe ich mir ehrlich gesagt gar nicht genau durchgelesen.
Das war das, was wir gerade versucht haben, Adventure als erste.
Ja, das ist ja schwierig.
Also ich meine, wenn ihr nicht wisst, was ist, könnt ihr auch das Problem nicht lösen dazu.
Also ich glaube, der Grund, warum das ist, es gab ja jetzt letztes Jahr auch viele Supply Chain-Attacken und halt ein Trick, den man halt machen kann, wenn man jetzt irgendwie solche Attacken auf Fighten-Applikationen durchführt, ist halt diese PTH-Geschichte, dass man halt solche Files irgendwie mit reinlegt ins Paket und dann halt Code automatisch ausgeführt wird.
Einfach beim Paket importieren wird dann automatisch irgendeine Konfigurmethode aufgerufen, die ein arbiträres Zeug laden.
Bei der Installation schon, oder?
Ja, ja, ja, genau.
Setup hast du doch sogar bei der Installation.
Bei der Installation schon, genau, richtig, richtig.
Also wirklich, du musst nichts machen.
Du musst halt bloß eine von den Abhängigkeiten halt kompromittieren und dann mit der Methode kannst du halt sofort Code ausführen.
Das ist wirklich hart.
Und ich könnte mir vorstellen, dass das Ding jetzt dafür sorgt, dass das nicht mehr so einfach geht, vielleicht.
Genau, weil die Art und Weise, wie man da Sachen in diesen PTH-Files definiert, sich geändert hat.
Ja.
Das müsste man aber, glaube ich, nochmal genauer lesen, um das zu verstehen.
Also da bin ich nicht tief genug rein.
8.000 Package Startup Configuration Files.
Ja, haben wir natürlich alle schon offen und auf unserer Leseliste ist ja klar.
Also man muss Replacing Import Lines in PTH-Files with Entry-Point-Specifications in Start-Files.
Ja, das wollte ich auch gerade sagen, ja.
Ja, gut.
Okay.
Das ist das, was dadurch.
Wir wissen ja auch warum.
Aber da konnte man coole Sachen mitmachen.
Ja, aber also, also ja.
Bei allen reifen Softwareprojekten findet man immer wieder so Sachen, die, wo man denkt, ja, gut, das ist für andere Menschen.
Es gibt bestimmt jemanden, der das braucht.
Und das gehört da mit dazu.
Sowas habe ich nie gebraucht.
Safe by Design.
Ja, beziehungsweise safe by never used it.
Bloß weil es eine Footgun gibt, muss ich die ja nicht in die Hand nehmen.
Keine Fremdenpakete, alles selbst gecodet.
Ich habe andere Dinge, wo ich andere Dummheiten, die ich mache.
Ja, sprechen wir vielleicht nochmal drüber.
Okay, was haben wir noch?
Experimental JIT Compiler, genau.
Ja, da
gab es noch ein bisschen Drama in 3.14, oder?
Mit dem JIT-Compiler, den sie wieder zurückgezogen haben.
Ja, genau, genau, genau.
Der hat zurückgezogen, weiß ich gar nicht, aber der.
Das Problem war halt auch irgendwie, dass.
Es gab doch einen Bug, oder?
Es gab doch einen Bug, der die Semantik verändert hat.
Ah, okay.
Das weiß ich nicht.
Und das sagen diese, weil die nur Statistik benutzt haben, oder?
Es war genau das, warum wir so ein Skill haben.
Nee, weil sie, weil es, also es war auch irgendwie so ein Reordering-Dings, weil sie irgendwas gejittet haben, was sich dann im Prozessor neu sortieren durfte und dann, also vielleicht muss man das nochmal nachlesen, die Details.
Wir sind ja sehr gut vorbereitet, deshalb ist man sowas alles auswendig.
Und das sind zu viele technische Details, die wir den nicht zumuten wollen, deshalb ist ein Link unten in den Kommentaren.
Aber also im Prinzip schöne Sache und ich meine, die Performance-Geschichten sehen ja gut aus, 7-8% auf Standard-Cheuten.
11 bis 12 Prozent, also großartig, das ist einfach diese Arbeit an solchen Baustellen, die nicht glamourös ist und die nicht super sichtbar ist, die aber halt irgendwo 7% rausholt, das ist ja unglaublich viel Compute-Zeit, die da über die gesamte Welt rausfällt.
Wir hatten doch, beziehungsweise ihr zwei hattet ja schon mehrmals einen Core-Contributor hier im Podcast, die auch da was dazu sagen konnten.
Ja, genau, der bei, ja, also PiPi, genau, aber ja, müssen wir mal wieder fragen, wie es da so aussieht.
Ich weiß gar nicht, was mit PiPi eigentlich ist gerade.
Ja, die haben auch eine neue Release gemacht.
PiPi 8.0 ist auch kürzlich rausgekommen, aber das ist halt, das ist auch wieder so ein Nischenthema.
Ich folge verschiedenen Personen auf Mastodon und da kommt auch immer wieder so Compiler-Diskussionen.
Ah, wir haben hier das und das gemacht.
Wie macht ihr denn das da bei euch?
Dann stehe ich immer daneben und fühle mich wieder wie ein achtjähriger Junge, der nichts weiß und gerne mehr wissen möchte.
Ja, also wenn man sich genau mit so Computer Science-Kram aushuben möchte, da sind solche Sachen natürlich extrem dankbar.
Ja, und haben halt auch, wie gesagt, diesen Impact.
Also wenn man aus einem Programm, was eine Milliarde Mal pro Tag ausgeführt wird, 7% rausholen kann, dann ist das halt mehr als wenn ich meine Startup-Time durch Lazy Loading von 12 auf 2 Sekunden reduziere.
Naja, aber immerhin, das ist schon prozentual noch ein besserer Gewinn.
Viel Prozent von wenig.
Ist immer noch weniger als wenig Prozent von vielen in dem Fall.
Vielleicht kann man ja ein bisschen vom Strom verbraucht, von den ganzen LMs wieder reduzieren.
Ja, der nächste Eintrag heißt einfach Improved Error Messages.
Ich meine, das ist immer gut.
Ja, das haben wir ein paar Mal schon hintereinander gehabt und ich finde, die sind ja tatsächlich relativ lesbar und mit richtigen Vorschlägen und sowas drunter, oder?
Was ist dieses Mal besser geworden?
Weil die waren ja letztes Mal schon so, dass sie drauf gezeigt haben und gesagt haben, meinst du vielleicht das hier?
Und mit Farbe, genau, und die gehen jetzt, glaube ich, sogar noch ein bisschen tiefer rein und sagen dann, hey, noch ein.
Vielleicht hast du genau das gemeint.
Genau, also so ein bisschen Korrekturverschwendung.
Die Beispiele
sind schon schön.
String Object has no attribute to uppercase.
Did you mean upper?
Das ist doch sehr, also das ist sehr Realitätsnabel, die sagen.
Oder auch ListObject has no attribute push, did you mean append?
Ja.
Das richtet sich an das Zielpublikum, würde ich sagen.
Ja, war gut.
Das ist echt lesbar.
Also das war am Anfang mal schwierig und jetzt geht's.
Das sind Java und JavaScript-Fehlermeldungen, falls es jemand nicht erkannt hat.
Sehr schön.
Und es gibt mehr Farben.
Mehr Farben ist immer gut.
Wobei ich ja als Mann und ein Programmierer und ein Mathematiker und ein Nerd, ich bin ja der Meinung, dass die 16 Farben von EGA völlig ausgereicht haben.
Mehr Farben kann ich nicht benennen.
Außer des Spektrums.
Und eigentlich sind es nur acht und immer noch eine helle Variante davon.
Das reicht völlig aus.
Aber es gibt Menschen in meinem Leben, die sagen, dass Lachs eine Farbe ist und Aprikor und
Mov und Taupe.
Wie bitte?
Ja, also Farben halt.
Ja, aber es gibt da auch so irgendwie Leute, die haben so den Pantonen irgendwie keine Fächer auswendig.
Aber nee, ich nicht.
Ja, es gibt auch so Leute, die können Hexfarben einfach so sagen.
Die sehen irgendwo eine Farbe und sagen, ja, das ist AF2739.
Das ist ein Rätsel, ich verstehe das nicht.
Aber gut.
Wie gesagt, EGA war für mich eigentlich völlig ausreichend, das reicht aus.
Ich finde
es schon schwierig, die nächste Y und K von Cyan und Magent herauszuhören.
Y ist Yellow und Key ist Schwarz, aber egal.
Significant Improvements in the Standard Library.
Ja, erstmal Type Dicks haben wir noch vergessen und die ganzen Typsachen, oder?
Nee, steht bei mir
nicht unter Profiling, aber da haben wir auch schon drüber geredet im Grunde.
Tachion und es gibt jetzt noch ein Profiling Package, okay, das gab es vorher nicht.
Aber ansonsten, ja.
Dann genau, Typing, ja, was haben wir denn da?
Type-dikt.
Ja, was ist denn, was ist denn Type-Dict und was ist vor allem, was ist Type Form?
Also das, also Type-Dickt kann ich ja noch so ein kleines bisschen verstehen, dass man sagt, okay, die Keys müssen dies sein und die Values müssen das sein.
Das war ja vorher so ein bisschen.
Aber was sind denn Type-Formen?
Könnt ihr mir erklären, was Type-Form ist?
Weil ich weiß es nämlich nicht.
Nein, ich weiß es ehrlich gesagt auch nicht.
Ich habe hier das Beispiel, gucke ich mir an.
Also Special Form representing the value that results from evaluating a type expression.
Oi, das klingt ja nicht.
Ja, ich bin auch dieses Type-Ding, das ist auch schon das, was nicht unser Python war.
Wenn ich höre Cast von T vom Typ Typeform T, kommt ein T raus.
Also irgendwas wird ein Typ gecastet und der Typ ist vom Typ Typeform?
Das verstehe ich nicht.
Ich weiß nicht so genau.
Typ Theos Anpamoson.
Der das irgendwie neuer erklärt.
Äh, der besser erklärt, aber ja.
Ja, Typing ist auch so ein Ding, wo ich mich immer doof fühle, wenn da andere Leute drüber sprechen.
Vielleicht wollen wir nochmal den Stefan fragen.
Ja, also, aber der beschäftigt sich ja nicht mit Python-Type.
Das müssen wir ja machen.
Ja, achso.
Ja, aber der kann uns vielleicht die Algebra dahinter erklären.
Ja, vielleicht.
Das ist ja leider auch so, ja, dass dann, wenn man da über Typen spricht, dann kommt ganz schnell so im allgemeinen Internet-Kontext, dann kommen ganz schnell so die Herskell-Leute aus der Gebüsch und sagen, haha, ohne Monaden kannst du gar nichts machen.
Ja.
Genau, genau.
Ich meine, aber ich überfliege gerade diesen Pep, um zu verstehen, worum es geht und hab's nicht verstanden.
Aber wenn da so Sätze drinstehen, why not type irgendwann auf C und dann one might think that Type C would suffice for these use cases.
However, und dann ich bin schon so, okay, nee, es ist suche für mich oberhalb meiner Geizklasse, ich muss hier was anderes machen.
Das gibt es doch nicht.
Nee, es ist kompliziert wohl.
Ich verstehe es nicht.
Keine Ahnung.
Also wir sind uns einig, dass das höhere Magie.
Höhere Magie.
Da gehört auch übrigens die ein paar Rejected Ideas dazu, wie dass man den Final-Dekorator instead of Close Class-Parameter reinfühlt.
Das haben sie dann abgelehnt, weil.
Das habe ich mir auch, das denke ich mir auch.
Ja, oder?
Also, dass man eine Klasse nicht mehr weiter subklassen darf, weil da ein Final-Dekorator drüber ist?
Crazy.
Ja, aber gibt's jetzt, also ich meine, kann ich ja niemand abhalten, den Python?
Ja, also war wohl ein Vorschlag, ein ernsthafter Vorschlag
beim Jahr macht wirklich Wahnsinn, ich weiß es nicht, aber
was nehmt ihr denn fürs Type?
Nimmt ihr Protokolle oder nehmt ihr Dienst oder irgendwas anderes?
Ja, Protokolls verwende ich richtig gerne, aber.
Oder wofür meinst du doch mal?
Ja, zum Typen oder sowas.
Ich finde Protokolle ganz gut.
Ja, aber ich mache eigentlich alles, also es kommt immer so ein bisschen drauf an, was es gerade ist und man kann sich das ja auch manchmal nicht aussuchen.
Manchmal muss man ja irgendwie erben von Dingen und so und dann macht man halt nominales Typing, weil, naja, ist halt so.
Und genau.
Aber ja, also ich mache ich mache alle Arten.
Aber es ist auch alles irgendwie einfacher geworden, weil, naja, ich meine, ich, also ich habe mich damit schwer getan, als ich noch damals vor Zeiten geschrieben habe, ja.
Und dann immer MyPi-Fehlermeldung hatte und ich so, wie was ist denn jetzt hier schief gegangen?
So, und die LLMs schreiben das und es funktioniert einfach so.
Und man muss eigentlich nichts mehr machen.
Also du fragst einfach Pi Refly und sagst dann, hey, hier.
Aber machst du deinen Type-Tracks darauf machen?
Lass du MyPi auf deine.
Ja.
MyPi, Johannes.
Entweder nimmst du Tai oder Pi Refly, bitte.
Ja, natürlich.
Ich bin halt schon älter.
Nee, ich bin benutze aber auch tatsächlich noch MyPi.
Wirklich?
Ja.
Warum?
Ja, wenn du es auch schon älter ist, oder?
Es ist eine Gewohnheit.
Liebgewonnene stimmt.
Vielleicht sollte ich mir mal andere Sachen angucken.
Genau, ja.
Also Tai ist, seitdem du es aus der Beta raus hast und irgendwann war so ein Dingstart im Sommer oder sowas, dann zeigt dem es ganz gut.
Und PyRefly gibt es ja auch, ist auch recht bekannt.
Um ganz ehrlich zu sein, benutze ich noch einen ganz anderen Type-Checker.
Keinen Type-Checker,
den, der in PyCharm eingebaut ist.
Ach ja, ja, nee, der ist auch gut.
Der ist auch, ja, der hat also immer mal wieder so Aussätze.
In manchen Versionen sagt er dann auf einmal, oh, das habe ich aber in Unterstrich-Self nicht gefunden.
Ah, okay.
Was war das so?
PyWrite oder?
Da sind doch aber ganz viele Type-Fehler drin, weil er die Klasse nicht erkannt hat und dann Unterstrich-Self annimmt und ah.
Ja.
Okay.
Ja, aber also separates Type-Checking mache ich eigentlich so gut wie nie.
Und das ist auch, also für mich, ich finde, also ich finde es interessant, ja.
Das ist so ein Type-Checking ist so ein Thema.
Da kommen dann auch so die Graubeerte aus dem Gebüsch und sagen, haha, aber da musst du folgende Dinge tun.
Und ich versuche das eigentlich immer zu vermeiden.
Und wenn's, wenn es zu tief reingeht, wenn man zu weit in dieses Thema reingeht, finde ich, ist es ein Anzeichen dafür, dass man zu viel darüber nachgedacht hat.
Naja.
Und an der Stelle würde ich dann einfach Any.
Also ist bei mir ist der Threshold für Any oder für Unknown oder für was auch immer man da benutzen möchte, relativ niedrig.
Oder halt für eine Umstrukturierung, dass man halt sagt, okay, da gibt es jetzt eine Data Class dafür und dann ist es die.
Aber sowas wie Protocols, ich finde, also ich finde das eine schöne Idee und für Bibliotheken, die eine Million Downloads haben, ist das vielleicht auch eine gute Sache, aber wie wir ja vorhin schon rausgefunden haben, ist das nicht ein Problem, was ich bedienen muss.
Ja, ich finde allein schon bei BackTech- oder Django-Geschichten ist es oft ganz nett, wenn man sagen, also das, was ich hier reinkriege, ist halt irgendwas Kompliziertes, Komisches.
Aber es muss halt das und das können.
Und dafür habe ich oft Protokolls dann.
Ja, aber also machst du das auch für dich selber, Jochen, weil ich finde, wenn man das für dich selber macht, dann das ist ja eine Abstraktion, ja.
Es ist ja eine Abstraktion über irgendwas, wo du üblicherweise eine konkrete Klasse hast.
Also wenn ich in so eine Situation komme, dann habe ich in meinem Programm üblicherweise eine konkrete Klasse, von der ich weiß, dass die da reinkommt.
Nee, das weiß ich oft dann halt nicht.
Genau.
Ich weiß halt nicht genau, was das ist.
Es kann halt alles Mögliche sein.
Ja, okay, gut.
Aber ja, so wahnsinnig oft, dass sie das nicht.
Ich lasse dann die Typen weg und dann kann man auf Auto.
Kaputt.
Nö, Any.
Typing ist ganz einfach, schreibst du mal Any hin und dann ist alles fertig.
Kann man so einen Rust machen.
Kein Type-Checker kann je was dagegen sagen.
Ja.
Ja, was haben wir noch?
Disjoint Basis in the Type System, großartig.
Okay, wundervoll.
Die C-API, wie oft benutzt ihr die C-AP von Python?
Nee, auch.
Also direkt?
Ja, selber.
Selten.
Nee, gar nicht.
Eigentlich.
Don't touch it.
Oh Mann.
Ich dachte, ich wäre der Einzige, der das nicht benutzt.
Ja, also.
Okay.
Gut.
Nichts davon, Build Changes, nee, das auch nicht.
Ja, auch das Framepoint, das ich meine, das hört sich gut an, dass man da jetzt mehr sehen kann und dass die Debugger besser funktionieren und dass das alles besser geht und so.
Das ist alles schön, aber.
Ja.
Okay.
Ich finde es großartig, dass es Leute gibt, die sich damit befassen und die das machen für uns.
Und damit ist das für mich schon fertig.
So, Release Changes.
Das ist interessant, weil Release Changes, die sind jetzt quasi am anderen Ende vom Spektrum, ja.
Das ist so ein, ja, okay, haben wir halt auch umgestellt.
Aber die haben natürlich eine sehr große Auswirkung.
Zum Beispiel die Official Windows 64-Bit Binaries now use the tail calling interpreter.
Auch wie Geschwindigkeit.
Auf Windows 6.
Geschwindigkeit, ja.
Und Riesenumstellung,
the Official Macs Binaries now install Free Threading Support by Default.
Wenn ich das richtig lese, dann ist es, ist es noch nicht so, dass Free Threading der Default-Interpreter ist.
Normalerweise nicht, ne?
Weil das.
Langsamer.
Der ist langsamer, ja, und der ist ja auch noch experimental, oder?
Der ist ja noch nicht.
Das weiß ich nicht.
Ich dachte, es ist jetzt nicht mehr experimental.
Das war er vorher, aber er ist noch nicht default, genau.
Und ja.
Und auf Mac ist er jetzt aber verfügbar.
Also man muss ihn nicht mehr selber nachinstallieren, sondern man kann es einfach Free Threading sagen und kriegt den dann.
Und das ist ein großer Schritt in die richtige Richtung.
Ich meine, das ist ja was, was man Python schon seit vielen Jahren vorwirft.
Aber ich habe das Gefühl, also ich meine, das wiederhole ich jetzt auch schon, ich weiß nicht wie oft, aber ich habe das Gefühl, dass die Leute, die das vorwerfen, die verstehen einfach gar nicht, was das ist.
Das ist halt ein Vorwurf.
Du bist auch nur Skillish, oder?
Das ist einfach kein Problem, kein ernsthaftes Problem, das Leute haben normalerweise.
Also, oder sag mal so, der Vorwurf oder dass das ein Problem wäre, kommt von ganz vielen Leuten, aber tatsächlich haben wir nur ein, also ich würde sagen, ganz, ganz wenige Leute haben dieses Problem jemals.
Also, dass sie damit irgendwie ein Problem kriegen.
Aber ich habe immer das Gefühl, die Leute glauben, dass sie damit ein Problem kriegen, aber tatsächlich ist das praktisch nie ein Problem.
Also daher, ja, also es gibt, es gibt Fälle.
Und ich würde auch sagen, ja, es ist sinnvoll, aber die sind, also wenn du zu der Gruppe von Leuten gehörst, die dieses Problem haben, das weißt du ja halt dann.
Ich benutze das immer als Ausrede.
Ich benutze immer, ich würde ja Threading machen, aber leider in Python
geht das ja nicht so richtig.
Darf ich nicht.
Und ich meine, es gibt ja viele Use Cases für Threading, die jetzt auch schon gehen.
Ja, auch schon informieren.
Die sind halt langsamer.
Also, der Standard-Use Case für Threading, dass du halt I.O.-Multiplexen willst, das ging schon immer halbwegs okay.
Ja, natürlich.
Ja, oder dass du UI-End-Action hast, weil da brauchst du auch Threads, die sich die Nachrichten erzeugen können, damit du irgendwie auf Buttons hören kannst und so weiter.
Auch das ging ja schon immer und problemlos.
Halt ein bisschen langsamer, was aber an der Stelle ja egal ist, ja.
Also ob der Button eine Millisekunde oder zwei Millisekunden später reagiert, spielt nicht so richtig eine Rolle.
Ja.
Umgekehrt, umgekehrt, ich glaube, da haben wir auch schon mal drüber gesprochen hier in so einem Podcast, oder Jochen?
Ich sehe auch das Potenzial für, es gibt irgendwo so eine Library, die auf einmal irgendwas eintausend Mal schneller macht, weil du halt auf einmal alle Prozessoren verwenden kannst.
Und vielleicht schreiben wir die nicht selber, aber ich würde die benutzen.
Nee, aber nochmal einfach so, wie eng ist die Zielgruppe für Leute, die Free Threading wirklich haben wollen.
Also, das heißt, du musst auf der einen Seite Python verwenden.
Also dein Problem darf nicht so sein, dass du sagst, ah, scheiß drauf, dann mache ich das halt in C, ja.
Also das darfst du nicht, das darf nicht kein Problem, weil das kannst du dir.
Genau, dann brauchst du das alles nicht mehr machen, weil dann ist es egal.
Es ist auch so, dass du nicht einfach irgendwie sowas wie NumPy oder so oder auf Hannas halt callen darfst, weil dann hast du das Problem auch nicht.
Sondern du musst CPU verbrauchen in Python.
Also nicht irgendwas machen, was halt CPU ist.
Ja, also kein Problem, finde ich.
Also ich kann viel CPU verbrauchen.
Ja, aber es muss halt auch irgendwie sinnvoll sein, ja.
Also klar kannst du
es, aber.
Du musst wirklich mehrere Prozessoren verwenden möchten in Python, aber nicht sowas wie NumPy verwenden oder so.
Oder auch keine C schreiben.
Okay, ja gut.
Also das ist schon sehr speziell, würde ich jetzt mal so sagen.
Weil normalerweise nimmst du halt NumPy, wenn irgendwas schnell sein soll.
Also es gibt da, also die Beispiele sind sowas wie, naja, ich habe halt, ich mache Transformationen auf meinen Trainingsdaten und möchte die GPUs füttern und ich komme nicht hinterher.
Weil ich kann das nicht irgendwie in C selber machen, weil ich mache halt Dinge auf den Trainingsdaten, die halt in Python irgendwie da sind.
Das heißt, es geht nicht in C.
Und ich auf der anderen Seite ist es aber auch so, ich muss da wirklich schnell sein, weil ich sonst irgendwie, weil es ein Investitionsding ist, weil die GPU kostet halt 100.000 Dollar, ja, und die bin ich halt auslasten.
So, okay, an der Stelle, ja, da gibt es Leute, die solche Probleme haben, aber ja.
Und die müssten halt dann sonst ihren Kram halt in Rust neu schreiben oder so.
Ja, gut, okay.
Ja, gut, das machen die ja sowieso.
Also meine Hypothese ist weiterhin, dass es irgendwo so etwas gibt, was man mit Free-Threading dann aufschließen kann, was wir dann, wofür wir alle profitieren werden.
Aber ich sehe noch nicht, was es ist.
Ich habe noch nichts gesehen.
Und tatsächlich ist es ja auch heutzutage bei Computern noch so, man kann ja relativ leicht inzwischen Computer mit 24 oder 32 Kernen kaufen und dann ganz viele Sachen drauf machen.
Aber das, was das Gefühl von Leistung ist, ist immer noch die
Single-Threaded-Porforce, die
halt den Mauszeiger schneller bewegen lässt.
Ja und
genau, ja.
Na gut.
Ansonsten waren die News, oder?
Ich war glaube ich Python 3.15 Features.
Aber genau, eigentlich was, was, wo ich, wo ich, die Frage ist halt, wie relevant ist das eigentlich überhaupt noch alles so ein bisschen?
Also ich meine, Python schon, aber ich habe in den letzten Jahren immer so, also mich haben neue Python-Versionen immer mehr begeistert oder so, weil ich dachte so, ah, cool, aber ich schreibe ja jetzt in letzter Zeit eigentlich gar nicht mehr so wahnsinnig wie Code selber.
Nicht mehr schreiben, nicht mehr lesen, Jochen wird Projektmanager, habe ich gehört.
Ja, ich habe immer noch was mit Computern zu tun, aber ich habe so das Gefühl, die Relevanz nimmt so ein bisschen ab.
Ich glaube, also für mich das Gefühl ist, dass Python seit ein paar Versionen sehr stabil ist.
Ja, stimmt.
Das ist auch einfach, das ist auch ein Punkt, der zusätzlich ist, genau ist es halt einfach gut.
Ja, sind es kleine Convenience-Sachen, die sich verbessern noch.
Ja, genau.
Also sowas wie Frozen-Dick, ja, aber es ist jetzt auch nicht so, dass ich sage, okay, ich muss jetzt Python upgraden, damit ich Frozen Dick bekomme.
Sondern es ist mehr so ein 3-2-Version schon.
Ja, okay.
Dann nehmen wir das.
Deshalb, also das ist für mich so ein bisschen das größte Problem.
Es ist da nie, es ist inzwischen so vollständig und so gut und so da alles, dass, also bevor wir nicht zu Python 4 gehen, sehe ich da nicht, dass ich grundsätzlich irgendwas, dass man grundsätzlich irgendwas.
Ja, ich meine, aber auch, es gibt da auch keine Probleme mehr hochzugehen.
Normalerweise muss man nur warten, bis die Readers irgendwie alle kompiliert sind und dann kannst du halt hochgehen, hast du an den neuen Features und das ist gar nicht so schlimm.
Nehmt ihr die 3.15.0 oder wartet ihr auf die Punkt 1?
Ich warte
auf die 1.
Ich habe die schon, also Python-Podcast.de läuft schon auf Python 3.15.
Okay, ja, das ging ja schnell.
Aber ich habe nicht so viel tun müssen.
Ich habe nur einem Agent gesagt.
Ja, ja, genau.
Also probiere mal aus, ob es geht, wenn da dann die tollen Paket.
So ein paar Pakete, die müsste ich dann irgendwie extra bauen.
Darauf habe ich keinen Bock und ich warte, bis alle meine Pakete aus meiner Clearin-Software Beloft mit T-Wheels grün sind mit Reels.
Habe ich, tatsächlich.
Sehr gut.
Ein Nachteil, eine Sache, die ich gar nicht mag an Python 3.15, ist, dass die letzte Version 3.14.8 war und nicht 3.14.15.
Da hätte ich eigentlich gehofft, dass man.
Kommt zumindest noch.
Es sind noch viele meiner Versionen, die jetzt ja.
Vielleicht schieben Sie noch ein paar Bug Quick-Releases nach, weil dann.
Also 3.14 ist erst dann vorbei, wenn es die 2.15-Patch-Version gibt.
Sonst vorher muss man eigentlich da noch warten.
Okay.
Ja, das stimmt natürlich.
In der Django Welt, wir haben ja vorher darüber gesprochen und die Hörer wissen ja auch, dass wir sehr viel Django machen.
Geht man jetzt zu Calver über.
Da geht man jetzt zu Calendar Versioning über.
Das wollte ich auch gerade sagen.
Ab 2028, glaube ich, oder das ist schon 2027.
Django macht ja eh nur mit 0, 1, 2 und dann irgendwie anderthalb Jahre Zyklus bis Stable Root.
Aber das ist ja wie bei Ubuntu.
Ubuntu macht ja Punkt 4 und Punkt 10.
Mehr machen die ja nicht.
Aber man erkennt sofort, wann es herkommt.
Und ich glaube, dass das ein guter Schritt ist.
Ich glaube, dass das eine gute Sache ist für so Projekte, die sehr stabil sind.
Die sehr vollständig und sehr rund sind, dass man einfach nicht sagt, okay, irgendeine abstrakte Nummer, sondern eine von der letzten Version.
Ich habe mich jetzt umgestellt auf KWR.
Alle meine Sachen intern habe ich umgestellt auf KWR, weil das irgendwie, weiß ich nicht, zählt dann eh mal von 0.
irgendwas, 0.0.255.
Ja, okay.
Ich mache tatsächlich, ich gehe bei internen Projekten oder bei Sachen, die ich mache, eigentlich in die andere Richtung, dass ich einfach eine Zahl habe.
Es ist einfach nur Release 110.
Und das hat keinen Bezug zur Zeit und auch keinen Bezug zur, das ist ein Patch oder ein Miner oder was auch immer, weil das kann ich oft gar nicht selber sagen.
Es ist, ah, muss ich, könnte man das noch als Patch Release sehen oder ist es schon 80-Teat.
Keine Ahnung, Breaking-Changes gesehen in irgendeinem Bugfix oder sowas.
Ja, also da bin ich ganz davon weg.
Also entweder Calendar Versioning, dass man sagt, das ist die Version vom Sohn zu viel.
Ja, ich finde das super, weil da weiß ich direkt, wie alt ist denn das jetzt?
Ich weiß jetzt, okay, 26, 10, 15, es müssen was gearbeitet worden.
Und wenn ich jetzt 2028 habe und es immer noch 20, 26, 10, dann weiß ich, oh, okay, zwei Jahre hat sich da nichts mehr bewegt.
Okay, muss ich entweder wieder neu dran oder mag genauer gucken.
Die Diskussion hatte ich mit einem Kollegen und ich bin tatsächlich bei einem Kunden gerade und wir arbeiten an zwei unterschiedlichen Themen von der gleichen Anwendung und er macht Calendar Versioning.
Genauso wie du es beschreibst.
Er sagt halt, also die Release, die ich heute gebaut habe, ist halt 2026, 10, 15.
Ich mache Numbered Versioning, ich zähle einfach immer eine hoch.
Ich zähle im Monat eine hoch.
Das kann man auch einfach auch gemischte Versionen machen.
2026, 115.
Nee, sein Argument ist genau das, was du gesagt hast.
Du siehst genau, von wann die kommt.
Und mein Argument ist, du siehst genau, welcher als nächstes kommt.
Weil nach 110 kommt 111.
Und nach 111 kommt 112.
Und wenn du, wenn die neueste Version 115 ist und du hast die 111 drauf, dann weißt du, dass du genau vier Versionen hinterher bist.
Und das siehst du bei Calendar Versioning nicht.
Da siehst du eben nur die Zeit.
Aber du siehst nicht, welcher als nächstes kommt und du siehst auch nicht, wie viele da davor kommen.
Und das ist so ein bisschen da.
Du hast ja nur einen Request entfernt.
Und nur weil ich jetzt weiß, dass da drei Schwester vorher noch sind, meinst du das wichtig?
Ja, aber das Datum ist ja auch nur ein Request entspannt.
Aber wenn ich jetzt zum Beispiel innerhalb von einem Tag fünf neue Versionsprüchen habe, weil ich endlich mal Zeit finde, an dem Paket zu arbeiten, dann sagt das ja auch relativ wenig darüber auf, ob wenn jemand dann für die nächsten Versionsprung ein halbes Jahr dran sitzt.
Wie würdest du die dann in deinem Calendar-Versioning machen, wenn die alle dir den gleiche Tag?
Ich nehme immer einen Monat und dann monatlich bis 100.000 hoch.
Ach so, okay, gut, das ist natürlich die für die ganz Verrückten, okay.
Naja, so verrückt ist das auch wieder nicht, aber ich brauche jetzt die Tage nicht von daher distinguieren.
Das ist irgendwie Quatsch.
Sondern ich weiß halt einfach, okay, es gab in dem Pilos in dem Monat und dann weiß ich immer, okay, ist super.
Dann müsste man eigentlich, eigentlich müsste man das dann schon auf die Sekunde genau machen.
Das ist die Version.
2600.
Aber dann bitte nicht mit dem 24-Stunden-System, sondern mit dem 10-Stunden-System.
Hier ist das nochmal das DC-Time-System, was du da mal im schönen Blog in Tattoo geschrieben hast.
Ja, natürlich.
Die Ticks.
Welcher Tick ist jetzt gerade?
Genau, ein Ticks, bitte.
Richtig, ordentlich.
Das finde ich schön.
Das hätte wieder was.
Können wir da bitte einen Generator schreiben?
Ja.
Da kann man bestimmt nur ein UV-Plugin, das automatisch die richtige Version setzt.
Genau.
Perfekt.
Ich mache mich an die Arbeit.
Weil das ist doch toll, oder?
Dann fast alle Anforderungen erfüllt.
Naja, immer noch nicht.
Du kannst immer nicht hochdrehen.
Ja, siehst du immer noch nicht, welche die nächste ist.
Egal.
Okay.
Also das, was ich eigentlich sagen möchte, ist, es gibt andere große Projekte, die von eben solchen fortlaufenden Versionsnummern umsteigen auf Calendar Versioning, die sagen, okay, das ist die Version von so und so vielen.
Und Django ist da ein sehr großes.
Das hat im Wesentlichen eine Person getrieben, die das anscheinend auch schon seit längerem betrieben hat und irgendwann mit einem DEP, mit keinem, nicht mit einem PEP, sondern mit einem DEP durchgekommen ist und akzeptiert wurde.
Wir sind übrigens auch bei Django 6, ich weiß nicht, das hat mir auch verpasst.
Ja, 6.1.
Wir sind noch bei 5.2.
Wir sind schon bei ein bisschen hinterher.
Ja, meine Ubuntu ist auch 24.
Ubuntu ist 24 ist auch alt, oder?
Ja.
Ja, zwei Jahre ungefähr.
Also ich meine, es gibt auch nicht so.
Genau.
Muss man updaten jetzt.
Da warte ich auch auf die Punkt 1.
Ja, aber
jetzt so 3.15 fast nicht zu sagen, oder?
Nee, ich glaube, das ist es im Grunde.
Ja.
Macht ihr denn, äh, wie ist das denn bei euch?
Macht ihr ja auch andere Sachen?
Ihr macht hauptsächlich Python oder ich, ja.
Okay.
Eigentlich, also alles.
Weil ich bin in letzter Zeit so ein bisschen gucke auch mal so andere, weil das jetzt halt geht.
Das finde ich.
Ja, aber das hast doch nur Enthusiasmusjochen und gar nicht von der ästhetischen Expertise getrieben.
Also wenn du sagst, du liest keinen Code und du schreibst keinen Code mehr, okay, was dann die Monkeys drunter schreiben, kann dir ja dann auch egal sein.
Nee, genau, also das ist mir nicht tatsächlich nicht so richtig total egal, also so ein bisschen egal, okay.
Aber nee, die Frage ist aber dann, aber die interessante Frage ist, was ist denn wichtig?
Und aber es sind durchaus noch Sachen wichtig, weil man kann das auch richtig oder falsch machen oder kann auch schief gehen.
Aber ich mache zum Beispiel, also was ich halt deutlich mehr mache jetzt, überraschend, ich hatte jetzt gar nicht so erwartet, dass das passiert ist, ist halt Rust und halt Swift.
SWIFT.
SWIFT?
Ja.
Wow.
Ja, weil ich bin halt in dem Apple-Ökosystem unterwegs.
Ein Alkoholiker, ja, okay,
okay, okay.
Und da ist es halt einfach die Geschichte, die am besten funktioniert, wenn man halt nativ Sachen machen möchte.
Und da ich da nicht so viel, da ich den Code ja nicht selber verstehen muss und lesen muss und so, ist auch ein bisschen egal.
Ich bringe dir von der nächsten Konferenz so einen Wimpel mit, den können wir noch hier aufhängen.
Ja, aber also es ist halt, es funktioniert.
Nicht mal immer einen Kopfäpfel bei den Jochen.
Okay, ich dachte ja, nein, wollte ich nicht auf die Idee kommen.
Nee, also ich mache tatsächlich meine Arbeit in Python, auch einfach, weil ich selber lesen will und weil ich es selber verstehen will.
Ich habe ein paar Sachen Rust gemacht auch tatsächlich.
Also oder machen lassen.
Die gut funktionieren, aber nur.
Ich versuche seit Jahren Rust zu lernen, aber dann.
Aber jetzt brauchst du es ja nicht mehr.
Es gibt diesen Spruch, der heißt, ich würde dir wirklich gerne helfen, aber leider habe ich keine Lust dazu.
Und so ist es bei mir beim Rust lernen.
Ich würde wirklich sehr gerne Rust lernen, aber leider habe ich keine Lust drauf.
Und da bleibe ich immer dran hängen.
Ich lese immer das erste Kapitel von irgendwas und dann denke ich mir, das ist ja toll.
Du bist alt.
Mal weitermachen, ja, vielleicht.
Aber ich hoffe, ein paar neue Tricks kann ich noch lernen.
So ein alter Hund bin ich hoffentlich noch nicht.
Ja, da gehen wir aus.
Ja, aber ich meine.
Was bei mir jetzt ein großer Anteil ist, ist auch ein SQL, aber das liegt einfach an dem Projekt.
Ich bin bei einem Kunden, die haben eine sehr große SQL-Datenbank.
Ja.
Wobei es auch sehr witzig ist.
Es ist sehr lustig, weil für mich ist das eine sehr große SQL-Datenbank, die hat ungefähr zwei Terabyte, diese Datenbank.
Das ist groß.
Das ist groß, ja.
Aber wir haben da einen Experten dazu geholt, einen PostgreSQL-Experten, und der hat gesagt, ja, so ab 20 Terabyte fangen die Probleme eigentlich erst an.
Okay.
Ui.
Wenn man sich überlegt, wie viel wäre die ganze Konversation, die du dein ganzes Leben lang gehalten hast, wenn du das in Text aufzeichnen würdest, wie viele Terabyte sind denn das?
Nicht so viel.
Das passt alles noch rein.
Wahrscheinlich von der ganzen Familie und dem ganzen Haushalt und der halben Stadt.
Ja, gut, also ich
nehme ja Video auf.
Ah ja, dann, alles mit das Plus rein.
Unkomprimiert.
Ja, also es ist tatsächlich nicht so viel.
Also ich meine, Text, ja, also Text ist alles.
Es ist ganz, also wenn man sich anguckt, wie viel ist das denn, was dafür zum Beispiel der Training der L<unk>Ms auch verwendet wird.
Das sind halt so gut, die Schätzungen schwanken, aber es sind halt irgendwo zwischen 5 und 15 Terabyte oder sowas.
Mehr Text findest du auf der ganzen Welt nicht.
Also das ist nicht so viel.
Ja, aber das ist ja halt völlig crazy.
Du kannst ja überlegen, wie viel du davon produzierst, weiß ich, 80.000 Seiten Dinner 4 pro Monat.
Ja, gut, aber
ich bin ja Mathematiker und ich kann dir locker Dinge hinschreiben in wenigen Zeilen, die das ganze Universum mit Zahlen füllen.
Das ist gar kein Problem.
Überhaupt gar keine.
Graham's Number hier.
BB10 Tree Three, kein Problem.
Bizi Beaver, ja.
Ja, das ist BB.
Da gibt es immer mal wieder neue Ergebnisse.
Jetzt kürzlich hat man herausgefunden, dass BB10, also die Busy-Beaver-Zahl mit zehn Zuständen, ich erkläre es gleich nochmal, ist größer als Graham's Number.
Und Graham's Number ist ja schon so eine Zahl, die ungeheuer groß ist.
Die unvorstellbar groß ist.
BB, die BB-Sequenz, die Busy-Beaver-Sequenz, das ist die Frage, wie viele Zustände kann eine Turing-Maschine einnehmen?
Durch wie viele Übergänge kann eine Turing-Maschine gehen, bevor sie anhält, wenn die Turing-Maschine eine entsprechende Anzahl an Zuständen hat.
Und das ist bei 1, 2 und 3 ist das relativ leicht ausrechenbar, weil da kann man einfach alle Touring-Maschinen angucken, die so viele Zustände haben.
Und bei 4 und 5 gibt es auch noch Ergebnisse und BB6 ist schon unbekannt, ist schon unberechenbar und ist schon eine Zahl, die über viele Grenzen hinaus wächst, die man sich so vorstellen kann.
Und da gibt es eben, wie gesagt, immer wieder so lustige Ergebnisse, wo dann irgendjemand welche Sachen rausfindet, die völlig unvorstellbar sind.
Also BB10 ist größer als Graham's Number, Graham's Number ist eine sehr interessante Zahl.
Aber aus mathematischer Sicht sind das alles sehr kleine Zahlen, weil es gibt die Tree-Sequenz.
Das ist eine Funktion, die sagt, nach wie vielen Zügen ein bestimmtes mathematisches Spiel aufhört und Tree von 1 ist 1, das hört nach dem ersten Zug auf Tree von 2 ist 3.
Das hat maximal drei Züge und Tree von 3 ist eine Zahl, die kann man in diesem Universum nicht hinschreiben.
Weil wenn jede Ziffer eine Plankeinheit an Platz verbrauchen würde, würde leider dieses Universum auch immer noch nicht ausreichen, um alle Ziffern hinzuschreiben.
Deshalb da als, also Datenmengen, Dominik, Datenmengen.
Ich mach dir mach dir Daten, kein Problem.
Na gut.
Hast du dafür einen Pick, Johannes?
Ich habe einen Pick, ja.
Ich habe einen Pick, der besteht aus drei Teilen.
Wir haben kürzlich bei einem Projekt interne Infrastruktur gebraucht, beziehungsweise wir benutzen diese interne Infrastruktur.
Aber die hatte nichts mit den großen Zahlen, so ich wollte nur auf Freirock nennen.
Die hatte nichts mit großen Zahlen, ne?
Große Zahlen sind nur ein Hobby.
Na gut.
Da wollte ich dich nicht abwürgen bei den Zahlen.
Nein, nein.
Und für diese interne Infrastruktur ist es auch sinnvoll, wenn man HTTPS benutzen kann, also verschlüsselte Verbindungen benutzen kann.
Aber die interne Infrastruktur ist so intern, dass die nicht zu Let's Encrypt kommt.
Und deshalb ist es schwierig, da Zertifikate zu machen, die gut funktionieren.
Und deshalb haben wir da Lösungen dafür gesucht.
Und mein Pick ist Lösungen für dieses Problem, nämlich Zertifikate für interne Verbindungen, die trotzdem so funktionieren, wie sie funktionieren sollen.
Und da gibt es drei Ebenen, die ich
euch habe.
Snake Oil habe.
Nee, Snake Oil haben wir nicht benutzt.
Es gibt drei Ebenen, die ich euch mitpicken würde.
Die erste ist MKZ.
Das sind Tools für mehr oder wenige lokale Zertifikate.
Da generiert man sich eine CA und mit dieser CA kann man dann mit einem Skript ganz einfach Zertifikate generieren, die von dieser CA signiert wurden.
Und da kann ich mir einen beliebigen Domainnamen raussuchen.
Und das ist sehr geschickt, wenn man das auf dem lokalen Rechner probieren möchte, weil man da eben lokal sehr schnell zukommt.
Die nächste Stufe drüber ist Easy RSA.
Das ist ein kleines bisschen größer, ist immer noch so ein bisschen händischer Prozess, aber ein kleines bisschen besser in der Verwaltung.
Ein kleines bisschen mehr als nur Kommandozeilen-Skripte und der Schritt drüber, das ist tatsächlich was, was wir uns überlegt haben, was aber für uns zu groß war, ist die Small Step Step-CA.
Das ist ein Server, der ist ACMI-kompatibel.
Das heißt, den kann ich mit dem Certbot oder mit dem Let's Encrypt Client betreiben und den kann ich selbst betreiben.
Das heißt, ich kann den einfach eine CA generieren lassen und kann dann meinem Sertbot sagen, hol dir bitte deine Zertifikate von diesem Server.
Und dann habe ich da meine eigene kleine lokale Certificate Authority Welt.
Ich habe schon viele Kunden gesehen, die größere interne Infrastruktur haben und ich bin sehr glücklich, dass es dieses Projekt gibt, Stepca.
Und ich finde, jede Firma, die mehr als eine Handvoll Mitarbeiter hat, braucht sowas und sollte sowas betreiben.
Mir ist es auch klar, dass das keiner tut, aber jeder sollte es tun.
Und deshalb ist das mein Pick für diese Woche, weil wir haben nämlich damit angefangen und haben Internetzertifikate gemacht und jeder sollte das tun.
Okay.
Genau, das war gut.
Klingt, also müsste ich das unbedingt einem Agenten zeigen, dass er erstmal einbauen soll.
Das ist noch nicht genug zu tun auf der Flotte.
Selber, du musst es selber machen.
Soll ich was picken?
Ich picke es zuerst, ich picke Traffilatura.
Kennt ihr das?
Nee.
Ja, ein Webkontextextraktor.
Man kann ihn einfach auf eine URL schicken und klickt dann in den rohen Text raus.
Und das funktioniert relativ zuverlässig für so Kleinigkeiten.
Wenn man das braucht, sagt, hey, gib mir mal ordentlichen Text, Trafilatura, Import, Fetch-URL, GIP und dann sagst du Extrakt mal als JSON oder sowas und dann schick.
Sehr schön.
Sehr cool.
Cool das Attraktionsverinterface für Python.
Ah, okay, cool, cool.
Ja, okay, dann, was ich picken würde, ist Hurder.
Ja, ich habe wahrscheinlich auch schon mal T-MAX gepickt.
Also ich habe mit T-MAX habe ich dann so angefangen.
Also was macht man?
Also ich habe auch lange irgendwie kenne ich wirklich irgendwie so Terminal-Multiplexing-Lösungen verwendet, weil wozu?
Aber wenn man ja so ganz viele CLI-Coding-Agents hat, dann muss man ja irgendwie, die hat man auf unterschiedlichen Rechnern, wie da das muss man ja, wie soll man diese Herde unter Kontrolle halten?
Das ist ja ein schwieriges Thema.
T-Max habe ich angefangen.
Und dann diese ganzen Keyboard-Shortcuts wieder gelernt, die ich alle schon mal schon mal gelernt und wieder vergessen und schon mal gelernt und wieder vergessen hatte.
Und dann hat mir irgendjemand gesagt, nee, nee, nehme nicht T-Max nimm Zelic.
Und dann habe ich Zellage verwendet.
Vielleicht habe ich das jetzt auch schon mal gepickt, habe ich auch wieder vergessen.
Zellisch nehme ich auch noch, ja.
Ja, und das ist auch tatsächlich eigentlich ganz nett, aber ist halt nicht auf diesen Agent-Use Case irgendwie zugeschnitten.
Und dafür gibt es halt Hörer und das ist halt, da hast du dann halt in so einer Pain Links die ganzen Coding-Agents einfach alle untereinander und die werden dann sortiert nach, brauchen sie Input oder nicht und halt auch über mehrere Maschinen weg.
Das heißt, ich sehe das gleiche Konsolenfenster halt, egal auf welcher Maschine ich gerade bin.
Und kann dann halt irgendwie immer auf Ja klicken.
Also wenn da ein grüner Bubble angezeigt wird, dann sage ich halt Ja, du darfst.
Ich kann eine Antwort sagt immer so ja oder schau doch nochmal selbst oder was denkst denn du?
Ja.
Genau, und das erstaunlicherweise macht mich tatsächlich produktiver, was irgendwie Fragen aufwirft, möglicherweise nach, was man, was ich da jetzt so den ganzen Tag noch tue.
Aber ja, leider nur die Fragen, keine Antworten.
So.
Genau, im Terror.
Also es hat mich tatsächlich erstaunlicherweise ein bisschen produktiver gemacht und ja, kann man sich mal angucken.
Also ich dachte, ich dachte lange Zeit, ich habe davon gehört, so soll ich es mir angucken oder nicht?
Nee, lieber nicht.
Und dann habe ich es mir auch mal entfunden.
War gut.
Okay, also bei mir ist halt so bei mir auf ein normales Terminal und dann Sally J auf einem Screen mit so einer Orchestrierung von Tabs von unterschiedlichen Szenarien, wie, keine Ahnung, meine Dev-Server alle oder einen Blick auf die Loks oder sowas.
Und dann würde halt an dem normalen Terminal-Hörder laufen für die Multiplexen der Terminals, die ich sonst nebenbei habe.
Also ich lasse zum Beispiel diesen Status, was du gerade erzählt hast, einfach mit in den Titel schreiben von den Tabs.
Ja.
Das war dein Blick.
Ja, da haben wir alle Blick.
Daraus.
Dann sind wir für heute, glaube ich, wieder soweit.
Genau.
Vielleicht wird diese Folge ja auch zügig.
Ich versuche das tatsächlich mal einzukriegen, genau.
Wir hatten letztes Jahr ein Hörertreffen geplant, das heißt, wir haben ja gar nicht in der Ort.
Es kommt einfach mal vorbei, sag mal Bescheid.
Wir treffen das und so.
Es ist auch einfach viel los gerade.
Hallo Python Podcast.de.
Nein, viel los, wie kommst du denn darauf?
Und bleibt uns gewogen und schaltet irgendwann mal wieder rein.
Vielleicht kommt dann noch die eine oder andere Folge raus.
Dann schönen Tag, schönen Abend, schöne Nacht, schöne Zeit.
Bis bald.
Danke, Johannes.
Ja, vielen
Dank und danke euch.
Euch auch von daher noch.
Tschüss.