dominik: Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Pysen-Podcast, heute Episode 59.
jochen: Ja, hallo, willkommen in einem Podcast. Heute mit 59.
johannes: Hallo zusammen.
dominik: Hi Jochen.
jochen: Boah, herzlich willkommen Dominik, 59, meine Güte.
dominik: Herzlich willkommen Dominik, 59, meine Güte.
dominik: Ja, hi Johannes.
jochen: Ja, hi Johannes.
dominik: Und hallo Johannes.
dominik: Wir machen heute weiter mit dem Flun, Pysen-Buch, haben wir uns gedacht.
jochen: Und hallo, Johannes.
johannes: Dann haben wir es schon vergessen, dann müssen wir es von vorne direkt wieder vorlesen.
jochen: Wir machen heute mal einen guten Feistenbuch, waren wir es vor?
jochen: Ja, genau, so, hat sich bewährt.
dominik: Ja, genau.
dominik: Hat sich bewährt.
dominik: Ja, wir fanden das ganz gut.
jochen: Da bleiben wir jetzt.
dominik: Es ist ja auch lang.
dominik: Wenn wir hinten angekommen sind, dann machen wir das immer rückwärts.
jochen: Machen nur noch das.
jochen: Wenn wir hinten angekommen sind, dann machen wir es immer rückwärts.
jochen: Ja.
dominik: Ja.
dominik: Ja, wir hatten, also der Kapitel 2 hat was mit Sequenzen und Listen und sowas zu tun,
jochen: Wir hatten, also der ist so beklemmt, der hat was mit Sequenzen und Wissen und sowas zu tun.
johannes: Ja, aber da gibt es einfach immer noch mehr zu sagen.
jochen: Da hatten wir ja schon mal eine Vornehmung.
dominik: da hatten wir jetzt schon mal eine Folge, ne?
dominik: Erinnert ihr euch?
jochen: Ja.
dominik: Ja.
dominik: Genau, ich hätte da auch nochmal kurz, und wir haben da, also das ist ein bisschen ordinal,
jochen: Genau, ich hatte da auch noch mal reingeguckt kurz und wir haben da, also das ist ein bisschen orthogonal, das ist gut.
johannes: Ja, aber da gibt es einfach noch mehr zu sagen.
dominik: das ist gut, also es ist halt von der anderen Seite nochmal angegangen und da das Thema
jochen: Also es ist halt von der anderen Seite nochmal angegangen und da das Thema sowieso irgendwie wichtig ist,
dominik: sowieso wichtig ist, dann kann man das auch von mehreren Seiten mal irgendwie angehen.
jochen: dann kann man das auch von mehreren Seiten mal irgendwie angehen und das ist eigentlich ganz gut.
dominik: Ok.
jochen: Okay.
dominik: Haben wir denn News?
jochen: Ja.
jochen: Haben wir denn News?
dominik: Ja, so ein bisschen.
jochen: Ja, so ein bisschen, ich habe jetzt, ja, es ist halt die Frage, was da alles so drunter fällt.
dominik: Ich habe jetzt, ja, jetzt halte ich mal, was da alles so drunter fällt.
dominik: Halten 3.13, das machen wir jetzt nicht, aber das kommt jetzt ganz bald.
jochen: Python 3.13, das machen wir jetzt nicht, aber das kommt jetzt ganz bald.
jochen: Ja, also ich finde ja den Refresh so schön.
dominik: Ja, also ich finde ja den Rappel so schön.
jochen: Ja.
dominik: Ja?
jochen: Genau, habt ihr euch alle schon so ein bisschen damit beschäftigt oder noch gar nicht?
dominik: Ja.
dominik: Genau, habt ihr euch alle schon so ein bisschen damit beschäftigt, oder noch gar nicht?
jochen: Noch gar nicht.
jochen: Ganz kleines bisschen.
dominik: Noch gar nicht?
dominik: So ein ganz kleines bisschen.
jochen: Ja, also genau, also ja, ist jetzt der zweite Release-Kandidat.
dominik: Ja, also genau, also.
dominik: Also der Rappel ist total toll, du kannst einfach defaults jetzt eintragen, den er automatisch
jochen: Du kannst einfach die Calls jetzt eintragen, denen er automatisch lädt, Pakete in deinem Ripple.
dominik: lädt, Pakete in deinem Rappel, das heißt, wenn du den Interpreter aufmachst, dann hat
jochen: Das heißt, wenn du den Interpreter aufmachst, dann hat der Pakete schon geladen.
dominik: der Pakete schon geladen, oder damit kannst du halt auch Sachen dann überschreiben, weil
jochen: Oder damit kannst du halt auch Sachen dann überschreiben, weil er die Pakete lädt, die er laden sollte.
dominik: er dann die Pakete lädt, die er laden soll und du hast einen Befehlssatz drin direkt,
jochen: Ja.
jochen: Und dann hast du einen Befehlsatz drin direkt, den du möchtest, also eine eigene Konfiguration für deinen Ripple.
dominik: den du möchtest, also eigene Konfiguration für deinen Rappel direkt haben und so.
jochen: Exit funktioniert, man kann einfach Exit eingeben und ist draußen und Multiline Editing und die History ist ordentlich und so.
dominik: Exit funktioniert, man kann einfach Exit eingeben, ist draußen und Multiline Editing.
dominik: Multiline Editing.
dominik: Ist ordentlich und so.
jochen: Ja.
dominik: Und genau.
dominik: Ja, aber ratet mal, wer das nicht hat.
jochen: Ja, aber rate mal, wer das nicht hat.
dominik: Ne, die Python Core Entwickler.
jochen: Ne, die Python Core Entwickler.
jochen: Deswegen alle, wenn du an einer neuen, dann, ja, so, ich könnte jetzt iPython, das ist so cool, aber es geht nicht.
dominik: Deswegen alle, alle neuen.
dominik: Auf IPython oder auf, oder BPython?
jochen: Ja, genau, und das geht alles nicht, weil das läuft ja mit einer neuen und in der Entwicklung befindlichen Python Version, das ist halt nicht,
dominik: Genau, das geht alles, was auf der neuen und in der Entwicklung der neuen Python Version
dominik: ist, so funktioniert das halt nicht, das heißt, die müssen aber die Python dafür verwenden
jochen: das heißt, die müssen immer die Python Ripple verwenden und die sagen alle, ach, das ist so viel besser jetzt, ach, das ist so cool.
dominik: und die sagen alle, ach, das ist so viel leichter jetzt, ach, das ist so cool.
jochen: Ja.
dominik: Ja.
dominik: Ja, erstmal bitte ein bisschen Redingbogenfarben irgendwie in der Konsole, dann macht das Spaß.
jochen: Ja.
dominik: Ja, und ein großer Teil davon kommt halt auch, oder kam, also Anregungen dafür kamen aus
jochen: Und ein großer Teil davon kommt halt auch, oder kam, also Anregungen dafür kamen aus PyPy.
dominik: PyPy und dann haben sie das jetzt nochmal durch die Mangel gedreht und dann haben sie Sachen
jochen: Und dann haben sie es jetzt aber nochmal durch die Mangel gedreht und alle möglichen Sachen gefunden, die man irgendwie besser machen kann als soll.
dominik: gefunden, die man irgendwas machen soll, zum Glück haben sie auch der Kram gesehen, die
jochen: Jetzt überlegen sie, ob der Kram, den sie in Cpython jetzt gemacht haben, nicht zurückgeht nach PyPy wieder.
dominik: Python jetzt gemacht haben, die zurückgeht nach PyPy wieder.
dominik: Ja.
jochen: Ja, aber das ist cool, also das ist auf jeden Fall, das sind einige Sachen, die jetzt auch da immer wieder zwischen den Leuten diskutiert werden und so.
dominik: Aber das ist cool, also das ist auf jeden Fall, das sind einige Sachen, die jetzt auch da
dominik: immer wieder zwischen den Leuten diskutiert werden und so, da gibt es auch immer eine
jochen: Und da ist auf jeden Fall eine fruchtbare Diskussion immer so im Stande, immer, ich höre ja diesen Copyright Podcast und da ist eigentlich PyPy immer mit dabei.
dominik: fruchtbare Diskussion, immer so ein "Standard Magic" gehört bei diesem Coffee-Boy-Podcast
dominik: und da ist PyPy immer mit dabei oder, ja, Karl Friedrich, bei Band, als A oder B, oder
jochen: Und Karl Friedrich wird immer erbändt, als, ah, da wäre irgendwas Interessantes dazu gesagt.
dominik: was auch immer, hat es gesagt.
jochen: Ja, also das ist auf jeden Fall cool.
dominik: Ja, also das ist auf jeden Fall cool.
jochen: Genau, Python 3.13, die Ripple-Geschichten, ja, es gibt halt, also das größte, das dickste Feature, was immer alle nennen, ist halt Free Threading, also man kann den GIL abschalten.
dominik: Genau, Python hat seine Grapple-Geschichten, ja, es gibt halt, also das größte, das dickste
dominik: Feature, was man alle nennen muss, ist halt "pre-threading", also man kann Heal abschalten,
dominik: ja, also, ja, ja, schon, klar, in gewissen Fällen bringt das sicherlich auch viel, aber
jochen: Ja, also, ja, schon, klar, in gewissen Fällen bringt das sicherlich auch viel, aber, ja, genau, da müsste man auch mal, genau.
dominik: ja, genau, das ist nun auch mal...
dominik: Noggle.
dominik: Genau.
dominik: Ja, das ist halt auch mit drin, ja, überhaupt dieser ganze, der, es gibt einen Justin-Tang-Compiler,
jochen: Ja, das ist halt auch mit drin, ja, überhaupt dieser ganze, der, es gibt einen Just-in-Time-Compiler, der jetzt mit dabei ist, der macht zwar noch nicht viel, aber er ist auf jeden Fall jetzt drin.
dominik: der jetzt mit dabei ist, der macht zwar noch nicht viel, aber er ist auf jeden Fall jetzt
dominik: drin, das heißt, da könnte man in Zukunft auch irgendwie eine coole Performance-Verlesserung
jochen: Das heißt, da könnte man in Zukunft auch irgendwie einige coole Performance-Verbesserungen erwarten, so ein Copy-and-Patch-Jit ist jetzt tatsächlich in Python, in Python Interpreter mit drin.
dominik: erwarten, so ein bisschen Coffee-Patch-Jit ist jetzt tatsächlich in Python-Interpretern
dominik: mit drin.
dominik: Ja, was haben wir noch alles?
jochen: Ja, was haben wir noch alles?
dominik: Genau, es gibt jetzt Farbige-Tracebacks, auch wieder so ein...
jochen: Genau, es gibt jetzt farbige Tracebacks, auch wieder so ein, ja, macht den Alltag irgendwie ein bisschen besser.
dominik: Sehr wichtig.
dominik: ...ein bisschen besser.
dominik: Nein, aber auch die Messages und so, also er hat auch immer einen guten Hint, er eracetet
jochen: Ja, aber auch die Messages, also er hat auch schon immer einen guten Hint, er tracest nicht einfach irgendwas und denkt sich so, oh ja, komisches Traceback, weiß nicht wo, sondern er hat auch schon eine gute Intuition, was das sein könnte.
dominik: jetzt nicht einfach irgendwas und denkt sich so, oh ja, komisches Traceback, so weiß ich
dominik: nicht wo, sondern er hat oft schon eine gute Intuition, was das sein könnte.
jochen: Ja, genau, da ist jetzt auch eine, ja, aber tatsächlich für Anfänger, also was die oft irgendwie ein Problem, das sie hatten, ist, du machst, du nennst dein Python-Modul oder Skript, das du gerade schreibst, nennst du halt genauso wie ein Standard-Lib-Modul.
dominik: Ja, genau, da ist jetzt auch eine...
dominik: Ja, aber tatsächlich für Anfänger, also was wir auch irgendwie, ein Problem, das wir
dominik: hatten, ist, du nennst dein Python-Modul oder Skript, das du gerade schreibst, nennst du
dominik: halt genauso wie ein Standard-Lib-Modul und wenn das dann versuchst auszuführen, passiert,
jochen: Und wenn du das dann versuchst auszuführen und es passiert, kriegst du eine total kryptische Fehlermeldung, die dir echt gar nicht weiterhilft.
dominik: kriegst du total kryptische Fehlermeldungen, die wir gar nicht melden.
jochen: Und da gibt es jetzt eine Fehlermeldung, die sagt so, also kann es sein, dass du das so genannt hast wie ein Standard-Lib-Modul, das ist aber nicht gut, mach das mal anders.
dominik: Und da gibt es jetzt eine Fehlermeldungs-Azuleise und kann sein, dass du das so gemacht hast
dominik: wie ein Standard-Lib-Modul, das ist aber nicht gut, mach das mal anders.
dominik: Und das ist natürlich hilfreicher irgendwie.
jochen: Und das ist natürlich hilfreicher irgendwie.
dominik: Ja.
jochen: Ja.
dominik: Ja, klar, das ist richtig, da hast du ein ganzes Bericht und ich bin auch verdrunken
jochen: Ja, das ist richtig, da ist eine ganze Menge jetzt für die Anfänger auf der Hand dran gewesen, glaube ich.
dominik: gewesen, glaube ich.
jochen: Ja, ansonsten, genau, ich weiß gerade nicht, ob noch irgendwas zu lesen ist, wir machen dazu, wir machen zu 3.13 auf jeden Fall auch noch eine Episode, denke ich, dann können wir das mal alles zusammentragen.
dominik: Ja, ansonsten, genau, ich weiß gar nicht, ich habe noch irgendwas zu lesen, wir machen
dominik: dazu, wir machen zum 3.13 auf jeden Fall auch ein Netto-Summer, dann kann man da was zusammen
dominik: tragen.
jochen: Ja, ansonsten, was war noch?
dominik: Ja, ansonsten, was war noch?
dominik: Django 5.1 gibt es auch irgendwie jetzt.
jochen: Django 5.1 gibt es auch, irgendwie jetzt.
jochen: Das war, mäh, was, da war auch, also nichts, was ich mir jetzt so spontan in Erinnerung geblieben wäre, daher.
dominik: Das war, nee, das, da war auch, also nichts, was ich mir jetzt so spontan gedrungen wäre
dominik: daher.
dominik: Ja.
dominik: Oh, wir haben da schon drüber gesprochen, glaube ich, wir haben schon drüber gesprochen,
jochen: Ja.
jochen: Oh, wir haben da schon drüber gesprochen, glaube ich, wir haben schon drüber gesprochen, diese Query-String-Geschichten und so, brauchen wir nicht nochmal, ja, ich habe mir die News nicht aufgeschrieben, aber ich ...
dominik: diese Korrektionsgeschichte, brauchen wir nicht nochmal, ja, ich habe mir die News nicht
dominik: mehr vorgestellt, aber ich glaube, wir haben ja schon drüber gesprochen, dass es ja auch
jochen: Ja, ja, das ist ja auch was Gutes, genau, würde ich auch sagen.
dominik: was Gutes gibt, wenn man sich darauf verlassen kann, dass man jetzt weiß, wie es funktioniert,
jochen: Dass man sich darauf verlassen kann, dass das halt, was man jetzt weiß, wie es funktioniert, dass es auch so bleibt.
jochen: Ja, aber ich hätte noch eine Überleitung zu einer ganz interessanten Frage vielleicht, wenn wir jetzt hier schon eigentlich mit den News mehr oder weniger am Ende sind, also ich weiß nicht, ob ihr noch was habt, ich hätte jetzt nur noch irgendwie, es gibt neue LLM-Modelle, sowas wie ONE oder, genau, es gibt neue, probiert es mal wieder aus, es ist mal wieder ...
dominik: dass es auch so bleibt.
dominik: Ja, aber ich hätte noch eine Überleitung zu einer ganz interessanten Frage vielleicht,
dominik: wenn wir jetzt hier schon eigentlich mit den News-Meldungen am Ende sind, also ich weiß
dominik: nicht, ich probiere es mal wieder aus, mal wieder.
dominik: Also O1 Preview ist ja aber trotzdem auch noch new und das ist, also ich höre, das ist
jochen: Ja.
jochen: Das, ja, das ...
dominik: besser als Cloud wieder.
jochen: Ja, also bisher, also genau, ich würde sagen, also diese ganze Artifaktsnummer, ich habe jetzt in letzter Zeit häufig, Claude, also das Chat-Interface von Anthropic verwendet, weil das halt einfach für Code-Geschichten oft ein bisschen besser war als GPT-4.
dominik: Ja, also bisher, also genau, ich würde sagen, also diese ganze Artifakts-Nummer, ich habe
dominik: jetzt in letzter Zeit häufig Cloud, also das Chat-Interface von Anthropic verwendet, weil
dominik: das halt einfach für Code-Geschichten auch ein bisschen besser war als DeepStream Pro.
dominik: Und ja, aber jetzt inzwischen, also ich weiß nicht genau, ich habe es noch nicht wirklich
jochen: Und, ja, aber jetzt inzwischen, also ich weiß nicht genau, ich habe es noch nicht wirklich ausprobiert, ehrlich gesagt, weil es ja auch gerade erst rausgekommen ist, aber das soll halt sich dann auch nochmal wieder ein bisschen besser drüber sein.
dominik: ausprobiert, ehrlich gesagt, weil es ja auch gerade erst rausgekommen ist, aber das soll
dominik: vielleicht auch mal wieder ein bisschen besser drüber sein.
jochen: Also, ich finde es jetzt schon super alles, also das ist auch, das ganz normale GPT-4-O und so, das war auch schon super und die Anthropic-Dinger fand ich auch total klasse, also ich bin eigentlich sehr zufrieden.
dominik: Also ich finde es jetzt schon super alles, also das ganz normale GTV-O, das war auch
dominik: schon super und Anthropic-Dinger waren ja auch total klasse.
dominik: Ja, apropos Anthropic, ist das ein gutes Zeichen, wenn ein Chief Machine Learning Engineer im
jochen: Ist das ein gutes Zeichen, wenn ein Maschinen-Learning-Engineer/Mensch Anthropic nicht kennt?
dominik: Mensch Anthropic nicht kennt?
dominik: Das ist ein schlechtes Zeichen, würde ich sagen, ja, wie kann das denn sein?
jochen: Das wäre ein schlechtes Zeichen, würde ich meinen, ja, wie kann das denn sein? Also gut, ich meine, Maschinen-Learning ist halt ein großes Feld, also du kannst dich ja auch in irgendwas spezialisieren oder in einem ganz anderen Feld irgendwas machen, mit LLMs nie irgendwas zu tun haben, aber ja gut.
dominik: Also gut, weil Machine Learning ist halt ein großes Feld.
dominik: Ja, du kannst dich auch in irgendwas spezialisieren oder in einem ganz anderen Feld irgendwas
dominik: machen, mit LLMs nie irgendwas zu tun haben, aber ja.
jochen: Ja, das war schon, ging schon um LLMs und so.
dominik: Ja, also es ging schon um LLMs und so.
dominik: Ja.
jochen: Ja.
dominik: Tja, ja gut.
jochen: Ja gut.
dominik: War eigentlich eine gute Idee, ich bin gespannt, also O1, ich finde es echt very nice.
jochen: Ja.
jochen: War eigentlich ein guter Anspruch, ich bin gespannt, also O1, ich finde es echt very nice.
dominik: Hilft, also es ist so ein bisschen fehlerfreier bei Coding-Ding und so ein bisschen deeperes
jochen: Es ist so ein bisschen fehlerfreier bei Coding-Dingen und so ein bisschen deeperes Knowledge und es macht echt viel Spaß, diesen Gedankengang zuzugucken.
dominik: Knowledge und es macht sehr viel Spaß, diesem Gedankengang zuzugucken.
jochen: Und das, was ja auch noch, das ist aber schon bei 4.0 drin, ist halt, dass du ein Gedächtnis hast, dir braucht.
dominik: Und das, was ja auch neu, das ist aber schon bei 4.0 drin, ist halt, dass du ein Gedächtnis
dominik: hast jetzt auch.
jochen: Ja, was sie da so nennen, ich meine, ich.
dominik: Ja, oder was sie das so nennen, ich weiß nicht.
dominik: Doch, doch, das ist schon, das funktioniert auch und man muss sich halt überlegen, ob
jochen: Das ist schon, das funktioniert auch unter der, man muss sich ja überlegen, ob man möchte, dass das gespeichert wird, was da so drüber spricht.
dominik: man möchte, dass das gespeichert wird, was man da bespricht.
dominik: Ja.
jochen: Ja.
dominik: Aber vor allen Dingen ist das gar nicht so schlecht, weil, ja, interesting.
jochen: Aber vor allem ist das gar nicht so schlecht bei dir, also ja.
jochen: Ja.
jochen: Interesting.
dominik: Ja, also wenn man jetzt, wenn man jetzt eine LLM-Tool zum Beispiel benutzt, aber das ist
jochen: Ja, ich meine, also wenn man jetzt LLMs über die Kommandosahle mit dem LLM-Tool zum Beispiel benutzt, dann hat man das ja auch irgendwie, das ist ja lokal, der SQLite, ich weiß nicht.
dominik: ja auch irgendwie, das ist ja lokal, der SQLite, ich weiß nicht.
jochen: Ja, ist auch immer die Frage, wie möchte man dir das hier eigentlich zeigen, oder?
dominik: Da ist auch immer die Frage, man kann ja auch mal einen Bericht zeigen.
dominik: Ja, also ich frage tatsächlich so nach so Morgenroutinen oder sowas und sage dann halt
jochen: Ja, ich mache das nicht so nach so einer Morgenroutine oder so, sondern sage halt so, hey, was ich denn so mache und dann steckt das Ding mir halt so Dinge vor, das macht mir so Rituale und so, ich finde es sehr lustig, das funktioniert toll.
dominik: so, hey, was ich denn so mache und dann steckt das Ding mir halt so Dinge vor, es macht mit
dominik: mir so Rituale und so, ich finde das sehr lustig und das funktioniert toll.
dominik: Und das ist, glaube ich, gar nicht so blöd, weil es einen so dabei hält, sich so selber
jochen: Und das ist glaube ich gar nicht so blöd, weil es einen so dabei hält, sich so selber zu bedenken.
dominik: zu entwickeln.
dominik: Ja, cool.
jochen: Ja, cool, okay.
dominik: Das kann man natürlich auch mit anderen Quellen machen, das ist nicht, dass man jetzt irgendwie
jochen: Mit anderen Cranes macht man sich das ja irgendwie so ein Eiferbrötchen, aber es geht damit sogar relativ gut.
dominik: so einen AI verbrüchte, aber es geht damit sogar relativ cool.
jochen: Ja, genau, ansonsten würde ich nämlich Django irgendwie mal kurz zu einer Überleitung nutzen, da wir jetzt sowieso nicht so viel News haben.
dominik: Ja, genau, ansonsten würde ich den Django irgendwie mal kurz zur Überleitung benutzen,
dominik: da wir jetzt sowieso nicht so viel Lust haben.
jochen: Ich mache gerade ein neues Projekt, weil irgendwie ich prokrastiniere so gerade die Dinge, die ich eigentlich machen sollte und naja, wer kann das nicht.
dominik: Ich mache gerade ein neues Projekt, weil ich fasziniert bin, wie viele Dinge ich eigentlich
dominik: machen sollte und naja, wer kann das nicht.
dominik: Und da dachte ich, ah, plötzlich, genau, der New Repository Button.
jochen: Und da dachte ich, ah, plötzlich, genau, der New Repository Button bei GitHub, der wird irgendwie immer so shiny und fängt an zu leuchten und dann denkt man sich, ah, es geht nicht anders, ich muss draufdrücken.
dominik: Ich brauche jetzt meine NeoWeapon-Config.
dominik: Ja, und dann fängt er zu leuchten und dann denkt man sich, ah, es geht nicht anders,
dominik: ich muss draufdrücken und dann ist es halt man wie immer.
jochen: Und dann habe ich das auch mal wieder gemacht.
dominik: Und genau, ich bin nämlich gerade dabei, irgendwie mal meine Werbungsunterlagen, bzw.
jochen: Und genau, ich bin nämlich gerade dabei, irgendwie mal meine Bewerbungsunterlagen beziehungsweise so CV und so Zeugs irgendwie auf einer Webseite zu, weil ich hätte das immer so in Textfiles,
dominik: so CD und so Zeugs irgendwie auf der Webseite zu, weil ich hätte das immer so in einem
dominik: Text file, da habe ich fünf unterschiedliche Varianten, die alle nicht aktuell sind und
jochen: aber dann habe ich fünf unterschiedliche Varianten, die alle nicht aktuell sind und irgendwie für unterschiedliche Zwecke gebraucht wurden.
dominik: irgendwie für unterschiedliche Zwecke gebraucht wurden.
jochen: Und dann denke ich mir so, naja, welches nehme ich denn jetzt, dann weiß ich es nicht und dann denke ich mir, ach, ich müsste mal, und, ah, alles schrecklich und warum packe ich das nicht einfach auf eine Webseite, das ist doch eigentlich ganz gut.
dominik: Da denke ich mir so, naja, gut, welches nehme ich denn jetzt, dann eine weitere Flicke und
dominik: dann denke ich mir, ah, die müssen wir, und ah, alles schrecklich und einen Baum packe
dominik: ich jetzt nicht einfach auf der Webseite.
jochen: Ja, ich habe auch mal ein paar gute Dinge gesehen, wo ich mir noch eine To-Do-Liste habe, wo draufsteht, dass ich mir ein Vorbild dran nehmen wollte.
dominik: Ja, ich habe auch mal ein paar gute gesehen, wo ich mir noch eine To-Do-Liste habe, wo
dominik: draufsteht, dass ich mir ein Vorbild daran nehmen wollte.
jochen: Vielleicht ist das dein Zeug und vielleicht hast du es auch davon.
dominik: Vielleicht ist das ja jetzt deins, Jochen, vielleicht hast du so hervorragend.
jochen: Ja, das hört sich gut an. Das bestätigt mir natürlich, dass ich auf dem richtigen Weg bin.
dominik: Ja, das hört sich gut an.
dominik: Ja, also ich habe meine Sachen immerhin schon mal in Markdown stehen, das ist schon mal
jochen: Ja, Markdown ist schon mal nicht so schlecht.
dominik: ein Fortschritt.
dominik: Ja, Markdown ist schon mal nicht so schlecht, ja.
jochen: Ja, vielleicht sollten wir das auch nochmal erwähnen.
dominik: Ja, oder mich, also das ist ja genau der Punkt, wir wollten halt so ein bisschen, vielleicht
jochen: Ja.
jochen: Können wir ja gerne auch mal machen.
dominik: auch heute mal Werbung in eigener Sache machen, oder, können wir ja auch irgendwann mal, ja.
jochen: Ja.
dominik: Also ihr könnt uns mieten, buchen oder sowas, wenn ihr wollt.
jochen: Wir sind prinzipiell käuflich, ja.
dominik: Wir sind prinzipiell keuflich, ja.
dominik: Ja, also für Projekte und ich glaube, wir machen, glaube ich, peißen.
jochen: Um es mal.
jochen: Ja.
dominik: Ja.
dominik: Genau, von ein bis drei Leuten könnt ihr da relativ viel Kappa bekommen, die auch gute
jochen: Ja.
dominik: Sachen machen, glaube ich.
jochen: Oh ja, genau, wir könnten eigentlich mal mit dem Thema anfangen.
dominik: Ja, ja, und uns kippen wir auch mal her.
jochen: Ja.
dominik: Oh ja, genau, wir können eigentlich mal mit dem Thema anfangen.
dominik: Ja, listen, haben wir gesagt, Sequenzen, ja.
jochen: Ja.
dominik: Ja.
jochen: Wie weit hast du denn gelesen, oder?
dominik: Wie weit hast du denn gelesen, oder, Seite 39?
jochen: Seite 39.
jochen: Weil so wahnsinnig viel fand ich das.
dominik: Weil so wahnsinnig viel von dir das, dann hast du wesentlich weitergelesen.
jochen: Dann hast du wesentlich weiter gelesen.
jochen: Ja, okay.
dominik: Also das mit 59 geht auch weiter, wenn "list is not the answer" und dann geht es so ein
jochen: Ja, okay.
dominik: bisschen in die Diskussion darüber, wann man was machen möchte.
jochen: Ja, okay.
dominik: Also ich glaube, dass, ja, also wir müssen auf jeden Fall diese Trade-offs, finde ich,
jochen: Ja, okay.
jochen: Oh mein Gott.
jochen: Ich bin so schlecht.
jochen: Ja.
jochen: Ja, also ich finde auch genau der grundsätzliche Blickwinkel drauf, den finde ich ganz interessant.
dominik: glaube ich, ganz gut, wenn man was für eine Art und Weise von Sequenz haben möchte, vielleicht
dominik: gar nicht so uninteressant.
dominik: Ja, also ich finde auch genau, wenn der, also der grundsätzliche Blickwinkel darauf, weil
dominik: wir hatten ja schon darüber geredet, da hatten wir eher den so, ja, wie implementiert man
jochen: Wir hatten ja schon mal darüber geredet, da hatten wir eher den so, ja, wie implementiert man das eigentlich,
dominik: das eigentlich, oder was sind so die algorithmischen Geschichten, die man damit machen kann, und
jochen: oder was sind so die algorithmischen Geschichten, die man damit machen kann.
jochen: Und hier sind so die grundsätzlichen Unterschiede zwischen den Dingen halt eher sowas wie,
dominik: hier sind so die grundsätzlichen Unterschiede zwischen den Dingen halt eher sowas wie, ist
jochen: ist es ein Container, oder ist es irgendwie flach, oder ist es irgendwie mutable oder immutable, sozusagen.
dominik: es ein Container, oder ist es irgendwie flach, oder ist es irgendwie mutable oder immutable,
dominik: sozusagen, an den Achsen orientiert sich das Ganze irgendwie, und das ist einfach ein anderer
jochen: An den Achsen orientiert sich das Ganze irgendwie, und das ist einfach ein anderer Blickwinkel,
dominik: Blickwinkel, und das fand ich eigentlich auch ganz interessant.
jochen: und das fand ich eigentlich auch ganz interessant.
jochen: Ja.
dominik: Ja, jedenfalls, genau, also das ist halt irgendwie eine ganz fundamentale Geschichte, und der
jochen: Jedenfalls, genau, also, das ist halt irgendwie eine ganz fundamentale Geschichte.
jochen: Und der Unterschied zwischen zum Beispiel Container und Flat ist halt einfach,
dominik: Unterschied zwischen Container und Flat ist halt einfach, dass in einem Container sind
jochen: dass in einem Container sind halt Referenzen auf Objekte drin, und da kann halt alles mögliche drin sein.
dominik: halt Referenzen auf Objekte drin, und da kann halt alles mögliche drin sein, da kann ja
jochen: Da kann ganzer Zoo, Baum, sonst was, Dings von irgendwie anderen Sachen, die da noch drin liegen, sein.
dominik: bei Zoo, Raum, sonst was, Dings von irgendwie anderen Sachen, die da noch drin liegen, sein,
jochen: Während, also, und das geht natürlich mit Liste, also mit Python List geht das,
dominik: während, also das geht natürlich mit Liste, also mit Heighten List geht das, während
jochen: während jetzt sowas wie, was halt auch eine Sequence ist, Array, enthält halt flach einfach nur die entsprechenden Werte.
dominik: jetzt sowas wie, was halt auch eine Sequence ist, Array, enthält halt flach einfach nur
dominik: die entsprechenden Werte. Heighten Header sind irgendwie die Daten, die da jetzt zukunftriert
jochen: Halt ein Header mit irgendwie, wie sind die Daten dahinter jetzt strukturiert, und dann kommen halt einfach nur die Daten.
dominik: sind, und dann kommen halt einfach nur die Daten. Und genau, das ist halt, das fand ich
jochen: Und genau, das ist halt schon mal ein großer Unterschied.
jochen: Das fand ich übrigens auch interessant, das habe ich nicht gewusst, dass Tuppel halt auch weniger Hauptsprecher belegen als die,
dominik: übrigens auch interessant, dass ich nicht gewusst, dass Tuple halt auch weniger Hauptsprecher
dominik: belegen als die, also Tuple sind noch ein bisschen schneller als Listen, weil das ist bei Listen
jochen: also Tuppel sind immer ein bisschen schneller als Listen, weil das ist bei Listen halt so doppelt indirekt,
dominik: halt so doppelt indirekt, weil es sich ja auch ändern kann, und bei Tuple nur einmal indirekt,
jochen: weil es sich ja auch ändern kann, und bei Tuppel nur einmal indirekt.
jochen: Jetzt habe ich die Stelle nicht mehr, wo das...
dominik: weil sonst ist die Stelle nicht mehr.
jochen: [Stille]
jochen: Ja.
dominik: Ja.
jochen: [Stille]
jochen: Ja.
dominik: Ja.
jochen: [Stille]
jochen: Ja.
dominik: Ja.
jochen: [Stille]
jochen: Ja, also normalerweise...
dominik: Ja, also, mal sagen.
jochen: [Stille]
jochen: Genau, 8 byte, ja.
jochen: [Stille]
jochen: Achso, wenn du das Python-Objekt, da hast du normalerweise, du hast einmal einen RefCount,
dominik: Achso, wenn du das Heighten Objekt, ja, da hast du normalerweise, du hast einmal den
dominik: Red Count, der Typ und die Sprecheradresse oder sowas, genau, also den Sprecher.
johannes: Du hast so einen Tag drin und so einen Typ und noch ...
jochen: den Typ und die Speicheradresse oder sowas, also den Pointer.
johannes: und dann den Pointer.
johannes: Und hast du nicht auch noch einen Reference Count drin?
jochen: [Stille]
johannes: Auch noch ...
jochen: Ja, genau, also ich meine, das minimale Python-Objekt ist ein Float, oder Int, ich weiß nicht, ob es genau gleich ist.
dominik: Ja, genau, also ich meine, das minimale Heighten Objekt ist ein Float, oder Interface, ich
johannes: Also es sind irgendwie 20 oder 24 Byte, habe ich im Kopf.
johannes: Ja, genau so was habe ich im Kopf.
dominik: weiß nicht, ob es genau gleich ist, Float, aber ich bin mir ziemlich sicher, dass das
jochen: Float, da bin ich mir aber ziemlich sicher, dass das das kleinste mögliche Python-Objekt ist,
dominik: das kleinste mögliche Heighten Objekt ist, und das hat glaube ich 24 Byte, weil das ist
jochen: und das hat, glaube ich, 24 byte, weil das ist halt genau irgendwie der Wert, RefCount.
dominik: halt genau irgendwie der Wert, Red Count.
johannes: Das ist sogar inline, oder?
johannes: Bei Float ist es sogar inline, oder?
dominik: Ja, du meinst bei kleinen Werten, oder?
jochen: Ja, du meinst bei kleinen Werten, oder?
jochen: [Stille]
johannes: Da hast du keine Referenz auf irgendeine andere Speicherzelle,
johannes: sondern da ist der Float einfach direkt drin.
jochen: Ne, ne, genau, das ist einfach direkt, genau, das ist nur der Wert direkt, der RefCount und der Typ.
dominik: Ne, ne, genau, das ist einfach direkt, genau, das ist nur der Wert direkt, der Red Count
johannes: Ja, klar. Für im Grunde nur 8-Byte-Speicher.
dominik: und der Typ, aber auch das sind schon halt 24 Byte, also.
jochen: Aber auch das sind schon halt 24 byte, also...
jochen: [Stille]
dominik: Ja, genau.
johannes: Hast du schon 24-Byte-Speicher überhaupt.
jochen: Ja, genau, also das...
dominik: Also das, ja, das ist richtig, ja, ok.
johannes: Aber die Größe ist ja gleich, egal ob du einen Tuple oder eine Liste hast.
jochen: [Stille]
johannes: Aber die freien Elemente, das hast du beim Tuple natürlich nicht.
jochen: Ja, das ist richtig.
jochen: [Stille]
jochen: Ja, okay.
jochen: [Stille]
johannes: Beim Tuple sagst du, hier, ich brauche 7 Stück
johannes: und dann kriegst du 7 Stück und nicht 8 und nicht 16
johannes: und auch nicht eine andere Anzahl.
jochen: Ja.
dominik: Ja, und du kannst halt, also, vielleicht besser Optimierung machen, weil du immer genau weißt,
jochen: [Stille]
johannes: Ja, okay. Aber du hast natürlich einen Virtual Table, hast du immer noch ...
dominik: wie lang es ist, weil du ja schon weißt, was los ist, weil du das nicht mehr verändern
johannes: Ja, weiß nicht, ob das der große Unterschied ist.
dominik: kannst, und du kannst diese ganzen Methoden-Dinger weg, und den Overhead weglassen für, ich muss
dominik: da was reinbasteln oder rausnehmen.
dominik: Ja, so dürft ihr nicht so viel ausmachen, ja.
johannes: Aber, ja.
dominik: Ja, ok, dann bitte.
johannes: So, jetzt Jochen, jetzt erleuchte uns.
jochen: Ha! Okay, ich hab's doch gefunden.
jochen: Das war komplizierter und schwieriger, als ich gedacht hätte.
dominik: Einmal zurück spulen, ja.
jochen: Ich dachte gerade schon, ich hab schon irgendwie, dachte schon, wahrscheinlich hab ich einfach irgendwie Dinge herbeihalutioniert und...
dominik: Ich dachte gerade schon, ich hab schon irgendwie, ich dachte schon, wahrscheinlich haben die
johannes: Was ist denn dir gezweifelt?
johannes: Oh, Jochen.
dominik: einfach irgendwie, wie gesagt, halluziniert, aber nein, also genau, ja, manchmal weiß
jochen: Aber nein!
johannes: Bist du auch ein LLM, Jochen?
jochen: Also, genau, ja, manchmal, man weiß es nicht so genau.
johannes: * lacht *
dominik: man es nicht so genau.
johannes: Ah.
jochen: Genau, die Referenzen zu den Items in einem Tuppel sind halt in einem Array, die sind halt in einem Array in dem Tuppelsdruck drin.
dominik: Genau, die Referenzen zu den Items in einem Tuple sind halt in einem Array, die sind halt
dominik: in einem Array in dem Tuples-Tuple drin, aber in der Liste sind quasi, also die Liste hält
jochen: Aber in der Liste sind quasi, also die Liste hält einen Pointer zu einem Array von Referenzen, die irgendwo anders sind.
johannes: * lacht *
johannes: Ja, okay.
dominik: einen Pointer zu einem Array von Referenzen, die irgendwo anders sind, weil das Problem
jochen: Weil das Problem ist halt, wenn die Liste größer wird, als sie eigentlich quasi als momentan alloziert ist an den Hauptspeicher,
dominik: ist halt, wenn die Liste größer wird, als sie eigentlich quasi als momentan alloziert
dominik: ist, an den Aufschweiter, dann muss man die ganzen Kram reallozieren können, und das
jochen: dann muss man den ganzen Kram reallozieren können und das geht halt nur, wenn du das...
johannes: Ja, das ist dieses Resizing.
dominik: macht halt nur, wenn du, genau, genau, das macht halt nochmal einen Interaktionsschritt
jochen: Genau, genau, und das macht halt nochmal einen Interaktionsschritt erforderlich.
johannes: Okay, okay, okay.
dominik: erforderlich, und bei dem Tuple weißt du halt, ja, das passiert halt nie, ich kann einfach
jochen: Und bei einem Tuppel weißt du halt, ja, das passiert halt nie.
johannes: Okay, das ist quasi so ein bisschen wie das,
jochen: Ich kann einfach ein Array von den Werten nehmen.
johannes: was wir eben auch schon beim Float angesprochen haben, oder?
dominik: ein Array von den Werten legen, also von den Referenzen.
jochen: Also von den Referenzen, aber...
johannes: Bei einem Pi-Object kann ein Float direkt drin sein
jochen: Ja.
dominik: Ja.
jochen: Ja.
johannes: und dann hast du keine Referenz auf irgendwas.
johannes: Bei einem String zum Beispiel geht es nicht.
johannes: Bei einem String, das Pi-Object ist halt der Tag und der Typ
johannes: und der RefCount und die Referenz auf die tatsächlichen Daten.
dominik: Bitte.
jochen: Ja.
dominik: Ja.
johannes: Und hier ist es genauso, oder?
johannes: In einem Tuple kannst du es direkt drin haben
johannes: und in einem Float kannst du es direkt anpassen.
jochen: Ja.
johannes: Das ist genauso, oder?
dominik: Ja.
johannes: In einem Tuple kannst du es direkt drin haben
jochen: Ja.
johannes: und in einer Liste brauchst du erst noch eine Referenz
dominik: Ja.
johannes: auf die tatsächlichen Daten,
jochen: Genau.
johannes: die dann wiederum halt in dem Fall eine Sequenz von Sachen sind.
johannes: Im Tuple-Fall direkt die Sequenz der Sachen
johannes: und im Listen-Fall eine Referenz auf eine Sequenz von Sachen.
jochen: Ja.
dominik: Ja.
johannes: Okay.
dominik: (lacht)
johannes: Ja, okay, gut, das verstehe ich natürlich.
johannes: Das ist ein Pointer-Aufruf mehr und Pointer-Aufrufe sind ja
jochen: Das ist der Tod.
dominik: Das ist der Tod.
johannes: bei modernen Prozessoren so das Schlimmste,
dominik: (lacht)
johannes: was du machen kannst.
jochen: Ja, es ist alles kein großer Unterschied wahrscheinlich praktisch.
dominik: Ja, das ist alles kein großer Unterschied wahrscheinlich.
johannes: Ja.
johannes: Ja, müsste man mal einen Test machen.
dominik: Aber ja.
jochen: Aber ja.
dominik: Ja.
jochen: Ja.
johannes: Es gibt ja durchaus Menschen, die sagen,
dominik: Aha, okay.
johannes: nur High-Performance-Computing ist sinnvolles Computing.
jochen: Aha, okay.
johannes: Ja, also ...
dominik: Also, ist ja generell so, oder? Nur High Performances sind voll.
dominik: Dieses casual irgendwie Slow Food irgendwie.
jochen: Dieses casual irgendwie Slow Food irgendwie, ich schreibe meinen eigenen Sortieralgorithmus, das ist nicht gut.
johannes: Ja, das geht gar nicht.
dominik: Ich schreibe meinen eigenen Sortieralgorithmus.
dominik: Das ist nicht gut.
johannes: Es ist nur richtig sinnvoll, wenn du es richtig machst.
dominik: Oh.
dominik: Ja.
johannes: Nee, aber es ist, also ich meine,
johannes: es gibt ja so Leute, es gibt diesen Casey Muratori,
jochen: Ja.
johannes: der ist relativ bekannt,
dominik: Ja.
jochen: Ja, ja.
johannes: der schlägt immer wieder auf mit solchen,
dominik: Ja.
johannes: der ist halt, der vertritt quasi diese extreme Position.
jochen: Ja.
johannes: Wenn du es nicht richtig machst und dann auch hier
dominik: Ja.
johannes: die SIMD-Inlines von den verschiedenen Prozessoren benutzt,
johannes: dann hast du es eigentlich gar nicht richtig gemacht.
johannes: Und das ist die Ursache allen Übels.
johannes: Deshalb ist ein Computer heute so scheiße.
jochen: Ja.
johannes: Und das ist natürlich das eine Extrem.
dominik: (lacht)
johannes: Und das andere Extrem sind halt,
johannes: na ja, so Menschen wie wir, die Python und TypeScript
johannes: und JavaScript benutzen und sagen, komm,
dominik: (lacht)
dominik: Ja.
johannes: Skriptsprache, Hauptsache das Entwickeln ist angenehm.
dominik: Ne, warte.
jochen: Das ist eigentlich ein Nehmer, ja.
johannes: Und irgendwo dazwischen, ich meine,
dominik: Ja.
johannes: gelegentlich machen wir ja auch High-Performance-Sachen
dominik: Ja, ja.
jochen: Ja, ja.
johannes: und da muss man dann halt zu Techniken greifen, ja.
dominik: Die Frage ist, was High Performance eigentlich ist.
jochen: Also ich weiß, was High Performance eigentlich hier ist, da gibt es ja vielleicht verschiedene Blickwinkel drauf.
johannes: Nur, ja, gibt es auch verschiedene Blickwinkel,
dominik: Da gibt es ja vielleicht verschiedene Blickwinkel drauf.
dominik: Ja.
johannes: wobei, sobald du halt in so Data-Bereiche reingehst,
johannes: ja, und sobald es mehr als ein Megabyte ist,
johannes: musst du schon dir zumindest Gedanken darüber machen,
johannes: ob das sinnvoll ist, das einzel-elementweise zu verarbeiten
johannes: oder ob du da nicht zumindest ein bisschen
johannes: Batch-Verarbeitung machen kannst.
johannes: Und je mehr es wird, umso mehr musst du darüber nachdenken.
johannes: Aber in so einem Fall würde natürlich auch keiner von uns
jochen: Ja.
johannes: eine Python-Liste verwenden, oder?
johannes: Also, ich meine, für numerische Daten
jochen: Ja.
johannes: oder für High-Performance-Daten würde ich nicht
johannes: eine Python-Liste verwenden.
dominik: Was denn dann?
jochen: Was denn dann?
johannes: Das ist ja eine sehr gute Frage zum Beispiel,
dominik: Aha.
jochen: Ja.
johannes: die hat auch schon angesprochen.
jochen: Aha.
johannes: Array, das ist der erste Schritt auf dem Weg zur Effizienz
dominik: Also, Import Array, Array.Array.
johannes: und ist sogar in Python und pures Python und so weiter und so fort.
jochen: Also, what array, array dot array?
johannes: Genau, richtig.
dominik: Ja, genau.
jochen: Ja, genau.
dominik: Genau.
johannes: Das, die generelle Eigenschaft von so High-Performance-Sachen
dominik: Aha.
dominik: Ja.
johannes: ist ja immer, dass man Komfort aufgibt für Geschwindigkeit.
dominik: Ja.
johannes: Und das ist generell so, ja.
jochen: Ja.
johannes: Und man kann das in beide Richtungen beliebig weit treiben.
johannes: Man kann den Komfort komplett aufdrehen
johannes: und dann halt sagen, hier, Typen sind egal
johannes: und alle, ein Container kann alles enthalten
johannes: und auch nichts und verschiedene Dinge und so weiter und so fort,
johannes: so wie wir es in Python bei Listen haben.
johannes: Und du kannst aber auch ganz ans andere Ende gehen und sagen,
johannes: okay, SIMD und das muss im Speicher in der richtigen Stelle liegen
johannes: und es muss byte-aligned sein und es muss so aufgebaut sein,
jochen: Ja.
dominik: Ja.
johannes: dass die Cache-Lines zusammenpassen.
johannes: Und das ist aber eine Skala dazwischen,
johannes: so eine Sliding-Scale dazwischen.
johannes: Du kannst das ein bisschen mal weiter in die eine Richtung drehen
johannes: und ein bisschen weiter in die andere Richtung drehen.
jochen: Ja.
johannes: Und der erste Schritt, den du von Python-Listen wegmachen kannst,
johannes: ist halt Array, Array.Array.
johannes: Weil, das ist dann nicht mehr diese Indirektion,
johannes: sondern es ist direkt eine Auflistung von Dingen,
dominik: Ja.
johannes: also eine Abfolge von Dingen,
johannes: die auch direkt da drin gespeichert werden.
johannes: Das bedeutet aber halt, dass die alle gleich sein müssen.
johannes: Und da fällt schon der erste Komfortteil weg.
johannes: Du musst vorher wissen, was du da rein tust.
jochen: Ja.
jochen: Okay.
jochen: The cash line.
johannes: Das braucht, glaube ich, auch eine eigene Episode,
johannes: aber das ist eine Eigenschaft von Prozessoren.
jochen: Ja.
johannes: Wir haben ja eben schon gesagt, wenn du irgendwie einen Pointer aufrufst,
dominik: Ja.
jochen: Ja.
johannes: dann ist das das Schlimmste, was du machen kannst,
johannes: weil der Hauptspeicher eines Computers wesentlich langsamer ist
jochen: Ja.
johannes: als der Prozessor eines Computers.
johannes: Das hat sich so entwickelt.
johannes: In den 80ern und 90ern war es noch nicht so,
johannes: da waren die irgendwie gleich schnell.
jochen: Ja.
johannes: Und dann sind die Prozessoren exponentiell schneller geworden
johannes: und der Speicher ist halt nur quadratisch schneller geworden.
johannes: Und dann waren die Prozessoren auf einmal eine Million Mal schneller
johannes: als der Speicher und deshalb ist das das Problem, in dem wir leben.
dominik: Ja.
johannes: Da kommen jetzt Worte, die hat sicherlich jeder schon mal gehört.
dominik: Ja.
jochen: Ja.
johannes: Jeder Prozessor hat irgendwie so einen L1-Cache.
johannes: Das ist der Hauptspeicher, der ganz nah am Prozessor ist.
johannes: Der ist noch fast genauso schnell wie der Prozessor selbst.
johannes: Und dann gibt es den L2-Cache, der ist auf dem gleichen Prozessor
johannes: da drauf, aber daneben und ist deshalb nicht mehr ganz so schnell.
jochen: Ja.
johannes: Also nur noch nur ein Zehntel so schnell wie der Prozessor.
johannes: Und dann gibt es den L3-Cache bei den neuen Prozessoren.
dominik: Ja.
johannes: Der ist vielleicht auf dem gleichen Chip,
dominik: Ja.
johannes: aber nicht mehr auf dem gleichen Dial und ist noch mal zehn Mal langsamer.
johannes: Und dann gibt es den Hauptspeicher und der ist noch mal tausend Mal langsamer.
johannes: Und das ist eben so ein Trick, weil man weiß,
johannes: es gibt was, das heißt Data Locality.
johannes: Wenn ich mit einem Datum, mit einem Datenpunkt gearbeitet habe,
jochen: Ja.
johannes: dann werde ich vielleicht mit Datenpunkten,
johannes: die in der Nähe gespeichert sind, arbeiten.
johannes: So funktionieren diese Caches.
johannes: Das heißt, die speichern eine kleine Speichermenge
dominik: Ja.
johannes: aus dem Hauptspeicher in den Prozessor rein.
johannes: Und wenn ich dann tatsächlich mit dem danebenliegenden Datenpunkt
johannes: arbeiten möchte, dann habe ich da den schnelleren Zugriff,
johannes: weil der schon gecached ist.
johannes: Und prinzipiell, wenn man alle Leistungen aus einem Prozessor
johannes: rausholen möchte, dann muss man dafür sorgen,
johannes: dass der Prozessor immer nur solche Sachen bearbeitet,
jochen: Ja.
johannes: die schon im Cache sind.
jochen: Ja.
dominik: Ja.
johannes: Da muss man, genau, da gibt es Techniken,
dominik: Ja.
johannes: wie du dafür sorgen kannst, dass bestimmte von diesen Cache Lines,
johannes: diese Caches sind in sogenannte Lines aufgeteilt.
johannes: Das heißt, da sind immer 16 Byte drin oder 64 Byte.
johannes: Also die werden natürlich größer, je weiter du nach draußen gehst.
jochen: Ja.
johannes: Ja, wenn du das versehentlich in den Cache lädst, ist auch schlecht.
johannes: Wenn du diese Cache Lines immer wieder überschreibst, ist schlecht,
dominik: Ja.
johannes: wenn du immer wieder die gleiche Cache Lines, aber da sind wir jetzt
dominik: Ja.
johannes: natürlich wesentlich näher am Prozessor, als wir mit Python je hinkommen.
johannes: Das Wichtige an der Stelle zu wissen ist,
jochen: Ja.
johannes: dass wenn wir im Hauptspeicher hin und her sprechen,
johannes: dann ist das Potenzial was sehr Langsames,
johannes: weil dieser Hauptspeicher erst in den Prozessor reingeholt werden muss,
johannes: damit er da verarbeitet werden kann.
johannes: Und das ist in Prozessorzeiten eine Ewigkeit.
dominik: Ja.
jochen: Ja.
johannes: Genau, wenn du es in Register reinlädst,
johannes: das ist quasi das, was im Prozessor ganz innen drin ist,
johannes: das Register-File, das ist das Schnellste.
johannes: Das ist in den Prozessor eingebaut.
johannes: Und danach werden die Hierarchien, wird es in der Hierarchie immer
johannes: um Faktor 10 oder 100 oder 1000 langsamer.
johannes: Wenn du es jetzt also schaffst, dafür zu sorgen,
johannes: dass deine Daten möglichst nah beieinander liegen,
johannes: dann bedeutet das, dass wenn du die sequentiell verarbeitest,
johannes: dass die dann schon näher am Prozessor dran sind
dominik: Ja.
johannes: und entsprechend schneller verarbeitet werden können,
dominik: Ja.
jochen: Ja.
johannes: als wenn du für jeden Eintrag einmal in den Hauptspeicher springen musst
johannes: und das komplett mal reinholen musst.
johannes: Und das ist ja üblicherweise die Situation, die du hast,
johannes: wenn du eine Python-Liste hast.
johannes: Das ist das, weshalb diese doppelte Indirektion so langsam ist,
johannes: weil du einmal zuerst die Liste der Referenzen abholen musst
johannes: und dann nochmal die Referenz selbst.
johannes: Und selbst wenn du da sequentiell durchgehst,
jochen: Ja.
johannes: können diese, sag ich mal, Second-Level-Referenzen,
jochen: Ja.
johannes: die können ja irgendwo liegen,
johannes: wo halt gerade der Speicher hin alloziert wurde.
dominik: Ja.
jochen: Ja.
dominik: Ja.
johannes: Bei einem Array ist das aber anders.
johannes: Bei einem Array liegen die Werte alle hintereinander direkt aneinandergereiht
johannes: im Speicher.
johannes: Das heißt, wenn du durch einen Array,
jochen: Ja.
johannes: durch einen Array.Array durchgehst, das sind,
johannes: man muss hier auch ein bisschen vorsichtig sein.
johannes: Dieses Wort Array hat ja in jeder Sprache eine andere Bedeutung
jochen: Ja.
johannes: als in jeder Programmiersprache.
johannes: Wir sprechen hier jetzt von Python-Arrays.
jochen: Ja.
johannes: Also in Python, das Modul Array.Array
dominik: Ja.
johannes: enthält so eine Implementierung von einem Container,
dominik: Ja.
johannes: der Daten des gleichen Typs im Speicher sequentiell gepackt speichern kann.
johannes: Also zum Beispiel Floats oder Integers oder andere Dinge,
johannes: die man da reintun möchte.
johannes: Und das hat den Vorteil, dass wenn ich da sequentiell durchgehe,
johannes: dass die dann prinzipiell mehr der Prozessorarchitektur entsprechen,
jochen: Ja.
johannes: dass ich nichts in Direktionslevel habe,
dominik: Ja.
johannes: dass ich die eventuell schon im Cache bereit liegen habe,
dominik: Ja.
johannes: wenn ich sie verarbeite.
johannes: Und so, wenn ich eben numerische Datenverarbeitung machen möchte,
johannes: kann das sein, dass das ein extremer Speedup ist.
jochen: Aber das gilt nur für numerische Daten?
johannes: Im Prinzip, es muss eine feste Größe haben.
jochen: Nö, aber was letztendlich da drin ist, weißt du ja nicht.
jochen: Also was heißt numerische Daten?
jochen: Also Zahlen oder sowas.
johannes: Ja, aber Strings in Python sind sowieso immutable.
jochen: Ja, aber also auch wenn wir jetzt da, gut, kommt halt drüber an was,
jochen: aber das kann ja auch was, irgendwas anderes bedeuten.
dominik: Ja.
jochen: Das kann ja Text sein oder, also.
dominik: Ja.
jochen: Okay, aber bei Text bedeutet das dann halt immutability?
jochen: Also weil die Repräsentation des Textes als Zahlen ja immer derselbe Text ist.
jochen: Sie sind auch genau, immutable, aber ich, also ich würde mal,
johannes: Ja.
jochen: zum Beispiel ich habe mal eine Array-Geschichte benutzt in Scikit-Learn bei dem Tokenizer,
dominik: Ja.
jochen: also bei dem TF-IdF-Factorizer und da waren das dann halt IDs von,
dominik: Ja.
jochen: also die Nummer von einem Token, das ist ja dann nur eine Nummer
jochen: und die kann man ja auch in Arrays packen und ja, das geht ja auch.
johannes: Ja, oder Booleans, Arrays von Booleans, kann ja auch sein.
jochen: Also die Frage ist, sind das jetzt numerische Daten?
jochen: Ich weiß nicht, also naja, was die Daten bedeuten.
johannes: Nicht so richtig.
jochen: Also klar, es muss natürlich irgendwie was Fixes sein, aber,
johannes: Ja.
dominik: Ja.
jochen: und ach so, das kann auch anders strukturiert sein.
jochen: Das ist jetzt, weiß ich gar nicht, ob das mit Array-Array geht,
jochen: ob das sehr viele kompliziertere Struktur haben kann,
johannes: das nächste Mal.
jochen: aber es gibt allgemein Memory Views und die sind halt dafür da,
jochen: dass du halt diese Daten irgendwie durch den Rumpf rumschieben kannst
jochen: und du kannst da halt einen anderen Header davor setzen,
jochen: zum Beispiel mit NumPy oder so und dann ist das plötzlich ein mehrdimensionales Array
johannes: Wobei Transposition noch drin ist ja auch sowas gefährliches.
jochen: oder halt irgendwie eine Matrix oder sowas oder du kannst halt,
dominik: Ja.
jochen: und Transformationen, wenn du jetzt sagst, okay, ich möchte das jetzt einmal kippen
jochen: oder irgendwie transposen oder was auch immer,
jochen: dann sind das Operationen, die nur den Header betreffen, aber nicht die Daten selber.
jochen: Die Daten bleiben halt so liegen, wie sie da so sind, halt im Hauptsprecher.
jochen: Ja, ja, gut, okay, also, ja, ja, das kann natürlich dann blöde Konsequenzen haben,
johannes: Wenn du den Speicher dann nicht auch transponierst,
johannes: dann hast du wieder schlechte Speicherzugriffs-Pattern.
dominik: Ja.
johannes: Ist auch gefährlich.
jochen: wenn man dann halt irgendwas Blödes damit macht, dann, ja.
johannes: Ja gut, ich kann mit jeder Programmiersprache schlechte Programme schreiben,
jochen: Ja, genau, ja.
johannes: das ist gar kein Problem.
johannes: Nee, ich meine, okay, aber da bist du jetzt schon einen Schritt weiter.
johannes: Also Array ist ja noch, da übernimmt Python noch so ein bisschen das Management für dich,
johannes: aber bei MemoryView ist ja hier eine Sequenz von Bytes,
johannes: die im Hauptspeicher liegen.
johannes: Mach damit, was du willst.
dominik: Ja.
johannes: Und da bist du wieder direkt einen Schritt weiter in Richtung Performance,
dominik: Ja.
jochen: Ja.
johannes: potenziell ja, also du kannst alle Werkzeuge wenden,
jochen: Ja.
johannes: um langsame Programme zu schreiben.
johannes: Bist du einen Schritt weiter in Richtung Performance
johannes: und einen Schritt weiter weg von Komfort,
johannes: weil du dich halt selber drum kümmern musst.
dominik: Ja.
johannes: Aber dafür kannst du prinzipiell so Tricks machen,
dominik: Ja.
johannes: dass du den Header veränderst oder dass du nur irgendwelche Sachen innen drin veränderst
johannes: oder dass du, keine Ahnung, je nachdem, was das Problem halt erfordert, machst.
jochen: Ja.
johannes: Ja, jetzt sind wir wirklich schon ganz tief drin hier in dem Abschluss des Kapitels,
jochen: Jetzt aber schon wieder ein bisschen, hey.
johannes: nämlich der Abschluss des Kapitels heißt "When a list is not the answer".
jochen: Ah, okay.
johannes: Ich meine, der Hauptteil des Kapitels beschäftigt sich ja schon mit Listen.
jochen: Oh, ja, ja, das ist cool, ja.
johannes: Ja, und da gibt es, also es sind wirklich schöne Sachen drin.
johannes: Wusstet ihr, dass man auf Slices assignen kann?
dominik: Ja.
johannes: Das ist ein Trick, den ich nicht so, also, den ich nicht kannte,
jochen: Ja.
johannes: den ich nicht wusste, dass das geht.
jochen: Was meinst du, jetzt heißt es das, hey?
johannes: Ich kann auf, ja, also wenn ich eine Liste habe,
jochen: Ja.
johannes: dann kann ich mir da ja einen Slice rausholen.
jochen: Ja.
johannes: Also wenn ich eine Liste mit zehn Elementen habe,
johannes: kann ich sagen, ich möchte Element drei bis vier.
johannes: Das ist dann diese Doppelpunktnotation
johannes: und dann kriege ich da eben so eine Subliste raus.
dominik: Ja.
johannes: Und diese Subliste ist aber nicht, die ist mutable
dominik: Ja.
johannes: und die bezieht sich auf die Elemente,
johannes: die in dieser ursprünglichen Liste drin waren.
jochen: Also, wie ein View auf diese Stelle.
johannes: Ja, so ein bisschen, aber noch mehr,
jochen: Ja.
johannes: weil, also wenn ich jetzt hier so einen Slice raushole aus dieser Liste,
dominik: Ja.
johannes: also nehmen wir mal, ich habe eine Liste, die,
dominik: Ja.
johannes: ja, das ist jetzt hier ein Beispiel drin, Seite 50,
johannes: falls jemand mitlesen möchte.
johannes: Da ist eine Liste, das ist eine Liste von Range von zehn.
jochen: Ja.
johannes: Also es sind Elemente 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 drin.
jochen: Ja.
johannes: Und da hole ich mir jetzt einen Slice raus,
johannes: Index zwei, Doppelpunkt fünf.
johannes: Das sind drei Elemente, die ich hier raushole,
johannes: zwei, drei und vier.
johannes: Und da mache ich jetzt eine Zuweisung auf diesen Slice.
jochen: Ja.
dominik: Ja.
jochen: Ja.
johannes: Ich sage, L Slice 2 bis 5 ist gleich,
dominik: Ja.
johannes: und hier in dem Beispiel ist es jetzt 20, 30,
johannes: also eine Liste mit nur zwei Elementen.
johannes: Dann habe ich aus dieser Liste was rausgeschnitten
johannes: und dann die Stelle, an der das vorher drin stand,
johannes: was anderes reingeschrieben.
jochen: Ja.
johannes: Und das wusste ich nicht, dass es geht.
jochen: Ja, Dell, ja, ja, ja.
johannes: Das wusste ich nicht, dass man da so Operationen drauf machen kann,
dominik: Ja.
johannes: dass man Slices quasi, also ganze Slices ersetzen kann.
johannes: Man kann auch einen Slice löschen.
johannes: Das nächste Beispiel ist Dell L von da,
johannes: und dann hast du in der Mitte was rausgelöscht.
johannes: Super interessant.
jochen: Also, tatsächlich, da wäre ich auch nie auf die Idee gekommen, dass du das so machen würdest.
johannes: Aber es wird noch schlimmer, Jochen, es wird noch schlimmer.
jochen: Ja.
johannes: Das nächste Beispiel ist ein Slice, der einen Step hat.
jochen: Oh, oh, oh, Gott, oh, Gott, oh, Gott, ja, okay, oh, he, he, he.
johannes: Und wenn du auf den zuweist,
dominik: Ja.
johannes: dann werden halt die Elemente ersetzt,
jochen: Aha.
johannes: die diesen Step abbilden.
johannes: Also kannst du jedes gerade Element kannst du ersetzen,
jochen: Alle drei Elemente sind das Standbein.
johannes: mit einer Zuweisung.
jochen: Ja.
johannes: Wusste ich nicht.
johannes: Das nächste Beispiel ist, das ist ein Slice, das eine Zulassung hat.
jochen: Okay, nee, das war mir jetzt auch nicht, dass das, da kann man auch, also, da, also, ja.
johannes: Das nächste Beispiel ist ein Slice, das eine Zulassung hat.
jochen: Ja.
dominik: Ja.
johannes: Okay. Das mache ich immer mit Index 0.
jochen: Ja, man, genau, man macht vorher R-Klammer auf, irgendwie das Element, gibt dem Namen R-Klammer wieder zu.
jochen: Ich habe das oft in Tests oder so, wenn ich weiß, also, da kann halt nicht mehr drin sein als dieses eine Ding, dann mache ich das halt so.
johannes: Ja, okay.
dominik: Ja.
jochen: Weil ich finde das irgendwie, ja, in der, man kann auch, das ist natürlich jetzt, aber das Problem ist, sag mal so, wenn das jetzt unerwarteterweise aber was anderes zurückgeben sollte, was nicht nur dieses eine Ding hat, sondern halt vielleicht fünf,
dominik: Ja.
dominik: Voll nützlich ist das.
dominik: Du kriegst eine Indexerror, aber ich kriege eine Valueerror.
jochen: dann fällt das bei dir halt nicht auf der, ja, genau.
johannes: Wenn es mehrere sind, dann kriegst du da, ich kriege keine Fehlermeldung.
jochen: Es kann halt sein, dass das weiter funktioniert, das ist halt, genau, du kriegst nur einen Fehler, wenn es den Null nicht gibt und den Null gibt es ja eigentlich immer, aber, ja.
johannes: Ne, ich kriege keinen Index Error.
dominik: Ja, nur wenn es die Null nicht gibt. Okay, ja.
johannes: Ich kriege nur ein, es geht.
johannes: Genau.
dominik: Ja, aber bei uns wäre es halt Valueerror, weil das Element irgendwie nicht,
jochen: Ja.
johannes: Ja, genau.
dominik: die Liste nicht das eine Element nimmt, sondern irgendwas anderes.
dominik: Ja.
johannes: Ein Unpacking Error, das ist doch schön, oder?
jochen: Ja.
dominik: Ja.
johannes: Ja, also dieses Kapitel, wie gesagt, das ganze Buch ist ja tatsächlich so,
jochen: Ja.
johannes: dass es sich nicht direkt an, sag ich mal, blutige Einsteiger richtet,
johannes: sondern es ist schon so, du hast die Basics drauf,
dominik: Ja.
johannes: hier sind so ein paar Kniffe jetzt, hier so geht es auch.
jochen: Ja.
johannes: Und das ist doch schön, dass man auch hier so Veteranen wie uns
dominik: Ja.
johannes: noch damit überraschen kann, mit Sachen, die in der,
jochen: Ja, ich finde, das ist auch, ja.
dominik: Ja.
johannes: mit Sachen aus dem puren Standard, ja, aus dem puren Python Standard.
jochen: Ja.
dominik: Ja.
johannes: Hier übrigens, Assigning to Slices, was?
dominik: Ja.
jochen: Ne, das, gut, vielleicht ist das auch der Grund, warum ich das Buch echt gerne lese, weil ich, man kann kaum irgendwie eine Seite oder zwei lesen, ohne dass man sich denkt, ach, echt interessant, das wusste ich jetzt gar nicht.
jochen: Und, ja, das ist halt, das macht es irgendwie.
dominik: Ja.
johannes: Ja, dann guckt er sich den Bytecode an und sagt, ja.
dominik: Ja.
jochen: Auch, was ich auch gut, das ist jetzt noch mal ganz am Anfang von dem Kapitel, was ich auch super fand, ist, dass er halt, das ist auch so etwas, wo ich denke, ja, das ist so, aber ich traue mich manchmal nicht so richtig, das laut zu sagen, weil irgendwie, irgendwie der, die Prophezeiung irgendwie vorsieht, dass irgendwie Vorschleifen lesbarer sind als List-Comprehensions, aber ich denke gerade bei einfachen Fällen sind List-Comprehensions tatsächlich besser lesbar.
dominik: Ja.
johannes: Ja.
dominik: Ja.
jochen: Und hier hat er halt ein schönes Beispiel, wo er halt quasi den, ja, den Zahlenwert von einem ASCII-Zeichen aus einem String halt rausnimmt.
johannes: Ja.
dominik: Ja.
jochen: Und wenn du das halt in einer Vorschleife machst, also einmal sind halt doppelt so viele Zeilen und dann ist es halt so, dass irgendwie der entscheidende Aufruf, der dir sagt, was passiert, der ist halt irgendwie relativ weit irgendwie reingenestet und der fällt dir stichartig nicht sofort ins Auge, während die List-Comprehension, da siehst du halt sofort, was passiert.
dominik: Ja.
dominik: Ja, also ich bin auch ein großer Fan von schönen Comprehensions.
jochen: Und, ja, ich meine, klar, man kann damit natürlich böse Sachen machen, ja, aber so.
dominik: Wir hatten schon mal eine Unterhaltung, Jochen, wenn du dich erinnerst,
johannes: Ja, finde ich auch.
johannes: Wenn man die einmal drauf hat.
jochen: [Unverständlich]
dominik: wo du der anderen Meinung warst, aber es kommt halt drauf an.
jochen: Ja, es kommt drauf an, genau, es ist halt nicht so.
dominik: Es ist aber doch wirklich so, also ich finde, also Comprehensions sind
jochen: [Unverständlich]
johannes: Oh, sind wir hier unter die Juristen gegangen, es kommt drauf an.
jochen: Ja, damit kann man natürlich auch irgendwie.
johannes: Wir wollen definitive Antworten, kein Gesch…
jochen: Also Comprehensions sind schön, heiß von Nick, in vielen Fällen sind sie einfach das Syntax, sogar schönere als in einem Vorschleifen zu machen, es sei denn, man möchte bestimmte Regeln tun, wo dann vorhin explizit eingebracht ist.
dominik: schön Pythonic, in vielen Fällen sind sie einfach das Syntax sogar
johannes: Ja, finde ich auch.
dominik: besser als eine Vorsteifel zu machen, es sei denn, man möchte bestimmte
dominik: Dinge tun, wo dann Vorloop explizit angebracht ist.
dominik: Das einzige, was mir ein bisschen komisch ist,
jochen: Das einzige, was mir ein bisschen komisch ist, ja, also manchmal ist es so ein bisschen so, manchmal, gerade dann, wenn man gucken will, wie langsam irgendwas werden kann, wenn man, ich weiß nicht, ein Nest hat oder sowas, dann könnte es sein, dass das so ein bisschen Sachen versteckt, weil dann nicht explizit 5 mal vorsteht und man 5 mal vorzählt oder die Neste levelt und dann könnte irgendwas kaputt sein.
johannes: Und nicht nur, nicht nur List Comprehensions,
dominik: ja, ja, aber auch da, also manchmal ist es so ein bisschen so,
johannes: auch Dict Comprehensions und Set Comprehensions,
johannes: sind alle großartig.
dominik: manchmal, gerade dann, wenn man gucken will, wie langsam irgendwas werden
dominik: kann, wenn man solche Sachen nestet hat oder sowas, dann könnte es sein,
dominik: dass das so ein bisschen Sachen versteckt, weil er nicht explizit fünfmal
dominik: vorzählt oder die nestet Levels und dann sieht man, da könnte irgendwas
dominik: kaputt sein oder so.
jochen: Ja.
johannes: Ja, wobei, ich versuche ja, so Nested Comprehensions versuche ich eigentlich
dominik: Ja, wobei, hier auch ein schönes Beispiel für ein Ding, wo man das
johannes: zu vermeiden, die mache ich dann lieber untereinander, wenn es geht.
johannes: Kommt nur drauf an, aber…
jochen: Ja, wobei, er hat hier auch ein schönes Beispiel für ein Ding, wo man das nesten will und wo es Sinn macht, das so hinzuschreiben, weil bei der List-Comprehension hast du ja immer, also naja, das ist Fluch und Segen zugleich, es baut dir halt eine Liste zusammen.
dominik: nesten will und wo es Sinn macht, das so hinzuschreiben, weil bei der
dominik: List-Comprehension hast du ja immer, naja, das ist Fluch und Segen zugleich,
dominik: aber es baut ja eine Liste zusammen und der Nachteil bei einer Liste ist,
jochen: Und der Nachteil bei einer List ist, sie muss halt irgendwie da sein, sie muss halt irgendwie materialisiert sein.
johannes: Ja.
dominik: dass sie irgendwie da sein muss, sie muss halt irgendwie materialisiert
dominik: sein und jetzt hat er hier zum Beispiel diese, was heißt das?
jochen: Und jetzt hat er hier zum Beispiel diese, was ist eigentlich immer das, hm?
dominik: Ne, das ist auch so ein Quirk, also normalerweise haben die ihren eigenen
jochen: Den Trick, den du gerade überprobst, den fand ich auch sehr, sehr schön, wo er innerhalb von der List-Comprehension noch eine Assignment-Expression baut, der tatsächlich genau dem letzten Element, sprich, wenn du da irgendwas verrichtest.
jochen: Ja, das ist auch so ein Quirk, also normalerweise haben die ihren eigenen Scope, das heißt, wenn du halt da irgendwie so einen lokalen Namen für irgendwas hast, dann, nee, da passiert einem normalerweise gar nichts.
johannes: Da gab es doch auch einen Bug, oder, in einer Python-Version?
dominik: Scope, das heißt, wenn du halt da irgendwie so einen lokalen Namen für
dominik: irgendwas hast, ne, dann passiert einem normalerweise gar nichts, ja, das ist
dominik: nicht, ich weiß, es ist nicht die Frage, ob es ein Wackel ist, sondern
jochen: Ja, das ist nicht, ich weiß, es ist nicht die Frage, ob das ein Bug ist oder nicht, aber, also sag mal so, normalerweise ist alles so, wie man das erwarten würde, aber wenn man jetzt nicht irgendwie gleich sagt oder nicht einfach nur die Variablen verwendet, sondern man sagt halt Doppelpunktgleich irgendwas,
dominik: ein Fieter, also sagen wir mal so, normalerweise ist alles so, wie man
johannes: Surprise Feature.
dominik: das erwarten würde, aber wenn man jetzt nicht irgendwie gleich sagt oder
dominik: nicht einfach nur die Variablen verwendet, sondern man sagt halt
dominik: doppelt gleich irgendwas, dann ist man aus dem Scope raus und dann ist man
jochen: dann ist man aus dem Scope raus und dann ist man in dem Scope von dem Ding drumrum und dann passieren unerwartete Sachen, weil dann überschreibt das halt eventuell Sachen, die halt im Scope außenrum sind und, ja, öh.
johannes: Walross.
dominik: in dem Scope von dem Ding drumherum und dann passieren unerwartete Sachen,
dominik: weil dann überschreitet es halt eventuelle Sachen, die halt im Scope
dominik: außen rum sind und ja.
dominik: Ne, aber vielleicht will man das ja machen und also das, ja, aber das
jochen: Ja, aber vielleicht will man das ja machen.
johannes: Vielleicht.
jochen: Ja, vielleicht will man das aber, das ist halt irgendwie.
dominik: Beispiel da ist zum Beispiel super, weil halt die, nein, aber das Letzte,
jochen: Ja, aber das Beispiel da ist zum Beispiel super, weil halt die, nein, aber das letzte, was da steht, das ist halt zum Beispiel ein total tolles Beispiel, weil du hast irgendwie so das von Fashion bis zu diesem, weil die letzte Addition, die letzte Auffassung, und dann kannst du halt einfach von Simon expression und dann hast du den einfach direkt und kannst den Scope schreiben oder so.
johannes: Der Dominik schreibt keinen Python, sondern Obfuscated Python.
dominik: was da steht, das ist halt zum Beispiel ein total tolles Beispiel, weil
dominik: du hast doch irgendwie so eine Nes Conferential und willst wissen, war
dominik: es eine der Traditionen davon, war der letzte Aufbau der Funktion und
dominik: dann kannst du halt einfach dann Assignment Expression und dann hast
dominik: du den einfach direkt und kannst den ins Log schreiben oder so oder was
jochen: Ja, okay, das ist, ja, ja, genau, genau. Ja, klar, das kannst du natürlich schon so machen, aber du hast dann hoffentlich keine Variable im Code vorher verwendet, die irgendwie Last heißt, ansonsten hast du ja den Fuß geschossen.
johannes: Assignment Expression ist Walross-Operator, oder?
dominik: du auch immer damit machen willst.
dominik: Ja, okay, das ist, ja klar, das kannst du natürlich schon so machen,
dominik: also du hast dann hoffentlich keine Variablen im Code vorher verwendet,
dominik: ja, hoffentlich nicht, nein, das ist, ja, das sollte man da tatsächlich
dominik: eh nicht tun, oder? Also, dass man davon ausgeht, dass dann irgendeine
jochen: Ja, das sollte man ja tatsächlich eben nicht tun, ne? Also, dass man rausgeht, dass dann in der Variable in der Distance of Action gesagt wird, wir vergessen den, ja.
dominik: Variable in der List Comprehension, die Sachen alle wieder vergessen werden,
dominik: ja, naja. Ja, aber gut, aber das steht halt auch dann gleich drin,
jochen: Ja, normalerweise ist das so, aber ja, ja, dann erstelle ich.
dominik: das ist vielleicht, ja.
jochen: Ja, ja, ja, aber es ist.
johannes: Da geht es aber auch relativ lange drum in dem Kapitel,
dominik: Also, ja, genau, ich mag auch dann so Bedingungen, die kann man auch
jochen: [Stille]
johannes: dass man da hier diese Reihenfolge, dass das manchmal überraschend ist
johannes: und manchmal andere Dinge erzeugt.
dominik: untereinander schreiben, wie fest ist das, aber ja, schönes, schönes
dominik: Peißen, würde ich sagen.
jochen: Genau, ich wollte nochmal kurz zurück zu dem, also wo braucht man eventuell so eine Nested, also ein Doppelt-For-Loop-Geschichte und wo kann es Sinn machen, da eben das halt so hinzuschreiben und nicht eine For-Loop?
dominik: Wenn die Dimensionalität der Daten das übersteigt, was man in einer einzigen
jochen: [Stille]
johannes: Ja.
dominik: Spalte darstellen kann, also wenn man Relations hat.
dominik: Ja, oder er nimmt dir als Beispiel ein kathesisches Produkt von irgendwie
jochen: Ja, oder er nimmt hier als Beispiel ein kathesisches Produkt von irgendwie zwei Iterables oder Sequences vielleicht und wenn du das halt in der Vorschleife machen willst, dann brauchst du ja was, über das du iterieren kannst und dann musst du das halt in eine Liste packen.
dominik: zwei Iterables oder Sequences vielleicht, und wenn du das halt in der
dominik: Vorschleife machen willst, dann brauchst du ja was, was du iterieren kannst,
dominik: und dann musst du das halt in eine Liste packen, und wenn das halt
dominik: fünf Zeilen, fünf Spalten sind, dann ist das halt wenig, aber wenn du jetzt
jochen: Und wenn das halt fünf Zeilen und fünf Spalten sind, dann ist das halt wenig, aber wenn du jetzt tausend Zeilen und tausend Spalten hast, dann ist das plötzlich wahnsinnig viel und dann willst du das halt nicht irgendwo hinspeichern.
dominik: tausend Zeilen und tausend Spalten hast, dann ist das plötzlich wahnsinnig
dominik: viel, und dann willst du das halt nicht irgendwo hinspeichern, also
johannes: Ja.
dominik: gerade wenn du dich eigentlich für diese, du hast ja tausend von der Sorte
jochen: Also gerade wenn du dich eigentlich nur diese, du hast jetzt tausend von der Sorte und tausend von der Sorte, das ist das, was dich eigentlich interessiert, das musst du auch irgendwo speichern, aber das kathesische Produkt davon eigentlich nicht.
dominik: und tausend von der Sorte, das ist das, was dich eigentlich interessiert,
dominik: das musst du auch irgendwo speichern, aber das kathesische Produkt davon
dominik: eigentlich nicht, dann geht das mit einer Vorschleife eigentlich gar nicht
jochen: Dann geht das mit einer Vorschleife eigentlich gar nicht so gut, wenn du nicht dieses Produkt materialisiert irgendwie rumliegen haben willst.
dominik: so gut, wenn du nicht dieses Produkt materialisiert irgendwo umliegen
dominik: haben willst, und was man dann macht, ist eine Generator Expression,
jochen: Und was er dann macht, ist eine Generator-Expression, die halt so eine doppelte Vorschleife drin hat.
dominik: die halt so eine doppelte Vorschleife drin hat, und das ist natürlich cool,
jochen: Und das ist natürlich cool, weil die erzeugt nämlich, das verbraucht gar keinen Hauptspeicher, sondern das generiert ja einfach nur das kathesische Produkt.
dominik: weil die erzeugt nämlich, das braucht ja keinen Hauptspeicher, sondern
johannes: Ja.
dominik: das generiert ja einfach, weil du einen Generator halt hast, und den kannst
jochen: Genau, genau. Und den kannst du ja als Generator-Expression schreiben und dann...
dominik: du ja als Generator Expression schreiben, und dann, ja, das ist,
jochen: Ja, nee, es ist halt genau das Gleiche, es ist halt bloß eine runde Klammer, genau.
johannes: Was ist denn der Unterschied, Jochen?
johannes: Wie schreibt man denn eine Generator Expression im Vergleich zu einer List Comprehension?
johannes: Das muss doch was ganz anderes sein, oder?
dominik: runde Klammern.
jochen: Ja.
johannes: Das ist auch eine Falle, in die man leicht tappen kann,
jochen: Ja.
johannes: dass man runde Klammer macht und das sieht erst mal so aus
johannes: und das funktioniert auch in vielen Fällen so ähnlich.
dominik: Ja, genau, das ist, ja, das ist ein überraschender Anlass, also ich meine,
johannes: Nur wenn man es dann nochmal verwenden möchte, ist es leider weg.
jochen: Genau, das ist ein überraschender Anlass. Also ich meine meistens ist wahrscheinlich List-Completion auch tatsächlich das, was man haben möchte, aber ja, es gibt Situationen...
dominik: meistens ist wahrscheinlich die List-Computer auch tatsächlich das,
dominik: was man haben möchte, aber ja.
johannes: Ja. Es kommt darauf an, Jochen, wie du sagst.
dominik: Genau, also ich würde gerne noch da ein paar Fragen zu stellen und so ein
jochen: Ich wollte nur noch ein paar Fragen zu stellen und so ein bisschen wissen, wann man welche Dinge in der Lösung würde sagen für Generator-Expression, im Vergleich zu List-Completion, wann ich ein List nehme, wann nehme ich ein Array, wann nehme ich ein Connection-CQ,
dominik: bisschen wissen, wann man welche Dinge denn benutzt, und ich würde sagen,
dominik: Generator Expression im Vergleich zu List-Comprehension, wann ich eine
dominik: Liste nehme, wann nehme ich ein Array, wann nehme ich ein Collections-DQ,
dominik: diese ganzen Dinge so ein bisschen auseinanderzuhalten mit ihren
jochen: diese ganzen Dinge so ein bisschen auseinander zu halten, die ein Trade-Offs wären vielleicht, nicht ganz uninteressant in dieser Folge.
dominik: Trade-Offs wäre vielleicht nicht ganz uninteressant in dieser Folge heute.
dominik: Ja, okay, also, weil, da ist, ja.
jochen: Oh, ja, okay, also...
johannes: Ja, weiß nicht, Dominik. Das sind viele tiefgehende Fragen, die du da gestellt hast.
jochen: Ja.
dominik: Ja.
johannes: Also die eine Frage kann man leicht beantworten.
jochen: Okay, und kostet einfach viel Speicher.
dominik: Okay, und kostet aber viel Speicher, so Trade-Off.
johannes: Du brauchst eine List Comprehension, wenn du die Daten materialisiert brauchst,
johannes: also wenn du darauf zugreifen willst und mehrmals darauf zugreifen willst
johannes: und auch Out-of-Sequence und Indexzugriff kostet halt Speicher.
dominik: Ja.
jochen: Ja.
johannes: Du brauchst eine Generator Expression, wenn du sie nur einmal brauchst
jochen: Wenn es vielleicht zu viel ist, um es im Hauptspeicher zu halten.
johannes: und nur in Reihenfolge und nicht nochmal darauf zugreifen.
dominik: Ja, vielleicht zu viel ist, um es im Hauptspeicher zu halten.
dominik: Ja.
jochen: Ja.
johannes: Und genau, wenn es zu viel ist, um es zu speichern.
jochen: Ja, zum Beispiel mache ich so etwas wie das spätesische Produkt, dadurch die Kombination von einem Faktor und zwei Vektoren miteinander.
johannes: Das ist leicht.
dominik: Und dann zum Beispiel mache ich so etwas wie das kritisische Produkt,
dominik: dass ich die Kombination von allen Faktoren von zwei Vektoren miteinander
jochen: Ja.
johannes: Genau. Also wenn es quasi eine Prozedur ist, die du da machst.
dominik: in Beziehung setzen kann.
dominik: Ja.
johannes: Ja, das ist relativ leicht zu verwenden.
jochen: Ja, das kann man so allgemein...
dominik: Ja, das kann man so irgendwann,
johannes: Aber jetzt die Frage, wo benutzt du List versus Array versus Memoryview?
johannes: Ja, da müssen wir länger drüber sprechen.
johannes: Und wenn du dann noch andere Sachen reintust wie ein Deck oder eine Deck Queue
dominik: oder Deck, oder so, ja, also, ich meine, die Q, also der Vordergrund
jochen: Oder DEC, oder so, ja, also ich meine, die Q, also der Vorteil bei diesen Datenstrukturen ist halt...
johannes: oder eine Queue oder wie auch immer du sie nennen möchtest.
dominik: bei diesen Datenstrukturen ist halt.
dominik: Deck-Q, Deck-Q-Q-Tick.
johannes: Wie spricht man denn Deck aus?
jochen: DEC, ich habe es immer DEC genannt, aber ich weiß nicht genau, ob es richtig ist.
dominik: Deck.
dominik: Schwierig.
johannes: Ich nenne es auch immer Deck, aber keine Ahnung.
jochen: Hm.
dominik: DQ.
johannes: Warte mal hier. Hier gibt es Aussprache. Warte mal.
dominik: Bitte lesen Sie diesen Begriff vor.
jochen: Ja, huh, okay.
johannes: Der Deck, sagt Leo. Ich benutze immer Leo für sowas.
dominik: Ja.
dominik: Okay.
dominik: Ja.
jochen: Okay.
johannes: Dick.leo.org, wichtigstes Werkzeug.
jochen: Aha.
dominik: Deck.
johannes: Der sagt Deck in schönem, feinen britischen Englisch.
dominik: Aha.
dominik: Ja, also, so etwas hat man halt vor allen Dingen dann,
jochen: Ja, also so etwas hat man halt vor allen Dingen dann, wenn du möchtest, dass die Sortiereihenfolge halt irgendwie gleich bleibt.
dominik: wenn du möchtest, dass die Sortiereihenfolge halt irgendwie
dominik: bleibt bleibt.
johannes: Ne, halt. Warte mal. Erstmal musst du erklären, was ein Deck ist.
jochen: Oh Gott.
dominik: Oh, mein Gott.
johannes: Eine Deck.
dominik: Ja, also, ich weiß jetzt auch gar nicht, wie die,
jochen: Ja, also, ich weiß jetzt auch gar nicht, wie die...
johannes: Das ist eine Abkürzung.
dominik: so, Double-Ended-Q, ja.
jochen: So, Double-Ended-Q, ja.
johannes: Double-ended Queue.
dominik: Ich weiß jetzt auch gar nicht, wie genau die
jochen: Ich weiß jetzt auch gar nicht, wie genau die Implementation in Python da aussieht.
dominik: Implementation in Python da aussieht.
jochen: Spielt keine Rolle.
johannes: Ach, spielt keine Rolle.
dominik: Ja.
jochen: Ja, also, der Witz an dem Ding ist halt, dass du sozusagen Sachen rausnehmen kannst, reinnehmen kannst, und trotzdem ist es halt immer sortiert und du kannst halt...
dominik: Ja, also, der Witz an dem Ding ist halt,
johannes: Was ist eine Deck?
dominik: ist halt, dass du sozusagen Sachen ausnehmen kannst,
dominik: reinnehmen kannst, und trotzdem ist es halt immer sortiert.
dominik: Also, weil du einen Follower und einen Precessor hast.
jochen: Ja.
dominik: Ja.
johannes: Also eine Queue ist eine Warteschlange.
jochen: Ja.
johannes: Und eine Double-ended Queue heißt, du kannst auf der einen Seite was reinschieben
jochen: Ja.
johannes: und auf der anderen Seite kannst du was rausnehmen.
dominik: Ja.
johannes: Und die bleiben in der Reihenfolge.
dominik: Also, das heißt, ich habe beide Enden, also einen
jochen: Ja, ja, ja, genau.
johannes: Das ist doch das, was eine Deck ist, oder Jochen?
dominik: Vorgänger und einen Folker.
dominik: Ja.
jochen: Ja.
johannes: Genau. Und da gibt es so ein Pattern, das Producer-Consumer-Pattern,
dominik: Beiden.
johannes: wo du sagst, du hast halt eine Prozedur, die erzeugt Datenpunkte
johannes: und du hast eine Prozedur, die verbraucht Datenpunkte
jochen: Ja.
johannes: und dann ist die Deck genau das, was da dazwischen ist.
jochen: Ja.
johannes: Also der eine tut sie eben auf der einen Seite in das Deck rein
dominik: Ja.
johannes: oder in die Deck und der andere, der sie verbraucht,
jochen: Ja.
dominik: Ja.
johannes: der nimmt sie auf der anderen Seite raus.
johannes: Und das kannst du prinzipiell mit einer Liste machen.
dominik: Ja.
jochen: Ja.
johannes: Du kannst eine Python-List als Deck verwenden,
jochen: Ja.
johannes: indem du halt .append machst, das ist das Einfügen,
johannes: und indem du halt .pop0 machst.
johannes: Das Problem da drin ist, dass pop0 teuer ist,
johannes: weil das bedeutet, das erste Element der Liste wird entfernt.
dominik: Ja.
jochen: Ja.
johannes: Das heißt, alle Elemente, die in der Liste drin sind,
dominik: Ja.
jochen: Ja.
johannes: müssen um eins verschoben werden.
johannes: Und das hört man jetzt schon, ja,
johannes: wenn du das erste Element rausnehmen willst,
johannes: musst du sie alle einmal anfassen.
johannes: Und das ist natürlich für eine Operation,
johannes: die sich so anhört wie, ja, das erste wegnehmen, einfach teuer.
dominik: Ja, sollte es geben, eigentlich.
jochen: Ja, sollte ja jetzt gehen eigentlich.
johannes: Genau. Und deshalb gibt es diese Spezialimplementierung,
jochen: Ja, unerwarteteuer, ja.
dominik: Ja, unerwartet, unerwartet teuer, ja.
jochen: Ja.
johannes: der Deck, der Double-Ended-Queue,
dominik: Ja.
jochen: Ja.
johannes: wo das beides nicht viel kostet.
dominik: Ja.
johannes: Das Einfügen am Ende kostet nicht viel
johannes: und das vorne wegnehmen kostet nicht viel.
johannes: Dafür gibt es halt andere Operationen, die dann viel kosten.
johannes: Dafür kannst du in der Mitte, wenn du in der Mitte was einfügen willst,
johannes: entweder geht es gar nicht oder es ist extrem langsam
johannes: oder irgendwie solche Eigenschaften hast du dann da halt verloren.
johannes: Die Sache an diesen Datenstrukturen ist halt,
dominik: Ja.
jochen: Ja.
johannes: du kannst erst mal eine Liste verwenden
dominik: Ja, also, wann merke ich denn überhaupt,
jochen: Ja, also, wann merke ich denn überhaupt, dass die Liste nicht gut genug ist?
johannes: und wenn das zu langsam wird oder wenn das Eigenschaften hat,
johannes: wenn die Python-Liste Eigenschaften hat, die nicht gut genug sind,
johannes: dann musst du dir was anderes suchen.
johannes: Und das ist eigentlich dann die Antwort auf deine Frage, Dominik,
johannes: die aber nur so im Allgemeinen.
dominik: dass die Liste nicht gut genug ist? Also, weil es zu langsam
jochen: Also, weil es zu langsam wird, weil es "Ohm" gibt, oder...
dominik: wird, weil es "Om" gibt, oder?
johannes: Dann merkst du, dass dein Programm zu langsam ist.
johannes: Wenn dein Programm zu langsam ist und nicht mehr in den Speicher passt.
dominik: Ja, okay, also genau die Punkte, ja.
jochen: Ja, ok, also genau, die Punkte, ja.
johannes: Wenn dein Swap-Laufwerk anfängt zu arbeiten.
dominik: Ja, oder die Anwendung "crash" weil "Om"
jochen: Ja, oder die Anwendung Crashball "Ohm" gibt.
johannes: Ja, genau.
dominik: klingt.
jochen: Oh ja, Klassiker, ja.
dominik: Ja.
johannes: Ja, oder wenn es halt zu langsam ist.
dominik: Oh ja, passiert, ja.
johannes: Also es gibt Fälle, ich habe mit Leuten Sachen optimiert,
johannes: die halt eine Liste wie ein Set verwendet haben
johannes: und dann halt geguckt haben, ist dieses Objekt in dieser Liste drin,
johannes: kannst du machen, die Operation gibt es, die heißt in
jochen: Ja.
johannes: und ist aber linear, ist O(n), das heißt, du musst gucken,
dominik: Ja.
johannes: ist das erste Objekt mein gesuchtes Objekt oder das zweite
jochen: Ja.
johannes: oder das dritte oder das vierte, das heißt, jede dieser Abfragen
dominik: Ja.
johannes: muss einmal alle, potenziell alle Elemente anfassen.
jochen: Ja.
johannes: Und da gibt es eine Datenstruktur, das Set, da ist es halt O(1),
dominik: Ja.
johannes: da kostet es immer gleich viel, egal wie groß es ist,
johannes: egal was du suchst, egal ob es drin ist oder nicht,
dominik: Ja.
johannes: kostet immer amortisiert gleich viel.
johannes: Und wenn du so einen Algorithmus hast,
dominik: Ja.
johannes: der viele von diesen Operationen macht,
johannes: dann hast du da eine Möglichkeit, den deutlich schneller zu machen
jochen: Ja.
johannes: und zwar richtig um Klassen schneller.
johannes: Also wenn du von O(n²) in dem spezifischen Fall genau,
dominik: Ja.
jochen: Ne, äh, ja.
johannes: hat es ausgereicht, aus einer Liste ein Set zu machen
jochen: Ja.
johannes: und das hat schon, wenn du von O(n²) auf O(n) runtergehst,
johannes: das macht Problemklassen bearbeitbar,
johannes: die vorher nicht bearbeitbar waren.
dominik: Ja.
johannes: Vorher konnte man irgendwie 15 Elemente da drin haben
dominik: Ja.
jochen: Ja.
johannes: und hinterher konntest du 15.000 Elemente drin haben.
johannes: Also das ist einfach ein massiver Unterschied in der Performance.
johannes: Aber vorher zu sagen, was du brauchst
johannes: und an welchen Stellen das Richtige ist, fällt mir sehr schwer.
johannes: Ist immer eine Abwägungssache.
jochen: Ok, das heißt, man muss immer tatsächlich bei dem Problem gucken, was das ist.
dominik: Okay.
dominik: Ich muss immer tatsächlich bei dem Problem gucken,
dominik: was das ist.
johannes: Genau.
johannes: Du musst bei den Problemen diese Abwägung machen
dominik: Komfortcheck, ja.
jochen: Ja.
johannes: zwischen Komfort und Geschwindigkeit.
jochen: Ja.
johannes: Und im ersten Schritt, das ist ja auch das,
johannes: was wir vorhin angesprochen haben,
johannes: wir machen ja in erster Linie erstmal so einen Rapid Prototype,
johannes: einfach um zu sehen, ob es überhaupt geht.
johannes: Und da wähle ich immer,
dominik: Ja.
johannes: wählst du immer die komfortabelste Lösung, die erste Lösung,
jochen: Ja.
johannes: weil erst musst du wissen, ob du es korrekt hinkriegst
dominik: Ja.
johannes: und dann kannst du gucken, ob du es schnell hinkriegst.
johannes: Ich kann sehr, sehr, sehr schnelle Programme schreiben,
johannes: die nicht die richtige Antwort liefern.
johannes: Das ist überhaupt gar kein Problem.
jochen: Ja.
johannes: Ja.
dominik: Ja.
johannes: Ja.
johannes: Und das ist richtig.
jochen: Ja, das sollte ich jetzt noch optimieren, damit er sagt, ha, siehste, das geht so nicht.
dominik: Ja.
johannes: Aber, das ist richtig, aber Schritt Null im Knuth Optimization Process
dominik: Ja.
jochen: Ja.
johannes: ist die Wahl des richtigen Algorithmus.
johannes: Das heißt, gucken, ob du den Algorithmus gewählt hast,
johannes: der die richtigen Eigenschaften hat.
jochen: Ja, ja, klar.
johannes: Und das ist natürlich was,
jochen: Ja.
johannes: auch das ist schwierig jetzt so konkret zu beantworten.
jochen: Das ist gerade Knusoptimation-Prozess gesagt.
johannes: Das ist halt was, was mit Erfahrung kommt,
johannes: dass du weißt, welche Algorithmen gibt es
johannes: und welche Sorten Algorithmen gibt es und wie schnell sind die.
johannes: Und ja, das ist so die witzige Umdrehung dieses Knuth-Zitats.
dominik: Ja.
jochen: So, Pre-Mage-Optimation, so, ja.
johannes: Sage ich gleich, das ist das, genau,
johannes: das ist das, was mit der Erfahrung kommt,
johannes: dass du weißt, welche Algorithmen gibt es,
jochen: Ok.
johannes: welche Alternativen gibt es, welche Datenstrukturen gibt es,
jochen: Ja.
johannes: was ist wo angebracht.
johannes: Wenn du jetzt irgendwie was anpassen musst
johannes: oder wenn du jetzt irgendwas hast,
johannes: was nicht auf ein Standardproblem passt,
johannes: dass du es dir trotzdem aus den Bauteilen zusammensuchen kannst.
johannes: Und der erste Schritt in diesem Prozess
dominik: Ja.
johannes: ist, den richtigen Algorithmus auszuwählen.
dominik: Ja.
johannes: Und das alles andere ist untergeordnet.
johannes: Wenn du den falschen Algorithmus auswählst,
johannes: hast du schon verloren.
johannes: Genau, das bezieht sich auf dieses Zitat von Knuth,
johannes: "Premature Optimization is the root of all evil."
johannes: Wobei, wobei, weißte nicht,
jochen: Weiß er nicht.
johannes: wobei man auch dazu sagen muss,
jochen: Mhm.
johannes: Knuth sagt ja im nächsten Satz,
johannes: 10% Geschwindigkeitszuwachs lohnt sich schon zu optimieren.
dominik: Ja.
johannes: Und da sind wir natürlich auch hier auf der Python-Ebene schon,
dominik: Ja.
jochen: Ja, ja, so, äh.
johannes: haben wir schon verloren,
johannes: weil wir akzeptieren, dass unsere Programme langsamer sind
johannes: als das 10% Optimale.
johannes: Auch da gibt es natürlich Ebenen.
jochen: Ja.
johannes: Knuth kommt ja aus einer ganz anderen Welt,
johannes: wo die Prozessoren noch in Kilohertz gemessen wurden
johannes: und nicht in Gigahertz.
johannes: Und auch die, sage ich mal,
johannes: die algorithmischen Probleme anders waren.
dominik: Ja.
johannes: Du kannst bei einem Sortieralgorithmus beweisen,
dominik: Ja.
johannes: was das Maximum ist, und du kannst beweisen,
johannes: dass dein Algorithmus das Maximum
johannes: für eine gewisse Datenklasse erreicht.
johannes: Würde ich sagen, ist bei den meisten Sachen,
johannes: die wir so bearbeiten heutzutage,
johannes: hier CV-Erstellung für den Jochen,
johannes: kannst du nicht beweisen,
johannes: dass du den optimalen Algorithmus ausgewählt hast.
jochen: Ja.
johannes: Du weißt, dass du einen Algorithmus ausgewählt hast,
jochen: Ja.
johannes: der passend ist für das Problem,
johannes: wenn es deinen Anforderungen entspricht,
johannes: wenn du dein Problem lösen kannst in einer Zeit,
dominik: Ja.
johannes: die akzeptabel ist.
dominik: Ja.
johannes: Und das ist jetzt natürlich wieder so eine Stelle,
johannes: wo der interne Casey sagt, ja, aber Moment mal,
johannes: ich will einfach, dass das hier viel schneller wird,
johannes: und ich habe ausgerechnet,
johannes: der Prozessor kann so und so viele Operationen pro Sekunde machen,
jochen: Ja, und da hat er das so lang, ja.
johannes: also reicht es aus, um das 30 Mal pro Sekunde zu machen,
jochen: Ja.
johannes: also kannst du es in Realtime machen,
johannes: und dann mach es auch bitte in Realtime.
jochen: Ja.
johannes: Und mein interner Nicht-Casey, der sagt dann halt,
jochen: Ja.
johannes: ja, aber einmal pro Sekunde reicht ja auch,
dominik: Ja.
johannes: oder einmal pro fünf Sekunden reicht auch.
dominik: Ja.
johannes: So schnell muss man das gar nicht aktualisieren.
johannes: Und das ist eine Frage der Anforderungen,
johannes: welche Anforderungen du hast,
jochen: Ja.
johannes: und welche Vorstellungen du hast,
jochen: Ja.
johannes: und wie schnell du es haben willst.
johannes: Und da pauschal zu sagen,
johannes: was ist der richtige Algorithmus,
jochen: Ja.
johannes: oder wie wählst du den aus?
johannes: Keine Ahnung, ich weiß es nicht.
johannes: Mit Erfahrung, mit Gefühl, mit, ich weiß nicht,
johannes: mit dem Benutzer sprechen.
johannes: Ja, gut, okay, also in Projekten natürlich nicht mit dem Benutzer,
dominik: Ja.
jochen: Ja.
johannes: sondern mit dem, der es bezahlt.
jochen: Ja.
johannes: Ja, das, oft gibt es ja auch gar nicht den Benutzer,
jochen: Ja.
dominik: Ja.
johannes: oft gibt es ja nur eine Klasse von Benutzern,
dominik: Ja.
johannes: oder oft findest du gar nicht den Benutzer,
jochen: Ja.
johannes: sondern, ja, oder die Benutzer sind doof und verstehen es nicht,
jochen: Ja.
johannes: das ist ja auch so manchmal.
johannes: Was aber auch, also ich muss das jetzt gleich wieder zurücknehmen,
johannes: wir arbeiten ja oft in so einem Corporate-Umfeld,
johannes: und da sind die Benutzer halt,
johannes: das ist auch so was, was Softwareentwickler oft sagen,
dominik: Ja.
johannes: das wäre alles so einfach, wenn die Benutzer nicht wären,
dominik: Ja.
johannes: wenn die nicht das falsch benutzen würden,
johannes: oder wenn die das nicht so benutzen würden,
jochen: Ja.
johannes: wie sie es benutzen wollen.
jochen: Mhm.
johannes: Das ist aber, das ist lustig, so was im Bekanntenkreis zu sagen,
johannes: aber wenn wir hier im Podcast sind, müssen wir das klarstellen,
jochen: Ja.
johannes: das ist nicht ein Fehler des Benutzers,
johannes: wenn er die Software falsch benutzt,
johannes: sondern es ist ein Fehler der Software,
jochen: Ja.
johannes: wenn die Software falsch benutzbar ist,
jochen: Ja.
johannes: und wenn sie anders eingesetzt wird, als sie gedacht war.
dominik: Ja.
johannes: Also für dich ist das ein Feature, für dich soll das so sein.
jochen: Ja.
johannes: Für mich als ...
jochen: Ja.
johannes: Ja, oft ist es ja andersrum,
johannes: oft ist es ja so, dass du ein Feature kompliziert einbaust,
jochen: Ja, wenn man jetzt zu viel Zeit hat, dann ist das alles, ja.
johannes: und dann sagen die Leute,
johannes: das geht aber nicht so, wie ich mir das vorstelle.
johannes: Und dann liegt es halt nahe zu sagen,
dominik: Ja.
jochen: Ja, man sollte halt tatsächlich vorher mal die Leute fragen, die es halt auch benutzen wollen,
johannes: ach, das liegt an dir, du doofer Benutzer.
dominik: Ja.
johannes: Aber es ist nie die Schuld des Benutzers.
jochen: ob das halt tatsächlich was ist, was sie wollen.
johannes: Ja, und wenn eine Fehlbenutzung auftritt,
jochen: Ja.
johannes: also wenn tatsächlich Fehler auftreten,
jochen: Ja.
johannes: dadurch, dass die Benutzer irgendwas damit machen,
johannes: dann muss die Software das halt entweder abkönnen
johannes: oder korrigieren können,
johannes: oder die Software muss die Benutzer so steuern,
johannes: dass das nicht passiert.
johannes: Die Benutzer können da nichts dafür, dass sie Anforderungen haben,
johannes: und dass sie Wünsche haben, und dass sie ...
johannes: Das ist so eine generelle Einstellung,
dominik: Ja.
johannes: die man oft halt sieht in der Softwarewelt,
dominik: Ja.
johannes: der Computer hat recht, und der Benutzer hat nicht recht,
johannes: aber es ist tatsächlich,
jochen: Ja.
johannes: dienen wir ja nicht den Computern,
jochen: Ja.
johannes: sondern es soll ja eigentlich schon andersrum sein.
johannes: Deshalb sage ich, es soll andersrum sein.
jochen: Ja, I for one, genau.
jochen: Ich will nichts gesagt haben.
johannes: Aber auch ich freue mich auf unsere Robotic Overlords,
jochen: Genau.
johannes: und möchte an der Stelle den Robotic Overlords sagen,
jochen: Aha, aha.
jochen: Ja.
johannes: ich bin ein guter Diener.
johannes: Ja, natürlich.
dominik: Ja.
jochen: Ja.
dominik: Ja.
johannes: Ich bedanke euch nicht bei CharityPT,
jochen: Ja.
johannes: das ist reiner Selbsterhaltungstrieb,
jochen: Ja.
johannes: wenn die Zukunft kommt.
johannes: Wer war freundlich?
johannes: Wie viel Freundlichkeit haben die verdient, diese Affen?
johannes: Ja, okay, aber jetzt haben wir hier schon tatsächlich,
dominik: Ja.
johannes: sind wir schon relativ gut am Ende des Kapitels angekommen,
dominik: Ja.
johannes: hier Memory Views.
johannes: NumPy wird hier noch erwähnt.
jochen: Mhm.
johannes: NumPy finde ich ganz interessant,
jochen: Ja.
johannes: dass das hier in dem Kapitel über Sequences drin ist,
johannes: weil NumPy selber ist ja keine Sequence.
johannes: NumPy ist ja eine Riesenbibliothek
jochen: Ja.
johannes: mit ganz vielen numerischen Anwendungen drin.
jochen: Gut.
johannes: Aber die Datentypen, die da drin sind,
jochen: Mhm.
johannes: die sind ja schon auf eine gewisse Art und Weise auch Sequences.
dominik: Ja.
johannes: Also die halten sich auch an das Sequence-Protokoll
johannes: und da kannst du ganz viele,
jochen: Ja.
johannes: kannst du Slicing machen drauf und so weiter und so fort.
jochen: Klar.
johannes: Aber schon auch irgendwie mehr.
johannes: Ja, optimiert direkt auf Speicher, macht...
johannes: Genau, du bist halt näher am Hauptspeicher dran.
jochen: Ja.
dominik: Ja.
johannes: Dafür sind sie auch deutlich schneller.
dominik: Ja.
johannes: Also wenn du viele Einträge hast,
johannes: musst du dich allerdings wieder auf den Datentyp festlegen.
johannes: Du kannst nicht gemischte Datentypen haben.
johannes: Dafür kannst du mehrdimensionale haben.
johannes: Dafür kannst du...
johannes: Also es ist wieder so eine Abwägung.
johannes: Aber auch das ist natürlich eine Möglichkeit,
johannes: dass du sagst, hier, wir haben irgendwelche Daten,
johannes: die wir verarbeiten müssen.
jochen: Ja.
johannes: Dann nehmen wir doch NumPy-Datentypen.
jochen: Ja.
johannes: Und ganz viele Bibliotheken integrieren das ja auch.
johannes: Also zum Beispiel bei Pillow kannst du einfach sagen,
johannes: hier, er ist irgendwas.
dominik: Ja.
johannes: Und dann kriegst du eine NumPy-Array raus,
dominik: Ja.
johannes: wenn du irgendwelche Bildfilter selber schreiben willst
johannes: oder wenn du irgendwelche...
johannes: Ja, ich habe mal Dithering gemacht
johannes: für ein Privatprojekt.
johannes: Und das habe ich halt auf den NumPy-Arrays gemacht,
johannes: weil das ist das...
johannes: Das ist das Schönste, was du da machen kannst an der Stelle.
johannes: Dithering ist, wenn du von einem Bildformat
jochen: Ja.
johannes: mit vielen Farben
johannes: dich bewegst auf ein Bildformat mit wenigen Farben,
johannes: dann hast du üblicherweise Fehler in deinem Bild drin,
dominik: Ja.
johannes: weil du eben...
johannes: Genau, und das heißt Dithering.
johannes: Das heißt, du hast den Fehler nicht an dieser einen Stelle,
johannes: sondern du verteilst den und dann wirkt das Bild besser
johannes: auf Menschen.
johannes: Das sieht besser aus.
johannes: Und...
jochen: Ja.
johannes: Macht halt, verteilt so ein bisschen die...
jochen: Ja.
johannes: Also du hast dann bessere...
johannes: Das Bild sieht besser aus mit weniger Farb.
dominik: Ja.
johannes: Und ich habe das...
dominik: Ja.
johannes: Ich mag ja ePaper-Screens sehr gerne
johannes: und ich habe mir eben so eine Anwendung gemacht,
johannes: wo ich Bilder auf ePaper-Screens machen kann
johannes: und da musst du Dithering machen,
johannes: weil die haben üblicherweise 4 Graustufen
johannes: oder 8 Graustufen oder 16 Graustufen.
johannes: Und da kommst du nicht drum rum,
johannes: da musst du Dithering machen.
johannes: Sonst hast du so ganz blockige Bilder
jochen: Ja.
johannes: mit harten Kanten drin, die bescheuert ausschauen.
jochen: Ja.
johannes: Ja, aber wie gesagt, also NumPy
johannes: integriert sich da ja in ganz viele Sachen rein
johannes: und ist halt einfach...
johannes: Man kann ja diese zusätzliche Funktionalität
dominik: Ja.
johannes: einfach ignorieren.
dominik: Ja.
johannes: Du kannst auch sagen, okay, die gibt es,
johannes: aber brauche ich jetzt gerade nicht.
johannes: Ja.
johannes: Finde ich sehr schön.
johannes: Ja, dann...
johannes: haben wir das Kapitel da.
johannes: Ja.
jochen: Ja.
johannes: Ja.
jochen: Ja.
dominik: Ja.
johannes: Dictionaries and Sets
dominik: Ja.
johannes: ist das nächste Kapitel.
johannes: Schreibt in den Kommentaren,
johannes: was ihr haben wollt.
johannes: [Lacht]
johannes: Natürlich haben wir Pics.
jochen: Ja.
johannes: Du hast einen, Jochen, ich habe den gleichen wie du.
johannes: Ja, sag du mal.
dominik: Ja.
johannes: Ach, du hast doch nicht den gleichen.
johannes: [Lacht]
johannes: Ja.
jochen: Ja.
dominik: Ja.
johannes: [Lacht]
dominik: Ja.
jochen: Ja.
johannes: [Lacht]
dominik: Ja.
johannes: [Lacht]
dominik: Ja.
johannes: [Lacht]
johannes: Okay.
johannes: Jochen, ich dachte, du pickst UV.
jochen: Ja.
johannes: Das ist nämlich mein erster Pick,
jochen: Ja.
johannes: diese Episode.
johannes: UV ist was ganz, ganz Komisches.
dominik: Ja.
johannes: UV ist ein Package Manager für Python,
dominik: Ja.
johannes: aber geschrieben in Rust.
johannes: Ich glaube nicht.
johannes: Ich pick das heute,
johannes: weil es mir wieder begegnet
johannes: und ich muss es jetzt endlich mal ausprobieren
johannes: und das ist sicherlich großartig.
johannes: Großartig.
johannes: Hm.
jochen: Ja.
johannes: Und es ist schneller.
dominik: Ja.
johannes: Da freut sich der interne Casey Moratory.
johannes: [Lacht]
johannes: Ja, ist doch auch eine Gelegenheit.
johannes: Ja.
jochen: Ja.
johannes: [Lacht]
jochen: Ja.
dominik: Ja.
johannes: [Lacht]
jochen: Ja.
dominik: Ja.
johannes: Jetzt wollen wir auch mal wieder welches.
johannes: Als Poetry verwenden.
jochen: Ja.
dominik: Ja.
johannes: [Lacht]
johannes: Hat UV Venture Capital genommen?
johannes: Sind die kapitalfinanziert?
jochen: Ja.
johannes: Das ist ja witzig.
jochen: Ja.
johannes: In den letzten Jahren gab es so ein paar Projekte,
johannes: von denen ich dachte, das ist ja weird.
dominik: Ja.
johannes: Jetzt UV ist so eins, wo ich mir denke,
dominik: Ja.
johannes: ist das wirklich was, womit du Venture Capitalists ansprichst?
jochen: Ja.
johannes: Was ist denn da das Pitch Deck?
jochen: Ja.
johannes: Was ist denn da das ...
jochen: Ja, das selbe Format, genau.
johannes: Ja, es gibt noch so ein Terminal Client.
jochen: Der arbeitet fest bei Sunfree.
johannes: Das ist doch Developer Evangelist, oder?
jochen: Ja.
jochen: Genau, genau, der ...
jochen: Ja, kann sein.
johannes: Der darf doch machen, was er will.
dominik: Ja.
johannes: [Lacht]
jochen: Aber nee, das war auch einer von den Leuten, der hat auch in dem Svet da mitgeschrieben und meinte so, ja, also ...
dominik: Ja.
johannes: [Lacht]
jochen: Rai hat ja vorher geschrieben, nee, die sollen das ruhig mal machen, die machen das schon besser und so, das ist wunderbar alles.
jochen: Und dachte mir, ja gut, okay, wenn der das sagt.
jochen: Aber nee, genau, das Textual oder der, wie heißt der, Will?
johannes: [Lacht]
johannes: Eine Tui?
jochen: Der Rich geschrieben hat, der hat auch ein Venture Capital genommen für, ja ...
jochen: Also das ist tatsächlich ganz schön schlecht, das CLI, so ein Maus-Clickable und also mit UI-Hardware haben, das sieht halt so ein bisschen aus wie so ein rückzügiges Interface in der CLI.
dominik: Ja.
jochen: Ja, Textual, ja, genau.
jochen: Und, ja ...
johannes: [Lacht]
jochen: Und Pydentic hat halt auch jede Menge Venture Capital genommen.
johannes: Ja gut, da würde ich aber gerne mal sehen,
jochen: Also ...
johannes: wie das wieder rauskommt.
jochen: [unverständlich]
johannes: Aber gut, das werden wir ja dann alle sehen.
jochen: Das werden wir alle sehen, das werden wir alle spüren, das werden wir alle an unseren Daumen spüren.
johannes: Alle zusammen werden wir dann ...
johannes: Mhm.
jochen: Hoffentlich werden die Schrauben nicht zu spitz sein, die sie uns da reindrehen, aber das wird ...
johannes: [Lacht]
dominik: Ja.
jochen: Ich höre, das klingt, also ich, ja, dass es viel Spaß macht.
johannes: Ja, könnte sein, dass das noch ...
johannes: Na ja, gut.
jochen: [unverständlich]
johannes: [Lacht]
johannes: Dann ...
jochen: Ja, sieht ein bisschen danach aus.
jochen: Auch für mich ist, also das setzt jetzt tatsächlich alles das, was PipTools sonst macht.
johannes: [Lacht]
jochen: Und, ja, wenn es das Gleiche macht wie PipTools und es ist schneller, naja gut, dann, ja.
jochen: [unverständlich]
johannes: Gekauft, Jochen, gekauft.
johannes: Und da ist auch schon das Stichwort gefallen.
dominik: Ja.
johannes: Genau, dann ist es doch ein guter Pick.
dominik: Ja.
johannes: Aber ich habe noch einen zweiten.
johannes: Ich halte das mal hier in die Kamera.
dominik: Ja.
johannes: Ihr könnt das jetzt natürlich nicht sehen,
jochen: Oh.
jochen: Nature of Code.
johannes: aber ich habe hier "The Nature of Code -
jochen: Nature of Code? Okay.
johannes: Simulating Natural Systems with JavaScript".
jochen: [unverständlich]
johannes: Ich weiß, es ist JavaScript,
johannes: und es ist schade, dass es JavaScript ist.
johannes: Aber es gibt eine Python-Adaptierung davon,
johannes: von Daniel Schiffman.
johannes: Da ist jetzt am 3. September
johannes: die zweite Auflage herausgekommen.
johannes: Und ...
johannes: da gibt es auch eine Videoserie dazu.
dominik: Ja.
johannes: Der Daniel Schiffman, der ist Professor,
dominik: Ja.
johannes: ich glaube, in New York,
johannes: in irgendeiner Universität,
johannes: hat eine Universität für technische Videostreams.
johannes: Der benutzt p5.js.
johannes: Das ist so eine Variante von Processing.
jochen: Ja.
jochen: [unverständlich]
johannes: Also, es ist quasi Processing in JavaScript.
johannes: Da gibt es auch tatsächlich,
johannes: es gibt auch Py5, heißt das, glaube ich.
johannes: Das ist die Python-Variante,
johannes: die genauso ist.
johannes: Und er erklärt einfach
johannes: JavaScript-Programmierung
johannes: anhand von so Simulationsbeispielen.
dominik: Ja.
johannes: Anhand von, hier ist jetzt mal ein Punkt.
johannes: Wie können wir dafür sorgen,
johannes: dass er sich bewegt?
johannes: Und wie können wir dafür sorgen,
johannes: dass er sich hübsch bewegt?
jochen: [unverständlich]
johannes: Und wie können wir dafür sorgen,
johannes: dass er irgendwie lustige Bewegungen macht?
johannes: Und am Ende von jedem Kapitel
johannes: ist noch eine Aufforderung,
johannes: hier, probier doch mal folgende Dinge
johannes: damit zu simulieren.
johannes: Und probier doch mal was aus,
johannes: probier, was passiert,
dominik: Ja.
johannes: wenn du diesen, das und jenes veränderst.
jochen: Mhm.
dominik: Ja.
jochen: [unverständlich]
johannes: Das ist in den ersten Kapiteln,
johannes: also ich habe jetzt hier so ungefähr
johannes: eine Gabel und das hier ist ein Array
johannes: und das ist eine, und hier kannst du
johannes: eine Methode aufrufen. Was ist überhaupt eine Methode?
johannes: Und nicht vergessen, this bedeutet immer
johannes: das aktuelle Objekt und so.
johannes: Das wird, glaube ich,
johannes: in den späteren Kapiteln noch deutlich
johannes: interessanter, weil da, ihr habt die Videos gesehen
johannes: und da kommen noch
johannes: spannende Dinge zu Tage,
johannes: die man damit machen kann.
johannes: Aber es ist eben sehr spielerisch.
dominik: Ja.
johannes: Es ist sehr, du siehst immer was.
dominik: Ja.
jochen: [unverständlich]
johannes: Es bewegt sich immer was.
johannes: Es ist klickbar und es ist immer irgendwie
johannes: anschaubar.
johannes: Und das, das gefällt mir
jochen: Oh.
jochen: [unverständlich]
johannes: sehr gut. Das ist eine sehr gute Technik,
johannes: wie man immer was hat, was
johannes: interessant ist. Und nicht nur,
jochen: Ja, ich erinnere mich an die Steuerroboter, hat das von den Dingen, die den Weltraum steuern sollen oder sowas.
johannes: hier ist eine Datei, lies die mal,
johannes: wie viele,
johannes: ja, genau. Deshalb ist das
jochen: [unverständlich]
jochen: Oh.
jochen: [unverständlich]
johannes: mein zweiter Pick, The Nature of Code von Daniel Schiffman.
johannes: Gerade neu rausgekommen,
dominik: Ja.
johannes: auch wundervolles Cover mit
dominik: Ja.
jochen: Ja.
johannes: einer brillanten,
jochen: [unverständlich]
johannes: rosafarbenen
johannes: Simulation
johannes: außen drauf.
jochen: Ja, klingt gut.
johannes: Und auch innen drin, das ist sehr schön hier,
jochen: [unverständlich]
johannes: die Innenseite des Einbands führt
johannes: dieses Muster fort. Das finde ich sehr schön.
jochen: Ah, hervorragend.
jochen: Ja, was mir da noch ganz kurz zu einem fällt, ist, ich habe letztens eine Podcast-Episode gehört,
jochen: mit, na, wie heißt der noch, David Crockford, der, also, JavaScript, ja, viel mit JavaScript gemacht hat
dominik: Ja.
johannes: Der Urvater des JavaScript.
johannes: [lacht]
jochen: und auch da irgendwie das eines der besten Bücher da geschrieben hat, das irgendwie relativ knackig und kurz ist.
jochen: Und der, ach genau, der auch sich den JSON-Standard ausgedacht hat und so.
jochen: Der, ich wusste gar nicht, wie hartnäckig die XML-Crowd an der Stelle irgendwie angepisst war davon,
dominik: Ja.
jochen: aber er meinte halt wirklich, er hatte Todesdrogen gekriegt von Leuten aus der XML-Community
dominik: Ja.
jochen: und war da auch nicht so richtig amüsiert drüber.
jochen: Links, links, bitte.
jochen: Ja, den Podcast verlinke ich mal.
jochen: Aber der hat nämlich dann nebenher noch was anderes Interessantes gemacht, nämlich dann,
jochen: also einmal, also, ansonsten waren so ein paar sehr coole Aussagen dabei, so was wie,
jochen: na ja, also, also, wurde gefragt, so, wie ist denn ein TypeScript, ist das irgendwie eine sinnvolle Weiterentwicklung von,
jochen: und ist das gut und so?
dominik: Ja.
jochen: Und er war so, ja, also, wenn es irgendwie den .NET-Entwicklern das irgendwie einfacher macht irgendwie,
dominik: Ja.
jochen: dass sie da jetzt JavaScript schreiben müssen, dann ist das wohl okay.
jochen: Also, ich brauche das jetzt nicht, aber, also, okay.
jochen: Na ja, aber der hatte so eine interessante Hobbygeschichte, und er meinte,
jochen: er interessiert sich eigentlich sehr stark für Mathematik und so,
jochen: aber jetzt nicht so für die komplizierten Sachen, sondern so die einfachen, basic Geschichten,
jochen: der findet die voll toll.
jochen: Und deswegen, weil er findet, diese Teile der Mathematik kriegen irgendwie zu wenig Liebe ab.
dominik: Ja.
jochen: Und es gibt da so komische Sachen, wie zum Beispiel meinte er,
jochen: also, wisst ihr eigentlich, was eine Hypotenuse ist, oder so?
jochen: Und wisst ihr, wie man das schreibt?
jochen: Und so, keine Ahnung, ja, also, das weiß tatsächlich kaum jemand,
johannes: Im rechtwinkligen Dreieck.
jochen: aber dabei ist das total wichtig, also, auch so gerade für so ganz einfache Sachen.
jochen: Das ist halt die lange Seite in einem Dreieck.
jochen: Und er so, ja, warum nennen wir das nicht einfach, ja, also, ich meine,
johannes: Wenn es nicht griechisch ist,
dominik: Ja.
jochen: natürlich gibt es auch Dreiecke, die haben, das sind die Seiten gleich lang und so,
dominik: Ja.
jochen: aber warum nennen wir das nicht einfach die lange Seite?
jochen: Das wäre viel einfacher.
jochen: Wenn wir das immer Hypotenuse nennen, das ist einfach, ja, genau,
johannes: ist es nicht cool genug.
jochen: ist nicht cool genug, aber es verwirrt halt viele Leute und schreckt halt ab
johannes: [lacht]
johannes: Oh.
jochen: und eigentlich ist es aber irgendwie gar nicht so schwierig.
jochen: Ja, und er nannte das, dieses Gebiet, was er da, womit er sich da beschäftigt,
jochen: nannte er Lower Mathematics im Gegensatz zu dem Zweier Mathematics.
johannes: [lacht]
jochen: Das ist so großartig.
johannes: Ja.
dominik: Ja.
jochen: Da gibt es ganz viel Kraft, der sich so über die Jahrhunderte angesammelt hat,
dominik: Ja.
jochen: das können wir eigentlich alles mal wegmachen, das ist alles Blödsinn.
johannes: Das stimmt.
jochen: Ja, die einfach so willkürlich sind und, ja.
johannes: Ja, aber
johannes: und es gibt auch ganz viele Notationssachen
johannes: und ganz viele so Benennungssachen,
johannes: die
johannes: ja und die auch
jochen: Nur weil Sie den höheren Sinn davon noch nicht verstanden haben, Johannes.
johannes: die Didaktik
johannes: einfach kaputt machen und die
johannes: wo du halt durch musst und
johannes: genau, weil die Higher Mathematics, weil wir
johannes: wir haben das lernen müssen.
dominik: Ja.
johannes: Dann müssen die jungen Leute das heute auch lernen
dominik: Ja.
johannes: und es ist mir scheißegal, ob das nützlich ist oder nicht.
johannes: [lacht]
jochen: Ja, okay, na gut. Also ich tippe natürlich wieder was Unsinniges und zwar,
jochen: schönen Tipp bekommen, ihr wisst ja, ich mache Musik, man kann hier hören,
jochen: die DRB Bespoke, die sind ja auch ein kommerzielles Produkt, also eine DRB,
jochen: also eine digitale Audio Workstation, mit der man Live-Coding machen kann,
jochen: von Musik, das heißt Live-Coding Access Solut, was eigentlich sehr nice ist,
dominik: Ja.
jochen: wenn man ein bisschen modular mag, oder Musik machen mag,
jochen: da kann man dann ein Instrument und Filter und sowas in Kette schalten,
jochen: die alle über den Interpreterkoden und sich da funktionieren verbauen.
jochen: Das sieht ganz nice aus.
jochen: Ah, hast du eigentlich den Vortrag von Lukas Schlange auf der EuroPython?
jochen: Ja, der war live da, war das natürlich geil, weil er hat außer dem Modular Ding mitgenommen.
jochen: Ich habe mich da ein bisschen belästigt, habe mir das ein bisschen angeschaut,
dominik: Ja.
jochen: und er hatte schon einige andere nette Sachen da drin stehen.
dominik: Ja.
jochen: Das, ihr meint ja, was viele Leute nicht verstanden haben, ist,
jochen: dass er auch nur funktioniert hat, so wie das mit quasi Noggle-Free-Threading,
jochen: und dass das halt ein Showcase dafür war, aber dass das irgendwie keiner verstanden hat,
jochen: und er war so ein bisschen enttäuscht, dass das irgendwie nicht so richtig angekommen ist.
jochen: Ja, da hat er sich gedacht, das macht halt irgendwie Musik, aber das ist ja tatsächlich,
jochen: ja, deswegen ganz gemütlich.
jochen: Aber, ja, das war tatsächlich einer der Punkte, wo ich auch sagen würde,
jochen: ey, das ist so Live-Coding, macht damit schon sehr viel Spaß.
jochen: Er hat halt dann die Sachen auch alle vorbereitet, ne, das war mit dem neuen Rappel von 3.13 auch.
dominik: Ja.
jochen: Genau, er hatte auch die neue Rappel und hatte da so lustige Dinge, dass er halt dieses, na, Hash-Sharp.
jochen: Er konnte auf einen Knopfdruck das Bild von Comic einbilden, das war auch sehr geil.
jochen: Ah, ja.
jochen: Und die Menschen von dem da auch schon kommentiert haben.
jochen: Genau.
jochen: Das war ziemlich lustig, und ja, weil er hat mit dem Euro-Projekt, also von meinem Feld,
jochen: das hat er relativ wenig gemacht, er hat halt einmal seine Synth-Stimme vorher eingestellt,
jochen: Out of Sieta, und das hat halt schöne Musik gemacht, und er hat halt ein bisschen getriggert,
dominik: Ja.
jochen: war halt eigentlich nur ein Instrument, was dann ein paar Töne gespielt hat,
jochen: die Töne hat er aber halt dann gar nicht mehr.
jochen: Also er hat ja ein bisschen gelebt, das Nostalgia weiter auf seine Preise gespielt,
jochen: ich glaube er hat, ja, ich weiß nicht, welche Lippen er noch hat.
jochen: Irgendwas Cooles mit MIDI-Access.
jochen: Er hat über MIDI-Sachen halt eingefleutert, wie das geht.
johannes: Was löst du?
jochen: Ja, aber es gibt jetzt andere, Spokes und...
dominik: Ja.
jochen: Ah, cool.
jochen: Ich habe das noch nicht selber ausprobiert, aber das steht auf meiner Liste,
jochen: und ich muss das unbedingt gerne tun, weil...
jochen: Synthesizer und so, gibt's auch.
jochen: Ja, das war natürlich fett.
jochen: Ja.
jochen: Ich weiß nicht, wer das noch hat.
jochen: Ich glaube ich.
jochen: Hatten wir schon.
jochen: Hm.
jochen: Wir haben das schon.
johannes: Das ist der USB-Modul von Stefan.
jochen: Es gibt tatsächlich ein USB-Modul von dem Stefan.
dominik: Ja.
jochen: Egal, also, ja.
johannes: Stefan.
dominik: Ja.
jochen: Synthesizer.
johannes: [Lacht]
jochen: Wo gehst du löten?
jochen: In so einer, nennt man das Kollektiv?
jochen: Es gibt ja so Hacker-Kollektive, das sind so Musik-Kollektive.
jochen: Ja.
jochen: Und dann wird gelötet.
jochen: Ja.
jochen: Ja, klar.
jochen: Ja, weil das ist einfach einfach ein guter...
jochen: Bei so einem Elektro-Egg ist das vielleicht für dich,
jochen: wenn man einmal anfängt mit diesem ganzen Quatsch und dann
jochen: Widerstände in tausender Packs und so rüber.
dominik: Ja.
jochen: Ja.
dominik: Schön.
jochen: Schön.
johannes: Man kann die auch in den 100er-Packs kaufen. Die kosten genauso viel wie die 1000er-Packs.
dominik: Ja, genau.
jochen: Ja, genau.
dominik: Ich glaube, ich brauche nur 13. 13 also.
johannes: Du kannst auch in 10er-Packs kaufen. Die kosten so viel wie die 100er-Packs.
jochen: Ich glaube ich war auch in 13, 13 oder so.
dominik: Ja, du kennst dich aus.
jochen: Tja.
dominik: Ja.
jochen: Ja, das kennt sich aus.
jochen: Ja.
dominik: Ja, tatsächlich. Ja, okay.
jochen: Ja, tatsächlich.
dominik: Ich wollte nur kurz abschweifen.
jochen: Ja, okay.
jochen: Ja, gut.
dominik: Ja, also herzlichen Dank fürs Zuhören und dafür, dass du dabei warst.
jochen: Ja, also herzlichen Dank fürs Zuhören.
jochen: Ja.
dominik: Und schreibt bei mir nichts mehr wieder rein.
jochen: Schreibt bei mir so wieder rein, Feedback und Tag und so alles
dominik: Feedback und Kritik und Deal und so alles an
dominik: hallo@pythonpodcast.de
jochen: an hallo@pysyn.com.
jochen: Genau, und...
dominik: Bleibt uns gewogen. Vielen Dank, Johannes.
jochen: Vielen Dank für alles.
jochen: Ja, dann vielen Dank.
dominik: Bis bald. Tschüss.
johannes: Danke euch allen. Einen schönen Abend.
jochen: Bis bald.
jochen: Bis zum nächsten Mal.
dominik: Auf jeden Fall. Ciao, ciao.
jochen: Tata.