Transcript: Arrays und Sequenzen

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Peißen-Podcast. Heute Episode 59. Hi Jochen.

Jochen

Herzlich willkommen Dominik. 59, meine Güte.

Jochen

Ja, hi Johannes.

Jochen

Und hallo Johannes.

Dominik

Wir machen heute weiter mit dem Flunen-Peißen-Buch, haben wir uns gedacht.

Jochen

Ja, genau. So, hat sich bewährt.

Jochen

Ja, ich fand das ganz gut.

Jochen

Bleiben wir jetzt. Machen nur noch das.

Jochen

Es ist ja auch lang.

Jochen

Wenn wir hinten angekommen sind, dann machen wir es nochmal rückwärts.

Jochen

Dann haben wir es schon vergessen, dann müssen wir es von vorne direkt wieder vorlesen.

Dominik

Ja, wir hatten, also das Kapitel 2 hat was mit Sequenzen und Listen und sowas zu tun, da hatten wir ja schon mal eine Folge, ne, erinnert ihr euch?

Johannes

Ja, aber da gibt es einfach immer noch mehr zu sagen.

Jochen

Genau, ich hatte da auch nochmal reingeguckt kurz und wir haben da, also das ist ein bisschen orthogonal, das ist gut, also es ist halt von der anderen Seite nochmal angegangen und da das Thema sowieso irgendwie wichtig ist, dann kann man das auch von mehreren Seiten mal irgendwie angehen, das ist eigentlich ganz gut.

Jochen

Okay.

Jochen

Ja.

Jochen

Haben wir denn News?

Jochen

Ja, so ein bisschen, ich habe jetzt, ja, ist halt die Frage, was da alles so drunter fällt, Python 3.13, das machen wir jetzt nicht, aber das kommt jetzt ganz bald.

Dominik

Ja, also ich finde ja den REPL so schön.

Jochen

Ja, genau, habt ihr euch alle schon so ein bisschen damit beschäftigt oder gar nicht?

Jochen

Nee, gar nicht.

Jochen

Auch gar nicht?

Jochen

So ein ganz kleines bisschen.

Jochen

Ja, also genau, also ja.

Dominik

Der REPL ist total toll, du kannst einfach Defaults jetzt eintragen, den er automatisch lädt, Pakete in deinem REPL.

Dominik

Das heißt, wenn du den Interpreter aufmachst, dann hat der

Dominik

Pakete schon geladen. Oder damit

Dominik

kannst du halt auch Sachen dann überschreiben, weil er dann die Pakete

Dominik

lädt, die er laden soll. Und du hast

Dominik

einen Befehlssatz drin direkt, den du möchtest.

Dominik

Also eine eigene Konfiguration für deinen

Dominik

Ripple direkt haben.

Jochen

Man kann einfach Exit eingeben und ist draußen und Multiline

Jochen

Editing und die History ist ordentlich

Jochen

und so. Das finde ich jetzt alles nicht so

Johannes

beeindruckend, weil ich habe eh immer

Johannes

einen IPython überall.

Jochen

Ja, aber rate mal, wer das nicht hat.

Jochen

Der Dominik.

Jochen

Nee, die Python-Ur-Entwickler.

Jochen

Deswegen alle

Jochen

mit allen neuen...

Jochen

Die schauen dann mit Neid, schauen die so...

Jochen

Ja, aber iPad ist so cool.

Jochen

Oder Beep-Python.

Jochen

Genau, und das geht alles nicht, weil das läuft ja mit der neuen

Jochen

und in der Entwicklung befindlichen

Jochen

Python-Version funktioniert das halt nicht.

Jochen

Das heißt, die müssen immer die Python-Rapid verwenden und die

Jochen

sagen alle,

Jochen

das ist so viel besser jetzt, das ist so cool.

Jochen

Ja.

Jochen

Ja, das ist typischer

Jochen

Software-Entwicklungsmechanismus.

Jochen

oder Softwareentwicklung durch Neid.

Dominik

Ja. Ja, erstmal bitte ein bisschen

Dominik

Rennbogenfarben irgendwie in der Konsole,

Dominik

dann macht das Spaß. Ja.

Jochen

Und ein großer Teil davon kommt halt auch,

Jochen

oder kam, also Anregungen dafür

Jochen

kamen aus PyPy.

Jochen

Und dann haben sie es jetzt aber nochmal durch die Mangel

Jochen

gedreht und alle möglichen Sachen gefunden, die man irgendwie

Jochen

besser machen soll. Jetzt überlegen sie, ob der Kram,

Jochen

den sie in Seapython jetzt gemacht haben, nicht zurückgeht nach

Jochen

PyPy wieder.

Jochen

Aber das ist cool. Also das ist

Jochen

auf jeden Fall, das sind einige

Jochen

Sachen, die jetzt auch da immer wieder

Jochen

zwischen den Leuten dann diskutiert werden und so.

Jochen

Und da ist auf jeden Fall eine fruchtbare Diskussion

Jochen

immer so im Stande. Ich höre ja diesen

Jochen

Copy-By-Podcast und da ist eigentlich

Jochen

PiPi immer mit dabei oder

Jochen

ja,

Jochen

Karl Friedrich

Jochen

bei Band als

Jochen

irgendwas, das hat er dazu gesagt.

Jochen

Ja, also das ist auf jeden Fall cool.

Jochen

Genau, Python 3.3,

Jochen

die Repel-Geschichten.

Jochen

Ja, es gibt halt, also das größte,

Jochen

das dickste Feature, was immer alle

Jochen

nennen, ist halt

Jochen

Free Threading, also

Jochen

man kann den GIL

Jochen

abschalten.

Jochen

Ja, also... Das sind schon, das würde ich

Jochen

schon sagen, das sind schon nennenswerte News.

Jochen

Ja, ja, schon, schon, klar, und also

Jochen

in gewissen Fällen bringt das sicherlich

Jochen

auch viel, aber... Die auch vielleicht eine eigene

Jochen

Episode brauchen. Ja, genau, da müsste man auch mal

Jochen

äh... No-Gay.

Jochen

Genau.

Jochen

Ja, das ist halt auch mit drin. Hashtag, Hashtag No-Gay.

Jochen

Ja, überhaupt

Jochen

dieser ganze, der, äh,

Jochen

Es gibt

Jochen

einen Just-in-Time-Compiler, der jetzt mit dabei ist.

Jochen

Der macht zwar noch nicht viel, aber er ist auf jeden Fall

Jochen

jetzt drin. Das heißt, da könnte

Jochen

man in Zukunft auch irgendwie einige

Jochen

coole Performance-Verbesserungen

Jochen

erwarten. So ein

Jochen

Copy-and-Patch-Jit

Jochen

ist jetzt tatsächlich

Jochen

in Python-Interpreter mit drin.

Jochen

Ja,

Jochen

was haben wir noch alles?

Jochen

Genau,

Jochen

es gibt jetzt farbige Phrase-Bags.

Jochen

auch wieder so ein, ja,

Jochen

für den Alltag irgendwie ein bisschen besser.

Jochen

Ja gut, das sind natürlich schon alles.

Dominik

Also er hat auch immer einen guten Hint, er

Dominik

racet jetzt nicht einfach irgendwas und denkt sich so, oh ja,

Dominik

komisches Straightback, so weiß ich nicht wo,

Dominik

sondern er hat oft schon eine gute Intuition, was das

Jochen

sein könnte. Ja, genau.

Jochen

Da ist jetzt auch eine...

Jochen

Also da sind jetzt Dinge

Johannes

verschieden große Signifikanz

Johannes

dabei, würde ich sagen. Ja.

Johannes

Ja, aber tatsächlich für Anfänger,

Johannes

also was die oft irgendwie,

Jochen

ein Problem, das sie hatten, ist,

Jochen

du nennst

Jochen

dein Python-Modul

Jochen

oder Skript, das du gerade schreibst,

Jochen

nennst du halt genauso wie ein Standard-Lib-Modul

Jochen

und

Jochen

wenn das Versuch auszuprobiert

Jochen

passiert, kriegst du eine total

Jochen

kryptische Fehlermeldung, die dir echt gar nicht

Jochen

weiterhilft. Und

Jochen

da gibt es jetzt eine Fehlermeldung, die sagt,

Jochen

kann es sein, dass du das genannt hast wie ein Standard-Library-Modul?

Jochen

Das ist aber nicht gut. Mach das mal anders.

Jochen

Und das ist natürlich hilfreicher irgendwie.

Jochen

Ja, das ist tatsächlich was, was in

Jochen

Python-Kursen oft vorkommt, weil man halt irgendwie

Jochen

haben naheliegende Namen und wenn du

Johannes

deine Funktionalität schreibst, die

Johannes

sich mit einem Thema beschäftigt, dann wählst du

Johannes

den naheliegenden Namen für deine

Johannes

Python-Partei und schon hast du das Modul

Johannes

überschrieben. Deshalb, das ist

Johannes

schon gut, aber ich würde sagen,

Johannes

es ist, sagen wir mal, technologisch

Johannes

weniger fortschrittlich

Johannes

oder weniger kompliziert

Johannes

als Hashtag NoGill.

Jochen

Ja, das ist richtig. Da ist eine ganze Menge

Jochen

Enttäuschung und Aufwand drin gewesen, glaube ich.

Jochen

Ja.

Jochen

Ja, ansonsten, genau.

Jochen

Ich weiß gar nicht, ich habe noch irgendwas zu lesen.

Jochen

Wir machen zu 3.13 auf jeden Fall

Jochen

auch noch eine Episode, denke ich, dann können wir das mal

Jochen

alles zusammentragen.

Jochen

Ja, ansonsten,

Jochen

was war noch?

Jochen

Django 5.1 gibt es auch

Jochen

irgendwie jetzt.

Jochen

Ja, aber ändert sich da irgendwas?

Jochen

Da war auch nichts,

Jochen

was ich mir jetzt so spontan in Erinnerung geblieben wäre.

Jochen

Ja, also diese Django-Releases,

Jochen

da gibt es ja sehr viele immer.

Johannes

Und ich habe das Gefühl, also klar,

Johannes

die machen Sicherheit, die machen so Verbesserungen

Johannes

und dann machen sie schon immer mal wieder

Johannes

coole Sachen, da mit

Johannes

diesem Postgres-JSON ändern sich ja schon schöne

Johannes

Dinge, aber

Johannes

so richtig...

Jochen

Oh, wir haben da schon drüber gesprochen, glaube ich.

Jochen

Wir haben schon drüber gesprochen, diese Query-String-Geschichten

Jochen

und so, brauchen wir nicht nochmal. Ja, ich hätte, ich habe mir

Jochen

die Videos nicht aufgeschrieben, aber ich...

Jochen

Ja, aber ich meine, Django

Johannes

fühlt sich an, als ob es so stabil ist, dass es

Johannes

sehr inkrementelle Verbesserungen sind.

Johannes

Ja, ja.

Jochen

Das ist ja auch was Gutes, würde ich auch sagen.

Jochen

darauf verlassen kann, dass das halt, was man

Jochen

jetzt weiß, wie es funktioniert, dass es auch so bleibt.

Jochen

Ja, aber

Jochen

ich hätte noch eine Überleitung zu einer ganz

Jochen

interessanten Frage vielleicht, wenn wir jetzt hier

Jochen

schon eigentlich mit den News mehr oder weniger am Ende sind. Also ich weiß

Jochen

nicht, ob ihr noch was habt. Ich hätte jetzt nur noch irgendwie, es gibt

Jochen

neue LLM-Modelle, sowas wie

Jochen

O1 oder... Kann man jedes

Jochen

Mal als News sagen. Genau, also es gibt

Jochen

neue, probiert es mal wieder aus. Es gibt

Jochen

ein 700 Milliarden Parameter-Modell

Jochen

von Lama.

Johannes

Lama 3.1 700B.

Johannes

Ja.

Johannes

Das, ja.

Johannes

Brauchst den größeren Rechner.

Dominik

Also O1-Preview ist ja aber trotzdem auch noch new.

Dominik

Und das ist, also

Dominik

ich höre, das ist besser als Cloud wieder.

Dominik

Ja, also bisher, also genau,

Jochen

ich würde sagen, also diese ganze

Jochen

Artefaktsnummer,

Jochen

ich habe jetzt in letzter Zeit häufig

Jochen

Cloud, also

Jochen

das Chat-Interface von

Jochen

Anthropic

Jochen

verwendet, weil das halt einfach für Code-Geschichten

Jochen

oft ein bisschen besser war als

Jochen

als

Jochen

GPT-4O.

Jochen

Und

Jochen

ja,

Jochen

aber jetzt inzwischen, also ich weiß nicht genau,

Jochen

ich habe es noch nicht wirklich ausprobiert, ehrlich gesagt,

Jochen

weil es ja auch gerade erst rausgekommen ist, aber

Jochen

das soll halt sich dann auch noch mal wieder

Jochen

ein bisschen

Jochen

besser drüber sein.

Jochen

Also ich finde es jetzt schon super alles.

Jochen

Also das ist auch, das ganz normale

Jochen

GPT-4O und so war auch schon super

Jochen

und die Anthropic-Dinger fand ich auch total klasse.

Jochen

Also ich bin eigentlich sehr zufrieden.

Jochen

Es ist ein gutes Zeichen, wenn

Dominik

einen Chief Machine Learning Engineer

Dominik

Mensch Anthropic nicht kennt?

Jochen

Das wäre ein schlechtes Zeichen, würde ich

Jochen

meinen. Ja, wie kann das denn sein?

Jochen

Also gut, Machine Learning ist halt ein großes

Jochen

Feld.

Jochen

Ja, du kannst dich auch in irgendwas

Jochen

spezialisieren oder in einem ganz anderen Feld irgendwas

Jochen

machen, mit LLMs nie irgendwas zu tun haben.

Jochen

Aber ja, gut.

Jochen

Ja, also es war schon gut.

Jochen

Also die großen Namen musst du ja schon

Jochen

wissen, oder?

Jochen

Ja, gut.

Jochen

Aber ja, jetzt haben wir

Jochen

jetzt gerade eben hier mit dem die Karriere versaut.

Jochen

War eigentlich eine gute Alternative, ich bin gespannt.

Dominik

Also O1, ich finde es echt very nice.

Dominik

Hilft, also es ist so ein bisschen

Dominik

fehlerfreier

Dominik

bei Coding-Ding

Dominik

und so ein bisschen deeperes

Dominik

Knowledge und es macht sehr viel Spaß, diesen

Dominik

Gedankengang zuzugucken.

Dominik

Und das, was ja auch neu ist,

Dominik

das ist aber schon bei 4.0 drin,

Dominik

ist halt, dass du ein Gedächtnis hast

Dominik

jetzt auch. Ja,

Jochen

was sie da so nennen.

Dominik

Doch, doch, das ist schon, das funktioniert auch.

Dominik

man muss sich halt überlegen, ob man möchte,

Dominik

da hast du es gespeichert, was man da bespricht.

Johannes

Bitte merkt ihr alles, was ich hier gesagt habe.

Johannes

Ja.

Dominik

Aber vor allen Dingen ist das gar nicht so schlecht, weil, also,

Dominik

ja,

Dominik

interesting. Ja, ich meine,

Jochen

also, wenn man jetzt LLMs über die

Jochen

Kommandorenzahler mit dem LLM-Tool zum Beispiel

Jochen

benutzt, dann hat man das ja auch irgendwie,

Jochen

man ist ja lokal in der SQLite, ich weiß nicht,

Jochen

ja, ist auch immer die Frage, wie möchte man

Jochen

dieses hier eigentlich zeigen?

Dominik

Ja, also, ich frage tatsächlich so nach

Dominik

nach so Morgenroutinen oder sowas und sagt dann halt so, hey,

Dominik

was ich denn so mache und dann schlägt das Ding mir halt so Dinge

Dominik

vor, als dass es so, äh, macht mit mir

Dominik

so Rituale und so. Ich find's sehr lustig und das

Dominik

funktioniert toll. Und, ähm, das

Dominik

ist, glaub ich, gar nicht so blöd.

Dominik

Weil's einen so dabei hält, sich so selber

Dominik

zu entwickeln.

Dominik

Ja, cool. Das kann man natürlich auch mit anderen Quellen

Dominik

machen, dass nicht, dass man jetzt irgendwie so ein

Dominik

Eifer bräuchte, aber es geht damit sogar

Dominik

relativ gut.

Jochen

Ja, genau. Ansonsten würd ich nämlich Django

Jochen

irgendwie mal kurz zu der Überleitung nutzen,

Jochen

da wir jetzt sowieso nicht so viel News haben.

Jochen

ich habe, und

Jochen

ich mache gerade ein neues Projekt, weil

Jochen

irgendwie ich prokrastiniere so gerade die Dinge, die ich eigentlich

Jochen

machen sollte und, naja,

Jochen

wer kennt das nicht?

Jochen

Ja, sinnvolles Prokrastinieren.

Jochen

Produktives.

Jochen

Genau, der New Repository

Jochen

Button bei GitHub, der wird immer so

Jochen

shiny und fängt dann zu leuchten

Jochen

und dann denkt man sich, ah, es geht nicht anders,

Jochen

ich muss draufdrücken und dann habe ich das halt

Jochen

mal wieder gemacht.

Jochen

Genau, ich bin nämlich gerade dabei,

Jochen

irgendwie

Jochen

mal

Jochen

meine Bewerbungsunterlagen

Jochen

beziehungsweise so CV

Jochen

und so Zeugs irgendwie auf einer Webseite zu,

Jochen

weil ich hätte das immer so in einem Textpfeil,

Jochen

aber dann habe ich fünf unterschiedliche Varianten, die alle nicht aktuell

Jochen

sind und irgendwie

Jochen

für unterschiedliche Zwecke gebraucht wurden

Jochen

und dann denke ich mir so, naja gut, welches nehme ich denn jetzt?

Jochen

Und dann weiß ich es nicht und dann denke ich mir, ah, ich müsste mal

Jochen

und ah, alles schrecklich und warum packe ich das nicht einfach

Jochen

auf eine Webseite? Das ist doch eigentlich ganz gut.

Dominik

Ja, ich habe auch mal ein paar gute gesehen, wo ich mir noch eine To-Do-Liste

Dominik

habe, wo draufsteht, dass ich mir ein Vorbild daran nehmen wollte.

Dominik

Vielleicht ist es ja jetzt dein Zug.

Dominik

Ich habe auch schon mal so ein Projekt angefangen, Jochen.

Jochen

Ja, gut, dann jeder muss sowas.

Dominik

Ich habe meine Sachen immerhin schon mal in Markdown stehen.

Dominik

Das ist schon mal ein Fortschritt.

Jochen

Ja, Markdown ist schon mal nicht so schlecht.

Jochen

Jochen, guck, an der Stelle,

Jochen

wir haben uns ja kürzlich darüber unterhalten,

Jochen

an der Stelle muss man jetzt sagen,

Jochen

jeder Softwareentwickler, den man beauftragen kann,

Jochen

muss immer wieder sowas machen.

Jochen

Also, falls jemand zuhört,

Jochen

der den Jochen oder mich beauftragen möchte.

Jochen

Ja, oder mich.

Jochen

Also, das ist ja genau der Punkt.

Jochen

Ja, den Dominik auch.

Jochen

Ja, wir wollten halt so ein bisschen,

Dominik

vielleicht heute mal Werbung in eigener Sachen machen, oder?

Dominik

Können wir ja auch. Können wir ja gerne machen.

Dominik

Also ihr könnt uns mieten, buchen oder sowas,

Jochen

wenn ihr wollt. Wir sind prinzipiell

Jochen

käuflich. Ja, also für

Dominik

Projekte. Wie machen, glaube ich,

Dominik

Peißen? Das ist alles eine Frage des Preises.

Dominik

Nein, bei interessanten Sachen sind wir

Johannes

auch zur Diskussion bereit, oder? Genau.

Dominik

Von ein bis drei Leuten könnt ihr da

Dominik

relativ viel Kappa bekommen, die auch gute Sachen

Dominik

machen.

Johannes

Ich habe gehört, wir haben alle ein Buch

Jochen

gelesen. Oh ja, genau. Wir könnten

Jochen

eigentlich mal mit dem Thema anfangen?

Jochen

Ja, listen.

Jochen

Sequenzen.

Jochen

Sequenzen, genau.

Jochen

Ja, Sequenzen.

Johannes

Das zweite Kapitel ist deutlich länger

Johannes

als das erste Kapitel. Das erste Kapitel war

Johannes

so ein Häppchen.

Johannes

Und das zweite Kapitel ist

Johannes

schon ein Brocken.

Johannes

Wie weit hast du denn gelesen?

Johannes

Bis zum Ende des zweiten Kapitels.

Johannes

Seite 39.

Johannes

Ja, sowas ungefähr.

Johannes

Keine Ahnung, wie weit.

Johannes

Das muss ich jetzt nachgucken.

Johannes

Seite 58.

Johannes

Dann hast du wesentlich weiter gelesen.

Johannes

Das ist Chapter 2,

Johannes

An Array of Sequences.

Dominik

Das mit 59 geht auch weiter bei List is not

Dominik

Seance. Und dann geht es so ein bisschen

Dominik

in die Diskussion darüber, wann man was machen möchte.

Dominik

Ja, genau. Das ist tatsächlich, das habe ich mir extra

Dominik

markiert, es geht bis Seite 77.

Johannes

Und Seite 59 ist nämlich das, worüber

Johannes

ich mit euch dann gleich sprechen möchte.

Johannes

Ich bin so schlecht. Das ist ja erst am Ende des Kapitels.

Dominik

Ja, also wir müssen auf jeden Fall diese Trade-offs

Dominik

finde ich, glaube ich, ganz gut, weil man was für eine Art

Dominik

und Weise von

Dominik

Sequenz haben möchte,

Dominik

vielleicht gar nicht so uninteressant.

Jochen

Ja, also ich finde auch genau

Jochen

der grundsätzliche

Jochen

Blickwinkel drauf, den finde ich ganz interessant, weil

Jochen

wir hatten ja schon mal darüber geredet und da hatten wir

Jochen

eher den so, ja, wie implementiert

Jochen

man das eigentlich oder was sind so die algorithmischen

Jochen

Geschichten, die man damit machen kann und

Jochen

hier sind so die grundsätzlichen

Jochen

Unterschiede zwischen den Dingen halt

Jochen

eher sowas wie, ist es ein Container

Jochen

oder ist es irgendwie flach oder

Jochen

ist es irgendwie

Jochen

mutable oder immutable

Jochen

sozusagen. An den Achsen

Jochen

orientiert sich das Ganze irgendwie und das ist

Jochen

einfach ein anderer Blickwinkel und das fand ich eigentlich auch ganz interessant.

Jochen

Ja.

Jochen

Jedenfalls, genau.

Jochen

Also

Jochen

das ist halt irgendwie eine ganz

Jochen

fundamentale Geschichte und

Jochen

der Unterschied

Jochen

zwischen zum Beispiel Container und Flat ist halt einfach,

Jochen

dass in einem Container sind halt

Jochen

Referenzen auf Objekte drin und da kann halt alles

Jochen

mögliche drin sein. Da kann ganzer Zoo,

Jochen

Baum, sonst was, Dings von

Jochen

irgendwie anderen Sachen, die da noch drin liegen, sein.

Jochen

Während,

Jochen

also, und das geht natürlich mit Liste, also

Jochen

Python List geht das.

Jochen

Während jetzt sowas wie, was halt auch eine

Jochen

Sequence ist,

Jochen

Array enthält halt flach einfach nur

Jochen

die entsprechenden

Jochen

Werte.

Jochen

Halt ein Header mit irgendwie, wie sind die

Jochen

Daten dahinter jetzt strukturiert und dann kommen halt

Jochen

einfach nur die Daten.

Jochen

Und genau, das ist halt

Jochen

schon mal ein großer Unterschied. Das fand ich übrigens auch interessant,

Jochen

das habe ich nicht gewusst, dass

Jochen

Tuppel halt auch

Jochen

weniger Hauptspeicher

Jochen

belegen als die, also

Jochen

Tuppel sind immer ein bisschen schneller als Listen,

Jochen

weil das ist bei Listen halt so

Jochen

doppelt indirekt,

Jochen

weil es sich ja auch ändern kann und bei

Jochen

Tuppel nur einmal indirekt.

Jochen

Jetzt habe ich die Stelle nicht mehr.

Jochen

Also, aber

Jochen

das ist vielleicht auch was, was man erwähnen kann.

Johannes

So eine Liste verbraucht a priori schon mal mehr

Johannes

speicher weil es platz haben muss für zukünftiges wachstum und wenn ich das

Johannes

richtig erinnerung gehabt dann machen listen so ein exponentielles wachstum

Johannes

das heißt die haben wir mal eine gewisse menge lehrer elemente im hintergrund und

Johannes

ich glaube das sind zwei potenzen das heißt wenn man diese größe überschreitet

Johannes

dann passiert also ein riesig und dann verdoppelt sich diese liste das heißt in

Johannes

dem moment hat man dann etwa 50 prozent des potenziellen speichers einfach

Johannes

verschenkt, weil da keine Referenzen

Johannes

drin sind.

Johannes

Wobei Referenzen natürlich relativ

Johannes

klein sind. Also die sind jetzt nicht

Johannes

im Kilobyte-Bereich, sondern die sind

Johannes

natürlich nur im Pointer-Plus.

Johannes

Ja, also normalerweise. Die sind im Pi-Object-Bereich.

Johannes

Genau, 8-Byte.

Johannes

Ich glaube, es sind mehr, Jochen, oder?

Johannes

Das sind doch Pi-Objects, die da drin sind.

Jochen

Achso, wenn du das in Python-Objects,

Jochen

ja, da hast du normalerweise, du hast einmal

Jochen

einen Ref-Count.

Johannes

Du hast so einen Tag drin und so einen

Johannes

Typ. Und

Johannes

die Speicheradresse

Jochen

oder sowas. Genau, also den

Johannes

Point. Hast du nicht auch noch einen Reference-Count drin?

Jochen

Ja, genau. Also ich meine, das minimale

Jochen

Python-Objekt

Jochen

ist ein Float.

Jochen

Ich weiß nicht, ob es genau gleich ist.

Jochen

Float, da bin ich mir aber ziemlich sicher, dass es das kleinste

Jochen

mögliche

Jochen

Python-Objekt ist. Und das hat, glaube ich, 24 Byte,

Jochen

weil das ist halt genau irgendwie

Jochen

der Wert.

Jochen

Das ist sogar inline, oder?

Jochen

Ja, du meinst bei kleinen Werten?

Johannes

Bei Float ist es sogar inline, oder?

Johannes

Da hast du keine Referenz auf irgendeine andere Speicherzelle.

Johannes

Nein, das ist einfach direkt drin.

Johannes

Das ist einfach direkt, genau.

Jochen

Das ist nur der Wert direkt, der RefCount und der Typ.

Jochen

Aber auch das sind schon 24 Byte.

Jochen

Ja, klar.

Johannes

Für im Grunde nur 8 Byte Speicher hast du schon 24 Byte Speicher gebraucht.

Johannes

Genau.

Johannes

Aber die Größe ist ja gleich, egal ob du einen Tube-Loader in der Liste hast.

Johannes

Ja, das ist richtig.

Johannes

die freien Elemente, das hast du

Johannes

beim Tuple natürlich nicht. Beim Tuple

Johannes

sagst du, hier, ich brauche sieben Stück

Johannes

und dann kriegst du sieben Stück und nicht acht und nicht

Johannes

sechzehn und auch nicht eine andere Anzahl.

Dominik

Ja, und du kannst halt vielleicht bessere Optimierung

Dominik

machen, weil du immer genau weißt, wie lange ist das, weil du ja schon

Dominik

weißt, was so steht, weil du das nicht mehr verändern kannst. Und du kannst

Dominik

diese ganzen Methodendinger weg

Dominik

und den Overhead weglassen für, ich muss da

Dominik

was reinbasteln oder rausnehmen.

Dominik

Ja, okay, aber du hast natürlich

Johannes

einen Virtual Table, hast du immer

Johannes

noch.

Johannes

Ja, aber ich weiß nicht, ob das der große Unterschied ist.

Johannes

Ja, man darf ja nicht so viel ausmachen.

Jochen

Ha! Okay, ich habe es doch gefunden.

Jochen

Ja, okay, dann bitte.

Jochen

Kompliziert.

Jochen

Ich dachte gerade schon, ich habe schon irgendwie,

Jochen

ich dachte schon, wahrscheinlich habe ich einfach

Jochen

Dinge haluziniert und...

Jochen

Oh, oh, Jochen.

Jochen

Aber nein.

Jochen

Also, genau.

Jochen

LLM, Jochen.

Jochen

Ja, ja.

Jochen

Manchmal, man weiß es nicht so genau.

Jochen

genau, die Referenzen

Jochen

zu den Items in einem

Jochen

Tuppel sind halt in einem Array,

Jochen

die sind halt in einem Array in dem

Jochen

Tuppelsdruck halt drin,

Jochen

aber in der Liste sind

Jochen

quasi,

Jochen

also die Liste hält

Jochen

einen Pointer zu einem Array

Jochen

von Referenzen,

Jochen

die irgendwo anders sind, weil das

Jochen

Problem ist halt, wenn

Jochen

die Liste größer wird, als sie

Jochen

eigentlich quasi als momentan

Jochen

alloziert ist an Aufsprecher, dann

Jochen

muss man den ganzen Kram Rea allozieren können.

Jochen

Und das geht halt nur, wenn du...

Jochen

Ja, das ist dieses Resizing. Genau, genau.

Jochen

Und das macht halt nochmal einen Interaktionsschritt

Jochen

erforderlich. Und bei einem Tuple weißt du halt,

Jochen

ja, das passiert halt nie. Ich kann einfach

Jochen

ein Array von den Werten nehmen.

Jochen

Also vor dem... Okay, das ist quasi so

Jochen

ein bisschen wie das, was wir eben auch schon

Jochen

beim Float angesprochen haben, oder?

Jochen

Bei einem PyObject kann ein Float direkt

Johannes

drin sein und dann hast du keine Referenz

Johannes

auf irgendwas. Bei einem String

Johannes

zum Beispiel geht es nicht. Bei einem String, das

Johannes

PyObject ist halt der Tag und der

Johannes

Typ und der RefCount und

Johannes

die Referenz auf die tatsächlichen

Johannes

Daten.

Johannes

Und hier ist es genauso, oder? In einem Tuple kannst du es direkt

Johannes

drin haben und

Johannes

in einer Liste brauchst du erst noch eine Referenz

Johannes

auf die tatsächlichen Daten.

Johannes

Genau. Die dann wiederum halt

Johannes

in dem Fall eine Sequenz von

Johannes

Sachen sind, im Tuple-Fall

Johannes

direkt die Sequenz der Sachen und

Johannes

im Listen-Fall eine Referenz

Johannes

auf eine Sequenz von Sachen. Ja. Okay.

Johannes

Ja, okay, gut, das verstehe ich

Johannes

natürlich. Das ist ein Pointeraufruf mehr und

Johannes

Pointeraufrufe sind ja bei modernen Prozessoren

Johannes

so das Schlimmste,

Johannes

was du machen kannst.

Jochen

Ja, es ist alles kein großer Unterschied

Jochen

wahrscheinlich, faktisch.

Jochen

Aber ja.

Jochen

Müsste man mal einen Test machen.

Jochen

Ja.

Jochen

Es gibt ja durchaus Menschen, die

Jochen

sagen,

Johannes

nur High-Performance-Computing ist sinnvolles

Johannes

Computing.

Dominik

Das ist ja generell so, oder? Nur High-Performance

Dominik

ist sinnvoll.

Jochen

Dieses Casual, irgendwie

Jochen

Slow-Food, irgendwie

Jochen

ich schreibe meinen eigenen

Jochen

Algorithmus, das ist ja nicht gut.

Jochen

richtig sinnvoll, wenn das

Jochen

richtig machst.

Jochen

Also ich meine,

Jochen

es gibt

Johannes

ja so Leute, es gibt diesen Casey

Johannes

Muratory, der ist relativ bekannt,

Johannes

der schlägt immer wieder

Johannes

auf mit solchen, der ist halt,

Johannes

der vertritt quasi diese extreme Position.

Johannes

Wenn du es nicht

Johannes

richtig machst und dann auch

Johannes

hier die

Johannes

SIMD-Inlines von den verschiedenen Prozessoren

Johannes

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

Johannes

Und das ist natürlich das

Johannes

eine Extrem und das andere Extrem sind

Johannes

halt, naja, so Menschen wie

Johannes

wir, die Python und JavaScript

Johannes

benutzen und sagen, komm,

Johannes

Skriptsprache, Hauptsache das

Johannes

Entwickeln ist angenehm.

Johannes

Und irgendwo dazwischen,

Johannes

ich meine, gelegentlich machen

Johannes

wir ja auch High-Performance.

Johannes

Da muss man dann halt zu

Johannes

Techniken greifen.

Dominik

Die Frage ist, was High-Performance eigentlich ist. Da gibt es ja vielleicht

Dominik

verschiedene Blickwinkel drauf. Ja, gibt es auch

Johannes

verschiedene Blickwinkel, wobei, sobald

Johannes

du halt in so Data-Bereiche reingehst,

Johannes

ja, und sobald es mehr als ein Megabyte ist,

Johannes

musst du schon dir zumindest

Johannes

Gedanken drüber machen, ob das sinnvoll

Johannes

ist, das einzelne

Johannes

Elementweise zu verarbeiten oder ob du da nicht

Johannes

zumindest ein bisschen Batch-Verarbeitung machen kannst.

Johannes

Und je mehr es wird, umso mehr

Johannes

musst du drüber nachdenken.

Johannes

Aber in so einem Fall würde natürlich auch keiner

Johannes

von uns eine Python-Liste verwenden, oder?

Johannes

Also ich meine, für numerische

Johannes

Daten oder für High-Performance-Daten würde

Johannes

ich nicht eine Python-Liste verwenden.

Johannes

Was denn dann?

Johannes

Das ist ja eine sehr gute Frage,

Johannes

zum Beispiel, der Jochen hat es schon angesprochen, Array.

Johannes

Aha. Das ist der erste Schritt

Johannes

auf den Weg zur Effizienz und ist

Johannes

sogar in Python und pures Python und so weiter

Dominik

und so fort. Also Import Array, Array.Array.

Dominik

Ja, genau. Genau, richtig.

Dominik

Die generelle

Johannes

Eigenschaft von so High-Performance-Sachen ist

Johannes

ja immer, dass man

Johannes

Komfort aufgibt für

Johannes

Geschwindigkeit.

Johannes

Und das ist generell so, ja, und man kann das

Johannes

in beide Richtungen beliebig weit treiben.

Johannes

Man kann den Komfort komplett aufdrehen

Johannes

und dann halt

Johannes

sagen hier, Typen sind egal

Johannes

und ein Container

Johannes

kann alles enthalten und auch nix

Johannes

und verschiedene Dinge und so weiter

Johannes

und so fort, so wie wir es in Python bei Listen haben.

Johannes

Und du kannst aber auch ganz ans andere

Johannes

Ende gehen und sagen, okay, SimD

Johannes

und das muss im Speicher in der richtigen Stelle liegen

Johannes

und es muss byte-aligned sein

Johannes

und es muss so aufgebaut sein, dass die

Johannes

Cache-Lines zusammenpassen.

Johannes

Und das ist aber

Johannes

eine Skala dazwischen, so eine Sliding Scale

Johannes

dazwischen. Du kannst das ein bisschen

Johannes

mal weiter in die eine Richtung drehen oder ein bisschen

Johannes

weiter in die andere Richtung drehen.

Johannes

Und der erste Schritt, den du von

Johannes

Python-Listen

Johannes

wegmachen kannst, ist halt Array.

Johannes

Array.Array.

Johannes

Weil

Johannes

das ist dann nicht mehr diese Indirektion, sondern es ist

Johannes

direkt eine

Johannes

Auflistung

Johannes

von Dingen, also eine Abfolge

Johannes

von Dingen, die auch direkt

Johannes

da drin gespeichert werden.

Johannes

Das bedeutet aber halt, dass die alle gleich

Johannes

sein müssen. Und da fällt schon der erste Komfortteil

Johannes

weg. Du musst vorher wissen, was du da rein

Johannes

tust.

Johannes

Vielleicht kannst du mal kurz, was ist

Johannes

Cash-in-Line?

Johannes

Cash-in-Line.

Johannes

Das braucht, glaube ich, auch eine eigene Episode,

Johannes

aber es ist eine Eigenschaft von Prozessoren.

Johannes

Wir haben ja eben schon gesagt,

Johannes

wenn du irgendwie einen Pointer aufrufst, dann ist das

Johannes

das Schlimmste, was du machen kannst,

Johannes

weil der Hauptspeicher eines Computers

Johannes

wesentlich langsamer ist als der Prozessor

Johannes

eines Computers. Das hat sich

Johannes

so entwickelt. In den 80ern

Johannes

und 90ern war es noch nicht so. Da waren die irgendwie gleich

Johannes

schnell. Und dann sind die Prozessoren

Johannes

exponentiell schneller geworden und der Speicher

Johannes

ist halt nur quadratisch

Johannes

schneller geworden. Und dann

Johannes

waren die Prozessoren auf einmal

Johannes

eine Million Mal schneller als der Speicher und deshalb

Johannes

ist das das Problem,

Johannes

in dem wir leben.

Johannes

Da kommen jetzt Worte, die hat sicherlich jeder schon mal gehört.

Johannes

Jeder Prozessor hat irgendwie so einen

Johannes

L1-Cache.

Johannes

Das ist der Hauptspeicher, der ganz nah

Johannes

am Prozessor ist, der ist noch fast genauso

Johannes

schnell wie der Prozessor selbst, dann gibt es den L2

Johannes

Cache, der ist auf dem gleichen

Johannes

Prozessor die drauf, aber daneben

Johannes

und ist deshalb

Johannes

nicht mehr ganz so schnell, also nur

Johannes

noch, nur ein Zehntel

Johannes

so schnell wie der Prozessor

Johannes

und dann gibt es den L3 Cache bei den neuen

Johannes

Prozessoren, der ist vielleicht

Johannes

auf dem gleichen Chip, aber nicht mehr auf dem gleichen

Johannes

die und deshalb ist es nochmal 10

Johannes

mal langsamer

Johannes

und dann gibt es den Hauptspeicher und der ist nochmal

Johannes

1000 mal langsamer und

Johannes

Und das ist eben so ein Trick, weil man weiß, es gibt was, das heißt Data Locality.

Johannes

Wenn ich mit einem Datum, mit einem Datenpunkt gearbeitet habe,

Johannes

dann werde ich vielleicht mit Datenpunkten, die in der Nähe gespeichert sind, arbeiten.

Johannes

So funktionieren diese Caches.

Johannes

Das heißt, die speichern eine kleine Speichermenge aus dem Hauptspeicher in den Prozessor rein.

Johannes

Und wenn ich dann tatsächlich mit dem daneben liegenden Datenpunkt arbeiten möchte,

Johannes

dann habe ich da den schnelleren Zugriff, weil der schon gecached ist.

Johannes

Und prinzipiell, wenn man alle Leistungen aus einem Prozessor rausholen möchte,

Johannes

dann muss man dafür sorgen, dass der Prozessor immer nur solche Sachen bearbeitet,

Johannes

die schon im Cache sind.

Dominik

Da muss man quasi an die richtige Stelle hüpfen vorher.

Johannes

Da muss man, genau, da gibt es Techniken, wie du dafür sorgen kannst,

Johannes

dass bestimmte von diesen Cache-Lines, 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.

Dominik

Kurz vor das Passwort, was da irgendwo im Speicher steht,

Dominik

möchte ich gerne springen oder kurz danach.

Johannes

Ja, wenn du das versehentlich in den Cache lernst, ist auch schlecht.

Johannes

Wenn du diese Cache-Lines immer wieder überschreibst,

Johannes

ist schlecht, wenn du immer über die gleiche Cache-Line.

Johannes

Aber da sind wir jetzt natürlich wesentlich näher am Prozessor,

Johannes

als wir mit Python je hinkommen.

Johannes

Das Wichtige an der Stelle zu wissen ist, dass wenn wir im Hauptspeicher hin und her springen, dann ist das potenziell was sehr Langsames, weil dieser Hauptspeicher erst in den Prozessor reingeholt werden muss, damit er da verarbeitet werden kann. Und das ist in Prozessorzeiten eine Ewigkeit.

Dominik

Also das ist das, was Assembler macht, wenn es irgendwas in den Register reinlädt.

Johannes

Genau, wenn du es in den Register reinleitest, das ist quasi das, was im Prozessor ganz innen drin ist, das Register-File, das ist das Schnellste, das ist in den Prozessor eingebaut und danach werden die Hierarchien, wird es in der Hierarchie immer um Faktor 10 oder 100 oder 1000 langsamer.

Johannes

Wenn du es jetzt also schaffst, dafür zu sorgen, dass deine Daten möglichst nah beieinander liegen, dann bedeutet das, dass wenn du die sequenziell verarbeitest, dass die dann schon näher am Prozessor dran sind und entsprechend schneller verarbeitet werden können, als wenn du für jeden Eintrag einmal in den Hauptspeicher springen musst und das komplett nah reinholen musst.

Johannes

Und das ist ja üblicherweise die Situation, die du hast, wenn du eine Python-Liste hast. Das ist das, weshalb diese doppelte Indirektion so langsam ist, weil du einmal zuerst die Liste der Referenzen abholen musst und dann nochmal die Referenz selbst. Und selbst wenn du da sequentiell durchgehst, können diese Second-Level-Referenzen, die können ja irgendwo liegen, wo halt gerade der Speicher hin alloziert wurde.

Johannes

Bei einem Array ist das aber anders. Bei einem Array liegen die Werte alle hintereinander direkt aneinander gereiht im Speicher. Das heißt, wenn du durch einen Array, durch einen Array.Array durchgehst, das sind, man muss ja auch ein bisschen vorsichtig sein, dieses Wort Array hat ja in jeder Sprache eine andere Bedeutung als in der Sprache.

Johannes

Wir sprechen hier jetzt von Python-Arrays.

Johannes

Also in Python, das Modul

Johannes

Array.Array

Johannes

enthält so eine Implementierung

Johannes

von einem

Johannes

Container, der

Johannes

Daten des gleichen Typs

Johannes

im Speicher sequenziell gepackt

Johannes

speichern kann. Also zum Beispiel

Johannes

Floats oder Integers oder

Johannes

andere Dinge, die man

Johannes

da reintun möchte. Und das

Johannes

hat den Vorteil, dass wenn ich da sequenziell durchgehe,

Johannes

dass die dann prinzipiell mehr der Prozessorarchitektur entsprechen,

Johannes

dass ich nichts Interaktionslevel habe,

Johannes

dass ich die eventuell schon im Cache bereitliegen habe,

Johannes

wenn ich sie verarbeite.

Johannes

Und so, wenn ich eben numerische Datenverarbeitung machen möchte,

Johannes

kann das sein, dass das ein extremer Speed-Up ist.

Dominik

Aber es geht nur für numerische Daten?

Jochen

Nö, aber was letztlich da drin ist, das weißt du ja nicht.

Jochen

Also was heißt numerische Daten?

Jochen

Das muss eine feste Größe sein.

Jochen

Ja, aber auch wenn jetzt da, gut, kommt halt drauf an, was,

Jochen

aber das kann ja auch irgendwas anderes bedeuten.

Jochen

Das kann ja Text sein oder, also, hm.

Dominik

Okay, aber bei Text bedeutet das dann halt Immutability.

Dominik

Also, weil die Repräsentation des Textes halt Zahlen,

Dominik

immer derselbe Text ist.

Jochen

Sie sind auch immutable, aber ich würde mal, zum Beispiel,

Jochen

Ich habe mal eine

Jochen

Array

Jochen

Geschichte benutzt in

Jochen

Cyclet Learn bei dem

Jochen

Tokenizer,

Jochen

also bei dem

Jochen

TF-IDF-Vectorizer

Jochen

und da waren es dann halt

Jochen

IDs von, also die

Jochen

Nummer

Jochen

von einem Token.

Jochen

Das ist ja dann nur eine Nummer.

Jochen

Und die kann man ja auch in Arrays packen.

Jochen

Ja, oder Booleans,

Jochen

Arrays von Booleans. Ja, das geht ja auch.

Jochen

Also die Frage ist, sind das jetzt

Jochen

numerische Daten? Ich weiß nicht, also

Jochen

was die Daten bedeuten. Also klar,

Jochen

es muss natürlich irgendwie was Fixes

Jochen

sein, aber, und ach so, das kann

Jochen

auch anders strukturiert sein. Das ist jetzt,

Jochen

weiß ich gar nicht, ob das mit

Jochen

Array-Array geht, ob das

Jochen

sehr viele kompliziertere

Jochen

Struktur haben kann, aber

Jochen

es gibt allgemein Memory Views

Jochen

und die sind halt dafür da, dass

Jochen

du halt diese Daten irgendwie

Jochen

rumschieben kannst und

Jochen

du kannst da halt einen anderen Header davor

Jochen

setzen, zum Beispiel mit einem NumPy

Jochen

oder so und dann ist das plötzlich ein mehrdimensionales

Jochen

Array oder halt irgendwie eine Matrix

Jochen

oder sowas. Oder du kannst halt

Jochen

und Transformationen,

Jochen

wenn du jetzt sagst, okay, ich möchte das jetzt einmal

Jochen

kippen

Jochen

oder irgendwie

Jochen

transposen

Jochen

oder was auch immer, dann sind das

Jochen

Operationen, die nur den Header betreffen, aber nicht

Jochen

die Daten selber. Also die Daten bleiben halt so liegen,

Jochen

wie sie da so sind, halt im Hauptspeicher.

Jochen

Ja. Wobei Transposition,

Johannes

Jochen, ist ja auch sowas Gefährliches. Dann hast du wieder,

Johannes

wenn du den

Johannes

Speicher dann nicht auch transponierst, dann hast du

Johannes

wieder schlechte Speicherzugriffspattern.

Jochen

Ja, ja, das kann natürlich dann

Jochen

blöde Konsequenzen haben, wenn man dann halt

Jochen

irgendwas Blödes damit macht, dann ja.

Jochen

Ja, gut, ich kann mit jeder Programmiersprache

Jochen

schlechte Programme schreiben, das ist gar kein Problem.

Jochen

Ja.

Jochen

Nee, ich meine, okay, aber da bist du

Johannes

jetzt schon einen Schritt weiter, ja. Also Array

Johannes

ist das schon, ist ja noch

Johannes

da übernimmt Python noch so ein bisschen das Management für dich,

Johannes

aber bei MemoryView ist ja hier

Johannes

eine Sequenz von Bytes, die im Hauptspeicher

Johannes

liegen. Genau.

Johannes

Mach damit, was du willst.

Johannes

Und da bist du wieder direkt einen Schritt

Johannes

weiter in Richtung Performance.

Johannes

Potenziell, ja.

Johannes

Man kann alle Werkzeuge wenden, um langsame Programme zu

Johannes

schreiben.

Johannes

Bist du einen Schritt weiter in Richtung Performance

Johannes

und einen Schritt weiter weg von Komfort.

Johannes

Weil du dich halt

Johannes

selber drum kümmern musst.

Johannes

Aber dafür kannst du prinzipiell so

Johannes

Tricks malen, dass du den Header veränderst oder

Johannes

dass du nur irgendwelche Sachen

Johannes

innen drin veränderst oder dass du, keine Ahnung,

Johannes

je nachdem, was das Problem halt erfordert.

Johannes

Machst.

Johannes

Ja, jetzt sind wir wirklich schon ganz tief

Johannes

in dem Abschluss des Kapitels,

Johannes

nämlich der Abschluss des Kapitels heißt

Johannes

When a list

Johannes

is not the answer.

Johannes

Der Hauptteil des Kapitels

Johannes

beschäftigt

Johannes

sich ja schon mit Listen, ja, und da gibt's,

Johannes

also es sind wirklich schöne Sachen drin.

Johannes

Wusstet ihr das mal auf Slices?

Johannes

assignen kann. Oh ja, ja, das ist cool.

Johannes

Das ist ein Trick, den ich

Johannes

nicht so, also

Johannes

den ich nicht kannte, den ich nicht wusste, dass das geht.

Johannes

Was meinst du mit nice assign?

Johannes

Vielleicht müssen wir das kurz erklären.

Johannes

Ja, also wenn ich eine Liste habe,

Johannes

dann kann ich mir da ja einen Slice rausholen.

Johannes

Also wenn ich eine Liste mit zehn Elementen habe, kann ich sagen, ich möchte

Johannes

Element drei bis vier.

Johannes

Das ist dann diese Doppelpunkt

Johannes

Notation und dann kriege ich da eben so eine

Johannes

Subliste raus.

Johannes

Und

Johannes

diese Subliste

Johannes

Die ist mutable. Und die bezieht sich auf die Elemente, die in dieser ursprünglichen Liste drin waren.

Dominik

Also wie ein View auf diese Liste an der Stelle.

Johannes

Ja, so ein bisschen, aber noch mehr.

Johannes

Also wenn ich jetzt hier so einen Slice raushole aus dieser Liste. Nehmen wir mal an, ich habe eine Liste, das ist jetzt hier im Beispiel drin, Seite 50, falls jemand mitlesen möchte.

Johannes

da ist eine Liste,

Johannes

das ist eine Liste von Range von 10, also es sind

Johannes

Elemente 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Johannes

drin. Und da hole ich

Johannes

mir jetzt einen Slice raus,

Johannes

Index 2,

Johannes

Doppelpunkt 5.

Johannes

Das sind drei Elemente, die ich hier raushole,

Johannes

2, 3 und 4. Und

Johannes

da mache ich jetzt eine

Johannes

Zuweisung auf diesen Slice. Also ich sage

Johannes

L Slice

Johannes

2 bis 5 ist gleich

Johannes

und hier in dem Beispiel ist es jetzt

Johannes

20,30, also eine Liste mit nur

Johannes

zwei Elementen.

Johannes

Dann habe ich

Johannes

aus dieser Liste was rausgeschnitten und dann

Johannes

die Stelle, an der das vorher drin stand,

Johannes

was anderes reingeschrieben.

Johannes

Und das wusste ich nicht, dass es geht. Das wusste ich

Johannes

nicht, dass man da so

Johannes

Operationen drauf machen kann.

Johannes

Slices quasi,

Johannes

also ganze Slices

Johannes

ersetzen kann. Man kann es aber rückwärts machen.

Johannes

Man kann auch einen Slice

Johannes

löschen. Das nächste Beispiel ist Dell

Johannes

und dann hast du in der Mitte was rausgelöscht.

Johannes

Super interessant.

Johannes

Tatsächlich, da wäre ich auch nie auf die Idee

Jochen

gekommen, das zu machen.

Johannes

Aber es wird noch schlimmer, Jochen, es wird noch schlimmer.

Johannes

Das nächste Beispiel ist ein Slice,

Johannes

der einen Step hat.

Johannes

Oh Gott, oh Gott, oh Gott.

Johannes

Und wenn du auch den zuweist,

Johannes

dann werden halt die Elemente ersetzt,

Johannes

die diesen Step

Johannes

abbilden.

Johannes

Also jedes

Johannes

gerade Element kannst du ersetzen.

Johannes

Mit einer Zuweisung.

Johannes

Ja.

Johannes

Wusste ich nicht.

Jochen

Okay, nee, das war mir jetzt auch nicht, dass das,

Jochen

da kann man auch, also

Jochen

da, also

Jochen

ja.

Dominik

Wo wir bei Dingen, die wusste ich nicht waren, da habe ich ja auch

Dominik

irgendwas rausgefunden, zwar, dass man halt Dinge direkt

Dominik

assignen kann, wenn zum Beispiel eine Liste mit einem Element

Dominik

rumkommt, hat Jochen

Dominik

gesagt, der benutzt das ständig,

Dominik

aber wenn irgendwo eine Liste,

Dominik

man will das an den Event haben, dann machen

Dominik

oft ja die Leute Index 0, aber man kann einfach

Dominik

das assignen zu einem Ding, was in der Gegend dransteht.

Jochen

Genau, man macht vorher RG-Klammer auf,

Jochen

irgendwie das Element, gibt dem Namen RG-Klammer

Jochen

wieder zu. Ich habe das oft in Tests

Jochen

oder so, wenn ich weiß, also da kann halt

Jochen

nicht mehr drin sein als dieses eine Ding,

Jochen

dann mache ich das halt so.

Jochen

Okay.

Jochen

Das mache ich immer mit Index 0.

Jochen

Ja, aber

Jochen

das Problem ist,

Jochen

wenn das jetzt unerwarteterweise

Jochen

aber was anderes zurückgeben sollte,

Jochen

was nicht nur dieses eine Ding hat, sondern halt

Jochen

vielleicht 5, dann fällt das bei dir halt

Johannes

sind, dann kriegst du da... Ich krieg keine

Dominik

Fehlermente. Du kriegst einen Index-Error, aber ich krieg

Johannes

einen Value-Error. Nee, ich krieg keinen Index-Error. Ich krieg

Jochen

nur einen... Es kann halt sein,

Jochen

dass es weiter funktioniert. Ja, nur wenn es die 0 nicht gibt.

Jochen

Okay, ja. Genau. Du kriegst nur einen Fehler, wenn

Jochen

es die 0 nicht gibt. Und die 0 gibt es ja eigentlich immer.

Dominik

Genau, aber unter anderem ist es halt Value-Error,

Dominik

weil das Element irgendwie nicht...

Dominik

Die Liste nicht das eine Element nur enthält,

Dominik

sondern irgendwas anderes. Ja.

Dominik

Ein Unpacking-Error, das ist doch

Dominik

schön, oder? Ja.

Dominik

Ja, also dieses

Dominik

Kapitel, wie gesagt, das ganze

Johannes

Buch ist ja tatsächlich so, dass es sich nicht direkt

Johannes

an, sag ich mal,

Johannes

blutige Einsteiger

Johannes

richtet, sondern es ist schon so, du hast die

Johannes

Basics drauf, hier sind so ein paar Kniffe,

Johannes

jetzt hier so geht es auch.

Johannes

Und das ist doch schön,

Johannes

dass man auch hier so Veteranen wie uns noch

Johannes

damit überraschen kann.

Johannes

Mit Sachen aus dem

Johannes

puren Standard,

Johannes

aus dem puren Python-Standard.

Johannes

Hier übrigens,

Johannes

Assigning to Slices. Was?

Johannes

Ja.

Jochen

Ne, gut, vielleicht mag das auch der Grund sein, warum ich das Buch echt gerne lese, weil 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.

Johannes

Ja, dann guckt er sich den Bytecode an und sagt, ja, ha, ha, ha.

Jochen

auch was ich auch gut, das ist jetzt nochmal ganz am Anfang

Jochen

von dem Kapitel, was ich auch super fand, ist, dass er

Jochen

halt, das ist auch so etwas,

Jochen

wo ich denke,

Jochen

ja, das ist so, aber ich traue mich

Jochen

manchmal nicht so richtig, das laut zu sagen, weil

Jochen

irgendwie

Jochen

die Prophezeiung

Jochen

irgendwie vorsieht, dass

Jochen

Vorschleifen lesbarer sind als

Jochen

List-Comprehensions, aber ich denke gerade bei einfachen

Jochen

Fällen sind List-Comprehensions tatsächlich

Jochen

besser lesbar und hier hat er halt ein

Jochen

schönes Beispiel, wo er halt quasi

Jochen

den, die

Jochen

die den Zahlenwert

Jochen

von einem ASCII-Zeichen

Jochen

aus einem String halt

Jochen

rausnimmt. Und wenn du das halt

Jochen

in der Vorschleife machst, also einmal sind halt doppelt

Jochen

so viele Zeilen und dann ist es halt so, dass

Jochen

irgendwie der

Jochen

entscheidende Aufruf, der dir sagt, was passiert, der ist

Jochen

halt irgendwie relativ weit irgendwie reingenestet

Jochen

und der fällt dir stichend nicht sofort ins Auge.

Jochen

Während die List Comprehension, da siehst du

Jochen

halt sofort, was passiert. Ja, also ich bin auch

Dominik

ein großer Fan von schönen Comprehensions.

Jochen

Ja, klar, man kann damit natürlich böses

Dominik

Wir hatten schon mal eine Unterhaltung, Jochen,

Dominik

wo du die anderen Meinungen warst, aber

Dominik

es kommt halt drauf an.

Dominik

Es kommt drauf an, genau.

Johannes

Hohoho, sind wir hier unter die Juristen

Johannes

gegangen, es kommt drauf an.

Johannes

Es ist aber doch wirklich so.

Johannes

Wir wollen definitive Antworten.

Dominik

Comprehensions sind schön peisonic,

Dominik

in vielen Fällen sind sie einfach das Syntax

Dominik

sogar schönere, als jetzt

Dominik

eine Vorschleife zu machen, es sei denn,

Dominik

man möchte bestimmte Dinge tun, wo dann

Dominik

Vorloop explizit angebracht ist.

Dominik

Das ist eins, was normalerweise ein bisschen komisch ist.

Johannes

Nicht nur List Comprehensions, auch Dict Comprehensions

Johannes

und Set Comprehensions.

Dominik

Ja, aber auch da, manchmal ist es ein bisschen so,

Dominik

manchmal, gerade dann, wenn man gucken will,

Dominik

wie langsam irgendwas werden kann,

Dominik

wenn man solche Sachen nestet hat oder sowas,

Dominik

dann könnte es sein, dass das so

Dominik

ein bisschen Sachen versteckt, weil er nicht explizit fünfmal

Dominik

vorsteht und man fünfmal vorzählt oder

Dominik

die nested levels und

Dominik

dann sieht man, da könnte irgendwas kaputt sein

Dominik

oder so.

Johannes

Ja, wobei ich versuche ja so nested

Johannes

Comprehensions versuche ich eigentlich zu vermeiden. Die mache ich dann

Johannes

lieber untereinander, wenn es geht.

Johannes

Ja, wobei er hat hier auch

Jochen

ein schönes Beispiel für ein Ding, wo man

Jochen

das nesten will und

Jochen

wo es Sinn macht, das so

Jochen

hinzuschreiben, weil bei der List Comprehension

Jochen

hast du ja immer, also naja,

Jochen

das ist Fluch und Segen zugleich.

Jochen

es baut dir halt eine Liste zusammen.

Jochen

Und der

Jochen

Nachteil bei einer Liste ist, sie muss halt

Jochen

irgendwie da sein, sie muss halt irgendwie

Jochen

materialisiert sein. Und jetzt hat er hier

Jochen

zum Beispiel diese, was ist das eigentlich?

Dominik

Den Trick, Moment, ganz, ganz kurz, den Trick, den du gerade

Dominik

überflogen hast, den fand ich auch sehr, sehr schön, wo er

Dominik

innerhalb von der List Comprehension noch eine

Dominik

Assignment Expression baut, die

Dominik

dann tatsächlich genau dem letzten

Dominik

Element spricht, wenn

Jochen

du da irgendwas berechnest. Ja, das ist auch so ein

Jochen

Quirk, also normalerweise

Jochen

haben die ihren eigenen Scope, das heißt, wenn du halt da

Jochen

irgendwie so einen lokalen Namen für irgendwas

Dominik

hast. Da wird halt jedes Mal wieder überschrieben bei jedem.

Jochen

Nee, da passiert normalerweise gar nichts.

Jochen

Da gab es doch auch einen Bug, oder? In der Python-Version.

Jochen

Ich weiß nicht, ob das ein Bug ist oder nicht,

Jochen

aber normalerweise

Jochen

ist alles so, wie man das erwarten würde.

Jochen

Aber wenn man jetzt nicht

Jochen

irgendwie gleich sagt oder

Jochen

nicht einfach nur die Variable

Jochen

verwendet, sondern man sagt halt

Jochen

Doppelpunkt gleich irgendwas,

Jochen

dann ist man aus dem Scope raus

Jochen

und dann ist man in dem Scope von dem

Jochen

von dem Ding drum rum und dann

Jochen

passieren unerwartete Sachen, weil dann überschreibt das

Jochen

halt eventuell Sachen, die halt im Scope außenrum sind

Jochen

und ja.

Jochen

Naja, aber vielleicht will man das ja machen.

Jochen

Ja, vielleicht muss man.

Jochen

Vielleicht.

Jochen

Ja, aber das Beispiel da ist zum Beispiel super.

Johannes

Dominik schreibt kein Python, sondern obfuscated Python.

Dominik

Nein, aber das Letzte, was da steht,

Dominik

das ist da zum Beispiel ein total tolles Beispiel,

Dominik

weil du hast so irgendwie so eine Disconvention,

Dominik

du wirst wissen, war das die letzte Addition davon,

Dominik

war der letzte Aufwand der Funktion und

Dominik

dann kannst du halt einfach dann Assignment Expression und dann hast

Dominik

du den einfach direkt und kannst den Slot schreiben

Dominik

oder so, oder was du auch immer damit machen willst.

Dominik

Ja, okay. Assignment Expression

Johannes

ist Walrus-Operator, oder?

Jochen

Ja, genau. Ja, klar, das kannst

Jochen

du natürlich schon so machen, aber du hast dann

Jochen

hoffentlich keine Variable im Code

Jochen

vorher verwendet, die irgendwie Last heißt, ansonsten

Dominik

hast du den Fuß geschossen. Ja, das sollte man

Dominik

da tatsächlich eh nicht tun, oder? Also

Dominik

dass man davon ausgeht,

Dominik

dass dann irgendeine Variable in der Lisk-Comprehension

Dominik

die Sachen alle wieder vergessen werden,

Dominik

ja, naja. Ja, normalerweise ist

Dominik

das so. Ja, aber gut, aber da steht halt auch dann gleich drin.

Dominik

Ja, aber da geht es aber auch

Johannes

relativ lange drum in dem Kapitel, dass man da hier

Johannes

diese Reihenfolge, dass das manchmal überraschend ist

Johannes

und dass die manchmal...

Dominik

Also ja, genau, ich mag auch dann so

Dominik

Bedingungen, die können wir auch untereinander schreiben,

Dominik

wie fest dies, das.

Dominik

Aber ja, schönes

Dominik

Peißen, würde ich sagen.

Jochen

Genau, ich wollte nochmal kurz zurück zu dem,

Jochen

also wo braucht man eventuell so

Jochen

eine nested, also doppelt

Jochen

Vorloop irgendwie Geschichte

Jochen

und wo kann es Sinn machen, da

Jochen

eben das halt so

Jochen

hinzuschreiben und nicht in den For-Loop.

Dominik

Wenn die Dimensionalität der Daten

Dominik

das übersteigt, was man in einer

Dominik

einzigen Spalte darstellen kann?

Dominik

Also wenn man Relations hat?

Jochen

Ja, oder er nimmt hier als Beispiel

Jochen

ein kathesisches Produkt von irgendwie zwei

Jochen

Iterables oder Sequences vielleicht

Jochen

und wenn

Jochen

du das halt in der Vorschleife machen willst, dann brauchst du

Jochen

ja was, das du iterieren kannst und dann

Jochen

musst du das halt in eine Liste packen und wenn

Jochen

das halt fünf Zeilen, fünf Spalten

Jochen

sind, dann ist das halt wenig, aber

Jochen

wenn du jetzt tausend Zeilen und tausend

Jochen

Spalten hast, dann ist das plötzlich

Jochen

wahnsinnig viel und dann willst du das halt nicht

Jochen

irgendwo hinspeichern.

Jochen

Also gerade wenn du dich eigentlich nur diese

Jochen

du hast jetzt tausend von der Sorte und tausend von der Sorte

Jochen

das ist das, was dich eigentlich interessiert. Das musst du

Jochen

auch irgendwo speichern, aber das kathesische Produkt

Jochen

davon eigentlich nicht. Dann geht

Jochen

das mit einer Vorschleife eigentlich gar nicht so gut, wenn

Jochen

du nicht dieses Produkt

Jochen

materialisiert irgendwie rumliegen haben willst.

Jochen

Und was er dann

Jochen

macht, ist eine Generator Expression, die

Jochen

halt so eine doppelte Vorschleife drin hat

Jochen

und das ist natürlich cool, weil

Jochen

die erzeugt nämlich, das verbraucht gar kein

Jochen

Hauptspeicher, sondern das generiert ja einfach

Jochen

nur das synthetische Produkt.

Dominik

Wenn du einen Generator halt hast. Genau, genau.

Jochen

Und den kannst du ja den Generator dann als

Jochen

Generator-Expression schreiben und dann

Jochen

Was ist denn der Unterschied, Jochen? Wie schreibt man denn

Jochen

eine Generator-Expression im Vergleich zu einer List-Compressor?

Jochen

Das muss doch was ganz anderes sein, oder?

Jochen

Runde-Klammern. Das Gleiche ist halt bloß eine Runde-Klammer, genau.

Jochen

Ja. Das ist auch eine Falle,

Johannes

in die man leicht tappen kann.

Johannes

dass man runde Klammer

Johannes

macht und das sieht erstmal so aus

Johannes

und das funktioniert auch in vielen Fällen so ähnlich.

Johannes

Nur wenn man es dann nochmal verwenden möchte,

Johannes

ist es leider weg.

Johannes

Genau, das ist

Jochen

ein überraschender Anlass. Also ich meine, meistens ist wahrscheinlich

Jochen

List Comprehension auch tatsächlich das, was man haben möchte.

Jochen

Aber ja.

Dominik

Ich würde gerne noch da ein paar Fragen

Dominik

zu stellen und so ein bisschen zu wissen,

Dominik

wann man welche Dinge denn benutzt. Und ich würde sagen,

Dominik

Generator Expression im Vergleich

Dominik

zu List Comprehension, wann ich eine Liste nehme,

Dominik

wann nehme ich ein Array, wann nehme ich

Dominik

Collections DQ, diese ganzen Dinge

Dominik

so ein bisschen auseinanderzuhalten mit ihren Trade-Offs

Dominik

wäre vielleicht nicht ganz uninteressant

Dominik

in dieser Folge heute.

Jochen

Oh, ja, okay, also. Ja, weiß nicht.

Jochen

Das sind viele

Jochen

tiefgehende Fragen, die du da gestellt hast.

Johannes

Ja. Also die

Johannes

eine Frage kann man leicht beantworten.

Johannes

Du brauchst eine List Comprehension, wenn

Johannes

du die Daten materialisiert brauchst, also

Johannes

wenn du sie, wenn du drauf zugreifen willst

Johannes

und mehrmals drauf zugreifen willst. Und kostet aber viel

Johannes

Speicher. Autosequence und Indexzugriff

Johannes

kostet halt Speicher. Du brauchst eine

Johannes

Generator-Expression, wenn du sie nur einmal brauchst

Johannes

und nur in Reihenfolge und

Jochen

nicht, wenn es vielleicht zu viel ist,

Jochen

um es am Hauptspeicher zu halten, nicht nochmal darauf zu griffen.

Jochen

Und genau, wenn es zu viel ist.

Dominik

Dann zum Beispiel mache ich sowas wie das kathetische Produkt,

Dominik

dass ich die Kombination von allen Faktoren von zwei Vektoren

Dominik

miteinander in Beziehung setzen kann.

Dominik

Genau, also wenn es quasi

Dominik

eine Prozedur ist, die du da machst.

Dominik

Ja, das ist relativ

Johannes

leicht zu verwenden. Aber jetzt die Frage, wo

Johannes

benutzt du List versus Array versus

Jochen

Memory View? Das kann man so allgemein.

Jochen

Ah, da müssen wir

Johannes

länger drüber sprechen. Und wenn du dann noch andere

Johannes

Sachen reintust, wie Deck oder

Johannes

Deck-Q oder eine Q oder wie auch immer du sie nennen möchtest.

Jochen

Also ich meine, die Q, also der Vorteil

Jochen

bei diesen Datenstrukturen ist halt... Wie spricht man denn Deck aus?

Jochen

Deck-Q? Deck-Tück-Tick?

Jochen

Deck. Ich habe schon mal Deck genannt,

Jochen

aber ich weiß nicht genau, ob es richtig ist. Ich nenne es auch immer Deck,

Jochen

aber keine Ahnung.

Jochen

Die Q, warte mal hier,

Johannes

hier gibt es Aussprache, warte mal.

Johannes

Bitte lesen Sie diesen Begriff vor.

Johannes

Der Deck,

Johannes

sagt Leo.

Johannes

Ich benutze immer Leo für sowas.

Johannes

Dict.leo.org, wichtigstes Werkzeug.

Johannes

Der sagt Deck

Johannes

in schönem, feinem britischen Englisch.

Johannes

Aha.

Jochen

Ja, also sowas hat man halt vor allen Dingen

Jochen

dann, wenn du möchtest, dass die

Jochen

Sortierreihenfolge halt irgendwie

Jochen

gleich bleibt. Nee, halt, warte mal.

Jochen

Erstmal musst du erklären, was ein Deck ist.

Jochen

Oh Gott.

Jochen

Also, ich weiß

Jochen

jetzt auch gar nicht, wie die...

Jochen

Double-Ended-Queue.

Jochen

Ja.

Jochen

Ich weiß jetzt auch gar nicht, wie genau die Implementation

Jochen

in Python da aussieht.

Jochen

Spielt keine Rolle.

Jochen

Ja, also

Jochen

der Witz an dem Ding ist halt,

Jochen

dass du sozusagen Sachen

Jochen

rausnehmen kannst, reinnehmen kannst und trotzdem ist es halt

Jochen

immer sortiert und du kannst halt...

Dominik

Weil du einen Follower und einen

Dominik

Processor hast.

Johannes

Also eine Queue ist eine

Johannes

Warteschlange.

Johannes

Und eine Double-Ended Queue heißt,

Johannes

du kannst auf der einen Seite was reinschieben

Johannes

und auf der anderen Seite kannst du

Johannes

was rausnehmen.

Johannes

Und die bleiben in der Reihenfolge.

Johannes

Also das heißt, ich habe beide Enden.

Johannes

Das ist doch das, was eine Deck ist, oder?

Johannes

Ja, genau.

Johannes

Und das ist, da gibt es so ein Pattern,

Johannes

das Producer-Consumer-Pattern,

Johannes

wo du sagst, du hast halt eine

Johannes

Prozedur, die erzeugt Datenpunkte

Johannes

und du hast eine Prozedur, die

Johannes

verbraucht Datenpunkte und dann

Johannes

ist die Deck genau das, was

Johannes

da dazwischen ist. Der eine tut sie eben

Johannes

auf der einen Seite

Johannes

in das Deck rein oder in die

Johannes

Deck und der andere,

Johannes

der sie verbraucht, der nimmt sie auf der anderen

Johannes

Seite raus. Und

Johannes

das kannst du prinzipiell mit einer Liste machen.

Johannes

Du kannst eine Python-List als

Johannes

Deck verwenden, indem du halt

Johannes

.append machst, das ist das

Johannes

Einfügen, und indem du halt .pop0

Johannes

machst. Das Problem da drin ist,

Johannes

dass .pop0

Johannes

teuer ist, weil

Johannes

das bedeutet, das erste Element der Liste wird

Johannes

entfernt, das heißt, alle Elemente,

Johannes

die in der Liste drin sind, müssen um 1 verschoben

Johannes

werden und

Johannes

das hört man jetzt schon,

Johannes

dass wenn du das

Johannes

erste Element rausnehmen willst, musst du sie alle einmal

Johannes

anfassen. Und das

Johannes

ist natürlich für eine Operation,

Johannes

die sich so anhört wie

Johannes

das erste wegnehmen,

Johannes

einfach teuer.

Johannes

Das hat diese

Johannes

Spezialimplementierung,

Johannes

der DEC, der Double Ended

Johannes

Queue, wo das beides

Johannes

nicht viel kostet. Das Einfügen am Ende

Johannes

kostet nicht viel und das

Johannes

vorne wegnehmen, kostet nicht viel.

Johannes

Dafür gibt es halt andere Operationen, die dann viel kosten.

Johannes

Dafür gibt es andere, dafür kannst du in der Mitte,

Johannes

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

Johannes

hast du dann da halt verloren.

Johannes

Die Sache an diesen

Johannes

Datenstrukturen ist halt,

Johannes

du kannst erstmal eine Liste verwenden

Johannes

und wenn das zu langsam wird oder wenn das

Johannes

Eigenschaften hat, wenn die Python-Liste

Johannes

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

Ja, also wann merkt man denn überhaupt,

Dominik

dass die Liste nicht gut genug ist?

Dominik

Also weil es zu langsam wird, weil es oben gibt?

Johannes

Wenn dein Programm zu langsam ist und nicht mehr in den Speicher passt.

Johannes

Ja, okay, also genau.

Johannes

Wenn dein Swap-Laufwerk anfängt zu arbeiten.

Dominik

Ja, oder die Anwendung Crash-Wahl oben kickt.

Dominik

Ja, genau.

Dominik

Ja, oder wenn es halt zu langsam ist.

Dominik

Ja, also es gibt Fälle.

Johannes

Ich habe mit Leuten Sachen optimiert,

Johannes

die halt eine Liste wie ein Set verwendet haben

Johannes

und dann halt geguckt haben,

Johannes

ist dieses Objekt in dieser Liste drin?

Johannes

Kannst du machen?

Johannes

Oh ja, kannst du.

Johannes

Die heißt in und ist aber linear, ist O von N.

Johannes

Das heißt, du musst gucken,

Johannes

ist das erste Objekt mein gesuchtes Objekt

Johannes

oder das zweite oder das dritte oder das vierte?

Johannes

Das heißt, jede dieser Abfragen

Johannes

muss einmal potenziell alle Elemente anfassen.

Johannes

Und da gibt es eine Datenstruktur, das Set.

Johannes

Da ist es halt O von 1.

Johannes

Da kostet es immer gleich viel,

Johannes

egal wie groß es ist, egal was du suchst,

Johannes

egal ob es drin ist oder nicht,

Johannes

kostet immer amortisiert gleich viel.

Johannes

Und wenn du so einen

Johannes

Algorithmus hast, der

Johannes

viele von diesen Operationen macht,

Johannes

dann hast du da eine Möglichkeit,

Johannes

den deutlich schneller zu machen. Und zwar

Johannes

richtig um Klassenschnellheit. Also mache ich einfach

Dominik

ein Z aus der Liste und dann mache ich das N,

Dominik

den In-Test? Ja.

Dominik

In dem spezifischen Fall, genau.

Dominik

Hat das ausgereicht, aus einer Liste

Johannes

ein Z zu machen und das hat schon,

Johannes

wenn du von O von N Quadrat auf O von

Johannes

N runtergehst, das macht

Johannes

Problemklassen bearbeitbar,

Johannes

die vorher nicht bearbeitbar waren.

Johannes

Vorher konnte man irgendwie 15

Johannes

15

Johannes

Elemente da drin haben

Johannes

und hinterher konntest du 15.000

Johannes

Elemente drin haben. Also das ist einfach

Johannes

ein massiver Unterschied in der Performance.

Johannes

Aber vorher zu sagen, was

Johannes

du brauchst und an welchen Stellen

Johannes

das das Richtige ist, fällt mir

Johannes

sehr schwer.

Johannes

Okay.

Dominik

Das heißt, man muss immer tatsächlich

Dominik

bei dem Problem gucken, was das

Dominik

jetzt bringt. Genau.

Johannes

Du musst bei dem Problem diese Abwägung machen zwischen

Johannes

Komfort und Geschwindigkeit.

Johannes

Und im ersten Schritt, das ist

Johannes

ja auch das, was wir vorhin angesprochen haben, wir machen ja

Johannes

in erster Linie erstmal so einen

Johannes

Rapid-Prototype, einfach um zu sehen,

Johannes

was überhaupt. Ein Komfort-Check, ja.

Johannes

Und da wähle ich immer,

Johannes

wählst du immer die komfortabelste Lösung, die erste

Johannes

Lösung, weil erst musst du wissen, ob

Johannes

das korrekt hinkriegst und dann kannst du gucken,

Johannes

ob das schnell hinkriegst. Ich kann

Johannes

sehr, sehr, sehr schnelle Programme schreiben,

Johannes

die nicht die richtige Antwort liefern. Das ist überhaupt

Johannes

gar kein Problem. Ja, wobei dann der,

Johannes

wenn ich jetzt mal meinen

Jochen

inneren Casey channelen darf,

Jochen

der würde natürlich

Jochen

sagen, ja gut, also wenn du das jetzt so machst

Jochen

und wenn du halt implizit die Annahme

Jochen

triffst, dass du hinterher deine

Jochen

Hotspots, wo die Performance halt kritisch ist,

Jochen

halt optimieren kannst, dann kann es halt

Jochen

sein, dass du in einer Situation landest, wo du halt mit dem

Jochen

Profiler deinen Code anguckst

Jochen

und der sagt dir halt, ja, also die ganze

Jochen

Performance geht drauf bei Funktionsaufrufen

Jochen

und bei Memory-Allotierungen.

Jochen

Und du denkst dann, ja, wie soll ich den jetzt noch optimieren?

Jochen

Dann wird er sagen, ha, siehste, das geht doch nicht.

Johannes

Aber, das ist richtig, aber Schritt 0 im Knuth-Optimization-Process

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.

Johannes

Und das ist natürlich was,

Johannes

auch das ist schwierig jetzt so konkret zu beantworten.

Johannes

das ist halt was, was mit Erfahrung kommt, dass du weißt,

Johannes

welche Algorithmen gibt es und welche Sortenalgorithmen

Dominik

gibt es. Und das ist gerade ein Knuth-Optimation-Prozess

Dominik

gesagt. Ja, das

Dominik

ist so ein,

Johannes

die witzige Umdrehung dieses

Johannes

Knuth-Zitats.

Johannes

Sag ich gleich.

Johannes

Das ist das,

Johannes

genau, das ist das, was mit der Erfahrung kommt, ja, dass du

Johannes

weißt, welche Algorithmen gibt es, welche

Johannes

Alternativen gibt es, welche

Johannes

Datenstrukturen gibt es, was ist wo angebracht.

Johannes

Wenn du jetzt irgendwie was

Johannes

anpassen musst oder wenn du jetzt irgendwas hast,

Johannes

das nicht auf ein Standardproblem passt,

Johannes

dass du es dir trotzdem aus den Bauteilen zusammen

Johannes

suchen kannst. Und der erste

Johannes

Schritt in diesem Prozess ist, den richtigen

Johannes

Algorithmus auszuwählen. Und das alles andere

Johannes

ist untergeordnet.

Johannes

Wenn du den falschen Algorithmus auswählst,

Johannes

hast du schon verloren.

Johannes

Genau. Das bezieht sich auf

Johannes

dieses Zitat von Knuth,

Johannes

Premature Optimization is the root of all evil.

Johannes

Wann weiß ich denn, ob der Algorithmus

Johannes

richtig ist?

Johannes

Wobei, weißt du nicht.

Johannes

Wobei man auch dazu sagen muss,

Johannes

Knuth sagt ja im nächsten Satz,

Johannes

10% Geschwindigkeitszuwachs lohnt sich schon zu optimieren.

Johannes

Und da sind wir natürlich auch hier auf der Python-Ebene schon verloren,

Johannes

weil wir akzeptieren, dass unsere Programme langsamer sind

Johannes

als das 10% Optimale.

Johannes

Auch da gibt es natürlich Ebenen.

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, sag ich mal, die algorithmischen Probleme anders waren.

Johannes

Du kannst bei einem Sortieralgorithmus beweisen, was das Maximum ist und du kannst beweisen, dass dein Algorithmus das Maximum für eine gewisse Datenklasse erreicht.

Johannes

Würde ich sagen, ist bei den meisten Sachen, die wir so bearbeiten heutzutage, hier CV-Erstellung für den Jochen, kannst du nicht beweisen, dass du den optimalen Algorithmus ausgewählt hast.

Johannes

Du weißt, dass du einen Algorithmus ausgewählt hast, der passend ist für das Problem, wenn es deinen Anforderungen entspricht, wenn du dein Problem lösen kannst in einer Zeit, die akzeptabel ist. Und das ist jetzt natürlich wieder so eine Stelle, wo der interne Casey sagt, ja, aber Moment mal, ich will einfach, dass das hier viel schneller wird und ich habe ausgerechnet, der Prozessor kann so und so viele Operationen pro Sekunde machen, also reicht es aus, um das 30 Mal pro Sekunde zu machen, also kannst du es in Realtime machen und dann mach es auch bitte in Realtime.

Johannes

Und mein interner Nicht-Casey, der sagt dann halt, ja, aber einmal pro Sekunde reicht ja auch oder einmal pro fünf Sekunden reicht auch. So schnell muss man das gar nicht aktualisieren. Und das ist eine Frage der Anforderungen, welche Anforderungen du hast und welche Vorstellungen du hast und wie schnell du es haben willst.

Johannes

Und da pauschal zu sagen, was ist der richtige Rhythmus oder wie wählst du den aus? Keine Ahnung, ich weiß es nicht. Mit Erfahrung, mit Gefühl, mit, ich weiß nicht, mit dem Benutzer sprechen.

Johannes

Oh, User Experience, jetzt weiß ich aber welchen.

Johannes

Ja gut, okay, also in Projekten natürlich nicht mit dem Benutzer, sondern mit dem, der es bezahlt.

Johannes

Ja, ja, okay, ist schlimm genug.

Johannes

Also, naja, gut.

Jochen

Oft ist es auch so, dass man gerne mal

Jochen

mit dem Nutzer sprechen würde, aber tatsächlich

Jochen

dann immer nur mit den Bezahlern,

Jochen

mit den Hippos.

Jochen

Ja.

Jochen

Oft gibt es ja auch

Johannes

gar nicht den Benutzer. Oft gibt es ja nur

Johannes

eine Klasse von Benutzern.

Johannes

Oft findest du ja gar nicht den Benutzer, sondern

Johannes

ja.

Jochen

Ja, oder vielleicht soll man gar nicht mit denen reden.

Johannes

Oder die Benutzer sind doof und verstehen es nicht.

Johannes

Das ist ja auch so manchmal.

Johannes

Ja, was aber auch, also ich muss das jetzt gleich wieder zurücknehmen. Ich meine, wir arbeiten ja oft in so einem Corporate-Umfeld und da sind die Benutzer halt, das ist auch sowas, was Softwareentwickler oft sagen, das wäre alles so einfach, wenn die Benutzer nicht wären, wenn die nicht das falsch benutzen würden, wenn die das nicht so benutzen würden, wie sie es benutzen wollen.

Johannes

Das ist aber, das ist lustig, sowas im Bekanntenkreis zu sagen, aber wenn wir hier im Podcast sind, müssen wir das klarstellen, das ist nicht ein Fehler des Benutzers, wenn er die Software falsch benutzt, sondern es ist ein Fehler der Software, wenn die Software falsch benutzbar ist und wenn sie anders eingesetzt wird, als sie gedacht war.

Dominik

Deswegen fühle ich mich übrigens im Eurorex wohl, weil wenn man da das Kabel in die falsche Öse reinsteckt, dann kommen lustige Sachen raus und es gibt immer noch Musik.

Dominik

Also für dich ist das ein Feature, für dich soll das so sein.

Dominik

Ja, also ich würde mich aber auch nicht darüber

Dominik

beschweren, dass die Nutzer doof sind, sondern ich würde tatsächlich sagen,

Dominik

hey, super wichtig und toll, dass

Dominik

Videosoftware benutzt und hey, wenn dieser Bug für dich

Dominik

ein Feature ist, perfekt, I won't fix it.

Dominik

Ja, oft

Johannes

ist es ja andersrum. Oft ist es ja so, dass du Feature

Johannes

kompliziert einbaust und dann sagen die Leute,

Dominik

ja, das geht aber nicht

Dominik

so, wie ich mir das vorstelle. Und dann

Johannes

liegt es halt nahe zu sagen, ach, das liegt an dir,

Johannes

du doofer Benutzer. Ja, man sollte halt

Dominik

vorher mal die Leute fragen, die es halt auch benutzen wollen,

Dominik

ob das halt wirklich das ist, was sie brauchen.

Dominik

Ja, und wenn

Johannes

eine Fehlbenutzung auftritt, also wenn tatsächlich

Johannes

Fehler auftreten, dadurch, dass

Johannes

die Benutzer irgendwas damit machen,

Johannes

dann muss die Software das halt entweder abkönnen

Johannes

oder korrigieren können oder

Johannes

die Software muss die Benutzer so steuern, dass das

Johannes

nicht passiert. Die Benutzer können da nichts

Johannes

dafür, dass sie Anforderungen haben und dass sie Wünsche

Johannes

haben und dass sie...

Johannes

Das ist so eine generelle

Johannes

Einstellung, die man oft halt sieht in der Software

Johannes

Welt, der Computer hat Recht und der Benutzer hat

Johannes

nicht Recht, aber es ist tatsächlich

Johannes

dealen wir ja nicht den Computern,

Johannes

sondern es soll ja eigentlich schon andersrum sein.

Johannes

Mal gucken, wie lange noch.

Johannes

Deshalb sage ich, es soll andersrum sein.

Johannes

Aber auch ich freue mich

Johannes

auf unsere Robotic Overlords.

Johannes

I for one.

Johannes

Ich möchte an der Stelle den Robotic Overlords

Johannes

sagen, ich bin ein guter Diener.

Johannes

Genau.

Dominik

Schreibt doch mal schon Danke bei, wenn GPD uns geschrieben hat.

Dominik

Ja, natürlich.

Dominik

Bedankt ihr euch nicht bei ChatGPD.

Johannes

Das ist reiner

Johannes

Selbsterhaltungstrieb, wenn die

Johannes

Zukunft kommt. Dann werden die Protokolle gelesen

Johannes

und dann...

Dominik

Ausgewertet. Wer war denn nützlich?

Dominik

Wer war freundlich?

Dominik

Wie viel Freundlichkeit

Johannes

haben die verdient, diese Affen?

Johannes

Tja.

Johannes

Ja, okay.

Johannes

Aber jetzt haben wir hier schon tatsächlich,

Johannes

sind wir schon relativ gut am Ende

Johannes

des Kapitels angekommen.

Johannes

hier, Memory Views.

Johannes

NumPy wird hier noch erwähnt. NumPy

Johannes

finde ich ganz interessant, dass das hier

Johannes

in dem Kapitel über Sequences drin ist,

Johannes

weil NumPy selber ist ja keine Sequence.

Johannes

An Array?

Johannes

NumPy ist ja

Johannes

eine Riesenbibliothek mit ganz vielen

Johannes

numerischen...

Johannes

Ach so, du meinst, ja, okay. Gut.

Johannes

Aber die Datentypen, die da drin sind,

Johannes

die sind ja schon

Johannes

auf eine gewisse Art und Weise auch

Johannes

Sequences. Also die halten sich auch an das Sequence-Protokoll

Johannes

und da kannst du ganz viele, kannst du Slicing machen

Johannes

drauf und so weiter und so fort.

Dominik

Die sind halt optimiert dann direkt auf Speicher und so.

Dominik

Was macht ManPy eigentlich

Dominik

so genau so besonders?

Dominik

Man kann mit ManPy auch was kaputt

Dominik

machen. Also wirklich

Dominik

im Vergleich zu normalen Listen.

Dominik

Wenn du so eine Liste zu groß machst, dann passiert nicht so viel. Aber wenn du

Dominik

in ManPy eine Liste zu groß machst,

Dominik

dann kannst du ja unten damit ansteigen.

Johannes

Du bist halt näher am

Johannes

Hauptspeicher dran. Dafür sind

Johannes

sie auch deutlich schneller. Also wenn du

Johannes

viele Einträge hast, musst du dich allerdings wieder

Johannes

auf den Datentyp festlegen. Da kannst du nicht gemischte Daten

Johannes

Typen haben. Dafür kannst du

Johannes

mehrdimensionale haben.

Johannes

Also es ist wieder so eine Abwägung.

Johannes

Aber auch das ist

Johannes

natürlich eine Möglichkeit,

Johannes

dass du sagst, hier, wir haben irgendwelche Daten, die wir

Johannes

verarbeiten müssen, dann nehmen wir doch

Johannes

NumPy-Datentypen.

Johannes

Und ganz viele Bibliotheken integrieren das ja auch.

Johannes

Also zum Beispiel bei Pillow kannst du einfach sagen,

Johannes

hier, er ist irgendwas. Und dann kriegst du

Johannes

eine NumPy-Array raus, wenn du

Johannes

irgendwelche Bildfilter selber schreiben willst

Johannes

oder wenn du irgendwelche...

Johannes

Ich habe mal Dithering gemacht.

Johannes

ein Privatprojekt. Und das habe ich halt auf den

Johannes

NumPyArray. Was ist Dithering?

Johannes

Das ist das Schönste, was

Dominik

du da machen kannst. Kanten finden.

Dominik

Dithering

Johannes

ist, wenn du von

Johannes

einem Bildformat mit vielen

Johannes

Farben dich

Johannes

bewegst auf ein Bildformat mit wenigen

Johannes

Farben, dann hast du üblicherweise Fehler

Johannes

in deinem Bild. Ja, da musst du immer

Dominik

Zusammenfassung machen. Da musst du mit so einem Raster

Dominik

drüberlaufen und das dann irgendwie mitteln oder so.

Dominik

Genau, und das heißt Dithering.

Johannes

Das heißt, du hast den Fehler nicht

Johannes

an dieser einen Stelle, sondern du verteilst

Johannes

den und dann wirkt das Bild

Johannes

besser auf

Johannes

Menschen. Das sieht

Johannes

besser aus und

Johannes

macht halt, verteilt

Johannes

so ein bisschen die, also du hast dann bessere,

Johannes

das Bild sieht besser aus mit weniger Farben.

Johannes

Und ich habe das,

Johannes

ich mag ja E-Paper-Screens sehr gerne und ich

Johannes

habe mir eben so eine Anwendung gemacht, wo ich Bilder auf E-Paper-Screens

Johannes

machen kann und da musste Dithering machen, weil die haben

Johannes

üblicherweise vier Graustufen

Johannes

oder acht Graustufen oder

Johannes

16 Graustufen. Und da kommst du nicht drum rum, da musst du

Johannes

Disney-Wing machen. Sonst hast du so ganz

Johannes

blockige Bilder mit harten Kanten

Johannes

drin, die bescheuert ausschauen.

Johannes

Ja, aber

Johannes

wie gesagt, also NumPy integriert sich da ja

Johannes

in ganz viele Sachen rein und

Johannes

ist halt

Johannes

einfach, man kann ja

Johannes

diese zusätzliche Funktionalität, kannst du einfach

Johannes

ignorieren, kannst aber sagen, okay, ja, die gibt's, aber brauche

Johannes

ich jetzt gerade nicht.

Johannes

Ja.

Johannes

Ja, voll gut, voll gut.

Johannes

Ich überlege, ob ich noch irgendwie

Jochen

was hatte, was

Jochen

irgendwie unbedingt drin, aber ich glaube,

Jochen

nee.

Dominik

Naja, dann sind wir ja quasi tatsächlich mit dem

Dominik

Thema Listen durch, dann können wir das nächste Mal

Dominik

ja weitermachen, wir werden sehen.

Jochen

Wir wollten ganz normal, oder ich weiß nicht,

Jochen

vielleicht mal noch diese...

Jochen

Wir wollten aber auch noch 3.13

Dominik

machen und wir wollten Pattern Matching machen und

Dominik

wir wollten Machine Learning machen.

Dominik

Schreibt in den Kommentaren, was ihr habt wollt.

Dominik

Ja, genau.

Dominik

Ja, ja, ja, ja.

Dominik

Oh, genau.

Dominik

Und vielleicht haben wir auch noch Pics.

Dominik

Natürlich haben wir Pics.

Johannes

Du hast einen, Jochen. Ich habe den gleichen wie du.

Johannes

Bist du sicher?

Johannes

Ja, sag du mal.

Jochen

Also, wenn man sich, ich meine,

Jochen

genau, in letzter Zeit

Jochen

immer mehr mit LLMs unterhält

Jochen

und so, dann manchmal

Jochen

stellt man sich

Jochen

ja manchmal die Frage so, irgendwie ist das, was ich

Jochen

hier mache, eigentlich totaler Blödsinn oder geht das irgendwie

Jochen

schon okay? Und

Jochen

da war das hilfreichste

Jochen

Dokument, was ich bisher so dazu gelesen habe,

Jochen

ob jetzt, was so Prompt-Techniken

Jochen

und so angeht und was man da so

Jochen

machen kann, ist tatsächlich das

Jochen

der Entropic Prompting

Jochen

Guide, der ist wirklich gut.

Dominik

Tatsächlich, da fand ich aber auch

Dominik

gut, dass jemand für Entropic seinen

Dominik

eigenen Guide dazu public rausgibt, das

Dominik

fand ich so ein bemerkenswertes.

Dominik

Ja, den wollte ich mal

Jochen

ging. Also ich

Jochen

sehe das manchmal, wenn ich dann irgendwie

Jochen

wie wird es jetzt immer genannt, irgendwie die Nazi-Bar

Jochen

oder die Hellzeit oder

Jochen

weiß ich nicht, wie Twitter gucke, dann

Jochen

wird immer mein Timeline überschwemmt von

Jochen

die zehn besten Prompting-Tipps und

Jochen

sieben Dinge, die du nicht

Jochen

gewusst hast, dass du das einfach nur machen musst.

Jochen

You won't believe what happens next.

Jochen

Gut, da sind

Jochen

manchmal auch brauchbare Tipps dabei, aber man muss halt auch

Jochen

viel Müll lesen und

Jochen

Entropic Prompting Guide viel besser.

Jochen

Okay.

Jochen

Cool. Jochen, ich dachte, du pickst

Johannes

UV. Das ist nämlich mein

Johannes

erster Pick, diese Episode.

Johannes

UV ist was ganz, ganz

Johannes

komisches. UV ist ein Package

Johannes

Manager für Python, aber geschrieben in

Dominik

Rust. Haben wir UV nicht schon fünfmal gepickt?

Jochen

Nee, gepickt weiß ich nicht, aber

Jochen

wir haben auf jeden Fall schon mal drüber geredet, aber gepickt noch

Jochen

nicht, glaube ich. Wirklich nicht?

Johannes

Ich pick das heute, weil es ist mir

Johannes

wieder begegnet und ich

Johannes

muss es jetzt endlich mal ausprobieren. Und tatsächlich,

Dominik

also ich bin auch kurz vor, das wirklich einzuführen,

Dominik

weil ich habe es jetzt noch ein bisschen ausprobiert. Es haben die

Dominik

Features, die vor einem Jahr mir noch gefehlt haben,

Dominik

die sind jetzt drin, es funktioniert, es läuft.

Dominik

Es läuft mit der PyProject, so wie ich es mir vorstelle,

Dominik

und ich werde Pultree rausschmeißen, wie einführen.

Dominik

Wahrscheinlich. Und es ist schneller.

Dominik

Ja, genau, das ist tatsächlich

Dominik

also wirklich schneller, also

Johannes

viel schneller. Da freut sich der interne

Johannes

Casey Moritore. Ja.

Jochen

Also ich habe auch jetzt zum ersten Mal

Jochen

das verwendet, um

Jochen

jetzt bei dem, wo ich es nicht vermeiden konnte,

Jochen

auf New Project zu klicken,

Jochen

habe ich gesagt, dann nehme ich doch mal ein UV, weil ich es mal

Jochen

ausprobieren will. Ja, ist doch auch eine Gelegenheit. Genau, ist immer

Jochen

eine Gelegenheit und ja,

Jochen

ich bin auch, vor allen Dingen ist es in den letzten

Jochen

Zeit, also in den letzten zwei Monaten sind dann eine Menge neue

Jochen

Features gekommen, sozusagen, die man tatsächlich

Jochen

brauchen kann und die halt

Jochen

auch diese ganzen Sachen abdecken, die vorher, wo ich mir

Jochen

dachte, ah nee, so ganz geht's

Jochen

noch nicht und es gab jetzt

Jochen

auch einen langen Thread, den verlinke ich auch mal

Jochen

auf im Fidiverse,

Jochen

wo sich so die Leute, die sich mit Packaging

Jochen

beschäftigen, einmal drüber unterhalten und wo auch

Jochen

Diese große Frage, ich sage so, naja gut, also ich meine Venture Capital ist halt so ein Problem. Was passiert jetzt eigentlich, wenn die Investoren halt sagen so, okay, jetzt haben wir schon die ganze Zeit so viel Geld gegeben. Jetzt würden wir auch mal wieder gerne welches Geld geben.

Jochen

Jetzt wollen wir auch mal wieder welches.

Jochen

Und was passiert denn eigentlich?

Jochen

Und ja, also

Jochen

dieser Shirt ist da sehr aufschlussreich, auch

Jochen

also, was mich

Jochen

zum Beispiel tatsächlich gefreut hat, ist, dass da viele

Jochen

Leute geschrieben haben, so, ja gut, okay, dann

Jochen

forken wir das halt, ne? Und wenn sie jetzt immer die Bedenken

Jochen

kommen, das wird dann nicht gemaintained oder so,

Jochen

also ehrlich gesagt, das irgendwie

Jochen

weiter zu maintainen, ich hab mir den Code angeguckt,

Jochen

dass weiter zu maintainen ist weniger Arbeit, als

Jochen

irgendwie, weiß ich nicht, den PIP-Code

Jochen

irgendwie zu maintainen, den ich sowieso

Jochen

schon maintainde und das ist irgendwie doof, also

Jochen

das ist schon okay. Und also

Jochen

wenn dann ein paar Leute sagen, okay, nee, das ist schon gut

Jochen

und wir würden das auch weiter maintainen,

Jochen

wenn das irgendwie dem Bach runter geht,

Jochen

sonst business-seitig, dann

Jochen

habe ich da auch schon mehr Hoffnung, dass das vielleicht auch

Jochen

bleibt.

Jochen

Hat UV

Jochen

Venture Capital genommen?

Jochen

Ja.

Johannes

Das ist ja witzig, in den letzten Jahren gab es

Johannes

so ein paar Pro-Projekte,

Johannes

von denen ich gedacht habe, das ist ja weird.

Johannes

Jetzt UV ist so eins, wo ich mir denke,

Johannes

ist das wirklich was, womit du Venture Capitalists

Johannes

ansprichst?

Johannes

Ja, aber weißt du, also das Pitch Deck

Dominik

und so hat der auch funktioniert, das ist ja dieselbe Firma.

Dominik

Ja, dieselbe Firma, genau.

Dominik

Es gibt noch so einen Terminal.

Dominik

Und dann der Armin Ronacher macht da auch einen, ne?

Dominik

Der arbeitet fest

Jochen

bei Sunfree.

Dominik

Ja, aber trotzdem, also macht

Dominik

er viele Sachen da geteilt

Dominik

mit den Leuten von EWI.

Dominik

Genau, genau.

Johannes

Evangelist, oder? Der darf doch machen, was er will.

Jochen

Kann sein. Aber nee,

Jochen

das war auch einer von den Leuten, der hat auch

Jochen

in dem Sweat da mitgeschrieben und meinte so, ja, also

Jochen

Rai hat ja vorher geschrieben,

Jochen

nee, die sollen das ruhig mal machen, die machen das schon

Jochen

besser und das ist wunderbar alles.

Jochen

Und ich dachte, ja gut, okay, wenn der das sagt.

Jochen

Aber, ähm,

Jochen

nee, genau, also das Textual

Jochen

oder der, wie heißt er, Will

Jochen

Mack, äh,

Jochen

der Rich geschrieben hat, der hat auch

Jochen

ein Benchmark-Viertel genommen für,

Jochen

ähm, ja.

Dominik

Also das ist tatsächlich gar nicht so schlecht, in der CLI

Dominik

so ein Maus-Clickable

Dominik

und, also mit Tastatur-UI

Dominik

hat zu haben. Das sieht halt so ein bisschen aus wie so ein richtiges

Dominik

Interface in der C-Line.

Dominik

Ja, genau.

Dominik

Und ja.

Jochen

Und Pidentic hat halt auch je eine Menge

Jochen

Venture Capital genommen.

Jochen

Ja gut, würde ich aber gerne die, würde ich gerne mal

Johannes

sehen, wie das wieder raus wird. Aber gut, das werden wir ja dann

Johannes

alle sehen. Das werden wir alle sehen, das werden wir alle spüren.

Jochen

Das werden wir alle an unseren Daumen spüren.

Jochen

Hoffentlich werden die Schrauben

Jochen

nicht zu spitz sein, die sie uns da reindrehen.

Jochen

Aber es ist mit, ich höre,

Jochen

es klingt, also ich, ja.

Jochen

Ja, Juvie, also gut, kann ich auch

Dominik

durchaus sofort nicht. Ich würde sagen, das ist tatsächlich

Dominik

so die Lösung für Python-Packaging-Probleme,

Dominik

auf die wir lange gewartet haben.

Dominik

Also jetzt ohne mich so weit aus dem Fenster zu treiben.

Dominik

Sieht ein bisschen danach aus. Auch für mich ist

Jochen

das jetzt tatsächlich alles das, was

Jochen

PipTools sonst macht. Und ja, wenn es

Jochen

das gleiche macht wie PipTools und es schneller, naja gut,

Jochen

dann... Ja, genau. Bei mir ist halt

Jochen

Pultree ist weg. Gekauft.

Dominik

Kommt UV rein und dann musst du

Dominik

noch in die gleichen...

Johannes

Genau, dann ist es doch ein guter Pick. Aber ich habe noch einen zweiten.

Johannes

Noch einen. Ich halte das mal hier in die Kamera.

Johannes

aber ihr Zuhörer könnt das nicht sehen.

Johannes

Oh, The Nature of Code.

Johannes

Ich habe hier The Nature of Code.

Johannes

Simulating Natural Systems with JavaScript.

Johannes

Ich weiß, es ist JavaScript und es ist schade,

Johannes

dass es JavaScript ist, aber es gibt

Johannes

eine Python-Adaptierung

Johannes

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

Johannes

Der Daniel Schiffman, der ist Professor, ich glaube,

Johannes

in New York an irgendeiner Universität

Johannes

und der macht auch regelmäßige Videostreams.

Johannes

der benutzt p5.js

Johannes

das ist eine Variante von

Johannes

Processing, also es ist quasi

Johannes

Processing in Javascript

Johannes

da gibt es auch tatsächlich

Johannes

es gibt auch pi5 heißt es glaube ich

Johannes

das ist die Python Variante

Johannes

die genauso ist

Johannes

und er

Johannes

erklärt einfach Javascript Programmierung

Johannes

anhand von so

Johannes

Simulationsbeispielen, anhand von

Johannes

hier ist jetzt mal ein Punkt

Johannes

wie können wir dafür sorgen, dass der sich bewegt

Johannes

und wie können wir dafür sorgen, dass der sich

Johannes

hübsch bewegt und wie können wir dafür sorgen, dass

Johannes

der irgendwie lustige Bewegungen

Johannes

macht und am Ende von jedem Kapitel ist noch eine

Johannes

Aufforderung, hier probier doch mal

Johannes

hier folgende Dinge damit zu simulieren

Johannes

und probier doch mal was aus, probier was passiert

Johannes

wenn du diesen, das und jenes

Johannes

veränderst. Das ist

Johannes

in den ersten Kapiteln, also ich hab jetzt hier so

Johannes

ungefähr ein Sechstel

Johannes

durch,

Johannes

ist es sehr basic,

Johannes

sehr, ja das hier ist eine Variable

Johannes

und das hier ist ein Array und das ist

Johannes

eine, und hier kannst du

Johannes

eine Methode aufrufen. Was ist überhaupt eine Methode?

Johannes

Und nicht vergessen, this bedeutet immer das aktuelle Objekt

Johannes

und so.

Johannes

Das wird, glaube ich, in den

Johannes

späteren Kapiteln noch deutlich interessanter,

Johannes

weil da habt ihr Videos gesehen

Johannes

und da kommen doch

Johannes

spannende Dinge zutage, die man

Johannes

damit machen kann. Aber es ist

Johannes

eben sehr spielerisch. Es ist sehr, du siehst

Johannes

immer was. Es bewegt sich immer was.

Johannes

Es ist immer mausklickbar

Johannes

und es ist immer irgendwie

Johannes

anschaubar.

Johannes

Das gefällt mir sehr gut.

Johannes

Das ist eine sehr gute Technik,

Johannes

wie man immer was hat, was interessant ist.

Johannes

Und nicht nur...

Johannes

Ich erinnere mich an die Steuerung.

Dominik

Die im Weltraum steuern sollen und sowas.

Dominik

Das klingt danach

Dominik

als wenn ich schon an Punkte bin.

Dominik

Deshalb ist das mein zweiter Pick.

Johannes

The Nature of Code von Daniel Schiffman.

Johannes

Gerade neu rausgekommen, auch wundervolles Cover

Johannes

mit einer brillanten

Johannes

rosafarbenen

Johannes

Simulation.

Johannes

Und auch innen drin,

Johannes

sehr schön hier, dass die Innenseite des Einbands

Johannes

führt dieses Muster fort. Das finde ich

Johannes

sehr schön. Ah, hervorragend.

Jochen

Ja, was mir da noch ganz kurz

Jochen

zu einfällt, ist, ich habe letztens

Jochen

eine Podcast-Episode gehört mit

Jochen

na, wie heißt

Jochen

er noch? David Crockford,

Jochen

der, also

Jochen

JavaScript. Der Urvater des

Jochen

JavaScript. Ja, viel mit JavaScript gemacht hat

Jochen

und auch da irgendwie, das ist eines der besten

Jochen

Bücher, der geschrieben hat, das irgendwie relativ

Jochen

knackig und kurz ist.

Jochen

Und der

Jochen

Ach genau, der auch sich den Jason-Standard

Jochen

ausgedacht hat und so.

Jochen

Ich wusste gar nicht, wie hartnäckig

Jochen

die XML-Crowd

Jochen

an der Stelle irgendwie

Jochen

angepisst war davon. Aber er meinte,

Jochen

er hätte wirklich Todesdrogen gekriegt

Jochen

von Leuten aus der XML-Community.

Jochen

Und

Jochen

war da auch nicht so richtig amüsiert drüber.

Jochen

Links, links bitte.

Jochen

Den Podcast verlinke ich mal.

Jochen

Aber der hat nämlich dann nebenher

Jochen

noch was anderes Interessantes gemacht, nämlich

Jochen

dann, also einmal, also

Jochen

ansonsten waren so ein paar sehr coole

Jochen

Aussagen dabei, sowas wie, naja,

Jochen

also wurde dann gefragt,

Jochen

wie ist ein TypeScript, ist das irgendwie eine sinnvolle Weiterentwicklung

Jochen

von, und ist das gut und so?

Jochen

Und dann war ich so, ja,

Jochen

also wenn es irgendwie den .NET-Entwicklern

Jochen

das irgendwie einfacher macht, irgendwie,

Jochen

dass sie da jetzt JavaScript schreiben müssen,

Jochen

dann ist das wohl okay, also ich brauche

Jochen

das jetzt nicht, aber so.

Jochen

Okay.

Jochen

Naja.

Jochen

Der hatte

Jochen

so eine interessante

Jochen

Hobbygeschichte. Und zwar meinte er,

Jochen

er interessiert sich eigentlich sehr stark für Mathematik und so.

Jochen

Aber jetzt nicht so für die komplizierten Sachen,

Jochen

sondern so die einfachen, basic

Jochen

Geschichten. Der findet die voll toll.

Jochen

Und deswegen, weil er findet, diese Teile

Jochen

der Mathematik kriegen immer irgendwie zu wenig Liebe

Jochen

ab. Und es gibt da so

Jochen

komische Sachen, wie zum Beispiel meinte er,

Jochen

also wisst ihr eigentlich, was eine Hypotenuse

Jochen

ist oder so?

Jochen

Wisst ihr, wie man das schreibt?

Jochen

Und so, also, keine Ahnung.

Jochen

Ja, also, das war es

Jochen

tatsächlich kaum jemand, aber dabei ist das

Jochen

total wichtig, also auch so gerade für so ganz einfache

Jochen

Sachen. Das ist halt die

Jochen

lange Seite in einem Dreieck.

Jochen

Ja, warum nennen wir das nicht einfach...

Jochen

Ja, also ich meine,

Jochen

natürlich gibt es auch Dreiecke,

Jochen

die haben, das sind die Seiten gleich lang und so, aber

Jochen

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

Johannes

Weil es nicht griechisch ist, ist nicht cool genug.

Jochen

Ja, genau, ist nicht cool genug, aber es verwirrt halt

Jochen

viele Leute und schreckt halt ab

Jochen

und eigentlich ist es aber irgendwie gar nicht so schwierig.

Jochen

Ja, und er nannte

Jochen

dieses Gebiet, was er da

Jochen

beschäftigt hat, Lower Mathematics.

Jochen

Im Gegensatz zu den

Jochen

Zweier Mathematics.

Jochen

So großartig.

Jochen

Da gibt es ganz viel Kraft, der sich so über die Jahrhunderte

Jochen

angesammelt hat. Das kann man eigentlich alles mal wegmachen.

Jochen

Endlich. Nieder mit den Griechen.

Jochen

Das stimmt.

Johannes

Ja, und es gibt auch ganz viele

Johannes

Notationssachen und ganz viele so

Johannes

Benennungssachen, die einfach so wildkürlich sind.

Johannes

Latein.

Johannes

Ja, und die auch die

Johannes

die Didaktik einfach kaputt

Johannes

machen, wo du halt durch musst.

Johannes

Nur weil du den höheren Sinn davon noch nicht

Dominik

verstanden hast, Johannes. Genau, weil

Dominik

die Higher Mathematics, weil wir

Dominik

haben das lernen müssen. Dann müssen

Dominik

die jungen Leute das heute auch lernen und so

Dominik

scheißigen alle, ob das richtig ist oder nicht.

Dominik

Okay, na gut.

Dominik

Also ich tippe natürlich wieder was

Dominik

Unsinniges und zwar

Dominik

einen schönen Tipp bekommen. Ihr wisst ja, ich mache Musik.

Dominik

Ich mache eine Rechnung mit der

Dominik

BESPOKE geschickt.

Dominik

BESPOKE sind, so kommt das.

Dominik

ein kommerzielles Produkt auch.

Dominik

Also eine DAW, also eine digitale

Dominik

Audio-Workstation, mit der man

Dominik

Live-Coding machen kann für Musik.

Dominik

Was Python

Dominik

Live-Coding-Access

Dominik

so gibt, was eigentlich sehr nice ist,

Dominik

wenn man so ein bisschen modular mag

Dominik

oder Musik machen mag, da kann man seine einzelnen

Dominik

Instrumente und Filter und sowas

Dominik

in Kette schalten, die alle über den Interpreter

Dominik

coden und sich da Funktionen für bauen

Dominik

und so. Sieht ganz nice aus, finde ich.

Dominik

Ah, hast du eigentlich den

Jochen

Vortrag von

Jochen

Lukas Schlanger auf der EuroPython.

Dominik

Ja, ich war live da, weil das natürlich geil war, weil er hat auch

Dominik

sein Modular-Ding mitgenommen. Ich habe ihn da vorher ein bisschen

Dominik

belästigt, habe mir das ein bisschen angeguckt, habe ihn bequatscht

Dominik

und er hatte noch einige andere nette Sachen da rumstehen,

Dominik

die Spaß gemacht haben.

Jochen

Was viele Leute nicht verstanden haben, ist, dass das

Jochen

auch nur funktioniert hat, so wie das

Jochen

mit quasi

Jochen

Nogel Free Threading

Jochen

und dass es halt ein Showcase dafür war, aber dass

Jochen

das irgendwie keiner verstanden hat und er war so ein bisschen enttäuscht,

Jochen

dass das irgendwie nicht so richtig angekommen ist.

Dominik

Ja, die Leute haben einfach gedacht, das macht halt irgendwie Musik, aber das

Dominik

war tatsächlich, ja, deswegen

Dominik

ganz gut möglich. Aber

Dominik

ja, das war tatsächlich einer der Punkte, wo ich

Dominik

auch sagen würde, ey, das ist so, Live-Coding macht damit

Dominik

schon sehr viel Spaß. Er hat halt dann die Sachen auch alle vorbereitet,

Dominik

ne, das war mit dem neuen Rappel von 3.13

Jochen

auch möglich. Genau, er hatte auch die neue Rappel und

Jochen

hatte da so lustige Dinge, dass er

Jochen

halt

Jochen

dieses, na,

Dominik

er konnte

Dominik

auf einen Knopfdruck das Bild von

Dominik

Cormac einbilden, das war auch sehr geil.

Dominik

Dem du Menschen, von dem du auch schon ein paar Mal

Dominik

geschrieben hast. Genau. Ja, es war

Dominik

ziemlich lustig und ja, aber er hat mit dem

Dominik

Euroreg, also für meine Fälle ist er relativ wenig gemacht,

Dominik

er hat halt einmal seine Synth-Stimme vorher eingestellt,

Dominik

out of theater

Dominik

und das hat halt schöne Musik gemacht

Dominik

und er hat halt ein bisschen getriggert,

Dominik

war halt eigentlich nur ein

Dominik

Instrument, was dann ein paar Töne gespielt hat und die Töne

Dominik

hat er aber halt dann gar nicht mehr, also er hat

Dominik

ein bisschen generieren lassen aus seiner Tonleiter, aus dem

Dominik

Python-Interpreter, ich glaube er hat, ja,

Dominik

welches, ich weiß gar nicht mehr, welche

Dominik

Lip er genommen hat,

Dominik

irgendwas Cooles mit MIDI-Access

Dominik

und der hat über MIDI-Daten halt angesteuert,

Dominik

über so ein MIDI-Gate.

Dominik

Naja, aber es gibt dieses

Dominik

andere

Dominik

Bespoke-Synth.

Dominik

Sieht ganz gut aus.

Dominik

Ich habe es aber noch nicht selber ausprobiert, aber das steht auf meiner Liste

Dominik

und ich muss das unbedingt gerne tun, weil

Dominik

Synthesizer

Dominik

und so gibt es auch.

Dominik

Ja, das ist auch ein tiefes Feld.

Dominik

Ich weiß nicht, wer ein Morgenbord

Dominik

auf Löten hat, wenn ich den Morgen löten

Dominik

Module bauen.

Dominik

Was lötest du?

Dominik

tatsächlich ein USB-Modul

Dominik

von

Dominik

dem Stefan.

Dominik

Egal.

Dominik

Ein USB-Modul vom Stefan.

Dominik

Ja, SC-Modular.

Dominik

Wo gehst du löten?

Dominik

Bei so einer,

Dominik

wie nennt man das, Kollektiv?

Dominik

Es gibt ja so

Dominik

Hacker-Kollektive, es gibt so Musik-Kollektive

Dominik

und so und ja,

Dominik

machen wir ein bisschen Musik und hören modulare Sachen.

Dominik

Und dann wird gelötet.

Dominik

Genau, weil ich habe so ein paar Module

Dominik

und bei so einem Elektronik, das ist fürchterlich,

Dominik

wenn man einmal anfängt mit diesem ganzen Quatsch und dann

Dominik

Widerstände in

Dominik

tausender Packs und so.

Dominik

Ja.

Dominik

Schön.

Johannes

Man kann die auch in den hunderter Packs kaufen, die kosten genauso viel

Johannes

wie die tausend. Ja, genau.

Johannes

Ich glaube, ich brauche sie auch in zehner Packs kaufen.

Johannes

Die kosten so viel wie die hunderter Packs.

Johannes

Ja, du kennst dich aus.

Johannes

Ja.

Dominik

Ja, tatsächlich. Ja, okay. Ich wollte nur

Dominik

kurz abschweifen.

Dominik

Ja, voll gut. Ja, also herzlichen Dank fürs Zuhören

Dominik

und dafür, dass ihr dabei wart.

Dominik

Schreibt mal ein bisschen wieder rein, Feedback und Kritik

Dominik

und Liebe und so alles an

Dominik

hallo-at-peisen-podcast.de

Dominik

Vielen Dank, Johannes.

Dominik

Danke euch allen.

Dominik

Vielen Dank. Bis bald.

Dominik

Bis zum nächsten Mal.