Transcript: Python 3.11 und Listen
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 46 heute.
Heute soll es bei uns gehen um Python 3.11 und um Listen.
Johannes ist wieder dabei. Hi, Johannes.
Hallo, Johannes.
Hallo, Jochen.
Ja, herzlich willkommen, Dominik.
Hi.
Ja, wir haben uns ein bisschen Zeit gelassen mit dieser Episode.
Manchmal ist ein bisschen viel zu tun, gerade in dieser dunklen Jahreszeit.
Ja.
Ja, aber Python 3.11, ich würde sagen, mit den News fangen wir heute mal wieder an.
Genau, also ja.
Wie fandet ihr das Release? Wie fandet ihr Python 3.11?
Habt ihr es schon ausprobiert?
Ja, ich verwende
das tatsächlich schon und zwar
auch so produktiv und so und
war
überraschend wenig
Stress irgendwie das Update diesmal
und für die meisten Sachen, die ich so verwende,
gab es auch schon Reels, also
normalerweise muss man am Anfang immer irgendwie alle Dinge
dann neu komponieren und so, das war jetzt
mir gar nicht aufgefallen, dass das irgendwie
Hast du einen Tag länger gewartet als sonst?
Vielleicht habe ich auch einen Tag länger gewartet, das kann auch sein.
Ich weiß es nicht mehr so genau.
Aber nö, das war alles sehr entspannt bei mir.
Ich benutze das noch nicht.
Warum muss man das denn jetzt, was lohnt sich denn da jetzt?
Die ganz tollen Tracebacks.
Ja, also das würde ich auch sagen.
Die waren doch schon immer super gut.
Nee, sind aber jetzt nochmal deutlich besser geworden.
Tatsächlich zeigen die jetzt wirklich an welcher Stelle der Code kaputt gegangen ist.
Ja, also das ist etwas, was ich jetzt
nach wenigen Wochen
Benutzung auch schon, das ist halt das,
wie du hast Tracepacks, Jochen, wenn du Fotos hast.
Ja, ja, ja.
Auf und zu raise ich mal irgendwas,
einfach nur so, weil es so gut aussieht.
Und nee, aber das ist mir auch
schon, also das
möchte ich nicht mehr missen.
Es zeigt einem relativ direkt, wo
was kaputt ist und
das ist wirklich sehr hilfreich. Und kommen wir dazu mit
Rich dann zum Beispiel, Rich Tracepacks, sehr toll.
Ja.
PIP kann auch Rich.
Übrigens, kennt ihr das?
Wenn Rich installiert ist, nutzt PIP
automatisch Rich. Ja, und dann hat man so
farbige Progress Bars
und sowas. Wundervoll, ich stehe auf sowas.
Ja, ja. Alles nur
Eye-Candy.
Ja, aber es sieht schon alles besser aus,
als früher. Früher mussten wir ja
unsere Pakete mit der
Brieftaube geschickt bekommen.
Ja, das Deal ist ja alles.
Wenn wir das nicht
gebraucht haben, dann kriegen die Kinder das von heute
ja auch nicht.
Ich habe auch nicht mal kennengelernt,
dass er aus den 80er Jahren berichtete
von C und so, wie furchtbar
das alles war.
Das ist bei C, glaube ich, heute immer
noch so.
Aber das
ist eine gute Überleitung, weil einer der Gründe,
warum Python 3.11 jetzt so
anders ist oder eine Neuerung, ist
vielleicht, dass an der C
Unterbau etwas gearbeitet
worden ist.
Naja, es ist ja das Release vom C Python Interpreter,
Aber genau, also ja, es ist halt, da ist einiges.
Also es ist echt viel passiert.
Also es ist schneller.
Es ist schneller, oder?
Das ist immer der Grund, warum man Leuten empfiehlt,
auf neue Parsons zu gehen.
Es ist wirklich viel, viel schneller.
Also nicht überall, aber in vielen Anwendungen
ist es wirklich deutlich, deutlich performanter geworden.
Ja.
So viel 20, 25 Prozent munkelt man.
Ja, ja, also je nach Anwendung kommt es halt darauf an.
Also es kann auch deutlich mehr sein noch.
also, aber es ist insgesamt
über alles wahrscheinlich so 25% schneller
ungefähr, ähm, äh, und
das ist auch nochmal ein gutes Stückchen mehr
als die Verbesserungen vorher, also
es wird ja immer ein bisschen schneller von
Version zu Version und, ähm, diesmal
ist es aber ein größerer Sprung als, ähm
sozusagen normalerweise oder bisher
ja, was halt vor allen Dingen daran liegt, dass
jetzt halt eine Menge Leute tatsächlich
dediziert an diesem Problem arbeiten
und, ähm, ja
äh, da der, der
Release-Manager von, von
Python 3.11 irgendwie
Pablo
Galindo Salgado, der meinte
auch so, also irgendwie ist das
deutlich stressiger geworden mit dem
Releasen oder das war
halt deutlich stressiger als 3.10
und einer der Gründe ist halt, dass
jetzt halt sechs Leute Vollzeit
irgendwie da an Features arbeiten und
vorher hat da eigentlich niemand Vollzeit
an neuen Features oder an Performance-Verbesserungen
gearbeitet und
jetzt gibt es doch einige Leute, die da
irgendwie viel Zeug reintun
Und ja, da hatten sie halt irgendwie enorme Probleme. Also das war auch sowas. Also 3.11 war sehr, sehr schwer irgendwie fertig zu kriegen wohl. Aber es hat dann doch am Schluss noch alles funktioniert. Aber sie mussten halt, also zum Beispiel ein großes Problem, das sie hatten, ist, dass sie hatten halt richtig fiese Bugs noch, also so Release-Blocker-Bugs bis in den Release-Kandidaten noch mit drin.
Und auch vor allen Dingen, also das Schlimme war halt nach dem Punkt, wo man sagt, man gewährleistet ABI-Stabilität.
Also, dass sich dieses Application Binary Interface nicht mehr ändert.
Also, dass sozusagen C-Funktionen ihre Signaturen nicht mehr ändern und so.
Das garantiert man ab einem bestimmten Punkt, damit die Pakete, die man zu dem Zeitpunkt oder nach diesem Zeitpunkt halt gebaut hat,
also Wheels, die man dann kompiliert hat, dass die noch auch mit dem richtigen Release funktionieren.
Das muss man halt früh genug machen, sonst hat man halt nicht genug fertig komplizierte Binaries und das ist halt ein Problem. Das Problem ist aber, wenn man jetzt irgendwie dahinter, nachdem man diese Schwelle überschritten hat, dann noch Bugs findet, bei denen man gerne was ändern würde, dann geht das halt nicht mehr. Und dann muss man halt teilweise sehr komplizierte Dinge tun, damit man das trotzdem fixen kann.
Und solche Sachen sind halt leider passiert. Unter anderem sind halt solche Dinge, weil halt, naja, auch was halt für diese Performance-Optimierungen verantwortlich ist, dass halt Dinge halt nicht mehr so gemacht werden, also sie werden eine Zeit lang ganz normal so interpretiert, der Interpreter-Bytecode, so wie er normalerweise interpretiert wird.
Und wenn das dann achtmal passiert ist oder so, dann sagt er halt, okay, jetzt schalte ich auf was anderes um. Ist mir das zu blöd? Habe ich das achtmal gemacht? Mache ich nicht nochmal? Und nimmt halt eine spezialisierte Version davon, die halt dann zum Beispiel Integer addiert oder Floats addiert und dann das halt nicht mit Objekten macht, sondern direkt irgendwie auf dem Prozessor.
Und das geht auch meistens gut, aber dann so, es gab es halt so fiese Bugs wie, naja, also das passiert zum Beispiel auch beim Attribut-Akzess und dann manchmal ist es halt so, dann funktioniert das, die ersten acht Attribut-Akzesse funktionieren halt und beim neunten Mal wird halt die Klassenvariable genommen, also wenn du zum Beispiel, das machen ja viele Leute, dass sie halt in der Klasse halt sozusagen die Parameter, die ein Objekt bekommt, definieren und wenn du dann eine Instanz machst, instanzierst das Ding, dann überschreibst du das.
Und die Instanzvariablen, also wenn Attribute an der Instanz hängen, dann überschreiben die immer das, was an der Klasse dran steht, sodass es kein Problem ist.
Und jetzt kam halt dann irgendwann so ein Bug-Report rein und dann hat einer so, ha, irgendwie, also achtmal geht das gut und dann beim neunten Mal irgendwie, achso nee, das war nicht der Report.
Der Report war irgendwo, komische Geschichte ist irgendwie dann geworden und wo es nicht dann werden durfte und irgendwas seltsames und das hat irgendwie lange gedauert, um rauszukriegen, was das Problem ist.
das Problem war tatsächlich, dass halt beim neunten Mal
wurde halt irgendwie die Klassenvariable genommen und nicht mehr
die Instanzvariable, was halt nicht passieren darf,
weil das
irgendwie mit dieser Spezialisierung zusammenhing,
dass man dann halt, dass da halt irgendwas
direkt genommen wurde.
Irgendwelche Fallbacks.
Das ist natürlich total schrecklich,
wenn man so einen Bug hat. Also einmal
war es wohl irgendwie super schwierig, den zu finden und dann
war es halt super schwierig, den zu fixen,
ohne die C-API nochmal anfassen
zu müssen und naja, also alles ganz, ganz
schrecklich.
Ja, der hat es auf jeden Fall sehr gejammert,
dass das alles diesmal sehr, sehr schlimm gewesen wäre.
Aber naja, gut, es hat halt trotzdem funktioniert, also insofern, ja.
Aber das ist so ein Problem, oder?
Wenn zu viele Leute an einer Software arbeiten,
dass dann halt irgendwie doch schwieriger ist oder stressiger oder so.
Ja, ja.
Weil wenn nur zwei oder drei, ich glaube, da gibt es irgendwo so eine Grenze.
Wenn nur zwei oder drei so zusammenarbeiten und man sich jeden Tag sieht,
dann ist das auch nicht so wild,
weil dann ist irgendwie das gesamte Wissen so verteilt.
Aber wenn es dann mehr Leute werden,
dann ist einfach da so Sachen, die so ineinander greifen.
Also das ist meine Erfahrung.
Ich weiß nicht, wie es euch da geht.
Ja, ja, absolut.
Also die Komplexität, auch wenn mehr Leute an einem Projekt sind,
steigt nicht linear, sondern irgendwie bösartiger.
Exponentiell.
Exponentiell weiß ich jetzt auch nicht.
Aber irgendwie dieser.
Heute geht noch, oder?
Sechs, sieben geht vielleicht auch.
Ja, da muss man dann schon Prozesse haben und so und genau darauf aufpassen.
Und ganz schlimm wird es, also ich würde mich dem Lager zuordnen,
das sagt also mehr als ein Team an der Software arbeiten,
vielleicht sowieso keine so gute Idee.
Also wenn man jetzt quasi aus dem Bereich, wo man noch ein Team haben kann, rauskommt,
hat jetzt mehrere Teams die anderen.
Also da gibt es dann ja auch irgendwie diverse Dinge.
Aber ehrlich gesagt, das ist alles so schrecklich.
Also ich weiß nicht, ob es sich überhaupt lohnt, in dem Bereich zu skalieren,
weil wenn du halt ein gutes Team hast, das kleiner ist,
dann kann das eigentlich aus meiner Perspektive fast immer
schneller sein, als egal, wie viele Leute du drauf
wirfst, weil das kriegst du
eh nicht mehr organisiert.
Naja,
keine Ahnung. Was für eine optimale Teamgröße
würdest du sagen?
Fünf oder so was?
Ja, ja.
Ich würde sagen vier.
Warum vier?
Weil fünf schon zu groß ist. Fünf ist ein
großes Team schon. Vier ist
ein mittleres Team, drei ist ein kleines Team,
das ist super. Und alles über
fünf ist nicht gut. Da musst du dann
viel Management machen. Da brauchst du dann
jemanden, der assistiert
und jemanden, der koordiniert und dann
gehst du schon in so
Ist bei dir bei den vier Leuten die
Kommunikation mit dem Kunden mit drin, bei den vieren?
Oder macht das noch jemand
mit Managing ein Projekt?
Das kommt auf das Projekt an.
Es gibt
ja Projekte, die haben gar keinen Kunden
in dem Sinne. Zum Beispiel Python. Python hat ja
keinen Kunden.
Keiner, der sagt, ich habe
aber das hier beauftragt und das,
ja, aber die Software-Community ist ja kein
Naja, du musst ja auch Kommunikation
machen, du hast ja auch irgendwie eine
Product-Ownership in gewisser Weise dann.
Nö.
Doch. Du kannst machen, was du willst,
die Community muss das halt annehmen.
Da ist, da ist man ja
sozusagen, das ist ja ein schöner Fall eigentlich.
Also ich würde ja denken, Produktmanagement
ist halt Marketing und Marketing ist halt
Ja, so würde ich das nicht sehen. Ich würde jetzt nicht
Marketing gucken, das geht nur um die
Kommunikationsstelle mit dem Kunden, also jemand, der
quasi User-Stories baut und die koordiniert.
Ja, aber was soll das für User-Stories geben bei Python?
Bei Python-Entwicklung brauchst du sowas in Quatsch halt nicht.
Also würde ich jetzt mal so sagen, also so spontan.
Also das machst du halt, wenn du,
ja, also, aber
Nee, aber das brauchst du dann schon
zusätzlich, wenn du einen Kunden hast
und in so einer Situation bist, wo du einen Kunden
hast, der spezifische Wünsche hat,
dann brauchst du schon eine Rolle, die nicht
nur Entwickler ist.
Ja, ja, wenn du Kunden hast, klar, okay, ja.
Und da brauchst du dann schon
einen PO oder einen, keine Ahnung.
Ja, du brauchst halt jemanden, der, also vor allen Dingen,
wenn die Entwickler auch nicht selber die, also das ist halt
immer das Ding, ich will, eben,
ist halt eine Marketingrolle und das halt
Produktmanagement wäre halt aus meiner Sicht so
irgendwie Anwalt des Kunden.
Das ist halt vor allen Dingen dann wichtig, wenn man selber
als Entwickler das halt nicht verwendet und auch gar nicht
verwenden kann und wenn es um irgendeine andere
Geschichte geht, mit der man gar nichts zu tun hat, dann brauchst
du jemanden, der diese Rolle einnimmt.
Wenn ich irgendwas mache, was ich selber
verwende, dann brauche ich das nicht. Dann kann ich das
super selber machen.
Wenn mir dann jemand erzählt, wie ich das
verwenden soll, fände ich komisch, weil
ich meine,
wie kann das gehen?
Jochen, kannst du den nicht auch?
Du darfst nur an den
Sachen arbeiten, die gerade im aktuellen
Sprint drin sind, Jochen.
Ja, also, weiß ich nicht.
Doch, ich mache das auch
für meine privaten Projekte.
Natürlich, auch für Skripte,
100-Zeiten-Skripte erstmal eine User-Story
geschrieben. Erstmal ein Epic.
Ja.
Da war es doch die Accountability dann,
die Responsibility, Jochen. Bist du auch selber für dich
...
Binnable.
Kannst du dir dein Gehalt selber
in Bonuspunkten ausbezahlen.
Ja, nee. Das
muss man da alles nicht machen, zum Glück.
Ja, aber
also ja, ich meine, tatsächlich, das ist halt
groß geworden und
ja, wenn viele Leute daran entwickeln, ist halt
schwierig und sie hatten ja,
es gab ja schon mal in Python 3.9
beziehungsweise in 3.10
ist es dann halt aktiv geworden. Der Packparser
ist halt ja auch die interne, so quasi
ein zentraler Teil von
Python, ist halt irgendwie komplett
einmal irgendwie auf links gedreht worden.
Das hat aber einfach so funktioniert.
Das ist nicht irgendwie quasi so
fies, hat nicht so fiese
Konsequenzen gehabt wie jetzt, aber ich meine
manchmal hat man halt auch einfach Glück oder Pech, das kann natürlich
auch sein.
Irgendwer hat irgendwas ordentlich gemacht oder irgendwas übersehen.
Aber darauf kannst du nicht setzen.
Nee, setzen kann man darauf nicht.
Aber ja, also ich meine natürlich auch, wenn man mehrere
Sachen gleichzeitig ändert, dann ist es halt so, dass
die, dann hat man eine
kombinatorische Explosion von
Möglichkeiten, wie es schief gehen kann und dann ist natürlich
auch die Wahrscheinlichkeit einfach höher, dass es irgendwo kracht.
Ja, und diesmal
sind es viele Dinge. Ich war mal in so einem Projekt
und das war schon so ein bisschen verspätet und dann
kam irgendwann der Projektmanager,
was nicht, Projekt oder Produkt oder was auch immer
für einen Manager, hat gesagt, also
wir haben
einen sehr engen Zeitplan, ab jetzt dürfen wir keine
Fehler mehr machen.
Unsere Reaktion war dann, ach so,
na gut, ab jetzt
dürfen wir keine Fehler mehr machen, na gut,
dann machen wir das jetzt halt nicht mehr.
Immer wenn ich
über die Schulter gucke, ist irgendwas kaputt, ja.
Sobald der Manager weghockt, fangen die
Entwickler an, Lego zu spielen
und Fehler einzubauen.
Oder Fehler darf man ja nicht
sagen, man sagt ja Jobsicherheit, ich baue
Jobsicherheit in dieses Projekt ein.
Ja.
Das ist genau wie so eine Schätzung von so einem Softwareprojekt.
Wer brauchst du denn dafür?
Zwei Tage, was kommuniziere
ich denn jetzt?
Also Schätzung
ist auch so ein schönes Thema.
Also das ist halt auch, ja,
also
soll ich das
wirklich sagen?
Wird das nochmal eine andere Episode,
wird das eine so irgendwie, ja.
Haben wir da nicht schon mal drüber gesprochen?
Ja, wir haben bestimmt über solche Sachen schon häufiger gesprochen.
Aber ich bin auch irgendwie der Stimmung, also wir
callen Bullshit auf alle möglichen etablierten Business-Prozesse,
aber ja, dieses mit dem Schätzen ist
einfach nur totaler Quark aus meiner Perspektive.
Also niemand kann das schätzen.
Wir haben da genug Erfahrung, um das inzwischen relativ
sicher sagen zu können, dass man das nicht schätzen kann.
Es geht einfach nicht. Und wenn man
Leute dazu zwingt, dass sie das tun,
dann passieren halt Dinge, die man nicht haben will.
Nämlich zum Beispiel, dann machen sie halt nur noch Sachen, die man gut schätzen kann zum Beispiel.
Einfache Sachen.
Du willst ja eigentlich quasi sozusagen, eben aus der Business-Perspektive möchtest du haben, die Leute sollen an dem Kram arbeiten, der den meisten Wert bringt.
Irgendwie, sozusagen Wert, wie auch immer man das definiert, aber man hat ja irgendeine Vorstellung von dem, was Wert bringt.
Ja, improvisieren an irgendwelche Aufgaben und wollen, dass die Aufgaben fertiggestellt sind.
Genau, aber das, was du eigentlich haben willst, ist, dass die Leute etwas produzieren, was sie für dich in Wert hat.
So, diesen Wert willst du eigentlich optimieren.
Wenn du den Leuten jetzt sagst, ihr müsst mir aber vorher sagen, wie lange das dauert und das bei denen dazu führt, dass wenn sie das sich verschätzen und du ihnen auf die Finger haust, sie dafür bestraft werden und belohnt werden dafür, dass wenn das stimmt, dann machen sie nur noch Sachen, die man gut schätzen kann.
Und vor allen Dingen, was du dann halt verstanden hast, wenn du weißt, was Informationsasymmetrie ist und dann verstehst, auf welcher Seite welche Informations liegt und wer da was machen kann, ja bitte, Entschuldigung.
Ja, aber das führt halt
dazu, dass dein Wert nicht mehr maximiert
wird, sondern dann wird halt maximiert auf
irgendwie langweiligen Scheiß, den man halt
schön schätzen kann.
Und das ist ja gar nicht das, was du willst.
Ich würde anders maximieren.
Ich würde auf das maximal
erträgliche Zeitbudget
maximieren und dann halt gucken, dass ich
halt das dann trotzdem so schnell mache, wie ich das für richtig
halte und dann den Rest der Zeit halt
nicht signalisiere, sondern
schön meine Sachen machen kann, wie ich das für richtig halte.
Ja,
gut, aber
ja, ich weiß nicht, aber das
Aus Business-Perspektive ist das nicht so sinnvoll.
Aus meiner Perspektive
ist das schon gar nicht so schlecht.
Ja, ich glaube,
das sind unterschiedliche Incentives.
Das ist ja immer ein anderer Fall.
Aber selbst
unter der Annahme, dass
niemand versucht, das zu gamen, sondern dass alle
sich so verhalten, wie das gedacht ist,
funktioniert das mit dem Schätzen ja schon nicht.
Und das ist halt schon echt schlecht. Also wenn man
jetzt noch mit zusätzlich an dem
annimmt, die Leute sind bösartig,
okay, dann weiß ich nicht,
aber das ist ja nochmal ein anderes Problem. Aber selbst wenn
sich alle gutartig verhalten und alle
nur das Beste wollen, funktioniert das halt schon nicht mehr.
Also die Frage ist halt schon, wenn du halt gemeinsam
kooperativ irgendwann arbeiten willst, dann musst du ja
quasi davon ausgehen, dass du Vertrauen den Leuten
entgegenbringen musst. Ja, genau. Und dafür
ist das ja schon irgendwie Quatsch, unter Druck zu setzen und dann
ist eigentlich die einzige
Info, die man irgendwie geben kann, so ja,
ist das jetzt eine Frage von Tagen oder von
Jahren oder sowas, ne? Ja, aber die
Frage wäre auch, wofür willst du das
wissen? Warum ist das so? Also, ich meine,
ich würde ja sagen, okay, manchmal kann es ja sein, dass das...
Die geschäftliche Planung, ja, so Make or Buy und so was,
all das halt, ne? Ja, aber...
Da hast du ja auch oft viele Business-Sachen da,
die da dran hängen, du Marketing
und Fremdsysteme und Kundenkontakt
und so. Ja.
Dann musst du ja Sachen ankündigen. Jahresbudget.
Ja, am Ende können wir...
Genau, Jahresbudget und
manchmal hast du ja auch gesetzliche Vorgaben.
Ich arbeite ja jetzt in der Versicherungsbranche,
für die Versicherungsbranche
und da gibt es
jede Menge gesetzliche Vorgaben, könnt ihr euch
gar nicht vorstellen, wie viele gesetzliche Vorgaben
es da gibt. Und
wir kommen jetzt ins Jahresendgeschäft,
das ist auch was, was mir bisher unbekannt war, weil
die halt so eine Vermittlerstruktur haben und die haben halt
Jahrespläne
und weil es jetzt zum Ende des Jahres
hinzugeht, müssen die jetzt alle noch ihren Plan erfüllen
und deshalb ist
im November und Dezember doppelt so viel
Geschäft wie im Januar und Februar.
Und da muss man
halt auch damit klarkommen.
Also da hängen ja schon Sachen drin. Also ich kann schon verstehen, dass du vorher wissen möchtest, wie viel das kostet, wenn du was kaufst und wie lange es dauert, wann du es kriegst.
Ja, aber die Frage ist, wie viel dir das wert ist. Das wäre sozusagen die Frage.
Das ist der Marketingpreis doch. Ich dachte, du magst Marketing nicht.
Ja, doch, ich mag schon Marketing.
Wie hoch ist deine Schätzungsmarge?
Wie hoch ist dein Schätzungsfaktor? Zwei oder drei?
Zwei bis drei, irgendwie sowas, ja. Ungefähr.
Ja, das würde ich sagen, ist doch normal, oder? Und dann ist doch okay.
Ja.
Dann kriegst du es auch hin in der Zeit.
Nee, ja, manchmal halt auch nicht.
Schätzt du Story Points oder Tage?
Also, sagen wir mal so, Tage ist noch falscher als Story Points, aber Story Points sind auch schon falsch.
Mit fünf bist du eigentlich immer richtig.
Ja, genau. Also ich fand, naja, gut. Also ich weiß nicht, es ist halt alles sehr sinnlos.
Das hatte ich gemacht, Dominik. Jetzt will er nicht mehr.
Und
ich meine, die Alternative
ist ja, ich würde einfach die Alternative
probieren. Die Alternative ist, man nimmt sich das Nächste, was
halt irgendwie den höchsten Wert
verspricht und arbeitet
halt dran. Und wenn das halt zu lange dauert,
dann hat das nicht mehr den höchsten Wert, dann nimmt man
was anderes. Aber das
vorher alles zu
schätzen und dann zu priorisieren,
also ich habe starke Zweifel daran,
dass das irgendein, dass das irgendwie
das besser macht. Das ist genau das, worum es da gerade geht.
du fängst halt an, die Sachen dann untereinander zu
gamen und zu arbitragieren und sowas und das ist
halt das, was die dümmste Idee ist, die du
machen kannst, wenn du vernünftiges Management
machen willst mit Leuten, die motiviert, intrinsisch motiviert
an Dingen arbeiten sollen oder wollen
und das ist genau der entscheidende Punkt, wo
ich auch sagen würde, dass das keine gute Idee ist, das zu machen
auch das mit dem Tracking und so, das ist keine gute Idee
Ja
Ja, es gibt Leute, die verstehen das nicht, die meinen
ja, die müssen aber, ja und dann
Ja gut, also
Ja, ich meine
es gibt ja auch genug Beispiele, wo dann halt irgendwie nicht so
tolle Sachen dann mal rauskommt. Ich freue mich dann immer
über Leute, bei denen das dann doch funktioniert und
die anderen, die meinen, dass das funktioniert und
wenig von der
Realität informiert
werden darüber, ob das jetzt
dann, da freue ich mich auch drüber, weil
irgendwie... Ja, das hat ja auch was mit Informationsadmetrie zu tun
und die Frage ist also, ob du die Wahrheit überhaupt
kennen kannst. Ja.
An der Stelle, aus der jeweiligen
Managementperspektive oder so, das geht halt nicht.
Richtig, das ist auch ein Riesenproblem
und ich würde sagen, in vielen Sachen, die ich gesehen
habe, ja, nee, können sie nicht. Also du müsstest
Ja, du musst es halt zum Beispiel haben, der richtig selber
kunden kann, der das komplett selber einschätzen kann,
was aber passiert ist. Ansonsten ist das
gar nicht so notwendig. Der müsste halt die ganzen Commits lesen und dann
verstehen, warum es so lange gedauert hat. Der muss
auch verstehen, dass, keine Ahnung, man manchmal
zwei Tage lang nach einem fehlenden Punkt oder Komma
oder Leerzeichen suchen muss, weil das irgendeinen blöden Bug
an irgendeiner Stelle gibt, den man nicht erwartet hat.
Und dass dafür bestimmte Sachen halt einfach schnell gehen, obwohl
die total kompliziert aussehen. Das ist halt so,
ja, der muss halt so ein Feeling
haben. Aber das... Manchmal hat man ja auch
die Inspiration, oder, sowas zu machen.
manche Sachen gehen schneller,
obwohl sie komplizierter sind, weil man sie machen möchte.
Ja, aber das ist das, was du willst. Du willst diesen
Flow haben. Und damit dieser Flow möglich ist,
damit dir diesen Flow reinkommt, dass du mal 3, 4,
5, 6, 7, 8, 9, 10 Stunden
einfach nur ballerst und dann ist das richtig
geiles Fertig. Dafür brauchst du danach die Tage
auch ein bisschen mehr Ruhe. Das kannst du nicht die ganze Zeit machen. Das geht nicht.
Wie können wir jetzt businessmäßig den
Flow optimieren?
Oh je.
Ah, ich weiß es. Wir brauchen einen
Kickertisch in der Lande.
Schon fertig.
Und einmal im Monat gibt es Pizza-Abends
für alle, die nach 20 Uhr
noch da sind.
Eine Tischtennisplatte natürlich
und ein Lauftreff.
Naja, tja.
Ja.
Ach ja, man merkt das.
Ist das bei euch auch so? Ich glaube, ich weiß, warum das jetzt
gerade alles wieder so am Jahresende
Ihr habt ja mehr Geschäft, ne?
Ja, wir auch. Also hier ist gerade relativ
stressig, weil es ist relativ
viel Zeugs. Also ich meine, da kann man sich auch mal
drüber freuen, wenn Leute irgendwie
wollen, dass man Dinge für sie macht.
Ist eigentlich gut.
Ist eigentlich sehr gut, aber
es ist so zum Jahresende, es wird immer
mehr irgendwie. Man hat immer so das Gefühl,
am Jahresende ist es immer so ein bisschen voller irgendwie.
Man muss ja noch irgendwie die Sachen durchkriegen, die man für das Jahr geplant hat
und gucken, ob die noch fertig werden.
Dann wieder muss man aufs Neue ufern.
Muss dann wieder
ohne überlegen neue Projekte.
Wenn du die Zeitperioden einplanst.
Ja.
Erstmal die Frage, kann man dann
eine clevere Planung machen.
Da sind wir jetzt nämlich genau wieder bei dem Punkt,
kannst du sagen, clevererweise,
okay, wir machen sowas so,
das muss am Ende des Jahres fertig sein,
da muss man am Ende gucken,
da hat man ein bisschen geschludert,
muss man noch ein bisschen antreiben oder sowas,
aus so einer Management-Perspektive.
Ja, weiß ich nicht.
Ich glaube, das geht alles nicht.
Glaube ich auch nicht.
Auch etwas, was niemand hören will, aber.
Für eine gewisse Zeit geht es schon, oder?
Also ich meine, Crunch-Time funktioniert schon.
Funktioniert ein bisschen, ja.
Die Akkus leer sind halt, ne?
Genau, dann hast du halt danach wieder die Periode,
wo es langsamer geht.
Ja, aber es ist auch keine...
Viele können die das machen so.
Ja, ja.
Qualität darf da auch nicht das Merkmal sein.
Das ist halt dann nur mehr gemacht.
Ja, aber dann machst du billig und Crunch-Time
und dann guckst du, dass die Produktivität
dann immerhin so 60% ist, wenn du einfach gute Leute nimmst.
Und es kostet aber trotzdem eher mehr.
Ja, aber gute Leute...
Sie sind zu rar.
Kennst du so viele gute Leute,
dass du ein Viererteam damit füllen könntest?
Ja.
Also wir sind jetzt...
Ja, aber die Zeit hat...
Kennst du noch einen guten?
Bereit wären für dich zu arbeiten?
Schwierig.
Also ja, nee, ist nicht so einfach.
Die du bezahlen kannst, Dominik.
Ja.
Die Zeit haben, die nicht schon woanders sind.
Das ist doch das Problem.
Die guten Leute sind immer belegt.
Naja.
Tja.
Deshalb habe ich auch nie Zeit, Podcasts aufzunehmen.
Jetzt wisst ihr Bescheid.
Ja.
Ja, aber offenbar hat das Python-Projekt ein paar Leute gefunden,
die tatsächlich irgendwie dafür arbeiten wollen.
Und die sind auch eigentlich alle ziemlich gut.
Das war eine der längsten Exkurse, die wir bisher hatten, glaube ich.
Ja, die haben dieses
Problem irgendwie in den Griff gekriegt.
Und
ja, das hat
eigentlich auch tatsächlich, also das ist
ja sowieso eine Neuerung im Grunde, dass
halt so viele Leute Vollzeit
jetzt irgendwie da dran arbeiten.
Und ja, eigentlich hat es ja schon ganz gut funktioniert.
Ja, das war super.
Genau, also
vielleicht gehen wir einfach nochmal durch die
Dinger so durch, was da alles
und neuen Sachen dazugekommen ist.
Also genau,
wir hatten die
Performance-Verbesserung so ein bisschen, da können wir
eigentlich nochmal ein bisschen ins Detail gehen,
auch was da passiert ist, aber halt
dann die besseren Fehlermeldungen.
Was es auch gibt, sind
Exception-Groups und Accept-Sternen
irgendwie. Das ist
etwas,
also
auf der einen Seite ist es krass, dass das jetzt erst
da drin ist sozusagen, weil erst jetzt
hat man halt die Möglichkeit, bestimmte Sachen zu machen, wo man
denkt so, oh, das ist aber ganz übel, wenn man das nicht
machen kann. Und ja, es war einfach schon immer
ganz übel. Also Python 2 war
super übel. Da gab es halt bloß
eine Exception, die halt, wenn eine geflogen
ist, halt nur eine geflogen. Und wenn irgendwas
anderes zwischendurch passiert ist, ja, Pech gehabt.
Und dann
ab Python 3 gibt es halt diese Chained
Exceptions, die man manchmal sieht, wenn da so
wenn man so ein Traceback
kriegt, so während dieser Traceback geworfen
wurde, ist halt noch was anderes passiert. Und da kann man
beliebige aneinanderhängen. Und diesen Mechanismus kann man
natürlich auch dafür missbrauchen, dann
oder gebrauchen,
um halt, wenn man viele Exceptions hat,
die irgendwie, zum Beispiel wenn man halt viele Tasks
hat, die man gleichzeitig abgefeuert hat,
die dann halt alle ja auch irgendwie schief gehen können,
um das zu
wieder einzufangen oder solche Sachen.
Aber das ist natürlich alles sehr hässlich, weil
eigentlich war das gedacht für Sachen, die was miteinander zu tun
haben. Und wenn man jetzt
aber so Async-Geschichten
macht, die haben ja oft nichts miteinander zu tun.
Also die aneinander zu ketten ist halt
irgendwie, macht keinen so großen Sinn.
Und dafür gibt es jetzt halt
Exemption Groups und
wo man die Exceptions so in Bäumen
anordnen kann und
ja, es gab auch
vorher schon so Sachen, die dann versucht haben, drüber umzuarbeiten.
Nurseries in Trio und so.
Wir haben auch schon irgendwann
ganz kurz drüber gesprochen.
Genau, das war eigentlich so ein fehlendes
Puzzlestück auch für
Async.io, um das
halt so richtig ordentlich zu machen, weil
das ist halt total blöd, wenn du halt
nicht tatsächlich alle
Sachen, die schiefgegangen sind, hinterher
behandeln kannst.
Weil manchmal musst du es halt
handeln und wenn du dann davon gar nicht
informiert wirst, ist es halt irgendwie schon nicht so gut.
Und es gibt das aber auch außerhalb
von AsyncIO. Es ist nicht nur ein
AsyncIO-Feature, weil es gibt auch so
Dinge wie zum Beispiel
im Socket-Modul, wenn du halt eine Verbindung
irgendwo hin aufmachst, dann probiert das
Ding halt unterschiedliche
Sachen
durch, wenn es halt irgendwie nicht funktioniert.
Also diverse Optionen, die dann
gesetzt werden können. Und bisher
war es halt so, naja, es werden halt diese Sachen durchprobiert,
wenn das eine nicht funktioniert, wird das andere probiert und so weiter.
Und jedes Mal fliegt ja eigentlich eine Exception.
Aber du kriegst immer nur die letzte
zu sehen eigentlich.
Was ja auch irgendwie kacke ist, weil du
möchtest ja im Grunde vielleicht schon sehen können,
so, was ist denn da alles schiefgegangen? Also bei
allen Dingen, wo man so Retry-Geschichten hat,
wenn du jetzt sagst,
oder bei so einem
Salary-Task oder was auch immer, sagst halt
irgendwie fünf Retries und dann geht's
halt nicht. Dann kriegst du halt, wenn es
dann eine Exception gab, immer nur die letzte.
Aber vielleicht gab's ja vorher schon mal Exceptions und
vielleicht waren die anders. Das wäre ja interessant zu
wissen. Aber das, momentan gibt's keine
Möglichkeit, oder bisher gab's keine
Möglichkeit, da dran zu kommen. Und jetzt
halt schon. Und ja, da das halt nicht
nur für Asian-Geschichten, sondern
halt auch in anderen Kontexten auftritt und
eigentlich jetzt zum ersten Mal
ermöglicht, diese Sachen so sauber zu handeln, dass du wirklich
alles behandeln kannst,
was da schiefgegangen ist.
Also man konnte das ja schon vorher machen, indem man
so ein Python-Feature
genutzt hat, also indem man
eine leere Liste als Cache
irgendeiner Funktion gegeben hat.
Also quasi selber bauen,
Dominik. Genau, die immer aufgerufen wurde.
Und dann konnte man
die daran dann sammeln.
Ja, also man kann natürlich solche Sachen...
Aber das musst du dann halt immer machen. Das ist so wie die C-Fehlernummern,
oder? Es gibt keine Fehlernummern, also
wenn du 0 zurückgibst, ist alles
in Ordnung und wenn du irgendwas anderes zurückgibst, musst du in der
großen Liste nachschauen.
Ja, oder was man halt, ein Vorschlag
war halt auch, man kann es nicht über Logging machen oder solche
Mechanismen, aber tatsächlich
es gibt dann Vorrätsel.
Ja, oder irgendwas in der Richtung,
dass man das halt nicht,
weil tatsächlich ist es ja jetzt, es
ändert ja die Python-Syntax.
Das müsst ihr mir kurz erklären, warum ihr gerade gelacht habt, mit was
ist das für ein Vorschlag? Verstehe ich nicht.
Ja, wenn eine Exception auftritt und du willst wissen,
was da vor passiert ist, da drüben ist
eine magische Datei und da hast du es hoffentlich reingeschrieben.
Ja, wenn die weg ist, keine Lösung
für dieses Problem.
Du kannst natürlich hingehen und
quasi um, also du könntest
natürlich statt Exceptions zu werfen, einfach
alles in ein Logfile reinschreiben und dann
im Code ab und zu mal nachgucken, ob
eine Exception geflogen ist in ein Logfile.
Das ist so eine schlaue Art.
Mit Dragle Expressions.
Ich habe gehört, so funktioniert Cloud.
Ja, genau. Oder verteilte Systeme,
da hat man das Problem natürlich so.
Das ist unter Umständen
sehr schmerzhaft.
es gibt da einen schönen Vortrag von
der Entwicklerin,
die das geschrieben hat,
wo sie halt
auch kurz durchgeht, ich habe das jetzt
dummerweise, ich habe das schon
ein oder zwei Monate her gesehen,
wo sie halt durchgeht,
warum das eine sinnvolle Geschichte ist, an der
die Sprachsyntax zu verändern, weil
du kannst es, und sie geht dann diverse Möglichkeiten durch,
wie man das implementieren könnte, und
da kommt am Schluss raus, ja, es geht nicht
anders, du musst die Sprach, man muss die Sprachsyntax
da verändern. Es gibt keine andere
schöne Möglichkeit, wie man das hinprogrammiert, wie man das
anders machen kann. Also wenn es eine andere gegeben
hätte, hätten sie es auch anders gemacht, weil das ist natürlich
irgendwie so ein bisschen das letzte Mittel,
die Sprachsyntax ändern, das macht mir ja auch nicht
so einfach aus Spaß.
Und es gab aber keine. Und dass es ein Problem
ist, ist ja schon lange klar. Also das ist ja
nicht so, dass den Leuten das jetzt erst aufgefallen wäre,
sondern eigentlich, also quasi
dass man sowas braucht und
im Async-Kontext war das, der
Async.io hauptsächlich implementiert hat,
Juri Selimanov, der
hat 2017 schon irgendwie gesagt, wir brauchen das unbedingt
irgendwie, dann gab es diese Geschichten mit Trio
und so und aber
niemand hat eine Möglichkeit, weil man dachte immer so,
ach das geht bestimmt, irgendwie kriegt man das hin, ohne
dass man dafür irgendwie die Sprache ändern muss
und das hat aber niemand hingekriegt und jetzt
ist die Sprache geändert worden und
ja, also was es halt an neuer Syntax
gibt, ist halt dieses Accept-Stern irgendwie,
wo man dann halt quasi
alle Dinge aus einer Gruppe halt,
eine Gruppe von Sachen halt fangen kann,
dann kann man damit irgendwas machen, dann kann man die splitten
und damit kann man es eigentlich
sauber machen und das ist eigentlich sehr schön.
Ja, also gefällt mir auch sehr gut
dieses Feature.
Oh, und man kann in Exceptions auch noch irgendwie so
Notes dranhängen, sodass man halt irgendwie noch ein bisschen
Metainformationen mitgeben kann, das auch
neu, wenn
da halt irgendwie man halt noch ein bisschen
Kontext hat, den man gerne da mit
reintun würde.
Ja,
genau.
Und
ja,
Genau, da fällt mir gerade noch
zu ein, zu Async, da gibt's
jetzt auch, also vielleicht kennen da viele
auch dieses, also was man normalerweise verwendet ist,
ja, irgendwie Gather, um halt
viele Tasks irgendwie gleichzeitig
zu awaiten und so. Da gibt's
jetzt ein neues Ding, es gibt Task Groups,
das ist quasi so ähnlich wie Nurseries
in Trio
und das ist auch die, das
löst Gather und diverse andere
Geschichten halt ab und Create Tasks und so
und da macht man eigentlich, was man tut,
ist, wenn man sagt AsyncWithTaskGroup
STG und dann
createt man halt Tasks und wenn der
Async-Context-Manager
durch ist, dann sind alle
erfolgreich durchgelaufen. Also das sieht auch
sehr elegant aus, also sehr schöne
neue Art, wie man
Sachen hinschreibt. Es spart gar nicht so viel Zahlen, es ist ein bisschen
weniger als vorher, aber es sieht einfach irgendwie
ja, sieht gut aus.
Also das in Kombination mit den
Exception-Groups, also Async mit 3.11
ist eigentlich echt so auf dem Stand,
dass jetzt funktionieren, es greifen so die ganzen Teile
ineinander und jetzt ist es so richtig rund.
So vorher haben wir halt... Jetzt kann man endlich
Async benutzen. Ja, vorher konnte man es auch schon, aber es haben
schon tatsächlich wesentliche Teile gefehlt irgendwie.
Also da, ja.
Ja, das ist auf jeden Fall
alles sehr erfreulich.
Genau. Also es ist
alles besser geworden, würdest du sagen? Ja, ja, ja.
Schon alles deutlich.
Das ist doch schön geworden.
Da müssen wir in der
Typing-Episode mal drüber reden. Keine Ahnung.
Variadic Generics
Zeugs, das da will ich jetzt einfach mal reden.
Das ist alles viel zu kompliziert.
Du kriegst eine eigene Episode, glaube ich.
Ja, haben wir schon geplant.
Dann, ja,
Typing ist und einige Sachen mit dazugekommen.
Eine coole Geschichte beim Typing, die dazugekommen ist,
ist Self.
Ja, also wenn man zum Beispiel
bisher sowas machen wollte,
habt ihr das mal gemacht, so
Typ-Annotationen und wenn diese Sachen
die Self zurückgeben, was gibt man dann zurück?
Ja, die Klasse selber.
Ja, das funktioniert leider nicht so. Was ist, wenn du
erbst, du bist in...
Es ist halt keine Instanz der Klasse.
Stell dir vor, du hast halt eine Basisklasse
und eine Klasse, die von der Basisklasse erbt.
Und in der Superklasse
hast du eine Funktion,
die irgendwie
sozusagen irgendwas zurückgibt.
Und das ist dann der Teil des Falls.
In der Superklasse sagst du jetzt,
annotierst du mit, gib zurück, eine Superklasse.
Also eigentlich müsste es dann eine Union machen, ja.
Aber das ist ja, wenn das in der Instanz
aufgenommen wird, ist das ja falsch, weil es wird eine andere Klasse
zurückgegeben. Das geht halt
nicht. Das ist genau das Problem.
Deswegen kannst du nicht einfach die Klasse da
mit der Klasse amüsieren.
Es wird doch höchstens eine erbende Klasse
zurückgegeben, oder?
Ja, eine von denen, die geerbt haben.
Also ich meine, in gewisser Weise ist das natürlich schon richtig.
Also du kannst die unterste Base-Klasse zurückgeben,
das ist ja nicht falsch, weil das ist eine Art von der Instanz.
Das ist nicht komplett, aber es ist auch nicht falsch.
Aber wenn du jetzt irgendwo dann
quasi drauf überprüfst, ob tatsächlich die Unterklasse
übergeben wird irgendwo
und nicht die Basisklasse,
dann geht das halt schief, obwohl es eigentlich richtig ist.
Dann hast du ein volles Positiv.
Und jetzt kannst du halt sagen
from typing import self und dann
kriegst du das Self-Tool. Warte mal, ich muss das kurz
als Argument aufschreiben, warum ich Typen nicht mag.
Warte, das brauche ich für die Typen.
Ja, ja, also ich habe auch mal so,
also es ist, also so diese
Details sind alle schon sehr haarig, muss ich sagen.
Also es geht
auch nicht gut anders. Also man sagt, es gab das
ja vorher nicht, ja, und wenn man sich da Gedanken
gemacht hat, okay, wie annotiere ich das denn jetzt richtig?
Sondern es geht nicht richtig
gut. Man kann das nicht gut annotieren.
Du darfst einfach nicht selbst zurückgeben.
Und dann sind wir wieder in dieser Situation
mit den Schätzungen, dass man jetzt nur noch Sachen macht,
die man per Typ erreichen kann
und das ist eine Einschränkung, die nicht gut ist.
Genau, genau. Aber jetzt
gibt es zumindest eine Möglichkeit, die nicht ganz so schrecklich ist
und die einfach das Richtige
tut quasi. Das ist schon mal gut.
Alle Ideen verstehen die jetzt dann auch.
Ja.
Was haben wir noch?
Genau.
Jochen, du stöbert gerade so eine lange Liste.
Ja, ich habe das im Grunde nur...
aus dem What's-New-Ding rauskopiert,
das alles.
Oh, es gibt eine,
das war schon mal in Kleinigkeiten,
oder es gibt
einen Change-Dir-Context-Manager,
das ist etwas, was ich, ich weiß nicht, wie viel Mal
ich mir das geschrieben habe.
Und wahrscheinlich hat das jeder andere auch schon mal getan.
So, irgendwie so, ich möchte ein Verzeichnis...
Ein Change-Dir-Context-Manager, sehr schön.
Aber ich muss unbedingt wieder zurück, weil
das ist nicht gut, wenn ich da irgendwo
in einem, ich muss jetzt irgendwo tief im
Dateisystem-Baum irgendwas machen, aber ich...
Du musst ja nicht bleiben und da irgendwas ablegen, was da nicht
hingehört, aus Versehen oder so. Das Problem ist,
dass du dann noch, also wenn du halt da noch mehr
Sachen machst und du bist im falschen Verzeichnis, dann hat
das halt unter Umständen blöde Konsequenzen, deswegen,
also ich habe das schon ganz oft gemacht, dass ich dann irgendwie
mir einen Context-Manager dafür geschrieben habe, wo ich dann sicher sein
kann, okay, wenn der durch ist, dann bin ich wieder
zurück.
Und das Ding ist jetzt in der Context-Lib
ist jetzt so ein Teil drin.
Ist ein bisschen doof, kann man nicht gut verwenden, weil ansonsten
dependet man auf 3.11, aber ja.
Wirst changed hier und dann
ein Pass-Objekt oder was? Genau, man sagt
with ChangeDirPath
und wenn man da zurückkommt, ist man
wieder zurück.
Wusstet ihr, dass Bash auch so ein Feature hat?
Da kann man Verzeichnisse pushen.
Man kann so ein Stack machen mit Verzeichnissen.
Und wenn du fertig bist, kannst du Pop machen und bist dann wieder da,
wo du vorher Push gemacht hast.
Ne, wusste ich nicht.
Du musst allerdings selber darauf aufpassen, dass du wieder
an die richtige Stelle zurückpopst.
Bei jedem CD kannst du danach poppen.
Ja, genau. Du kannst halt einen Stack bauen.
Und du könntest prinzipiell ja auch Sub-Shells
machen, wo du dann ein Verzeichnis wechselst,
aber das wäre ja zu viel drauf.
Wo ihr gerade schon über Battery, kennt ihr Sockside?
Nee, was ist das?
Das ist so ein schönes, kleines
Tool, das für mich CD ersetzt hat.
Ach, doch, doch, doch, das verwende ich
auch. Ja, ja, ja.
Vielen Dank, war ein guter Tipp.
Ja, weil man kann nämlich einfach Abbreviation schreiben,
statt Directly nehmen. Dann merkt sich quasi die
Verzeichnisse, in denen man schon war.
Und dann nimmt er den nächsten Match davon.
Und dann kann man quasi mit
zwei Zeichen oder sowas
in das Directory seiner Wahl springen. Und das funktioniert
ziemlich gut.
Ja, ist tatsächlich sehr nett.
Hört sich
gefährlich an.
Du musst halt die Fahrer nicht mehr ausschreiben.
Tipp V, Auto-Completion
for the win.
Dieses Manifest unterschreibe ich
zwar prinzipiell, aber
ich möchte schon gerne wissen, was der Computer macht.
Ein Hoch auf den Co-Pilot, das ist hervorragend.
Weißt du ganz genau, was passiert, wenn du
Tab drückst?
natürlich, ganz exakt weiß ich das
vor allem in sowas wie PyCharm
das ist ja ein relativ kleines
übersichtliches Java-Programm
da weiß man immer genau, was passiert vorher
aber Control-R zum Beispiel ist ja dann
auch so, weil ich weiß nicht, kann man das auch konfigurieren
bei PyCharm oder sowas?
dass man eine Liste von den Vorschlägen bekommt, die jetzt gerade
die tollste Alternative
gewesen wären, wie das
Fisch-Shell macht das ja zum Beispiel
Blatt hat ja auch eine History
das ist ein Bash-Feature
History Search
das gibt es jetzt bei Fish
den nächsten Match
was ist das
FZF
genau das ist halt das was
genau weil die
in der Bash-Historie suchen
FZF ist natürlich deutlich
schicker
das kann man dann
ja
kennt ihr alle schon
Kleine Exkurse.
Ja, ja.
Genau. Was haben wir denn noch?
Wenn wir schon mal in den Exkursen sind, also ich wollte noch mal
sagen, ich bin natürlich einer von den Netten eigentlich.
Muss halt dann auch nett sein. Aber das ist halt
Capitalism, Baby. Wir hatten
über Projektsachen gesprochen. Das ist halt der Punkt.
Also wenn mich jemand als Sklave
ausbeuten will, das kann man natürlich nicht zulassen.
Es sei denn, man ist ja in einer
holokratischen Gemeinschaft, dann ist das alles was anderes.
Der Dominik hat gerade auch noch
was von seinem Stack zurückgeholt.
Es gibt tatsächlich Dinge,
die noch gefährlicher sind als Z und Zwei-Wut-Stamm.
Aber
ja, ich fürchte,
dass es halt
Kapitalismus, das ist schwer.
Ja, es ist ein Problem.
Kapitalismus ist schwer.
Man kann sich da schon die Zähne draus beißen, muss man sagen.
Nein, nein, das Problem ist halt,
was heißt Zähne draus beißen?
Das Problem ist halt, dass man gegamed wird
vom Geld.
Ja, das ist das Problem dabei.
Und dann muss man überlegen, ob man game will.
Also in Spieltheorie kann man ja überlegen,
ob das fair verhandelt, dann verhandelbare
Lösungen gibt oder nicht.
Und ich sag mal so, man kann nicht
ja vielleicht glück sein, wenn man Partizipationen sich erkaufen kann
oder das möchte irgendwie.
Oder wenn man höhere Ziele dafür aufgibt.
Für den
schnöden Mammon.
Ja, man muss
aufpassen. Also es ist
schwierig und ja, man ist
leichter
Fehler zu machen, das ist schon richtig.
Äh, genau.
Nein, ich finde, es ist eine Pflicht,
da Widerstand zu leisten, darauf wollte ich hinaus.
Ach so, ja, ja.
Na egal, wir wollten keine politischen
Sachen. Das ist aber schon so ein
moralisches Dilemma, was man hat manchmal, oder?
Ja. Also ich meine,
ich war noch nicht in der Situation, dass ich ein Feature
bauen musste,
wo ich
moralisch nicht dazu in der Lage
gewesen wäre, um es mal so zu formulieren.
Ähm, aber es gibt
ja schon so Situationen, man hört das ja immer wieder.
jetzt gerade mit den
zahlreichen Personen,
deren NDAs bei Twitter ausgelaufen
ist,
die jetzt
über Features sprechen können, die sie hätten
bauen sollen. Da gibt es
schon interessante Geschichten.
Okay, das habe ich
noch gar nicht gehört. Viel drüber diskutiert,
aber
ja, das ist so irgendein, also
einer von diesen Twitter,
einer von den wenigen entlassenen
Twitter-Software-Engineers,
hat geschrieben auf Twitter,
dass
das vor einigen
Jahren, 2016 war das, als Twitter
ganz arg Geld gebraucht hat,
wo übrigens Google und Facebook beide
nicht Twitter kaufen wollten, wo die sich jetzt glaube ich
ärgern,
dass sie da mit so
Telcos zusammengearbeitet
haben und die dann halt verlangt haben, dass
Twitter quasi alle 10 Sekunden
die aktuelle Position des Benutzers
übermittelt, damit die schauen, ob die in die Läden
der Konkurrenz reingehen.
Und wo dann halt auch der, der Engineer gesagt hat, nee, das brauche ich nicht, mache ich nicht. Und da halt in dem Team der Einzige war, der das hatte machen können, mussten die halt sagen, okay, gut, dann gibt es das halt nicht. Er ist dann wohl auch entlassen worden, aber er hat es nicht gemacht.
Und da gehört ja schon ein gewisser Mut dazu, gerade, also ich meine, viele Leute haben ja Angst davor, entlassen zu werden, aber 2016 als Software-Ingenieur hat man sich da, glaube ich, keine Sorgen machen müssen. Aber es gehört natürlich trotzdem Mut dazu, zu sagen, ich mache das nicht, auch wenn ihr mich entlasst.
Ja, und die meisten Leute haben auch ihren Preis.
Beziehungsweise dann erst recht.
Nur mehr zahlen und dann geht es dann trotzdem oder so.
Ja, auch das.
Das wurde ja wohl auch gefragt,
wie viel Geld müssen wir dir denn geben, dass du es machst?
Und dann hat er gesagt, so viel Geld habt ihr nicht.
Tja.
Ja, ja, also ich meine, nö, aber ich merke das ja.
Ich denke, es gibt viele Leute, die wahrscheinlich irgendwie,
ich glaube, Waffenentwicklung oder so wäre für viele schon ein Tabu
oder auch eben
für irgendwelche staatlichen Akteure
irgendwelche Schnüffelgeschichten bauen oder so.
Aber da gibt es ja auch wieder Gut und Böse, deswegen sagt
der Crusader das. Ja, irgendjemand macht's,
aber ich denke... Ja, irgendjemand hat den
Staatstrojaner geschrieben, irgendjemand hat...
Nein, aber die Frage ist halt, wenn du angegriffen wirst,
dann ist es relativ opportunistischer
wieder sowas zu tun.
Hm? Wenn du dich bedroht
fühlst, wenn du dich...
Ja, ja. Du bist...
Deine China und das große Amerika
versucht, sich zu unterdrücken, der muss sich wehren
und so weiter.
Das hat doch nichts mit Privacy-Sachen
zu tun, die du dir verkaufen kannst.
Doch, viel.
Naja, das hat nichts mit
Datenschutz zu tun.
Also die ganzen kommerziellen Zwecke, die dann
dazu führen, dass sowas passiert und
diese ganzen Incentives
überhaupt, das zu machen, also auch für Geld und so,
also die Moral hinten anzustellen
oder das halt tatsächlich aktiv zu
machen, um für so einen Staat oder so was
in Aktion treten zu können und dem mehr Kontrolle
zu verschaffen, das, glaube ich, hängt sehr stark damit
ab, zusammen.
Vielleicht habe ich es auch noch nicht
so richtig verstanden. Also ich weiß es nicht, ganz ehrlich zu
sein. Ich weiß es nicht, um ganz ehrlich zu sein,
wenn man mir Geld anbieten würde für ein
unethisches Feature.
Ich kann ja schon mal die Kontonummer sagen,
aber ich weiß es nicht. Du könntest was mit deiner Fahne tun.
Die Flagge hochhalten.
Ich glaube von mir, dass ich
ein guter Mensch bin, aber wenn es dann
tatsächlich in der Situation ist, kann ich
nicht garantieren, dass es tatsächlich so ist, weil
ich habe halt
Familie und ein Häusle, was abbezahlt werden
muss und
irgendwie will man sich ja
da schon schützen, ja, und man ist ja auch bequem,
ganz ehrlich. Ja, das ist Komfort auch nicht.
Jeden Tagsprojekt. Dafür habe ich
an der Uni immer Schelte bekommen,
wenn solche Leute waren.
Ja, ja, genau, das ist ja völlig klar.
Die Kampfbereitschaft, die fehlende, der Mut
zur Veränderung, fehlende revolutionäre
Anteile und so, ja, ja.
Verstehe schon.
Ja, und bevor die das Geld jemand anderem geben,
der das nicht gescheit macht, dann mach es doch lieber ich.
Kapitalism, Baby.
Ja, es ist schwierig.
Andererseits kenne ich halt auch so Leute,
die von sich selber sagen, ja gut,
die sind halt Software-Prostituierte,
die machen halt, was der Kunde verlangt.
Solange der das bezahlt, machen die das halt.
Ich würde sagen, das ist der Default.
Ja.
Ist jetzt auch, würde ich sagen,
nicht so furchtbar verwerflich, ehrlich gesagt,
weil ich meine, das ist ja das, was alle
anderen eigentlich auch so machen, üblicherweise.
Ja, aber gerade dann ist es doch verwerflich.
Ja?
Ja, vielleicht ist es dann besonders verwerflich.
Gerade hier in Deutschland muss man doch aus der Geschichte,
muss man schon aus der Geschichte sagen, ja, wenn die
das machen, dann ist es okay.
Besonders bei einem Beispiel voran in den Abgrund rennen.
Und möglichst.
Ja, es ist schwierig.
Ich weiß es nicht.
Aber eben, darüber reden bringt auch nichts, weil irgendwie eigentlich, das ist auch so etwas, da können wir den Bogen wieder zurück zu Twitter, dass man auf Twitter irgendwie auch sehr auf den Sack geht eigentlich.
Das ist ja der Aufruf, jemand soll uns mal in diese Situation bringen.
Bitte, immer nur dank von den Leuten, die die Böse nicht richtig auseinanderhalten können und nicht wissen, für wen es sich richtig bekämpfen lohnt.
Aber das Problem ist halt, man kann nicht drüber reden, man kann da nur Sachen machen oder nicht machen, ja, und dann kann man, aber wenn so, ich meine, eigentlich ist das halt eine selbstwidersprüchliche Geschichte, wenn man sagt, ich bin einer von den Guten und mach das nicht.
Weil damit, wenn ich das höre, dann höre ich eigentlich, du bist einer von den Bösen. Weil das öffentlich zu moralisieren ist halt eine Methode, um das zu gamen.
Ja, aber es ist ja richtig.
Ja, es wäre richtig, das zu tun.
Wir sind die Guten, weil wir das öffentlich gamen.
Das ist die Frage, ob das nicht noch Signaling ist.
Genau, also insofern.
Ich würde auch sagen, was entscheidend wäre, was
hinterher wirklich gemacht wird und nicht, was
erzählt wird, was jemand machen wollen würde und
was andere machen sollen, sollten und so. Das finde ich auch
immer so ein bisschen problematisch. Aber ja, egal. Jetzt werden wir
wirklich sehr froh. Also, wie gesagt, ist der Aufruf,
wenn mir jemand viel Geld für moralisch
verwerfliche Dinge anbieten möchte,
meine E-Mail-Adresse ist
hier in den Shownotes.
Ich weiß dann zwei,
ich wüsste zwei andere, denen man das dann auch anbieten
kann.
Abzüglich irgendwie.
die höchsten Provisionen, aber...
Genau, aber diese ganze Twitter-Geschichte
ist natürlich auch nochmal interessant.
Also das ist auch...
An der Stelle, um nochmal auf die letzte vorgedrückt zu kommen,
kurz so eine Coin-Adresse.
Ja, also da ist auch wieder was geplatzt.
Kann man noch? Lohnen sich Coin-Adressen noch?
Das würde auch unter News noch fallen, ne?
FTX irgendwie gerade wieder...
Ja, FTX und Binance waren nämlich der Bumm.
Also ich hatte mir letztes Mal schon überlegt,
aber vielleicht muss ich das jetzt nochmal irgendwie...
Muss ich da nochmal...
Wie kann man eigentlich den Kram shorten?
Ach, naja.
Das ist schwierig. Das geht nur, wenn jemand
die Unternehmen, die da investiert sind,
locken will. Du musst halt
wissen, wie viel Asset-Anteil
solche Investitionen an welchen Kapitalgesellschaften
haben und musst die halt locken.
Das Problem ist,
the markets can stay irrational longer
than you can stay solvent.
Das ist ein Problem, ja.
Can. Ja, und deshalb
ist es ein gefährliches Spiel.
Ja, genau.
Vielleicht auch erstmal wieder ignorieren.
Und hinterher dann sagen, ich wusste es.
Ich wusste es, aber ich habe nichts gemacht.
So ist es halt immer.
Ich habe es euch ja gesagt.
Aber jetzt ist es zumindest irgendwie aufgenommen.
Du machst nichts für Eiscreme.
Ich kann mal drauf linken und sagen, ich habe es tatsächlich gesagt.
Ja, also dieser Twitter-Auto-Unfall,
da ist auch gerade...
Aber in Zeitlupe ist es doch nicht.
Nee, stimmt, das ist ein relativ schnelles...
Wenn man versuchen würde, Twitter kaputt zu machen,
wäre es schwierig, das schneller hinzukriegen.
Ja.
Ja, ist schon beeindruckend.
Ja, erzähl mal mehr. Ich habe gar nichts davon mitbekommen, weil ich
habe ja seit Twitter, seit, weiß ich nicht,
2008,
19, 20. Ach, das ist super unterhaltsam.
Vor 15 Tagen
hat er Twitter gekauft und ist hier auch von Twitter
gekommen.
Der Saint Elon, wie man ihn
gemeinhin nennt. Ja, der Heilige.
Der Saint Elon. Und seither
gibt es nur gute Nachrichten aus diesem
Lage. Also eine der
ersten Sachen, die er gemacht hat, ist, dass er drei Viertel
der Belegschaft gefeuert hat. So viele?
Ich glaube, die Hälfte oder drei Viertel, ich weiß es nicht genau.
Also alle Leute, die vorbeigelaufen sind,
nach seiner Nase getroffen haben.
Viele von den Sachen sind schwer zu verifizieren.
Man weiß es nicht genau, aber man
hört.
Dann hat er angekündigt,
das ist dieses blaue Checkmark. Es gibt ja
für verifizierte Personen
gibt es so ein blaues Häkchen. Das wurde
mal eingeführt, weil
Identitätsdiebstahl sehr einfach war,
Man hat sich halt einfach Elon Musk genannt auf Twitter.
Mit dem Bildchen rein und dann immer seriöse Post verfasst
von der Zeit lang.
Genau, so lange seriöse Post, bis du verrückt geworden bist.
Und für Personen des öffentlichen Lebens
wurde dann mal eben so eine Verification eingeführt,
dass du eben sagen kannst,
okay, du bist tatsächlich der wirkliche Donald.
Und nur der hat so ein blaues Häkchen
und das ist dann verifiziert.
Oder du machst das mit Ausgangsverifikation
oder kriegst du Post-Ident?
Ich weiß nicht genau, wie die das
gemacht haben. Das war wohl ein Team, das das gemacht hat,
was kompliziert war.
Es waren ja auch nicht so, also das war halt nur so,
also haben Leute, Prübenzeiten,
Journalisten und so gekriegt, aber
und es wurde halt manuell gemacht.
Oh, das heißt also neue Fame, der blaue Haken.
Jaja. Und
eine der ersten Geschäftsideen, die
der heilige E mitgebracht
hat, war, dass das jetzt 20 Dollar im Monat
kostet, wenn du so ein blaues Häkchen hast.
Und dann hat Stephen King zurückgeschrieben,
was, ihr spinnt wohl, ihr solltet mich dafür
bezahlen, dass ich so ein blaues Häkchen
habe, nicht umgekehrt. Und dann hat Elon
geantwortet, okay, vielleicht ist 20 Dollar
zu viel. Wie wäre es mit 8 Dollar?
Und das hat ja schon mal für sehr viel
Unterhaltung gesorgt, weil die Leute
kommentiert haben, also ich bin ja kein CEO von
großen Firmen, aber ich dachte, wenn
man 44 Milliarden Dollar für irgendwas
ausgibt, überlegt man sich vorher ein Businessmodell.
Jedenfalls kostet das jetzt
8 Dollar im Monat und es ist jetzt
auch frei verfügbar, weil der möchte das ja so vielen
Leuten wie möglich verkaufen.
Ich kann jetzt Twitter, meinen blauen Haar für 8 Dollar anmelden.
Du kannst dich
verifizieren lassen für 8 Dollar
und das hat natürlich sofort dazu geführt,
dass sich ganz viele Leute
verifizieren lassen.
Nee, als Elon Musk.
Ganz viele Leute haben sich als
Elon Musk verifiziert
und dann natürlich auch sehr viele schöne Dinge getwittert.
Kann man auf den
üblichen Orten im Internet finden.
Also das war tatsächlich sehr lustig, muss ich sagen.
Also war gute Unterhaltung.
Das hat dann aber wiederum dazu gehört.
Du brauchst eine US-Adresse dafür.
Also das brauchst du irgendwie VPN und so.
Aber das geht.
By the way, the next thing I do, Elon Musk post, I buy Python.
Ja, aber Elon Musk hat sich ja schon lange Zeit
als Verfechter des Free Speech hingestellt.
Ja, dass er jetzt hier wieder alles frei macht.
Und dann ging es aber sofort, als die Leute angefangen haben,
sich als Elon Musk auszugeben, wurden die dann sofort suspendiert.
Und zwar so hart wie immer.
Dann hat er gesagt, irgendwie ist das wohl zu viel geworden. Ich weiß gar nicht wieso. Also wie gesagt, für mich sehr lustig. Für ihn offenbar. Er hat sich da so ein bisschen dran gestört. Und dann hat er gesagt, nee, das finde ich nicht okay. Also da muss jetzt immer Parodie drüber geschrieben werden, sonst geht das nicht.
Und wenn das jemand nicht macht, dann verbannt er die Leute irgendwie, ja, hat er dann auch gemacht.
Genau, aber heute war ja tatsächlich die nächste Welle, die nächste Welle in diesem Drama, weil Personenedetätsdiebstahl ist ja verboten, aber Firmen haben ja keine Persönlichkeitsrechte.
Und deshalb gab es heute ganz viele Leute, die sich als Firmen verifiziert haben und dann Tweets mit diesen Firmen geschrieben haben.
Zum Beispiel Tesla hat heute einen wundervollen Tweet veröffentlicht. A second Tesla has arrived at the World Trade Center. Also so ganz gute Sachen. Ein Eli Lilly hat einen Tweet geschrieben, der groß angekommen ist, dass Insulin ab jetzt kostenlos ist.
Und sie haben sich dann sehr dafür entschuldigt, dass das zu Verwirrungen geführt hat und es kostet natürlich weiterhin 700 Dollar pro Monat.
Und das ist so der aktuelle Stand und von diesen gefeuerten Leuten wurden wohl schon welche gefragt, ob sie wieder zurückkommen, um sich um dieses Thema zu kümmern.
Also es ist sehr beeindruckend, wie schnell...
Was kommt, was die Antwort Double or Nothing oder was ist dann die Antwort?
Keine Ahnung, also ich würde da nicht zurückgehen, ganz ehrlich.
Aber das ist auch so eine...
Wenn mich jemand in die Situation bringt, Double or Nothing,
möchte man, möge man gerne an mir ausprobieren.
Es ist auf jeden Fall sehr beeindruckend,
wie schnell auch so ein Image zerstört sein kann.
Zwei Wochen, um halt das Image des Industriegottes zu zerstören. Anderer Kommentar war, wenn jemand CEO von zwei oder drei großen Firmen gleichzeitig sein kann, dann kann es kein besonders wichtiger Job sein.
Ja, natürlich.
Ja, es ist schon so.
Also es ist wirklich beeindruckend,
wie öffentlich dieser ganze Autounfall passiert
und wie beeindruckend das ist.
Und man kann auch nicht so richtig wegschauen,
weil, ach, das ist so,
überleben sie es oder überleben sie es nicht?
Und kurz noch anfangen zu brennen
und anfangen noch, wer,
also es ist schon sehr beeindruckend, oder?
Interessiert das sonst irgendjemand?
Es ist ein großes Spektakel, muss man sagen.
Es ist ein Spektakel, ja.
Das ist es auf jeden Fall.
Und ja, ich meine,
ist alles nicht so einfach.
Das moderne Boulevard.
Ja, genau.
Es hat natürlich auch sowas für...
Der einfache Mann auf der Straße interessiert sich halt
für sowas. Es ist klar, dass so eine kultivierte
Begünstigkeit wie du da nicht...
Aber Jochen und ich, wir sind halt einfacher
gestrickt und deshalb gucken wir dazu.
Ja, also natürlich ist es auch ein Weg, um Aufmerksamkeit zu kriegen, nur ich weiß nicht, also so super geplant und super, ist es noch drei Level, dreidimensionales Schach mehr, als ich irgendwie verstehen kann oder ist es gar nicht so schlau?
Wenn Murdoch recht hatte, dann geht es nicht darum, was tatsächlich passiert ist, sondern nur darum, welche Emotionen wir hatten, als wir das hatten. Na doch, gibt schon, aber es gibt nur Emotionen, die wir hatten, als wir das wussten und da wir alle die ganze Zeit ums kaputt gelacht haben, erinnern wir uns an diese Freude, wenn wir noch in zehn Jahren an Twitter denken.
Und das ist Branding und Marketing.
Ja, aber das ist doch Schadenfreude.
Das ist doch egal. Du hast dich gut gefühlt.
Und das ist genau der Punkt.
Das ist ein wunderbares Branding.
Ich habe mich gut gefühlt, als es ihnen schlecht gegangen ist.
Das ist eine fundamentale Emotion von Menschen.
Schadenfreude.
Ja, aber es passieren ja tatsächlich.
Es gehen tatsächlich gerade sehr, sehr viele Leute weg.
Schadenfreude gibt es übrigens auch im Englischen, oder?
Das ist ein Englisch-Original.
Das ist ein Englisches Wort. Schadenfreude.
Und damit meinen die immer German Schadenfreude.
Ja gut, wir können das halt am besten.
Wir können auch so viele Dinge.
Und Humor besonders wenig.
Das ist halt das Einzige, was aus dem Keller ab und zu mal nach außen dringt,
wenn man in dem Kontext...
Schadenfreude.
Wenn dir einer in den Keller gefallen ist.
Ja, aber genau, also das ist der Autounfall.
also der andere Teil ist halt lustig,
dass jetzt Leute irgendwie
nach Mastodon gehen, irgendwie ins
Filibus und so.
Hast du dich auch schon angemeldet, Jochen?
Ja, aber ich bin nicht zufrieden
mit meiner... Dann traust du dich nicht, deine Adresse zu sagen.
Doch, aber ich hab das
irgendwie, das ist irgendwie ein Ding, das ich mal früher,
als Twitter auch mal wieder, als Twitter so eine
Episode hatte, wo es ihnen nicht so gut ging,
hab ich das dann halt auch mal so in Erwägung gezogen,
vielleicht lieber nach das zu machen, da hab ich dann
irgendeinen Server genommen.
Und zwar irgendwie das Tröth-Café
oder so, weil das halt offen war.
Tröth.
Retro-Tröth gibt's.
Und
genau, das habe ich jetzt auch und das ist irgendwie
nichts, ich weiß nicht, ob ich da bleiben soll. Ich dachte, wenn man
sich das selber husten kann, ach, dann will ich das vielleicht auch
machen. Auf der anderen Seite, ich habe so
viel zu tun und ich habe keine
Zeit und will ich mir das auch
ans Bein binden, aber naja.
Es gibt
instances.social,
Link in den Shownotes.
da kann man
sich die Instanzen anschauen, was die
so für Eigenschaften haben und auch, was die für Content
erlauben und so weiter und
so fort. Also da, so habe ich
meine neue Heimat. Ja, da fängt es schon an, Content-Kontrolle.
Ja, egal.
Ja, natürlich, aber ich will halt kein
Spam und keine Werbung haben.
Ja, aber ich will meine eigenen Sachen da reinchecken.
Die wollen kein Nudity haben und so.
Dann mach deine eigene Instanz.
Oder du filterst nach Instanzen, die das
explizit erlauben. Dann gibt es halt keinen vernünftigen
Client, irgendwie richtig fürs Telefon.
Ja,
aber das ist bei Twitter ja auch nicht so.
Also bei Twitter
gab es welche,
bis Twitter sie alle abgerührt hat.
Habe ich gehört davon, aber so alt bin ich
gar nicht.
Naja, also ich meine, das Problem
an dem, die
Speck ist wohl alle, also ich habe jetzt
auch viel darüber gelesen, dass Leute das selber wussten und die meisten
haben gesagt, super, ich wusste das selber.
Stunden, Tage später kommt es dann so,
boah, habt ihr mal die Speck angeguckt?
doch nicht. Habt ihr mal geguckt, was man dafür
alles braucht, um das zu treiben?
Meine Güte, wow, wer hat sich das denn
ausgedacht? Das ist ja schrecklich.
Und ja, das ist alles schon sehr schrecklich.
Und naja, also es gibt
also eigentlich, ja, aber was soll man machen?
Es ist halt das, was jetzt gerade irgendwie
auf jeden Fall sehr viel
Auftrieb hat und vielleicht kann man einfach mal mitmachen.
Im Prinzip würde ich da sagen, es ist voll gut, wenn es
irgendwie was gibt, was man selbst beruhigen kann,
was frei ist und so.
Indie-Web-Prinzip jetzt. Indie-Web, genau.
Ja, wäre gut.
Ja, seine eigenen Daten selber zu besitzen, ist schon gar nicht so schlecht.
Aber wer stellt denn irgendwie selber so einen eigenen Kasten zu Hause hin,
den man noch die ganze Zeit selber ownen kann, wo man nur selber reinmacht?
Gibt es ja auch gehostet.
Ja, kannst du auch hosten lassen.
Ja, ich bin noch so ein bisschen unentschieden.
Aber das Problem ist, so mittlerweile ist es nicht so sehr,
oh, Twitter und Elon, die sind irgendwie fies und ich gehe da mal weg,
weil ich will eigentlich nicht mit denen zusammen gesehen werden.
Zu, hm, irgendwann geht er einfach, irgendwann werde ich den kleinen aufmachen
und es wird einfach nicht mehr funktionieren.
Das ist so eher so. Das heißt, ich muss
Ja, schon. Ich kann nicht mal
mehr, wahrscheinlich in absehbarer Zeit kann man
nicht mal mehr nachgucken, wie man jetzt gefolgt hat,
um das wieder zu tun, weil es ist einfach weg.
Muss man jetzt exportieren. Muss man jetzt exportieren,
genau, sonst geht das nicht mehr. Also es ist
schon, also ja, komisch.
Ja, Free Speech?
Tja.
Ach, Free Speech gibt es in den
allermeisten Ländern auf der Welt nicht. In Deutschland auch nicht.
Kannst du auch nicht sagen. Ist die Frage, ist das richtig?
Selbst in den USA ist es halt sehr stark eingeschränkt.
Was heißt, naja, sehr stark?
Es kommt drauf an, auf welchem Standpunkt man steht.
Es ist ja auch eingeschränkt.
Was du denkst, wissen wir ja jetzt, Jochen.
Bitte?
Was du denkst, wissen wir ja jetzt, Jochen.
Das ist gerade gesetzlich gesagt.
Aber auch wenn man in den USA in einem Kino oder einem Theater sitzt,
darf man auch nicht irgendwie aufstehen und Feuer rufen.
Geht halt nicht.
Also sag mal so, du kannst dich dann nicht auf Free Speech
berufen, wenn du das machst, sondern dann wirst du halt auch
verknackt.
Ja, und Defamation gibt es auch
und Slander gibt es auch und
deshalb, es gibt überall
Einschränkungen.
Was ich halt cleverer finde, für so Online-Leute
ist halt sowas wie
Moderation, das wäre schon, also
kuratierte Dinge, das finde ich ein sehr
powerful Werkzeug. Das ist halt
immer unfair, aber ist immer
irgendwie richtiger.
Das ist auch so was, was man gehört hat jetzt,
dass eben das Hauptprodukt von Social Networks
eigentlich Content Moderation ist.
Dass du sozusagen den,
du verkaufst nicht den Benutzern irgendeine Funktionalität,
sondern du verkaufst den werbetreibenden Content Moderation.
Community Management.
Wenn die Content Moderation gut genug ist,
sodass deine Brand Safety, dass der Genüge getan ist.
Auch da gibt es so einen Exkurs.
Da hat wohl der heilige E einen Call gemacht mit den Werbetreibenden
und dann haben sie ihm halt da verschiedene Dinge erzählt.
Angeblich haben mehrere große Blöcke
während dieses Calls ihre Kampagnen ausgesetzt.
Und einer hat halt auch öffentlich auf Twitter gesagt,
hier, für uns ist Brand Safety das Wichtigste.
Wir wollen nicht mit folgenden Dingen in Verbindung gebracht werden.
Gezeigt, i.
Genau, er hat ihn dann blockiert.
Das war dann der nächste Tweet.
du bist doch für freie Sprache und
warum hast du mich denn dann blockiert?
Tja.
Und das
ist schon sehr interessant, da mal
so einen Einblick reinzukriegen, weil sich da
halt jetzt die Lücken aufreißen und mal einmal
hier in die Eingeweide gucken. Ja, und die Leute anfangen
Klartext zu reden und sagen, was halt ihre Interessen sind.
Und man sieht jetzt wirklich, wie das, also das ist halt das,
das ist so wie so ein Teilchenbeschleuniger.
Da nimmt man ja auch irgendwie so, da nehmen die Teilchen
viel Fahrt auf und dann haupt man die aufeinander
und dann fliegt der ganze Scheiß auseinander. Dann kann man gucken,
was steckt da jetzt eigentlich so drin. Ja, was war da eigentlich
drin. Und das geht jetzt, das sieht
man jetzt sozusagen in sozial auch gerade
und das ist total interessant, weil da stecken
manchmal sehr unerwartete Sachen drin.
Das ist wirklich sehr, sehr spannend.
Ja.
Ja. Aber
in other news, Amazon ist
die erste Firma der Welt, die jetzt nicht,
hat jetzt nicht mit Social Networks zu tun,
die ist die erste Firma der Welt, die
über eine Billion an Marktwert
verloren hat. Oh wow.
Und das
ist so, das kommt dann so im Hintergrund
drüber, wo hier so das große Twitter-Spektakel
hier im Vordergrund ist und im Hintergrund
machen die halt
1 Trillion Dollars, haben sie ihren Marktwert
verloren und das ist schon...
Das sind so Zahlen, die sind sehr schwer zu greifen.
Ja.
1.000 Milliarden.
Ja, 1.000 Milliarden, aber was bedeutet
1.000 Milliarden?
1 Million Millionen.
Wenn du überlegst, dass ein Haus
eine halbe Million, wenn du überlegst, dass ein Haus
eine Million kostet, dann sind es 2 Millionen Häuser.
Da kannst du überlegen, dass eine ganze
Großstadt. Ich finde, das ist eine gute
Wahl, das zu visualisieren. Der beste Vergleich, den ich
gehört habe, ist, wenn du zum Bau
der Pyramiden anfängst, jeden Tag 500.000
Dollar auszugeben, dann hast
du jetzt noch nicht eine Billion ausgegeben.
Tja. Ja. Also ich finde
das mit der Großstadt gar nicht. Wenn du dir ausrechnest, wie teuer sind denn
die Immobilien so in der Großstadt oder sowas?
Und dann nimmst du einfach so eine
Großstadt. Die ist da einfach komplett.
Kannst du irgendwo hinschicken. Aber da sind keine zwei Millionen
Häuser drin. Da kannst du dir Tokio kaufen davon.
Ja, die haben ja unterschiedliche Größe.
Das war jetzt natürlich eine Fehlannahme, dass die alle
gleichverteilt eine halbe Million kosten, aber
es ist ja schon ein größeres Gebäude und so deswegen.
Ja, aber in so einem Haus wohnt ja mehr als
eine Person, also du musst ja dann schon
eine vergleichsweise
große Stadt, also so eine große Stadt gibt es in Deutschland
nicht.
Doch, ich würde sagen, das unterschätzt du.
Ich würde sagen, so groß ist die nicht.
Also ich glaube, da kann man festhalten, dass es nicht so einfach ist,
sich davon zu stellen.
Ja, nehmen wir doch mal so Stuttgart oder Düsseldorf
oder sowas.
Stuttgart hat 600.000 Einwohner, da gibt es keine 2 Millionen
Häuser in Stuttgart.
Ja, aber der Wert, es geht um den Immobilienwert.
Düsseldorf hat auch 600.000.
Der Immobilienwert, eine Million.
Ich glaube auch, dass die Zahl, wenn die Zahlen so groß werden,
dann ist das unklar, was die an Wert überhaupt beschreiben ist.
Den Wert gibt es ja.
Also Amazon als Unternehmen existiert ja, das hat ja irgendwie einen Wert.
Es waren imaginäre Dollar.
Ja, das ist halt die Frage.
Also da stehen ja auch Dollar dran, aber es ist trotzdem irgendwie sehr unklar,
weil selbst kleine Veränderungen in der Zukunft
ja riesige Auswirkungen haben können, gerade wenn der Marktwert so hoch ist.
Das heißt, es ist halt irgendwie unklar, was das Geld da, auch wenn man das quantifizieren kann, was das überhaupt an Wert bezeichnet, weil, ja, also ich meine, bei anderen Großen ist das ja, bei Apple wäre das wahrscheinlich auch so, keine Ahnung, ja, was ist das eigentlich, Apple, die haben auch so einen Aktienwert, ja, was ist, wenn sie es irgendwie verkacken oder keine Ahnung, das jetzt nicht mehr funktioniert, kann, genau, ist sehr unklar, was das eigentlich ist.
Also diese Aktienwerte sind doch hypothetische Werte, oder?
Die sind doch der Wert, wenn du zum jetzigen Zeitpunkt alles verkaufst.
Nein, das sind keine hypothetischen Werte, das sind Buchwerte.
Nee, nee, das ist, wenn du zum jetzigen Zeitpunkt
alle Aktien verkaufen könntest, dann hättest du so viel Geld.
Nein, nein, das ist falsch, weil du sagst, das geht ja nicht.
Das ist ja physikalisch unmöglich.
Du sagst hätte, es gibt kein hätte.
Der Wert ist null.
Es gibt ein hätte.
Nein, der Realwert ist null.
Der Wert ist null.
Du hast einen Buchwert, der da drin steht.
Der reale Wert ist null.
Genau, und das ist ein Buchwert.
Du musst eine Transaktion machen,
um was zu verkaufen. Dafür musst du einen Käufer finden.
Du kannst gar nicht wahrscheinlich zu dem
Preis alles, was du hast, verkaufen.
Für 1.000 Milliarden kannst du nicht
Aktien kaufen. Zumindest nicht alle jetzt.
Genau, das geht nicht.
Eben, das sage ich ja. Deshalb sind es ja hypothetische
Werte. Wenn du
jetzt gerade alle Aktien verkaufen
könntest, dann hättest du folgenden
Wert. Das ist die Hoffnung auf zukünftige
Umsätze, also auf zukünftige
Produktivität der
Marken, des Values, der Businesses,
wo auch immer die ihre Kohle rausziehen wollen.
Das ist mir jetzt zu kompliziert.
Ja, das ist gar nicht so kompliziert.
Das ist viel, viel Fantasie.
Ja, genau.
Jetzt müsste man eigentlich bei Stable Diffusion mal eingeben,
irgendwie so Twitter, Armageddon und so einen cleveren Satz.
Mal gucken, was Stable Diffusion ausmacht.
Da passieren bestimmt dann auch lustige Sachen.
Wobei, ich meine, bei Stable Diffusion und so,
man muss halt schon irgendwie, man muss lange warten und so
und kreativ sein beim Aufschreiben von Prompts und so.
Ich weiß nicht.
Was?
Ja.
Nicht? Nein. Okay.
Mach mal mage.space auf. Hast du mal dalle
ausprobiert? Ach, dalle. Dalle hab ich auch ausprobiert.
Mach mal mage.space auf.
Na.
Wie wird das geschrieben? Mage, wie der
Magier. Und dann
.space.
Checking if the site connection
is secure. Oh oh.
Create anything.
Ja,
Jochen tippt gerade irgendeinen Satz zu Ihnen.
Müssen wir ein bisschen warten. Ist okay.
Ja, aber...
Ja, ja, es ist
kein CPS hinterher oder was?
Also da ist keine dicke Grafikkarte hinterher.
Das könnte man ja hinterhängen.
Ja, aber gut, genau, diese Experience
habe ich auf meinem Laptop auch und die ist
halt... Geht so.
Ja, okay.
Und? Was hast du eingegeben?
Ja, so...
Was habt ihr denn eingegeben? Das Twitter-Amageddon, das
von oben...
Es kommt so ein Vogel und der hat, also dieser Bird,
so ein Gelber, der hat
irgendein Viech in der Hand und versucht das zu fangen.
Und das ist so ein sehr artifizierter
Comic. Das sieht cool aus.
Ja.
Also bei mir dauert es noch.
Ja, also...
Ich habe gerade alle Rechenleistungen aufgenommen.
Deshalb kann ich jetzt...
Ah ja, Elon Musk destroying Twitter
with Gasoline.
Siehste?
Wenn man da gute Prompts schreiben kann,
dann passen auch lustige Sachen.
Aber ich weiß nicht.
Also den Prompt kann ich nicht empfehlen.
Ja, aber gut, also auf jeden Fall, da passieren lustige Sachen gerade und vielleicht gibt es ja, es gibt auch diverse Dinge in Python, die man benutzen kann, um dieses Activity-Pub oder wie das Protokoll heißt, da irgendwie zu sprechen.
Naja, vielleicht hoste ich da ja doch nochmal was, mal schauen.
Implementierst du erstmal deine eigenen Instanzen.
Das habe ich schon hinterher.
Du kannst doch dann eigentlich alle Nachrichten, die über dich gehen, mitlesen, oder nicht?
Du kannst doch dann eigentlich alle Nachrichten, die über dich gehen, mitlesen.
oder ist das im Protokoll verboten?
Ja, genau, toll.
Das kann dann sein, dass da eine RP gebannt wird,
aber da gibt es ja Wege außenrum.
Nee, aber das gibt es tatsächlich,
da gibt es ja Vorschläge, der Simon Willison
zum Beispiel, der ja auch sehr groß ist in der
Python-Welt, hat gesagt, der ist jetzt
auf Mastodon und ihm
gefällt es total und
er vermisst so ein bisschen seine Timeline, aber
das kann er sich ja jetzt selber schreiben.
Ja, das höre ich von vielen Leuten.
Ich höre von vielen Leuten, die sagen so,
Auch Simon Wilson hat zum Beispiel zweimal die gleichen Sachen, einmal auf Twitter, der hat auf Twitter irgendwie zehntausende Follower, keine Ahnung, auf Mastodon irgendwie ein Zehntel davon und hat dann zweimal das gleiche gepostet und hat gesagt, guck mal hier, Interaktionen auf Mastodon viel, viel mehr, viel interessantere Geschichten auf Twitter, war eher so lahm.
Also klar, ist natürlich jetzt auch irgendwie wahrscheinlich, ist keine unabhängige…
Ja gut, doch der Hype-Bias auch, ne?
Natürlich.
Wisst ihr, was der Eternal September ist?
Genau. Und auf Mastodon sind die jetzt halt noch nicht.
Das ist richtig. Also ich meine, ja, natürlich.
Aber andere sagen das auch,
sagen, momentan ist da echt eine gute Party,
weil, ja, es sind eigentlich nur
nette Leute und die ganzen
Pupa haben es noch nicht gefunden.
Mal schauen, wenn es
im nächsten September ist,
vielleicht dann rum. Dann hast du es ja auch da, Jochen.
Ja, wenn ich da jetzt auch hingehe, dann ist es wahrscheinlich vorbei.
Genau.
Wir gehören immer zu denen.
Aber schon interessant. Auch
interessant, Simon Millison habe ich jetzt gesehen, als ich
in dem Kontext auch
sich mit der Authentifizierung
beschäftigt und dann gibt es ein Paket von
ihm namens Django
Indie-Auth
und da fühlte ich mich auch so,
das habe ich irgendwann mal 2016 auf
einer von diesen Vorveranstaltungen
von der Beyond Tolerant
saßen wir mal da bei ZipGate rum
und so Indie-Web, voll gut,
war so eine Indie-Web-Konferenz, habe ich das auch
mal implementiert, Django Indie-Web ist
ein Paket von mir, da habe ich auch schon mal Indie-Auth
implementiert, jetzt hat es ja Heimwildensens auch noch mal
implementiert, muss ich mal vergleichen.
Jeder muss das mal machen.
Offenbar muss das jeder mal machen, ja.
Ja. Sechs Jahre später, Jochen,
du bist ja in der Zeit voraus.
Ja, weiß man nie so genau, oder?
Ganz ehrlich.
Ja, aufs falsche Pferd zum falschen Zeitpunkt
gesetzt, wer weiß.
Ja.
Aber ja, das hatte so ein bisschen
Comeback, aber das war gut.
Das ist eigentlich eine gute Sache. Genau, wo waren wir stehen geblieben?
Ich gucke gerade in die Liste.
Waren noch interessante Dinge dabei?
Ja, also vielleicht kann man
noch ein bisschen was zu dem, also die ganzen
Dinger, die ich jetzt hier noch habe, sind alles so eigentlich
eher so kleinere Geschichten. Tommellip,
weiß ich nicht.
Ja, da war ich total überrascht.
Ja? Warum?
Welche ist es denn? Welche haben sie denn reingenommen?
Oder eine neue?
Ich glaube, sie haben tatsächlich das, was Tommellip,
ich dachte, es gibt noch, ich weiß nicht,
sie haben das Ding irgendwie reingenommen.
Mindestens drei.
Tommel?
Einfach Tommel? Tommli?
Tommellip.
Ah, okay. Ja, ich glaube, es ist Tommellip.
Ist in die Standard-Tab reingegangen.
Aber es kann noch nicht schreiben.
Apropos, es gibt auch so eine Riesen-
PEP gerade zum Rausschmeißen
von vielen Zeugs.
Ja, das finde ich auch super.
Wie heißt der noch?
Die sind in der Dokumentation jetzt schon separat
aufgeführt. Deprecated Packages oder
sowas.
Removing Dead Batteries.
Ja, auch von
Christian.
Genau, Heimis.
Der hat auch diese
PyScript.
nach WebAssembly, Kompilieren, Python
gemacht hat, ja.
Ich war da kürzlich sehr überrascht, weil
persönlicher Bezug,
ich verwende
Tommel, ich finde Tommel gut.
Und ich habe Sachen
mit Tommel geladen und die dann gepickelt.
Fragt nicht,
warum.
Und wenn man
diese Standard-Tommel-Bibliothek, also nicht
die jetzt in der Standard-Bibliothek ist, sondern die
davor einfach, also wenn man pip-install-tommel
gemacht hat, dann kann man
die Sachen, kann man bestimmte Dinge
nicht entpickeln.
Und zwar Timestamps mit
Zeitzone.
Da fehlt irgendwas.
Ja gut, das
mir macht es auch keinen Spaß
Timestamps mit Zeitzone
zu haben, aber die gibt es nun mal.
Das kann
Tom Lee kann das nämlich.
Und dann bin ich auf Tom Lee umgestiegen.
Und
jetzt müsste ich dann da tatsächlich mal ausprobieren,
ob man das in Python 3.11 einfach auch so
machen kann und ob die korrekt pickeln.
Ich weiß, das ist eine lustige Kombination, tummeln und pickeln,
aber ich habe es halt gebraucht.
Für einen Cash.
Ich werde gerade pickeln.
Wenn du pickeln lernst, dann kann ich doch einfach alles ausführen,
was ich will, oder?
Ja, schon.
Und sind die ganzen Machine Learning-Modelle nicht alle pickelfeil?
Nee, nee.
Also ja, man benutzt da häufig
auch Pickel, aber
nee, nicht wirklich.
Ja, viele machen das so.
Das heißt, du kannst einfach so hochladen und sagen,
guck mal hier, ich habe das neue Maschinenmodell für bla bla bla
und alle Leute führen deine File out.
Ja, also ich meine, du kannst auch...
Und da sind wir wieder bei den guten und bei den schlechten Leuten.
Ja, aber ich meine, wenn du
sagst, ich habe hier ein tolles Maschinen-Loading-Modell,
installiere mal hier dieses per PIP, dieses Paket,
natürlich. Wenn du per PIP Sachen installierst,
dann kannst du auch alles machen.
Ja, bei PIP muss ich aber noch ausführen.
Nö, wenn du es installierst...
Pickel musst du auch ausführen, musst du auch laden.
Beim Rebuilden kommt das schon durch?
Wenn ich
installiert werde
als Paket, kann ich alles machen.
Okay.
Ja, ja.
RIP-Install, RM-RF.
Ja, also
genau.
Ah, genau.
Was
was an schnellerem
Python irgendwie, was da so ein paar
Sachen sind, die passiert sind, ist vielleicht auch
also Exceptions hatten vorher so ein bisschen
Overhead irgendwie
dadurch, dass sie zum Beispiel
das halt Speicher
alloziert werden musste
den man braucht, wenn man jetzt
eine Exception schmeißt
das muss man halt vorher machen
und das war
vorher auf dem Heap, das heißt man hat irgendwie mehr oder
weniger Malog aufgerufen, keine Ahnung
und das hat es halt langsam gemacht.
Das heißt, du hast halt dann immer, wenn du
irgendwie try-accept gesagt hast, hast du damit
den Code, der da drin steht, ein bisschen langsamer gemacht.
Und das ist jetzt weg,
weil jetzt wird halt irgendwie ein statisches Ding
alloziert und das wird halt immer benutzt und dann
da kümmert sich jetzt Python selber drum.
Das heißt, ist jetzt der Overhead von
try-accept ist nur noch, also es heißt irgendwie
zero-cost-exceptions
oder so, oder zero-cost-try-accept,
aber das ist es nicht wirklich. Es kostet irgendwie
ein Prozent Overhead immer noch, aber es ist halt viel
weniger als vorher.
Dann sind so Dinge
passiert. Funktionen
aufrufen ist schneller geworden.
Unter anderem,
die brauchen auch weniger Speicher.
Auch, weil
da irgendwas mit den
Frames irgendwie anders gemacht wird.
Ich weiß nicht mehr genau, was sie gemacht haben.
Und deswegen gehen auch Rekursionen jetzt
ein bisschen tiefer. Man muss das noch von Hand umstellen.
Aber
dann
genau
Python-Objekte
sind ein bisschen kleiner geworden, also
bei Python 2 Zeiten
waren es irgendwie so, wir hatten
ein Objekt mit vier Attributen,
wo man braucht irgendwie
350 Byte oder so.
In Python 3 waren es dann nur noch so
irgendwie
200 oder sowas, sondern irgendwie waren es
bis bei 3.10 sind es
120 Byte und jetzt sind es irgendwie
95 oder sowas, keine Ahnung.
Aber es ist schon deutlich weniger geworden.
Also Objekte brauchen auch deutlich weniger
Platz als früher. Ich meine, das kann man nicht gut mit
C++ braucht nur 32, aber
ja.
Ja, aber auch, ich meine,
immerhin. Aber immerhin, es geht da schon
in eine sehr
erstaunliche Richtung.
Das Größte
bei dem Wie wird Python schneller
Feature ist halt, dass halt
quasi
der Bytecode halt umgeschrieben wird.
Wenn da ein paar Mal irgendwas gemacht
wurde und
man das jetzt durch irgendwas
Einfacheres ersetzen kann, dann wird das halt ersetzt
und dann wird halt die einfache Operation gemacht an der Stelle.
Der merkt sich quasi, was er schon kennt
und macht das dann einfach schnell durch, ohne dass er
jedes Mal rumhüpfen muss, sondern kennt einfach direkt den...
Ja, also da sind solche Dinge dran.
Dick-Look-Ups zum Beispiel, wenn das halt
häufiger passiert. Ganz wichtig,
Globals, Locals, also früher hat man ja auch
immer solche Sachen gemacht wie,
wenn man
in Schleifen oder in heißen,
warmen Kot-Teilen
irgendwie, wenn man, da habe ich,
mache ich heute noch irgendwie, manchmal mache ich es so instinktiv,
dass ich dann halt eine lokale Variable
verwende, damit halt nicht immer
quasi, also entweder
ein Attribut-Log abgemacht werden muss bei einer Klasse oder
es in Globals oder so nachgeschlagen
werden muss, sondern dass man es halt im Lokal
Locals direkt hat und dann sofort gefunden wird.
Das ist jetzt alles egal,
das ist alles jetzt immer gleich schnell,
jedenfalls wenn es achtmal passiert ist danach, ist es dann immer
gleich schnell und das ist halt auch eine ganz
ordentliche Verbesserung.
Kannst du nochmal kurz sagen, was du
meinst mit heißen Stellen?
Ja, also du hast halt irgendwie vierfach verschachtelte
Vor-Loop, die Variable, du machst
irgendwas plus irgendwas da drin oder so.
Die Variable, mit der du das machst, die ist halt heiß.
Die brennt die ganze Zeit.
Ja, wenn du irgendwas Self-Punkt irgendwas sagst, war das früher
nicht so gut.
Es ist so ein Paradigma,
dass man sagt, der meiste Code, den du
schreibst, der wird nicht oft ausgeführt.
Und dafür gibt es ganz wenige
Stellen, die dafür ganz oft ausgeführt werden.
Und wenn du Self-Punkt gemacht hast?
Die Stellen, die
oft ausgeführt werden, das sind halt die heißen Stellen.
Und wenn du da Operationen machst, die teuer sind, dann sind
die halt unverhältnismäßig viel teurer
für die Gesamtlaufzeit des Programms, als wenn
irgendwo in der Initialisierung was
lagert. Weil die wird nur einmal ausgeführt.
Ja, genau.
Okay, weil Safety Call macht dann das ganze Objekt mal aus.
Und wenn du halt in der Schleife, die eine Million
mal ausgeführt wird, eine Nanosekunde
mehr verbrauchst, dann ist das halt
direkt messbar.
Und deshalb
versucht man eigentlich Optimierung.
Das ist das, was man mit Profiling erreichen will.
Wenn du anfängst zu optimieren,
guckst du erst, wo du optimieren musst.
Und deshalb, also es lohnt sich nicht,
irgendwelche Routinen zu optimieren,
die im Programmlauf nur zweimal ausgeführt werden,
wenn du dafür irgendwo eine Schleife hast,
die eine Milliarde Mal durchgewirbelt wird.
Ja.
Und deshalb hat der Jochen direkt
Mikro-Optimierungen gemacht mit Locker.
Ja, ist auch vielleicht nicht so schlau,
so sollte man auch nicht,
aber es gab durchaus Stellen,
wo das dann viel gebracht hat.
Wenn du das weißt, dass das was bringt,
dann ist das doch legitim.
Kannst du nochmal erklären, was du da gemacht hast?
Ja, solche Dinge wie eben
ein Attribut, das in einer Klasse dranhängt,
halt einen lokalen Namen zu geben.
Einfach zu sagen... Also vor dem Ausführen
hast du das? Lokal-Name gleich
Self-Punkt, irgendein Attribut, was man dann halt ganz oft braucht.
Und das da gehst du dann erst rein
und rechnest daran rum? Ja.
Genau. Weil dann der Instanz sonst nichts verändert
und am Ende schreibst du es wieder weg.
Ja, oder braucht man es dann auch nicht mehr.
Ja.
Ja, oder auch Methoden rausholen, dass du halt
nicht Self-Punkt-Compute machst,
sondern dass du halt sagst, compute gleich
self.compute und dann kannst du hundertmal
compute ausführen und musst nicht jedes Mal
diesen Lookup machen. Und das ist jetzt
besser? Ja, genau, das muss man jetzt eigentlich
nicht mehr machen, das passiert jetzt automatisch sozusagen.
Okay, ah,
beim achten Mal. Ja, irgendwie
so, ich glaube, das ist ein Implementationsdetail,
das muss ich auch jedes Mal ändern, also
aber irgendwie, ich glaube total,
da vertrauen wir drauf.
Ist ja auch wurscht, also ich meine,
das macht ja nur einen Unterschied bei Dingen,
die sowieso tausende Mal gemacht werden
und da, ob das jetzt
acht oder zwölf Mal ist, ist auch egal.
Aber cool, das ist jetzt automatisch, das heißt man kann
die Sachen, die man vorher nicht kannte,
kann man jetzt einfach ignorieren.
Genau, jetzt kann man es halt schön
hinschreiben und es sollte trotzdem...
Genau, und
manche Sachen gehen halt noch nicht.
Also was geht, was halt zum Beispiel
durch schnellere Operationen
ersetzt wird, ist halt so
Floats, wenn man die addiert, multipliziert
und so, keine Ahnung, bei int und float,
also wenn es nur int sind,
Wenn es nur Float sind, geht es, glaube ich.
Wenn es Int und Float sind, geht es halt nicht.
Kommt dann vielleicht irgendwann oder
es hat sich herausgestellt, es ist nicht so effektiv,
wenn man das macht. Keine Ahnung, aber
eigentlich muss man das alles nicht wissen.
Man kann einfach Code so schreiben, wie man das macht.
Es gibt eine ganz interessante
Geschichte. Das Ding
heißt Specialist
und
man kann, also es gibt ja diese
Dis-Funktion, mit der kann man sich den Bytecode angucken
und wenn man dem noch
einen Parameter übergibt, dann zeigt
es einem auch an, welche Sachen
rewritet worden sind
und welche nicht.
Und das heißt, so kann man sich halt beim
eigenen Code angucken. Kann quasi beobachten.
Ja, genau.
Cool.
This will disassembly. Genau.
Ja.
Ansonsten,
ja, nee, also ich glaube
fast immer, oder ich weiß nicht, habt ihr noch
irgendwelche Dinge, die in Python 3.11 dazugekommen sind,
die
ich jetzt noch nicht drin hatte,
die irgendwie interessant sind.
Ganz viel Speed, Speed, Speed.
Ja, und es wird jetzt
auch immer mehr, also das ist ja
eigentlich ein Plan, der fünf Jahre lang
verfolgt wird.
Oh, der Fünf-Jahres-Plan?
Ja. Und diese wichtigen Dinge, wo man
genau weiß, was in fünf Jahren alles passieren wird?
Ja, so ganz genau weiß man es natürlich nicht, aber
es ist halt ein langfristiges Projekt, also tatsächlich
geht über, also ich glaube,
der Shannon-Plan, der ist halt
irgendwie, das soll, über fünf Jahre
soll Python irgendwie ungefähr
fünfmal so schnell werden wie vorher.
Magst du?
Ja.
Und ja, es sieht gut aus.
Das ist schön, wenn diese Pläne schon Namen bekommen.
Ja, es ist gut in der Zeit.
Also bisher sieht das so aus, als ob es funktionieren würde.
Was hat jemand richtig geschätzt?
Es ist jetzt ein Jahr rum und das ist schon einmal so schnell wie vorher.
Genau.
Ja.
Nee, also es hat sich um ein Jahr gezogen irgendwie,
aber ansonsten ist alles noch so.
Ja, dann habe ich ja recht tatsächlich.
Ein Jahr hier mehr und weniger, meine Güte.
Ja gut, sechs Jahre.
Also ich meine, das ist halt alles,
das weiß natürlich keiner so genau.
Je länger das wird, desto schwerer ist es auch zu sagen.
Aber
momentan funktioniert alles.
Ja.
Genau.
Ja, was haben wir denn sonst noch so für News?
Es gab noch ein paar andere Sachen, außer Python, die
passiert sind, aber ich glaube, Python können wir dann an der
Stelle 3.11, jetzt so ein bisschen
drüber geredet.
Ein bisschen. Was ist denn noch passiert?
Erzähl mal. Also
zum Beispiel
also gerade noch eine neue Django-Release,
die jetzt 3.11-Release ist zum Beispiel.
Voll gut.
Ich habe gehört, es ist schneller geworden.
Ja, ja, ja.
Wollen wir nochmal über die 3.11...
Was auch noch
ein großes Release ist, hat jetzt nicht direkt was mit
Python zu tun, aber in dem Umfeld natürlich
auch mal interessant, Postgres 15 ist released.
Also zumindest nachdem wir
das letzte Mal irgendwie aufgenommen haben.
Und was kann das mehr?
Die werden auch immer schneller.
schneller geworden, genau,
es kann jetzt das Writer-Headlock
direkt komprimieren, also ist irgendwie was reingekommen,
ist halt, dass bestimmte Sachen so LZ4
und Z-Standard
sind halt direkt in Postgres drin,
sodass du das halt, dann kannst du deine Backups
direkt komprimiert rausschreiben
und das
Writer-Headlock kann auch direkt komprimiert geschrieben werden,
das macht es halt auch ein bisschen schneller,
einfach deswegen, weil du weniger schreiben musst.
Ja, das ist dann
Merge, ach, das große Feature, das ist Merge
Statements,
die im SQL-Standard drin sind,
sind jetzt implementiert worden.
Da kannst du halt diverse Geschichten,
Insight-Update, sonst wie Sachen mixen.
Und weiß ich nicht, ob das,
also kann man, wenn man rohes SQL schreibt,
kann man das vielleicht benutzen, bis das irgendwo in den
ORMs und so ankommt.
Keine Ahnung.
Ja, ansonsten, ja,
Indizes ein bisschen schneller geworden.
Distinct kann jetzt parallel abgearbeitet werden.
Ach ja,
Also eigentlich ist es ein bisschen schneller,
ein bisschen hübscher geworden.
Ich habe einen Kunden,
die haben noch Postgres 8.1.
Ja.
Und das ist ganz schön schwierig, weil da
kriegt man keine Docker-Container dafür,
da kriegt man keine
Dokumentation mehr dafür.
Ich habe einen Kunden, die schreiben mir Backend in Date-File.
Die machen das schon immer so.
Warum machen die das?
Sind deine Kunden so im Bereich
irgendwie...
Ja gut, läuft halt noch.
Sie betreiben kein Museum für alten Code oder so, oder?
Nein, aber es ist eine öffentliche Kunde.
Es geht schon in Richtung Museum für alte Maschinen.
Ja.
Nee, aber das ist tatsächlich echt schwierig,
weil zum Beispiel Django so alte Versionen von Postgres
einfach nicht unterstützt.
Da kannst du einfach direkt migraten,
kannst du es gar nicht machen.
Ja.
Und dann fängt es schon an, so echt schwer zu werden,
wenn du dann die Django-Version zurückdrehen musst
in den Zweier-Bereich.
Der Draft reicht noch zwei?
Ja, mit 2.2 ging das, glaube ich.
Also sie sagen nicht, dass es offizielle Kompatibilität gibt,
aber es ging dann irgendwie.
Ich musste irgendein Feature noch vermeiden
und dann haben wir es irgendwie nicht.
Aber es ist ja schön, dass dann Postgres jetzt fast
doppelt so weit ist, wie
diese Datenbank-Version.
Die ganzen Legacy-Sachen benutzen.
Und das sind immer von den Leuten, die meinen,
die müssen das unbedingt selbst migrieren, weil die die Sicherheitslücken
besser finden als die Community.
Ja, das ist die von 8.1. Naja, gut.
Muss jeder selber entscheiden.
Ja, wo wir schon
über Daten machen. In dem Fall habe ich tatsächlich
einfach gemacht, was der Kunde wollte.
Ja.
Die hatten das Geld, um das zu bezahlen.
Ja, ja, bei dem Thema waren wir heute schon mal.
Ja, genau.
Ja, ich meine, gut, dass Leute alte,
das ist halt irgendwie, ja, manche Leute stehen halt irgendwie drauf.
Tja.
Ich mache das so.
Aber beim Thema Datenbanken ist das auch ganz
interessant. Da gab es jetzt ein,
ich glaube, ich weiß nicht, ob das auf der DjangoCon
US war oder, ich weiß nicht, irgendwie haben
sich Carlton Gibson und
Simon Rennison unterhalten und
Simon Rennison meinte so, hm, warum ist
eigentlich, warum steht in den DjangoDocs eigentlich
drin,
SQLite wird nicht für den Produktionsbetrieb
empfohlen.
Und ja, der Grund ist halt,
naja, wenn man SQLite verwendet
und dann fangen plötzlich an, also es funktioniert im Entwicklungsmodus,
funktioniert das ja alles super, und dann
wenn man es produktiv verwendet, dann fangen Leute an, da Sachen
reinzuschreiben, dann ist halt relativ schnell
Ende Gelände, weil
kann halt immer nur ein Thread reinschreiben und die locken
halt und wenn man viel schreibt, dann lockt sich das
alles gegenseitig.
Concurrent Rights ist das Problem.
Und dann ist man sehr schnell
dann kriegt man Time-Outs.
Ja, es ist total
so funktioniert nicht gut.
Das kann man noch ein bisschen in den Griff kriegen.
Der hat einen 5-Sekunden-Standard-Time-Out.
Kann man natürlich hochdrehen,
dann wird es nur langsamer, aber
es ist am Ende, ja.
Genau. Und daraufhin,
okay, Simon Lism hat ganz viel
mit SQLite, Data Setter und so Zeugs
und hat auch Ahnung von dem Ding
und macht so, okay, ich probiere mal was.
Und hat dann halt Benchmark
dazu geschrieben und dann so Sachen
ausprobiert, wie zum Beispiel einfach mal umstellen
von dem
normalen, ich weiß nicht, was der normale
Mechanismus ist, auf
Write-Ahead-Log, weil SQLite kann auch
sowas mit Write-Ahead-Log.
Da hat man zwar immer noch das Locking-Problem,
aber das ist halt irgendwie,
also es kann immer nur ein, zwei
gleichzeitig schreiben, aber irgendwie wird das dann
halt alles so ein bisschen zwischengepuffert und ist halt
schneller fertig. Und stellt sich raus, tja,
also an der Stelle ist dann halt irgendwie diese
Timeouts gehen weg. Es geht eigentlich. Und es geht
eigentlich, ja, da hat er wirklich
so hunderte Requests pro Sekunde
oder auch, ich weiß nicht, wie viele tausend
Sachen er da pro Sekunde schreiben konnte,
viel. Und es geht. Und es
skaliert auch. Okay, was
passiert denn jetzt, wenn ich mehrere Prozesse nebeneinander draufschreibe?
SQLite verwendet
so ein File-Logging dafür.
Und ich so, oh, das fliegt mir bestimmt
in die Ohren. Nö, es ist fast linear skaliert
bis zu vier Prozessoren.
Also, geht auch.
Das heißt, du kannst eigentlich,
also für die allermeisten, also es wird
machen. Es wird kaum Leute geben, die,
wenn man SQLite so konfiguriert,
in einen Bereich
kommen, wo sie Schreibprobleme kriegen.
Das heißt, eigentlich kannst du das Ding halt
auch produktiv deployen
und Leuten das als Datenbank
geben.
Man will vielleicht aus diversen anderen Gründen auch noch
ein richtiges Postgres verwenden, aber
für viele Sachen reicht
es wahrscheinlich aus. Und dann brauchst du keinen Datenbank-Server mehr,
weil das ist halt schon
eine sehr schmerzhafte Geschichte. Ja, das ist schon
ein Einrichtungsaufwand, der
vermeidbar ist.
Und wenn du das jetzt auf irgendeine kleine
virtuelle Maschine mit
Dateisystemen deployen kannst,
reicht für die meisten Leute wahrscheinlich aus.
Und das ist natürlich schon nett.
Also als ich das gelesen habe,
dachte ich auch, super.
Genau.
Hat
SQLite nicht kürzlich so ein
Sicherheitsthema gehabt? Ich erinnere mich, dass da irgendwas war.
Oh, das habe ich, glaube ich, überlesen.
Weiß ich nicht.
Ich glaube, die hatten so ein
Sicherheitsproblem
bei sehr großen
Rides. Anscheinend gibt es da einen
Overflow, wenn du irgendwie
Max Bytes
minus 1 an Daten
holst. Das ist irgendwie ein Terabyte oder sowas.
Okay, na gut. Also es ist nicht
es ist kein
realistisches, kein pragmatisches Problem.
Aber tatsächlich
war das so ein bisschen News, weil
SQLite eigentlich sehr, sehr gut vertestet
ist und sehr, sehr sicher ist.
Und das war eben so eine Sache, wo
einer gesagt hat, haha, aber wenn ich
einen Terabyte gleichzeitig in einer Transaktion
drin habe und dann
irgendwas mache, da wird halt auch irgendein Puffer
alloziert, der dann ausläuft.
Dann geht es aber nicht mehr.
Ah, okay.
Das passiert den Besten.
Ja.
Ja, ja.
Tja,
ansonsten
PyMCs4 ist veröffentlicht.
Heißt
jetzt nur noch bei MC, also für
probabilistische Programmierungsgeschichten
Library, die man sich mal angucken kann.
Manchmal ist es ganz nett, das zu haben.
Wofür steht denn MC?
Monte Carlo.
Also MC, MC,
Markov Chain, Monte Carlo.
Ja, das MC steht für
Monte Carlo.
Okay.
Ja.
Ja, ich weiß nicht genau.
Und Andrej Kapati ist ja jetzt
seinen Job los und hat angefangen
ein Machine-Learning-Tutorial
mit Python irgendwie auf YouTube
zu veröffentlichen. Ach, ja, ja, ich habe gesehen, er macht jetzt
mehr YouTube-Videos wieder, ja.
Also so neue Networks und so, so ein bisschen
Intro, wie das in Python geht und
Language-Modelling und sowas. Nett, ja, kann man sich
auf jeden Fall auch angucken.
Ja, der macht immer sehr schöne Sachen.
Stimmt, warum?
Der war bei Tesla, ne?
War der schon von...
Tja.
Ist er wohl entlassen worden?
Nee, ich glaube, der ist tatsächlich freiwillig.
Ja, es gibt da einige Leute,
also der, der sich diese,
na, wie heißen die GAN-Modelle?
General Adversarial Networks,
ja, wie heißt die?
Generative Adversarial Networks, meine Güte.
Ist schon spät.
Wie heißt da ein,
der war irgendwas auch Chefmäßiges
für Machine Learning bei Apple
und der wollte eigentlich weiter
Homeoffice machen und Apple hat gesagt,
nee, wollen wir nicht und dann ist er auch gegangen.
Da muss man halt
wissen, was einem wichtig ist, ja, ob die Leute
da sind oder ob sie
da sind.
Ja.
Also ich meine, das ist halt auch eine sehr teure
Policy, aber offenbar
scheint es für Leute so
effektiv zu sein, dass sie das gerne in Kauf
aufnehmen. Die Policies sind ganz wichtig
fürs Teamgefüge, fürs Building und für ihre
Kontrollsüchte.
Ja, ich glaube auch, das ist einfach,
ich meine, wenn man, was ist denn, wenn man
jetzt da so irgendwie eine Firma hat und da ist
keiner, das ist ja nicht gut. Also ich meine, wenn ich jetzt
eine Firma habe, dann möchte ich ja auch schon sehen,
dass da Leute sind. Du meinst, wenn du so ein teures Gebäude hast?
Ja. Die müssen da schon sitzen und arbeiten,
damit der Peitsche dahinter fliegen kann.
Weiß ich gar nicht. Also wenn sie in einem
Meeting sitzen und mir zuhören, finde ich das eigentlich auch okay.
Da können sie ja gar nicht so viel arbeiten, aber das ist
für mich eigentlich auch gar nicht so schlecht, finde ich.
er kann sich reden würden.
Andere Leute, Aufmerksamkeit,
Aufmerksamkeit, nur für dich.
Ja,
ansonsten.
Arsch die Räuber.
Genau, was hatten wir noch? Also es gab noch
diverse, wie gut das jetzt für die meisten wahrscheinlich nicht so
oder ich weiß nicht, für mich war es
ganz interessant, macOS und iOS
Updates, da gab es einige ganz interessante
Geschichten. Also was mich ein bisschen genervt
hat. Es war diesmal ein sehr, sehr hakeliges Update
für mich.
Es gibt ein sehr schönes
Feature, das ich tatsächlich sehr cool finde. Es gibt auf dem
Mac, ich weiß nicht, wie macht ihr das eigentlich, wenn ihr Fotos
teilen wollt mit anderen Leuten?
Gar nicht.
Machen wir nicht.
Ist nicht so ein einfaches Thema, finde ich.
Und auch auf iOS und so
oder auf Apple im Apple-Universum
ist es auch nicht so leicht.
Also denkt man, man kann so ein Shared-Album
machen und dann geht das.
Nee, geht nicht, weil dann werden die ganzen
das hat irgendwie super klein gerechnet, winzig und dann
Dropbox?
Dropbox könnte man machen, aber dann hast du halt das Problem,
dass du, ja, du musst die Dinger,
wie willst du die angucken,
was legst du in diese Dropbox?
Fotos?
Ja, aber wenn du jetzt, nimm mal an, du hast
RAWs. OwnCloud?
Legst du die da rein? Von RAWs kann da niemand angucken,
da musst du ja schon irgendwie, ja.
Ja, aber, ja,
ist halt,
wir sind wieder bei so Problemen, die wenige Leute haben.
Ja, also,
Ja, der Jochen möchte halt seine 28k-Resolution-Fotos gerne schon in ordentlicher Qualität sharen können.
Ja, aber dann muss der das halt selber schreiben, muss der halt ein Verzeichnis haben, wo die Dateien drin liegen und die dann irgendwie zugänglich machen.
Und ich meine, Image-Gallery-Software gibt es genügend.
Ich habe eine Lösung dafür, also sozusagen für diese, aber was halt auch schön wäre, ist, dass man das so, dass man halt ganze Alben oder so, nicht unbedingt nur so eine Auswahl, das ist ja auch Arbeit, das zu machen, wenn man möchte einfach Leuten sagen, so hier, ihr könnt das einfach auch angucken, das gab es bisher eigentlich nicht und das kann man auch nicht gut öffentlich über eine Webseite oder so machen und das ist jetzt drin und das funktioniert eigentlich auch ganz gut und da funktioniert genau das, dass man, also es gab auch vorher schon eine Möglichkeit, man konnte so einen iCloud-Sharing-Link erzeugen
Und dann hat man so eine Web an sich gekriegt und da waren auch die Originalgrößen-Dinger drin. Was die meisten Leute machen ist wahrscheinlich, sie nehmen einfach den Kram und verschicken ihn vollkommen hemmungslos per WhatsApp oder so. Und WhatsApp rechnet den Kram dann irgendwie zu gut genug.
Und dann nehmen die Leute das
und machen A3-Ausdrucke dafür,
hängen sich jetzt in die Wand und sagen,
also irgendwie sah das aus.
Der Typ kann gar nicht fotografieren,
das ist ja schrecklich.
Wer für eine Kamera fällt gar nicht auf,
das Motiv gefällt denen immer,
deswegen hängen sie sich an die Wand.
Ja, es ist wahr, aber es tut manchmal auch ein bisschen weh,
wenn man sieht, was Leute so machen.
Mit deinem Auge,
mit deinem ästhetischen Anspruch.
Ja, genau.
Also das, was Leute tun, ist sehr schrecklich.
Aber ich glaube bei Mac-Update, wir reden schon so lange
über Mac-Update, wo das hier alles gefixt ist
Es gibt ja jetzt ein Feature, dass
das halt fixt, aber das hatte
ziemlich hakelige Geschichten, bei mir jedenfalls war es alles
sehr schrecklich, hat die ganzen Counts und alle kaputt gegangen
Ich hab
meine Uhr hat teilweise nur noch
die Uhrzeit von gestern angezeigt
Also es war alles irgendwie, es war sehr unrund
Aber dafür in voller Auflösung
Ja, ja ich weiß auch nicht
Also
Hm
Aber Jochen, weißt du denn, dass es die
Uhrzeit von gestern ist? Weil gestern hat ja die gleichen
Uhrzeiten wie heute. Ja, ich weiß,
wann ich ins Bett gegangen bin und eingeschlafen bin
und dann, wenn ich morgens aufwache...
Und dann ist er einfach stehen geblieben. Genau, und dann ist er stehen geblieben.
Das war ein bisschen...
Ich dachte, du meinst, er hat jetzt das 12 Uhr
von gestern angezeigt. Nein, nein.
Das ist eine philosophische Frage.
Ja, so
solche Probleme
von gestern, ja, das weiß ich.
Ach ja.
Genau.
Ja, nee, das ist schon bei den unwichtigen Dingen angekommen, glaube ich.
Ja, ich glaube, wir sind jetzt mit den News tatsächlich durch.
Wir machen mal das Thema, was wir heute machen wollen.
Ich weiß nicht, wie weit wir das noch haben.
Nach zwei Stunden Diskussion fangen wir schon das Thema an.
Ich weiß nicht, ob wir gescheckt haben.
Wir wollten ganz kurz, mach mal fünf Minuten listen.
Wir haben es am Anfang versprochen, wir konnten das schon wieder nicht halten.
Wir haben die ganze Zeit gequatscht.
Jetzt müssen wir auch einmal kurz fünf Minuten noch in das Thema Listen einsteigen.
Okay, machen wir.
Aber vielleicht so ein, gut, machen wir.
Listen.
Wer steigt jetzt ein von uns drei?
Man schreibt doch was rein, wenn man überhaupt was rauchen kann.
Johannes, du kennst dich doch damit aus.
Eine lineare Abfolge von Einträgen.
So, das ist eine Liste.
Und die Ordnung hat eine Anteil an Leuten.
Ja, genau.
Also es ist eine lineare Abfolge.
Es gibt ein erstes Element und ein zweites Element
und ein drittes Element und ein viertes Element.
Und vielleicht gibt es auch ein fünftes Element.
Und das hört sich doch an wie was Sinnvolles, oder?
So zum Programmieren, dass man sich mehrere Dinge merken kann.
Ist eine Liste ein Array? Ist ein String eine Liste?
Und genau, jetzt gibt es zwei Techniken,
wie man sich sowas speichern kann.
Das eine ist einfach alles hintereinander.
Und das heißt dann normalerweise Array oder Vektor oder Liste.
Und das andere ist quasi immer mit Verweisen auf das Nächste. Ich habe ein Element in der Hand und das Nächste steht an dieser Stelle. Und das muss dann wieder einen Verweis auf das Nächste haben. Und diese Technik heißt Linklist. Also eine verknüpfte Liste.
Und die haben sehr unterschiedliche Eigenschaften, obwohl sie sich, also von außen sehen die ja gleich aus. Von außen sage ich, ich gebe mir das dritte Element und dann kriegst du das dritte Element oder gib mir jedes Element nacheinander, so wie man es in Python mit einer Vorschleife hat.
Und das spielt keine Rolle, wie die darunter liegende Implementierung ist, ob die jetzt im Speicher alle hintereinander gespeichert sind oder ob die alle irgendwo gespeichert sind und dann nur aufeinander verweisen. Aber so von den Laufzeiteigenschaften und von den möglichen Operationen oder von den Kosten der möglichen Operationen unterscheiden die sich ja schon sehr deutlich.
Und das ist super interessant, weil es halt so das Interface so quasi das gleiche ist, aber halt so vom Verhalten extrem unterschiedlich ist.
Und das ist so ein bisschen da der Kernpunkt an dieser Debatte, warum wir da diesem Thema eine Podcast-Episode gönnen wollen können.
Und es gibt da auch Verfechter auf beiden Seiten, das ist auch ganz interessant, dass da halt Leute sagen, nein, es muss so sein und zwar für beide Möglichkeiten.
Und die sind auch unterschiedlich schwer zu implementieren und das ist auch ganz interessant. Deshalb kennen viele Informatikstudenten halt die Datenstruktur LinkedList, weil die super einfach zu schreiben ist. Es ist super einfach eine Datenstruktur zu schreiben, die LinkedList ist, weil du brauchst nur zwei Felder.
Du brauchst ein Feld, das was ich speichern möchte und ein Feld, das was das nächste ist. Also ein Paar eigentlich.
Oder das was das vorherige ist, geht das auch?
Ja, das kannst du machen. Das heißt dann
Doubly-Linked-List. Kannst du in beide Richtungen
durchgehen. Du kannst sogar
tatsächlich so Tricks machen, dass du auf ein
späteres Element verweist und dann hast du sowas wie
eine Skip-List. Skip-Listen. Ja.
Sehr cool. Ja, das ist eine meiner Lieblings-
Datenstrukturen. Aber weil die so einfach
sind, gibt es die schon sehr lange. Zum Beispiel
Lisp ist im Wesentlichen
gebaut aus solchen
Link-Lists. Da gibt es Car und Cutter.
Also Content of Address
Register und Content of Decrement
Register. Das
eine ist das Element, was man speichern möchte
und das andere ist ein Verweis auf die nächste Stelle,
wo man was sich merken kann. Und das
reicht schon aus, um eine Linklist zu machen. Das reicht schon
aus, um sich
Sachen zu speichern und das ist
ziemlich spannend. Und
es ist sehr leicht, das zu schreiben und deshalb
wird das eben oft als Beispiel
für eine
Datenstruktur benutzt in Informatik
Vorlesungen, in Einführungsvorlesungen,
dass man sagt, jetzt schreibt ihr mal eine Linklist
und dann fügt mal
100.000 Elemente ein und schaut mal, wie schnell ihr es machen
könnt. Und
macht mal Iterationen und macht mal
so, dass man in der Mitte was einfügen kann. Und macht
mal so, dass man am Ende was löschen kann. Und macht mal
so, dass man X, Y und Z machen kann.
Und
weil das so einfach ist und
weil man es so einfach machen kann, gibt es da dann halt
sehr viele schöne Optimierungstechniken. Zum Beispiel,
wie der Dominik schon gesagt hat, Pointer in die andere
Richtung speichern, dass man auch von hinten
nach vorne durchiterieren kann.
Oder
keine Ahnung, Pointer,
die halt in die Mitte zeigen oder die
irgendwelche Segmente haben
oder Sublisten haben
oder sonst irgendwas, wo du halt viele schöne Dinge
machen kannst damit. Oder auch
Cycle Detection, das ist dann was, was da
rausfällt, wenn du so eine Liste hast, wo du
immer nur aufs nächste Element verweist,
kann es ja sein, dass du ein Element hast, was irgendwo
an eine andere Stelle in die Liste rein verweist
und dann hast du so einen Kreis
in deiner Liste drin. Und wie machst du
Cycle Detection?
Bitte? Eine Q.
Eine Q kannst du auch machen, genau.
Da musst du dir nur das erste und das letzte
Element merken, damit du dir was einfügen kannst
am Ende und was abholen kannst vorne.
Kann man sehr schön und sehr leicht
viele Sachen draus
bauen. Auch einen Tree kannst du dir sehr leicht
draus bauen. Hast du halt nicht einen Pointer,
wo das nächste Element ist, sondern
hast du halt zwei Pointer. Eins
zum rechten Child und eins zum linken
Child und dann hast du mit wenig
Arbeit einen Baum aus deiner Liste
gemacht. Und deshalb ist das so ein
bisschen so ein fundamentales
Bauteil in den
Datenstrukturen.
Aber auf modernen Prozessoren sind
Linklists halt brutal langsam, üblicherweise.
Weil
du bei jedem Element
einen Cashmiss hast, normalerweise.
Und Cashmisses sind das
schlechteste, was du machen kannst auf modernen Prozessoren.
Was ist denn jetzt ein Cashmiss?
Ja,
man hat ja im Kopf immer so die Vorstellung,
Cashmiss ist,
wenn du kein Geld bekommst,
wenn du zu wenig Geld hast.
Nein, man hat ja im Kopf so das Bild, dass ein Computer aus zwei Bauteilen besteht. Das eine ist der Prozessor und das andere ist der Hauptspeicher. Und der Prozessor macht irgendwelche Dinge mit den Sachen, die im Hauptspeicher sind. Und das mag vor 40 Jahren so gewesen sein, aber das ist heutzutage leider nicht mehr so.
heutzutage gibt es viele verschiedene
Ebenen von Speicher.
Und je näher der Speicher am
Prozessor ist, umso schneller ist der.
Und umso kleiner ist der.
Das heißt, ein Prozessor hat
sogenannte Register, die sind direkt
in den Prozessor eingebaut, aber davon gibt es halt
nur, keine Ahnung, 16.
Und
die nächste Ebene drüber, die heißt
L1 Cache, der Level 1 Cache
und davon gibt es dann halt, keine Ahnung,
16 Kilobyte.
Und dann gibt es den L2 Cache und das sind
dann halt 128 Kilobyte. Und dann gibt's
den L3-Cache, das sind dann 4 Megabyte.
Und weil die
alle sehr klein sind, gibt's danach halt den Hauptspeicher
und der hat dann auf einmal, keine Ahnung,
je nachdem, wie viel man halt hat, 8 Gigabyte
oder 16 Gigabyte oder auch 128
Gigabyte, das spielt keine Rolle.
Und die Ebene
dahinter, hinter dem Hauptspeicher, ist eigentlich die
Festplatte oder beziehungsweise die SSD,
die man jetzt drin hat, die dann halt in Terabyte
gemessen wird, die im Grunde
genommen gar nicht so viel anders ist
als das, was im Hauptspeicher drin ist,
nur halt langsamer.
Und jede
dieser Ebenen ist immer langsamer.
Um auf ein Register zuzugreifen, das dauert
einen Prozessorzyklus. Um auf den
L1-Cache zuzugreifen, dauert, keine Ahnung,
vier Prozessorzyklen. Auf den L2-Cache
acht Prozessorzyklen.
Das ist ungefähr ein Faktor 3 dazwischen, ja.
Also am Schluss wird es mehr, aber
ja. Bis auf den Hauptspeicher, ja, beim Hauptspeicher
ist es eine große Lücke.
Genau, da ist eine große Lücke.
Das heißt,
Ja, es ist gefährlich, Sachen aus dem Hauptspeicher in den Prozessor reinzuholen, um dann Sachen damit zu machen. Und dieses ganze Schema funktioniert nur deshalb, weil Programme sowas haben, das heißt Lokalität.
ich eine Speicherzelle bearbeitet habe, dann ist die Wahrscheinlichkeit hoch, dass ich
die benachbarten Speicherzellen als nächstes bearbeite. Und deshalb funktioniert dieses
Caching, weil das Caching eben darauf basiert, dass immer ganze Blöcke von Speicher in die
Ebene darunter geholt werden. Das heißt, wenn ich jetzt im Hauptspeicher irgendeine
Speicherseite habe, die hat 16 Kilobyte und ich lese da ein Byte draus, dann wird diese
ganze Seite in den L3-Cache
geholt. Und das Byte,
was ich hole, das wird halt
mit so einer Cache-Line
unterschiedlicher Größe in den L2-Cache geholt
und daraus in den L1-Cache und
daraus in die Register und in den Register wird das dann gemacht
und dann geht das ganze Spiel wieder zurück.
Das heißt, wenn ich auf benachbarten
Speicherzellen operiere,
dann muss ich das nur
einmal diese Seite aus dem Hauptspeicher
in den Prozessor reinholen
und die anderen Zugriffe, die sind dann
wesentlich schneller.
Wenn ich jetzt aber im Hauptspeicher hin und her springe, so wie es bei einer Linked-List ist, dann muss ich jedes Mal in den Hauptspeicher gehen. Und Hauptspeicher ist halt aus der Sicht eines Prozessors extrem langsam. Also das eine wird in Nanosekunden gemessen und das andere wird in Mikrosekunden gemessen und das ist einfach ein brutal großer Unterschied.
Und deshalb ist die Linked-List heutzutage so ein kleines bisschen verpönt, habe ich das Gefühl. Das ist so, ach, der benutzt Linked-List, der hat keine Ahnung. Weil die halt Cache-Misses erzeugen, weil die halt im Speicher hin und her springen.
Die andere Technik, die man machen kann, das heißt oft Array oder Vector, ist, dass du halt die Elemente alle hintereinander schreibst.
Das heißt, das erste Element steht an Speicheradresse 1 und das zweite Element steht an Speicheradresse 2 und das nächste Element steht an Speicheradresse 3.
Und halt je nachdem, wie groß die Dinger sind, dass du die halt alle aneinander packst.
Aber was steht dann, wenn du durch so einen drinstehst, steht dann nur der Zeiger auf das richtige Objekt drin?
Und unterschiedlich, ja.
was du halt hast. Sonst hast du ja eine Maximalgröße von Dingen,
die da drinstehen können und dann verschwendest du den Speicherplatz,
wenn nicht alle gleich groß sind von den Dingen, die drinstehen.
Ja, je nachdem, was du halt hast. Also wenn
du eine Liste von Integern hast, dann sind
die halt alle 32-Bit groß
und dann stehen die halt einfach zack, zack, zack nebeneinander.
Wenn du einen String hast, dann sind die halt alle
keine Ahnung, auch
32-Bit groß, weil
man inzwischen Unicode macht. Wenn du Floats
hast, hast du halt 32-Bit oder 64-Bit
oder 128-Bit Floats oder was auch immer
du hast.
Das ist sozusagen der Nachteil da dran.
Du musst halt die Größe wissen.
Du musst wissen, was du da rein tust.
Du kannst auch, wenn du Objekte da rein speicherst,
dann werden das üblicherweise ja Pointer sein zu Objekten
oder halt Verweise.
In Python zum Beispiel,
da braucht man gar nicht so richtig drüber sprechen,
weil das immer alles nur Verweise sind auf andere Dinge.
Aber ja, der Vorteil davon ist halt,
wenn du, sagen wir mal,
ein Array hast mit 128 Integern drin
und da das erste Element liest,
dann musst du das ja aus dem Hauptspeicher
in den L3 holen und dann hast du aber das
gesamte Array schon direkt im L3 drin.
Das heißt, die Zugriffe, die dann auf das
zweite Element sind, die kosten
vergleichsweise gar nichts.
Und
das ist natürlich sehr schön, wenn du
Operationen machen kannst, wo die Speicherzugriffe
einfach schon gecached sind, wo du schon
die Sachen geholt hast.
Und deshalb ist das heutzutage so ein bisschen
die Technik, die man
eher einsetzt, dass man halt sagt, wir machen Arrays,
die zwar an dieser Stelle eben
wesentlich schneller sind, aber dafür andere
Nachteile haben. Zum Beispiel ist es
bei Arrays schwieriger, Sachen einzufügen
und rauszulöschen
auch. Das heißt, dieses Q-Beispiel,
was der Dominik sofort intuitiv gesagt hat,
ja, das ist ja easy, kannst du hinten einfügen und vorne rausnehmen,
das ist mit einem Array
nicht so einfach umzusetzen.
Und das
hat sehr viele Edge-Cases,
ja, selbst, also wenn man sich das umsetzen
möchte, kann man sich ja überlegen, ja, wenn ich
vorne ein Element rausnehme, dann muss ich alle anderen
da hinten eins nach vorne schieben.
Das ist aber auch blöd, ja, weil dann musst du
jedes Element anfassen, bloß weil du eins rausgeholt hast.
Und das wird langsamer, wenn es mehr sind.
Das ist eine, Python-Listen kann man nicht so gut
als quasi so, wenn man da
dauernd Sachen hinten raus
und vorne rein tut oder so, das geht mit
Python-Listen nicht gut, genau, ganz genau.
Das ist aber schlecht. Ja, und deswegen sollte man
dafür lieber von Collections-Deck
oder so verwenden, also Double-Ended-Queue,
das geht deutlich besser. Oder Queue.
oder da baut man sich einen
zyklischen Puffer, hast du eine Liste mit 100 Elementen
und hast einen Array,
einen Index drin, der das erste und das letzte Element
ist, aber das ist auch schlecht,
hast du auch ganz viele Edge Cases.
Was ist, wenn du mehr als 100 Elemente
in deiner Queue hast?
Was ist, wenn die
ausläuft? Das musst du dann abfangen,
dass du dann lauter,
also hast du ganz viele so Edge Cases.
Arrays sind
vom Aufbau her simpler, aber in der
Verwendung her irgendwie
fitzliger, weil
die halt so eine feste Struktur haben.
Und das ist so ein bisschen
die Sache.
Das ist irgendwie so eine
Geschwindigkeitsoptimierung.
Die sind in mancherlei
Hinsicht schneller und dann halt auch gleich
richtig viel schneller.
Aber dafür holst du dir
ganz viele Implementierungsprobleme rein.
ich bin eigentlich ein Freund von
Link-Lists, weil die so schön sind. Und Skip-Lists,
ich meine, da braucht man nicht drüber sprechen,
das ist die coolste Sache der Welt.
Ja, und
kann man da Elemente deaktivieren
quasi?
Nee, die verweisen nicht auf die Liste, sondern
Ja, genau.
Genau, eine Skip-List ist was total
Smartes. Das ist eigentlich eine Liste,
die aber zusätzliche Pointer
hat, die durchspringen können.
Und die
legst du randomisiert an
und dann hast du
ähnliche Zugriffszeiten wie
bei einem Baum. Das heißt, du kannst da so
eine Art binäre Suche drin machen,
aber
hast nicht die Verwaltungsprobleme
bei einem Baum, sondern du hast einfach randomisiert,
ich verweise auf ein späteres Element.
Und man
muss ein kleines bisschen mehr Arbeit machen, aber das ist
so der Kern der Sache, dass du
eben zufällige
Skips machst. Und das ist das
Skip in SkipList, dass du halt
sagst, okay, ich gehe von Index X
auf Index X plus eine zufällige
Zahl, die sich dann zwischendurch auch verändern kann.
Die sich verändern kann, wenn du in der Mitte was
einfügst oder was rauslöscht
oder so.
Und das ist vom Programmieren her was total
Simples, gibt dir
aber eben die logarithmische
Zugriffszeiten, amortisiert
statistisch
logarithmische Zugriffszeiten.
Und deshalb ist das was total Cooles, das ist so was
völlig Überraschendes. Als ich das zum ersten
Mal gesehen habe, habe ich,
erst versteht man es nicht,
warum macht man sowas? Und dann
kommt so ein Aha-Moment
und dann versteht man es
immer noch nicht, weil das viel zu simpel ist.
Das ist sowas Simples und es gibt einem
so Zugriffszeiten wie bei einem Baum, wo man
vorher drei Monate mit so
scheiß Balancing Red-Black-Trees
verbracht hat.
Und hinterher sagen sie einem, alles, was
du hättest machen müssen, wäre Randomized
irgendwie durchgehen.
Random Forest.
Und wenn du eine sortierte Liste hast und
dann mehrere Skip-Ebenen hast, kannst du das sogar
garantieren, dass du logarithmische Zugriffszeiten hast.
Tja, da gibt es schon coole
Sachen.
Moment, doch mal, was kannst du
garantieren, wenn du mehrere...
Ja, wenn du eine
sortierte Liste hast, dann
kannst du so eine Skip-List
haben, wo du
auf der untersten Ebene zufällige Skips
machst und eine Ebene
drüber machst du zufällige Skips auf
diesen zufälligen Skips und
eine Ebene drüber machst du zufällige Skips auf den
bis du in der obersten Ebene quasi
vom ersten bis zum letzten Element skippst.
Und dann kannst du innerhalb
dieser Skipp-Ebenen
kannst du binäre Suche machen.
In der
Linked-List binäre Suche
Das ist so ein bisschen wie so ein Reißverschluss.
Genau, also du kannst entweder sagen,
du hast das Element gefunden oder du gehst eine Ebene
runter und suchst genauer.
Und das gibt dir eben diese logarithmische
Zugriffszeit, weil du eben
randomisierten binären Baum
suchst. Ist das sowas wie ein Random Forest?
Aber nicht verwalten. Da bin ich total auf dem falschen
Holzweg gerade.
Ist es ja kein Baum.
Es ist so eine
randomisierte
Granularität, die du da hast.
Du hast verschiedene Ebenen
verschiedener Granularität.
Und du hast
Zugriffszeiten wie bei einem Baum, musst
aber nicht den Baum verwalten und das ist
super cool.
Cool. Es ist tatsächlich
wirklich sehr einfach, sich so eine Liste zu schreiben.
So eine ganz einfache Linked-List
schreiben ist super easy und
jeder sollte das mal ausprobieren.
Und dann auch
ein bisschen damit spielen und gucken, wie schnell das ist
und wie schnell man es machen kann und was man alles damit machen
kann und ob man eine Queue daraus kriegt und
ob man da sinnvollerweise eine Queue damit rauskriegt.
Du meinst,
da kann man es einfach mit Algorithmen nennen?
Ja, Algorithmen
und Datenstrukturen.
genau, das ist so ein bisschen
der Grund, warum das
in Informatikvorlesungen halt oft vorkommt,
weil man da sehr einfach
einen Einstieg hat und dann aber
trotzdem weiter mitkommt.
Und weil es halt so
eine fundamentale Datenstruktur ist,
muss man auch irgendwie,
sollte man schon irgendwie wissen, wie das funktioniert.
Das bringt einem ungeheuer viel.
Ja, und weil man halt
direkt auf die Probleme stößt, die halt,
ich glaube, das ist auch der, also da habe ich mich
vorher gefragt, also
sagen, warum wird eigentlich, wenn man
Informatik, das sind doch diese coolen Sachen, wo man so
Computerspiele macht und irgendwie Grafik und weiß ich
nicht, so zu zahlen und sich dahin
und dann wird einem erzählt, also wenn wir jetzt hier,
wir beschäftigen uns vor allen Dingen damit, wie man so
Listen sortiert und irgendwie Dinge
in so Listen wieder sucht
und findet und so.
Das macht man jetzt, suchen und sortieren die ganze Zeit
und dann, ja, der Grund ist halt schon, dass
irgendjemand hat, vielleicht hat man sogar
Knut geguckt, also worum
beschäftigen Rechner eigentlich so den ganzen Tag
und da war es 70 Prozent waren suchen und sortieren
von Dingen war halt das, was Rechner so machen.
Und ja, das ist heute immer noch so,
glaube ich. Also
Listen sortieren ist so. Ich glaube eher, dass das mehr wird.
Es wird wahrscheinlich sogar mehr.
Weil man doch mehr Fälle gefunden hat,
wo man das drauf resorzieren kann.
Weil man mehr Daten hat.
Oh, sortieren
und suchen wären auch nochmal so tolle Folgen.
Ja.
Das kann man auch mit LinkedLists
kann man auch sehr schön Sortieralgorithmen
umsetzen.
Und auch
das lohnt sich. Auch das lohnt sich,
dass man sich mal selber hinsetzt
und einfach mal BubbleSort
implementiert. Das ist ja sehr einfach,
der Algorithmus. Das stimmt. Und
dann sieht man auch sofort, dass der nur
eine Handvoll Operationen benötigt und dass
der langsam ist. Und warum der langsam ist?
Wenn man sich das dann nämlich rausvisualisiert,
dann sieht man, was da passiert und das ist großartig.
Oder ein MergeSort.
Ein MergeSort ist auch vergleichsweise einfach
und ist aber eben deutlich schneller
als BubbleSort.
Ich mag total gerne
LSD-Sort.
Du hast so 10 Buckets
und da packst du die Sachen einfach dann rückwärts,
also von der letzten Dezimalstelle immer rein
und dann packst du einfach die Buckets zusammen
und dann ist es fertig.
Okay.
Das ist auch sehr geil. Das heißt LSD-Sort,
weil das geht nur, wenn man genügend Drogen genommen hat.
Nein, nein, das hat damit nichts zu tun.
Leider natürlich.
Aber das ist
super, weil das kannst du auch mit Kindern machen.
Du kannst einfach denen sagen, hey, pack das mal.
also so Sortierspiele, pack das mal
nach der Reihenfolge da rein, dann hast du eine sortierte
Liste, das ist sehr cool.
Ja.
Würde ich nicht sagen, das ist einer der coolsten.
Und das kann man sehr gut ausprobieren, wenn man sich selber gerade seine
Linguist geschrieben hat, deshalb ich plädiere
dafür, dass das jeder mal tut.
Also es ist so, Radix
kommt das, ne? Radixort, ja.
Radixort, ja, Radixort.
Das kenne ich, ja.
Es gibt tatsächlich auch
Verfechter heutzutage und man muss halt auch
dazu sagen, ja, je nach Anwendungszweck
sind Arrays besser oder Linked Lists?
Also warum es LSD ist, was heißt Lists?
Significant Digit. Ach so, okay.
Ja, gut.
Sorry. Okay.
Es gibt
es natürlich auch heute noch. Ich habe
kürzlich einen Artikel gelesen von dem
Menschen, der Redis
entwickelt hat,
der gesagt hat, wir benutzen es an ganz vielen
Stellen, weil das ist halt das, was man
braucht. Und auch wenn es so ein kleines bisschen
verpönt ist, wenn man so ein bisschen belächelt wird,
Das ist halt das, was richtig ist.
Und
er verweist dann auch auf Stellen im
Linus-Kernel, wo auch Link-Lists verwendet werden
und sieht es als
Indiz, dass es halt das Richtige ist.
Weil das halt das
Richtige ist. Weil das einen Use-Case
erfüllt, der sinnvoll
ist.
Ja.
Durchaus. Also ich meine,
was auch noch so
eine interessante Geschichte, also auch eine Frage,
Linklist oder Array
ist halt, wie indiziert man
eigentlich, wo fängt man an, 0 oder 1?
Und Python macht das
richtig, fängt an 0 an.
Korrekt, das ist die einzig
wahre Antwort. Genau.
Warum macht man das nochmal? Ich hatte
jemanden, der meinte, das ist total furchtbar, die ganzen
Entwickler machen alle immer falsch, die fangen immer
bei 0 an zu zählen. Ja, also weil du
dann zum Beispiel so nette Sachen machen kannst, wie wenn du
eine Liste in zwei Teile teilen willst
und willst sie an der Position 2 teilen,
dann sagst du einfach Liste
Ecke-Klammer auf
Doppelpunkt 2
Klammer zu oder Liste
Ecke-Klammer auf 2 Doppelpunkt
Ecke-Klammer zu und hast dir dann genau an der Position
2 geteilt.
Das ist zum Beispiel ein schöner
Effekt davon.
Da gibt es tatsächlich eine alte E-Mail
von Guido von Rossum, wo er genau das
gefragt wurde, warum er das so gemacht hat
und genau diese Antwort kommt, dass er sagt,
wenn du halt diesen Index
wiederverwendest, dann sind die genau lückenlos
zusammen. Ich muss mal schauen, ob ich
diesen Link wieder finde. Das wäre schön, weil
das mein nettes Argument ist.
Das wäre schön, ja. Das ist auch sehr angenehm zu lesen. Und der sagt
auch die anderen Optionen, die du machen kannst.
Und die haben alle auch ihre
Plattform. Da gibt es ein super Paper
von Deikstra.
Das ist
im Original. Hat der das handschriftlich
aufge... Er hat ja so, er hat ja irgendwie in den Diskussionen
mitbekommen, wo Leute gesagt haben,
die einen sagten, ah, mit 0 anfangen, die anderen
mit 1. Und dann der, der
1 gesagt hat, der sagt dann irgendwann, ah,
hat denen vorgeworfen, ihr seid
irgendwie pedantisch, dass ihr da unbedingt auf dieser Null
besteht, das ist doch eigentlich ganz egal, wir können ja irgendwas
anfangen zu zählen, sowohl wurscht.
Das erste Element ist das erste Element, nicht das Nullte.
Und dann meinte er so,
ja, also ich hab mir das mal überlegt und
dann hab ich das mal aufgeschrieben, wie das richtig geht
und nee, der mit der Eins liegt falsch
und zwar weil, und
das dann so auf Karopapier zwei
Seiten, die er dann handschriftlich vollgeschrieben hat,
als ich dann zum Beispiel eben, wie man
sagen kann,
wie man jetzt, ich glaube, da geht es um,
er sagt 2, also
die Folge hat 2,3
Punkt, Punkt, Punkt, 12 oder so.
Wie kann ich die jetzt logisch
hinschreiben? Also überhaupt, ich weiß keine Ahnung,
wie da drauf gekommen ist, das so zu machen, aber
und dann hat er alle Möglichkeiten, wie man das hinschreiben
kann, mit größer, kleiner und so, aufgeschrieben
und hat gesagt, und ist die dann alle durchgegangen und meinte so,
also, man könnte jetzt sagen, das wäre gut.
Das hat folgende Vorteile, folgende Nachteile.
Man könnte sagen, das macht man so.
Das ist jetzt auch nicht so gut. Und dann kommt er halt dabei raus
am Schluss so, ja, nee, man muss mit 0 anfangen.
Das geht sonst nicht. Ansonsten muss man irgendwie
kommt man, hat man manchmal
Vergleiche mit, also mit, wo man
einen Index minus, also wo
Null nicht das kleinste ist, sondern
irgendwas drunter.
Also wenn man jetzt da
so unnatürliche Zahlen als Index
verwendet, das ist irgendwie nicht gut. Das sollte
man nicht machen.
Also es ist wirklich, es ist auch sehr amüsant zu
lesen und, aber es ist
auch sehr überzeugend. Also am Schluss denke ich so, ja
stimmt, musst du mit Null indizieren, das geht
nicht anders. Und
Und ja, am Schluss endet das, diese zwei Seiten, die er geschrieben hat,
endet auch mit einem sehr schönen Zitat, wo er dann schreibt,
ja, ich weiß jetzt gar nicht, von wem das, er zieht ja da irgendjemand anders.
Er meinte so, ja, also warum regen sich die Leute an so einer Stelle
dann immer darüber auf und werfen dann vor, dass da Leute pedantisch sind?
Das ist deswegen, weil so soziale Exklusionen muss man halt,
wenn es um so religiöse Überzeugungen geht, immer dann besonders machen.
Nicht deswegen, weil man Angst davor hat,
dass andere Leute vielleicht was Falsches denken könnten,
sondern der eigentliche Grund ist
die Möglichkeit, dass sie recht haben könnten.
Deswegen muss man da besonders draufhauen.
Und das ist halt, ja, das ist so.
Das muss man ausschließen.
Ja, genau.
Super. Ja, also da kann man das mal nachlesen.
Das müsste man auch unbedingt in die Schulungsbücher nehmen.
Ja, genau.
Was ich auch manchmal gerne mache,
ist, man kann, wenn man jetzt
in einer Liste so bestimmte Teile
markieren will, da kann man natürlich
irgendwie Liste, klicke ich da mal auf,
anfangen, Doppelpunkt Ende,
hinschreiben. Man kann aber auch,
es gibt irgendwie ein Bild in Slice, wo man
sagen kann, Slice irgendwie
Anfang, Ende
und dann kann man eben Namen geben.
Und dann kann man das Ding direkt reintun.
Das heißt, man kann sagen irgendwie, das ist jetzt
irgendwie die, weiß ich nicht, der Name oder
sowas. Und dann gibt dann, sagt man,
großgeschrieben Name, gleich Slice
5,12, Klammer zu.
Und dann kann man hinterher sagen, Liste, Ecke, Klammer auf,
Name, Ecke, Klammer zu. Das ist
manchmal ganz nett.
Ja,
genau, es gibt natürlich noch diverse Geschichten
in Python, auch die eher so mit Arrays zu tun haben.
Es gibt das Array-Modul,
also das Array-Modul
in der Standardbibliothek, immer sehr schön.
Da kann man dann tatsächlich solche Sachen, die alle den gleichen Typ haben,
reinschreiben. Es gibt auch die Verallgemeinerung
davon. Sind da sowas, was
die Indizes dann direkt mit drin oder sowas?
Indizes,
dass man da irgendwie dann Dinge drin suchen kann
oder... Ja, zum Beispiel, oder Zugriff direkt
Nee, das ist nur, das sind nur
dann einfache Arrays. Also für sowas kannst du
dann Pandas oder NumPy oder so. Okay,
Da muss ich ja direkt immer enumeraten oder so.
Aber es gibt Memory Views.
Memory Views sind dafür da, dass man halt so Daten,
die halt irgendwie im Hauptspeicher zusammenliegen,
irgendwie durch die Gegend schieben kann,
ohne dass man jetzt exakt ranschreibt, was das jetzt ist.
Sondern man kann die Daten einfach in der Gegend rumschieben
und dann ist es halt ein Memory View.
Und dann kann man aus dem Memory View wieder irgendwas anderes machen.
Ein NumPy Array oder halt ein Array oder sonst irgendwas,
in dem man dann halt dazu sagt, du hast jetzt irgendwie folgende Struktur.
Und dann kann man halt auch so
multidimensional
werden oder so.
Aber wichtig ist oft, dass man das Ding
als gesamten Block im Hauptsprecher
irgendwie rumschieben kann.
Und dafür sind Memory Views ganz gut.
Das ist auch ganz nett.
Das muss natürlich in den Hauptsprecher passen.
Ja, wenn es nicht reinpasst,
dann gut, dann muss man was anderes machen.
Eine Ibis oder so.
Genau.
Was auch nett ist, ist, wenn man
die NumPy
macht da auch noch viele magische
Geschichten mit. Man kann jetzt auch mehrere Sachen,
wenn er jetzt mehrdimensionale Arrays
hat, sowas gibt es nicht in der Standardbibliothek.
Aber es gibt halt
die Möglichkeit, das zu
benutzen. Also das sieht Python schon vor,
auch wenn es jetzt
keine Objekte in der Standardbibliothek implementiert,
dieses Interface. Aber dass du halt
sagst, Index, Doppelpunkt,
irgendwas, Komma und dann die nächste
Dimension.
Das macht der NumPy halt,
kann man auch verwenden,
und
ein Ding, das man da häufig
sieht, was halt komisch aussieht, man kann auch
statt, also wenn man jetzt sowas schreiben würde, wie
x, Ecke, Klammer auf
i, Komma und dann Doppelpunkt, Komma, Doppelpunkt,
Komma, Doppelpunkt irgendwie,
um halt nur eine bestimmten,
also eine bestimmte
Dimension rauszuziehen
und genau, alle anderen Sachen
halt dann beliebig zu lassen,
dann kann man dafür auch Ellipsis verwenden und einfach
Klammer auf i, Komma,
Punkt, Punkt, Punkt schreiben. Das sieht man häufig
und dann, also hat mich aber anfangs total verwirrt.
Hä, was ist das denn?
Ja.
Kann man sich auch noch mal ein bisschen was sparen?
Ja.
Was gibt es sonst noch nennenswertes
über Listen zu sagen?
Ich glaube, du musst einmal noch ganz kurz
über Ellipsis was sagen, weil vielleicht ist das immer noch nicht
Ja, das ist sowieso so ein interessantes
Spezial-Ding.
Also ich sehe das relativ häufig, ich benutze
das auch mal, wenn ich irgendwas fertig machen möchte.
Einfach so als Platzhalter in meinem Kopf.
Aber es ist nicht so ganz richtig verwendet.
Man kann einfach drei Punkte machen irgendwo und peißen.
Genau, es gibt auch, man kann es auch ausschreiben.
Das funktioniert erst mal wie ein Pass, oder?
Wenn du einfach nur drei Punkte schreibst, ist es wie ein Pass.
Genau, aber es verhält sich in manchen anderen Kontexten
halt manchmal so ein bisschen anders.
Man kann es auch, also in Typ-Annotationen
wird es häufig verwendet für,
da steht jetzt halt irgendwas, irgendwie,
keine Ahnung, oder halt eben
in diesen
Index-Geschichten
man kann auch Ellipsis einfach tatsächlich
ausschreiben. Und wenn man jetzt sagt, Punkt, Punkt, Punkt
ist Ellipsis, dann sagt Python halt
true. Das ist halt das gleiche Objekt.
Ja.
Genau.
Ja, aber es ist halt irgendwie komisch. Es sieht anders aus
als andere Sachen und man weiß oft nicht so genau, was es denn sein
soll.
Ja.
Ja, ja, ja, ja.
Ansonsten, ich weiß nicht,
was noch ganz interessant ist. Das sortet
irgendwie eine Kopie macht, das sollte man vielleicht wissen,
das kann einem böse beißen, wenn man das nicht weiß.
Also man kann entweder... Aber das ist doch Absicht,
das ist doch extra so. Ja, ja, ist extra so, aber
genau.
Sonst kann man ja PunktSort, oder PunktSort macht
das halt in place, genau.
Ja.
Auch das sorgt oft für Verwirrung,
weil PunktSort gibt nämlich nichts zurück.
Genau, was dazu führt, dass man es nicht chainen kann
und wenn man halt
aus der Data-Science-Welt kommt und dann ist man plötzlich in einer
anderen Welt, dann kriegen Leute
plötzlich irgendwie seltsame Probleme.
Ja, ja, ja.
Ja.
Aber ansonsten,
ja, mir fällt jetzt auch ehrlich gesagt nicht mehr viel ein.
Weiß nicht, wenn jemand noch eine gute Idee hat.
Listen, listen. Noch was?
Auf der Liste nicht mehr genug drauf?
Nö, mehr habe ich hier nicht.
Ja, aber ich würde sagen,
das ging doch jetzt einigermaßen
flott.
Das ging erstaunlich flott jetzt von da.
Ja.
Wir warten jetzt auf die Rückfragen
und beantworten. Genau, und beantworten
muss man zu Listen, alle Rückfragen zu Listen.
Ja, also ihr wisst ja immer, wie Feedback wie immer
hallo.peisenpodcast.de
Ja. Dürft ihr uns gerne schreiben,
wenn ihr irgendwie Feedback-Anregungen, Kritik,
Beleidigungen
zuwerfen wollt. Hatten wir auch schon.
Ja, ja, ja. Ihr selten.
Ganz viele tolle Posten. Vielen Dank
dafür immer. Das mögen wir sehr gerne.
Es gibt ein sehr schönes
Buch von John Scalzi
mit dem Titel Your Hate Mail Will Be
Graded, wo er
einfach Briefe, die er bekommen hat,
veröffentlicht und kommentiert.
Das ist auch eine sehr interessante Art, damit umzugehen.
Wenn man das
öffentlich sagt, dass man das tut, dann kriegt man auch weniger.
Ich mache Profit aus den Sachen,
die er mir schickt.
Ich finde es fair.
Wir haben noch unseren Pick der Woche, des Monats, der Episode.
Okay, ja. Ja, ich habe einen.
Ah, du hast einen. Ich habe mir extra
einen ausgedacht. Ist eine Python-Bibliothek.
Open AI Whisper.
Ah, okay. Vorsicht,
nicht PIP-Install Whisper.
Das ist was anderes, sondern man muss das
aus dem GitHub-Repo installieren.
Ist ein trainiertes
Modell zur Spracherkennung.
Das heißt, es gibt mal ein WAV-File
oder ein MP3 oder sonst irgendwas und der
gibt einem den Text, der da
gesagt wurde, zurück.
Und es funktioniert erstaunlich gut und es funktioniert auch erstaunlich einfach, weil man hat ja oft so ein bisschen, also ich habe oft so ein bisschen Berührungsangst, wenn dann irgendwo steht, ja, hier ist ein Modell veröffentlicht worden. Es ist tatsächlich einfach nur pip install.
Also für verschiedene Modelle gibt es sowieso so coole Sachen.
Und dann drei Zeilen Code und dann tatsächlich Spracherkennung. Also ich habe es ausprobiert und es funktioniert erstaunlich gut.
Das funktioniert das auch mit Deutsch irgendwie halbwegs?
Ja, funktioniert auch mit Deutsch. Es gibt verschiedene Modelle, die für die verschiedenen Sprachen eingestellt sind und das hat tatsächlich mit Deutsch so gut funktioniert. Also ich habe Lorem Ipsum reingeschrieben, reingesagt und er hat dann deutsche Wörter daraus gehört.
Also kennt ihr so ein paar Sachen? Es gibt ja diese ganzen Machine Learning Tools, es gibt ja irgendwie so ein paar, ich nenne es jetzt mal High-Level-Wrapper, Gradio zum Beispiel oder so, wo man einfach so eine App deployen kann, die direkt mit so einem Web-Interface läuft, wo man dann so ein Modell hat, was man dann direkt benutzen kann, irgendwie mit so einem Easy-Web-Interface und sowas, das ist halt total nett zum Dämonen oder Pocken oder MVPen oder sowas.
Ja.
Vielleicht in der Kombination mit Streamlit, falls ihr das kennt.
Das macht auch so
Web-Apps und für so
Data-Science-Krams hast du dann direkt
irgendwie Überblick
über, weiß ich nicht, Analytics,
Data Exploration und dann
kannst du direkt das Modell speichern.
Da kommen jetzt schon wieder meine Berührungsängste, die ich gerade gesagt habe,
weil es so kompliziert ist, da den Einstieg zu finden.
Ja, da müssen wir vielleicht mal
eine eigene Folge zu machen. Aber das wäre nicht mein Pick,
aber das hat mich gerade sehr daran erinnert, dass du eine so eine
schöne, kleine, schnelle Benutzung
von so einem Modell hast. Zum Beispiel Gradio nutzt
jetzt komplett Hugging-Face-Zio.
Da hast du Zugriff über zwei Zeilen
Python-Code auf, weiß nicht, 10.000 Modelle oder so
vortrainierte. Und die du einfach direkt
benutzen kannst. Das ist sehr geil. Ja, auch sehr cool.
Ja, ist auf jeden Fall. Ja, genau. Ist mir auch schon
aufgefallen. Viele Leute packen das
auch auf ihre GitHub-Repos und so.
Ja.
Was auch ganz interessant ist, gerade da,
jetzt habe ich das wieder ein bisschen vergessen,
leider, ich habe
mich mit diesem Audio, ich habe mich ja schon ein bisschen
damit beschäftigt.
dieser Automatic Speech Recognition
und
da früher,
so
ganz, ganz früher, so
2015, 16,
als die Deep Speech Modelle
So lange her, hey?
Also es gab einen riesen Fortschritt, also
irgendwie niemand hat das richtig hingekriegt,
weil irgendwie hat alles nicht funktioniert
und die ersten Modelle,
die so richtig gut funktioniert haben, auch
Deep Learning angewendet auf Speech Recognition
waren halt Deep Speech 1, 2
für Englisch, Chinesisch
und genau, dann gab es
immer da so Verbesserungen und so, aber das Problem
immer für Deutschland, dass es nie funktioniert, weil
beziehungsweise, es gibt ein paar Firmen,
die konnten das gut machen, irgendwie
Microsoft, Google, Apple,
Amazon, weil sie halt die Trainingsappen
dafür haben, ja, die einen dadurch, dass sie halt
Telefone verkaufen, wo die Leute reinquatschen
und die anderen dadurch, dass sie halt irgendwie
den Leuten so irgendwie Lautsprecher
in die Wohnung stellen oder weiß ich nicht
und
ja, die konnten das halt machen, aber
alle anderen eigentlich nicht, weil die Trainingsdaten gab es halt
nicht. Und
dann gab es, gibt es dieses
tolle Common Voice Projekt von Mozilla,
wo dann halt
sozusagen so
Datenspenden gesammelt wurden,
dass man konnte man halt irgendwie ein paar Sätze sagen,
die einem vorgegeben wurden und dann
wurden das halt als Trainingsdaten
verwendet für
dieses Common Voice, für diesen Trainingsdatenkorpus
und die haben auch selber ein Modell trainiert,
das halt basierte, glaube ich, auf Deep Speech
und das dann halt
auf so eine Word-Error-Rate gekommen ist, die halt relativ
gut ist, um halt Leuten anbieten zu können,
okay, ihr könnt die Spracherkennung auch direkt auf eurem
Raspberry Pi oder so machen und müsst
es nicht irgendwie an eine Google-API schicken, weil das ist
eigentlich ja schon nicht so geil, weil die können einen dann ja
quasi ausnehmen, wenn man irgendwie selber
ein Produkt baut oder so, muss immer eine Google-API fragen
und dann sagt Google irgendwann so, ja, nette Gewinne
macht ihr da, wir hätten auch mal gern was von ab.
Ja, oder noch schlimmer finde ich, die können einfach
einen ausschließen oder so.
Genau, und das ist ja auch irgendwie so Mozilla irgendwie so ein bisschen der Zweck, dass man das so ein bisschen irgendwie auch den Leuten ermöglicht, dass sie was tun können.
Also eigentlich alles super gut, aber es gab halt nicht genug Trainingsdaten für Deutsch, dass man das hätte irgendwie wirklich trainieren können.
Aber inzwischen gibt es halt große Fortschritte und zwar, das war ja auch schon bei diesen Natural Language Processing Modellen so,
dass der Riesenschritt zu
oh mein Gott, man kann jetzt da Dinge machen, die
früher waren, eigentlich
eher diese Self-Supervised-Geschichten,
dass man halt die Modelle
dadurch trainiert hat, dass man denen Lückentexte gegeben hat
und man gibt ihnen einfach irgendwelchen Text,
trainiert das Modell dadurch, dass man es
quasi
voraussagen lässt, welches Wort
in dieser Lücke gestanden
hat und es dann halt belohnt oder bestraft,
je nachdem, wie nah das da halt dran war.
Und das heißt, man kann plötzlich, und
dann kann man dieses Modell verwenden für was ganz anderes.
Ja, aber um dieses Problem Lückentext ausfüllen irgendwie hinzubekommen, muss das Modell halt quasi ganz viel über die Sprache lernen und auch über die Konzepte, die da drin sind. Und eigentlich muss es die fast verstehen können, ja. Sonst kann es das halt nicht gut tun. Und wenn man das Modell halt dann mit genug Texten aus dem ganzen Internet halt prügelt, dann kann es das halt irgendwann. Und dann kann man das aber für andere Sachen verwenden, wie für das Problem, was man eigentlich lösen will, was ja vielleicht was ganz anderes ist. Funktioniert dann aber immer noch super.
Und so ähnlich funktioniert das mit dem Audiokram auch. Und zwar, ich weiß jetzt, die genauen Verfahren kenne ich jetzt alle nicht. Ich habe es inzwischen wieder vergessen. Da haben Leute das auf irgendwie, weiß ich nicht, tausenden und Millionen Stunden, ich glaube ein paar hunderttausend Stunden YouTube-Videos trainiert, self-supervised und dann nur ein paar annotierte Trainingsbeispiele für irgendwie.
also dieses Audio war übrigens
jetzt folgender Satz.
Und das hat dann auch schon super funktioniert.
Das heißt quasi, die
Dinger haben self-supervised auf
unfassbaren Mengen Audio gelernt, was
halt so Audio ist und wie das funktioniert, wie Sprache so
funktioniert. Also
in Form der
Audio
quasi Repräsentation.
Und dann hat man
dieses gelernte Modell benutzt, um halt
mit Transkriptionen
nochmal zusätzlich zu verändern.
Ja, dann wirklich halt daraus Text zu machen.
Und das funktioniert total super. Also die
Modelle sind alle inzwischen nochmal viel besser als Deep Speech
und so. Und du brauchst nicht mehr diese gigantischen
Trainingsdatenmengen. Das heißt,
ja, eigentlich ist es quasi,
dieses Problem ist mehr oder weniger gelöst.
Ist halt jetzt nur
so eine Frage, wie kriegt man das gut
irgendwie so umgesetzt, dass es halt gut funktioniert. Also es
gibt ein Modell, das halt super gute
Genauigkeit hat,
aber das braucht halt irre lange. Also bei mir
braucht das halt pro Faktor
30 irgendwie von, also wenn du
zehn Sekunden Audio hast, brauchst du es halt Faktor 30,
um halt Text rauszumachen. Das kann man
praktisch nicht so gut verwenden, weil
eigentlich muss ja Echtzeit sein. Und es braucht dann auch viel
Hauptspeicher und viel und so weiter.
Genau. Also, aber
das wird ja alles auch noch besser, denke ich mal.
Also bei diesem
Whisper sind
verschiedene Modelle dabei und ich habe jetzt nur das
Tiny-Modell ausprobiert. Das hat
einen Faktor ungefähr von 0,2.
Das heißt, in
deine 30 Sekunden Audio
hättest du dann eben in
sechs Sekunden
durchtranskribiert.
Und ich war von der Qualität
sehr positiv überrascht. Für so ein kleines
Modell, sehr, sehr positiv
überrascht, dass das so gut funktioniert. Also musst du auf jeden Fall
mal ausprobieren, Jochen.
Ja, für Podcasts ist das nicht ganz uninteressant, ja.
Und wie gesagt, da gibt es halt mehrere Größen,
je nachdem, wie viel du runterladen willst und wie viele
Grafikkarten du zu verbrennen hast.
Oh, hmm.
und kannst anschauen.
Die kleinen Modelle laufen auch alle auf CPU
und das ist ziemlich cool.
Cool, ja, schön.
Das ist ja praktisch.
Bitte?
Da hast du auch einen Blick.
Oh, ja, ich dachte eigentlich,
ich wollte hier das Specialist picken,
aber das habe ich ja jetzt schon verbrannt.
Mist.
Ich habe gerade immer geguckt.
Es gibt eine andere Geschichte,
die halt, also wenn man irgendwie mal gucken will,
wie, welche Sachen im Code langsam oder schnell sind,
gibt es schöne Profile inzwischen,
hat sich einiges getan
und ein wirklich netter ist
Skalinen. Genau, packe ich auch nicht
so, Shownotes, da kann man
eine Menge sehen.
Ich habe wieder so einen kleinen Pick und ich habe
PureMagic entdeckt, fand ich
ganz cool. Aus der Standard
Lib kann man auf
Falt schmeißen
und weiß dann so ein bisschen,
was das denn für ein Dateiformat sein könnte
oder so.
Ah, die Magic
Numbers.
Mögliche Extensions raus oder so, genau.
Das gibt schon Konfidenz und so.
Ja, cool.
Und das ist in der Standardlib?
Ja, Pyramidic, ja.
Das ist ja Hammer.
Ich weiß nicht, ist das in der Standardlib?
Ich weiß nicht, ich werde es nachgucken.
Ja, es ist bei PyPI auf jeden Fall.
Aber mir ist das aufgefallen,
weil ich es darauf kam, weil ich diesen
Pep gelesen habe von Christian Heimers,
wo halt dann welche denn die
Pakete sind, die das ersetzen können,
die aus der Standardlib duplicated sind.
Ach so, ja.
Ich glaube, Pure Magic ist vielleicht nicht drin, aber ...
Nee, das ist ein externes, aber genau.
Aber es macht genau das, was ich mir da vorgestellt habe.
Ah, okay. Ja, ist ja auch interessant.
Cool, cool, cool.
Ich habe noch einen zweiten Pick, in Anführungszeichen.
Noch einen Pick.
Weil das Post-Pick,
weil das zum Thema des heutigen Abends sehr gut passt.
Oh, okay.
Nannybell.se
Das ist ein soziales Netzwerk, so ähnlich wie Facebook,
aber es läuft immer nur lokal auf dem eigenen Telefon.
Und Datenaustausch funktioniert nur über Bluetooth
mit Geräten, die in der Nähe sind.
Das heißt, die Posts, die man dann schreibt,
die verbreiten sich dann eben langsam in der sozialen Hülle,
die halt in der Nähe ist.
Witzig.
Das finde ich ein sehr schönes Gegenmodell zu dem,
was man sonst so hat.
Ich werde sicherlich keins laufen lassen.
Also das ist für die Leute, die nicht miteinander reden,
sondern nebeneinander auf ihren Handys rumhacken, oder?
Genau.
Wenn man sich Bilder teilen möchte,
dann ist das gut.
Nein, aber das, also
ich meine, wenn du jemanden
kennst, der jemanden kennt, der jemanden kennt, der jemanden kennt,
dann kannst du auch bei dem die Posts sehen, aber halt
erst langsamer.
Die verbreiten sich dann
eben durch dieses Netzwerk durch.
Das finde ich irgendwie
Aber verbreiten sich alles zu allen?
Also geht das dann weiter?
Nee, ich glaube, ich weiß nicht genau,
wie die das gelöst haben.
Aber man kann irgendwie halt folgen
und das muss ja dann irgendwie schließlich da ankommen.
Also es wird irgendwie so ein, keine Ahnung,
Distributed Hashtable
Routing sein,
was sich halt langsam, was da halt langsam
hinkonvergiert.
Interessant.
Okay, aber ich glaube, das haben wir es heute
tatsächlich dann doch geschafft. Vielen Dank, dass ihr
bis hierhin durchgehalten habt und
ich fand es war eine schöne Folge, hat mir viel Spaß gemacht.
Vielen Dank Johannes, dass du wieder dabei warst.
Ja, sehr gerne, mir hat es auch viel Spaß gemacht.
Danke Jochen. Und ich freue mich schon
auf die nächste Listen-Folge. Bleibt uns gewogen
und hört uns zu.
Vielen Dank für eure Aufmerksamkeit.
Tschüssi.